forked from shiptest-ss13/Shiptest
-
-
Notifications
You must be signed in to change notification settings - Fork 78
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
272 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
|
||
#### Список PRов | ||
|
||
- https://github.com/CeladonSS13/Shiptest/pulls/##### | ||
<!-- | ||
Ссылки на PRы, связанные с модом: | ||
- Создание | ||
- Большие изменения | ||
--> | ||
|
||
<!-- Название мода. Не важно на русском или на английском. --> | ||
## Fancy Deletion Timer | ||
|
||
ID мода: CELADON_FANCY_DELETION_TIMER | ||
<!-- | ||
Название модпака прописными буквами, СОЕДИНЁННЫМИ_ПОДЧЁРКИВАНИЕМ, | ||
которое ты будешь использовать для обозначения файлов. | ||
При запуске скрипта выставляется автоматически. | ||
Приставка CELADON гарантирует уникальность | ||
модпака. Этот ID будет использоваться для обозначения | ||
изменений в кор коде, если того потребуется. | ||
--> | ||
|
||
### Описание мода | ||
|
||
Добавляет компонент, отвечающий за удаление атомов. | ||
<!-- | ||
Что он делает, что добавляет: что, куда, зачем и почему - всё здесь. | ||
А также любая полезная информация. | ||
--> | ||
|
||
### Используется в других проектах? | ||
- Нет | ||
<!-- | ||
ВНИМАНИЕ! | ||
Заполняется другими авторами, кто использует этот модпак или | ||
его часть в других модпаках! Для Автора модпака внимательно | ||
отслеживать данный пункт при изменении своего кода! | ||
Пример заполнения: `Используется часть кода для модпака EXAMP_EXAM` | ||
--> | ||
|
||
### Изменения *кор кода* | ||
|
||
- Отсутствуют | ||
<!-- | ||
Если вы редактировали какие-либо процедуры или переменные в кор коде, | ||
они должны быть указаны здесь. | ||
Нужно указать и файл, и процедуры/переменные. | ||
Изменений нет - напиши "Отсутствуют" | ||
Примеры: `code/modules/mob/living.dm`: `proc/overriden_proc`, `var/overriden_var` | ||
--> | ||
|
||
### Оверрайды | ||
|
||
- Отсутствуют | ||
<!-- | ||
Если ты добавлял новый модульный оверрайд, его нужно указать здесь. | ||
Здесь указываются оверрайды в твоём моде и папке `_master_files` | ||
Изменений нет - напиши "Отсутствуют" | ||
Примеры: | ||
- `mods/_master_files/sound/my_cool_sound.ogg` | ||
- `mods/_master_files/code/my_modular_override.dm`: `proc/overriden_proc`, `var/overriden_var` | ||
--> | ||
|
||
### Дефайны | ||
|
||
- Отсутствуют | ||
<!-- | ||
Если требовалось добавить какие-либо дефайны, укажи файлы, | ||
в которые ты их добавил, а также перечисли имена. | ||
И то же самое, если ты используешь дефайны, определённые другим модом. | ||
Не используешь - напиши "Отсутствуют" | ||
Примеры: `code/__defines/~mod_celadon/fancy_deletion_timer.dm`: `FANCY_DELETION_TIMER_SPEED_MULTIPLIER`, `FANCY_DELETION_TIMER_SPEED_BASE` | ||
--> | ||
|
||
### Используемые файлы, не содержащиеся в модпаке | ||
|
||
- Отсутствуют | ||
<!-- | ||
Будь то немодульный файл или модульный файл, который не содержится в папке, | ||
принадлежащей этому конкретному моду, он должен быть упомянут здесь. | ||
Хорошими примерами являются иконки или звуки, которые используются одновременно | ||
несколькими модулями, или что-либо подобное. | ||
Примеры: `mods/_master_files/icons/obj/alien.dmi` | ||
--> | ||
|
||
### Авторы | ||
|
||
Ganza9991 | ||
<!-- | ||
Здесь находится твой никнейм | ||
Если работал совместно - никнеймы тех, кто помогал. | ||
В случае порта чего-либо должна быть ссылка на источник. | ||
--> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
/// name - название модпака. Используется для поиска других модпаков в init. | ||
/// desc - описание для модпака. Может использоваться для списка глаголов модпака в качестве описания. | ||
/// author - автор(ы) этого модпака. | ||
|
||
/datum/modpack/fancy_deletion_timer | ||
name = "Fancy Deletion Timer" | ||
desc = "Добавляет компонент, отвечающий за удаление атомов." | ||
author = "Ganza9991" | ||
|
||
/// Эти проки нужны, для того чтобы инициализировать датумы в определенный момент времени | ||
/// сборки билда. Инициализация обновляет данные в билде повторно, перезаписывая новыми значениями | ||
/// из модпака. Но иногда, сама инциализация есть и вызывается в кор коде в определенный момент, и | ||
/// тогда такие проки не нужны и вовсе. Также проки не нужны если в модпаке только объекты находятся. | ||
/// Если эти конструкции не нужны, просто закоментируй их! | ||
/// (можешь использовать все три, но запуск билда увеличится на 0.1 сек, за каждый датум в модпаке) | ||
|
||
// Инициализация ДО | ||
/datum/modpack/fancy_deletion_timer/pre_initialize() | ||
. = ..() | ||
|
||
// Инициализация ВОВРЕМЯ | ||
/datum/modpack/fancy_deletion_timer/initialize() | ||
. = ..() | ||
|
||
// Инициализация ПОСЛЕ | ||
/datum/modpack/fancy_deletion_timer/post_initialize() | ||
. = ..() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
#ifndef MODPACK_CELADON_FANCY_DELETION_TIMER | ||
#define MODPACK_CELADON_FANCY_DELETION_TIMER | ||
|
||
#include "_fancy_deletion_timer.dm" | ||
#include "code/fancy_deletion_timer.dm" | ||
#include "code/meteorcarp.dm" | ||
|
||
#endif |
128 changes: 128 additions & 0 deletions
128
mod_celadon/fancy_deletion_timer/code/fancy_deletion_timer.dm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
/* | ||
Fancy Timer | ||
Component that handles fancy deleting with timer | ||
Can contain an atom which will spawn upon deletion. | ||
Intended use with atoms only | ||
*/ | ||
|
||
/datum/component/fancy_deleting_timer | ||
|
||
///In seconds, so dont use time defines here | ||
var/timer | ||
var/is_ticking | ||
|
||
/// How many times did we failed deleting the parent when timer ended | ||
var/times_we_failed_deleting | ||
var/deleting_attempts = 5 | ||
var/ignore_client_in_sight = FALSE | ||
|
||
/// If TRUE works as whitelist; checks for THESE turfs to be deleted on. If FALSE works as blacklist; will NOT be deleted on these turfs upon check | ||
var/turf_whitelist = TRUE | ||
var/list/turf/T = list() | ||
|
||
/// Atom to spawn upon deletion of parent | ||
var/atom/effect | ||
/// Where we will spawn our effect. Handles: "loc"; "turf" | ||
var/effect_place | ||
|
||
var/atom/A | ||
|
||
//_________________HELPER PROCS______________________ | ||
/// Handles the timer start. Not in initialize in cases when you want to add a timer but dont want to start it right away. | ||
/datum/component/fancy_deleting_timer/proc/start_the_timer(time) | ||
if(!A && parent) | ||
A = parent | ||
timer = time ? time : timer | ||
is_ticking = TRUE | ||
if(!active_timers) | ||
addtimer(CALLBACK(src, PROC_REF(tick_tock)), 1 SECONDS) | ||
return is_ticking | ||
|
||
/datum/component/fancy_deleting_timer/proc/stop_the_timer() | ||
is_ticking = FALSE | ||
LAZYNULL(active_timers) | ||
return | ||
|
||
/datum/component/fancy_deleting_timer/proc/delete_the_timer() | ||
Destroy(0,1) | ||
|
||
//___________________________________________________ | ||
|
||
/datum/component/fancy_deleting_timer/proc/tick_tock() | ||
addtimer(CALLBACK(src, PROC_REF(tick_tock)), 1 SECONDS) | ||
if(!timer) | ||
batteries_out() | ||
return | ||
else if(is_ticking) | ||
timer-- | ||
|
||
/datum/component/fancy_deleting_timer/proc/spawn_effect() | ||
if(effect) | ||
switch(effect_place) | ||
if("loc") | ||
effect_place = A.loc | ||
// if("turf") | ||
// effect_place = get_turf(parent) | ||
else | ||
effect_place = get_turf(parent) | ||
new effect(effect_place) | ||
|
||
/datum/component/fancy_deleting_timer/proc/handle_list() | ||
if(T) | ||
switch(turf_whitelist) | ||
if(TRUE) // whitelist | ||
if(!is_type_in_list(get_turf(parent), T)) | ||
return FALSE | ||
else // blacklist | ||
if(is_type_in_list(get_turf(parent), T)) | ||
return FALSE | ||
return TRUE | ||
|
||
/datum/component/fancy_deleting_timer/Initialize(...) | ||
. = ..() | ||
|
||
/datum/component/fancy_deleting_timer/proc/batteries_out() | ||
if(handle_list() && clients_in_sight()) | ||
spawn_effect() | ||
qdel(parent) | ||
else if(times_we_failed_deleting >= deleting_attempts) | ||
delete_the_timer() | ||
if(A) | ||
message_admins("Fancy Timer in '[A]' in '[get_area_name(A)]' called to deletion [times_we_failed_deleting] times, but did not succeded. Deleting the Fancy Timer. [ADMIN_JMP(A)]") | ||
else | ||
timer += 30 | ||
times_we_failed_deleting++ | ||
|
||
/datum/component/fancy_deleting_timer/proc/clients_in_sight() | ||
for(var/mob/living/L in view(parent)) | ||
if(L.client) | ||
return FALSE | ||
return TRUE | ||
|
||
//_________________ vv href ______________________ | ||
|
||
#define VV_HK_START_TIMER "start_the_timer" | ||
#define VV_HK_STOP_TIMER "stop_the_timer" | ||
#define VV_HK_DELETE_TIMER "delete_the_timer" | ||
|
||
/datum/component/fancy_deleting_timer/vv_get_dropdown() | ||
. = ..() | ||
VV_DROPDOWN_OPTION("", "--- Fancy Timer component ---") | ||
VV_DROPDOWN_OPTION(VV_HK_START_TIMER, "Start the timer") | ||
VV_DROPDOWN_OPTION(VV_HK_STOP_TIMER, "Stop the timer") | ||
VV_DROPDOWN_OPTION(VV_HK_DELETE_TIMER, "Delete the timer") | ||
|
||
/datum/component/fancy_deleting_timer/vv_do_topic(list/href_list) | ||
. = ..() | ||
if(href_list[VV_HK_START_TIMER]) | ||
var/temp = input(usr, "Set the timer to... (in seconds)", "Set timer") as num|null | ||
start_the_timer(temp) | ||
to_chat(usr, "Timer on [parent] has been set to [timer] seconds.") | ||
if(href_list[VV_HK_STOP_TIMER]) | ||
stop_the_timer() | ||
to_chat(usr, "Timer on [parent] stopped at [timer] seconds.") | ||
if(href_list[VV_HK_DELETE_TIMER]) | ||
delete_the_timer() | ||
to_chat(usr, "Timer on [parent] is deleted.") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
/obj/effect/meteor/carp/make_debris() | ||
for(var/throws = dropamt, throws > 0, throws--) | ||
var/mob/living/thing_to_spawn = pick(meteordrop) | ||
thing_to_spawn = new thing_to_spawn(get_turf(src)) | ||
|
||
thing_to_spawn.AddComponent(/datum/component/fancy_deleting_timer) | ||
var/datum/component/fancy_deleting_timer/fdt = thing_to_spawn.GetComponent(/datum/component/fancy_deleting_timer) | ||
fdt.turf_whitelist = 1 | ||
fdt.T = list(/turf/open/space) | ||
fdt.parent = thing_to_spawn | ||
fdt.start_the_timer(360) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters