mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-14 01:24:21 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into dragnet
Conflicts: icons/effects/effects.dmi icons/obj/items.dmi
This commit is contained in:
@@ -66,8 +66,9 @@
|
||||
|
||||
|
||||
/obj/item/areaeditor/permit/create_area()
|
||||
..()
|
||||
qdel(src)
|
||||
var/success = ..()
|
||||
if(success)
|
||||
qdel(src)
|
||||
|
||||
|
||||
//Station blueprints!!!
|
||||
@@ -84,7 +85,7 @@
|
||||
var/area/A = get_area()
|
||||
if(get_area_type() == AREA_STATION)
|
||||
. += "<p>According to \the [src], you are now in <b>\"[html_encode(A.name)]\"</b>.</p>"
|
||||
. += "<p>You may <a href='?src=\ref[src];edit_area=1'>move an amendment</a> to the drawing.</p>"
|
||||
. += "<p>You may <a href='?src=\ref[src];edit_area=1'>make an amendment</a> to the drawing.</p>"
|
||||
var/datum/browser/popup = new(user, "blueprints", "[src]", 700, 500)
|
||||
popup.set_content(.)
|
||||
popup.open()
|
||||
@@ -162,7 +163,7 @@
|
||||
A.addSorted()
|
||||
|
||||
interact()
|
||||
return
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/areaeditor/proc/move_turfs_to_area(var/list/turf/turfs, var/area/A)
|
||||
|
||||
@@ -50,6 +50,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
var/list/ntrclog = list() //NTRC message log
|
||||
var/new_ntrc_msg = 0
|
||||
|
||||
var/image/photo = null //Scanned photo
|
||||
|
||||
var/noreturn = 0 //whether the PDA can use the Return button, used for the aiPDA chatroom
|
||||
|
||||
/obj/item/device/pda/medical
|
||||
@@ -815,13 +817,15 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
if(useTC != 2) // Does our recipient have a broadcaster on their level?
|
||||
U << "ERROR: Cannot reach recipient."
|
||||
return
|
||||
useMS.send_pda_message("[P.owner]","[owner]","[t]")
|
||||
|
||||
tnote += "<i><b>→ To [P.owner]:</b></i><br>[t]<br>"
|
||||
P.tnote += "<i><b>← From <a href='byond://?src=\ref[P];choice=Message;target=\ref[src]'>[owner]</a> ([ownjob]):</b></i><br>[t]<br>"
|
||||
var/msg_ref = useMS.send_pda_message("[P.owner]","[owner]","[t]",photo)
|
||||
var/photo_ref = ""
|
||||
if(photo)
|
||||
photo_ref = "<a href='byond://?src=\ref[msg_ref];photo=1'>(Photo)</a>"
|
||||
tnote += "<i><b>→ To [P.owner]:</b></i><br>[t][photo_ref]<br>"
|
||||
P.tnote += "<i><b>← From <a href='byond://?src=\ref[P];choice=Message;target=\ref[src]'>[owner]</a> ([ownjob]):</b></i><br>[t][photo_ref]<br>"
|
||||
for(var/mob/M in player_list)
|
||||
if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA))
|
||||
M.show_message("<span class='game say'>PDA Message - <span class='name'>[owner]</span> -> <span class='name'>[P.owner]</span>: <span class='message'>[t]</span></span>")
|
||||
M.show_message("<span class='game say'>PDA Message - <span class='name'>[owner]</span> -> <span class='name'>[P.owner]</span>: <span class='message'>[t][photo_ref]</span></span>")
|
||||
|
||||
if (!P.silent)
|
||||
playsound(P.loc, 'sound/machines/twobeep.ogg', 50, 1)
|
||||
@@ -835,9 +839,10 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
L = get(P, /mob/living/silicon)
|
||||
|
||||
if(L)
|
||||
L << "\icon[P] <b>Message from [src.owner] ([ownjob]), </b>\"[t]\" (<a href='byond://?src=\ref[P];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)"
|
||||
L << "\icon[P] <b>Message from [src.owner] ([ownjob]), </b>\"[t]\"[photo_ref] (<a href='byond://?src=\ref[P];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)"
|
||||
|
||||
log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]")
|
||||
photo = null
|
||||
P.overlays.Cut()
|
||||
P.overlays += image('icons/obj/pda.dmi', "pda-r")
|
||||
else
|
||||
@@ -967,6 +972,10 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
return
|
||||
C.loc = src
|
||||
user << "<span class='notice'>You slide \the [C] into \the [src].</span>"
|
||||
else if(istype(C, /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/P = C
|
||||
photo = P.img
|
||||
user << "<span class='notice'>You scan \the [C].</span>"
|
||||
return
|
||||
|
||||
/obj/item/device/pda/attack(mob/living/carbon/C, mob/living/user as mob)
|
||||
@@ -1104,6 +1113,12 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
return
|
||||
|
||||
var/selected = plist[c]
|
||||
|
||||
if(aicamera.aipictures.len>0)
|
||||
var/add_photo = input(user,"Do you want to attach a photo?","Photo","No") as null|anything in list("Yes","No")
|
||||
if(add_photo=="Yes")
|
||||
var/datum/picture/Pic = aicamera.selectpicture(aicamera)
|
||||
src.aiPDA.photo = Pic.fields["img"]
|
||||
src.aiPDA.create_message(src, selected)
|
||||
|
||||
|
||||
|
||||
@@ -6,18 +6,37 @@
|
||||
item_state = "electronic"
|
||||
w_class = 2.0
|
||||
slot_flags = SLOT_BELT
|
||||
flags = NOBLUDGEON
|
||||
var/flush = null
|
||||
origin_tech = "programming=4;materials=4"
|
||||
|
||||
|
||||
/obj/item/device/aicard/attack(mob/living/silicon/ai/M as mob, mob/user as mob)
|
||||
if(!istype(M, /mob/living/silicon/ai))//If target is not an AI.
|
||||
return ..()
|
||||
/obj/item/device/aicard/afterattack(atom/target, mob/user, proximity)
|
||||
..()
|
||||
if(!proximity || !target)
|
||||
return
|
||||
var/mob/living/silicon/ai/AI = locate(/mob/living/silicon/ai) in src
|
||||
if(AI) //AI is on the card, implies user wants to upload it.
|
||||
target.transfer_ai(AI_TRANS_FROM_CARD, user, AI, src)
|
||||
add_logs(user, AI, "carded", object="[name]")
|
||||
else //No AI on the card, therefore the user wants to download one.
|
||||
target.transfer_ai(AI_TRANS_TO_CARD, user, null, src)
|
||||
update_state() //Whatever happened, update the card's state (icon, name) to match.
|
||||
|
||||
add_logs(user, M, "carded", object="[src.name]")
|
||||
|
||||
transfer_ai("AICORE", "AICARD", M, user)
|
||||
return
|
||||
/obj/item/device/aicard/proc/update_state()
|
||||
var/mob/living/silicon/ai/AI = locate(/mob/living/silicon/ai) in src //AI is inside.
|
||||
if(AI)
|
||||
name = "intelliCard - [AI.name]"
|
||||
if (AI.stat == DEAD)
|
||||
icon_state = "aicard-404"
|
||||
else
|
||||
icon_state = "aicard-full"
|
||||
AI.cancel_camera() //AI are forced to move when transferred, so do this whenver one is downloaded.
|
||||
else
|
||||
icon_state = "aicard"
|
||||
name = "intelliCard"
|
||||
overlays.Cut()
|
||||
|
||||
/obj/item/device/aicard/attack_self(mob/user)
|
||||
if (!in_range(src, user))
|
||||
|
||||
@@ -349,8 +349,9 @@
|
||||
|
||||
for(var/entry in expandables)
|
||||
if(istype(W,entry))
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
bugtype = expandables[entry]
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
expansion = W
|
||||
user << "<span class='notice'>You add [W] to [src].</span>"
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/obj/item/device/doorCharge
|
||||
name = "airlock charge"
|
||||
desc = null //Different examine for traitors
|
||||
item_state = "electronic"
|
||||
icon_state = "doorCharge"
|
||||
w_class = 2
|
||||
throw_range = 4
|
||||
throw_speed = 1
|
||||
force = 3
|
||||
attack_verb = list("blown up", "exploded", "detonated")
|
||||
m_amt = 50
|
||||
g_amt = 30
|
||||
|
||||
/obj/item/device/doorCharge/ex_act(severity, target)
|
||||
switch(severity)
|
||||
if(1)
|
||||
visible_message("<span class='warning'>[src] detonates!</span>")
|
||||
explosion(src.loc,0,2,1,flame_range = 4)
|
||||
qdel(src)
|
||||
if(2)
|
||||
if(prob(50))
|
||||
ex_act(1)
|
||||
if(3)
|
||||
if(prob(25))
|
||||
ex_act(1)
|
||||
|
||||
/obj/item/device/doorCharge/examine(mob/user)
|
||||
..()
|
||||
if(user.mind in ticker.mode.traitors) //No nuke ops because the device is excluded from nuclear
|
||||
user << "A small explosive device that can be used to sabotage airlocks to cause an explosion upon opening. To apply, remove the airlock's maintenance panel and place it within."
|
||||
else
|
||||
user << "A small, suspicious object that feels lukewarm when held."
|
||||
@@ -47,7 +47,8 @@
|
||||
/obj/item/device/laser_pointer/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/stock_parts/micro_laser))
|
||||
if(!diode)
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
diode = W
|
||||
user << "<span class='notice'>You install a [diode.name] in [src].</span>"
|
||||
|
||||
@@ -88,9 +88,10 @@
|
||||
var/obj/item/weapon/light/L = W
|
||||
if(L.status == 0) // LIGHT OKAY
|
||||
if(uses < max_uses)
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
AddUses(1)
|
||||
user << "<span class='notice'>You insert the [L.name] into the [src.name]. You have [uses] lights remaining.</span>"
|
||||
user.drop_item()
|
||||
qdel(L)
|
||||
return
|
||||
else
|
||||
|
||||
@@ -11,6 +11,12 @@
|
||||
var/correct_wire
|
||||
var/armer //Used for admin purposes
|
||||
|
||||
/obj/item/device/pizza_bomb/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is opening [src]! It looks like \he's hungry and looking for pizza.</span>")
|
||||
sleep(10)
|
||||
go_boom()
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/device/pizza_bomb/attack_self(mob/user)
|
||||
if(disarmed)
|
||||
user << "<span class='notice'>\The [src] is disarmed.</span>"
|
||||
@@ -30,7 +36,7 @@
|
||||
timer = Clamp(timer, 10, 100)
|
||||
icon_state = "pizzabox1"
|
||||
user << "<span class='notice'>You set the timer to [timer / 10] before activating the payload and closing \the [src]."
|
||||
message_admins("[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has set a timer on a pizza bomb to [timer/10] seconds at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[loc.x];Y=[loc.y];Z=[loc.z]'>(JMP)</a>.")
|
||||
message_admins("[key_name_admin(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[usr]'>FLW</A>) has set a timer on a pizza bomb to [timer/10] seconds at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[loc.x];Y=[loc.y];Z=[loc.z]'>(JMP)</a>.")
|
||||
log_game("[key_name(usr)] has set the timer on a pizza bomb to [timer/10] seconds ([loc.x],[loc.y],[loc.z]).")
|
||||
armer = usr
|
||||
name = "pizza box"
|
||||
@@ -42,8 +48,8 @@
|
||||
icon_state = "pizzabox_bomb"
|
||||
audible_message("<span class='warning'>\icon[src] *beep* *beep*</span>")
|
||||
user << "<span class='danger'>That's no pizza! That's a bomb!</span>"
|
||||
message_admins("[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has triggered a pizza bomb armed by [armer] at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[loc.x];Y=[loc.y];Z=[loc.z]'>(JMP)</a>.")
|
||||
log_game("[key_name(usr)] has triggered a pizza bomb armed by [armer] ([loc.x],[loc.y],[loc.z]).")
|
||||
message_admins("[key_name_admin(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[usr]'>FLW</A>) has triggered a pizza bomb armed by [key_name_admin(armer)] at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[loc.x];Y=[loc.y];Z=[loc.z]'>(JMP)</a>.")
|
||||
log_game("[key_name(usr)] has triggered a pizza bomb armed by [key_name(armer)] ([loc.x],[loc.y],[loc.z]).")
|
||||
primed = 1
|
||||
sleep(timer)
|
||||
return go_boom()
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
"[user] activates \the [src]!", \
|
||||
"<span class='notice'>You activate \the [src].</span>",
|
||||
"<span class='italics'>You hear a click.</span>")
|
||||
message_admins("Power sink activated by [key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
|
||||
message_admins("Power sink activated by [key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
|
||||
log_game("Power sink activated by [key_name(user)] at ([x],[y],[z])")
|
||||
set_mode(OPERATING)
|
||||
|
||||
|
||||
@@ -253,12 +253,14 @@
|
||||
return
|
||||
|
||||
if(!keyslot)
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
keyslot = W
|
||||
|
||||
else
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
keyslot2 = W
|
||||
|
||||
|
||||
@@ -608,7 +608,8 @@
|
||||
return
|
||||
|
||||
if(!keyslot)
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
keyslot = W
|
||||
|
||||
|
||||
@@ -191,6 +191,13 @@ MASS SPECTROMETER
|
||||
else
|
||||
user << "<span class='info'>Blood level [blood_percent] %, [blood_volume] cl, type: [blood_type]</span>"
|
||||
|
||||
var/implant_detect
|
||||
for(var/obj/item/cybernetic_implant/CI in H.internal_organs)
|
||||
implant_detect += "[H.name] is modified with a [CI.name].<br>"
|
||||
if(implant_detect)
|
||||
user.show_message("<span class='notice'>Detected cybernetic modifications:</span>")
|
||||
user.show_message("<span class='notice'>[implant_detect]</span>")
|
||||
|
||||
/proc/chemscan(var/mob/living/user, var/mob/living/M)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
@@ -33,7 +33,8 @@
|
||||
|
||||
/obj/item/device/taperecorder/attackby(obj/item/I, mob/user, params)
|
||||
if(!mytape && istype(I, /obj/item/device/tape))
|
||||
user.drop_item()
|
||||
if(!user.unEquip(I))
|
||||
return
|
||||
I.loc = src
|
||||
mytape = I
|
||||
user << "<span class='notice'>You insert [I] into [src].</span>"
|
||||
|
||||
@@ -20,15 +20,17 @@
|
||||
return
|
||||
|
||||
if(!tank_one)
|
||||
if(!user.unEquip(item))
|
||||
return
|
||||
tank_one = item
|
||||
user.drop_item()
|
||||
item.loc = src
|
||||
user << "<span class='notice'>You attach the tank to the transfer valve.</span>"
|
||||
if(item.w_class > w_class)
|
||||
w_class = item.w_class
|
||||
else if(!tank_two)
|
||||
if(!user.unEquip(item))
|
||||
return
|
||||
tank_two = item
|
||||
user.drop_item()
|
||||
item.loc = src
|
||||
user << "<span class='notice'>You attach the tank to the transfer valve.</span>"
|
||||
if(item.w_class > w_class)
|
||||
@@ -174,21 +176,21 @@
|
||||
if(!attacher)
|
||||
attacher_name = "Unknown"
|
||||
else
|
||||
attacher_name = "[attacher.name]([attacher.ckey])"
|
||||
attacher_name = "[key_name_admin(attacher)]"
|
||||
|
||||
var/log_str1 = "Bomb valve opened in "
|
||||
var/log_str2 = "with [attachment] attacher: [attacher_name]"
|
||||
|
||||
var/log_attacher = ""
|
||||
if(attacher)
|
||||
log_attacher = "(<A HREF='?_src_=holder;adminmoreinfo=\ref[attacher]'>?</A>)"
|
||||
log_attacher = "(<A HREF='?_src_=holder;adminmoreinfo=\ref[attacher]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[attacher]'>FLW</A>)"
|
||||
|
||||
var/mob/mob = get_mob_by_key(src.fingerprintslast)
|
||||
var/last_touch_info = ""
|
||||
if(mob)
|
||||
last_touch_info = "(<A HREF='?_src_=holder;adminmoreinfo=\ref[mob]'>?</A>)"
|
||||
last_touch_info = "(<A HREF='?_src_=holder;adminmoreinfo=\ref[mob]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[mob]'>FLW</A>)"
|
||||
|
||||
var/log_str3 = " Last touched by: [src.fingerprintslast]"
|
||||
var/log_str3 = " Last touched by: [key_name_admin(mob)]"
|
||||
|
||||
var/bomb_message = "[log_str1] <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name]</a> [log_str2][log_attacher] [log_str3][last_touch_info]"
|
||||
|
||||
|
||||
@@ -216,7 +216,6 @@
|
||||
|
||||
/obj/item/holotape/hitby(AM as mob|obj)
|
||||
..()
|
||||
visible_message("<span class='danger'>[src] was hit by [AM].</span>")
|
||||
var/tforce = 0
|
||||
if(ismob(AM))
|
||||
tforce = 5
|
||||
@@ -251,4 +250,4 @@
|
||||
del(src)
|
||||
return
|
||||
|
||||
#undef MAX_TAPE_RANGE
|
||||
#undef MAX_TAPE_RANGE
|
||||
|
||||
@@ -102,28 +102,32 @@
|
||||
return
|
||||
if(istype(W, /obj/item/robot_parts/l_leg))
|
||||
if(src.l_leg) return
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
src.l_leg = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/r_leg))
|
||||
if(src.r_leg) return
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
src.r_leg = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/l_arm))
|
||||
if(src.l_arm) return
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
src.l_arm = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/r_arm))
|
||||
if(src.r_arm) return
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
src.r_arm = W
|
||||
src.updateicon()
|
||||
@@ -131,7 +135,8 @@
|
||||
if(istype(W, /obj/item/robot_parts/chest))
|
||||
if(src.chest) return
|
||||
if(W:wires && W:cell)
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
src.chest = W
|
||||
src.updateicon()
|
||||
@@ -143,7 +148,8 @@
|
||||
if(istype(W, /obj/item/robot_parts/head))
|
||||
if(src.head) return
|
||||
if(W:flash2 && W:flash1)
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
src.head = W
|
||||
src.updateicon()
|
||||
@@ -190,7 +196,8 @@
|
||||
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc))
|
||||
if(!O) return
|
||||
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
|
||||
O.invisibility = 0
|
||||
//Transfer debug settings to new mob
|
||||
@@ -297,7 +304,8 @@
|
||||
user << "<span class='warning'>You have already inserted a cell!</span>"
|
||||
return
|
||||
else
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
src.cell = W
|
||||
user << "<span class='notice'>You insert the cell.</span>"
|
||||
@@ -324,7 +332,8 @@
|
||||
user << "<span class='warning'>You can't use a broken flash!</span>"
|
||||
return
|
||||
else
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
F.loc = src
|
||||
if(src.flash1)
|
||||
src.flash2 = F
|
||||
|
||||
@@ -474,7 +474,7 @@
|
||||
return
|
||||
for(var/obj/effect/decal/cleanable/crayon/old_marking in target)
|
||||
qdel(old_marking)
|
||||
new /obj/effect/decal/cleanable/crayon/gang(target,gangID,temp,graf_rot)
|
||||
new /obj/effect/decal/cleanable/crayon/gang(target,gangID,"graffiti",graf_rot)
|
||||
user << "<span class='notice'>You tagged [territory] for your gang!</span>"
|
||||
|
||||
else
|
||||
|
||||
@@ -112,7 +112,8 @@ RCD
|
||||
if((matter + R.ammoamt) > max_matter)
|
||||
user << "<span class='warning'>The RCD can't hold any more matter-units!</span>"
|
||||
return
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
qdel(W)
|
||||
matter += R.ammoamt
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
@@ -210,7 +211,7 @@ RCD
|
||||
|
||||
if(3)
|
||||
if(istype(A, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/W
|
||||
var/turf/simulated/wall/W = A
|
||||
if(istype(W, /turf/simulated/wall/r_wall) && !canRwall)
|
||||
return 0
|
||||
if(checkResource(5, user))
|
||||
|
||||
@@ -25,7 +25,7 @@ RPD
|
||||
var/categoryId = CATEGORY_ATMOS
|
||||
var/dir=SOUTH
|
||||
var/dirtype=PIPE_BINARY
|
||||
var/icon = 'icons/obj/pipe-item.dmi'
|
||||
var/icon = 'icons/obj/atmospherics/pipes/pipe_item.dmi'
|
||||
var/icon_state=""
|
||||
var/selected=0
|
||||
|
||||
@@ -39,7 +39,7 @@ RPD
|
||||
return "<li><a href='?src=\ref[dispenser];makepipe=[id];dir=[dir];type=[dirtype]'>[label]</a></li>"
|
||||
|
||||
/datum/pipe_info/meter
|
||||
icon = 'icons/obj/pipes.dmi'
|
||||
icon = 'icons/obj/atmospherics/pipes/simple.dmi'
|
||||
icon_state = "meterX"
|
||||
|
||||
/datum/pipe_info/meter/New()
|
||||
@@ -64,7 +64,7 @@ var/global/list/disposalpipeID2State=list(
|
||||
|
||||
/datum/pipe_info/disposal
|
||||
categoryId = CATEGORY_DISPOSALS
|
||||
icon = 'icons/obj/pipes/disposal.dmi'
|
||||
icon = 'icons/obj/atmospherics/pipes/disposal.dmi'
|
||||
icon_state = "meterX"
|
||||
|
||||
/datum/pipe_info/disposal/New(var/pid,var/dt)
|
||||
|
||||
@@ -63,7 +63,8 @@
|
||||
if(ink)
|
||||
user << "<span class='notice'>\the [name] already contains \a [ink].</span>"
|
||||
return
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
user << "<span class='notice'>You install \the [W] into \the [name].</span>"
|
||||
ink = W
|
||||
|
||||
@@ -112,7 +112,8 @@
|
||||
if(C.maxcharge < paddles.revivecost)
|
||||
user << "<span class='notice'>[src] requires a higher capacity cell.</span>"
|
||||
return
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
bcell = W
|
||||
user << "<span class='notice'>You install a cell in [src].</span>"
|
||||
|
||||
@@ -37,7 +37,8 @@
|
||||
message_say = "VIVA LA REVOLUTION!"
|
||||
user.say(message_say)
|
||||
target = user
|
||||
message_admins("[key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) suicided with [src.name] at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||
message_admins("[key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) suicided with [src.name] at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||
message_admins("[key_name(user)] suicided with [src.name] at ([x],[y],[z])")
|
||||
sleep(10)
|
||||
explode(get_turf(user))
|
||||
user.gib()
|
||||
@@ -69,18 +70,19 @@
|
||||
user << "<span class='notice'>You start planting the bomb...</span>"
|
||||
|
||||
if(do_after(user, 50) && in_range(user, target))
|
||||
user.drop_item()
|
||||
if(!user.unEquip(src))
|
||||
return
|
||||
src.target = target
|
||||
loc = null
|
||||
|
||||
if (ismob(target))
|
||||
add_logs(user, target, "planted [name] on")
|
||||
user.visible_message("<span class='warning'>[user.name] finished planting an explosive on [target.name].</span>", "<span class='notice'>You finish planting an explosive on [target.name].</span>")
|
||||
message_admins("[key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) planted [src.name] on [key_name(target)](<A HREF='?_src_=holder;adminmoreinfo=\ref[target]'>?</A>) with [timer] second fuse",0,1)
|
||||
message_admins("[key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) planted [src.name] on [key_name_admin(target)](<A HREF='?_src_=holder;adminmoreinfo=\ref[target]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[target]'>FLW</A>) with [timer] second fuse",0,1)
|
||||
log_game("[key_name(user)] planted [src.name] on [key_name(target)] with [timer] second fuse")
|
||||
|
||||
else
|
||||
message_admins("[key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target.x];Y=[target.y];Z=[target.z]'>JMP</a>) with [timer] second fuse",0,1)
|
||||
message_admins("[key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target.x];Y=[target.y];Z=[target.z]'>JMP</a>) with [timer] second fuse",0,1)
|
||||
log_game("[key_name(user)] planted [src.name] on [target.name] at ([target.x],[target.y],[target.z]) with [timer] second fuse")
|
||||
|
||||
target.overlays += image_overlay
|
||||
|
||||
@@ -65,6 +65,7 @@
|
||||
var/turf/target_turf = get_turf(target)
|
||||
if(target_turf)
|
||||
var/turflist = getline(user, target_turf)
|
||||
add_logs(user, target, "flamethrowered", admin=0, addition="at [target.x],[target.y],[target.z]")
|
||||
flame_turf(turflist)
|
||||
|
||||
/obj/item/weapon/flamethrower/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
@@ -94,7 +95,8 @@
|
||||
var/obj/item/device/assembly/igniter/I = W
|
||||
if(I.secured) return
|
||||
if(igniter) return
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
I.loc = src
|
||||
igniter = I
|
||||
update_icon()
|
||||
@@ -104,7 +106,8 @@
|
||||
if(ptank)
|
||||
user << "<span class='notice'>There appears to already be a plasma tank loaded in [src]!</span>"
|
||||
return
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
ptank = W
|
||||
W.loc = src
|
||||
update_icon()
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
/obj/item/weapon/storage/belt/utility/full,
|
||||
/obj/item/clothing/tie/horrible,
|
||||
/obj/item/clothing/suit/jacket/leather,
|
||||
/obj/item/clothing/suit/jacket/leather/overcoat,
|
||||
/obj/item/clothing/suit/poncho,
|
||||
/obj/item/clothing/suit/poncho/green,
|
||||
/obj/item/clothing/suit/poncho/red)
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
else if(clown_check(user))
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
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>.")
|
||||
message_admins("[key_name_admin(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[usr]'>FLW</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]).")
|
||||
user << "<span class='warning'>You prime the [name]! [det_time / 10] second\s!</span>"
|
||||
playsound(user.loc, 'sound/weapons/armbomb.ogg', 60, 1)
|
||||
@@ -68,8 +68,9 @@
|
||||
return
|
||||
else
|
||||
if(I.reagents.total_volume)
|
||||
if(!user.unEquip(I))
|
||||
return
|
||||
user << "<span class='notice'>You add [I] to the [initial(name)] assembly.</span>"
|
||||
user.drop_item()
|
||||
I.loc = src
|
||||
beakers += I
|
||||
else
|
||||
@@ -79,8 +80,9 @@
|
||||
var/obj/item/device/assembly_holder/A = I
|
||||
if(isigniter(A.a_left) == isigniter(A.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it
|
||||
return
|
||||
if(!user.unEquip(I))
|
||||
return
|
||||
|
||||
user.drop_item()
|
||||
nadeassembly = A
|
||||
A.master = src
|
||||
A.loc = src
|
||||
@@ -171,8 +173,8 @@
|
||||
var/mob/last = get_mob_by_ckey(nadeassembly.fingerprintslast)
|
||||
var/turf/T = get_turf(src)
|
||||
var/area/A = get_area(T)
|
||||
message_admins("grenade primed by an assembly, attached by [M.key]/[M]<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>(?)</A> and last touched by [last.key]/[last]<A HREF='?_src_=holder;adminmoreinfo=\ref[last]'>(?)</A> ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>[A.name] (JMP)</a>.")
|
||||
log_game("grenade primed by an assembly, attached by [M.key]/[M] and last touched by [last.key]/[last] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] ([T.x], [T.y], [T.z])")
|
||||
message_admins("grenade primed by an assembly, attached by [key_name_admin(M)]<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>(?)</A> (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[M]'>FLW</A>) and last touched by [key_name_admin(last)]<A HREF='?_src_=holder;adminmoreinfo=\ref[last]'>(?)</A> (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[last]'>FLW</A>) ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>[A.name] (JMP)</a>.")
|
||||
log_game("grenade primed by an assembly, attached by [key_name(M)] and last touched by [key_name(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] ([T.x], [T.y], [T.z])")
|
||||
|
||||
playsound(loc, 'sound/effects/bamf.ogg', 50, 1)
|
||||
|
||||
@@ -263,8 +265,9 @@
|
||||
//make a special case you might as well do it explicitly. -Sayu
|
||||
/obj/item/weapon/grenade/chem_grenade/large/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/slime_extract) && stage == WIRED)
|
||||
if(!user.unEquip(I))
|
||||
return
|
||||
user << "<span class='notice'>You add [I] to the [initial(name)] assembly.</span>"
|
||||
user.drop_item()
|
||||
I.loc = src
|
||||
beakers += I
|
||||
else
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
|
||||
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>.")
|
||||
message_admins("[key_name_admin(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[usr]'>FLW</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
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
add_fingerprint(user)
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
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>.")
|
||||
message_admins("[key_name_admin(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[usr]'>FLW</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
|
||||
|
||||
@@ -49,7 +49,8 @@
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/proc/apply_cuffs(mob/living/carbon/target, mob/user)
|
||||
if(!target.handcuffed)
|
||||
user.drop_item()
|
||||
if(!user.drop_item())
|
||||
return
|
||||
//target.throw_alert("handcuffed", src) // Can't do this because escaping cuffs isn't standardized. Also zipties.
|
||||
if(trashtype)
|
||||
target.handcuffed = new trashtype(target)
|
||||
@@ -227,4 +228,4 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/energy/attack_hand(mob/user)
|
||||
Crossed(user) //honk
|
||||
Crossed(user) //honk
|
||||
|
||||
@@ -174,15 +174,15 @@
|
||||
|
||||
/obj/item/weapon/implant/loyalty/implanted(mob/target)
|
||||
..()
|
||||
if((target.mind in (ticker.mode.head_revolutionaries | ticker.mode.A_bosses | ticker.mode.B_bosses)) || is_shadow_or_thrall(target))
|
||||
if((target.mind in ticker.mode.head_revolutionaries) || is_shadow_or_thrall(target))
|
||||
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel the corporate tendrils of Nanotrasen try to invade your mind!</span>")
|
||||
return 0
|
||||
if(target.mind in (ticker.mode.A_gang | ticker.mode.B_gang))
|
||||
ticker.mode.remove_gangster(target.mind, exclude_bosses=0)
|
||||
return 0
|
||||
if(target.mind in ticker.mode.revolutionaries)
|
||||
ticker.mode.remove_revolutionary(target.mind)
|
||||
target << "<span class='notice'>You feel a surge of loyalty towards Nanotrasen.</span>"
|
||||
if(target.mind in (ticker.mode.cult| ticker.mode.A_bosses | ticker.mode.B_bosses | ticker.mode.A_gang | ticker.mode.B_gang))
|
||||
target << "<span class='warning'>You feel the corporate tendrils of Nanotrasen try to invade your mind!</span>"
|
||||
else
|
||||
target << "<span class='notice'>You feel a surge of loyalty towards Nanotrasen.</span>"
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
..()
|
||||
if(istype(C, /obj/item/weapon/implantcase))
|
||||
if(!case)
|
||||
user.drop_item()
|
||||
if(!user.unEquip(C))
|
||||
return
|
||||
C.loc = src
|
||||
case = C
|
||||
else
|
||||
|
||||
@@ -185,8 +185,5 @@
|
||||
/obj/item/weapon/melee/energy/blade/dropped()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/melee/energy/blade/proc/throw()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/melee/energy/blade/attack_self(mob/user)
|
||||
return
|
||||
|
||||
@@ -8,8 +8,9 @@
|
||||
|
||||
/obj/item/weapon/pai_cable/proc/plugin(obj/machinery/M as obj, mob/user as mob)
|
||||
if(istype(M, /obj/machinery/door) || istype(M, /obj/machinery/camera))
|
||||
if(!user.drop_item())
|
||||
return
|
||||
user.visible_message("[user] inserts [src] into a data port on [M].", "<span class='notice'>You insert [src] into a data port on [M].</span>", "<span class='italics'>You hear the satisfying click of a wire jack fastening into place.</span>")
|
||||
user.drop_item()
|
||||
src.loc = M
|
||||
src.machine = M
|
||||
else
|
||||
|
||||
@@ -61,8 +61,9 @@
|
||||
if(IW.w_class > src.w_class)
|
||||
user << "<span class='warning'>\The [IW] is too large to fit into \the [src]!</span>"
|
||||
return
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
user << "<span class='notice'>You load \the [IW] into \the [src].</span>"
|
||||
user.drop_item()
|
||||
loadedItems.Add(IW)
|
||||
loadedWeightClass += IW.w_class
|
||||
IW.loc = src
|
||||
@@ -127,9 +128,10 @@
|
||||
if(src.tank)
|
||||
user << "<span class='warning'>\The [src] already has a tank.</span>"
|
||||
return
|
||||
if(!user.unEquip(thetank))
|
||||
return
|
||||
user << "<span class='notice'>You hook \the [thetank] up to \the [src].</span>"
|
||||
src.tank = thetank
|
||||
user.drop_item()
|
||||
thetank.loc = src
|
||||
src.update_icons()
|
||||
|
||||
|
||||
@@ -35,6 +35,15 @@
|
||||
max_w_class = 5
|
||||
max_combined_w_class = 35
|
||||
|
||||
/obj/item/weapon/storage/backpack/holding/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is jumping into [src]! It looks like \he's trying to commit suicide.</span>")
|
||||
user.drop_item()
|
||||
user.Stun(5)
|
||||
sleep(20)
|
||||
playsound(src, "rustle", 50, 1, -5)
|
||||
qdel(user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/backpack/holding/can_be_inserted(obj/item/W, stop_messages = 0, mob/user)
|
||||
if(crit_fail)
|
||||
user << "<span class='danger'>The Bluespace generator isn't working.</span>"
|
||||
@@ -278,6 +287,24 @@
|
||||
item_state = "duffle-syndieammo"
|
||||
slowdown = 0
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndieammo/loaded
|
||||
desc = "A large dufflebag, packed to the brim with Bulldog shotgun ammo."
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndieammo/loaded/New()
|
||||
..()
|
||||
contents = list()
|
||||
new /obj/item/ammo_box/magazine/m12g(src)
|
||||
new /obj/item/ammo_box/magazine/m12g(src)
|
||||
new /obj/item/ammo_box/magazine/m12g(src)
|
||||
new /obj/item/ammo_box/magazine/m12g(src)
|
||||
new /obj/item/ammo_box/magazine/m12g(src)
|
||||
new /obj/item/ammo_box/magazine/m12g(src)
|
||||
new /obj/item/ammo_box/magazine/m12g/buckshot(src)
|
||||
new /obj/item/ammo_box/magazine/m12g/stun(src)
|
||||
new /obj/item/ammo_box/magazine/m12g/dragon(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag/captain
|
||||
name = "captain's dufflebag"
|
||||
desc = "A large dufflebag for holding extra captainly goods."
|
||||
|
||||
@@ -41,6 +41,13 @@
|
||||
user << "<span class='danger'>It's locked!</span>"
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/lockbox/MouseDrop(over_object, src_location, over_location)
|
||||
if (locked)
|
||||
src.add_fingerprint(usr)
|
||||
usr << "<span class='warning'>It's locked!</span>"
|
||||
return 0
|
||||
..()
|
||||
|
||||
/obj/item/weapon/storage/lockbox/emag_act(mob/user as mob)
|
||||
if(!broken)
|
||||
broken = 1
|
||||
@@ -57,6 +64,13 @@
|
||||
..()
|
||||
return
|
||||
|
||||
//Check the destination item type for contentto.
|
||||
/obj/item/weapon/storage/lockbox/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user)
|
||||
if(locked)
|
||||
user << "<span class='warning'>It's locked!</span>"
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/storage/lockbox/can_be_inserted(obj/item/W, stop_messages = 0)
|
||||
if(locked)
|
||||
return 0
|
||||
|
||||
@@ -75,10 +75,10 @@
|
||||
/obj/item/weapon/storage/secure/MouseDrop(over_object, src_location, over_location)
|
||||
if (locked)
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
usr << "<span class='warning'>It's locked!</span>"
|
||||
return 0
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/storage/secure/attack_self(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
var/dat = text("<TT><B>[]</B><BR>\n\nLock Status: []",src, (src.locked ? "LOCKED" : "UNLOCKED"))
|
||||
@@ -128,6 +128,12 @@
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/secure/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user)
|
||||
if(locked)
|
||||
user << "<span class='warning'>It's locked!</span>"
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/storage/secure/can_be_inserted(obj/item/W, stop_messages = 0)
|
||||
if(locked)
|
||||
return 0
|
||||
|
||||
@@ -25,10 +25,13 @@
|
||||
var/preposition = "in" // You put things 'in' a bag, but trays need 'on'.
|
||||
|
||||
|
||||
/obj/item/weapon/storage/MouseDrop(obj/over_object)
|
||||
/obj/item/weapon/storage/MouseDrop(atom/over_object)
|
||||
if(iscarbon(usr) || isdrone(usr)) //all the check for item manipulation are in other places, you can safely open any storages as anything and its not buggy, i checked
|
||||
var/mob/M = usr
|
||||
|
||||
if(!over_object)
|
||||
return
|
||||
|
||||
if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
|
||||
return
|
||||
|
||||
@@ -39,13 +42,14 @@
|
||||
show_to(M)
|
||||
return
|
||||
|
||||
if(!( istype(over_object, /obj/screen) ))
|
||||
return ..()
|
||||
|
||||
if(!(loc == usr) || (loc && loc.loc == usr))
|
||||
return
|
||||
playsound(loc, "rustle", 50, 1, -5)
|
||||
if(!( M.restrained() ) && !( M.stat ))
|
||||
if(!( istype(over_object, /obj/screen) ))
|
||||
return content_can_dump(over_object, M)
|
||||
|
||||
if(!(loc == usr) || (loc && loc.loc == usr))
|
||||
return
|
||||
|
||||
playsound(loc, "rustle", 50, 1, -5)
|
||||
switch(over_object.name)
|
||||
if("r_hand")
|
||||
if(!M.unEquip(src))
|
||||
@@ -56,8 +60,26 @@
|
||||
return
|
||||
M.put_in_l_hand(src)
|
||||
add_fingerprint(usr)
|
||||
return
|
||||
|
||||
//Check if this storage can dump the items
|
||||
/obj/item/weapon/storage/proc/content_can_dump(atom/dest_object, mob/user)
|
||||
if(Adjacent(user) && dest_object.Adjacent(user))
|
||||
if(dest_object.storage_contents_dump_act(src, user))
|
||||
playsound(loc, "rustle", 50, 1, -5)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//Object behaviour on storage dump
|
||||
/obj/item/weapon/storage/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user)
|
||||
for(var/obj/item/I in src_object)
|
||||
if(can_be_inserted(I,0,user))
|
||||
src_object.remove_from_storage(I, src)
|
||||
orient2hud(user)
|
||||
src_object.orient2hud(user)
|
||||
if(user.s_active) //refresh the HUD to show the transfered contents
|
||||
user.s_active.close(user)
|
||||
user.s_active.show_to(user)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/storage/proc/return_inv()
|
||||
var/list/L = list()
|
||||
|
||||
@@ -71,7 +71,8 @@
|
||||
if(C.maxcharge < hitcost)
|
||||
user << "<span class='notice'>[src] requires a higher capacity cell.</span>"
|
||||
return
|
||||
user.drop_item()
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
bcell = W
|
||||
user << "<span class='notice'>You install a cell in [src].</span>"
|
||||
|
||||
@@ -96,7 +96,13 @@
|
||||
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main")
|
||||
/obj/item/weapon/tank/interact(mob/user, ui_key = "main")
|
||||
SSnano.try_update_ui(user, src, ui_key, null, src.get_ui_data())
|
||||
|
||||
/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
|
||||
ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "tanks.tmpl", "Tank", 500, 300, 0)
|
||||
|
||||
/obj/item/weapon/tank/get_ui_data()
|
||||
var/mob/living/carbon/location = null
|
||||
|
||||
if(istype(loc, /mob/living/carbon))
|
||||
@@ -104,19 +110,12 @@
|
||||
else if(istype(loc.loc, /mob/living/carbon))
|
||||
location = loc.loc
|
||||
|
||||
var/using_internal
|
||||
if(istype(location))
|
||||
if(location.internal==src)
|
||||
using_internal = 1
|
||||
|
||||
// this is the data which will be sent to the ui
|
||||
var/data = list()
|
||||
data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0)
|
||||
data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0)
|
||||
data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE)
|
||||
data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE)
|
||||
data["valveOpen"] = using_internal ? 1 : 0
|
||||
|
||||
data["valveOpen"] = 0
|
||||
data["maskConnected"] = 0
|
||||
|
||||
if(istype(location))
|
||||
@@ -124,6 +123,7 @@
|
||||
|
||||
if(location.internal == src) // if tank is current internal
|
||||
mask_check = 1
|
||||
data["valveOpen"] = 1
|
||||
else if(src in location) // or if tank is in the mobs possession
|
||||
if(!location.internal) // and they do not have any active internals
|
||||
mask_check = 1
|
||||
@@ -131,16 +131,7 @@
|
||||
if(mask_check)
|
||||
if(location.wear_mask && (location.wear_mask.flags & MASKINTERNALS))
|
||||
data["maskConnected"] = 1
|
||||
|
||||
var/datum/nanoui/ui = SSnano.get_open_ui(user, src, ui_key)
|
||||
if (!ui)
|
||||
ui = new /datum/nanoui(user, src, ui_key, "tanks.tmpl", "Tank", 500, 300)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
else
|
||||
ui.push_data(data)
|
||||
|
||||
return data
|
||||
|
||||
/obj/item/weapon/tank/Topic(href, href_list)
|
||||
..()
|
||||
|
||||
@@ -128,8 +128,10 @@
|
||||
|
||||
/obj/item/weapon/twohanded/required/attack_hand(mob/user)//Can't even pick it up without both hands empty
|
||||
var/obj/item/weapon/twohanded/required/H = user.get_inactive_hand()
|
||||
if(get_dist(src,user) > 1)
|
||||
return 0
|
||||
if(H != null)
|
||||
user.visible_message("<span class='notice'>[src.name] is too cumbersome to carry in one hand!</span>")
|
||||
user << "<span class='notice'>[src.name] is too cumbersome to carry in one hand!</span>"
|
||||
return
|
||||
var/obj/item/weapon/twohanded/offhand/O = new(user)
|
||||
user.put_in_inactive_hand(O)
|
||||
|
||||
Reference in New Issue
Block a user