Stackable items redo. Many improvements, massive code clean up.

Metal and related materials now noticeable more user-friendly.
Added new canister color: yellow "CAUTION". Used for newly created from metal canisters. Can be relabeled once.
Some typos were fixed.
dsay verb now uses fakekey in stealth mode.
AI cannot remove the cell from the charger.
Added alientalk chat prefix: ":a" by Barhandar. Also added keyboard layout independent russian prefixes.
Binary translator done by more convenient may by Barhandar.
Is possible now to wash bloody hands in sink.
Probably fixed bug causes gibbed revheads be not counted as dead.
Some other fixes.


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@752 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
rastaf.zero@gmail.com
2011-01-03 01:26:01 +00:00
parent 565c2320c4
commit 09e0bcf987
51 changed files with 1138 additions and 1404 deletions
+1 -1
View File
@@ -144,7 +144,7 @@
user << "\blue You need more welding fuel to complete this task."
return
W:use_fuel(1)
new /obj/item/weapon/sheet/metal(src.loc)
new /obj/item/stack/sheet/metal(src.loc)
for (var/mob/M in viewers(src))
M.show_message("\red [src] has been cut apart by [user.name] with the weldingtool.", 3, "\red You hear welding.", 2)
del(src)
+4 -7
View File
@@ -82,7 +82,7 @@ obj/door_assembly
state = 1
glass = 1
/obj/door_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/door_assembly/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/weldingtool) && W:welding && !anchored )
if (W:get_fuel() < 1)
user << "\blue You need more welding fuel to dissassemble the airlock assembly."
@@ -94,12 +94,9 @@ obj/door_assembly
sleep(40)
if(get_turf(user) == T)
user << "\blue You dissasembled the airlock assembly!"
new /obj/item/weapon/sheet/metal(get_turf(src))
new /obj/item/weapon/sheet/metal(get_turf(src))
new /obj/item/weapon/sheet/metal(get_turf(src))
new /obj/item/weapon/sheet/metal(get_turf(src))
new /obj/item/stack/sheet/metal(get_turf(src), 4)
if(src.glass==1)
new /obj/item/weapon/sheet/rglass(get_turf(src))
new /obj/item/stack/sheet/rglass(get_turf(src))
del(src)
else if(istype(W, /obj/item/weapon/wrench) && !anchored )
playsound(src.loc, 'Ratchet.ogg', 100, 1)
@@ -207,7 +204,7 @@ obj/door_assembly
ae = electronics
electronics = null
ae.loc = src.loc
else if(istype(W, /obj/item/weapon/sheet/rglass) && glass == 0)
else if(istype(W, /obj/item/stack/sheet/rglass) && glass == 0)
playsound(src.loc, 'Crowbar.ogg', 100, 1)
var/turf/T = get_turf(user)
user.visible_message("[user] adds reinforced glass windows to the airlock assembly.", "You start to install reinforced glass windows into the airlock assembly.")
+2 -2
View File
@@ -131,11 +131,11 @@
src.icon_state = "brokengrille"
src.density = 0
src.destroyed = 1
new /obj/item/weapon/rods( src.loc )
new /obj/item/stack/rods( src.loc )
else
if (src.health <= -10.0)
new /obj/item/weapon/rods( src.loc )
new /obj/item/stack/rods( src.loc )
//SN src = null
del(src)
return
+1 -2
View File
@@ -2,8 +2,7 @@
/obj/item/apc_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wrench))
var/obj/item/weapon/sheet/metal/M = new /obj/item/weapon/sheet/metal( src.loc )
M.amount = 2
new /obj/item/stack/sheet/metal( src.loc, 2 )
del(src)
/obj/item/apc_frame/proc/try_build(turf/on_wall)
+5 -10
View File
@@ -71,18 +71,13 @@
return 0
/obj/item/robot_parts/robot_suit/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/sheet/metal))
if(istype(W, /obj/item/stack/sheet/metal))
var/obj/item/weapon/ed209_assembly/B = new /obj/item/weapon/ed209_assembly
B.loc = user
if (user.r_hand == W)
user.u_equip(W)
user.r_hand = B
else
user.u_equip(W)
user.l_hand = B
B.layer = 20
user << "You armed the robot frame"
del(W)
W:use(1)
if (user.get_inactive_hand()==src)
user.before_take_item(src)
user.put_in_inactive_hand(B)
del(src)
if(istype(W, /obj/item/robot_parts/l_leg))
user.drop_item()
@@ -21,7 +21,7 @@ GETLINEEEEEEEEEEEEEEEEEEEEE
var/lit = 0 //on or off
var/turf/previousturf = null
var/obj/item/weapon/weldingtool/part1 = null
var/obj/item/weapon/rods/part2 = null
var/obj/item/stack/rods/part2 = null
var/obj/item/device/igniter/part3 = null
var/obj/item/weapon/tank/plasma/part4 = null
m_amt = 500
@@ -155,7 +155,7 @@ GETLINEEEEEEEEEEEEEEEEEEEEE
if(isturf(location)) //start a fire if possible
location.hotspot_expose(700, 2)
/obj/item/weapon/flamethrower/attackby(obj/item/weapon/tank/plasma/W as obj, mob/user as mob)
/obj/item/weapon/flamethrower/attackby(obj/item/W as obj, mob/user as mob)
if(user.stat || user.restrained() || user.lying)
return
if (istype(W,/obj/item/weapon/tank/plasma))
-278
View File
@@ -1,278 +0,0 @@
/*
CONTAINS:
GLASS SHEET
REINFORCED GLASS SHEET
SHARDS
*/
/obj/item/weapon/sheet/glass/attack_hand(mob/user as mob)
if ((user.r_hand == src || user.l_hand == src))
src.add_fingerprint(user)
var/obj/item/weapon/sheet/glass/F = new /obj/item/weapon/sheet/glass( user )
F.amount = 1
src.amount--
if (user.hand)
user.l_hand = F
else
user.r_hand = F
F.layer = 20
F.add_fingerprint(user)
if (src.amount < 1)
//SN src = null
del(src)
return
else
..()
src.force = 5
return
/obj/item/weapon/sheet/glass/attackby(obj/item/weapon/W, mob/user)
if ( istype(W, /obj/item/weapon/sheet/glass) )
var/obj/item/weapon/sheet/glass/G = W
if (G.amount >= MAX_STACK_AMOUNT_GLASS)
return
if (G.amount + src.amount > MAX_STACK_AMOUNT_GLASS)
src.amount = G.amount + src.amount - MAX_STACK_AMOUNT_GLASS
G.amount = MAX_STACK_AMOUNT_GLASS
else
G.amount += src.amount
//SN src = null
del(src)
return
return
else if( istype(W, /obj/item/weapon/rods) )
var/obj/item/weapon/rods/V = W
var/obj/item/weapon/sheet/rglass/R = new /obj/item/weapon/sheet/rglass(user.loc)
R.loc = user.loc
R.add_fingerprint(user)
if(V.amount == 1)
if(user.client)
user.client.screen -= V
user.u_equip(W)
del(W)
else
V.amount--
if(src.amount == 1)
if(user.client)
user.client.screen -= src
user.u_equip(src)
del(src)
else
src.amount--
return
/obj/item/weapon/sheet/glass/examine()
set src in view(1)
..()
usr << text("There are [] glass sheet\s on the stack.", src.amount)
return
/obj/item/weapon/sheet/glass/attack_self(mob/user as mob)
if (!( istype(usr.loc, /turf/simulated) ))
return
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
usr << "\red You don't have the dexterity to do this!"
return
switch(alert("Sheet-Glass", "Would you like full tile glass or one direction?", "one direct", "full (2 sheets)", "cancel", null))
if("one direct")
var/go = 1
for (var/obj/window/win in usr.loc)
if(win.ini_dir == NORTHWEST || win.ini_dir == NORTHEAST || win.ini_dir == SOUTHWEST || win.ini_dir == SOUTHEAST)
go = 0
if(go)
var/obj/window/W = new /obj/window( usr.loc )
W.anchored = 0
if (src.amount < 1)
return
src.amount--
else usr << "Can't let you do that."
if("full (2 sheets)")
var/go = 1
for (var/obj/window/win in usr.loc)
if(win)
go = 0
if (go)
if (src.amount < 2)
return
src.amount -= 2
var/obj/window/W = new /obj/window( usr.loc )
W.dir = SOUTHWEST
W.ini_dir = SOUTHWEST
W.anchored = 0
else usr << "Can't let you do that."
else
if (src.amount <= 0)
user.u_equip(src)
del(src)
return
return
// REINFORCED GLASS
/obj/item/weapon/sheet/rglass/attack_hand(mob/user as mob)
if ((user.r_hand == src || user.l_hand == src))
src.add_fingerprint(user)
var/obj/item/weapon/sheet/rglass/F = new /obj/item/weapon/sheet/rglass( user )
F.amount = 1
src.amount--
if (user.hand)
user.l_hand = F
else
user.r_hand = F
F.layer = 20
F.add_fingerprint(user)
if (src.amount < 1)
//SN src = null
del(src)
return
else
..()
src.force = 5
return
/obj/item/weapon/sheet/rglass/attackby(obj/item/weapon/sheet/rglass/W as obj, mob/user as mob)
if (!( istype(W, /obj/item/weapon/sheet/rglass) ))
return
if (W.amount >= MAX_STACK_AMOUNT_GLASS)
return
if (W.amount + src.amount > MAX_STACK_AMOUNT_GLASS)
src.amount = W.amount + src.amount - MAX_STACK_AMOUNT_GLASS
W.amount = MAX_STACK_AMOUNT_GLASS
else
W.amount += src.amount
del(src)
return
return
/obj/item/weapon/sheet/rglass/examine()
set src in view(1)
..()
usr << text("There are [] reinforced glass sheet\s on the stack.", src.amount)
return
/obj/item/weapon/sheet/rglass/attack_self(mob/user as mob)
if (!istype(usr.loc, /turf/simulated))
return
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
usr << "\red You don't have the dexterity to do this!"
return
switch(alert("Sheet Reinf. Glass", "Would you like full tile glass or one direction?", "one direct", "full (2 sheets)", "cancel", null))
if("one direct")
var/go = 1
for (var/obj/window/win in usr.loc)
if(win.ini_dir == NORTHWEST || win.ini_dir == NORTHEAST || win.ini_dir == SOUTHWEST || win.ini_dir == SOUTHEAST)
go = 0
if(go)
var/obj/window/W = new /obj/window( usr.loc, 1 )
W.anchored = 0
W.state = 0
if (src.amount < 1)
return
src.amount--
else usr << "Can't let you do that."
if("full (2 sheets)")
var/go = 1
for (var/obj/window/win in usr.loc)
if(win)
go = 0
if(go)
if (src.amount < 2)
return
src.amount -= 2
var/obj/window/W = new /obj/window( usr.loc, 1 )
W.dir = SOUTHWEST
W.ini_dir = SOUTHWEST
W.anchored = 0
W.state = 0
else usr << "Can't let you do that."
else
if (src.amount <= 0)
user.u_equip(src)
//SN src = null
del(src)
return
return
// SHARDS
/obj/item/weapon/shard/Bump()
spawn( 0 )
if (prob(20))
src.force = 15
else
src.force = 4
..()
return
return
/obj/item/weapon/shard/New()
//****RM
//world<<"New shard at [x],[y],[z]"
src.icon_state = pick("large", "medium", "small")
switch(src.icon_state)
if("small")
src.pixel_x = rand(1, 18)
src.pixel_y = rand(1, 18)
if("medium")
src.pixel_x = rand(1, 16)
src.pixel_y = rand(1, 16)
if("large")
src.pixel_x = rand(1, 10)
src.pixel_y = rand(1, 5)
else
return
/obj/item/weapon/shard/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (!( istype(W, /obj/item/weapon/weldingtool) && W:welding ))
return
W:eyecheck(user)
new /obj/item/weapon/sheet/glass( user.loc )
//SN src = null
del(src)
return
/obj/item/weapon/shard/HasEntered(AM as mob|obj)
if(ismob(AM))
var/mob/M = AM
M << "\red <B>You step in the broken glass!</B>"
playsound(src.loc, 'glass_step.ogg', 50, 1)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(!H.shoes)
var/datum/organ/external/affecting = H.organs[pick("l_foot", "r_foot")]
H.weakened = max(3, H.weakened)
affecting.take_damage(5, 0)
H.UpdateDamageIcon()
H.updatehealth()
..()
@@ -1,466 +0,0 @@
/*
CONTAINS:
RODS
METAL
REINFORCED METAL
LATTICE
*/
// RODS
/obj/item/weapon/rods/examine()
set src in view(1)
..()
usr << text("There are [] rod\s left on the stack.", src.amount)
return
/obj/item/weapon/rods/attack_hand(mob/user as mob)
if ((user.r_hand == src || user.l_hand == src))
src.add_fingerprint(user)
var/obj/item/weapon/rods/F = new /obj/item/weapon/rods( user )
F.amount = 1
src.amount--
if (user.hand)
user.l_hand = F
else
user.r_hand = F
F.layer = 20
F.add_fingerprint(user)
if (src.amount < 1)
//SN src = null
del(src)
return
else
..()
return
/obj/item/weapon/rods/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/weldingtool) && W:welding)
if(amount < 2)
user << "\blue You need at least two rods to do this."
return
if (W:get_fuel() < 2)
user << "\blue You need more welding fuel to complete this task."
return
W:eyecheck(user)
W:use_fuel(2)
new /obj/item/weapon/sheet/metal(usr.loc)
for (var/mob/M in viewers(src))
M.show_message("\red [src] is shaped into metal by [user.name] with the weldingtool.", 3, "\red You hear welding.", 2)
amount -= 2
if(amount == 0)
del(src)
return
if (istype(W, /obj/item/weapon/rods))
if (W:amount == MAX_STACK_AMOUNT_RODS)
return
if (W:amount + src:amount > MAX_STACK_AMOUNT_RODS)
src.amount = W:amount + src:amount - MAX_STACK_AMOUNT_RODS
W:amount = MAX_STACK_AMOUNT_RODS
else
W:amount += src:amount
//SN src = null
del(src)
return
return
/obj/item/weapon/rods/attack_self(mob/user as mob)
if (locate(/obj/grille, usr.loc))
for(var/obj/grille/G in usr.loc)
if (G.destroyed)
G.health = 10
G.density = 1
G.destroyed = 0
G.icon_state = "grille"
src.amount--
else
else
if (src.amount < 2)
return
src.amount -= 2
new /obj/grille( usr.loc )
if (src.amount < 1)
del(src)
return
src.add_fingerprint(user)
return
// METAL SHEET
/obj/item/weapon/sheet/metal/examine()
set src in view(1)
..()
usr << text("There are [] metal sheet\s on the stack.", src.amount)
return
/obj/item/weapon/sheet/metal/attack_hand(mob/user as mob)
if ((user.r_hand == src || user.l_hand == src))
src.add_fingerprint(user)
var/obj/item/weapon/sheet/metal/F = new /obj/item/weapon/sheet/metal( user )
F.amount = 1
src.amount--
if (user.hand)
user.l_hand = F
else
user.r_hand = F
F.layer = 20
F.add_fingerprint(user)
if (src.amount < 1)
del(src)
return
else
..()
src.force = 5
return
/obj/item/weapon/sheet/metal/attackby(obj/item/weapon/sheet/metal/W as obj, mob/user as mob)
if (!( istype(W, /obj/item/weapon/sheet/metal) ))
return
if (W.amount >= MAX_STACK_AMOUNT_METAL)
return
if (W.amount + src.amount > MAX_STACK_AMOUNT_METAL)
src.amount = W.amount + src.amount - MAX_STACK_AMOUNT_METAL
W.amount = MAX_STACK_AMOUNT_METAL
else
W.amount += src.amount
//SN src = null
del(src)
return
return
/obj/item/weapon/sheet/metal/attack_self(mob/user as mob)
var/t1 = text("<HTML><HEAD></HEAD><TT>Amount Left: [] <BR>", src.amount)
var/list/L = list( )
L["stool"] = "stool"
L["chair"] = "chair"
L["bed"] = "bed (2 metal)<BR>"
L["table"] = "table parts (2 metal)"
L["rack"] = "rack parts<BR>"
L["aircan"] = "air canister (2 metal)"
L["o2can"] = "oxygen canister (2 metal)"
L["carboncan"] = "co2 canister (2 metal)"
L["plcan"] = "plasma canister (2 metal)"
L["n2can"] = "n2 canister (2 metal)"
L["n2ocan"] = "n2o canister (2 metal)"
L["closet"] = "closet (2 metal)<BR>"
L["fl_tiles"] = "4x floor tiles"
L["rods"] = "2x metal rods"
L["casing"] = "grenade casing (1 metal)"
L["reinforced"] = "reinforced sheet (2 metal)<BR>"
L["computer"] = "computer frame (5 metal)<BR>"
L["construct"] = "construct wall girders (2 metal)"
L["airlock"] = "construct airlock assembly (4 metal)"
L["apc_frame"] = "construct apc frame (2 metal)"
for(var/t in L)
t1 += text("<A href='?src=\ref[];make=[]'>[]</A> ", src, t, L[t])
t1 += "<BR>"
t1 += "</TT></HTML>"
user << browse(t1, "window=met_sheet")
onclose(user, "met_sheet")
return
/obj/item/weapon/sheet/metal/Topic(href, href_list)
..()
if ((usr.restrained() || usr.stat || usr.equipped() != src))
return
if (href_list["make"])
if (src.amount < 1)
//SN src = null
del(src)
return
switch(href_list["make"])
if("rods")
src.amount--
var/obj/item/weapon/rods/R = new /obj/item/weapon/rods( usr.loc )
R.amount = 2
if("table")
if (src.amount < 2)
usr << text("\red You haven't got enough metal to build the table parts!")
return
src.amount -= 2
new /obj/item/weapon/table_parts( usr.loc )
if("stool")
src.amount--
new /obj/stool( usr.loc )
if("chair")
src.amount--
var/obj/stool/chair/C = new /obj/stool/chair( usr.loc )
C.dir = usr.dir
if (C.dir == NORTH)
C.layer = 5
if("rack")
src.amount--
new /obj/item/weapon/rack_parts( usr.loc )
if("aircan")
if (src.amount < 2)
usr << text("\red You haven't got enough metal to build the canister!")
return
src.amount -= 2
var/obj/machinery/portable_atmospherics/canister/C = new /obj/machinery/portable_atmospherics/canister(usr.loc)
C.color = "grey"
C.icon_state = "grey"
if("o2can")
if (src.amount < 2)
usr << text("\red You haven't got enough metal to build the canister!")
return
src.amount -= 2
var/obj/machinery/portable_atmospherics/canister/C = new /obj/machinery/portable_atmospherics/canister(usr.loc)
C.color = "blue"
C.icon_state = "blue"
if("carboncan")
if (src.amount < 2)
usr << text("\red You haven't got enough metal to build the canister!")
return
src.amount -= 2
var/obj/machinery/portable_atmospherics/canister/C = new /obj/machinery/portable_atmospherics/canister(usr.loc)
C.color = "black"
C.icon_state = "black"
if("plcan")
if (src.amount < 2)
usr << text("\red You haven't got enough metal to build the canister!")
return
src.amount -= 2
var/obj/machinery/portable_atmospherics/canister/C = new /obj/machinery/portable_atmospherics/canister(usr.loc)
C.color = "orange"
C.icon_state = "orange"
if("n2can")
if (src.amount < 2)
usr << text("\red You haven't got enough metal to build the canister!")
return
src.amount -= 2
var/obj/machinery/portable_atmospherics/canister/C = new /obj/machinery/portable_atmospherics/canister(usr.loc)
C.color = "red"
C.icon_state = "red"
if("n2ocan")
if (src.amount < 2)
usr << text("\red You haven't got enough metal to build the canister!")
return
src.amount -= 2
var/obj/machinery/portable_atmospherics/canister/C = new /obj/machinery/portable_atmospherics/canister(usr.loc)
C.color = "redws"
C.icon_state = "redws"
if("reinforced")
if (src.amount < 2)
usr << text("\red You haven't got enough metal to build the reinforced sheet!")
return
src.amount -= 2
var/obj/item/weapon/sheet/r_metal/C = new /obj/item/weapon/sheet/r_metal( usr.loc )
C.amount = 1
if("casing")
if (src.amount < 1) //Not possible!
usr << text("\red You haven't got enough metal to create the grenade casing!")
return
src.amount--
new /obj/item/weapon/chem_grenade( usr.loc )
if("closet")
if (src.amount < 2)
usr << text("\red You haven't got enough metal to build the reinforced closet!")
return
src.amount -= 2
new /obj/closet( usr.loc )
if("fl_tiles")
src.amount--
var/obj/item/weapon/tile/R = new /obj/item/weapon/tile( usr.loc )
R.amount = 4
if("bed")
if (src.amount < 2)
usr << text("\red You haven't got enough metal to build the bed!")
return
src.amount -= 2
new /obj/stool/bed( usr.loc )
if("computer")
if(src.amount < 5)
usr << text("\red You haven't got enough metal to build the computer frame!")
return
src.amount -= 5
new /obj/computerframe( usr.loc )
if("construct")
if (src.amount < 2)
usr << text("\red You haven't got enough metal to construct the wall girders!")
return
usr << "\blue Building wall girders ..."
var/turf/location = usr.loc
sleep(50)
if ((usr.loc == location))
if (!istype(location, /turf/simulated/floor))
return
src.amount -= 2
new /obj/structure/girder(location)
if("airlock")
if (src.amount < 4)
usr << text("\red You haven't got enough metal to construct the airlock assembly!")
return
usr << "\blue Building airlock assembly ..."
var/turf/location = usr.loc
sleep(50)
if ((usr.loc == location))
if (!istype(location, /turf/simulated/floor))
return
src.amount -= 4
new /obj/door_assembly(location)
if("apc_frame")
if (src.amount < 2)
usr << text("\red You haven't got enough metal to build the APC frame!")
return
src.amount -= 2
new /obj/item/apc_frame(usr.loc)
if (src.amount <= 0)
usr << browse(null, "window=met_sheet")
onclose(usr, "met_sheet")
usr.u_equip(src)
del(src)
return
spawn( 0 )
src.attack_self(usr)
return
return
// REINFORCED METAL SHEET
/obj/item/weapon/sheet/r_metal/attackby(obj/item/weapon/sheet/r_metal/W as obj, mob/user as mob)
if (!( istype(W, /obj/item/weapon/sheet/r_metal) ))
return
if (W.amount >= MAX_STACK_AMOUNT_METAL)
return
if (W.amount + src.amount > MAX_STACK_AMOUNT_METAL)
src.amount = W.amount + src.amount - MAX_STACK_AMOUNT_METAL
W.amount = MAX_STACK_AMOUNT_METAL
else
W.amount += src.amount
//SN src = null
del(src)
return
return
/obj/item/weapon/sheet/r_metal/attack_self(mob/user as mob)
var/t1 = text("<HTML><HEAD></HEAD><TT>Amount Left: [] <BR>", src.amount)
var/list/L = list( )
L["table"] = "table parts (2 metal)"
L["metal"] = "2x metal sheet (1 metal)<BR>"
L["core"] = "AI core (4 metal)"
for(var/t in L)
t1 += text("<A href='?src=\ref[];make=[]'>[]</A> ", src, t, L[t])
t1 += "<BR>"
t1 += "</TT></HTML>"
user << browse(t1, "window=met_sheet")
onclose(user, "met_sheet")
return
/obj/item/weapon/sheet/r_metal/Topic(href, href_list)
..()
if ((usr.restrained() || usr.stat || usr.equipped() != src))
return
if (href_list["make"])
if (src.amount < 1)
//SN src = null
del(src)
return
switch(href_list["make"])
if("table")
if (src.amount < 2)
usr << text("\red You haven't got enough metal to build the reinforced table parts!")
return
src.amount -= 2
new /obj/item/weapon/table_parts/reinforced( usr.loc )
if("metal")
if (src.amount < 1)
usr << text("\red You haven't got enough metal to build the metal sheets!")
return
src.amount -= 1
var/obj/item/weapon/sheet/metal/C = new /obj/item/weapon/sheet/metal( usr.loc )
C.amount = 2
if("core")
if (src.amount < 4)
usr << text("\red You haven't got enough metal to build the metal sheets!")
return
src.amount -= 4
new /obj/AIcore( usr.loc )
if (src.amount <= 0)
usr << browse(null, "window=met_sheet")
onclose(usr, "met_sheet")
usr.u_equip(src)
del(src)
return
spawn( 0 )
src.attack_self(usr)
return
return
// LATTICE????
/obj/lattice/blob_act()
del(src)
return
/obj/lattice/ex_act(severity)
switch(severity)
if(1.0)
del(src)
return
if(2.0)
del(src)
return
if(3.0)
return
else
return
/obj/lattice/attackby(obj/item/weapon/C as obj, mob/user as mob)
if (istype(C, /obj/item/weapon/tile))
C:build(get_turf(src))
C:amount--
playsound(src.loc, 'Genhit.ogg', 50, 1)
C.add_fingerprint(user)
if (C:amount < 1)
user.u_equip(C)
del(C)
del(src)
return
if (istype(C, /obj/item/weapon/weldingtool) && C:welding)
user << "\blue Slicing lattice joints ..."
C:eyecheck(user)
new /obj/item/weapon/rods(src.loc)
del(src)
return
@@ -11,7 +11,7 @@ RACK PARTS
/obj/item/weapon/table_parts/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wrench))
new /obj/item/weapon/sheet/metal( src.loc )
new /obj/item/stack/sheet/metal( src.loc )
//SN src = null
del(src)
@@ -40,7 +40,7 @@ RACK PARTS
// REINFORCED TABLE PARTS
/obj/item/weapon/table_parts/reinforced/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wrench))
new /obj/item/weapon/sheet/r_metal( src.loc )
new /obj/item/stack/sheet/r_metal( src.loc )
//SN src = null
del(src)
@@ -70,7 +70,7 @@ RACK PARTS
// RACK PARTS
/obj/item/weapon/rack_parts/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wrench))
new /obj/item/weapon/sheet/metal( src.loc )
new /obj/item/stack/sheet/metal( src.loc )
del(src)
return
return
@@ -26,86 +26,3 @@ TILES
return
// TILES
/obj/item/weapon/tile/New()
src.pixel_x = rand(1, 14)
src.pixel_y = rand(1, 14)
return
/obj/item/weapon/tile/examine()
set src in view(1)
..()
usr << text("There are [] tile\s left on the stack.", src.amount)
return
/obj/item/weapon/tile/attack_hand(mob/user as mob)
if ((user.r_hand == src || user.l_hand == src))
src.add_fingerprint(user)
var/obj/item/weapon/tile/F = new /obj/item/weapon/tile( user )
F.amount = 1
src.amount--
if (user.hand)
user.l_hand = F
else
user.r_hand = F
F.layer = 20
F.add_fingerprint(user)
if (src.amount < 1)
//SN src = null
del(src)
return
else
..()
return
/obj/item/weapon/tile/attack_self(mob/user as mob)
if (usr.stat)
return
var/T = user.loc
if (!( istype(T, /turf) ))
user << "\blue You must be on the ground!"
return
else
var/S = T
if (!( istype(S, /turf/space) ))
user << "You cannot build on or repair this turf!"
return
else
src.build(S)
src.amount--
if (src.amount < 1)
user.u_equip(src)
//SN src = null
del(src)
return
src.add_fingerprint(user)
return
/obj/item/weapon/tile/attackby(obj/item/weapon/tile/W as obj, mob/user as mob)
if (!( istype(W, /obj/item/weapon/tile) ))
return
if (W.amount == 10)
return
W.add_fingerprint(user)
if (W.amount + src.amount > 10)
src.amount = W.amount + src.amount - 10
W.amount = 10
else
W.amount += src.amount
//SN src = null
del(src)
return
return
/obj/item/weapon/tile/proc/build(turf/S as turf)
var/turf/simulated/floor/W = S.ReplaceWithFloor()
W.to_plating()
return
+13 -13
View File
@@ -88,15 +88,17 @@ WELDINGTOOOL
usr << text("\icon[] [] contains [] units of fuel left!", src, src.name, get_fuel() )
return
/obj/item/weapon/weldingtool/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (status == 0 && istype(W,/obj/item/weapon/screwdriver))
status = 1
user << "\blue The welder can now be attached and modified."
else if (status == 1 && istype(W,/obj/item/weapon/rods))
var/obj/item/weapon/rods/R = W
R.amount = R.amount - 1
if (R.amount == 0)
del(R)
/obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/user as mob)
if (istype(W,/obj/item/weapon/screwdriver))
status = !status
if (status)
user << "\blue You resecure the welder."
else
user << "\blue The welder can now be attached and modified."
src.add_fingerprint(user)
else if (status == 1 && istype(W,/obj/item/stack/rods))
var/obj/item/stack/rods/R = W
R.use(1)
var/obj/item/assembly/weld_rod/F = new /obj/item/assembly/weld_rod( user )
src.loc = F
F.part1 = src
@@ -120,10 +122,8 @@ WELDINGTOOOL
R.layer = 20
F.loc = user
src.add_fingerprint(user)
else if (status == 1 && istype(W,/obj/item/weapon/screwdriver))
status = 0
user << "\blue You resecure the welder."
return
else
..()
// helper functions for weldingtool fuel use
+137
View File
@@ -0,0 +1,137 @@
/*
CONTAINS:
GLASS SHEET
REINFORCED GLASS SHEET
SHARDS
*/
/proc/construct_window(mob/usr as mob, obj/item/stack/sheet/src as obj)
if (!( istype(usr.loc, /turf/simulated) ))
return
if ( ! (istype(usr, /mob/living/carbon/human) || \
istype(usr, /mob/living/silicon) || \
istype(usr, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") )
usr << "\red You don't have the dexterity to do this!"
return 1
var/reinf = istype(src, /obj/item/stack/sheet/rglass)
var/title = reinf?"Sheet Reinf. Glass":"Sheet-Glass"
title += " ([src.amount] sheet\s left)"
switch(alert(title, "Would you like full tile glass or one direction?", "one direct", "full (2 sheets)", "cancel", null))
if("one direct")
if (src.amount < 1)
return 1
var/list/directions = new/list(cardinal)
for (var/obj/window/win in usr.loc)
directions-=win.dir
if(!(win.ini_dir in cardinal))
usr << "\red Can't let you do that."
return 1
var/obj/window/W = new /obj/window( usr.loc, reinf )
if (directions.len)
W.dir = directions[1]
W.ini_dir = W.dir
W.anchored = 0
src.use(1)
if("full (2 sheets)")
if (src.amount < 2)
return 1
if (locate(/obj/window) in usr.loc)
usr << "\red Can't let you do that."
return 1
var/obj/window/W = new /obj/window( usr.loc, reinf )
W.dir = SOUTHWEST
W.ini_dir = SOUTHWEST
W.anchored = 0
src.use(2)
else
//do nothing
return
// GLASS
/obj/item/stack/sheet/glass/attack_self(mob/user as mob)
construct_window(usr, src)
/obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user)
if( istype(W, /obj/item/stack/rods) )
var/obj/item/stack/rods/V = W
var/obj/item/stack/sheet/rglass/RG = new (user.loc)
RG.add_fingerprint(user)
RG.add_to_stacks(user)
V.use(1)
var/obj/item/stack/sheet/glass/G = src
src = null
var/replace = (user.get_inactive_hand()==G)
G.use(1)
if (!G && !RG && replace)
user.put_in_hand(RG)
else
return ..()
// REINFORCED GLASS
/obj/item/stack/sheet/rglass/attack_self(mob/user as mob)
construct_window(usr, src)
// SHARDS
/obj/item/weapon/shard/Bump()
spawn( 0 )
if (prob(20))
src.force = 15
else
src.force = 4
..()
return
return
/obj/item/weapon/shard/New()
//****RM
//world<<"New shard at [x],[y],[z]"
src.icon_state = pick("large", "medium", "small")
switch(src.icon_state)
if("small")
src.pixel_x = rand(1, 18)
src.pixel_y = rand(1, 18)
if("medium")
src.pixel_x = rand(1, 16)
src.pixel_y = rand(1, 16)
if("large")
src.pixel_x = rand(1, 10)
src.pixel_y = rand(1, 5)
else
return
/obj/item/weapon/shard/attackby(obj/item/weapon/W as obj, mob/user as mob)
if ( istype(W, /obj/item/weapon/weldingtool) && W:welding )
W:eyecheck(user)
new /obj/item/stack/sheet/glass( user.loc )
//SN src = null
del(src)
return
return ..()
/obj/item/weapon/shard/HasEntered(AM as mob|obj)
if(ismob(AM))
var/mob/M = AM
M << "\red <B>You step in the broken glass!</B>"
playsound(src.loc, 'glass_step.ogg', 50, 1)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(!H.shoes)
var/datum/organ/external/affecting = H.organs[pick("l_foot", "r_foot")]
H.weakened = max(3, H.weakened)
affecting.take_damage(5, 0)
H.UpdateDamageIcon()
H.updatehealth()
..()
+130
View File
@@ -0,0 +1,130 @@
/*
CONTAINS:
RODS
METAL
REINFORCED METAL
FLOOR TILES
*/
// RODS
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/weldingtool) && W:welding)
if(amount < 2)
user << "\red You need at least two rods to do this."
return
if (W:get_fuel() < 3)
user << "\red You need more welding fuel to complete this task."
return
W:eyecheck(user)
W:use_fuel(2)
var/obj/item/stack/sheet/metal/new_item = new(usr.loc)
new_item.add_to_stacks(usr)
for (var/mob/M in viewers(src))
M.show_message("\red [src] is shaped into metal by [user.name] with the weldingtool.", 3, "\red You hear welding.", 2)
var/obj/item/stack/rods/R = src
src = null
var/replace = (user.get_inactive_hand()==R)
R.use(2)
if (!R && replace)
user.put_in_hand(new_item)
return
..()
/obj/item/stack/rods/attack_self(mob/user as mob)
src.add_fingerprint(user)
if (locate(/obj/grille, usr.loc))
for(var/obj/grille/G in usr.loc)
if (G.destroyed)
G.health = 10
G.density = 1
G.destroyed = 0
G.icon_state = "grille"
use(1)
else
return 1
else
if(amount < 2)
user << "\blue You need at least two rods to do this."
return
new /obj/grille( usr.loc )
use(2)
return
// METAL SHEET
// /datum/stack_recipe/New(title, result_type, req_amount, res_amount, max_res_amount, time, one_per_turf, on_floor = 0)
var/global/list/datum/stack_recipe/metal_recipes = list ( \
new/datum/stack_recipe("stool", /obj/stool), \
new/datum/stack_recipe("chair", /obj/stool/chair, one_per_turf = 1), \
new/datum/stack_recipe("bed", /obj/stool/bed, 2, one_per_turf = 1), \
new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts, 2), \
new/datum/stack_recipe("rack parts", /obj/item/weapon/rack_parts), \
new/datum/stack_recipe("closet", /obj/closet, 2, one_per_turf = 1), \
null, \
new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 2, one_per_turf = 1), \
null, \
new/datum/stack_recipe("floor tile", /obj/item/stack/tile, 1, 4, 10), \
new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60), \
new/datum/stack_recipe("reinforced sheet", /obj/item/stack/sheet/r_metal, 2, 1, 50), \
null, \
new/datum/stack_recipe("computer frame", /obj/computerframe, 5, one_per_turf = 1), \
new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("airlock assembly", /obj/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
null, \
new/datum/stack_recipe("apc frame", /obj/item/apc_frame, 2), \
new/datum/stack_recipe("grenade casing", /obj/item/weapon/chem_grenade), \
)
/obj/item/stack/sheet/metal
New(var/loc, var/amount=null)
recipes = metal_recipes
return ..()
// REINFORCED METAL SHEET
// /datum/stack_recipe/New(title, result_type, req_amount, res_amount, max_res_amount, time, one_per_turf, on_floor = 0)
var/global/list/datum/stack_recipe/r_metal_recipes = list ( \
new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts/reinforced, 2), \
new/datum/stack_recipe("metal sheet", /obj/item/stack/sheet/metal, 1, 2, 50), \
new/datum/stack_recipe("AI core", /obj/AIcore, 4, one_per_turf = 1), \
)
/obj/item/stack/sheet/r_metal
New(var/loc, var/amount=null)
recipes = r_metal_recipes
return ..()
// TILES
/obj/item/stack/tile/New()
src.pixel_x = rand(1, 14)
src.pixel_y = rand(1, 14)
return
/obj/item/stack/tile/attack_self(mob/user as mob)
if (usr.stat)
return
var/T = user.loc
if (!( istype(T, /turf) ))
user << "\red You must be on the ground!"
return
if (!( istype(T, /turf/space) ))
user << "\red You cannot build on or repair this turf!"
return
src.build(T)
src.add_fingerprint(user)
use(1)
return
/obj/item/stack/tile/proc/build(turf/S as turf)
var/turf/simulated/floor/W = S.ReplaceWithFloor()
W.to_plating()
return
+203
View File
@@ -0,0 +1,203 @@
/*
Base object for stackable items.
Stackable items are:
metal
rmetal
glass
rglass
floor tiles
metal rods
*/
/obj/item/stack/New(var/loc, var/amount=null)
..()
if (amount)
src.amount=amount
return
/obj/item/stack/examine()
set src in view(1)
..()
usr << text("There are [] []\s left on the stack.", src.amount, src.singular_name)
return
/obj/item/stack/proc/use(var/amount)
src.amount-=amount
if (src.amount<=0)
var/oldsrc = src
src = null //dont kill proc after del()
usr.before_take_item(oldsrc)
del(oldsrc)
return
/obj/item/stack/proc/add_to_stacks(mob/usr as mob)
var/obj/item/stack/oldsrc = src
src = null
for (var/obj/item/stack/item in usr.loc)
if (item==oldsrc)
continue
if (!istype(item, oldsrc.type))
continue
if (item.amount>=item.max_amount)
continue
oldsrc.attackby(item, usr)
usr << "You add new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s."
if(!oldsrc)
break
/obj/item/stack/attack_hand(mob/user as mob)
if (user.get_inactive_hand() == src)
var/obj/item/stack/F = new src.type( user, amount=1)
F.copy_evidences(src)
user.put_in_hand(F)
src.add_fingerprint(user)
F.add_fingerprint(user)
use(1)
if (src && usr.machine==src)
spawn(0) src.interact(usr)
else
..()
return
/obj/item/stack/attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, src.type))
var/obj/item/stack/S = W
if (S.amount >= max_amount)
return 1
var/to_transfer as num
if (user.get_inactive_hand()==src)
to_transfer = 1
else
to_transfer = min(src.amount, S.max_amount-S.amount)
S.amount+=to_transfer
src.use(to_transfer)
if (src && usr.machine==src)
spawn(0) src.interact(usr)
if (S && usr.machine==S)
spawn(0) S.interact(usr)
else return ..()
/obj/item/stack/proc/copy_evidences(obj/item/stack/from as obj)
src.blood_DNA = from.blood_DNA
src.blood_type = from.blood_type
src.fingerprints = from.fingerprints
src.fingerprintshidden = from.fingerprintshidden
src.fingerprintslast = from.fingerprintslast
/datum/stack_recipe
var/title = "ERROR"
var/result_type
var/req_amount = 1
var/res_amount = 1
var/max_res_amount = 1
var/time = 0
var/one_per_turf = 0
var/on_floor = 0
New(title, result_type, req_amount = 1, res_amount = 1, max_res_amount = 1, time = 0, one_per_turf = 0, on_floor = 0)
src.title = title
src.result_type = result_type
src.req_amount = req_amount
src.res_amount = res_amount
src.max_res_amount = max_res_amount
src.time = time
src.one_per_turf = one_per_turf
src.on_floor = on_floor
/obj/item/stack
var/list/datum/stack_recipe/recipes
/obj/item/stack/attack_self(mob/user as mob)
interact(user)
/obj/item/stack/proc/interact(mob/user as mob)
if (!recipes)
return
if (!src || amount<=0)
user << browse(null, "window=stack")
user.machine = src //for correct work of onclose
var/t1 = text("<HTML><HEAD><title>Constructions from []</title></HEAD><body><TT>Amount Left: []", src, src.amount)
for(var/i=1;i<=recipes.len,i++)
var/datum/stack_recipe/R = recipes[i]
if (isnull(R))
t1 += "<hr>"
continue
if (i>1 && !isnull(recipes[i-1]))
t1+="<br>"
var/max_multiplier = round(src.amount / R.req_amount)
var/title as text
var/can_build = 1
can_build = can_build && (max_multiplier>0)
if (R.one_per_turf)
can_build = can_build && !(locate(R.result_type) in usr.loc)
if (R.on_floor)
can_build = can_build && istype(usr.loc, /turf/simulated/floor)
if (R.res_amount>1)
title+= "[R.res_amount]x [R.title]\s"
else
title+= "[R.title]"
title+= " ([R.req_amount] [src.singular_name]\s)"
if (can_build)
t1 += text("<A href='?src=\ref[];make=[]'>[]</A> ", src, i, title)
else
t1 += text("[]", title)
continue
if (R.max_res_amount>1 && max_multiplier>1)
var/multiplier = min(max_multiplier, round(R.max_res_amount/R.res_amount))
t1 += text(" | <A href='?src=\ref[];make=[];multiplier=[]'>[]x</A> ", src, i, multiplier, multiplier*R.res_amount)
t1 += "</TT></body></HTML>"
user << browse(t1, "window=stack")
onclose(user, "stack")
return
/obj/item/stack/Topic(href, href_list)
..()
if ((usr.restrained() || usr.stat || usr.equipped() != src))
return
if (href_list["make"])
if (src.amount < 1) del(src) //Never should happen
var/datum/stack_recipe/R = recipes[text2num(href_list["make"])]
var/multiplier = text2num(href_list["multiplier"])
if (!multiplier) multiplier = 1
if (src.amount < R.req_amount*multiplier)
if (R.req_amount*multiplier>1)
usr << "\red You haven't got enough [src] to build \the [R.req_amount*multiplier] [R.title]\s!"
else
usr << "\red You haven't got enough [src] to build \the [R.title]!"
return
if (R.one_per_turf && (locate(R.result_type) in usr.loc))
usr << "\red There is another [R.title] here!"
return
if (R.on_floor && !istype(usr.loc, /turf/simulated/floor))
usr << "\red \The [R.title] must be constructed on the floor!"
return
if (R.time)
usr << "\blue Building [R.title] ..."
if (!do_after(usr, R.time))
return
if (src.amount < R.req_amount*multiplier)
return
var/O = new R.result_type( usr.loc )
if (R.max_res_amount>1)
var/obj/item/stack/new_item = O
new_item.amount = R.res_amount*multiplier
//new_item.add_to_stacks(usr)
src.amount-=R.req_amount*multiplier
if (src.amount<=0)
var/oldsrc = src
src = null //dont kill proc after del()
usr.before_take_item(oldsrc)
del(oldsrc)
if (istype(O,/obj/item))
usr.put_in_hand(O)
if (src && usr.machine==src) //do not reopen closed window
spawn( 0 )
src.interact(usr)
return
return
/obj/item/stack/Del()
if (src && usr && usr.machine==src)
usr << browse(null, "window=stack")
..()
+3 -3
View File
@@ -20,13 +20,13 @@
/obj/stool/blob_act()
if(prob(75))
new /obj/item/weapon/sheet/metal( src.loc )
new /obj/item/stack/sheet/metal( src.loc )
del(src)
/obj/stool/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wrench))
playsound(src.loc, 'Ratchet.ogg', 50, 1)
new /obj/item/weapon/sheet/metal( src.loc )
new /obj/item/stack/sheet/metal( src.loc )
//SN src = null
del(src)
return
@@ -36,7 +36,7 @@
..()
if (istype(W, /obj/item/weapon/wrench))
playsound(src.loc, 'Ratchet.ogg', 50, 1)
new /obj/item/weapon/sheet/metal( src.loc )
new /obj/item/stack/sheet/metal( src.loc )
del(src)
return
+68 -54
View File
@@ -15,114 +15,128 @@ obj/structure
icon_state = "reinforced"
state = 2
/obj/structure/girder/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/structure/girder/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/wrench) && state == 0 && anchored && !istype(src,/obj/structure/girder/displaced))
playsound(src.loc, 'Ratchet.ogg', 100, 1)
var/turf/T = get_turf(user)
user << "\blue Now disassembling the girder"
sleep(40)
if(get_turf(user) == T)
if(do_after(user,40))
user << "\blue You dissasembled the girder!"
new /obj/item/weapon/sheet/metal(get_turf(src))
new /obj/item/stack/sheet/metal(get_turf(src))
del(src)
else if((istype(W, /obj/item/weapon/sheet/metal)) && (W:amount >= 2) && istype(src,/obj/structure/girder/displaced))
W:amount -= 2
if(W:amount <= 0)
del(W)
else if((istype(W, /obj/item/stack/sheet/metal)) && (W:amount >= 2) && istype(src,/obj/structure/girder/displaced))
W:use(2)
user << "\blue You create a false wall! Push on it to open or close the passage."
new /obj/falsewall (src.loc)
del(src)
else if(istype(W, /obj/item/weapon/sheet/r_metal) && istype(src,/obj/structure/girder/displaced))
W:amount -= 1
if(W:amount <= 0)
del(W)
else if(istype(W, /obj/item/stack/sheet/r_metal) && istype(src,/obj/structure/girder/displaced))
W:use(2)
user << "\blue You create a false r wall! Push on it to open or close the passage."
new /obj/falserwall (src.loc)
del(src)
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 && istype(src,/obj/structure/girder/reinforced))
playsound(src.loc, 'Screwdriver.ogg', 100, 1)
var/turf/T = get_turf(user)
user << "\blue Now unsecuring support struts"
sleep(40)
if(get_turf(user) == T)
if(do_after(user,40))
user << "\blue You unsecured the support struts!"
state = 1
else if(istype(W, /obj/item/weapon/wirecutters) && istype(src,/obj/structure/girder/reinforced) && state == 1)
playsound(src.loc, 'Wirecutter.ogg', 100, 1)
var/turf/T = get_turf(user)
user << "\blue Now removing support struts"
sleep(40)
if(get_turf(user) == T)
if(do_after(user,40))
user << "\blue You removed the support struts!"
new/obj/structure/girder( src.loc )
del(src)
else if(istype(W, /obj/item/weapon/crowbar) && state == 0 && anchored )
playsound(src.loc, 'Crowbar.ogg', 100, 1)
var/turf/T = get_turf(user)
user << "\blue Now dislodging the girder"
sleep(40)
if(get_turf(user) == T)
if(do_after(user, 40))
user << "\blue You dislodged the girder!"
new/obj/structure/girder/displaced( src.loc )
del(src)
else if(istype(W, /obj/item/weapon/wrench) && state == 0 && !anchored )
playsound(src.loc, 'Ratchet.ogg', 100, 1)
var/turf/T = get_turf(user)
user << "\blue Now securing the girder"
sleep(40)
if(get_turf(user) == T)
if(get_turf(user, 40))
user << "\blue You secured the girder!"
new/obj/structure/girder( src.loc )
del(src)
else if((istype(W, /obj/item/weapon/sheet/metal)) && (W:amount >= 2))
var/turf/T = get_turf(user)
else if((istype(W, /obj/item/stack/sheet/metal)) && (W:amount >= 2))
user << "\blue Now adding plating..."
sleep(40)
if (get_turf(user) == T)
if (do_after(user,40))
user << "\blue You added the plating!"
var/turf/Tsrc = get_turf(src)
Tsrc.ReplaceWithWall()
W:amount -= 2
if(W:amount <= 0)
del(W)
W:use(2)
del(src)
return
else if (istype(W, /obj/item/weapon/sheet/r_metal))
var/turf/T = get_turf(user)
else if (istype(W, /obj/item/stack/sheet/r_metal))
if (src.icon_state == "reinforced") //Time to finalize!
user << "\blue Now finalising reinforced wall."
sleep(50)
if(W)
if(get_turf(user) == T)
user << "\blue Wall fully reinforced!"
var/turf/Tsrc = get_turf(src)
Tsrc.ReplaceWithRWall()
W:amount--
if (W:amount <= 0)
del(W)
del(src)
return
if(do_after(user, 50))
user << "\blue Wall fully reinforced!"
var/turf/Tsrc = get_turf(src)
Tsrc.ReplaceWithRWall()
W:use(1)
del(src)
return
else
user << "\blue Now reinforcing girders"
sleep(60)
user << "\blue Girders reinforced!"
W:amount--
if (W:amount <= 0)
del(W)
new/obj/structure/girder/reinforced( src.loc )
del(src)
return
if (do_after(user,60))
user << "\blue Girders reinforced!"
W:use(1)
new/obj/structure/girder/reinforced( src.loc )
del(src)
return
else
..()
/obj/structure/girder/blob_act()
if(prob(40))
del(src)
del(src)
// LATTICE
/obj/lattice/blob_act()
del(src)
return
/obj/lattice/ex_act(severity)
switch(severity)
if(1.0)
del(src)
return
if(2.0)
del(src)
return
if(3.0)
return
else
return
/obj/lattice/attackby(obj/item/C as obj, mob/user as mob)
if (istype(C, /obj/item/stack/tile))
C:build(get_turf(src))
C:use(1)
playsound(src.loc, 'Genhit.ogg', 50, 1)
C.add_fingerprint(user)
del(src)
return
if (istype(C, /obj/item/weapon/weldingtool) && C:welding)
user << "\blue Slicing lattice joints ..."
C:eyecheck(user)
new /obj/item/stack/rods(src.loc)
del(src)
return
+11 -11
View File
@@ -10,7 +10,7 @@
health -= 35
if(health <=0)
new /obj/item/weapon/shard( src.loc )
new /obj/item/weapon/rods( src.loc )
new /obj/item/stack/rods( src.loc )
src.density = 0
del(src)
@@ -24,21 +24,21 @@
return
if(2.0)
new /obj/item/weapon/shard( src.loc )
if(reinf) new /obj/item/weapon/rods( src.loc)
if(reinf) new /obj/item/stack/rods( src.loc)
//SN src = null
del(src)
return
if(3.0)
if (prob(50))
new /obj/item/weapon/shard( src.loc )
if(reinf) new /obj/item/weapon/rods( src.loc)
if(reinf) new /obj/item/stack/rods( src.loc)
del(src)
return
return
/obj/window/blob_act()
if(reinf) new /obj/item/weapon/rods( src.loc)
if(reinf) new /obj/item/stack/rods( src.loc)
density = 0
del(src)
@@ -66,7 +66,7 @@
//world << "glass at [x],[y],[z] Mhit"
src.health = 0
new /obj/item/weapon/shard( src.loc )
if(reinf) new /obj/item/weapon/rods( src.loc)
if(reinf) new /obj/item/stack/rods( src.loc)
src.density = 0
@@ -92,7 +92,7 @@
step(src, get_dir(AM, src))
if (src.health <= 0)
new /obj/item/weapon/shard( src.loc )
if(reinf) new /obj/item/weapon/rods( src.loc)
if(reinf) new /obj/item/stack/rods( src.loc)
src.density = 0
del(src)
return
@@ -107,7 +107,7 @@
O << text("\red [] smashes through the window!", usr)
src.health = 0
new /obj/item/weapon/shard( src.loc )
if(reinf) new /obj/item/weapon/rods( src.loc)
if(reinf) new /obj/item/stack/rods( src.loc)
src.density = 0
del(src)
return
@@ -120,7 +120,7 @@
O << text("\red [] smashes through the window!", usr)
src.health = 0
new /obj/item/weapon/shard( src.loc )
if(reinf) new /obj/item/weapon/rods( src.loc)
if(reinf) new /obj/item/stack/rods( src.loc)
src.density = 0
del(src)
return
@@ -142,7 +142,7 @@
src.health = 0
new /obj/item/weapon/shard(src.loc)
if(reinf)
new /obj/item/weapon/rods(src.loc)
new /obj/item/stack/rods(src.loc)
src.density = 0
del(src)
return
@@ -183,11 +183,11 @@
index = 0
while(index < 2)
new /obj/item/weapon/shard( src.loc )
if(reinf) new /obj/item/weapon/rods( src.loc)
if(reinf) new /obj/item/stack/rods( src.loc)
index++
else
new /obj/item/weapon/shard( src.loc )
if(reinf) new /obj/item/weapon/rods( src.loc)
if(reinf) new /obj/item/stack/rods( src.loc)
src.density = 0
del(src)
return