/
Lachklen
/
MYtgstation
Обзор
Документация
Войти
/
Lachklen
/
MYtgstation
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
code/modules/bitrunning/components/virtual_entity.dm
44 строки
2 KB
Jeremiah
Fixes a bitrunning runtime & adds a component initialize result (#90099)
20 мар 2025, 15:51
Не верифицирован
20 мар 2025, 15:51
70d3565
Код
Авторство
О чём код?
/// Handles all special considerations for "virtual entities" such as bitrunning ghost roles or digital anomaly antagonists. /datum/component/virtual_entity /// The cooldown for balloon alerts, so the player isn't spammed while trying to enter a restricted area. COOLDOWN_DECLARE(OOB_cooldown) /datum/component/virtual_entity/Initialize(obj/machinery/quantum_server) if(quantum_server.obj_flags & EMAGGED) jailbreak_mobs() return COMPONENT_REDUNDANT RegisterSignal(parent, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_parent_pre_move)) RegisterSignal(quantum_server, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emagged)) /// Self-destructs the component, allowing free-roam by all entities with this restriction. /datum/component/virtual_entity/proc/jailbreak_mobs() to_chat(parent, span_bolddanger("You shiver for a moment with a sense of clarity you haven't felt before.")) to_chat(parent, span_notice("You could go <i>anywhere</i>, do <i>anything</i>! You could leave this simulation right now if you wanted!")) to_chat(parent, span_danger("But be warned, quantum entanglement will interfere with any previous lives.")) to_chat(parent, span_notice("You'll have just one chance to go nova, and there's no turning back.")) /// Remove any restrictions AFTER the mob has spawned /datum/component/virtual_entity/proc/on_emagged(datum/source) SIGNAL_HANDLER jailbreak_mobs() qdel(src) /// Prevents entry to a certain area if it has flags preventing virtual entities from entering. /datum/component/virtual_entity/proc/on_parent_pre_move(atom/movable/source, atom/new_location) SIGNAL_HANDLER var/area/location_area = get_area(new_location) if(!location_area) stack_trace("Virtual entity entered a location with no area!") return if(location_area.area_flags & VIRTUAL_SAFE_AREA) source.balloon_alert(source, "out of bounds!") COOLDOWN_START(src, OOB_cooldown, 2 SECONDS) return COMPONENT_MOVABLE_BLOCK_PRE_MOVE