Files
Aurora.3/code/game/objects/items/weapons/weaponry.dm
Fluffy 9636363e60 Refactored the attack proc (#19908)
Refactored the attack proc signature.
Added signals and components for the attack proc.
Added signals and components for the attackby proc.
Adjusted some leftover attackby procs signatures.
Added grep test to ensure people don't keep adding attack/attackby procs
with the wrong signature.
2024-10-06 21:30:00 +00:00

152 lines
4.1 KiB
Plaintext

/obj/item/energy_net
name = "energy net"
desc = "It's a net made of green energy."
icon = 'icons/effects/effects.dmi'
icon_state = "energynet"
throwforce = 0
force = 0
var/net_type = /obj/effect/energy_net
/obj/item/energy_net/dropped()
. = ..()
if(!QDELETED(src))
QDEL_IN(src, 1)
/obj/item/energy_net/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
..()
var/mob/living/M = hit_atom
if(!istype(M))
qdel(src)
return
var/obj/effect/energy_net/EN = locate() in get_turf(M)
if(EN)
qdel(EN)
var/turf/T = get_turf(M)
if(T)
var/obj/effect/energy_net/net = new net_type(T)
net.layer = ABOVE_HUMAN_LAYER
M.captured = TRUE
M.update_canmove()
net.affecting = M
M.visible_message(SPAN_DANGER("\The [M] was caught in \the [net]!"), SPAN_DANGER("You get caught in \the [net]!"))
qdel(src)
/obj/effect/energy_net
name = "energy net"
desc = "It's a net made of green energy."
icon = 'icons/effects/effects.dmi'
icon_state = "energynet"
density = TRUE
opacity = FALSE
anchored = TRUE
mouse_opacity = MOUSE_OPACITY_ICON
var/health = 50
var/mob/living/affecting = null //Who it is currently affecting, if anyone.
/obj/effect/energy_net/Initialize()
. = ..()
START_PROCESSING(SSprocessing, src)
/obj/effect/energy_net/Destroy()
STOP_PROCESSING(SSprocessing, src)
if(affecting)
affecting.anchored = initial(affecting.anchored)
affecting.captured = FALSE
affecting.update_canmove()
to_chat(affecting, SPAN_GOOD("You are free of the net!"))
affecting = null
return ..()
/obj/effect/energy_net/proc/health_check()
if(health <= 0)
density = FALSE
src.visible_message(SPAN_WARNING("\The [src] is torn apart!"))
qdel(src)
/obj/effect/energy_net/process()
if(isnull(affecting) || get_turf(src) != get_turf(affecting))
qdel(src)
return
/obj/effect/energy_net/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit)
. = ..()
if(. != BULLET_ACT_HIT)
return .
health -= hitting_projectile.get_structure_damage()
health_check()
/obj/effect/energy_net/ex_act(var/severity = 2.0)
health = 0
health_check()
/obj/effect/energy_net/attack_hand(var/mob/user)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
user.do_attack_animation(src, FIST_ATTACK_ANIMATION)
if(user == affecting)
to_chat(user, SPAN_WARNING("You can't claw at \the [src] while trapped inside it! You need to use a weapon."))
return
var/mob/living/carbon/human/H = user
if(istype(H))
if(H.species.can_shred(H))
playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1)
health -= rand(10, 20)
else
health -= rand(1, 3)
else if ((user.mutations & HULK))
health = 0
else
health -= rand(5, 8)
user.visible_message(SPAN_WARNING("\The [user] claws at \the [src]!"), SPAN_WARNING("You claw at \the [src]!"))
health_check()
/obj/effect/energy_net/attackby(obj/item/attacking_item, mob/user)
user.do_attack_animation(src, attacking_item)
var/attack_force = attacking_item.force
if(user == affecting)
attack_force /= 2
health -= attack_force
health_check()
/obj/item/canesword
name = "thin sword"
desc = "A thin, sharp blade with an elegant handle."
icon = 'icons/obj/sword.dmi'
icon_state = "canesword"
item_state = "canesword"
force = 25
throwforce = 5
w_class = WEIGHT_CLASS_BULKY
sharp = 1
edge = TRUE
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
contained_sprite = TRUE
drop_sound = 'sound/items/drop/sword.ogg'
pickup_sound = /singleton/sound_category/sword_pickup_sound
equip_sound = /singleton/sound_category/sword_equip_sound
/obj/item/banhammer
desc = "banhammer"
name = "banhammer"
icon = 'icons/obj/items.dmi'
icon_state = "toyhammer"
slot_flags = SLOT_BELT
throwforce = 0
w_class = WEIGHT_CLASS_SMALL
throw_speed = 7
throw_range = 15
attack_verb = list("banned")
/obj/item/banhammer/attack(mob/living/target_mob, mob/living/user, target_zone)
to_chat(target_mob, SPAN_WARNING("<b> You have been banned FOR NO REISIN by [user]</b>"))
to_chat(user, SPAN_WARNING(" You have <b>BANNED</b> [target_mob]"))
playsound(loc, 'sound/effects/adminhelp.ogg', 15)