Files
Bubberstation/code/modules/bitrunning/server/util.dm
SkyratBot 8495b00be9 [MIRROR] Cleans up signal use in bitrunning [NO GBP] [MDB IGNORE] (#24738)
* Cleans up signal use in bitrunning [NO GBP]

* Update avatar_connection.dm

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-11-02 17:47:36 -04:00

131 lines
4.5 KiB
Plaintext

#define REDACTED "???"
#define MAX_DISTANCE 4 // How far crates can spawn from the server
/// Resets the cooldown state and updates icons
/obj/machinery/quantum_server/proc/cool_off()
is_ready = TRUE
update_appearance()
radio.talk_into(src, "Thermal systems within operational parameters. Proceeding to domain configuration.", RADIO_CHANNEL_SUPPLY)
/// Compiles a list of available domains.
/obj/machinery/quantum_server/proc/get_available_domains()
var/list/levels = list()
for(var/datum/lazy_template/virtual_domain/domain as anything in available_domains)
if(initial(domain.test_only))
continue
var/can_view = initial(domain.difficulty) < scanner_tier && initial(domain.cost) <= points + 5
var/can_view_reward = initial(domain.difficulty) < (scanner_tier + 1) && initial(domain.cost) <= points + 3
levels += list(list(
"cost" = initial(domain.cost),
"desc" = can_view ? initial(domain.desc) : "Limited scanning capabilities. Cannot infer domain details.",
"difficulty" = initial(domain.difficulty),
"id" = initial(domain.key),
"name" = can_view ? initial(domain.name) : REDACTED,
"reward" = can_view_reward ? initial(domain.reward_points) : REDACTED,
))
return levels
/// If there are hosted minds, attempts to get a list of their current virtual bodies w/ vitals
/obj/machinery/quantum_server/proc/get_avatar_data()
var/list/hosted_avatars = list()
for(var/datum/weakref/avatar_ref in avatar_connection_refs)
var/datum/component/avatar_connection/connection = avatar_ref.resolve()
if(isnull(connection))
avatar_connection_refs.Remove(connection)
continue
var/mob/living/creature = connection.parent
var/mob/living/pilot = connection.old_body_ref?.resolve()
hosted_avatars += list(list(
"health" = creature.health,
"name" = creature.name,
"pilot" = pilot,
"brute" = creature.getBruteLoss(),
"burn" = creature.getFireLoss(),
"tox" = creature.getToxLoss(),
"oxy" = creature.getOxyLoss(),
))
return hosted_avatars
/// Gets a random available domain given the current points. Weighted towards higher cost domains.
/obj/machinery/quantum_server/proc/get_random_domain_id()
if(points < 1)
return
var/list/random_domains = list()
var/total_cost = 0
for(var/datum/lazy_template/virtual_domain/available as anything in subtypesof(/datum/lazy_template/virtual_domain))
var/init_cost = initial(available.cost)
if(!initial(available.test_only) && init_cost > 0 && init_cost < 4 && init_cost <= points)
random_domains += list(list(
cost = init_cost,
id = initial(available.key),
))
var/random_value = rand(0, total_cost)
var/accumulated_cost = 0
for(var/available as anything in random_domains)
accumulated_cost += available["cost"]
if(accumulated_cost >= random_value)
domain_randomized = TRUE
return available["id"]
/// Locates any turfs with forges on them, returns a random one
/obj/machinery/quantum_server/proc/get_random_nearby_forge()
var/list/nearby_forges = list()
for(var/obj/machinery/byteforge/forge in oview(MAX_DISTANCE, src))
nearby_forges += forge
return pick(nearby_forges)
/// Gets all mobs originally generated by the loaded domain and returns a list that are capable of being antagged
/obj/machinery/quantum_server/proc/get_valid_domain_targets()
// A: No one is playing
// B: The domain is not loaded
// C: The domain is shutting down
// D: There are no mobs
if(!length(avatar_connection_refs) || isnull(generated_domain) || !is_ready || !is_operational || !length(mutation_candidate_refs))
return list()
for(var/datum/weakref/creature_ref as anything in mutation_candidate_refs)
var/mob/living/creature = creature_ref.resolve()
if(isnull(creature) || creature.mind)
mutation_candidate_refs.Remove(creature_ref)
return shuffle(mutation_candidate_refs)
/// Locates any turfs with forges on them
/obj/machinery/quantum_server/proc/get_nearby_forges()
var/list/obj/machinery/byteforge/nearby_forges = list()
for(var/obj/machinery/byteforge/forge in oview(MAX_DISTANCE, src))
nearby_forges += forge
return nearby_forges
/// Severs any connected users
/obj/machinery/quantum_server/proc/sever_connections()
if(isnull(generated_domain) || !length(avatar_connection_refs))
return
SEND_SIGNAL(src, COMSIG_BITRUNNER_QSRV_SEVER)
/// Do some magic teleport sparks
/obj/machinery/quantum_server/proc/spark_at_location(obj/cache)
playsound(cache, 'sound/magic/blink.ogg', 50, TRUE)
var/datum/effect_system/spark_spread/quantum/sparks = new()
sparks.set_up(5, 1, get_turf(cache))
sparks.start()
#undef REDACTED
#undef MAX_DISTANCE