mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-13 16:13:19 +01:00
Table crafting refactor
This commit is contained in:
@@ -133,6 +133,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
|
||||
new/datum/stack_recipe("wooden chair", /obj/structure/stool/bed/chair/wood/normal, 3, time = 10, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("bookcase", /obj/structure/bookcase, 5, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 40), \
|
||||
new/datum/stack_recipe("crossbow frame", /obj/item/weapon/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0), \
|
||||
new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1), \
|
||||
|
||||
@@ -118,81 +118,14 @@
|
||||
/*
|
||||
* Wrapping Paper
|
||||
*/
|
||||
/obj/item/weapon/wrapping_paper
|
||||
/obj/item/stack/wrapping_paper
|
||||
name = "wrapping paper"
|
||||
desc = "You can use this to wrap items in."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "wrap_paper"
|
||||
var/amount = 20.0
|
||||
flags = NOBLUDGEON
|
||||
amount = 25
|
||||
max_amount = 25
|
||||
|
||||
/obj/item/weapon/wrapping_paper/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if (!( locate(/obj/structure/table, src.loc) ))
|
||||
user << "\blue You MUST put the paper on a table!"
|
||||
if (W.w_class < 4)
|
||||
if ((istype(user.l_hand, /obj/item/weapon/wirecutters) || istype(user.r_hand, /obj/item/weapon/wirecutters)))
|
||||
var/a_used = 2 ** (src.w_class - 1)
|
||||
if (src.amount < a_used)
|
||||
user << "\blue You need more paper!"
|
||||
return
|
||||
else
|
||||
if(istype(W, /obj/item/smallDelivery) || istype(W, /obj/item/weapon/gift)) //No gift wrapping gifts!
|
||||
return
|
||||
|
||||
src.amount -= a_used
|
||||
user.drop_item()
|
||||
var/obj/item/weapon/gift/G = new /obj/item/weapon/gift( src.loc )
|
||||
G.size = W.w_class
|
||||
G.w_class = G.size + 1
|
||||
G.icon_state = text("gift[]", G.size)
|
||||
G.gift = W
|
||||
W.loc = G
|
||||
G.add_fingerprint(user)
|
||||
W.add_fingerprint(user)
|
||||
src.add_fingerprint(user)
|
||||
if (src.amount <= 0)
|
||||
new /obj/item/weapon/c_tube( src.loc )
|
||||
del(src)
|
||||
return
|
||||
else
|
||||
user << "\blue You need scissors!"
|
||||
else
|
||||
user << "\blue The object is FAR too large!"
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/wrapping_paper/examine()
|
||||
set src in oview(1)
|
||||
|
||||
..()
|
||||
usr << text("There is about [] square units of paper left!", src.amount)
|
||||
return
|
||||
|
||||
/obj/item/weapon/wrapping_paper/attack(mob/target as mob, mob/user as mob)
|
||||
if (!istype(target, /mob/living/carbon/human)) return
|
||||
var/mob/living/carbon/human/H = target
|
||||
|
||||
if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket) || H.stat)
|
||||
if (src.amount > 2)
|
||||
var/obj/effect/spresent/present = new /obj/effect/spresent (H.loc)
|
||||
src.amount -= 2
|
||||
|
||||
if (H.client)
|
||||
H.client.perspective = EYE_PERSPECTIVE
|
||||
H.client.eye = present
|
||||
|
||||
H.loc = present
|
||||
|
||||
H.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been wrapped with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to wrap [H.name] ([H.ckey])</font>")
|
||||
log_attack("[user.name] ([user.ckey]) used the [src.name] to wrap [H.name] ([H.ckey])")
|
||||
|
||||
if(!iscarbon(user))
|
||||
H.LAssailant = null
|
||||
else
|
||||
H.LAssailant = user
|
||||
|
||||
else
|
||||
user << "\blue You need more paper."
|
||||
else
|
||||
user << "They are moving around too much. A straightjacket would help."
|
||||
/obj/item/stack/wrapping_paper/attack_self(mob/user)
|
||||
user << "<span class='notice'>You need to use it on a package that has already been wrapped!</span>"
|
||||
@@ -26,15 +26,9 @@
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/examine()
|
||||
set src in usr
|
||||
usr << desc
|
||||
if(stage >= WIRED)
|
||||
if(nadeassembly)
|
||||
usr << nadeassembly.a_left.describe()
|
||||
usr << nadeassembly.a_right.describe()
|
||||
else
|
||||
usr << "The timer is set to [det_time/10] second\s."
|
||||
/obj/item/weapon/grenade/chem_grenade/examine(mob/user)
|
||||
display_timer = (stage == READY && !nadeassembly) //show/hide the timer based on assembly state
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/proc/get_trigger()
|
||||
|
||||
@@ -1,64 +1,39 @@
|
||||
//improvised explosives//
|
||||
|
||||
//iedcasing assembly crafting//
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/attackby(var/obj/item/I, mob/user as mob)
|
||||
if(istype(I, /obj/item/device/assembly/igniter))
|
||||
var/obj/item/device/assembly/igniter/G = I
|
||||
var/obj/item/weapon/grenade/iedcasing/W = new /obj/item/weapon/grenade/iedcasing
|
||||
user.unEquip(G)
|
||||
user.unEquip(src)
|
||||
user.put_in_hands(W)
|
||||
user << "<span class='notice'>You stuff the [I] in the [src], emptying the contents beforehand.</span>"
|
||||
W.underlays += image(src.icon, icon_state = src.icon_state)
|
||||
del(I)
|
||||
del(src)
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing
|
||||
name = "improvised explosive assembly"
|
||||
desc = "An igniter stuffed into an aluminum shell."
|
||||
name = "improvised firebomb"
|
||||
desc = "A weak, improvised incendiary device."
|
||||
w_class = 2.0
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "improvised_grenade"
|
||||
item_state = "flashbang"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
var/assembled = 0
|
||||
active = 1
|
||||
active = 0
|
||||
det_time = 50
|
||||
display_timer = 0
|
||||
var/range = 3
|
||||
var/times = list()
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing/New(loc)
|
||||
..()
|
||||
overlays += image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled")
|
||||
overlays += image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_wired")
|
||||
times = list("5" = 10, "-1" = 20, "[rand(30,80)]" = 50, "[rand(65,180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value]
|
||||
det_time = text2num(pickweight(times))
|
||||
if(det_time < 0) //checking for 'duds'
|
||||
range = 1
|
||||
det_time = rand(30,80)
|
||||
else
|
||||
range = pick(2,2,2,3,3,3,4)
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing/CheckParts()
|
||||
var/obj/item/weapon/reagent_containers/food/drinks/cans/can = locate() in contents
|
||||
if(can)
|
||||
underlays += can
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing/afterattack(atom/target, mob/user , flag) //Filling up the can
|
||||
if(assembled == 0)
|
||||
if( istype(target, /obj/structure/reagent_dispensers/fueltank))
|
||||
if(target.reagents.total_volume < 50)
|
||||
user << "<span class='notice'>There's not enough fuel left to work with.</span>"
|
||||
return
|
||||
var/obj/structure/reagent_dispensers/fueltank/F = target
|
||||
F.reagents.remove_reagent("fuel", 50, 1)//Deleting 50 fuel from the welding fuel tank,
|
||||
assembled = 1
|
||||
user << "<span class='notice'>You've filled the makeshift explosive with welding fuel.</span>"
|
||||
playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
|
||||
desc = "An improvised explosive assembly. Filled to the brim with 'Explosive flavor'"
|
||||
overlays += image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled")
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing/attackby(var/obj/item/I, mob/user as mob) //Wiring the can for ignition
|
||||
if(istype(I, /obj/item/stack/cable_coil))
|
||||
if(assembled == 1)
|
||||
var/obj/item/stack/cable_coil/C = I
|
||||
C.use(1)
|
||||
assembled = 2
|
||||
user << "<span class='notice'>You wire the igniter to detonate the fuel.</span>"
|
||||
desc = "A weak, improvised explosive."
|
||||
overlays += image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_wired")
|
||||
name = "improvised explosive"
|
||||
active = 0
|
||||
det_time = rand(30,80)
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing/attack_self(mob/user as mob) //
|
||||
if(!active)
|
||||
@@ -67,14 +42,12 @@
|
||||
active = 1
|
||||
overlays -= image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled")
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
assembled = 3
|
||||
add_fingerprint(user)
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
var/log_str = "[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>."
|
||||
msg_admin_attack(log_str)
|
||||
log_game(log_str)
|
||||
bombers += "[log_str]"
|
||||
|
||||
message_admins("[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
|
||||
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).")
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.throw_mode_on()
|
||||
@@ -82,14 +55,10 @@
|
||||
prime()
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing/prime() //Blowing that can up
|
||||
// update_mob()
|
||||
// explosion(epicenter, 1, 2, 3, 3)
|
||||
explosion(src.loc,0,0,2,2)
|
||||
del(src)
|
||||
update_mob()
|
||||
explosion(src.loc,-1,-1,-1, flame_range = range) // no explosive damage, only a large fireball.
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing/examine()
|
||||
set src in usr
|
||||
usr << desc
|
||||
if(assembled == 3)
|
||||
usr << "You can't tell when it will explode!" //Stops you from checking the time to detonation unlike regular grenades
|
||||
return
|
||||
/obj/item/weapon/grenade/iedcasing/examine(mob/user)
|
||||
..()
|
||||
user << "You can't tell when it will explode!"
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
slot_flags = SLOT_BELT
|
||||
var/active = 0
|
||||
var/det_time = 50
|
||||
var/display_timer = 1
|
||||
|
||||
/obj/item/weapon/grenade/proc/clown_check(var/mob/living/user)
|
||||
if((M_CLUMSY in user.mutations) && prob(50))
|
||||
@@ -45,13 +46,12 @@
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/examine()
|
||||
set src in usr
|
||||
usr << desc
|
||||
if(det_time > 1)
|
||||
usr << "The timer is set to [det_time/10] seconds."
|
||||
return
|
||||
usr << "\The [src] is set for instant detonation."
|
||||
|
||||
..()
|
||||
if(display_timer)
|
||||
if(det_time > 1)
|
||||
usr << "The timer is set to [det_time/10] second\s."
|
||||
else
|
||||
usr << "\The [src] is set for instant detonation."
|
||||
|
||||
/obj/item/weapon/grenade/attack_self(mob/user as mob)
|
||||
if(!active)
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
item_to_spawn()
|
||||
return pick(prob(3);/obj/random/powercell,\
|
||||
prob(2);/obj/random/technology_scanner,\
|
||||
prob(1);/obj/item/weapon/packageWrap,\
|
||||
prob(1);/obj/item/stack/packageWrap,\
|
||||
prob(2);/obj/random/bomb_supply,\
|
||||
prob(1);/obj/item/weapon/extinguisher,\
|
||||
prob(1);/obj/item/clothing/gloves/fyellow,\
|
||||
|
||||
@@ -265,7 +265,7 @@
|
||||
return
|
||||
if(W)
|
||||
W.loc = src.loc
|
||||
else if(istype(W, /obj/item/weapon/packageWrap))
|
||||
else if(istype(W, /obj/item/stack/packageWrap))
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
else
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
O.show_message("<span class='warning'>The locker has been broken by [user] with an electromagnetic card!</span>", 1, "You hear a faint electrical spark.", 2)
|
||||
else if(istype(W,/obj/item/weapon/packageWrap) || istype(W,/obj/item/weapon/weldingtool))
|
||||
else if(istype(W,/obj/item/stack/packageWrap) || istype(W,/obj/item/weapon/weldingtool))
|
||||
return ..(W,user)
|
||||
else
|
||||
togglelock(user)
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
return
|
||||
if(W)
|
||||
W.loc = src.loc
|
||||
else if(istype(W, /obj/item/weapon/packageWrap))
|
||||
else if(istype(W, /obj/item/stack/packageWrap))
|
||||
return
|
||||
else if(istype(W, /obj/item/stack/cable_coil))
|
||||
if(rigged)
|
||||
@@ -247,7 +247,7 @@
|
||||
src.toggle(user)
|
||||
|
||||
/obj/structure/closet/crate/secure/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(is_type_in_list(W, list(/obj/item/weapon/packageWrap, /obj/item/stack/cable_coil, /obj/item/device/radio/electropack, /obj/item/weapon/wirecutters)))
|
||||
if(is_type_in_list(W, list(/obj/item/stack/packageWrap, /obj/item/stack/cable_coil, /obj/item/device/radio/electropack, /obj/item/weapon/wirecutters)))
|
||||
return ..()
|
||||
if(locked && (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)))
|
||||
overlays.Cut()
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
var/parts = /obj/item/weapon/table_parts
|
||||
var/flipped = 0
|
||||
var/health = 100
|
||||
var/list/table_contents = list()
|
||||
var/busy = 0
|
||||
|
||||
/obj/structure/table/proc/update_adjacent()
|
||||
@@ -41,9 +40,6 @@
|
||||
update_icon()
|
||||
update_adjacent()
|
||||
|
||||
spawn(5)
|
||||
craft_holder = new /datum/crafting_holder(src, "table")
|
||||
|
||||
/obj/structure/table/Destroy()
|
||||
update_adjacent()
|
||||
..()
|
||||
@@ -53,11 +49,6 @@
|
||||
density = 0
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/table/MouseDrop(atom/over)
|
||||
if(usr.stat || usr.lying || !Adjacent(usr) || (over != usr))
|
||||
return
|
||||
craft_holder.interact(usr)
|
||||
|
||||
/obj/structure/table/update_icon()
|
||||
if(flipped)
|
||||
var/type = 0
|
||||
|
||||
Reference in New Issue
Block a user