mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-19 21:46:42 +00:00
## About The Pull Request Atomized #78997 Broke up duplicate signal usage - though they do the same thing, this is convention & it makes it easier to debug Removed custom alert subtypes in favor of just setting values directly Removed some unnecessary vars like the console ref from the server Since I'm just copying this over, it has added exam text for net pods, which fixes an issue reported to me in Discord ## Why It's Good For The Game Code improvement ## Changelog 🆑 add: Added some clarity to the range of netpods (4 tiles) in their exam text. /🆑
131 lines
4.5 KiB
Plaintext
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
|