mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 02:16:05 +00:00
Converted a bunch of stuff to the new thing (#27556)
* removed old on_density_change thing * converted on_resist to lazy events * Converted on_spellcast to lazy events * Converted on_uattack to lazy events, breaks spell channeling * Converted on_ruattack to lazy events, unbreaks channeled spells * Converted on_logout to lazy events * Converted on_damaged to lazy_events * Converted on_death to lazy_events * Converted on_clickon to lazy_events * Converted on_attackhand to lazy_events, added on_bumped
This commit is contained in:
@@ -489,10 +489,8 @@ var/global/list/radial_menus = list()
|
|||||||
// Copying atoms is stupid and this is a stupid solution
|
// Copying atoms is stupid and this is a stupid solution
|
||||||
var/list/variables_not_to_be_copied = list(
|
var/list/variables_not_to_be_copied = list(
|
||||||
"type","loc","locs","vars","parent","parent_type","verbs","ckey","key",
|
"type","loc","locs","vars","parent","parent_type","verbs","ckey","key",
|
||||||
"group","on_density_change","registered_events",
|
"group","registered_events",
|
||||||
"on_resist",
|
"on_attackby",
|
||||||
"on_spellcast","on_uattack","on_ruattack","on_logout","on_damaged",
|
|
||||||
"on_death","on_clickon","on_attackhand","on_attackby",
|
|
||||||
"on_explode","on_projectile","in_chamber","power_supply","contents",
|
"on_explode","on_projectile","in_chamber","power_supply","contents",
|
||||||
"x","y","z"
|
"x","y","z"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -90,6 +90,68 @@
|
|||||||
// atom/atom: the atom whose density changed.
|
// atom/atom: the atom whose density changed.
|
||||||
/lazy_event/on_density_change
|
/lazy_event/on_density_change
|
||||||
|
|
||||||
|
// Called whenever a mob uses the "resist" verb.
|
||||||
|
// Arguments:
|
||||||
|
// mob/user: the mob that's resisting
|
||||||
|
/lazy_event/on_resist
|
||||||
|
|
||||||
|
// Called whenever a mob casts a spell.
|
||||||
|
// Arguments:
|
||||||
|
// spell/spell: the spell that's being cast.
|
||||||
|
// mob/user: the mob that's casting the spell.
|
||||||
|
// list/targets: the list of targets the spell is being cast against. May not always be a list.
|
||||||
|
/lazy_event/on_spellcast
|
||||||
|
|
||||||
|
// Called whenever a mob attacks something with an empty hand.
|
||||||
|
// Arguments:
|
||||||
|
// atom/atom: The atom that's being attacked.
|
||||||
|
/lazy_event/on_uattack
|
||||||
|
|
||||||
|
// Called whenever a mob attacks something while restrained.
|
||||||
|
// Arguments:
|
||||||
|
// atom/atom: The atom that's being attacked.
|
||||||
|
/lazy_event/on_ruattack
|
||||||
|
|
||||||
|
// Called by mob/Logout().
|
||||||
|
// Arguments:
|
||||||
|
// mob/user: The mob that's logging out.
|
||||||
|
/lazy_event/on_logout
|
||||||
|
|
||||||
|
// Called whenever a mob takes damage.
|
||||||
|
// Truthy return values will prevent the damage.
|
||||||
|
// Arguments:
|
||||||
|
// kind: the kind of damage the mob is being dealt.
|
||||||
|
// amount: the amount of damage the mob is being dealt.
|
||||||
|
/lazy_event/on_damaged
|
||||||
|
|
||||||
|
// Called whenever a mob dies.
|
||||||
|
// Arguments:
|
||||||
|
// mob/user: The mob that's dying.
|
||||||
|
// body_destroyed: Whether the mob is about to be gibbed.
|
||||||
|
/lazy_event/on_death
|
||||||
|
|
||||||
|
// Called by /mob/proc/ClickOn.
|
||||||
|
// The list of modifiers can be changed by the event listeners.
|
||||||
|
// Arguments:
|
||||||
|
// mob/user: the user that's doing the clicking.
|
||||||
|
// list/modifiers: list of key modifiers (shift, alt, etcetera).
|
||||||
|
// atom/target: the atom that's being clicked on.
|
||||||
|
/lazy_event/on_clickon
|
||||||
|
|
||||||
|
// Called when an atom is attacked with an empty hand.
|
||||||
|
// Currently only used by xenoarch artifacts, should probably be moved to the base proc.
|
||||||
|
// Arguments:
|
||||||
|
// mob/user: the guy who is attacking.
|
||||||
|
// atom/target: the atom that's being attacked.
|
||||||
|
/lazy_event/on_attackhand
|
||||||
|
|
||||||
|
// Called whenever an atom bumps into another.
|
||||||
|
// Currently only used by xenoarch artifacts, should probably be moved to the base proc.
|
||||||
|
// Arguments:
|
||||||
|
// mob/user: the guy who is bumping.
|
||||||
|
// atom/target: the atom that's being bumped into.
|
||||||
|
/lazy_event/on_bumped
|
||||||
|
|
||||||
/datum
|
/datum
|
||||||
/// Associative list of type path -> list(),
|
/// Associative list of type path -> list(),
|
||||||
/// where the type path is a descendant of /event_type.
|
/// where the type path is a descendant of /event_type.
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
RestrainedClickOn(A)
|
RestrainedClickOn(A)
|
||||||
else
|
else
|
||||||
*/
|
*/
|
||||||
if(INVOKE_EVENT(on_uattack,list("atom"=A))) //This returns 1 when doing an action intercept
|
if(lazy_invoke_event(/lazy_event/on_uattack, list("atom" = A))) //This returns 1 when doing an action intercept
|
||||||
return
|
return
|
||||||
A.add_hiddenprint(src)
|
A.add_hiddenprint(src)
|
||||||
A.attack_ai(src)
|
A.attack_ai(src)
|
||||||
|
|||||||
@@ -75,7 +75,8 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
var/list/modifiers = params2list(params)
|
var/list/modifiers = params2list(params)
|
||||||
on_clickon.Invoke(list(
|
lazy_invoke_event(/lazy_event/on_clickon, list(
|
||||||
|
"user" = src,
|
||||||
"modifiers" = modifiers,
|
"modifiers" = modifiers,
|
||||||
"target" = A
|
"target" = A
|
||||||
))
|
))
|
||||||
@@ -151,7 +152,7 @@
|
|||||||
else
|
else
|
||||||
if(ismob(A) || istype(held_item, /obj/item/weapon/grab))
|
if(ismob(A) || istype(held_item, /obj/item/weapon/grab))
|
||||||
delayNextAttack(10)
|
delayNextAttack(10)
|
||||||
if(INVOKE_EVENT(on_uattack,list("atom"=A))) //This returns 1 when doing an action intercept
|
if(lazy_invoke_event(/lazy_event/on_uattack, list("atom" = A))) //This returns 1 when doing an action intercept
|
||||||
return
|
return
|
||||||
UnarmedAttack(A, 1, params)
|
UnarmedAttack(A, 1, params)
|
||||||
|
|
||||||
@@ -182,7 +183,7 @@
|
|||||||
else
|
else
|
||||||
if(ismob(A))
|
if(ismob(A))
|
||||||
delayNextAttack(10)
|
delayNextAttack(10)
|
||||||
if(INVOKE_EVENT(on_uattack,list("atom"=A))) //This returns 1 when doing an action intercept
|
if(lazy_invoke_event(/lazy_event/on_uattack, list("atom" = A))) //This returns 1 when doing an action intercept
|
||||||
return
|
return
|
||||||
RangedAttack(A, params)
|
RangedAttack(A, params)
|
||||||
|
|
||||||
@@ -244,8 +245,7 @@
|
|||||||
Not currently used by anything but could easily be.
|
Not currently used by anything but could easily be.
|
||||||
*/
|
*/
|
||||||
/mob/proc/RestrainedClickOn(var/atom/A)
|
/mob/proc/RestrainedClickOn(var/atom/A)
|
||||||
if(INVOKE_EVENT(on_ruattack,list("atom"=A))) //This returns 1 when doing an action intercept
|
lazy_invoke_event(/lazy_event/on_ruattack, list("atom" = A))
|
||||||
return
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Middle click
|
Middle click
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
aicamera.captureimage(A, src)
|
aicamera.captureimage(A, src)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(INVOKE_EVENT(on_uattack,list("atom"=A)))
|
if(lazy_invoke_event(/lazy_event/on_uattack, list("atom" = A)))
|
||||||
return
|
return
|
||||||
|
|
||||||
var/obj/item/W = get_active_hand()
|
var/obj/item/W = get_active_hand()
|
||||||
|
|||||||
@@ -74,9 +74,6 @@
|
|||||||
/atom/proc/requires_dexterity(mob/user)
|
/atom/proc/requires_dexterity(mob/user)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
/mob/living/carbon/human/RestrainedClickOn(var/atom/A)
|
|
||||||
..()
|
|
||||||
|
|
||||||
/mob/living/carbon/human/RangedAttack(var/atom/A)
|
/mob/living/carbon/human/RangedAttack(var/atom/A)
|
||||||
if(!gloves && !mutations.len)
|
if(!gloves && !mutations.len)
|
||||||
return
|
return
|
||||||
@@ -112,9 +109,6 @@
|
|||||||
|
|
||||||
/atom/proc/attack_animal(mob/user as mob)
|
/atom/proc/attack_animal(mob/user as mob)
|
||||||
return
|
return
|
||||||
/mob/living/RestrainedClickOn(var/atom/A)
|
|
||||||
..()
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Monkeys
|
Monkeys
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -3,13 +3,12 @@
|
|||||||
var/mob/controller
|
var/mob/controller
|
||||||
var/atom/movable/controlled
|
var/atom/movable/controlled
|
||||||
var/control_flags = 0
|
var/control_flags = 0
|
||||||
var/damaged_event_key
|
|
||||||
var/is_controlled = FALSE //Whether we're in strict control
|
var/is_controlled = FALSE //Whether we're in strict control
|
||||||
|
|
||||||
/datum/control/New(var/mob/new_controller, var/atom/new_controlled)
|
/datum/control/New(var/mob/new_controller, var/atom/new_controlled)
|
||||||
..()
|
..()
|
||||||
controller = new_controller
|
controller = new_controller
|
||||||
damaged_event_key = controller.on_damaged.Add(src, "user_damaged")
|
controller.lazy_register_event(/lazy_event/on_damaged, src, .proc/user_damaged)
|
||||||
controlled = new_controlled
|
controlled = new_controlled
|
||||||
|
|
||||||
/datum/control/Destroy()
|
/datum/control/Destroy()
|
||||||
@@ -20,8 +19,7 @@
|
|||||||
controlled = null
|
controlled = null
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/control/proc/user_damaged(list/arguments)
|
/datum/control/proc/user_damaged(kind, amount)
|
||||||
var/amount = arguments["amount"]
|
|
||||||
if(amount > 0 && control_flags & REVERT_ON_CONTROLLER_DAMAGED)
|
if(amount > 0 && control_flags & REVERT_ON_CONTROLLER_DAMAGED)
|
||||||
break_control()
|
break_control()
|
||||||
|
|
||||||
|
|||||||
@@ -196,7 +196,6 @@
|
|||||||
icon = 'icons/obj/wizard.dmi'
|
icon = 'icons/obj/wizard.dmi'
|
||||||
icon_state = "phylactery_empty_noglow"
|
icon_state = "phylactery_empty_noglow"
|
||||||
var/charges = 0
|
var/charges = 0
|
||||||
var/soulbound
|
|
||||||
var/mindbound
|
var/mindbound
|
||||||
var/mob/bound_soul
|
var/mob/bound_soul
|
||||||
var/datum/mind/bound_mind
|
var/datum/mind/bound_mind
|
||||||
@@ -220,11 +219,9 @@
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/item/phylactery/Destroy()
|
/obj/item/phylactery/Destroy()
|
||||||
if(bound_soul.on_death)
|
|
||||||
bound_soul.on_death.Remove(soulbound)
|
|
||||||
bound_soul.lazy_unregister_event(/lazy_event/on_z_transition, src, .proc/z_block)
|
|
||||||
soulbound = null
|
|
||||||
if(bound_soul)
|
if(bound_soul)
|
||||||
|
bound_soul.lazy_unregister_event(/lazy_event/on_death, src, .proc/revive_soul)
|
||||||
|
bound_soul.lazy_unregister_event(/lazy_event/on_z_transition, src, .proc/z_block)
|
||||||
to_chat(bound_soul, "<span class = 'warning'><b>You feel your form begin to unwind!</b></span>")
|
to_chat(bound_soul, "<span class = 'warning'><b>You feel your form begin to unwind!</b></span>")
|
||||||
spawn(rand(5 SECONDS, 15 SECONDS))
|
spawn(rand(5 SECONDS, 15 SECONDS))
|
||||||
bound_soul.dust()
|
bound_soul.dust()
|
||||||
@@ -234,7 +231,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/obj/item/phylactery/update_icon()
|
/obj/item/phylactery/update_icon()
|
||||||
if(soulbound)
|
if(bound_soul)
|
||||||
if(charges >= 1)
|
if(charges >= 1)
|
||||||
icon_state = "phylactery"
|
icon_state = "phylactery"
|
||||||
else
|
else
|
||||||
@@ -243,7 +240,7 @@
|
|||||||
icon_state = "phylactery_empty_noglow"
|
icon_state = "phylactery_empty_noglow"
|
||||||
|
|
||||||
/obj/item/phylactery/attack_self(mob/user)
|
/obj/item/phylactery/attack_self(mob/user)
|
||||||
if(!soulbound && ishuman(user))
|
if(!bound_soul && ishuman(user))
|
||||||
var/mob/living/carbon/human/H = user
|
var/mob/living/carbon/human/H = user
|
||||||
var/datum/organ/external/E = H.get_active_hand_organ()
|
var/datum/organ/external/E = H.get_active_hand_organ()
|
||||||
if(locate(/datum/wound) in E.wounds)
|
if(locate(/datum/wound) in E.wounds)
|
||||||
@@ -256,12 +253,12 @@
|
|||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/item/phylactery/proc/revive_soul(list/arguments)
|
/obj/item/phylactery/proc/revive_soul(mob/user, body_destroyed)
|
||||||
if(charges <= 0)
|
if(charges <= 0)
|
||||||
unbind_mind()
|
unbind_mind()
|
||||||
unbind()
|
unbind()
|
||||||
return
|
return
|
||||||
var/mob/living/original = arguments["user"]
|
var/mob/living/original = user
|
||||||
if(original.mind)
|
if(original.mind)
|
||||||
var/mob/living/carbon/human/H = new /mob/living/carbon/human/lich(src)
|
var/mob/living/carbon/human/H = new /mob/living/carbon/human/lich(src)
|
||||||
H.real_name = original.real_name
|
H.real_name = original.real_name
|
||||||
@@ -275,7 +272,7 @@
|
|||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes)
|
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(H), slot_w_uniform)
|
||||||
original.mind.transfer_to(H) // rebinding on transfer now handled by mind
|
original.mind.transfer_to(H) // rebinding on transfer now handled by mind
|
||||||
if(!arguments["body_destroyed"])
|
if(!body_destroyed)
|
||||||
original.dust()
|
original.dust()
|
||||||
var/release_time = round(rand(60 SECONDS, 120 SECONDS)/charges, 10) //In deciseconds
|
var/release_time = round(rand(60 SECONDS, 120 SECONDS)/charges, 10) //In deciseconds
|
||||||
H.Paralyse(release_time/20) //Divide by 20 because Paralyse goes down by 1 every Life() tick (roughly every 2 secs)
|
H.Paralyse(release_time/20) //Divide by 20 because Paralyse goes down by 1 every Life() tick (roughly every 2 secs)
|
||||||
@@ -289,14 +286,12 @@
|
|||||||
/obj/item/phylactery/proc/unbind()
|
/obj/item/phylactery/proc/unbind()
|
||||||
if(bound_soul)
|
if(bound_soul)
|
||||||
bound_soul.lazy_unregister_event(/lazy_event/on_z_transition, src, .proc/z_block)
|
bound_soul.lazy_unregister_event(/lazy_event/on_z_transition, src, .proc/z_block)
|
||||||
if(bound_soul.on_death)
|
bound_soul.lazy_unregister_event(/lazy_event/on_death, src, .proc/revive_soul)
|
||||||
bound_soul.on_death.Remove(soulbound)
|
|
||||||
soulbound = null
|
|
||||||
bound_soul = null
|
bound_soul = null
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/item/phylactery/proc/bind(var/mob/to_bind)
|
/obj/item/phylactery/proc/bind(var/mob/to_bind)
|
||||||
soulbound = to_bind.on_death.Add(src, "revive_soul")
|
to_bind.lazy_register_event(/lazy_event/on_death, src, .proc/revive_soul)
|
||||||
to_bind.lazy_register_event(/lazy_event/on_z_transition, src, .proc/z_block)
|
to_bind.lazy_register_event(/lazy_event/on_z_transition, src, .proc/z_block)
|
||||||
bound_soul = to_bind
|
bound_soul = to_bind
|
||||||
|
|
||||||
@@ -380,7 +375,6 @@
|
|||||||
var/active = 0
|
var/active = 0
|
||||||
var/max_steps = 4
|
var/max_steps = 4
|
||||||
var/current_step = 0
|
var/current_step = 0
|
||||||
var/spellcast_key = null
|
|
||||||
var/equip_cooldown = 50
|
var/equip_cooldown = 50
|
||||||
|
|
||||||
var/step_cooldown = 1 SECONDS // The step delay.
|
var/step_cooldown = 1 SECONDS // The step delay.
|
||||||
@@ -426,14 +420,14 @@
|
|||||||
equip_cooldown = initial(equip_cooldown)
|
equip_cooldown = initial(equip_cooldown)
|
||||||
var/spell/fuckup/F = new
|
var/spell/fuckup/F = new
|
||||||
H.add_spell(/spell/fuckup)
|
H.add_spell(/spell/fuckup)
|
||||||
spellcast_key = H.on_spellcast.Add(F, "on_spellcast")
|
H.lazy_register_event(/lazy_event/on_spellcast, F, /spell/fuckup/proc/on_spellcast)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/item/clothing/shoes/fuckup/unequipped(mob/living/carbon/human/H, equipped_slot)
|
/obj/item/clothing/shoes/fuckup/unequipped(mob/living/carbon/human/H, equipped_slot)
|
||||||
equip_cooldown = initial(equip_cooldown)
|
equip_cooldown = initial(equip_cooldown)
|
||||||
for (var/spell/fuckup/F in H.spell_list)
|
for (var/spell/fuckup/F in H.spell_list)
|
||||||
H.remove_spell(F)
|
H.remove_spell(F)
|
||||||
H.on_spellcast.Remove(spellcast_key)
|
H.lazy_unregister_event(/lazy_event/on_spellcast, F, /spell/fuckup/proc/on_spellcast)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
// -- Fuckup boot spell
|
// -- Fuckup boot spell
|
||||||
@@ -476,15 +470,12 @@
|
|||||||
if (F)
|
if (F)
|
||||||
F.deactivate()
|
F.deactivate()
|
||||||
|
|
||||||
/spell/fuckup/proc/on_spellcast(var/list/arguments)
|
/spell/fuckup/proc/on_spellcast(spell/spell, mob/user, list/targets)
|
||||||
var/spell/spell_casted = arguments["spell"]
|
if (!ishuman(user))
|
||||||
var/mob/caster = arguments["user"]
|
|
||||||
if (!ishuman(caster))
|
|
||||||
return
|
return
|
||||||
var/mob/living/carbon/human/H = caster
|
var/mob/living/carbon/human/H = user
|
||||||
if (istype(spell_casted, /spell/aoe_turf/blink) || istype(spell_casted, /spell/targeted/ethereal_jaunt))
|
if (istype(spell, /spell/aoe_turf/blink) || istype(spell, /spell/targeted/ethereal_jaunt))
|
||||||
charge_counter = min(charge_counter, cooldown_min - cooldown_on_blink)
|
charge_counter = min(charge_counter, cooldown_min - cooldown_on_blink)
|
||||||
if (istype(H.shoes, /obj/item/clothing/shoes/fuckup))
|
if (istype(H.shoes, /obj/item/clothing/shoes/fuckup))
|
||||||
var/obj/item/clothing/shoes/fuckup/F = H.shoes
|
var/obj/item/clothing/shoes/fuckup/F = H.shoes
|
||||||
F.deactivate()
|
F.deactivate()
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
//delayer = null
|
//delayer = null
|
||||||
|
|
||||||
if (viewing)
|
if (viewing)
|
||||||
viewing.mob.on_logout.Remove("\ref[src]:mob_logout")
|
viewing.mob.lazy_unregister_event(/lazy_event/on_logout, src, .proc/mob_logout)
|
||||||
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
viewing.images -= showing
|
viewing.images -= showing
|
||||||
showing.Cut()
|
showing.Cut()
|
||||||
to_chat(user, "You turn off \the [src].")
|
to_chat(user, "You turn off \the [src].")
|
||||||
viewing.mob.on_logout.Remove("\ref[src]:mob_logout")
|
viewing.mob.lazy_unregister_event(/lazy_event/on_logout, src, .proc/mob_logout)
|
||||||
viewing = null
|
viewing = null
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -47,14 +47,14 @@
|
|||||||
showing = get_images(get_turf(user), viewing.view)
|
showing = get_images(get_turf(user), viewing.view)
|
||||||
viewing.images |= showing
|
viewing.images |= showing
|
||||||
//delayer.addDelay(2 SECONDS) // Should be enough to prevent lag due to spam.
|
//delayer.addDelay(2 SECONDS) // Should be enough to prevent lag due to spam.
|
||||||
user.on_logout.Add(src, "mob_logout")
|
user.lazy_register_event(/lazy_event/on_logout, src, .proc/mob_logout)
|
||||||
|
|
||||||
/obj/item/device/holomap/proc/mob_logout(var/list/args, var/mob/M)
|
/obj/item/device/holomap/proc/mob_logout(mob/user)
|
||||||
if (viewing)
|
if (viewing)
|
||||||
viewing.images -= showing
|
viewing.images -= showing
|
||||||
viewing = null
|
viewing = null
|
||||||
|
|
||||||
M.on_logout.Remove("\ref[src]:mob_logout")
|
user.lazy_unregister_event(/lazy_event/on_logout, src, .proc/mob_logout)
|
||||||
|
|
||||||
visible_message("\The [src] turns off.")
|
visible_message("\The [src] turns off.")
|
||||||
showing.Cut()
|
showing.Cut()
|
||||||
|
|||||||
@@ -71,25 +71,22 @@
|
|||||||
|
|
||||||
/obj/item/device/rcd/rpd/pickup(var/mob/living/L)
|
/obj/item/device/rcd/rpd/pickup(var/mob/living/L)
|
||||||
..()
|
..()
|
||||||
|
L.lazy_register_event(/lazy_event/on_clickon, src, .proc/mob_onclickon)
|
||||||
hook_key = L.on_clickon.Add(src, "mob_onclickon")
|
|
||||||
|
|
||||||
/obj/item/device/rcd/rpd/dropped(var/mob/living/L)
|
/obj/item/device/rcd/rpd/dropped(var/mob/living/L)
|
||||||
..()
|
..()
|
||||||
|
L.lazy_unregister_event(/lazy_event/on_clickon, src, .proc/mob_onclickon)
|
||||||
L.on_clickon.Remove(hook_key)
|
|
||||||
hook_key = null
|
hook_key = null
|
||||||
|
|
||||||
// If the RPD is held, some modifiers are removed.
|
// If the RPD is held, some modifiers are removed.
|
||||||
// This is to prevent the mouse wheel bindings (which require alt and such)
|
// This is to prevent the mouse wheel bindings (which require alt and such)
|
||||||
// From being a pain to use, because alt click intercepts regular clicks.
|
// from being a pain to use, because alt click intercepts regular clicks.
|
||||||
/obj/item/device/rcd/rpd/proc/mob_onclickon(var/list/event_args, var/mob/living/L)
|
/obj/item/device/rcd/rpd/proc/mob_onclickon(mob/user, list/modifiers, atom/target)
|
||||||
if (L.get_active_hand() != src)
|
if (user.get_active_hand() != src)
|
||||||
return
|
return
|
||||||
if(istype(event_args["target"], /mob/living/carbon))
|
if(istype(target, /mob/living/carbon))
|
||||||
return //If we're alt clicking a carbon, let's assume we want to interact with them.
|
return //If we're alt clicking a carbon, let's assume we want to interact with them.
|
||||||
|
|
||||||
var/list/modifiers = event_args["modifiers"]
|
|
||||||
modifiers -= list("alt", "shift", "ctrl")
|
modifiers -= list("alt", "shift", "ctrl")
|
||||||
|
|
||||||
/obj/item/device/rcd/rpd/mech/Topic(var/href, var/list/href_list)
|
/obj/item/device/rcd/rpd/mech/Topic(var/href, var/list/href_list)
|
||||||
|
|||||||
@@ -226,19 +226,19 @@
|
|||||||
clear()
|
clear()
|
||||||
|
|
||||||
if (viewing)
|
if (viewing)
|
||||||
viewing.on_logout.Remove("\ref[src]:mob_logout")
|
viewing.lazy_unregister_event(/lazy_event/on_logout, src, .proc/mob_logout)
|
||||||
viewing = null
|
viewing = null
|
||||||
|
|
||||||
if (new_mob)
|
if (new_mob)
|
||||||
new_mob.on_logout.Add(src, "mob_logout")
|
new_mob.lazy_register_event(/lazy_event/on_logout, src, .proc/mob_logout)
|
||||||
viewing = new_mob
|
viewing = new_mob
|
||||||
|
|
||||||
/obj/item/clothing/glasses/scanner/material/proc/mob_logout(var/list/args, var/mob/M)
|
/obj/item/clothing/glasses/scanner/material/proc/mob_logout(mob/user)
|
||||||
if (M != viewing)
|
if (user != viewing)
|
||||||
return
|
return
|
||||||
|
|
||||||
clear()
|
clear()
|
||||||
viewing.on_logout.Remove("\ref[src]:mob_logout")
|
viewing.lazy_unregister_event(/lazy_event/on_logout, src, .proc/mob_logout)
|
||||||
viewing = null
|
viewing = null
|
||||||
|
|
||||||
/obj/item/clothing/glasses/scanner/material/proc/get_images(var/turf/T, var/view)
|
/obj/item/clothing/glasses/scanner/material/proc/get_images(var/turf/T, var/view)
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
desc = "A vest designed to comfortably hold interchangable armor plates."
|
desc = "A vest designed to comfortably hold interchangable armor plates."
|
||||||
icon_state = "tactical_armor"
|
icon_state = "tactical_armor"
|
||||||
item_state = "tactical_armor"
|
item_state = "tactical_armor"
|
||||||
var/event_key
|
|
||||||
var/obj/item/weapon/armor_plate/P
|
var/obj/item/weapon/armor_plate/P
|
||||||
|
|
||||||
/obj/item/clothing/suit/armor/plate_carrier/get_armor(var/type)
|
/obj/item/clothing/suit/armor/plate_carrier/get_armor(var/type)
|
||||||
@@ -26,13 +25,12 @@
|
|||||||
/obj/item/clothing/suit/armor/plate_carrier/equipped(var/mob/user, var/slot)
|
/obj/item/clothing/suit/armor/plate_carrier/equipped(var/mob/user, var/slot)
|
||||||
..()
|
..()
|
||||||
if(slot == slot_wear_suit)
|
if(slot == slot_wear_suit)
|
||||||
event_key = user.on_damaged.Add(src, "handle_user_damage")
|
user.lazy_register_event(/lazy_event/on_damaged, src, .proc/handle_user_damage)
|
||||||
|
|
||||||
|
|
||||||
/obj/item/clothing/suit/armor/plate_carrier/unequipped(mob/user, var/from_slot = null)
|
/obj/item/clothing/suit/armor/plate_carrier/unequipped(mob/user, var/from_slot = null)
|
||||||
if(from_slot == slot_wear_suit)
|
if(from_slot == slot_wear_suit)
|
||||||
user.on_damaged.Remove(event_key)
|
user.lazy_unregister_event(/lazy_event/on_damaged, src, .proc/handle_user_damage)
|
||||||
event_key = null
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/item/clothing/suit/armor/plate_carrier/attack_self(mob/user)
|
/obj/item/clothing/suit/armor/plate_carrier/attack_self(mob/user)
|
||||||
@@ -55,15 +53,13 @@
|
|||||||
if(P)
|
if(P)
|
||||||
to_chat(user, "<span class = 'notice'>It has \a [P] attached to it. <a HREF='?src=\ref[user];lookitem=\ref[P]'>Take a closer look.</a></span>")
|
to_chat(user, "<span class = 'notice'>It has \a [P] attached to it. <a HREF='?src=\ref[user];lookitem=\ref[P]'>Take a closer look.</a></span>")
|
||||||
|
|
||||||
/obj/item/clothing/suit/armor/plate_carrier/proc/handle_user_damage(list/arguments)
|
/obj/item/clothing/suit/armor/plate_carrier/proc/handle_user_damage(kind, amount)
|
||||||
if(!P)
|
if(!P)
|
||||||
return
|
return
|
||||||
var/amount = arguments["amount"]
|
|
||||||
if(amount <= 0)
|
if(amount <= 0)
|
||||||
return
|
return
|
||||||
var/type = arguments["type"]
|
|
||||||
|
|
||||||
P.receive_damage(type, amount)
|
P.receive_damage(kind, amount)
|
||||||
if(P.gcDestroyed)
|
if(P.gcDestroyed)
|
||||||
P = null
|
P = null
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,6 @@
|
|||||||
var/age = 0
|
var/age = 0
|
||||||
var/limited_growth = 0
|
var/limited_growth = 0
|
||||||
var/plant_damage_noun = "Thorns"
|
var/plant_damage_noun = "Thorns"
|
||||||
var/tmp/on_resist_key //For resisting out of vines.
|
|
||||||
|
|
||||||
/obj/effect/plantsegment/creeper
|
/obj/effect/plantsegment/creeper
|
||||||
limited_growth = 1
|
limited_growth = 1
|
||||||
|
|||||||
@@ -103,7 +103,7 @@
|
|||||||
victim.vessel.remove_reagent(BLOOD, drawing)
|
victim.vessel.remove_reagent(BLOOD, drawing)
|
||||||
last_special = world.time
|
last_special = world.time
|
||||||
|
|
||||||
/obj/effect/plantsegment/proc/manual_unbuckle(mob/user as mob)
|
/obj/effect/plantsegment/proc/manual_unbuckle(mob/user)
|
||||||
var/list/atom/movable/locked = get_locked(/datum/locking_category/plantsegment)
|
var/list/atom/movable/locked = get_locked(/datum/locking_category/plantsegment)
|
||||||
if(locked && locked.len)
|
if(locked && locked.len)
|
||||||
var/mob/M = locked[1]
|
var/mob/M = locked[1]
|
||||||
@@ -137,7 +137,7 @@
|
|||||||
if(!istype(M))
|
if(!istype(M))
|
||||||
return
|
return
|
||||||
|
|
||||||
on_resist_key = M.on_resist.Add(src, "manual_unbuckle")
|
M.lazy_register_event(/lazy_event/on_resist, src, .proc/manual_unbuckle)
|
||||||
|
|
||||||
last_special = world.time
|
last_special = world.time
|
||||||
|
|
||||||
@@ -149,8 +149,7 @@
|
|||||||
if(!istype(M))
|
if(!istype(M))
|
||||||
return
|
return
|
||||||
|
|
||||||
M.on_resist.Remove(on_resist_key)
|
M.lazy_unregister_event(/lazy_event/on_resist, src, .proc/manual_unbuckle)
|
||||||
on_resist_key = null
|
|
||||||
|
|
||||||
/obj/effect/plantsegment/proc/entangle_mob(var/mob/living/victim)
|
/obj/effect/plantsegment/proc/entangle_mob(var/mob/living/victim)
|
||||||
if(!victim || victim.locked_to || !seed || seed.spread != 2 || is_locking(/datum/locking_category/plantsegment)) //How much of this is actually necessary, I wonder
|
if(!victim || victim.locked_to || !seed || seed.spread != 2 || is_locking(/datum/locking_category/plantsegment)) //How much of this is actually necessary, I wonder
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
/mob/proc/death(gibbed)
|
/mob/proc/death(gibbed)
|
||||||
timeofdeath = world.time
|
timeofdeath = world.time
|
||||||
INVOKE_EVENT(on_death, list("user" = src,"body_destroyed" = gibbed))
|
lazy_invoke_event(/lazy_event/on_death, list("user" = src, "body_destroyed" = gibbed))
|
||||||
living_mob_list -= src
|
living_mob_list -= src
|
||||||
dead_mob_list += src
|
dead_mob_list += src
|
||||||
stat_collection.add_death_stat(src)
|
stat_collection.add_death_stat(src)
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
|
|
||||||
amount = amount * brute_damage_modifier
|
amount = amount * brute_damage_modifier
|
||||||
|
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = BRUTE, "amount" = amount)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = BRUTE, "amount" = amount)))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if(amount > 0)
|
if(amount > 0)
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
/mob/living/carbon/human/adjustFireLoss(var/amount)
|
/mob/living/carbon/human/adjustFireLoss(var/amount)
|
||||||
amount = amount * burn_damage_modifier
|
amount = amount * burn_damage_modifier
|
||||||
|
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = BURN, "amount" = amount)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = BURN, "amount" = amount)))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if(amount > 0)
|
if(amount > 0)
|
||||||
@@ -82,7 +82,7 @@
|
|||||||
/mob/living/carbon/human/proc/adjustBruteLossByPart(var/amount, var/organ_name, var/obj/damage_source = null)
|
/mob/living/carbon/human/proc/adjustBruteLossByPart(var/amount, var/organ_name, var/obj/damage_source = null)
|
||||||
amount = amount * brute_damage_modifier
|
amount = amount * brute_damage_modifier
|
||||||
|
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = BRUTE, "amount" = amount)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = BRUTE, "amount" = amount)))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if (organ_name in organs_by_name)
|
if (organ_name in organs_by_name)
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
/mob/living/carbon/human/proc/adjustFireLossByPart(var/amount, var/organ_name, var/obj/damage_source = null)
|
/mob/living/carbon/human/proc/adjustFireLossByPart(var/amount, var/organ_name, var/obj/damage_source = null)
|
||||||
amount = amount * burn_damage_modifier
|
amount = amount * burn_damage_modifier
|
||||||
|
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = BURN, "amount" = amount)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = BURN, "amount" = amount)))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if (organ_name in organs_by_name)
|
if (organ_name in organs_by_name)
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
if(isslimeperson(src))
|
if(isslimeperson(src))
|
||||||
amount = 0
|
amount = 0
|
||||||
|
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = CLONE, "amount" = amount)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = CLONE, "amount" = amount)))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
var/heal_prob = max(0, 80 - getCloneLoss())
|
var/heal_prob = max(0, 80 - getCloneLoss())
|
||||||
@@ -373,7 +373,7 @@ This function restores all organs.
|
|||||||
if(blocked)
|
if(blocked)
|
||||||
damage = (damage/100)*(100-blocked)
|
damage = (damage/100)*(100-blocked)
|
||||||
|
|
||||||
if(!ignore_events && INVOKE_EVENT(on_damaged, list("type" = damagetype, "amount" = damage)))
|
if(!ignore_events && lazy_invoke_event(/lazy_event/on_damaged, list("kind" = damagetype, "amount" = damage)))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
switch(damagetype)
|
switch(damagetype)
|
||||||
|
|||||||
@@ -469,8 +469,8 @@ emp_act
|
|||||||
var/damage_blocked = 0
|
var/damage_blocked = 0
|
||||||
|
|
||||||
//INVOKE_EVENT may return null sometimes - this doesn't work nice with bitflags (which is what's being done here). Hence the !! operator - it turns a null into a 0.
|
//INVOKE_EVENT may return null sometimes - this doesn't work nice with bitflags (which is what's being done here). Hence the !! operator - it turns a null into a 0.
|
||||||
var/brute_resolved = !!INVOKE_EVENT(on_damaged, list("type" = BRUTE, "amount" = b_loss))
|
var/brute_resolved = !!lazy_invoke_event(/lazy_event/on_damaged, list("kind" = BRUTE, "amount" = b_loss))
|
||||||
var/burn_resolved = !!INVOKE_EVENT(on_damaged, list("type" = BURN, "amount" = f_loss))
|
var/burn_resolved = !!lazy_invoke_event(/lazy_event/on_damaged, list("kind" = BURN, "amount" = f_loss))
|
||||||
damage_blocked |= (brute_resolved | burn_resolved)
|
damage_blocked |= (brute_resolved | burn_resolved)
|
||||||
|
|
||||||
if(damage_blocked)
|
if(damage_blocked)
|
||||||
|
|||||||
@@ -18,8 +18,6 @@
|
|||||||
|
|
||||||
immune_system = new (src)
|
immune_system = new (src)
|
||||||
|
|
||||||
on_resist = new(owner = src)
|
|
||||||
|
|
||||||
/mob/living/Destroy()
|
/mob/living/Destroy()
|
||||||
for(var/mob/living/silicon/robot/mommi/MoMMI in player_list)
|
for(var/mob/living/silicon/robot/mommi/MoMMI in player_list)
|
||||||
for(var/image/I in static_overlays)
|
for(var/image/I in static_overlays)
|
||||||
@@ -44,10 +42,6 @@
|
|||||||
qdel(immune_system)
|
qdel(immune_system)
|
||||||
immune_system = null
|
immune_system = null
|
||||||
|
|
||||||
if(on_resist)
|
|
||||||
qdel(on_resist)
|
|
||||||
on_resist = null
|
|
||||||
|
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
/mob/living/examine(var/mob/user, var/size = "", var/show_name = TRUE, var/show_icon = TRUE) //Show the mob's size and whether it's been butchered
|
/mob/living/examine(var/mob/user, var/size = "", var/show_name = TRUE, var/show_icon = TRUE) //Show the mob's size and whether it's been butchered
|
||||||
@@ -250,7 +244,7 @@
|
|||||||
if(status_flags & GODMODE)
|
if(status_flags & GODMODE)
|
||||||
return 0 //godmode
|
return 0 //godmode
|
||||||
|
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = BRUTE, "amount" = amount)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = BRUTE, "amount" = amount)))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
bruteloss = min(max(bruteloss + (amount * brute_damage_modifier), 0),(maxHealth*2))
|
bruteloss = min(max(bruteloss + (amount * brute_damage_modifier), 0),(maxHealth*2))
|
||||||
@@ -262,7 +256,7 @@
|
|||||||
if(status_flags & GODMODE)
|
if(status_flags & GODMODE)
|
||||||
return 0 //godmode
|
return 0 //godmode
|
||||||
|
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = OXY, "amount" = amount)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = OXY, "amount" = amount)))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
oxyloss = min(max(oxyloss + (amount * oxy_damage_modifier), 0),(maxHealth*2))
|
oxyloss = min(max(oxyloss + (amount * oxy_damage_modifier), 0),(maxHealth*2))
|
||||||
@@ -279,7 +273,7 @@
|
|||||||
if(status_flags & GODMODE)
|
if(status_flags & GODMODE)
|
||||||
return 0 //godmode
|
return 0 //godmode
|
||||||
|
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = TOX, "amount" = amount)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = TOX, "amount" = amount)))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
var/mult = 1
|
var/mult = 1
|
||||||
@@ -303,7 +297,7 @@
|
|||||||
return 0 //godmode
|
return 0 //godmode
|
||||||
if(mutations.Find(M_RESIST_HEAT))
|
if(mutations.Find(M_RESIST_HEAT))
|
||||||
return 0
|
return 0
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = BURN, "amount" = amount)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = BURN, "amount" = amount)))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
fireloss = min(max(fireloss + (amount * burn_damage_modifier), 0),(maxHealth*2))
|
fireloss = min(max(fireloss + (amount * burn_damage_modifier), 0),(maxHealth*2))
|
||||||
@@ -315,7 +309,7 @@
|
|||||||
if(status_flags & GODMODE)
|
if(status_flags & GODMODE)
|
||||||
return 0 //godmode
|
return 0 //godmode
|
||||||
|
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = CLONE, "amount" = amount)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = CLONE, "amount" = amount)))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if(ishuman(src))
|
if(ishuman(src))
|
||||||
@@ -337,7 +331,7 @@
|
|||||||
if(status_flags & GODMODE)
|
if(status_flags & GODMODE)
|
||||||
return 0 //godmode
|
return 0 //godmode
|
||||||
|
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = BRAIN, "amount" = amount)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = BRAIN, "amount" = amount)))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
brainloss = min(max(brainloss + (amount * brain_damage_modifier), 0),(maxHealth*2))
|
brainloss = min(max(brainloss + (amount * brain_damage_modifier), 0),(maxHealth*2))
|
||||||
@@ -777,9 +771,6 @@ Thanks.
|
|||||||
hook.override_starting_X--
|
hook.override_starting_X--
|
||||||
hook.override_target_X--
|
hook.override_target_X--
|
||||||
|
|
||||||
/mob/living
|
|
||||||
var/event/on_resist
|
|
||||||
|
|
||||||
/mob/living/verb/resist()
|
/mob/living/verb/resist()
|
||||||
set name = "Resist"
|
set name = "Resist"
|
||||||
set category = "IC"
|
set category = "IC"
|
||||||
@@ -787,7 +778,7 @@ Thanks.
|
|||||||
if(!isliving(usr) || usr.special_delayer.blocked())
|
if(!isliving(usr) || usr.special_delayer.blocked())
|
||||||
return
|
return
|
||||||
|
|
||||||
INVOKE_EVENT(on_resist, list())
|
lazy_invoke_event(/lazy_event/on_resist, list("user" = src))
|
||||||
|
|
||||||
delayNextSpecial(10) // Special delay, a cooldown to prevent spamming too much.
|
delayNextSpecial(10) // Special delay, a cooldown to prevent spamming too much.
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
return amount
|
return amount
|
||||||
|
|
||||||
/mob/living/silicon/robot/adjustBruteLoss(var/amount)
|
/mob/living/silicon/robot/adjustBruteLoss(var/amount)
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = BRUTE, "amount" = amount)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = BRUTE, "amount" = amount)))
|
||||||
return FALSE
|
return FALSE
|
||||||
if(amount > 0)
|
if(amount > 0)
|
||||||
take_overall_damage(amount, 0)
|
take_overall_damage(amount, 0)
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
heal_overall_damage(-amount, 0)
|
heal_overall_damage(-amount, 0)
|
||||||
|
|
||||||
/mob/living/silicon/robot/adjustFireLoss(var/amount)
|
/mob/living/silicon/robot/adjustFireLoss(var/amount)
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = BURN, "amount" = amount)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = BURN, "amount" = amount)))
|
||||||
return FALSE
|
return FALSE
|
||||||
if(amount > 0)
|
if(amount > 0)
|
||||||
take_overall_damage(0, amount)
|
take_overall_damage(0, amount)
|
||||||
|
|||||||
@@ -582,7 +582,7 @@ var/global/list/animal_count = list() //Stores types, and amount of animals of t
|
|||||||
|
|
||||||
/mob/living/simple_animal/adjustBruteLoss(damage)
|
/mob/living/simple_animal/adjustBruteLoss(damage)
|
||||||
|
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = BRUTE, "amount" = damage)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = BRUTE, "amount" = damage)))
|
||||||
return 0
|
return 0
|
||||||
if(skinned())
|
if(skinned())
|
||||||
damage = damage * 2
|
damage = damage * 2
|
||||||
@@ -598,7 +598,7 @@ var/global/list/animal_count = list() //Stores types, and amount of animals of t
|
|||||||
return 0
|
return 0
|
||||||
if(mutations.Find(M_RESIST_HEAT))
|
if(mutations.Find(M_RESIST_HEAT))
|
||||||
return 0
|
return 0
|
||||||
if(INVOKE_EVENT(on_damaged, list("type" = BURN, "amount" = damage)))
|
if(lazy_invoke_event(/lazy_event/on_damaged, list("kind" = BURN, "amount" = damage)))
|
||||||
return 0
|
return 0
|
||||||
if(skinned())
|
if(skinned())
|
||||||
damage = damage * 2
|
damage = damage * 2
|
||||||
|
|||||||
@@ -52,6 +52,6 @@
|
|||||||
send2adminirc("[key_name(src, showantag = FALSE)] logged out - no more admins online.")
|
send2adminirc("[key_name(src, showantag = FALSE)] logged out - no more admins online.")
|
||||||
send2admindiscord("[key_name(src, showantag = FALSE)] logged out. **No more non-AFK admins online.** - **[admin_number_afk]** AFK", TRUE)
|
send2admindiscord("[key_name(src, showantag = FALSE)] logged out. **No more non-AFK admins online.** - **[admin_number_afk]** AFK", TRUE)
|
||||||
|
|
||||||
INVOKE_EVENT(on_logout, list())
|
lazy_invoke_event(/lazy_event/on_logout, list("user" = src))
|
||||||
|
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -29,16 +29,6 @@
|
|||||||
for(var/M in mind.heard_before)
|
for(var/M in mind.heard_before)
|
||||||
if(mind.heard_before[M] == src)
|
if(mind.heard_before[M] == src)
|
||||||
mind.heard_before[M] = null
|
mind.heard_before[M] = null
|
||||||
if(on_spellcast)
|
|
||||||
on_spellcast.holder = null
|
|
||||||
if(on_uattack)
|
|
||||||
on_uattack.holder = null
|
|
||||||
if(on_ruattack)
|
|
||||||
on_ruattack.holder = null
|
|
||||||
if(on_damaged)
|
|
||||||
on_damaged.holder = null
|
|
||||||
if(on_death)
|
|
||||||
on_death.holder = null
|
|
||||||
if(on_bumping)
|
if(on_bumping)
|
||||||
on_bumping.holder = null
|
on_bumping.holder = null
|
||||||
if(on_bumped)
|
if(on_bumped)
|
||||||
@@ -79,24 +69,10 @@
|
|||||||
hud_used = null
|
hud_used = null
|
||||||
for(var/atom/movable/leftovers in src)
|
for(var/atom/movable/leftovers in src)
|
||||||
qdel(leftovers)
|
qdel(leftovers)
|
||||||
qdel(on_logout)
|
|
||||||
on_logout = null
|
|
||||||
qdel(on_spellcast)
|
|
||||||
qdel(on_uattack)
|
|
||||||
qdel(on_ruattack)
|
|
||||||
qdel(on_damaged)
|
|
||||||
qdel(on_clickon)
|
|
||||||
qdel(on_death)
|
|
||||||
qdel(on_bumping)
|
qdel(on_bumping)
|
||||||
qdel(on_bumped)
|
qdel(on_bumped)
|
||||||
qdel(on_touched)
|
qdel(on_touched)
|
||||||
|
|
||||||
on_spellcast = null
|
|
||||||
on_uattack = null
|
|
||||||
on_ruattack = null
|
|
||||||
on_damaged = null
|
|
||||||
on_clickon = null
|
|
||||||
on_death = null
|
|
||||||
on_bumping = null
|
on_bumping = null
|
||||||
on_bumped = null
|
on_bumped = null
|
||||||
on_touched = null
|
on_touched = null
|
||||||
@@ -291,13 +267,6 @@
|
|||||||
living_mob_list += src
|
living_mob_list += src
|
||||||
|
|
||||||
store_position()
|
store_position()
|
||||||
on_spellcast = new(owner = src)
|
|
||||||
on_uattack = new(owner = src)
|
|
||||||
on_ruattack = new(owner = src)
|
|
||||||
on_logout = new(owner = src)
|
|
||||||
on_damaged = new(owner = src)
|
|
||||||
on_clickon = new(owner = src)
|
|
||||||
on_death = new(owner = src)
|
|
||||||
on_bumping = new(owner = src)
|
on_bumping = new(owner = src)
|
||||||
on_bumped = new(owner = src)
|
on_bumped = new(owner = src)
|
||||||
on_touched = new(owner = src)
|
on_touched = new(owner = src)
|
||||||
@@ -1957,8 +1926,7 @@ mob/proc/on_foot()
|
|||||||
//High order proc to remove a mobs spell channeling, removes channeling fully
|
//High order proc to remove a mobs spell channeling, removes channeling fully
|
||||||
/mob/proc/remove_spell_channeling()
|
/mob/proc/remove_spell_channeling()
|
||||||
if(spell_channeling)
|
if(spell_channeling)
|
||||||
var/spell/thespell = on_uattack.handlers[spell_channeling][EVENT_OBJECT_INDEX]
|
spell_channeling.channel_spell(force_remove = 1)
|
||||||
thespell.channel_spell(force_remove = 1)
|
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|||||||
@@ -272,20 +272,12 @@
|
|||||||
penetration_dampening = 7
|
penetration_dampening = 7
|
||||||
|
|
||||||
var/list/languages[0]
|
var/list/languages[0]
|
||||||
var/event/on_spellcast
|
|
||||||
var/event/on_uattack
|
|
||||||
var/event/on_ruattack //on restrained unarmed attack
|
|
||||||
var/event/on_logout
|
|
||||||
var/event/on_damaged
|
|
||||||
var/event/on_death
|
|
||||||
var/event/on_bumping //We bumped someone
|
var/event/on_bumping //We bumped someone
|
||||||
var/event/on_bumped //We got bumped
|
var/event/on_bumped //We got bumped
|
||||||
var/event/on_touched // We got touched by anything
|
var/event/on_touched // We got touched by anything
|
||||||
// Allows overiding click modifiers and such.
|
|
||||||
var/event/on_clickon
|
|
||||||
|
|
||||||
var/list/alphas = list()
|
var/list/alphas = list()
|
||||||
var/spell_channeling
|
var/spell/spell_channeling // The spell that's currently being channeled
|
||||||
|
|
||||||
var/see_in_dark_override = 0 //for general guaranteed modification of these variables
|
var/see_in_dark_override = 0 //for general guaranteed modification of these variables
|
||||||
var/see_invisible_override = 0
|
var/see_invisible_override = 0
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||||
icon_state = "Essence_imprinter_idle"
|
icon_state = "Essence_imprinter_idle"
|
||||||
var/datum/dna2/record/R
|
var/datum/dna2/record/R
|
||||||
var/soulbound
|
|
||||||
var/mob/bound_soul
|
var/mob/bound_soul
|
||||||
var/ready
|
var/ready
|
||||||
|
|
||||||
@@ -13,10 +12,9 @@
|
|||||||
set_light(3,5,LIGHT_COLOR_RED)
|
set_light(3,5,LIGHT_COLOR_RED)
|
||||||
|
|
||||||
/obj/structure/essence_printer/Destroy()
|
/obj/structure/essence_printer/Destroy()
|
||||||
if(bound_soul && bound_soul.on_death)
|
if(bound_soul)
|
||||||
bound_soul.on_death.Remove(soulbound)
|
bound_soul.lazy_unregister_event(/lazy_event/on_death, src, .proc/print)
|
||||||
bound_soul = null
|
bound_soul = null
|
||||||
soulbound = null
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/structure/essence_printer/proc/bind(var/mob/living/carbon/human/H)
|
/obj/structure/essence_printer/proc/bind(var/mob/living/carbon/human/H)
|
||||||
@@ -34,10 +32,10 @@
|
|||||||
R.types=DNA2_BUF_UI|DNA2_BUF_UE|DNA2_BUF_SE
|
R.types=DNA2_BUF_UI|DNA2_BUF_UE|DNA2_BUF_SE
|
||||||
R.languages = H.languages.Copy()
|
R.languages = H.languages.Copy()
|
||||||
R.name=R.dna.real_name
|
R.name=R.dna.real_name
|
||||||
if(bound_soul && bound_soul.on_death)
|
if(bound_soul)
|
||||||
bound_soul.on_death.Remove(soulbound)
|
bound_soul.lazy_unregister_event(/lazy_event/on_death, src, .proc/print)
|
||||||
bound_soul = H
|
bound_soul = H
|
||||||
soulbound = H.on_death.Add(src, "print")
|
H.lazy_register_event(/lazy_event/on_death, src, .proc/print)
|
||||||
|
|
||||||
/obj/structure/essence_printer/attack_ghost(mob/user)
|
/obj/structure/essence_printer/attack_ghost(mob/user)
|
||||||
if(!ready)
|
if(!ready)
|
||||||
@@ -56,11 +54,11 @@
|
|||||||
to_chat(H, "<span class = 'notice'>You bind your essence to \the [src].</span>")
|
to_chat(H, "<span class = 'notice'>You bind your essence to \the [src].</span>")
|
||||||
bind(H)
|
bind(H)
|
||||||
|
|
||||||
/obj/structure/essence_printer/proc/print(list/arguments)
|
/obj/structure/essence_printer/proc/print(mob/user, body_destroyed)
|
||||||
do_flick(src,"Essence_imprinter_scan_start",10)
|
do_flick(src,"Essence_imprinter_scan_start",10)
|
||||||
ready = FALSE
|
ready = FALSE
|
||||||
icon_state = "Essence_imprinter_scan_loop"
|
icon_state = "Essence_imprinter_scan_loop"
|
||||||
var/mob/living/carbon/human/previous = arguments["user"]
|
var/mob/living/carbon/human/previous = user
|
||||||
var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species, delay_ready_dna = TRUE)
|
var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species, delay_ready_dna = TRUE)
|
||||||
H.dna = R.dna.Clone()
|
H.dna = R.dna.Clone()
|
||||||
H.dna.flavor_text = R.dna.flavor_text
|
H.dna.flavor_text = R.dna.flavor_text
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
var/contained = 0
|
var/contained = 0
|
||||||
var/artifact_id = ""
|
var/artifact_id = ""
|
||||||
anchored = 0
|
anchored = 0
|
||||||
var/event/on_attackhand
|
|
||||||
var/event/on_attackby
|
var/event/on_attackby
|
||||||
var/event/on_explode
|
var/event/on_explode
|
||||||
var/event/on_projectile
|
var/event/on_projectile
|
||||||
@@ -25,7 +24,6 @@
|
|||||||
else
|
else
|
||||||
artifact_id = "[pick("kappa","sigma","antaeres","beta","omicron","iota","epsilon","omega","gamma","delta","tau","alpha")]-[rand(100,999)]"
|
artifact_id = "[pick("kappa","sigma","antaeres","beta","omicron","iota","epsilon","omega","gamma","delta","tau","alpha")]-[rand(100,999)]"
|
||||||
|
|
||||||
on_attackhand = new(owner = src)
|
|
||||||
on_attackby = new(owner = src)
|
on_attackby = new(owner = src)
|
||||||
on_explode = new(owner = src)
|
on_explode = new(owner = src)
|
||||||
on_projectile = new(owner = src)
|
on_projectile = new(owner = src)
|
||||||
@@ -141,7 +139,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
src.add_fingerprint(user)
|
src.add_fingerprint(user)
|
||||||
on_attackhand.Invoke(list(user, "TOUCH"))
|
lazy_invoke_event(/lazy_event/on_attackhand, list("user" = user, "target" = src))
|
||||||
to_chat(user, "<b>You touch [src].</b>")
|
to_chat(user, "<b>You touch [src].</b>")
|
||||||
|
|
||||||
/obj/machinery/artifact/attackby(obj/item/weapon/W as obj, mob/living/user as mob)
|
/obj/machinery/artifact/attackby(obj/item/weapon/W as obj, mob/living/user as mob)
|
||||||
@@ -157,7 +155,7 @@
|
|||||||
var/warn = 0
|
var/warn = 0
|
||||||
|
|
||||||
if (prob(50))
|
if (prob(50))
|
||||||
on_attackhand.Invoke(list(M, "BUMPED"))
|
lazy_invoke_event(/lazy_event/on_bumped, list("user" = M, "target" = src))
|
||||||
warn = 1
|
warn = 1
|
||||||
if(warn)
|
if(warn)
|
||||||
to_chat(M, "<b>You accidentally touch [src].<b>")
|
to_chat(M, "<b>You accidentally touch [src].<b>")
|
||||||
@@ -191,7 +189,6 @@
|
|||||||
/obj/machinery/artifact/Destroy()
|
/obj/machinery/artifact/Destroy()
|
||||||
qdel(primary_effect); primary_effect = null
|
qdel(primary_effect); primary_effect = null
|
||||||
qdel(secondary_effect); secondary_effect = null
|
qdel(secondary_effect); secondary_effect = null
|
||||||
qdel(on_attackhand); on_attackhand = null
|
|
||||||
qdel(on_attackby); on_attackby = null
|
qdel(on_attackby); on_attackby = null
|
||||||
qdel(on_explode); on_explode = null
|
qdel(on_explode); on_explode = null
|
||||||
qdel(on_projectile); on_projectile = null
|
qdel(on_projectile); on_projectile = null
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
/datum/artifact_trigger/pay2use/New()
|
/datum/artifact_trigger/pay2use/New()
|
||||||
..()
|
..()
|
||||||
key_attackhand = my_artifact.on_attackhand.Add(src, "owner_attackhand")
|
my_artifact.lazy_register_event(/lazy_event/on_attackhand, src, .proc/owner_attackhand)
|
||||||
key_attackby = my_artifact.on_attackby.Add(src, "owner_attackby")
|
key_attackby = my_artifact.on_attackby.Add(src, "owner_attackby")
|
||||||
mode = rand(0,2)
|
mode = rand(0,2)
|
||||||
reconnect_database()
|
reconnect_database()
|
||||||
@@ -190,7 +190,7 @@
|
|||||||
payviacard(500, 3600, usr)
|
payviacard(500, 3600, usr)
|
||||||
|
|
||||||
/datum/artifact_trigger/pay2use/Destroy()
|
/datum/artifact_trigger/pay2use/Destroy()
|
||||||
my_artifact.on_attackhand.Remove(key_attackhand)
|
my_artifact.lazy_unregister_event(/lazy_event/on_attackhand, src, .proc/owner_attackhand)
|
||||||
my_artifact.on_attackby.Remove(key_attackby)
|
my_artifact.on_attackby.Remove(key_attackby)
|
||||||
linked_db = null
|
linked_db = null
|
||||||
..()
|
..()
|
||||||
@@ -1,25 +1,29 @@
|
|||||||
/datum/artifact_trigger/touch
|
/datum/artifact_trigger/touch
|
||||||
triggertype = TRIGGER_TOUCH
|
triggertype = TRIGGER_TOUCH
|
||||||
scanned_trigger = SCAN_PHYSICAL
|
scanned_trigger = SCAN_PHYSICAL
|
||||||
var/key_attackhand
|
|
||||||
|
|
||||||
/datum/artifact_trigger/touch/New()
|
/datum/artifact_trigger/touch/New()
|
||||||
..()
|
..()
|
||||||
key_attackhand = my_artifact.on_attackhand.Add(src, "owner_attackhand")
|
my_artifact.lazy_register_event(/lazy_event/on_attackhand, src, .proc/owner_attackhand)
|
||||||
|
my_artifact.lazy_register_event(/lazy_event/on_bumped, src, .proc/owner_bumped)
|
||||||
|
|
||||||
/datum/artifact_trigger/touch/proc/owner_attackhand(var/list/event_args, var/source)
|
/datum/artifact_trigger/touch/proc/activate(mob/user, context)
|
||||||
var/toucher = event_args[1]
|
Triggered(user, "TOUCH", 0)
|
||||||
var/context = event_args[2]
|
|
||||||
|
|
||||||
Triggered(toucher, context, 0)
|
|
||||||
|
|
||||||
if(my_effect.effect == ARTIFACT_EFFECT_TOUCH)
|
if(my_effect.effect == ARTIFACT_EFFECT_TOUCH)
|
||||||
if (my_effect.IsContained())
|
if (my_effect.IsContained())
|
||||||
my_effect.Blocked()
|
my_effect.Blocked()
|
||||||
else if(my_effect.IsPrimary() || prob(25))
|
else if(my_effect.IsPrimary() || prob(25))
|
||||||
my_effect.DoEffectTouch(toucher)
|
my_effect.DoEffectTouch(user)
|
||||||
my_artifact.investigation_log(I_ARTIFACT, "|| effect [my_effect.artifact_id]([my_effect]) triggered by [context] ([my_effect.trigger]) || touched by [key_name(toucher)].")
|
my_artifact.investigation_log(I_ARTIFACT, "|| effect [my_effect.artifact_id]([my_effect]) triggered by [context] ([my_effect.trigger]) || touched by [key_name(user)].")
|
||||||
|
|
||||||
|
/datum/artifact_trigger/touch/proc/owner_bumped(mob/user, atom/target)
|
||||||
|
activate(user, "BUMPED")
|
||||||
|
|
||||||
|
/datum/artifact_trigger/touch/proc/owner_attackhand(mob/user, atom/target)
|
||||||
|
activate(user, "TOUCH")
|
||||||
|
|
||||||
/datum/artifact_trigger/touch/Destroy()
|
/datum/artifact_trigger/touch/Destroy()
|
||||||
my_artifact.on_attackhand.Remove(key_attackhand)
|
my_artifact.lazy_unregister_event(/lazy_event/on_attackhand, src, .proc/owner_attackhand)
|
||||||
|
my_artifact.lazy_unregister_event(/lazy_event/on_bumped, src, .proc/owner_bumped)
|
||||||
..()
|
..()
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
/spell/aoe_turf/conjure/arcane_golem/cast(list/targets, mob/user)
|
/spell/aoe_turf/conjure/arcane_golem/cast(list/targets, mob/user)
|
||||||
//Link the golem to its master
|
//Link the golem to its master
|
||||||
newVars = list("master_spell" = src)
|
newVars = list("master_spell" = src)
|
||||||
user.on_spellcast.Add(src, "copy_spellcast")
|
user.lazy_register_event(/lazy_event/on_spellcast, src, .proc/copy_spellcast)
|
||||||
|
|
||||||
check_golems()
|
check_golems()
|
||||||
|
|
||||||
@@ -60,9 +60,8 @@
|
|||||||
to_chat(user, "<span class='sinister'>You infuse \the [AG] with your mana and knowledge. If it dies, your arcane abilities will be affected.</span>")
|
to_chat(user, "<span class='sinister'>You infuse \the [AG] with your mana and knowledge. If it dies, your arcane abilities will be affected.</span>")
|
||||||
src.golems.Add(AG)
|
src.golems.Add(AG)
|
||||||
|
|
||||||
/spell/aoe_turf/conjure/arcane_golem/proc/copy_spellcast(list/arguments)
|
/spell/aoe_turf/conjure/arcane_golem/proc/copy_spellcast(spell/spell, mob/user, list/targets)
|
||||||
var/spell/spell_to_copy = arguments["spell"]
|
var/spell/spell_to_copy = spell
|
||||||
var/target = arguments["target"]
|
|
||||||
|
|
||||||
if(!istype(spell_to_copy) || !istype(spell_to_copy.holder))
|
if(!istype(spell_to_copy) || !istype(spell_to_copy.holder))
|
||||||
return
|
return
|
||||||
@@ -76,12 +75,10 @@
|
|||||||
var/cast_dir = spell_to_copy.holder.dir
|
var/cast_dir = spell_to_copy.holder.dir
|
||||||
|
|
||||||
//Convert the target argument to a list of targets
|
//Convert the target argument to a list of targets
|
||||||
var/list/targets
|
if(islist(targets))
|
||||||
if(istype(target, /list))
|
targets = targets.Copy()
|
||||||
var/list/L = target
|
else if(!isnull(targets))
|
||||||
targets = L.Copy()
|
targets = list(targets)
|
||||||
else if(!isnull(target))
|
|
||||||
targets = list(target)
|
|
||||||
|
|
||||||
for(var/mob/living/simple_animal/hostile/arcane_golem/AG in golems)
|
for(var/mob/living/simple_animal/hostile/arcane_golem/AG in golems)
|
||||||
var/spell/cast_spell = spell_to_copy
|
var/spell/cast_spell = spell_to_copy
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ var/global/list/falltempoverlays = list()
|
|||||||
if(C.mob)
|
if(C.mob)
|
||||||
C.mob.see_fall()
|
C.mob.see_fall()
|
||||||
|
|
||||||
INVOKE_EVENT(user.on_spellcast, list("spell" = src, "target" = targets, "user" = user))
|
user.lazy_invoke_event(/lazy_event/on_spellcast, list("spell" = src, "user" = user, "targets" = targets))
|
||||||
|
|
||||||
//animate(aoe_underlay, transform = null, time = 2)
|
//animate(aoe_underlay, transform = null, time = 2)
|
||||||
//var/oursound = (invocation == "ZA WARUDO" ? 'sound/effects/theworld.ogg' :'sound/effects/fall.ogg')
|
//var/oursound = (invocation == "ZA WARUDO" ? 'sound/effects/theworld.ogg' :'sound/effects/fall.ogg')
|
||||||
|
|||||||
@@ -39,18 +39,17 @@
|
|||||||
for(var/mob/living/T in view(L))
|
for(var/mob/living/T in view(L))
|
||||||
if(!T.isDead() && (T != L))
|
if(!T.isDead() && (T != L))
|
||||||
to_chat(T, "<span class='sinister'>An unholy charm binds your life to [L]. While the spell is active, any pain \he receive\s will be redirected to you.</span>")
|
to_chat(T, "<span class='sinister'>An unholy charm binds your life to [L]. While the spell is active, any pain \he receive\s will be redirected to you.</span>")
|
||||||
var/event_key = L.on_damaged.Add(src, "reflect")
|
L.lazy_register_event(/lazy_event/on_damaged, src, .proc/reflect)
|
||||||
L.overlays.Add(user_overlay)
|
L.overlays.Add(user_overlay)
|
||||||
playsound(L, 'sound/effects/vampire_intro.ogg', 80, 1, "vary" = 0)
|
playsound(L, 'sound/effects/vampire_intro.ogg', 80, 1, "vary" = 0)
|
||||||
|
|
||||||
spawn(duration)
|
spawn(duration)
|
||||||
to_chat(L, "<span class='sinister'>Your life essence is no longer bound to this plane. You won't reflect received damage to your enemies anymore.</span>")
|
to_chat(L, "<span class='sinister'>Your life essence is no longer bound to this plane. You won't reflect received damage to your enemies anymore.</span>")
|
||||||
L.on_damaged.Remove(event_key)
|
L.lazy_unregister_event(/lazy_event/on_damaged, src, .proc/reflect)
|
||||||
L.overlays.Remove(user_overlay)
|
L.overlays.Remove(user_overlay)
|
||||||
|
|
||||||
/spell/mirror_of_pain/proc/reflect(list/arguments)
|
/spell/mirror_of_pain/proc/reflect(kind, amount)
|
||||||
var/damage_type = arguments["type"]
|
var/damage_type = kind
|
||||||
var/amount = arguments["amount"]
|
|
||||||
|
|
||||||
if(amount <= 0)
|
if(amount <= 0)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ var/list/spells = typesof(/spell) //needed for the badmin verb for now
|
|||||||
invocation(user, targets)
|
invocation(user, targets)
|
||||||
|
|
||||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>[user.real_name] ([user.ckey]) cast the spell [name].</font>")
|
user.attack_log += text("\[[time_stamp()]\] <font color='red'>[user.real_name] ([user.ckey]) cast the spell [name].</font>")
|
||||||
INVOKE_EVENT(user.on_spellcast, list("spell" = src, "target" = targets, "user" = user))
|
user.lazy_invoke_event(/lazy_event/on_spellcast, list("spell" = src, "user" = user, "targets" = targets))
|
||||||
|
|
||||||
if(prob(critfailchance))
|
if(prob(critfailchance))
|
||||||
critfail(targets, user)
|
critfail(targets, user)
|
||||||
@@ -210,48 +210,36 @@ var/list/spells = typesof(/spell) //needed for the badmin verb for now
|
|||||||
if(!cast_check(skipcharge, user))
|
if(!cast_check(skipcharge, user))
|
||||||
return 0
|
return 0
|
||||||
user.remove_spell_channeling() //In case we're swapping from an older spell to this new one
|
user.remove_spell_channeling() //In case we're swapping from an older spell to this new one
|
||||||
user.spell_channeling = user.on_uattack.Add(src, "channeled_spell")
|
user.lazy_register_event(/lazy_event/on_uattack, src, .proc/channeled_spell)
|
||||||
|
user.spell_channeling = src
|
||||||
if(spell_flags & CAN_CHANNEL_RESTRAINED)
|
if(spell_flags & CAN_CHANNEL_RESTRAINED)
|
||||||
user.spell_channeling = user.on_ruattack.Add(src, "channeled_spell")
|
user.lazy_register_event(/lazy_event/on_ruattack, src, .proc/channeled_spell)
|
||||||
|
user.spell_channeling = src
|
||||||
connected_button.name = "(Ready) [name]"
|
connected_button.name = "(Ready) [name]"
|
||||||
currently_channeled = 1
|
currently_channeled = 1
|
||||||
connected_button.add_channeling()
|
connected_button.add_channeling()
|
||||||
else
|
else
|
||||||
var/event/E = user.on_uattack
|
user.lazy_unregister_event(/lazy_event/on_uattack, src, .proc/channeled_spell)
|
||||||
E.handlers.Remove(user.spell_channeling)
|
user.lazy_unregister_event(/lazy_event/on_ruattack, src, .proc/channeled_spell)
|
||||||
var/event/ER = user.on_ruattack
|
|
||||||
if(ER)
|
|
||||||
ER.handlers.Remove(user.spell_channeling)
|
|
||||||
user.spell_channeling = null
|
user.spell_channeling = null
|
||||||
currently_channeled = 0
|
currently_channeled = 0
|
||||||
connected_button.remove_channeling()
|
connected_button.remove_channeling()
|
||||||
connected_button.name = name
|
connected_button.name = name
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/spell/proc/channeled_spell(var/list/args)
|
/spell/proc/channeled_spell(atom/atom)
|
||||||
var/event/E = args["event"]
|
var/list/target = list(atom)
|
||||||
|
|
||||||
if(!currently_channeled)
|
|
||||||
E.handlers.Remove("\ref[src]:channeled_spell")
|
|
||||||
return 0
|
|
||||||
|
|
||||||
var/atom/A = args["atom"]
|
|
||||||
|
|
||||||
if(E.holder != holder)
|
|
||||||
E.handlers.Remove("\ref[src]:channeled_spell")
|
|
||||||
return 0
|
|
||||||
var/list/target = list(A)
|
|
||||||
var/mob/user = holder
|
var/mob/user = holder
|
||||||
user.attack_delayer.delayNext(0)
|
user.attack_delayer.delayNext(0)
|
||||||
|
|
||||||
if(cast_check(1, holder) && is_valid_target(A, user))
|
if(cast_check(1, holder) && is_valid_target(atom, user))
|
||||||
target = before_cast(target, user) //applies any overlays and effects
|
target = before_cast(target, user) //applies any overlays and effects
|
||||||
if(!target.len) //before cast has rechecked what we can target
|
if(!target.len) //before cast has rechecked what we can target
|
||||||
return
|
return
|
||||||
invocation(user, target)
|
invocation(user, target)
|
||||||
|
|
||||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>[user.real_name] ([user.ckey]) cast the spell [name].</font>")
|
user.attack_log += text("\[[time_stamp()]\] <font color='red'>[user.real_name] ([user.ckey]) cast the spell [name].</font>")
|
||||||
INVOKE_EVENT(user.on_spellcast, list("spell" = src, "target" = target, "user" = user))
|
user.lazy_invoke_event(/lazy_event/on_spellcast, list("spell" = src, "user" = user, "targets" = target))
|
||||||
|
|
||||||
if(prob(critfailchance))
|
if(prob(critfailchance))
|
||||||
critfail(target, holder)
|
critfail(target, holder)
|
||||||
|
|||||||
Reference in New Issue
Block a user