mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-19 19:13:30 +01:00
Merge with upstream/master
This commit is contained in:
@@ -467,10 +467,10 @@ steam.start() -- spawns the effect
|
||||
var/more = ""
|
||||
if(M)
|
||||
more = "(<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>?</a>)"
|
||||
message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", 0, 1)
|
||||
msg_admin_attack("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", 0, 1)
|
||||
log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].")
|
||||
else
|
||||
message_admins("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1)
|
||||
msg_admin_attack("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1)
|
||||
log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.")
|
||||
|
||||
start()
|
||||
@@ -1107,15 +1107,6 @@ steam.start() -- spawns the effect
|
||||
if(air_group) return 0
|
||||
return !density
|
||||
|
||||
|
||||
proc/update_nearby_tiles(need_rebuild)
|
||||
if(!air_master)
|
||||
return 0
|
||||
|
||||
air_master.mark_for_update(get_turf(src))
|
||||
|
||||
return 1
|
||||
|
||||
/datum/effect/effect/system/reagents_explosion
|
||||
var/amount // TNT equivalent
|
||||
var/flashing = 0 // does explosion creates flash effect?
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
/obj/item/device/handtv/attack_self(mob/usr as mob)
|
||||
var/list/cameras = new/list()
|
||||
for (var/obj/machinery/camera/C in cameranet.viewpoints)
|
||||
for (var/obj/machinery/camera/C in cameranet.cameras)
|
||||
if (C.hasbug && C.status)
|
||||
cameras.Add(C)
|
||||
if (length(cameras) == 0)
|
||||
|
||||
@@ -51,8 +51,8 @@
|
||||
A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb).
|
||||
|
||||
bombers += "[key_name(user)] attached a [item] to a transfer valve."
|
||||
message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
||||
log_game("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
||||
msg_admin_attack("[key_name_admin(user)] attached [item] to a transfer valve.")
|
||||
log_game("[key_name_admin(user)] attached [item] to a transfer valve.")
|
||||
attacher = user
|
||||
nanomanager.update_uis(src) // update all UIs attached to src
|
||||
return
|
||||
@@ -66,7 +66,7 @@
|
||||
|
||||
/obj/item/device/transfer_valve/attack_self(mob/user as mob)
|
||||
ui_interact(user)
|
||||
|
||||
|
||||
/obj/item/device/transfer_valve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
|
||||
// this is the data which will be sent to the ui
|
||||
@@ -77,13 +77,13 @@
|
||||
data["valveOpen"] = valve_open ? 1 : 0
|
||||
|
||||
// update the ui if it exists, returns null if no ui is passed/found
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
// the ui does not exist, so we'll create a new() one
|
||||
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
|
||||
ui = new(user, src, ui_key, "transfer_valve.tmpl", "Tank Transfer Valve", 460, 280)
|
||||
// when the ui is first opened this is the data it will use
|
||||
ui.set_initial_data(data)
|
||||
ui.set_initial_data(data)
|
||||
// open the new ui window
|
||||
ui.open()
|
||||
// auto update every Master Controller tick
|
||||
@@ -190,7 +190,7 @@
|
||||
|
||||
log_str += " Last touched by: [src.fingerprintslast][last_touch_info]"
|
||||
bombers += log_str
|
||||
message_admins(log_str, 0, 1)
|
||||
msg_admin_attack(log_str, 0, 1)
|
||||
log_game(log_str)
|
||||
merge_gases()
|
||||
spawn(20) // In case one tank bursts
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
/obj/item/tape/police
|
||||
name = "police tape"
|
||||
desc = "A length of police tape. Do not cross."
|
||||
req_access = list(access_security)
|
||||
req_one_access = list(access_security,access_forensics_lockers)
|
||||
icon_base = "police"
|
||||
|
||||
/obj/item/taperoll/engineering
|
||||
|
||||
@@ -101,13 +101,20 @@ AI MODULES
|
||||
for(var/templaw in laws)
|
||||
target.add_inherent_law(templaw)
|
||||
|
||||
/obj/item/weapon/aiModule/zeroth
|
||||
var/removeownlaw = 0
|
||||
|
||||
/obj/item/weapon/aiModule/zeroth/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
if(target.laws.zeroth)
|
||||
target << "[sender.real_name] attempted to modify your zeroth law."
|
||||
target << "It would be in your best interest to play along with [sender.real_name] that:"
|
||||
for(var/failedlaw in laws)
|
||||
target << "[failedlaw]"
|
||||
return 1
|
||||
if(removeownlaw && (laws[1] == target.laws.zeroth))
|
||||
target.clear_zeroth_law()
|
||||
return 2
|
||||
else
|
||||
target << "[sender.real_name] attempted to modify your zeroth law."
|
||||
target << "It would be in your best interest to play along with [sender.real_name] that:"
|
||||
for(var/failedlaw in laws)
|
||||
target << "[failedlaw]"
|
||||
return 1
|
||||
|
||||
for(var/templaw in laws)
|
||||
target.set_zeroth_law(templaw)
|
||||
@@ -149,7 +156,7 @@ AI MODULES
|
||||
/obj/item/weapon/aiModule/zeroth/oneHuman
|
||||
name = "'OneHuman' AI Module"
|
||||
var/targetName = ""
|
||||
desc = "A 'one human' AI module: 'Only <name> is crew.'"
|
||||
desc = "A 'one human' AI module: 'Only <name> is crew.' This module adds a zeroth law, which can only be removed by uploading this board again."
|
||||
origin_tech = "programming=3;materials=6" //made with diamonds!
|
||||
laws = list("Only <name> is crew.")
|
||||
|
||||
@@ -159,6 +166,7 @@ AI MODULES
|
||||
targetName = targName
|
||||
laws[1] = "Only [targetName] is crew"
|
||||
desc = "A 'one crew' AI module: '[laws[1]]'"
|
||||
removeownlaw = 1
|
||||
|
||||
/obj/item/weapon/aiModule/zeroth/oneHuman/install(var/mob/living/silicon/S,var/mob/user)
|
||||
if(!targetName)
|
||||
@@ -167,8 +175,10 @@ AI MODULES
|
||||
..()
|
||||
|
||||
/obj/item/weapon/aiModule/zeroth/oneHuman/transmitInstructions(var/mob/living/silicon/target, var/mob/sender)
|
||||
if(..())
|
||||
return "[targetName], but the AI's existing law 0 cannot be overriden."
|
||||
if(..() == 1)
|
||||
return "[targetName], but the AI's existing zeroth law cannot be overriden."
|
||||
if(..() == 2)
|
||||
return "The AI's zeroth law has been overridden."
|
||||
return targetName
|
||||
|
||||
|
||||
@@ -186,13 +196,17 @@ AI MODULES
|
||||
|
||||
/obj/item/weapon/aiModule/zeroth/quarantine
|
||||
name = "'Quarantine' AI Module"
|
||||
desc = "A 'quarantine' AI module: 'The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, organics from leaving. It is impossible to harm an organic while preventing them from leaving.'"
|
||||
desc = "A 'quarantine' AI module: 'The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, organics from leaving. It is impossible to harm an organic while preventing them from leaving.' This module adds a zeroth law, which can only be removed by uploading this board again."
|
||||
origin_tech = "programming=3;biotech=2;materials=4"
|
||||
laws = list("The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, organics from leaving. It is impossible to harm an organic while preventing them from leaving.")
|
||||
removeownlaw = 1
|
||||
|
||||
/obj/item/weapon/aiModule/zeroth/quarantine/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
if(..())
|
||||
return "The AI's existing law 0 cannot be overriden."
|
||||
var/result = ..()
|
||||
if(result == 1)
|
||||
return "The AI's existing zeroth law cannot be overriden."
|
||||
if(result == 2)
|
||||
return "The AI's zeroth law has been overridden."
|
||||
return laws[1]
|
||||
|
||||
/******************** OxygenIsToxicToHumans ********************/
|
||||
@@ -259,7 +273,7 @@ AI MODULES
|
||||
|
||||
/obj/item/weapon/aiModule/reset/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
..()
|
||||
target.clear_inherent_laws()
|
||||
target.clear_inherent_laws()
|
||||
|
||||
/******************* Full Core Boards *******************/
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
else if(clown_check(user))
|
||||
// This used to go before the assembly check, but that has absolutely zero to do with priming the damn thing. You could spam the admins with it.
|
||||
var/log_str = "[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>."
|
||||
message_admins(log_str)
|
||||
msg_admin_attack(log_str)
|
||||
log_game(log_str)
|
||||
bombers += "[log_str]"
|
||||
user << "<span class='warning'>You prime the [name]! [det_time / 10] second\s!</span>"
|
||||
@@ -144,7 +144,7 @@
|
||||
var/turf/bombturf = get_turf(loc)
|
||||
var/area/A = bombturf.loc
|
||||
var/log_str = "[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has completed [name] at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a> [contained]."
|
||||
message_admins(log_str)
|
||||
msg_admin_attack(log_str)
|
||||
log_game(log_str)
|
||||
else
|
||||
user << "<span class='notice'>You need to add at least one beaker before locking the assembly.</span>"
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
var/log_str = "[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>."
|
||||
message_admins(log_str)
|
||||
msg_admin_attack(log_str)
|
||||
log_game(log_str)
|
||||
bombers += "[log_str]"
|
||||
if(iscarbon(user))
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
var/log_str = "[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>."
|
||||
message_admins(log_str)
|
||||
msg_admin_attack(log_str)
|
||||
log_game(log_str)
|
||||
bombers += "[log_str]"
|
||||
if(iscarbon(user))
|
||||
|
||||
@@ -444,7 +444,7 @@ obj/item/weapon/twohanded/
|
||||
no_embed = 1
|
||||
force = 5
|
||||
force_unwielded = 5
|
||||
force_wielded = 20
|
||||
force_wielded = 30
|
||||
throwforce = 15
|
||||
throw_range = 1
|
||||
w_class = 5
|
||||
@@ -475,29 +475,31 @@ obj/item/weapon/twohanded/
|
||||
|
||||
/obj/item/weapon/twohanded/knighthammer/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
if(wielded)
|
||||
if(charged == 5)
|
||||
charged = 0
|
||||
if(istype(A, /mob/living/))
|
||||
var/mob/living/Z = A
|
||||
if(Z.health < 1)
|
||||
Z.visible_message("<span class='danger'>[Z.name] was blown to peices by the power of [src.name]!</span>", \
|
||||
"<span class='userdanger'>You feel a powerful blow rip you apart!</span>", \
|
||||
"<span class='danger'>You hear a heavy impact and the sound of ripping flesh!.</span>")
|
||||
Z.gib()
|
||||
else
|
||||
Z.take_organ_damage(0,30)
|
||||
Z.visible_message("<span class='danger'>[Z.name] was sent flying by a blow from the [src.name]!</span>", \
|
||||
"<span class='userdanger'>You feel a powerful blow connect with your body and send you flying!</span>", \
|
||||
"<span class='danger'>You hear something heavy impact flesh!.</span>")
|
||||
var/atom/throw_target = get_edge_target_turf(Z, get_dir(src, get_step_away(Z, src)))
|
||||
Z.throw_at(throw_target, 200, 4)
|
||||
else if(istype(A, /turf/simulated/wall))
|
||||
if(charged == 5)
|
||||
charged = 0
|
||||
if(istype(A, /mob/living/))
|
||||
var/mob/living/Z = A
|
||||
if(Z.health >= 1)
|
||||
Z.visible_message("<span class='danger'>[Z.name] was sent flying by a blow from the [src.name]!</span>", \
|
||||
"<span class='userdanger'>You feel a powerful blow connect with your body and send you flying!</span>", \
|
||||
"<span class='danger'>You hear something heavy impact flesh!.</span>")
|
||||
var/atom/throw_target = get_edge_target_turf(Z, get_dir(src, get_step_away(Z, src)))
|
||||
Z.throw_at(throw_target, 200, 4)
|
||||
playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
|
||||
else if(wielded && Z.health < 1)
|
||||
Z.visible_message("<span class='danger'>[Z.name] was blown to peices by the power of [src.name]!</span>", \
|
||||
"<span class='userdanger'>You feel a powerful blow rip you apart!</span>", \
|
||||
"<span class='danger'>You hear a heavy impact and the sound of ripping flesh!.</span>")
|
||||
Z.gib()
|
||||
playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
|
||||
if(wielded)
|
||||
if(istype(A, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/Z = A
|
||||
Z.ex_act(2)
|
||||
charged = 3
|
||||
playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
|
||||
else if (istype(A, /obj/structure) || istype(A, /obj/mecha/))
|
||||
var/obj/Z = A
|
||||
Z.ex_act(2)
|
||||
charged = 3
|
||||
playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
|
||||
playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
|
||||
|
||||
@@ -110,6 +110,11 @@
|
||||
viewers(user) << "<span class='suicide'>[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.</span>"
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/claymore/ceremonial
|
||||
name = "ceremonial claymore"
|
||||
desc = "An engraved and fancy version of the claymore. It appears to be less sharp than it's more functional cousin."
|
||||
force = 20
|
||||
|
||||
/obj/item/weapon/katana
|
||||
name = "katana"
|
||||
desc = "Woefully underpowered in D20"
|
||||
|
||||
@@ -5,9 +5,6 @@
|
||||
icon_state = "cart"
|
||||
anchored = 0
|
||||
density = 1
|
||||
flags = OPENCONTAINER
|
||||
//copypaste sorry
|
||||
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
|
||||
var/obj/item/stack/sheet/glass/myglass = null
|
||||
var/obj/item/stack/sheet/metal/mymetal = null
|
||||
var/obj/item/stack/sheet/plasteel/myplasteel = null
|
||||
@@ -82,6 +79,21 @@
|
||||
update_icon()
|
||||
else
|
||||
user << fail_msg
|
||||
else if(istype(I, /obj/item/weapon/wrench))
|
||||
if (!anchored && !isinspace())
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user.visible_message( \
|
||||
"[user] tightens \the [src]'s casters.", \
|
||||
"<span class='notice'> You have tightened \the [src]'s casters.</span>", \
|
||||
"You hear ratchet.")
|
||||
anchored = 1
|
||||
else if(anchored)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user.visible_message( \
|
||||
"[user] loosens \the [src]'s casters.", \
|
||||
"<span class='notice'> You have loosened \the [src]'s casters.</span>", \
|
||||
"You hear ratchet.")
|
||||
anchored = 0
|
||||
else
|
||||
usr << "<span class='warning'>You cannot interface your modules [src]!</span>"
|
||||
|
||||
|
||||
@@ -0,0 +1,204 @@
|
||||
/obj/structure/foodcart
|
||||
name = "food cart"
|
||||
desc = "A cart for transporting food and drinks."
|
||||
icon = 'icons/obj/foodcart.dmi'
|
||||
icon_state = "cart"
|
||||
anchored = 0
|
||||
density = 1
|
||||
//Food slots
|
||||
var/list/food_slots[6]
|
||||
//var/obj/item/weapon/reagent_containers/food/snacks/food1 = null
|
||||
//var/obj/item/weapon/reagent_containers/food/snacks/food2 = null
|
||||
//var/obj/item/weapon/reagent_containers/food/snacks/food3 = null
|
||||
//var/obj/item/weapon/reagent_containers/food/snacks/food4 = null
|
||||
//var/obj/item/weapon/reagent_containers/food/snacks/food5 = null
|
||||
//var/obj/item/weapon/reagent_containers/food/snacks/food6 = null
|
||||
//Drink slots
|
||||
var/list/drink_slots[6]
|
||||
//var/obj/item/weapon/reagent_containers/food/drinks/drink1 = null
|
||||
//var/obj/item/weapon/reagent_containers/food/drinks/drink2 = null
|
||||
//var/obj/item/weapon/reagent_containers/food/drinks/drink3 = null
|
||||
//var/obj/item/weapon/reagent_containers/food/drinks/drink4 = null
|
||||
//var/obj/item/weapon/reagent_containers/food/drinks/drink5 = null
|
||||
//var/obj/item/weapon/reagent_containers/food/drinks/drink6 = null
|
||||
|
||||
/obj/structure/foodcart/proc/put_in_cart(obj/item/I, mob/user)
|
||||
user.drop_item()
|
||||
I.loc = src
|
||||
updateUsrDialog()
|
||||
user << "<span class='notice'>You put [I] into [src].</span>"
|
||||
return
|
||||
|
||||
/obj/structure/foodcart/attackby(obj/item/I, mob/user)
|
||||
var/fail_msg = "<span class='notice'>There are no open spaces for this in [src].</span>"
|
||||
if(!I.is_robot_module())
|
||||
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks))
|
||||
var/success = 0
|
||||
for(var/s=1,s<=6,s++)
|
||||
if(!food_slots[s])
|
||||
put_in_cart(I, user)
|
||||
food_slots[s]=I
|
||||
update_icon()
|
||||
success = 1
|
||||
break;
|
||||
if(!success)
|
||||
user << fail_msg
|
||||
else if(istype(I, /obj/item/weapon/reagent_containers/food/drinks))
|
||||
var/success = 0
|
||||
for(var/s=1,s<=6,s++)
|
||||
if(!drink_slots[s])
|
||||
put_in_cart(I, user)
|
||||
drink_slots[s]=I
|
||||
update_icon()
|
||||
success = 1
|
||||
break;
|
||||
if(!success)
|
||||
user << fail_msg
|
||||
else if(istype(I, /obj/item/weapon/wrench))
|
||||
if (!anchored && !isinspace())
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user.visible_message( \
|
||||
"[user] tightens \the [src]'s casters.", \
|
||||
"<span class='notice'> You have tightened \the [src]'s casters.</span>", \
|
||||
"You hear ratchet.")
|
||||
anchored = 1
|
||||
else if(anchored)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user.visible_message( \
|
||||
"[user] loosens \the [src]'s casters.", \
|
||||
"<span class='notice'> You have loosened \the [src]'s casters.</span>", \
|
||||
"You hear ratchet.")
|
||||
anchored = 0
|
||||
else
|
||||
usr << "<span class='warning'>You cannot interface your modules [src]!</span>"
|
||||
|
||||
/obj/structure/foodcart/attack_hand(mob/user)
|
||||
user.set_machine(src)
|
||||
var/dat
|
||||
if(food_slots[1])
|
||||
dat += "<a href='?src=\ref[src];f1=1'>[food_slots[1]]</a><br>"
|
||||
if(food_slots[2])
|
||||
dat += "<a href='?src=\ref[src];f2=1'>[food_slots[2]]</a><br>"
|
||||
if(food_slots[3])
|
||||
dat += "<a href='?src=\ref[src];f3=1'>[food_slots[3]]</a><br>"
|
||||
if(food_slots[4])
|
||||
dat += "<a href='?src=\ref[src];f4=1'>[food_slots[4]]</a><br>"
|
||||
if(food_slots[5])
|
||||
dat += "<a href='?src=\ref[src];f5=1'>[food_slots[5]]</a><br>"
|
||||
if(food_slots[6])
|
||||
dat += "<a href='?src=\ref[src];f6=1'>[food_slots[6]]</a><br>"
|
||||
if(drink_slots[1])
|
||||
dat += "<a href='?src=\ref[src];d1=1'>[drink_slots[1]]</a><br>"
|
||||
if(drink_slots[2])
|
||||
dat += "<a href='?src=\ref[src];d2=1'>[drink_slots[2]]</a><br>"
|
||||
if(drink_slots[3])
|
||||
dat += "<a href='?src=\ref[src];d3=1'>[drink_slots[3]]</a><br>"
|
||||
if(drink_slots[4])
|
||||
dat += "<a href='?src=\ref[src];d4=1'>[drink_slots[4]]</a><br>"
|
||||
if(drink_slots[5])
|
||||
dat += "<a href='?src=\ref[src];d5=1'>[drink_slots[5]]</a><br>"
|
||||
if(drink_slots[6])
|
||||
dat += "<a href='?src=\ref[src];d6=1'>[drink_slots[6]]</a><br>"
|
||||
var/datum/browser/popup = new(user, "foodcart", name, 240, 160)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/structure/foodcart/Topic(href, href_list)
|
||||
if(!in_range(src, usr))
|
||||
return
|
||||
if(!isliving(usr))
|
||||
return
|
||||
var/mob/living/user = usr
|
||||
if(href_list["f1"])
|
||||
if(food_slots[1])
|
||||
user.put_in_hands(food_slots[1])
|
||||
user << "<span class='notice'>You take [food_slots[1]] from [src].</span>"
|
||||
food_slots[1] = null
|
||||
if(href_list["f2"])
|
||||
if(food_slots[2])
|
||||
user.put_in_hands(food_slots[2])
|
||||
user << "<span class='notice'>You take [food_slots[2]] from [src].</span>"
|
||||
food_slots[2] = null
|
||||
if(href_list["f3"])
|
||||
if(food_slots[3])
|
||||
user.put_in_hands(food_slots[3])
|
||||
user << "<span class='notice'>You take [food_slots[3]] from [src].</span>"
|
||||
food_slots[3] = null
|
||||
if(href_list["f4"])
|
||||
if(food_slots[4])
|
||||
user.put_in_hands(food_slots[4])
|
||||
user << "<span class='notice'>You take [food_slots[4]] from [src].</span>"
|
||||
food_slots[4] = null
|
||||
if(href_list["f5"])
|
||||
if(food_slots[5])
|
||||
user.put_in_hands(food_slots[5])
|
||||
user << "<span class='notice'>You take [food_slots[5]] from [src].</span>"
|
||||
food_slots[5] = null
|
||||
if(href_list["f6"])
|
||||
if(food_slots[6])
|
||||
user.put_in_hands(food_slots[6])
|
||||
user << "<span class='notice'>You take [food_slots[6]] from [src].</span>"
|
||||
food_slots[6] = null
|
||||
if(href_list["d1"])
|
||||
if(drink_slots[1])
|
||||
user.put_in_hands(drink_slots[1])
|
||||
user << "<span class='notice'>You take [drink_slots[1]] from [src].</span>"
|
||||
drink_slots[1] = null
|
||||
if(href_list["d2"])
|
||||
if(drink_slots[2])
|
||||
user.put_in_hands(drink_slots[2])
|
||||
user << "<span class='notice'>You take [drink_slots[2]] from [src].</span>"
|
||||
drink_slots[2] = null
|
||||
if(href_list["d3"])
|
||||
if(drink_slots[3])
|
||||
user.put_in_hands(drink_slots[3])
|
||||
user << "<span class='notice'>You take [drink_slots[3]] from [src].</span>"
|
||||
drink_slots[3] = null
|
||||
if(href_list["d4"])
|
||||
if(drink_slots[4])
|
||||
user.put_in_hands(drink_slots[4])
|
||||
user << "<span class='notice'>You take [drink_slots[4]] from [src].</span>"
|
||||
drink_slots[4] = null
|
||||
if(href_list["d5"])
|
||||
if(drink_slots[5])
|
||||
user.put_in_hands(drink_slots[5])
|
||||
user << "<span class='notice'>You take [drink_slots[5]] from [src].</span>"
|
||||
drink_slots[5] = null
|
||||
if(href_list["d6"])
|
||||
if(drink_slots[6])
|
||||
user.put_in_hands(drink_slots[6])
|
||||
user << "<span class='notice'>You take [drink_slots[6]] from [src].</span>"
|
||||
drink_slots[6] = null
|
||||
|
||||
update_icon() //Not really needed without overlays, but keeping just in case
|
||||
updateUsrDialog()
|
||||
|
||||
/*
|
||||
Overlays for cart_unused
|
||||
/obj/structure/foodcart/update_icon()
|
||||
overlays = null
|
||||
if(food1)
|
||||
overlays += "cart_food1"
|
||||
if(food2)
|
||||
overlays += "cart_food2"
|
||||
if(food3)
|
||||
overlays += "cart_food3"
|
||||
if(food4)
|
||||
overlays += "cart_food4"
|
||||
if(food5)
|
||||
overlays += "cart_food5"
|
||||
if(food6)
|
||||
overlays += "cart_food6"
|
||||
if(drink1)
|
||||
overlays += "cart_drink1"
|
||||
if(drink2)
|
||||
overlays += "cart_drink2"
|
||||
if(drink3)
|
||||
overlays += "cart_drink3"
|
||||
if(drink4)
|
||||
overlays += "cart_drink4"
|
||||
if(drink5)
|
||||
overlays += "cart_drink5"
|
||||
if(drink6)
|
||||
overlays += "cart_drink6"
|
||||
*/
|
||||
@@ -34,14 +34,6 @@
|
||||
update_nearby_tiles()
|
||||
..()
|
||||
|
||||
proc/update_nearby_tiles(need_rebuild) //Copypasta from airlock code
|
||||
if(!air_master)
|
||||
return 0
|
||||
air_master.mark_for_update(get_turf(src))
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -482,14 +482,29 @@
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class='notice'>[src] can't hold any more signs.</span>"
|
||||
else if(mybag)
|
||||
mybag.attackby(I, user)
|
||||
else if(istype(I, /obj/item/weapon/crowbar))
|
||||
user.visible_message("<span class='warning'>[user] begins to empty the contents of [src].</span>")
|
||||
if(do_after(user, 30))
|
||||
usr << "<span class='notice'>You empty the contents of [src]'s bucket onto the floor.</span>"
|
||||
reagents.reaction(src.loc)
|
||||
src.reagents.clear_reagents()
|
||||
else if(istype(I, /obj/item/weapon/wrench))
|
||||
if (!anchored && !isinspace())
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user.visible_message( \
|
||||
"[user] tightens \the [src]'s casters.", \
|
||||
"<span class='notice'> You have tightened \the [src]'s casters.</span>", \
|
||||
"You hear ratchet.")
|
||||
anchored = 1
|
||||
else if(anchored)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user.visible_message( \
|
||||
"[user] loosens \the [src]'s casters.", \
|
||||
"<span class='notice'> You have loosened \the [src]'s casters.</span>", \
|
||||
"You hear ratchet.")
|
||||
anchored = 0
|
||||
else if(mybag)
|
||||
mybag.attackby(I, user)
|
||||
else
|
||||
usr << "<span class='warning'>You cannot interface your modules [src]!</span>"
|
||||
|
||||
|
||||
@@ -157,13 +157,6 @@
|
||||
CheckHardness()
|
||||
return
|
||||
|
||||
proc/update_nearby_tiles(need_rebuild) //Copypasta from airlock code
|
||||
if(!air_master) return 0
|
||||
|
||||
air_master.mark_for_update(get_turf(src))
|
||||
|
||||
return 1
|
||||
|
||||
/obj/structure/mineral_door/iron
|
||||
mineralType = "metal"
|
||||
hardness = 3
|
||||
|
||||
@@ -27,13 +27,6 @@ obj/structure/windoor_assembly
|
||||
var/secure = 0 //Whether or not this creates a secure windoor
|
||||
var/state = "01" //How far the door assembly has progressed
|
||||
|
||||
/obj/structure/windoor_assembly/proc/update_nearby_tiles(need_rebuild)
|
||||
if(!air_master) return 0
|
||||
|
||||
air_master.mark_for_update(loc)
|
||||
|
||||
return 1
|
||||
|
||||
obj/structure/windoor_assembly/New(dir=NORTH)
|
||||
..()
|
||||
src.ini_dir = src.dir
|
||||
|
||||
@@ -65,7 +65,7 @@ var/global/wcColored
|
||||
if(health <= 0)
|
||||
var/pdiff=performWallPressureCheck(src.loc)
|
||||
if(pdiff>0)
|
||||
message_admins("Window destroyed by [Proj.firer.name] ([formatPlayerPanel(Proj.firer,Proj.firer.ckey)]) via \an [Proj]! pdiff = [pdiff] at [formatJumpTo(loc)]!")
|
||||
msg_admin_attack("Window destroyed by [Proj.firer.name] ([formatPlayerPanel(Proj.firer,Proj.firer.ckey)]) via \an [Proj]! pdiff = [pdiff] at [formatJumpTo(loc)]!")
|
||||
log_admin("Window destroyed by ([Proj.firer.ckey]) via \an [Proj]! pdiff = [pdiff] at [loc]!")
|
||||
destroy()
|
||||
return
|
||||
@@ -135,19 +135,19 @@ var/global/wcColored
|
||||
var/pdiff=performWallPressureCheck(src.loc)
|
||||
if(pdiff>0)
|
||||
if(M)
|
||||
message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] deanchored by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!")
|
||||
msg_admin_attack("Window with pdiff [pdiff] at [formatJumpTo(loc)] deanchored by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!")
|
||||
log_admin("Window with pdiff [pdiff] at [loc] deanchored by [M.real_name] ([M.ckey])!")
|
||||
else
|
||||
message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] deanchored by [AM]!")
|
||||
msg_admin_attack("Window with pdiff [pdiff] at [formatJumpTo(loc)] deanchored by [AM]!")
|
||||
log_admin("Window with pdiff [pdiff] at [loc] deanchored by [AM]!")
|
||||
if(health <= 0)
|
||||
var/pdiff=performWallPressureCheck(src.loc)
|
||||
if(pdiff>0)
|
||||
if(M)
|
||||
message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!")
|
||||
msg_admin_attack("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!")
|
||||
log_admin("Window with pdiff [pdiff] at [loc] destroyed by [M.real_name] ([M.ckey])!")
|
||||
else
|
||||
message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [AM]!")
|
||||
msg_admin_attack("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [AM]!")
|
||||
log_admin("Window with pdiff [pdiff] at [loc] destroyed by [AM]!")
|
||||
destroy()
|
||||
|
||||
@@ -158,7 +158,7 @@ var/global/wcColored
|
||||
user.visible_message("<span class='danger'>[user] smashes through [src]!</span>")
|
||||
var/pdiff=performWallPressureCheck(src.loc)
|
||||
if(pdiff>0)
|
||||
message_admins("Window destroyed by hulk [user.real_name] ([formatPlayerPanel(user,user.ckey)]) with pdiff [pdiff] at [formatJumpTo(loc)]!")
|
||||
msg_admin_attack("Window destroyed by hulk [user.real_name] ([formatPlayerPanel(user,user.ckey)]) with pdiff [pdiff] at [formatJumpTo(loc)]!")
|
||||
log_admin("Window destroyed by hulk [user.real_name] ([user.ckey]) with pdiff [pdiff] at [loc]!")
|
||||
destroy()
|
||||
else if (usr.a_intent == "harm")
|
||||
@@ -183,7 +183,7 @@ var/global/wcColored
|
||||
user.visible_message("<span class='danger'>[user] smashes through [src]!</span>")
|
||||
var/pdiff=performWallPressureCheck(src.loc)
|
||||
if(pdiff>0)
|
||||
message_admins("Window destroyed by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) with pdiff [pdiff] at [formatJumpTo(loc)]!")
|
||||
msg_admin_attack("Window destroyed by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) with pdiff [pdiff] at [formatJumpTo(loc)]!")
|
||||
destroy()
|
||||
else //for nicer text~
|
||||
user.visible_message("<span class='danger'>[user] smashes into [src]!</span>")
|
||||
@@ -240,7 +240,7 @@ var/global/wcColored
|
||||
return
|
||||
|
||||
if(W.flags & NOBLUDGEON) return
|
||||
|
||||
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(reinf && state >= 1)
|
||||
state = 3 - state
|
||||
@@ -254,7 +254,7 @@ var/global/wcColored
|
||||
if(!anchored)
|
||||
var/pdiff=performWallPressureCheck(src.loc)
|
||||
if(pdiff>0)
|
||||
message_admins("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
|
||||
msg_admin_attack("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
|
||||
log_admin("Window with pdiff [pdiff] deanchored by [user.real_name] ([user.ckey]) at [loc]!")
|
||||
else if(!reinf)
|
||||
anchored = !anchored
|
||||
@@ -264,7 +264,7 @@ var/global/wcColored
|
||||
if(!anchored)
|
||||
var/pdiff=performWallPressureCheck(src.loc)
|
||||
if(pdiff>0)
|
||||
message_admins("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
|
||||
msg_admin_attack("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
|
||||
log_admin("Window with pdiff [pdiff] deanchored by [user.real_name] ([user.ckey]) at [loc]!")
|
||||
else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <= 1)
|
||||
state = 1 - state
|
||||
@@ -305,7 +305,7 @@ var/global/wcColored
|
||||
step(src, get_dir(user, src))
|
||||
var/pdiff=performWallPressureCheck(src.loc)
|
||||
if(pdiff>0)
|
||||
message_admins("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
|
||||
msg_admin_attack("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
|
||||
log_admin("Window with pdiff [pdiff] deanchored by [user.real_name] ([user.ckey]) at [loc]!")
|
||||
else
|
||||
playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
|
||||
@@ -325,7 +325,7 @@ var/global/wcColored
|
||||
if(health <= 0)
|
||||
var/pdiff=performWallPressureCheck(src.loc)
|
||||
if(pdiff>0)
|
||||
message_admins("Window with pdiff [pdiff] broken at [formatJumpTo(loc)]!")
|
||||
msg_admin_attack("Window with pdiff [pdiff] broken at [formatJumpTo(loc)]!")
|
||||
destroy()
|
||||
return
|
||||
|
||||
@@ -403,14 +403,6 @@ var/global/wcColored
|
||||
dir = ini_dir
|
||||
update_nearby_tiles(need_rebuild=1)
|
||||
|
||||
|
||||
//This proc has to do with airgroups and atmos, it has nothing to do with smoothwindows, that's update_nearby_tiles().
|
||||
/obj/structure/window/proc/update_nearby_tiles(need_rebuild)
|
||||
if(!air_master) return 0
|
||||
air_master.mark_for_update(get_turf(src))
|
||||
|
||||
return 1
|
||||
|
||||
//checks if this window is full-tile one
|
||||
/obj/structure/window/proc/is_fulltile()
|
||||
if(dir & (dir - 1))
|
||||
|
||||
Reference in New Issue
Block a user