mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-17 18:13:34 +01:00
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:
@@ -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'
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)) )
|
||||
|
||||
@@ -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
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user