mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-24 05:23:22 +01:00
Merge branch 'master' into development
This commit is contained in:
+16
-8
@@ -133,13 +133,21 @@ mob/living/carbon/human/airflow_hit(atom/A)
|
||||
Stun(round(airflow_speed * vsc.airflow_stun/2))
|
||||
. = ..()
|
||||
|
||||
zone/proc/movables()
|
||||
zone/proc/movables(list/origins)
|
||||
. = list()
|
||||
for(var/turf/T in contents)
|
||||
CHECK_TICK
|
||||
if (!origins || !origins.len)
|
||||
return
|
||||
|
||||
for(var/aa in T)
|
||||
var/atom/movable/A = aa
|
||||
if(!A.simulated || A.anchored || istype(A, /obj/effect) || istype(A, /mob/abstract/eye))
|
||||
continue
|
||||
. += A
|
||||
var/static/list/movables_tcache = typecacheof(list(/obj/effect, /mob/abstract))
|
||||
|
||||
var/atom/movable/AM
|
||||
for (var/testing_turf in contents)
|
||||
for (var/am in testing_turf)
|
||||
AM = am
|
||||
if (AM.simulated && !AM.anchored && !movables_tcache[AM.type])
|
||||
for (var/source_turf in origins)
|
||||
if (get_dist(testing_turf, source_turf) <= EDGE_KNOCKDOWN_MAX_DISTANCE)
|
||||
.[AM] = TRUE
|
||||
break
|
||||
|
||||
CHECK_TICK
|
||||
|
||||
@@ -169,11 +169,11 @@ Class Procs:
|
||||
var/list/attracted
|
||||
var/list/repelled
|
||||
if(differential > 0)
|
||||
attracted = A.movables()
|
||||
repelled = B.movables()
|
||||
attracted = A.movables(connecting_turfs)
|
||||
repelled = B.movables(connecting_turfs)
|
||||
else
|
||||
attracted = B.movables()
|
||||
repelled = A.movables()
|
||||
attracted = B.movables(connecting_turfs)
|
||||
repelled = A.movables(connecting_turfs)
|
||||
|
||||
// These are async, with waitfor = FALSE
|
||||
flow(attracted, abs(differential), 0)
|
||||
@@ -239,7 +239,7 @@ Class Procs:
|
||||
|
||||
var/differential = A.air.return_pressure() - air.return_pressure()
|
||||
if(abs(differential) >= vsc.airflow_lightest_pressure)
|
||||
var/list/attracted = A.movables()
|
||||
var/list/attracted = A.movables(connecting_turfs)
|
||||
// This call is async, with waitfor = FALSE
|
||||
flow(attracted, abs(differential), differential < 0)
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#define BLOCKED 3
|
||||
|
||||
#define ZONE_MIN_SIZE 14 //zones with less than this many turfs will always merge, even if the connection is not direct
|
||||
#define EDGE_KNOCKDOWN_MAX_DISTANCE 16 // Maximum distance between an airflow origin and a movable before knockdown no longer applies.
|
||||
|
||||
#define CANPASS_ALWAYS 1
|
||||
#define CANPASS_DENSITY 2
|
||||
|
||||
@@ -137,8 +137,6 @@
|
||||
#define FLASH_PROTECTION_NONE 0
|
||||
#define FLASH_PROTECTION_MODERATE 1
|
||||
#define FLASH_PROTECTION_MAJOR 2
|
||||
#define ANIMAL_SPAWN_DELAY round(config.respawn_delay / 6)
|
||||
#define DRONE_SPAWN_DELAY round(config.respawn_delay / 3)
|
||||
|
||||
#define ANIMAL_SPAWN_DELAY round(config.respawn_delay / 6)
|
||||
#define DRONE_SPAWN_DELAY round(config.respawn_delay / 3)
|
||||
|
||||
@@ -78,3 +78,8 @@
|
||||
name = "Anti-materiel Rifle"
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT
|
||||
path = /obj/item/weapon/gun/projectile/heavysniper
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/chainsaw
|
||||
name = "Chainsaw"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/material/twohanded/chainsaw/fueled
|
||||
|
||||
@@ -114,35 +114,46 @@
|
||||
set_security_level("delta")
|
||||
|
||||
if(timer > stage1)
|
||||
radio.autosay("Warning: Brute force attempt on primary firewall detected.", "Self-Destruct Control")
|
||||
radio.autosay("Critical: Brute force attempt on primary firewall detected.", "Station Authentication Control")
|
||||
radio.autosay("Notice: Local override recommended.", "Station Authentication Control")
|
||||
else if(timer > stage2)
|
||||
radio.autosay("Warning: Brute force attempt on backup firewall detected.")
|
||||
radio.autosay("Alert: Brute force attempt on backup firewall detected.", "Station Authentication Control")
|
||||
radio.autosay("Notice: Local override with authentication disk recommended.", "Station Authentication Control")
|
||||
else
|
||||
radio.autosay("Self destruct sequence has been activated. Self-destructing in [timer] seconds.", "Self-Destruct Control")
|
||||
radio.autosay("Emergency: Self-destruct sequence has been activated. Self-destructing in [timer] seconds.", "Station Authentication Control")
|
||||
radio.autosay("Notice: Deactivate using authentication disk in SAT-Chamber", "Station Authentication Control")
|
||||
|
||||
|
||||
while(timer)
|
||||
sleep(10)
|
||||
var/obj/machinery/nuclearbomb/station/N = nuke.resolve()
|
||||
if(!user || !user.bombing_station || user.stat == DEAD || !N)
|
||||
radio.autosay("Self destruct sequence has been cancelled.", "Self-Destruct Control")
|
||||
if(timer < stage2)
|
||||
radio.autosay("Self-destruct sequence has been cancelled.", "Station Authentication Control")
|
||||
else
|
||||
radio.autosay("Brute force attempt has ceased.", "Station Authentication Control")
|
||||
return
|
||||
if(N.auth)
|
||||
radio.autosay("Local Override Engaged - Self-Destruct canceled.", "Self-Destruct Control")
|
||||
if(timer < stage2)
|
||||
radio.autosay("Local Override Engaged - Self-Destruct cancelled.", "Station Authentication Control")
|
||||
else
|
||||
radio.autosay("Local Override Engaged - Network connection disabled.", "Station Authentication Control")
|
||||
user.bombing_station = 0
|
||||
return
|
||||
if(timer == stage1+1)
|
||||
radio.autosay("Critical: Primary firewall bypassed.")
|
||||
radio.autosay("Warning: Brute force attempt on backup firewall detected.")
|
||||
radio.autosay("Alert: Primary firewall bypassed.")
|
||||
radio.autosay("Alert: Brute force attempt on backup firewall detected.")
|
||||
radio.autosay("Notice: Local Override with authentication disk recommended.", "Station Authentication Control")
|
||||
user.bombing_time = stage1 //Further attempts will only take 900 seconds
|
||||
if(timer == stage2+1)
|
||||
radio.autosay("Critical: Backup firewall failed.")
|
||||
radio.autosay("Self destruct sequence has been activated. Self-destructing in [timer] seconds.", "Self-Destruct Control")
|
||||
radio.autosay("Emergency: Backup firewall failed.")
|
||||
radio.autosay("Self-destruct sequence has been activated. Self-destructing in [timer] seconds.", "Station Authentication Control")
|
||||
radio.autosay("Notice: Deactivate using authentication disk in SAT-Chamber", "Station Authentication Control")
|
||||
user.bombing_time = stage2 //Further attempts will only take 600 seconds
|
||||
if(timer in list(2, 3, 4, 5, 10, 30, 60, 90, 120, 240, 300)) // Announcement times. "1" is not intentionally included!
|
||||
radio.autosay("Self destruct in [timer] seconds.", "Self-Destruct Control")
|
||||
radio.autosay("Self-destruct in [timer] seconds.", "Station Authentication Control")
|
||||
if(timer == 1)
|
||||
radio.autosay("Self destructing now. Have a nice day.", "Self-Destruct Control")
|
||||
radio.autosay("Self-destruct sequence initiated. Have a nice day", "Station Authentication Control")
|
||||
timer--
|
||||
|
||||
SSticker.station_explosion_cinematic(0,null)
|
||||
|
||||
@@ -230,21 +230,21 @@
|
||||
sleep(duration/5)
|
||||
if(!user || user.stat == DEAD)
|
||||
return
|
||||
command_announcement.Announce("Caution, [current_map.station_name]. We have detected abnormal behaviour in your network. It seems someone is trying to hack your electronic systems. We will update you when we have more information.", "Network Monitoring")
|
||||
command_announcement.Announce("Info: Abnormal network activity detected. Ongoing hacking attempts detcted. Automatic countermeasures activated. Trace activated.", "Network Monitoring")
|
||||
sleep(duration/5)
|
||||
if(!user || user.stat == DEAD)
|
||||
return
|
||||
command_announcement.Announce("We started tracing the intruder. Whoever is doing this, they seem to be on the station itself. We suggest checking all network control terminals. We will keep you updated on the situation.", "Network Monitoring")
|
||||
command_announcement.Announce("Notice: Trace Update. Abnormal network activity originating from: Network terminal aboard [current_map.station_name]. External network connections disabled. Trace cancelled.", "Network Monitoring")
|
||||
sleep(duration/5)
|
||||
if(!user || user.stat == DEAD)
|
||||
return
|
||||
command_announcement.Announce("This is highly abnormal and somewhat concerning. The intruder is too fast, he is evading our traces. No man could be this fast...", "Network Monitoring")
|
||||
command_announcement.Announce("Warning: Automatic countermeasures ineffective. Breach of primary network firewall imminent.", "Network Monitoring")
|
||||
sleep(duration/5)
|
||||
if(!user || user.stat == DEAD)
|
||||
return
|
||||
command_announcement.Announce("We have traced the intrude#, it seem& t( e yo3r AI s7stem, it &# *#ck@ng th$ sel$ destru$t mechani&m, stop i# bef*@!)$#&&@@ <CONNECTION LOST>", "Network Monitoring")
|
||||
command_announcement.Announce("Error: Network firewall breached. Network integrity compromised.", "Network Monitoring")
|
||||
else
|
||||
command_announcement.Announce("We have detected a strong brute-force attack on your firewall which seems to be originating from your AI system. It already controls almost the whole network, and the only thing that's preventing it from accessing the self-destruct is this firewall. You don't have much time before it succeeds.", "Network Monitoring")
|
||||
command_announcement.Announce("Error: Ongoing hacking attempt. Automatic countermeasures ineffective. Network firewall breached. Network integrity compromised. External network connections disabled.", "Network Monitoring")
|
||||
user << "## BEGINNING SYSTEM OVERRIDE."
|
||||
user << "## ESTIMATED DURATION: [round((duration+300)/600)] MINUTES"
|
||||
user.hacking = 1
|
||||
|
||||
@@ -901,7 +901,7 @@ About the new airlock wires panel:
|
||||
|
||||
|
||||
/obj/machinery/door/airlock/proc/CanChainsaw(var/obj/item/weapon/material/twohanded/chainsaw/ChainSawVar)
|
||||
return (ChainSawVar.powered && density)
|
||||
return (ChainSawVar.powered && density && hashatch)
|
||||
|
||||
/obj/machinery/door/airlock/attackby(C as obj, mob/user as mob)
|
||||
if(!istype(usr, /mob/living/silicon))
|
||||
|
||||
@@ -104,5 +104,10 @@
|
||||
name = "empty basket"
|
||||
icon_state = "chipbasket_empty"
|
||||
|
||||
/obj/item/trash/uselessplastic
|
||||
name = "useless plastic"
|
||||
icon_state = "useless_plastic"
|
||||
|
||||
|
||||
/obj/item/trash/attack(mob/M as mob, mob/living/user as mob)
|
||||
return
|
||||
|
||||
@@ -308,16 +308,16 @@
|
||||
qdel(src)
|
||||
|
||||
// Chainsaws!
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw
|
||||
name = "chainsaw"
|
||||
desc = "A robust tree-cutting chainsaw intended to cut down various types of invasive spaceplants that grow on the station."
|
||||
icon_state = "chainsaw_off"
|
||||
base_icon = "chainsaw_off"
|
||||
flags = CONDUCT
|
||||
force = 10
|
||||
force_wielded = 20
|
||||
throwforce = 7
|
||||
w_class = 4
|
||||
throwforce = 5
|
||||
w_class = ITEMSIZE_LARGE
|
||||
sharp = 1
|
||||
edge = 1
|
||||
origin_tech = list(TECH_COMBAT = 5)
|
||||
@@ -327,6 +327,7 @@
|
||||
applies_material_colour = 0
|
||||
default_material = "steel"
|
||||
parry_chance = 5
|
||||
var/fuel_type = "fuel"
|
||||
var/opendelay = 30 // How long it takes to perform a door opening action with this chainsaw, in seconds.
|
||||
var/max_fuel = 300 // The maximum amount of fuel the chainsaw stores.
|
||||
var/fuel_cost = 1 // Multiplier for fuel cost.
|
||||
@@ -334,16 +335,26 @@
|
||||
var/cutting = 0 //Ignore
|
||||
var/powered = 0 //Ignore
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/op //For events or whatever
|
||||
name = "bloody chainsaw"
|
||||
opendelay = 5
|
||||
max_fuel = 1000
|
||||
fuel_cost = 0.5
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/Initialize()
|
||||
. = ..()
|
||||
create_reagents(max_fuel)
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/fueled/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent(fuel_type, max_fuel)
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/op //For events or whatever
|
||||
opendelay = 5
|
||||
max_fuel = 1000
|
||||
fuel_cost = 0.5
|
||||
unbreakable = TRUE
|
||||
parry_chance = 100 //Gotta punish those validhunters
|
||||
default_material = "plasteel"
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/op/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent(fuel_type, max_fuel)
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/proc/PowerUp()
|
||||
var/turf/T = get_turf(src)
|
||||
T.audible_message(span("notice", "\The [src] rumbles to life."))
|
||||
@@ -372,26 +383,36 @@
|
||||
powered = 0
|
||||
update_held_icon()
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/shatter(var/consumed)
|
||||
var/turf/T = get_turf(src)
|
||||
new /obj/effect/decal/cleanable/blood/oil(T)
|
||||
new /obj/effect/decal/cleanable/liquid_fuel(T)
|
||||
new /obj/item/trash/uselessplastic(T)
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/Destroy()
|
||||
STOP_PROCESSING(SSfast_process, src)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/proc/RemoveFuel(var/amount = 1)
|
||||
amount = amount * fuel_cost
|
||||
reagents.remove_reagent("fuel", Clamp(amount,0,reagents.get_reagent_amount("fuel")))
|
||||
if(reagents.get_reagent_amount("fuel") <= 0)
|
||||
powered = 0
|
||||
if(reagents && istype(reagents))
|
||||
amount *= fuel_cost
|
||||
reagents.remove_reagent(fuel_type, Clamp(amount,0,reagents.get_reagent_amount(fuel_type)))
|
||||
if(reagents.get_reagent_amount(fuel_type) <= 0)
|
||||
PowerDown()
|
||||
else
|
||||
PowerDown()
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/process()
|
||||
//TickRate is 0.1
|
||||
var/FuelToRemove = 0.1 //0.1 Every 0.1 seconds
|
||||
|
||||
if(cutting)
|
||||
FuelToRemove = 1
|
||||
playsound(loc, 'sound/weapons/chainsawloop2.ogg', 25, 0, 30)
|
||||
spark(src, 3, alldirs)
|
||||
eyecheck(loc)
|
||||
if(prob(75))
|
||||
spark(src, 3, alldirs)
|
||||
if(prob(25))
|
||||
eyecheck(2,loc)
|
||||
else
|
||||
playsound(loc, 'sound/weapons/chainsawloop.ogg', 25, 0, 30)
|
||||
|
||||
@@ -399,7 +420,13 @@
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/examine(mob/user)
|
||||
if(..(user, 1))
|
||||
user << "A heavy-duty chainsaw meant for cutting wood. Contains [round(reagents.total_volume)] unit\s of fuel."
|
||||
user << "A heavy-duty chainsaw meant for cutting wood. Contains [round(reagents.get_reagent_amount(fuel_type))] unit\s of fuel."
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/attack(mob/M as mob, mob/living/user as mob)
|
||||
. = ..()
|
||||
if(powered)
|
||||
playsound(loc, "sound/weapons/chainsword.ogg", 25, 0, 30)
|
||||
RemoveFuel(3)
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/afterattack(obj/O as obj, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
@@ -409,51 +436,32 @@
|
||||
playsound(loc, 'sound/effects/refill.ogg', 50, 1, -6)
|
||||
return
|
||||
else if(powered)
|
||||
playsound(loc, "sound/weapons/chainsword.ogg", 25, 0, 30)
|
||||
RemoveFuel(3)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) //No sound spam
|
||||
if(!istype(O))
|
||||
user.visible_message(\
|
||||
"<span class='warning'>[user] revs the chainsaw!.</span>",\
|
||||
"<span class='warning'>You rev the chainsaw!.</span>",\
|
||||
"<span class='warning'>You hear a machine rev.</span>"\
|
||||
)
|
||||
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
playsound(loc, "sound/weapons/chainsword.ogg", 25, 0, 30)
|
||||
RemoveFuel(3)
|
||||
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/proc/eyecheck(mob/living/carbon/human/H as mob) //Shamefully copied from the welder. Damage values multiplied by 0.1
|
||||
/obj/item/weapon/material/twohanded/chainsaw/proc/eyecheck(var/multiplier, mob/living/carbon/human/H as mob) //Shamefully copied from the welder. Damage values multiplied by 0.1
|
||||
|
||||
if (!istype(H))
|
||||
return 1
|
||||
if (!istype(H) || H.status_flags & GODMODE)
|
||||
return
|
||||
|
||||
var/obj/item/organ/eyes/E = H.get_eyes()
|
||||
if(!E)
|
||||
if(!istype(E))
|
||||
return
|
||||
var/safety = H.eyecheck()
|
||||
if(H.status_flags & GODMODE)
|
||||
return
|
||||
switch(safety)
|
||||
if(FLASH_PROTECTION_MODERATE)
|
||||
H << "<span class='warning'>Your eyes sting a little.</span>"
|
||||
E.damage += rand(1, 2)*0.1
|
||||
if(E.damage > 12)
|
||||
H.eye_blurry += rand(3,6)*0.1
|
||||
if(FLASH_PROTECTION_NONE)
|
||||
H << "<span class='warning'>Your eyes burn.</span>"
|
||||
E.damage += rand(2, 4)*0.1
|
||||
if(E.damage > 10)
|
||||
E.damage += rand(4,10)*0.1
|
||||
if(FLASH_PROTECTION_REDUCED)
|
||||
H << "<span class='danger'>Your equipment intensify the welder's glow. Your eyes itch and burn severely.</span>"
|
||||
H.eye_blurry += rand(12,20)*0.1
|
||||
E.damage += rand(12, 16)*0.1
|
||||
if(safety<FLASH_PROTECTION_MAJOR)
|
||||
if(E.damage > 10)
|
||||
H << "<span class='warning'>Your eyes are really starting to hurt. This can't be good for you!</span>"
|
||||
|
||||
if (E.damage >= E.min_broken_damage)
|
||||
H << "<span class='danger'>You go blind!</span>"
|
||||
H.sdisabilities |= BLIND
|
||||
else if (E.damage >= E.min_bruised_damage)
|
||||
H << "<span class='danger'>You go blind!</span>"
|
||||
H.eye_blind = 5
|
||||
H.eye_blurry = 5
|
||||
H.disabilities |= NEARSIGHTED
|
||||
addtimer(CALLBACK(H, /mob/.proc/reset_nearsighted), 100)
|
||||
var/eye_damage = max(0, (2 - H.eyecheck())*multiplier )
|
||||
E.damage += eye_damage
|
||||
if(eye_damage > 0)
|
||||
H << "<span class='danger'>Some stray sparks fly in your eyes!</span>"
|
||||
|
||||
/obj/item/weapon/material/twohanded/chainsaw/AltClick(mob/user as mob)
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ var/global/list/ticket_panels = list()
|
||||
discord_bot.send_to_admins("[key_name(owner_client)]'s request for help has been taken by [key_name(assigned_admin)].")
|
||||
owner_client.adminhelped = ADMINHELPED
|
||||
|
||||
message_admins("<span class='notice'><b>[key_name(assigned_admin)]</b> has assigned themself to <b>[src.owner]'s</b> ticket.</span>")
|
||||
message_admins("<span class='danger'><b>[key_name(assigned_admin)]</b> has assigned themself to <b>[src.owner]'s</b> ticket.</span>")
|
||||
to_chat(client_by_ckey(src.owner), "<span class='notice'><b>[assigned_admin] has added themself to your ticket and should respond shortly. Thanks for your patience!</b></span>")
|
||||
|
||||
update_ticket_panels()
|
||||
@@ -106,10 +106,12 @@ proc/get_open_ticket_by_ckey(var/owner)
|
||||
|
||||
var/list/dat = list()
|
||||
|
||||
var/valid_holder = check_rights(R_MOD|R_ADMIN, FALSE, ticket_panel_window.user)
|
||||
|
||||
var/list/ticket_dat = list()
|
||||
for(var/id = tickets.len, id >= 1, id--)
|
||||
var/datum/ticket/ticket = tickets[id]
|
||||
if(C.holder || ticket.owner == C.ckey)
|
||||
if(valid_holder || ticket.owner == C.ckey)
|
||||
var/client/owner_client = client_by_ckey(ticket.owner)
|
||||
var/status = "Unknown status"
|
||||
var/color = "#6aa84f"
|
||||
@@ -128,11 +130,11 @@ proc/get_open_ticket_by_ckey(var/owner)
|
||||
ticket_dat += "Ticket #[id] - [ticket.owner] [owner_client ? "" : "(DC)"] - [status]<br /><a href='byond://?src=\ref[src];action=view;ticket=\ref[ticket]'>VIEW</a>"
|
||||
if(ticket.status)
|
||||
ticket_dat += " - <a href='byond://?src=\ref[src];action=pm;ticket=\ref[ticket]'>PM</a>"
|
||||
if(C.holder)
|
||||
if(valid_holder)
|
||||
ticket_dat += " - <a href='byond://?src=\ref[src];action=take;ticket=\ref[ticket]'>[(ticket.status == TICKET_OPEN) ? "TAKE" : "JOIN"]</a>"
|
||||
if(ticket.status != TICKET_CLOSED && (C.holder || ticket.status == TICKET_OPEN))
|
||||
if(ticket.status != TICKET_CLOSED && (valid_holder || ticket.status == TICKET_OPEN))
|
||||
ticket_dat += " - <a href='byond://?src=\ref[src];action=close;ticket=\ref[ticket]'>CLOSE</a>"
|
||||
if(C.holder)
|
||||
if(valid_holder)
|
||||
var/ref_mob = ""
|
||||
if(owner_client)
|
||||
ref_mob = "\ref[owner_client.mob]"
|
||||
@@ -188,7 +190,7 @@ proc/get_open_ticket_by_ckey(var/owner)
|
||||
if("close")
|
||||
ticket.close(usr.client)
|
||||
if("pm")
|
||||
if(usr.client.holder && ticket.owner != usr.ckey)
|
||||
if(check_rights(R_MOD|R_ADMIN) && ticket.owner != usr.ckey)
|
||||
usr.client.cmd_admin_pm(client_by_ckey(ticket.owner), ticket = ticket)
|
||||
else if(ticket.status == TICKET_ASSIGNED)
|
||||
// manually check that the target client exists here as to not spam the usr for each logged out admin on the ticket
|
||||
@@ -222,4 +224,4 @@ proc/get_open_ticket_by_ckey(var/owner)
|
||||
C.view_tickets()
|
||||
else
|
||||
ticket_panel.ticket_panel_window.set_content(ticket_panel.get_dat())
|
||||
ticket_panel.ticket_panel_window.update()
|
||||
ticket_panel.ticket_panel_window.update()
|
||||
|
||||
@@ -448,9 +448,10 @@ BLIND // can't see anything
|
||||
..()
|
||||
update_wearer()
|
||||
|
||||
/obj/item/clothing/gloves/on_slotmove()
|
||||
..()
|
||||
update_wearer()
|
||||
/obj/item/clothing/gloves/mob_can_unequip()
|
||||
. = ..()
|
||||
if (.)
|
||||
update_wearer()
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//Head
|
||||
|
||||
@@ -80,9 +80,10 @@
|
||||
..()
|
||||
update_wearer()
|
||||
|
||||
/obj/item/clothing/shoes/magboots/on_slotmove()
|
||||
..()
|
||||
update_wearer()
|
||||
/obj/item/clothing/shoes/magboots/mob_can_unequip()
|
||||
. = ..()
|
||||
if (.)
|
||||
update_wearer()
|
||||
|
||||
/obj/item/clothing/shoes/magboots/examine(mob/user)
|
||||
..(user)
|
||||
|
||||
@@ -103,6 +103,7 @@
|
||||
icon_closed = "jensencoat"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight)
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/armor/hos/jensen/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -697,6 +697,7 @@ var/list/name_to_material
|
||||
melting_point = T0C+300
|
||||
protectiveness = 1 // 4%
|
||||
flags = MATERIAL_PADDING
|
||||
hardness = 1
|
||||
|
||||
/material/cult
|
||||
name = "cult"
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
icon_state = "folder_white"
|
||||
|
||||
/obj/item/weapon/folder/purple
|
||||
desc = "A gold and blue folder, specifically designed for the Research Division facilities of the company."
|
||||
desc = "A purple folder, specifically designed for the Research Division facilities of the company."
|
||||
icon_state = "folder_purple"
|
||||
|
||||
/obj/item/weapon/folder/update_icon()
|
||||
|
||||
@@ -608,6 +608,7 @@
|
||||
icon_state = "offhand"
|
||||
item_state = "nothing"
|
||||
name = "offhand"
|
||||
needspin = FALSE
|
||||
|
||||
unwield()
|
||||
if (ismob(loc))
|
||||
|
||||
@@ -93,17 +93,10 @@
|
||||
affect_ingest(M, alien, removed)
|
||||
|
||||
/datum/reagent/nutriment/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
|
||||
switch(alien)
|
||||
if(IS_VAURCA)
|
||||
M.adjustToxLoss(1.5 * removed)
|
||||
return
|
||||
if(IS_UNATHI)
|
||||
return
|
||||
else
|
||||
digest(M,removed)
|
||||
|
||||
..()
|
||||
if(alien == IS_VAURCA)
|
||||
M.adjustToxLoss(1.5 * removed)
|
||||
else if(alien != IS_UNATHI)
|
||||
digest(M,removed)
|
||||
|
||||
/datum/reagent/nutriment/proc/digest(var/mob/living/carbon/M, var/removed)
|
||||
M.heal_organ_damage(regen_factor * removed, 0)
|
||||
|
||||
@@ -542,7 +542,7 @@
|
||||
name = "Cardox"
|
||||
id = "cardox"
|
||||
result = "cardox"
|
||||
required_reagents = list("platinum" = 1, "carbon" = 1, "sterilzine" = 1)
|
||||
required_reagents = list("platinum" = 1, "carbon" = 1, "sterilizine" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/cardox_removal
|
||||
|
||||
@@ -364,6 +364,8 @@
|
||||
return
|
||||
if(istype(AM, /obj/effect))
|
||||
return
|
||||
if(isprojectile(AM))
|
||||
return
|
||||
if(istype(AM, /mob/living))
|
||||
AM.visible_message("<span class=\"warning\">\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.</span>",\
|
||||
"<span class=\"danger\">You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"</span>",\
|
||||
|
||||
@@ -56,6 +56,13 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">13 March 2018</h2>
|
||||
<h3 class="author">BurgerBB updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed various chainsaw bugs.</li>
|
||||
<li class="rscadd">Added Chainsaws to traitor uplink.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">10 March 2018</h2>
|
||||
<h3 class="author">Alberyk updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
@@ -116,6 +123,10 @@
|
||||
<li class="rscadd">Druid and Cleric wizards can now take their victims for granite.</li>
|
||||
<li class="rscadd">Added a number of new cocktails made with unathi booze. Many have custom sprites, and one of them is slightly dangerous to non-unathi.</li>
|
||||
</ul>
|
||||
<h3 class="author">Lohikar updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">ZAS Knockdown now has a distance cap. (Fixes 'space wind')</li>
|
||||
</ul>
|
||||
<h3 class="author">LordFowl updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Batons will now deal both brute and shock damage.</li>
|
||||
|
||||
@@ -5218,6 +5218,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- rscadd: Druid and Cleric wizards can now take their victims for granite.
|
||||
- rscadd: Added a number of new cocktails made with unathi booze. Many have custom
|
||||
sprites, and one of them is slightly dangerous to non-unathi.
|
||||
Lohikar:
|
||||
- bugfix: ZAS Knockdown now has a distance cap. (Fixes 'space wind')
|
||||
LordFowl:
|
||||
- tweak: Batons will now deal both brute and shock damage.
|
||||
- tweak: Electricity system modified to be more realistic in its arcing and damage,
|
||||
@@ -5232,3 +5234,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
kevinz000:
|
||||
- rscadd: Projectiles have recieved a major overhaul into pixel projectiles processed
|
||||
by subsystem a la TG.
|
||||
2018-03-13:
|
||||
BurgerBB:
|
||||
- bugfix: Fixed various chainsaw bugs.
|
||||
- rscadd: Added Chainsaws to traitor uplink.
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 141 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
+20028
-26174
File diff suppressed because it is too large
Load Diff
@@ -19093,6 +19093,11 @@
|
||||
d2 = 4;
|
||||
icon_state = "2-4"
|
||||
},
|
||||
/obj/structure/cable/green{
|
||||
d1 = 1;
|
||||
d2 = 2;
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/turf/simulated/floor/tiled/white,
|
||||
/area/medical/patient_wing)
|
||||
"HM" = (
|
||||
|
||||
+17469
-17435
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -49776,7 +49776,7 @@ bU
|
||||
bU
|
||||
bU
|
||||
aw
|
||||
aa
|
||||
aw
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
@@ -50033,7 +50033,7 @@ bU
|
||||
bU
|
||||
bU
|
||||
aw
|
||||
aa
|
||||
aw
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
@@ -50290,7 +50290,7 @@ bU
|
||||
bU
|
||||
bU
|
||||
aw
|
||||
aa
|
||||
aw
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
@@ -50803,7 +50803,7 @@ bU
|
||||
bU
|
||||
bU
|
||||
bU
|
||||
aw
|
||||
bU
|
||||
aw
|
||||
aw
|
||||
aa
|
||||
@@ -51061,7 +51061,7 @@ bU
|
||||
bU
|
||||
bU
|
||||
bU
|
||||
bU
|
||||
aw
|
||||
aw
|
||||
aa
|
||||
aa
|
||||
@@ -52089,7 +52089,7 @@ bU
|
||||
bU
|
||||
bU
|
||||
bU
|
||||
aw
|
||||
bU
|
||||
aw
|
||||
aa
|
||||
nx
|
||||
@@ -52346,7 +52346,7 @@ bU
|
||||
bU
|
||||
bU
|
||||
bU
|
||||
aw
|
||||
bU
|
||||
aw
|
||||
aa
|
||||
nx
|
||||
@@ -52860,7 +52860,7 @@ bU
|
||||
bU
|
||||
bU
|
||||
bU
|
||||
aw
|
||||
bU
|
||||
aw
|
||||
aa
|
||||
nx
|
||||
@@ -53117,7 +53117,7 @@ bU
|
||||
bU
|
||||
bU
|
||||
bU
|
||||
aw
|
||||
bU
|
||||
aw
|
||||
aa
|
||||
aa
|
||||
@@ -54145,7 +54145,7 @@ bU
|
||||
bU
|
||||
bU
|
||||
bU
|
||||
bU
|
||||
aw
|
||||
aw
|
||||
aa
|
||||
aa
|
||||
@@ -54658,7 +54658,7 @@ bU
|
||||
bU
|
||||
bU
|
||||
bU
|
||||
bU
|
||||
aw
|
||||
aw
|
||||
aa
|
||||
aa
|
||||
@@ -55173,7 +55173,7 @@ bU
|
||||
bU
|
||||
bU
|
||||
aw
|
||||
aa
|
||||
aw
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
@@ -55430,7 +55430,7 @@ bU
|
||||
bU
|
||||
bU
|
||||
aw
|
||||
aa
|
||||
aw
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
|
||||
Reference in New Issue
Block a user