Table crafting refactor

This commit is contained in:
Markolie
2015-02-22 01:50:57 +01:00
parent c37e767f63
commit efb45ea228
29 changed files with 682 additions and 770 deletions
@@ -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)
+1 -1
View File
@@ -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