mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 11:37:40 +01:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -118,7 +118,7 @@ var/global/datum/controller/gameticker/ticker
|
||||
|
||||
spawn(0)
|
||||
while(1)
|
||||
sleep(5000+rand(6000,9000))
|
||||
sleep(5000+rand(6000,10000))
|
||||
SpawnEvent()
|
||||
|
||||
//Start master_controller.process()
|
||||
|
||||
@@ -562,7 +562,11 @@
|
||||
process_bot()
|
||||
if(2)
|
||||
process_bot()
|
||||
spawn(4)
|
||||
spawn(2)
|
||||
process_bot()
|
||||
sleep(2)
|
||||
process_bot()
|
||||
sleep(2)
|
||||
process_bot()
|
||||
if(3)
|
||||
process_bot()
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
They receive their message from a server after the message has been logged.
|
||||
*/
|
||||
|
||||
var
|
||||
list/recentmessages = list() // global list of recent messages broadcasted : used to circumvent massive radio spam
|
||||
|
||||
/obj/machinery/telecomms/broadcaster
|
||||
name = "Subspace Broadcaster"
|
||||
@@ -24,6 +26,11 @@
|
||||
|
||||
if(signal.data["message"])
|
||||
|
||||
// Kind of lame way to prevent MASSIVE RADIO SPAM but it works
|
||||
if("[signal.data["message"]]:[signal.data["realname"]]" in recentmessages)
|
||||
return
|
||||
recentmessages.Add( "[signal.data["message"]]:[signal.data["realname"]]" )
|
||||
|
||||
signal.data["done"] = 1 // mark the signal as being broadcasted
|
||||
|
||||
// Search for the original signal and mark it as done as well
|
||||
@@ -44,6 +51,9 @@
|
||||
/* --- Do a snazzy animation! --- */
|
||||
flick("broadcaster_send", src)
|
||||
|
||||
spawn(1)
|
||||
recentmessages = list()
|
||||
|
||||
|
||||
/*
|
||||
Basically just an empty shell for receiving and broadcasting radio messages. Not
|
||||
@@ -69,50 +79,48 @@
|
||||
if(!on) // has to be on to receive messages
|
||||
return
|
||||
|
||||
if(signal.transmission_method == 2)
|
||||
if(is_freq_listening(signal)) // detect subspace signals
|
||||
|
||||
if(is_freq_listening(signal)) // detect subspace signals
|
||||
signal.data["done"] = 1 // mark the signal as being broadcasted
|
||||
signal.data["compression"] = 0
|
||||
|
||||
signal.data["done"] = 1 // mark the signal as being broadcasted
|
||||
signal.data["compression"] = 0
|
||||
// Search for the original signal and mark it as done as well
|
||||
var/datum/signal/original = signal.data["original"]
|
||||
if(original)
|
||||
original.data["done"] = 1
|
||||
|
||||
// Search for the original signal and mark it as done as well
|
||||
var/datum/signal/original = signal.data["original"]
|
||||
if(original)
|
||||
original.data["done"] = 1
|
||||
if(signal.data["slow"] > 0)
|
||||
sleep(signal.data["slow"]) // simulate the network lag if necessary
|
||||
|
||||
if(signal.data["slow"] > 0)
|
||||
sleep(signal.data["slow"]) // simulate the network lag if necessary
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
var/datum/radio_frequency/connection = signal.data["connection"]
|
||||
|
||||
var/datum/radio_frequency/connection = signal.data["connection"]
|
||||
|
||||
if(connection.frequency == NUKE_FREQ && syndi) // if syndicate broadcast, just
|
||||
if(connection.frequency == NUKE_FREQ && syndi) // if syndicate broadcast, just
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"],, signal.data["compression"])
|
||||
else if(connection.frequency == 1439 && !syndi)
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"],, signal.data["compression"])
|
||||
else if (intercept)
|
||||
if(syndi)
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"],, signal.data["compression"])
|
||||
else if(connection.frequency == 1439 && !syndi)
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"], 3, signal.data["compression"])
|
||||
else
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"],, signal.data["compression"])
|
||||
else if (intercept)
|
||||
if(syndi)
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"], 3, signal.data["compression"])
|
||||
else
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"], 4, signal.data["compression"])
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"], 4, signal.data["compression"])
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@
|
||||
if(do_after_cooldown(target))
|
||||
if(disabled) return
|
||||
chassis.spark_system.start()
|
||||
target:ReplaceWithFloor()
|
||||
target:ReplaceWithPlating()
|
||||
playsound(target, 'Deconstruct.ogg', 50, 1)
|
||||
chassis.give_power(energy_drain)
|
||||
else if (istype(target, /turf/simulated/floor))
|
||||
@@ -219,7 +219,7 @@
|
||||
set_ready_state(0)
|
||||
if(do_after_cooldown(target))
|
||||
if(disabled) return
|
||||
target:ReplaceWithFloor()
|
||||
target:ReplaceWithPlating()
|
||||
playsound(target, 'Deconstruct.ogg', 50, 1)
|
||||
chassis.spark_system.start()
|
||||
chassis.use_power(energy_drain*2)
|
||||
|
||||
@@ -232,7 +232,7 @@
|
||||
if(!cell.use(30)) return
|
||||
user << "Building Floor..."
|
||||
activate()
|
||||
A:ReplaceWithFloor()
|
||||
A:ReplaceWithPlating()
|
||||
return
|
||||
|
||||
if(istype(A, /turf/simulated/floor))
|
||||
@@ -263,7 +263,7 @@
|
||||
playsound(src.loc, 'click.ogg', 50, 1)
|
||||
if(do_after(user, 40))
|
||||
activate()
|
||||
A:ReplaceWithFloor()
|
||||
A:ReplaceWithPlating()
|
||||
return
|
||||
|
||||
if(istype(A, /turf/simulated/wall/r_wall))
|
||||
|
||||
@@ -24,10 +24,11 @@ RCD
|
||||
working = 0
|
||||
mode = 1
|
||||
disabled = 0
|
||||
max_matter = 30
|
||||
|
||||
|
||||
New()
|
||||
desc = "A RCD. It currently holds [matter]/30 matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
src.spark_system = new /datum/effect/effect/system/spark_spread
|
||||
spark_system.set_up(5, 0, src)
|
||||
spark_system.attach(src)
|
||||
@@ -37,14 +38,15 @@ RCD
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/rcd_ammo))
|
||||
if((matter + 10) > 30)
|
||||
var/obj/item/weapon/rcd_ammo/R = W
|
||||
if((matter + R.ammo) > max_matter)
|
||||
user << "The RCD cant hold any more matter."
|
||||
return
|
||||
matter += R.ammo
|
||||
del(W)
|
||||
matter += 10
|
||||
playsound(src.loc, 'click.ogg', 50, 1)
|
||||
user << "The RCD now holds [matter]/30 matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/30 matter-units."
|
||||
user << "The RCD now holds [matter]/[max_matter] matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
return
|
||||
|
||||
|
||||
@@ -79,10 +81,10 @@ RCD
|
||||
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
||||
spark_system.set_up(5, 0, src)
|
||||
src.spark_system.start()
|
||||
A:ReplaceWithFloor()
|
||||
A:ReplaceWithPlating()
|
||||
matter--
|
||||
user << "The RCD now holds [matter]/30 matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/30 matter-units."
|
||||
user << "The RCD now holds [matter]/[max_matter] matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
return
|
||||
if(istype(A, /turf/simulated/floor) && matter >= 3)
|
||||
user << "Building Wall (3)..."
|
||||
@@ -94,8 +96,8 @@ RCD
|
||||
A:ReplaceWithWall()
|
||||
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
||||
matter -= 3
|
||||
user << "The RCD now holds [matter]/30 matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/30 matter-units."
|
||||
user << "The RCD now holds [matter]/[max_matter] matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
return
|
||||
else if(istype(A, /turf/simulated/floor) && mode == 2 && matter >= 10)
|
||||
user << "Building Airlock (10)..."
|
||||
@@ -113,8 +115,8 @@ RCD
|
||||
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
||||
playsound(src.loc, 'sparks2.ogg', 50, 1)
|
||||
matter -= 10
|
||||
user << "The RCD now holds [matter]/30 matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/30 matter-units."
|
||||
user << "The RCD now holds [matter]/[max_matter] matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
return
|
||||
else if(mode == 3 && (istype(A, /turf) || istype(A, /obj/machinery/door/airlock) ) )
|
||||
if(istype(A, /turf/simulated/wall) && matter >= 4)
|
||||
@@ -124,11 +126,11 @@ RCD
|
||||
if(!disabled && matter >= 4)
|
||||
spark_system.set_up(5, 0, src)
|
||||
src.spark_system.start()
|
||||
A:ReplaceWithFloor()
|
||||
A:ReplaceWithPlating()
|
||||
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
||||
matter -= 4
|
||||
user << "The RCD now holds [matter]/30 matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/30 matter-units."
|
||||
user << "The RCD now holds [matter]/[max_matter] matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
return
|
||||
if(istype(A, /turf/simulated/wall/r_wall))
|
||||
return
|
||||
@@ -142,8 +144,8 @@ RCD
|
||||
A:ReplaceWithSpace()
|
||||
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
||||
matter -= 5
|
||||
user << "The RCD now holds [matter]/30 matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/30 matter-units."
|
||||
user << "The RCD now holds [matter]/[max_matter] matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
return
|
||||
if(istype(A, /obj/machinery/door/airlock) && matter >= 10)
|
||||
user << "Deconstructing Airlock (10)..."
|
||||
@@ -155,6 +157,13 @@ RCD
|
||||
del(A)
|
||||
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
||||
matter -= 10
|
||||
user << "The RCD now holds [matter]/30 matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/30 matter-units."
|
||||
user << "The RCD now holds [matter]/[max_matter] matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
return
|
||||
/obj/item/weapon/rcd/industrial
|
||||
name = "industrial rapid construction device"
|
||||
max_matter = 60
|
||||
|
||||
New()
|
||||
matter = max_matter
|
||||
return ..()
|
||||
|
||||
@@ -77,6 +77,14 @@
|
||||
new /obj/item/weapon/wirecutters(src)
|
||||
new /obj/item/weapon/cable_coil(src,30,pick("red","yellow"))
|
||||
|
||||
/obj/item/weapon/storage/belt/security/full/New()
|
||||
..()
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/weapon/pepperspray(src)
|
||||
new /obj/item/weapon/flashbang(src)
|
||||
new /obj/item/weapon/handcuffs(src)
|
||||
new /obj/item/weapon/handcuffs(src)
|
||||
new /obj/item/weapon/handcuffs(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/medical
|
||||
|
||||
@@ -272,6 +272,19 @@
|
||||
new /obj/item/weapon/tank/emergency_oxygen/anesthetic( src )
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/box/ert/New()
|
||||
..()
|
||||
contents = list()
|
||||
sleep(1)
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/ert/cryo( src )
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/ert/cryo( src )
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/ert/cryo( src )
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/ert/quikheal( src )
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/ert/quikheal( src )
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/ert/boost( src )
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/ert/boost( src )
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/box/syndicate/New()
|
||||
..()
|
||||
switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "freedom" = 1)))
|
||||
|
||||
@@ -98,7 +98,7 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
/obj/structure/table/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
if(istype(mover) && (mover.checkpass(PASSTABLE) || mover.checkpass(TABLEPASS))) //WTF do things hit tables like that? Jeez.
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
+26
-10
@@ -27,8 +27,9 @@ client/verb/JoinResponseTeam()
|
||||
new_commando.mind.key = usr.key
|
||||
new_commando.key = usr.key
|
||||
|
||||
new_commando << "\blue You are [!leader_selected?" a member":" the <B>LEADER</B>"] of an armed response team in CentComm's service. Something went down on [station_name()] and they're now on code red. Go in there and fix the problem."
|
||||
new_commando << "\blue You are [!leader_selected?"a member":"the <B>LEADER</B>"] of an armed response team in CentComm's service. Something went down on [station_name()] and they're now on code red. Go in there and fix the problem."
|
||||
new_commando << "<b>You should first gear up and discuss a plan with your team. More members may be joining, don't move out before you're ready."
|
||||
del(L)
|
||||
|
||||
else
|
||||
usr << "You need to be an observer or new player to use this."
|
||||
@@ -73,9 +74,23 @@ proc/trigger_armed_response_team()
|
||||
|
||||
send_emergency_team = 1
|
||||
|
||||
var/area/security/nuke_storage/nukeloc = locate()//To find the nuke in the vault
|
||||
var/obj/machinery/nuclearbomb/nuke = locate() in nukeloc
|
||||
if(!nuke)
|
||||
nuke = locate() in world
|
||||
var/obj/item/weapon/paper/P = new
|
||||
P.info = "Your orders, Commander, are to use all necessary tools given to return the station to a survivable condition. <br> To this end, you have been provided with the best tools we can give in the three areas of Medical Engineering and Security. The nuclear authorization code is: <b>[nuke.r_code]</b>. Be warned, if you detonate this without good reason, we will hold you to account for damages. Memorise this code, and then burn this message."
|
||||
P.name = "Emergency Nuclear Code, and ERT Orders"
|
||||
for (var/obj/effect/landmark/A in world)
|
||||
if (A.name == "nukecode")
|
||||
P.loc = A.loc
|
||||
del(A)
|
||||
continue
|
||||
|
||||
/client/proc/create_response_team(obj/spawn_location, leader_selected = 0, commando_name)
|
||||
|
||||
var/mob/living/carbon/human/M = new(spawn_location.loc)
|
||||
var/mob/living/carbon/human/M = new(null)
|
||||
response_team_members |= M
|
||||
|
||||
var/new_facial = input("Please select facial hair color.", "Character Generation") as color
|
||||
if(new_facial)
|
||||
@@ -97,9 +112,10 @@ proc/trigger_armed_response_team()
|
||||
|
||||
var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text
|
||||
|
||||
if (new_tone)
|
||||
M.s_tone = max(min(round(text2num(new_tone)), 220), 1)
|
||||
M.s_tone = -M.s_tone + 35
|
||||
if (!new_tone)
|
||||
new_tone = 35
|
||||
M.s_tone = max(min(round(text2num(new_tone)), 220), 1)
|
||||
M.s_tone = -M.s_tone + 35
|
||||
|
||||
// hair
|
||||
var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
|
||||
@@ -157,6 +173,7 @@ proc/trigger_armed_response_team()
|
||||
M.update_clothing()
|
||||
|
||||
M.real_name = commando_name
|
||||
M.name = commando_name
|
||||
M.age = !leader_selected ? rand(23,35) : rand(35,45)
|
||||
|
||||
M.dna.ready_dna(M)//Creates DNA.
|
||||
@@ -169,6 +186,7 @@ proc/trigger_armed_response_team()
|
||||
M.mind.special_role = "Response Team"
|
||||
if(!(M.mind in ticker.minds))
|
||||
ticker.minds += M.mind//Adds them to regular mind list.
|
||||
M.loc = spawn_location.loc
|
||||
M.equip_strike_team(leader_selected)
|
||||
del(spawn_location)
|
||||
return M
|
||||
@@ -180,8 +198,7 @@ proc/trigger_armed_response_team()
|
||||
R.name = "CentCom Response Team headset"
|
||||
R.desc = "The headset of the boss's boss. Channels are as follows: :h - Response Team :c - command, :s - security, :e - engineering, :d - mining, :q - cargo, :m - medical, :n - science."
|
||||
R.freerange = 1
|
||||
R.listening = 0
|
||||
R.config(list("Response Team" = 1, "Science" = 0, "Command" = 0, "Medical" = 0, "Engineering" = 0, "Security" = 0, "Mining" = 0, "Cargo" = 0,))
|
||||
R.config(list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Mining" = 1, "Cargo" = 1,))
|
||||
equip_if_possible(R, slot_ears)
|
||||
|
||||
//Adding Camera Network
|
||||
@@ -199,9 +216,7 @@ proc/trigger_armed_response_team()
|
||||
equip_if_possible(new /obj/item/clothing/glasses/sunglasses/sechud(src), slot_glasses)
|
||||
|
||||
//Shoes & gloves
|
||||
var/obj/item/clothing/shoes/swat/S = new /obj/item/clothing/shoes/swat(src)
|
||||
S.flags = NOSLIP
|
||||
equip_if_possible(S, slot_shoes)
|
||||
equip_if_possible(new /obj/item/clothing/shoes/swat(src), slot_shoes)
|
||||
equip_if_possible(new /obj/item/clothing/gloves/swat(src), slot_gloves)
|
||||
|
||||
//Removed
|
||||
@@ -219,6 +234,7 @@ proc/trigger_armed_response_team()
|
||||
W.icon_state = "centcom"
|
||||
if(leader_selected)
|
||||
W.access = get_access("Captain")
|
||||
W.access += list(access_cent_teleporter)
|
||||
else
|
||||
W.access = get_access("Head of Personnel")
|
||||
W.access += list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)//Let's add their alloted CentCom access.
|
||||
|
||||
Reference in New Issue
Block a user