[MIRROR] Generic Machines Part 2 - Items and Effects (#8366)

Co-authored-by: SatinIsle <98125273+SatinIsle@users.noreply.github.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2
2024-05-10 15:15:56 -07:00
committed by GitHub
parent add87783e9
commit 9290d6f2f4
5 changed files with 341 additions and 5 deletions

View File

@@ -16,8 +16,11 @@
var/text_activated = "The strucutre turns on."
var/text_deactivated = "The structure turns off."
var/effect = 0
var/object = 0
var/sound_activated = 0
var/delay_time = 0
var/icon_on = 0
var/icon_off = 0
/obj/structure/generic_structure/attack_hand(mob/user)
if(activatable_hand)
@@ -27,12 +30,53 @@
return 0
on = 1
icon_state = icon_state_on
if(icon_on)
icon = icon_on
else
icon = 'icons/obj/props/decor.dmi'
icon_state = icon_state_on
src.visible_message("<span class='notice'>[text_activated]</span>")
update_icon()
if(effect)
if(effect == 1)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
if(effect == 2)
for(var/obj/machinery/light/L in machines)
if(L.z != src.z || get_dist(src,L) > 10)
continue
else
L.flicker(10)
if(effect == 3)
for (var/mob/O in viewers(src, null))
if(get_dist(src, O) > 3)
continue
var/flash_time = 10
if(istype(O, /mob/living/carbon/human))
var/mob/living/carbon/human/H = O
//VOREStation Edit Start
if(H.nif && H.nif.flag_check(NIF_V_FLASHPROT,NIF_FLAGS_VISION))
H.nif.notify("High intensity light detected, and blocked!",TRUE)
continue
//VOREStation Edit End
if(!H.eyecheck() <= 0)
continue
flash_time *= H.species.flash_mod
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
if(!E)
return
if(E.is_bruised() && prob(E.damage + 50))
H.flash_eyes()
E.damage += rand(1, 5)
else
if(!O.blinded && isliving(O))
var/mob/living/L = O
L.flash_eyes()
O.Weaken(flash_time)
if(effect == 4)
var/atom/o = new object(get_turf(src))
src.visible_message("<span class='notice'>[src] has produced [o]!</span>")
if(sound_activated)
playsound(src, sound_activated, 50, 1)
else if(togglable)
@@ -41,6 +85,10 @@
return 0
on = 0
icon_state = icon_state_off
if(icon_off)
icon = icon_off
else
icon = 'icons/obj/props/decor.dmi'
src.visible_message("<span class='notice'>[text_deactivated]</span>")
update_icon()
return ..()
@@ -67,6 +115,9 @@
var/s_text_deactivated = 0
var/s_effect = 0
var/s_sound = 0
var/s_object = 0
var/s_icon = 0
var/s_icon2 = 0
var/list/icon_state_options = list("bsb_off",
"bsb_on",
"bsc",
@@ -133,7 +184,8 @@
"ob_warhead_2",
"ob_warhead_3",
"ob_warhead_4",
"angel")
"angel",
"Upload Own Sprite")
var/list/sound_options = list('sound/effects/alert.ogg',
'sound/effects/bamf.ogg',
'sound/effects/bang.ogg',
@@ -194,6 +246,8 @@
if(check_wrenchable == "Yes")
s_wrenchable = 1
var/s_icon_state_off = tgui_input_list(src, "Choose starting icon state:", "icon_state_off", icon_state_options)
if(s_icon_state_off == "Upload Own Sprite")
s_icon = input(usr, "Choose an image file to upload. Images that are not 32x32 will need to have their positions offset.","Upload Icon") as null|file
var/check_activatable = tgui_alert(src, "Allow it to be turned on?", "activatable", list("Yes", "No", "Cancel"))
if(check_activatable == "Cancel")
return
@@ -211,14 +265,23 @@
s_text_deactivated = tgui_input_text(src, "Deactivation text:", "Deactivation Text")
s_togglable = 1
s_icon_state_on = tgui_input_list(src, "Choose activated icon state:", "icon_state_on", icon_state_options)
if(s_icon_state_on == "Upload Own Sprite")
s_icon2 = input(usr, "Choose an image file to upload. Images that are not 32x32 will need to have their positions offset.","Upload Icon") as null|file
s_delay = tgui_input_number(src, "Do you want it to take time to put turn on? Choose a number of deciseconds to activate, or 0 for instant.", "Delay")
var/check_effect = tgui_alert(src, "Spark when turning on?", "Spark?", list("Yes", "No", "Cancel"))
var/check_effect = tgui_alert(src, "Produce an effect on activation?", "Effect?", list("No", "Spark", "Flicker Lights", "Flash", "Spawn Item", "Cancel"))
if(check_effect == "Cancel")
return
if(check_effect == "No")
s_effect = 0
if(check_effect == "Yes")
if(check_effect == "Spark")
s_effect = 1
if(check_effect == "Flicker Lights")
s_effect = 2
if(check_effect == "Flash")
s_effect = 3
if(check_effect == "Spawn Item")
s_effect = 4
s_object = get_path_from_partial_text()
var/check_sound = tgui_alert(src, "Play a sound when turning on?", "Sound", list("Yes", "No", "Cancel"))
if(check_sound == "Cancel")
return
@@ -241,5 +304,35 @@
P.effect = s_effect
P.sound_activated = s_sound
P.delay_time = s_delay
P.object = s_object
P.icon_state = s_icon_state_off
P.icon_off = s_icon
P.icon_on = s_icon2
if(s_icon)
P.icon = s_icon
P.update_icon()
/client/proc/get_path_from_partial_text(default_path)
var/desired_path = tgui_input_text(usr, "Enter full or partial typepath.","Typepath","[default_path]")
if(!desired_path) //VOREStation Add - If you don't give it anything it builds a list of every possible thing in the game and crashes your client.
return //VOREStation Add - And the main way for it to do that is to push the cancel button, which should just do nothing. :U
var/list/types = typesof(/atom)
var/list/matches = list()
for(var/path in types)
if(findtext("[path]", desired_path))
matches += path
if(matches.len==0)
tgui_alert_async(usr, "No results found. Sorry.")
return
var/result = null
if(matches.len==1)
result = matches[1]
else
result = tgui_input_list(usr, "Select an atom type", "Spawn Atom", matches, strict_modern = TRUE)
return result