Fixes for APC:

- fixed issue 88: monkeys now can play with APC.
- Silicon liveforms cannot use malfhacked APCs if they arent an AT who hacked APC or his slaved borgs.
Fixed issue 121.
Latejoiners got their backpacks back.
Fixed attack log.
Fixed ammo icons not showing in dreammaker map editor.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1720 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
rastaf.zero@gmail.com
2011-06-24 17:52:49 +00:00
parent 0379692215
commit 7c400a7492
7 changed files with 204 additions and 156 deletions
-13
View File
@@ -862,19 +862,6 @@
origin_tech = "combat=2;materials=2"
*/
/obj/item/weapon/gun/projectile/detective
desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds."
name = ".38 revolver"
icon_state = "detective"
w_class = 3.0
throw_speed = 2
throw_range = 10
force = 14.0
m_amt = 1000
origin_tech = "combat=2;materials=2"
/obj/item/weapon/hand_tele
name = "hand tele"
icon = 'device.dmi'
+2 -1
View File
@@ -609,7 +609,7 @@
src.loc = S.loc
// if(S.name == "Cyborg")
// src.Robotize()
else
/*else
var/list/L = list()
for(var/area/arrival/start/S in world)
L += S
@@ -627,6 +627,7 @@
if(clear)
NL += T
src.loc = pick(NL)
*/
if(src.mind.assigned_role == "Cyborg")
src << "YOU ARE GETTING BORGED NOW"
src.Robotize()
+1 -1
View File
@@ -626,7 +626,7 @@
name = "PDA-[owner] ([ownjob])"
user << "\blue Card scanned."
else
var/input=alert("Would you like to inert the card or update owner information?",,"Insert","Update")
var/input=alert("Would you like to insert the card or update owner information?",,"Insert","Update")
//Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand.
if ( ( (src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) )
+36 -21
View File
@@ -17,9 +17,9 @@ var/const/PROJECTILE_DART = 8
icon_state = "bullet"
density = 1
throwforce = 0.1 //an attempt to make it possible to shoot your way through space
unacidable = 1//Just to be sure.
anchored = 1.0
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
unacidable = 1 //Just to be sure.
anchored = 1 // I'm not sure if it is a good idea. Bullets sucked to space and curve trajectories near singularity could be awesome. --rastaf0
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT // ONBELT???
var
def_zone = ""
damage_type = PROJECTILE_BULLET
@@ -58,25 +58,23 @@ var/const/PROJECTILE_DART = 8
icon_state = "cbbolt"
Bump(atom/A as mob|obj|turf|area)
if(firer && istype(A, /mob))
var/mob/M = A
if(!silenced)
visible_message("\red [A.name] has been shot by [firer.name].", "\blue You hear a [istype(src, /obj/item/projectile/beam) ? "gunshot" : "laser blast"].")
else
M << "\red You've been shot!"
if(istype(firer, /mob))
M.attack_log += text("[] <b>[]/[]</b> shot <b>[]/[]</b> with a <b>[]</b>", world.time, firer, firer.ckey, M, M.ckey, src)
firer.attack_log += text("[] <b>[]/[]</b> shot <b>[]/[]</b> with a <b>[]</b>", world.time, firer, firer.ckey, M, M.ckey, src)
else
M.attack_log += text("[] <b>UNKOWN SUBJECT (No longer exists)</b> shot <b>[]/[]</b> with a <b>[]</b>", world.time, M, M.ckey, src)
spawn(0)
if(A)
A.bullet_act(damage_type, src, def_zone)
if(istype(A,/turf) && !istype(src, /obj/item/projectile/beam))
for(var/obj/O in A)
O.bullet_act(damage_type, src, def_zone)
if(firer && istype(A, /mob))
var/mob/M = A
if(!silenced)
visible_message("\red [A.name] has been shot by [firer.name].", "\blue You hear a [istype(src, /obj/item/projectile/beam) ? "gunshot" : "laser blast"].")
else
if(M)
if(M.client)
M << "\red You've been shot!"
if(istype(firer, /mob))
M.attack_log += text("[] <b>[]/[]</b> shot <b>[]/[]</b> with a <b>[]</b>", world.time, firer, firer.client, M, M.client, src)
firer.attack_log += text("[] <b>[]/[]</b> shot <b>[]/[]</b> with a <b>[]</b>", world.time, firer, firer.client, M, M.client, src)
else
M.attack_log += text("[] <b>UNKOWN SUBJECT (No longer exists)</b> shot <b>[]/[]</b> with a <b>[]</b>", world.time, M, M.client, src)
del(src)
return
@@ -201,8 +199,19 @@ var/const/PROJECTILE_DART = 8
for(var/i = 1, i <= 7, i++)
stored_ammo += new /obj/item/ammo_casing/c38(src)
update_icon()
/*
shotgun
name = "ammo box (12gauge)"
desc = "A box of 12 gauge shell"
icon_state = "" //no sprite :'(
caliber = "shotgun"
m_amt = 25000
New()
BB = new /obj/item/projectile/shotgun(src)
src.pixel_x = rand(-10.0, 10)
src.pixel_y = rand(-10.0, 10)
*/
///////////////////////////////////////////////
//////////////////////Guns/////////////////////
///////////////////////////////////////////////
@@ -259,7 +268,7 @@ var/const/PROJECTILE_DART = 8
return 0
New()
for(var/i = 1, i <= 7, i++)
for(var/i = 1, i <= max_shells, i++)
loaded += new /obj/item/ammo_casing(src)
update_icon()
@@ -293,12 +302,12 @@ var/const/PROJECTILE_DART = 8
detective
desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds."
name = ".38 revolver"
max_shells = 7
icon_state = "detective"
force = 14.0
caliber = "38"
New()
for(var/i = 1, i <= 7, i++)
for(var/i = 1, i <= max_shells, i++)
loaded += new /obj/item/ammo_casing/c38(src)
update_icon()
@@ -323,6 +332,8 @@ var/const/PROJECTILE_DART = 8
caliber = "shotgun"
New()
for(var/i = 1, i <= max_shells, i++)
loaded += new /obj/item/ammo_casing/shotgun/beanbag(src)
update_icon()
combat
@@ -333,6 +344,10 @@ var/const/PROJECTILE_DART = 8
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY | ONBACK
max_shells = 8
origin_tech = "combat=3"
New()
for(var/i = 1, i <= max_shells, i++)
loaded += new /obj/item/ammo_casing/shotgun(src)
update_icon()
energy
icon_state = "energy"
@@ -395,7 +410,7 @@ var/const/PROJECTILE_DART = 8
icon_state = "caplaser"
desc = "This is an antique laser gun. All craftsmanship is of the highest quality. It is decorated with assistant leather and chrome. The object menaces with spikes of energy. On the item is an image of Space Station 13. The station is exploding."
force = 10
origin_tech = null
origin_tech = null //forgotten technology of ancients lol
cyborg
load_into_chamber()
+165 -119
View File
@@ -439,7 +439,9 @@
// attack with hand - remove cell (if cover open) or interact with the APC
/obj/machinery/power/apc/attack_hand(mob/user)
add_fingerprint(user)
if (!can_use())
return
src.add_fingerprint(user)
if(opened && (!istype(user, /mob/living/silicon)))
if(cell)
usr.put_in_hand(cell)
@@ -452,7 +454,8 @@
charging = 0
src.updateicon()
return
if(stat & (BROKEN|MAINT)) return
if(stat & (BROKEN|MAINT))
return
if(ishuman(user))
if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining)
@@ -701,126 +704,169 @@
src.aidisabled = 0
src.updateDialog()
/obj/machinery/power/apc/Topic(href, href_list)
..()
if (((in_range(src, usr) && istype(src.loc, /turf))) || ((istype(usr, /mob/living/silicon) && !(src.aidisabled))))
usr.machine = src
if (href_list["apcwires"])
var/t1 = text2num(href_list["apcwires"])
if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) ))
usr << "You need wirecutters!"
return
if (src.isWireColorCut(t1))
src.mend(t1)
else
src.cut(t1)
else if (href_list["pulse"])
var/t1 = text2num(href_list["pulse"])
if (!istype(usr.equipped(), /obj/item/device/multitool))
usr << "You need a multitool!"
return
if (src.isWireColorCut(t1))
usr << "You can't pulse a cut wire."
return
else
src.pulse(t1)
else if (href_list["lock"])
coverlocked = !coverlocked
else if (href_list["breaker"])
operating = !operating
src.update()
updateicon()
else if (href_list["cmode"])
chargemode = !chargemode
if(!chargemode)
charging = 0
updateicon()
else if (href_list["eqp"])
var/val = text2num(href_list["eqp"])
equipment = (val==1) ? 0 : val
updateicon()
update()
else if (href_list["lgt"])
var/val = text2num(href_list["lgt"])
lighting = (val==1) ? 0 : val
updateicon()
update()
else if (href_list["env"])
var/val = text2num(href_list["env"])
environ = (val==1) ? 0 :val
updateicon()
update()
else if( href_list["close"] )
usr << browse(null, "window=apc")
usr.machine = null
return
else if (href_list["close2"])
usr << browse(null, "window=apcwires")
usr.machine = null
return
else if (href_list["overload"])
if( istype(usr, /mob/living/silicon) && !src.aidisabled )
src.overload_lighting()
else if (href_list["malfhack"])
var/mob/living/silicon/ai/malfai = usr
if( istype(malfai, /mob/living/silicon/ai) && !src.aidisabled )
if (malfai.malfhacking)
malfai << "You are already hacking an APC."
return
malfai << "Beginning override of APC systems. This takes some time, and you cannot perform other actions during the process."
malfai.malfhack = src
malfai.malfhacking = 1
sleep(600)
if (!src.aidisabled)
malfai.malfhack = null
malfai.malfhacking = 0
if (ticker.mode.config_tag == "malfunction")
if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
ticker.mode:apcs++
src.malfai = usr
src.locked = 1
if (src.cell)
if (src.cell.charge > 0)
src.cell.charge = 0
cell.corrupt()
src.malfhack = 1
malfai << "Hack complete. The APC is now under your exclusive control. Discharging cell to fuse interface."
updateicon()
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
smoke.set_up(3, 0, src.loc)
smoke.attach(src)
smoke.start()
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
s.set_up(3, 1, src)
s.start()
for(var/mob/M in viewers(src))
M.show_message("\red The [src.name] suddenly lets out a blast of smoke and some sparks!", 3, "\red You hear sizzling electronics.", 2)
else
malfai << "Hack complete. The APC is now under your exclusive control. Unable to fuse interface due to insufficient cell charge."
else
malfai << "Hack complete. The APC is now under your exclusive control. Unable to fuse interface due to lack of cell to discharge."
src.updateDialog()
return
else
/obj/machinery/power/apc/proc/can_use() //used by attack_hand() and Topic()
if (usr.stat)
usr << "\red You must be conscious to use this [src]!"
return 0
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 use this [src]!"
usr << browse(null, "window=apc")
usr.machine = null
return 0
if(usr.restrained())
usr << "\red You must have free hands to use this [src]"
return 0
if(usr.lying)
usr << "\red You must stand to use this [src]!"
return 0
if (istype(usr, /mob/living/silicon))
var/mob/living/silicon/ai/AI = usr
var/mob/living/silicon/robot/robot = usr
if ( \
src.aidisabled || \
malfhack && istype(malfai) && \
( \
(istype(AI) && malfai!=AI) || \
(istype(robot) && (robot in malfai.connected_robots)) \
) \
)
usr << "\red \The [src] have AI control disabled!"
usr << browse(null, "window=apc")
usr.machine = null
return 0
else
if ((!in_range(src, usr) || !istype(src.loc, /turf)))
usr << browse(null, "window=apc")
usr.machine = null
return 0
var/mob/living/carbon/human/H = usr
if (istype(H))
if(H.brainloss >= 60)
for(var/mob/M in viewers(src, null))
M << "\red [H] stares cluelessly at [src] and drools."
return 0
else if(prob(H.brainloss))
usr << "\red You momentarily forget how to use [src]."
return 0
return 1
/obj/machinery/power/apc/Topic(href, href_list)
if (!can_use())
return
src.add_fingerprint(usr)
usr.machine = src
if (href_list["apcwires"])
var/t1 = text2num(href_list["apcwires"])
if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) ))
usr << "You need wirecutters!"
return
if (src.isWireColorCut(t1))
src.mend(t1)
else
src.cut(t1)
else if (href_list["pulse"])
var/t1 = text2num(href_list["pulse"])
if (!istype(usr.equipped(), /obj/item/device/multitool))
usr << "You need a multitool!"
return
if (src.isWireColorCut(t1))
usr << "You can't pulse a cut wire."
return
else
src.pulse(t1)
else if (href_list["lock"])
coverlocked = !coverlocked
else if (href_list["breaker"])
operating = !operating
src.update()
updateicon()
else if (href_list["cmode"])
chargemode = !chargemode
if(!chargemode)
charging = 0
updateicon()
else if (href_list["eqp"])
var/val = text2num(href_list["eqp"])
equipment = (val==1) ? 0 : val
updateicon()
update()
else if (href_list["lgt"])
var/val = text2num(href_list["lgt"])
lighting = (val==1) ? 0 : val
updateicon()
update()
else if (href_list["env"])
var/val = text2num(href_list["env"])
environ = (val==1) ? 0 :val
updateicon()
update()
else if( href_list["close"] )
usr << browse(null, "window=apc")
usr.machine = null
return
else if (href_list["close2"])
usr << browse(null, "window=apcwires")
usr.machine = null
return
else if (href_list["overload"])
if( istype(usr, /mob/living/silicon) && !src.aidisabled )
src.overload_lighting()
else if (href_list["malfhack"])
var/mob/living/silicon/ai/malfai = usr
if( istype(malfai, /mob/living/silicon/ai) && !src.aidisabled )
if (malfai.malfhacking)
malfai << "You are already hacking an APC."
return
malfai << "Beginning override of APC systems. This takes some time, and you cannot perform other actions during the process."
malfai.malfhack = src
malfai.malfhacking = 1
sleep(600)
if (!src.aidisabled)
malfai.malfhack = null
malfai.malfhacking = 0
if (ticker.mode.config_tag == "malfunction")
if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
ticker.mode:apcs++
src.malfai = usr
src.locked = 1
if (src.cell)
if (src.cell.charge > 0)
src.cell.charge = 0
cell.corrupt()
src.malfhack = 1
malfai << "Hack complete. The APC is now under your exclusive control. Discharging cell to fuse interface."
updateicon()
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
smoke.set_up(3, 0, src.loc)
smoke.attach(src)
smoke.start()
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
s.set_up(3, 1, src)
s.start()
for(var/mob/M in viewers(src))
M.show_message("\red The [src.name] suddenly lets out a blast of smoke and some sparks!", 3, "\red You hear sizzling electronics.", 2)
else
malfai << "Hack complete. The APC is now under your exclusive control. Unable to fuse interface due to insufficient cell charge."
else
malfai << "Hack complete. The APC is now under your exclusive control. Unable to fuse interface due to lack of cell to discharge."
src.updateDialog()
return
/obj/machinery/power/apc/proc/ion_act()