mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 02:34:00 +00:00
Merge master into dev.
This commit is contained in:
@@ -43,7 +43,7 @@
|
|||||||
return level in config.station_levels
|
return level in config.station_levels
|
||||||
|
|
||||||
/proc/isNotStationLevel(var/level)
|
/proc/isNotStationLevel(var/level)
|
||||||
return !isStationLevel()
|
return !isStationLevel(level)
|
||||||
|
|
||||||
/proc/isPlayerLevel(var/level)
|
/proc/isPlayerLevel(var/level)
|
||||||
return level in config.player_levels
|
return level in config.player_levels
|
||||||
|
|||||||
@@ -288,6 +288,7 @@ datum/controller/game_controller/proc/process_machines_process()
|
|||||||
last_thing_processed = Machine.type
|
last_thing_processed = Machine.type
|
||||||
if(Machine.process() != PROCESS_KILL)
|
if(Machine.process() != PROCESS_KILL)
|
||||||
if(Machine)
|
if(Machine)
|
||||||
|
Machine.power_change()
|
||||||
if(Machine.use_power)
|
if(Machine.use_power)
|
||||||
Machine.auto_use_power()
|
Machine.auto_use_power()
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -34,14 +34,17 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
|
|||||||
|
|
||||||
/datum/wires/airlock/GetInteractWindow()
|
/datum/wires/airlock/GetInteractWindow()
|
||||||
var/obj/machinery/door/airlock/A = holder
|
var/obj/machinery/door/airlock/A = holder
|
||||||
|
var/haspower = A.arePowerSystemsOn() //If there's no power, then no lights will be on.
|
||||||
|
|
||||||
. += ..()
|
. += ..()
|
||||||
. += text("<br>\n[]<br>\n[]<br>\n[]<br>\n[]<br>\n[]<br>\n[]<br>\n[]", (A.locked ? "The door bolts have fallen!" : "The door bolts look up."),
|
. += text("<br>\n[]<br>\n[]<br>\n[]<br>\n[]<br>\n[]<br>\n[]<br>\n[]",
|
||||||
(A.lights ? "The door bolt lights are on." : "The door bolt lights are off!"),
|
(A.locked ? "The door bolts have fallen!" : "The door bolts look up."),
|
||||||
((A.hasPower()) ? "The test light is on." : "The test light is off!"),
|
((A.lights && haspower) ? "The door bolt lights are on." : "The door bolt lights are off!"),
|
||||||
((A.aiControlDisabled==0 && !A.emagged) ? "The 'AI control allowed' light is on." : "The 'AI control allowed' light is off."),
|
((haspower) ? "The test light is on." : "The test light is off!"),
|
||||||
(A.safe==0 ? "The 'Check Wiring' light is on." : "The 'Check Wiring' light is off."),
|
((A.aiControlDisabled==0 && !A.emagged && haspower)? "The 'AI control allowed' light is on." : "The 'AI control allowed' light is off."),
|
||||||
(A.normalspeed==0 ? "The 'Check Timing Mechanism' light is on." : "The 'Check Timing Mechanism' light is off."),
|
((A.safe==0 && haspower)? "The 'Check Wiring' light is on." : "The 'Check Wiring' light is off."),
|
||||||
(A.aiDisabledIdScanner==0 ? "The IDScan light is on." : "The IDScan light is off."))
|
((A.normalspeed==0 && haspower)? "The 'Check Timing Mechanism' light is on." : "The 'Check Timing Mechanism' light is off."),
|
||||||
|
((A.aiDisabledIdScanner==0 && haspower)? "The IDScan light is on." : "The IDScan light is off."))
|
||||||
|
|
||||||
/datum/wires/airlock/UpdateCut(var/index, var/mended)
|
/datum/wires/airlock/UpdateCut(var/index, var/mended)
|
||||||
|
|
||||||
@@ -127,7 +130,7 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
|
|||||||
switch(index)
|
switch(index)
|
||||||
if(AIRLOCK_WIRE_IDSCAN)
|
if(AIRLOCK_WIRE_IDSCAN)
|
||||||
//Sending a pulse through flashes the red light on the door (if the door has power).
|
//Sending a pulse through flashes the red light on the door (if the door has power).
|
||||||
if(A.hasPower() && A.density)
|
if(A.arePowerSystemsOn() && A.density)
|
||||||
A.do_animate("deny")
|
A.do_animate("deny")
|
||||||
if(AIRLOCK_WIRE_MAIN_POWER1 || AIRLOCK_WIRE_MAIN_POWER2)
|
if(AIRLOCK_WIRE_MAIN_POWER1 || AIRLOCK_WIRE_MAIN_POWER2)
|
||||||
//Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter).
|
//Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter).
|
||||||
@@ -139,7 +142,7 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
|
|||||||
A.locked = 1
|
A.locked = 1
|
||||||
A.audible_message("You hear a click from the bottom of the door.", null, 1)
|
A.audible_message("You hear a click from the bottom of the door.", null, 1)
|
||||||
else
|
else
|
||||||
if(A.hasPower()) //only can raise bolts if power's on
|
if(A.arePowerSystemsOn()) //only can raise bolts if power's on
|
||||||
A.locked = 0
|
A.locked = 0
|
||||||
A.audible_message("You hear a click from the bottom of the door.", null, 1)
|
A.audible_message("You hear a click from the bottom of the door.", null, 1)
|
||||||
A.update_icon()
|
A.update_icon()
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var/const/AALARM_WIRE_AALARM = 16
|
|||||||
|
|
||||||
/datum/wires/alarm/CanUse(var/mob/living/L)
|
/datum/wires/alarm/CanUse(var/mob/living/L)
|
||||||
var/obj/machinery/alarm/A = holder
|
var/obj/machinery/alarm/A = holder
|
||||||
if(A.wiresexposed)
|
if(A.wiresexposed && A.buildstage == 2)
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|||||||
@@ -679,11 +679,16 @@ var/list/datum/dna/hivemind_bank = list()
|
|||||||
//////////
|
//////////
|
||||||
|
|
||||||
/mob/proc/sting_can_reach(mob/M as mob, sting_range = 1)
|
/mob/proc/sting_can_reach(mob/M as mob, sting_range = 1)
|
||||||
if(M.loc == src.loc) return 1 //target and source are in the same thing
|
if(M.loc == src.loc)
|
||||||
if(!isturf(src.loc) || !isturf(M.loc)) return 0 //One is inside, the other is outside something.
|
return 1 //target and source are in the same thing
|
||||||
if(AStar(src.loc, M.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, sting_range)) //If a path exists, good!
|
if(!isturf(src.loc) || !isturf(M.loc))
|
||||||
return 1
|
src << "<span class='warning'>We cannot reach \the [M] with a sting!</span>"
|
||||||
return 0
|
return 0 //One is inside, the other is outside something.
|
||||||
|
// Maximum queued turfs set to 25; I don't *think* anything raises sting_range above 2, but if it does the 25 may need raising
|
||||||
|
if(!AStar(src.loc, M.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, max_nodes=25, max_node_depth=sting_range)) //If we can't find a path, fail
|
||||||
|
src << "<span class='warning'>We cannot find a path to sting \the [M] by!</span>"
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
//Handles the general sting code to reduce on copypasta (seeming as somebody decided to make SO MANY dumb abilities)
|
//Handles the general sting code to reduce on copypasta (seeming as somebody decided to make SO MANY dumb abilities)
|
||||||
/mob/proc/changeling_sting(var/required_chems=0, var/verb_path)
|
/mob/proc/changeling_sting(var/required_chems=0, var/verb_path)
|
||||||
|
|||||||
@@ -921,8 +921,13 @@ table tr:first-child th:first-child { border: none;}
|
|||||||
update_icon()
|
update_icon()
|
||||||
return
|
return
|
||||||
|
|
||||||
if (wiresexposed && ((istype(W, /obj/item/device/multitool) || istype(W, /obj/item/weapon/wirecutters))))
|
if (wiresexposed && istype(W, /obj/item/weapon/wirecutters))
|
||||||
return attack_hand(user)
|
user.visible_message("<span class='warning'>[user] has cut the wires inside \the [src]!</span>", "You have cut the wires inside \the [src].")
|
||||||
|
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||||
|
new/obj/item/stack/cable_coil(get_turf(src), 5)
|
||||||
|
buildstage = 1
|
||||||
|
update_icon()
|
||||||
|
return
|
||||||
|
|
||||||
if (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card
|
if (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card
|
||||||
if(stat & (NOPOWER|BROKEN))
|
if(stat & (NOPOWER|BROKEN))
|
||||||
@@ -1309,7 +1314,7 @@ FIRE ALARM
|
|||||||
/obj/machinery/firealarm/proc/delayed_reset()
|
/obj/machinery/firealarm/proc/delayed_reset()
|
||||||
var/area/A = get_area(src)
|
var/area/A = get_area(src)
|
||||||
if (!A) return
|
if (!A) return
|
||||||
|
|
||||||
src = null
|
src = null
|
||||||
spawn(600)
|
spawn(600)
|
||||||
A.firereset()
|
A.firereset()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
// Allows remote operation of electrical systems on station (SMESs and Breaker Boxes)
|
// Allows remote operation of electrical systems on station (SMESs and Breaker Boxes)
|
||||||
|
|
||||||
/obj/machinery/computer/rcon
|
/obj/machinery/computer/rcon
|
||||||
name = "\improper RCON remote control console"
|
name = "\improper RCON console"
|
||||||
desc = "Console used to remotely control machinery on the station."
|
desc = "Console used to remotely control machinery on the station."
|
||||||
icon = 'icons/obj/computer.dmi'
|
icon = 'icons/obj/computer.dmi'
|
||||||
icon_state = "ai-fixer"
|
icon_state = "ai-fixer"
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
|
|
||||||
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)
|
if (!ui)
|
||||||
ui = new(user, src, ui_key, "rcon.tmpl", "RCON Control Console", 600, 400)
|
ui = new(user, src, ui_key, "rcon.tmpl", "RCON Console", 600, 400)
|
||||||
ui.set_initial_data(data)
|
ui.set_initial_data(data)
|
||||||
ui.open()
|
ui.open()
|
||||||
ui.set_auto_update(1)
|
ui.set_auto_update(1)
|
||||||
|
|||||||
@@ -330,7 +330,7 @@ About the new airlock wires panel:
|
|||||||
return ((src.aiControlDisabled==1) && (!hackProof) && (!src.isAllPowerLoss()));
|
return ((src.aiControlDisabled==1) && (!hackProof) && (!src.isAllPowerLoss()));
|
||||||
|
|
||||||
/obj/machinery/door/airlock/proc/arePowerSystemsOn()
|
/obj/machinery/door/airlock/proc/arePowerSystemsOn()
|
||||||
if (stat & NOPOWER)
|
if (stat & (NOPOWER|BROKEN))
|
||||||
return 0
|
return 0
|
||||||
return (src.secondsMainPowerLost==0 || src.secondsBackupPowerLost==0)
|
return (src.secondsMainPowerLost==0 || src.secondsBackupPowerLost==0)
|
||||||
|
|
||||||
@@ -451,7 +451,7 @@ About the new airlock wires panel:
|
|||||||
if(density)
|
if(density)
|
||||||
flick("door_spark", src)
|
flick("door_spark", src)
|
||||||
if("deny")
|
if("deny")
|
||||||
if(density && !(stat & (BROKEN|NOPOWER)))
|
if(density && src.arePowerSystemsOn())
|
||||||
flick("door_deny", src)
|
flick("door_deny", src)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -900,12 +900,7 @@ About the new airlock wires panel:
|
|||||||
var/obj/item/weapon/pai_cable/cable = C
|
var/obj/item/weapon/pai_cable/cable = C
|
||||||
cable.plugin(src, user)
|
cable.plugin(src, user)
|
||||||
else if(!repairing && istype(C, /obj/item/weapon/crowbar))
|
else if(!repairing && istype(C, /obj/item/weapon/crowbar))
|
||||||
var/beingcrowbarred = null
|
if(src.p_open && (operating < 0 || (!operating && welded && !src.arePowerSystemsOn() && density && (!src.locked || (stat & BROKEN)))) )
|
||||||
if(istype(C, /obj/item/weapon/crowbar) )
|
|
||||||
beingcrowbarred = 1 //derp, Agouri
|
|
||||||
else
|
|
||||||
beingcrowbarred = 0
|
|
||||||
if( beingcrowbarred && src.p_open && (operating < 0 || (!operating && welded && !src.arePowerSystemsOn() && density && (!src.locked || (stat & BROKEN)))) )
|
|
||||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||||
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.")
|
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.")
|
||||||
if(do_after(user,40))
|
if(do_after(user,40))
|
||||||
@@ -936,7 +931,7 @@ About the new airlock wires panel:
|
|||||||
|
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
else if(arePowerSystemsOn() && !(stat & BROKEN))
|
else if(arePowerSystemsOn())
|
||||||
user << "\blue The airlock's motors resist your efforts to force it."
|
user << "\blue The airlock's motors resist your efforts to force it."
|
||||||
else if(locked)
|
else if(locked)
|
||||||
user << "\blue The airlock's bolts prevent it from being forced."
|
user << "\blue The airlock's bolts prevent it from being forced."
|
||||||
@@ -946,22 +941,22 @@ About the new airlock wires panel:
|
|||||||
else
|
else
|
||||||
spawn(0) close(1)
|
spawn(0) close(1)
|
||||||
|
|
||||||
else if(istype(C, /obj/item/weapon/twohanded/fireaxe) && (!arePowerSystemsOn() || (stat & BROKEN)))
|
else if(istype(C, /obj/item/weapon/twohanded/fireaxe) && !arePowerSystemsOn())
|
||||||
if(locked)
|
if(locked)
|
||||||
user << "\blue The airlock's bolts prevent it from being forced."
|
user << "\blue The airlock's bolts prevent it from being forced."
|
||||||
else if( !welded && !operating )
|
else if( !welded && !operating )
|
||||||
if(density)
|
if(density)
|
||||||
var/obj/item/weapon/twohanded/fireaxe/F = C
|
var/obj/item/weapon/twohanded/fireaxe/F = C
|
||||||
if(F:wielded)
|
if(F.wielded)
|
||||||
spawn(0) open(1)
|
spawn(0) open(1)
|
||||||
else
|
else
|
||||||
user << "\red You need to be wielding the Fire axe to do that."
|
user << "\red You need to be wielding \the [C] to do that."
|
||||||
else
|
else
|
||||||
var/obj/item/weapon/twohanded/fireaxe/F = C
|
var/obj/item/weapon/twohanded/fireaxe/F = C
|
||||||
if(F:wielded)
|
if(F.wielded)
|
||||||
spawn(0) close(1)
|
spawn(0) close(1)
|
||||||
else
|
else
|
||||||
user << "\red You need to be wielding the Fire axe to do that."
|
user << "\red You need to be wielding \the [C] to do that."
|
||||||
|
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
@@ -1007,7 +1002,9 @@ About the new airlock wires panel:
|
|||||||
if(operating || welded || locked)
|
if(operating || welded || locked)
|
||||||
return
|
return
|
||||||
if(!forced)
|
if(!forced)
|
||||||
if( !arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_DOOR_BOLTS) )
|
//despite the name, this wire is for general door control.
|
||||||
|
//Bolts are already covered by the check for locked, above
|
||||||
|
if( !arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_OPEN_DOOR) )
|
||||||
return
|
return
|
||||||
if(safe)
|
if(safe)
|
||||||
for(var/turf/turf in locs)
|
for(var/turf/turf in locs)
|
||||||
@@ -1131,9 +1128,6 @@ About the new airlock wires panel:
|
|||||||
..()
|
..()
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/door/airlock/proc/hasPower()
|
|
||||||
return ((src.secondsMainPowerLost==0 || src.secondsBackupPowerLost==0) && !(stat & (NOPOWER|BROKEN)))
|
|
||||||
|
|
||||||
/obj/machinery/door/airlock/proc/prison_open()
|
/obj/machinery/door/airlock/proc/prison_open()
|
||||||
src.unlock()
|
src.unlock()
|
||||||
src.open()
|
src.open()
|
||||||
|
|||||||
@@ -8,11 +8,6 @@ obj/machinery/door/airlock
|
|||||||
var/datum/radio_frequency/radio_connection
|
var/datum/radio_frequency/radio_connection
|
||||||
var/cur_command = null //the command the door is currently attempting to complete
|
var/cur_command = null //the command the door is currently attempting to complete
|
||||||
|
|
||||||
obj/machinery/door/airlock/proc/can_radio()
|
|
||||||
if(!arePowerSystemsOn())
|
|
||||||
return 0
|
|
||||||
return 1
|
|
||||||
|
|
||||||
obj/machinery/door/airlock/process()
|
obj/machinery/door/airlock/process()
|
||||||
..()
|
..()
|
||||||
if (arePowerSystemsOn())
|
if (arePowerSystemsOn())
|
||||||
@@ -21,8 +16,6 @@ obj/machinery/door/airlock/process()
|
|||||||
obj/machinery/door/airlock/receive_signal(datum/signal/signal)
|
obj/machinery/door/airlock/receive_signal(datum/signal/signal)
|
||||||
if (!arePowerSystemsOn()) return //no power
|
if (!arePowerSystemsOn()) return //no power
|
||||||
|
|
||||||
if (!can_radio()) return //no radio
|
|
||||||
|
|
||||||
if(!signal || signal.encryption) return
|
if(!signal || signal.encryption) return
|
||||||
|
|
||||||
if(id_tag != signal.data["tag"] || !signal.data["command"]) return
|
if(id_tag != signal.data["tag"] || !signal.data["command"]) return
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ datum/track/New(var/title_name, var/audio)
|
|||||||
return
|
return
|
||||||
|
|
||||||
if(stat & (NOPOWER|BROKEN))
|
if(stat & (NOPOWER|BROKEN))
|
||||||
usr << "\the [src] doesn't appear to function."
|
usr << "\The [src] doesn't appear to function."
|
||||||
return
|
return
|
||||||
|
|
||||||
if(href_list["change_track"])
|
if(href_list["change_track"])
|
||||||
@@ -109,7 +109,7 @@ datum/track/New(var/title_name, var/audio)
|
|||||||
|
|
||||||
/obj/machinery/media/jukebox/interact(mob/user)
|
/obj/machinery/media/jukebox/interact(mob/user)
|
||||||
if(stat & (NOPOWER|BROKEN))
|
if(stat & (NOPOWER|BROKEN))
|
||||||
usr << "\the [src] doesn't appear to function."
|
usr << "\The [src] doesn't appear to function."
|
||||||
return
|
return
|
||||||
|
|
||||||
ui_interact(user)
|
ui_interact(user)
|
||||||
|
|||||||
@@ -141,9 +141,10 @@
|
|||||||
if(isliving(src.loc))
|
if(isliving(src.loc))
|
||||||
return
|
return
|
||||||
user.next_move = max(user.next_move+2,world.time + 2)
|
user.next_move = max(user.next_move+2,world.time + 2)
|
||||||
src.pickup(user)
|
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
user.put_in_active_hand(src)
|
user.put_in_active_hand(src)
|
||||||
|
if(src.loc == user)
|
||||||
|
src.pickup(user)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -104,7 +104,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
..()
|
..()
|
||||||
take_damage(Proj.damage * 4)
|
take_damage(Proj.damage)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1148,15 +1148,22 @@ var/global/floorIsLava = 0
|
|||||||
switch(detail)
|
switch(detail)
|
||||||
if(0)
|
if(0)
|
||||||
return "<b>[key_name(C, link, name, highlight_special)]</b>"
|
return "<b>[key_name(C, link, name, highlight_special)]</b>"
|
||||||
if(1)
|
|
||||||
|
if(1) //Private Messages
|
||||||
return "<b>[key_name(C, link, name, highlight_special)](<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>?</A>)</b>"
|
return "<b>[key_name(C, link, name, highlight_special)](<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>?</A>)</b>"
|
||||||
if(2)
|
|
||||||
|
if(2) //Admins
|
||||||
var/ref_mob = "\ref[M]"
|
var/ref_mob = "\ref[M]"
|
||||||
return "<b>[key_name(C, link, name, highlight_special)](<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=[ref_mob]'>JMP</A>) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>)</b>"
|
return "<b>[key_name(C, link, name, highlight_special)](<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=[ref_mob]'>JMP</A>) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>)</b>"
|
||||||
if(3)
|
|
||||||
|
if(3) //Devs
|
||||||
var/ref_mob = "\ref[M]"
|
var/ref_mob = "\ref[M]"
|
||||||
return "<b>[key_name(C, link, name, highlight_special)](<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>)(<A HREF='?_src_=holder;adminplayerobservejump=[ref_mob]'>JMP</A>)</b>"
|
return "<b>[key_name(C, link, name, highlight_special)](<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>)(<A HREF='?_src_=holder;adminplayerobservejump=[ref_mob]'>JMP</A>)</b>"
|
||||||
|
|
||||||
|
if(4) //Mentors
|
||||||
|
var/ref_mob = "\ref[M]"
|
||||||
|
return "<b>[key_name(C, link, name, highlight_special)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=[ref_mob]'>JMP</A>)</b>"
|
||||||
|
|
||||||
|
|
||||||
/proc/ishost(whom)
|
/proc/ishost(whom)
|
||||||
if(!whom)
|
if(!whom)
|
||||||
|
|||||||
@@ -87,7 +87,11 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
|||||||
var/ai_cl
|
var/ai_cl
|
||||||
if(ai_found)
|
if(ai_found)
|
||||||
ai_cl = " (<A HREF='?_src_=holder;adminchecklaws=\ref[mob]'>CL</A>)"
|
ai_cl = " (<A HREF='?_src_=holder;adminchecklaws=\ref[mob]'>CL</A>)"
|
||||||
var/mentor_msg = "\blue <b><font color=red>Request for Help: </font>[get_options_bar(mob, 0, 0, 1, 0)][ai_cl]:</b> [msg]"
|
|
||||||
|
//Options bar: mob, details ( admin = 2, dev = 3, mentor = 4, character name (0 = just ckey, 1 = ckey and character name), link? (0 no don't make it a link, 1 do so),
|
||||||
|
// highlight special roles (0 = everyone has same looking name, 1 = antags / special roles get a golden name)
|
||||||
|
|
||||||
|
var/mentor_msg = "\blue <b><font color=red>Request for Help: </font>[get_options_bar(mob, 4, 1, 1, 0)][ai_cl]:</b> [msg]"
|
||||||
msg = "\blue <b><font color=red>Request for Help:: </font>[get_options_bar(mob, 2, 1, 1)][ai_cl]:</b> [msg]"
|
msg = "\blue <b><font color=red>Request for Help:: </font>[get_options_bar(mob, 2, 1, 1)][ai_cl]:</b> [msg]"
|
||||||
|
|
||||||
var/admin_number_afk = 0
|
var/admin_number_afk = 0
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ proc/populate_seed_list()
|
|||||||
|
|
||||||
if(prob(90))
|
if(prob(90))
|
||||||
requires_nutrients = 1
|
requires_nutrients = 1
|
||||||
nutrient_consumption = rand(100)*0.1
|
nutrient_consumption = rand(25)/100
|
||||||
else
|
else
|
||||||
requires_nutrients = 0
|
requires_nutrients = 0
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
"exotic matter" = 0
|
"exotic matter" = 0
|
||||||
)
|
)
|
||||||
|
|
||||||
for(var/turf/T in oview(3,get_turf(user)))
|
for(var/turf/T in range(3,get_turf(user)))
|
||||||
|
|
||||||
if(!T.has_resources)
|
if(!T.has_resources)
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -107,7 +107,7 @@
|
|||||||
return
|
return
|
||||||
else
|
else
|
||||||
if(language)
|
if(language)
|
||||||
message = language.scramble(language)
|
message = language.scramble(message)
|
||||||
else
|
else
|
||||||
message = stars(message)
|
message = stars(message)
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#define SCRAMBLE_CACHE_LEN 20
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Datum based languages. Easily editable and modular.
|
Datum based languages. Easily editable and modular.
|
||||||
*/
|
*/
|
||||||
@@ -35,11 +37,21 @@
|
|||||||
|
|
||||||
return "[trim(full_name)]"
|
return "[trim(full_name)]"
|
||||||
|
|
||||||
|
/datum/language
|
||||||
|
var/list/scramble_cache = list()
|
||||||
|
|
||||||
/datum/language/proc/scramble(var/input)
|
/datum/language/proc/scramble(var/input)
|
||||||
|
|
||||||
if(!syllables || !syllables.len)
|
if(!syllables || !syllables.len)
|
||||||
return stars(input)
|
return stars(input)
|
||||||
|
|
||||||
|
// If the input is cached already, move it to the end of the cache and return it
|
||||||
|
if(input in scramble_cache)
|
||||||
|
var/n = scramble_cache[input]
|
||||||
|
scramble_cache -= input
|
||||||
|
scramble_cache[input] = n
|
||||||
|
return n
|
||||||
|
|
||||||
var/input_size = length(input)
|
var/input_size = length(input)
|
||||||
var/scrambled_text = ""
|
var/scrambled_text = ""
|
||||||
var/capitalize = 1
|
var/capitalize = 1
|
||||||
@@ -64,6 +76,13 @@
|
|||||||
var/input_ending = copytext(input, input_size)
|
var/input_ending = copytext(input, input_size)
|
||||||
if(input_ending in list("!","?","."))
|
if(input_ending in list("!","?","."))
|
||||||
scrambled_text += input_ending
|
scrambled_text += input_ending
|
||||||
|
|
||||||
|
// Add it to cache, cutting old entries if the list is too long
|
||||||
|
scramble_cache[input] = scrambled_text
|
||||||
|
if(scramble_cache.len > SCRAMBLE_CACHE_LEN)
|
||||||
|
scramble_cache.Cut(1, scramble_cache.len-SCRAMBLE_CACHE_LEN-1)
|
||||||
|
|
||||||
|
|
||||||
return scrambled_text
|
return scrambled_text
|
||||||
|
|
||||||
/datum/language/proc/format_message(message, verb)
|
/datum/language/proc/format_message(message, verb)
|
||||||
@@ -496,4 +515,6 @@
|
|||||||
"al", "an", "ar", "as", "at", "ea", "ed", "en", "er", "es", "ha", "he", "hi", "in", "is", "it",
|
"al", "an", "ar", "as", "at", "ea", "ed", "en", "er", "es", "ha", "he", "hi", "in", "is", "it",
|
||||||
"le", "me", "nd", "ne", "ng", "nt", "on", "or", "ou", "re", "se", "st", "te", "th", "ti", "to",
|
"le", "me", "nd", "ne", "ng", "nt", "on", "or", "ou", "re", "se", "st", "te", "th", "ti", "to",
|
||||||
"ve", "wa", "all", "and", "are", "but", "ent", "era", "ere", "eve", "for", "had", "hat", "hen", "her", "hin",
|
"ve", "wa", "all", "and", "are", "but", "ent", "era", "ere", "eve", "for", "had", "hat", "hen", "her", "hin",
|
||||||
"his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi")
|
"his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi")
|
||||||
|
|
||||||
|
#undef SCRAMBLE_CACHE_LEN
|
||||||
@@ -434,7 +434,8 @@
|
|||||||
|
|
||||||
|
|
||||||
step(pulling, get_dir(pulling.loc, T))
|
step(pulling, get_dir(pulling.loc, T))
|
||||||
M.start_pulling(t)
|
if(t)
|
||||||
|
M.start_pulling(t)
|
||||||
else
|
else
|
||||||
if (pulling)
|
if (pulling)
|
||||||
if (istype(pulling, /obj/structure/window))
|
if (istype(pulling, /obj/structure/window))
|
||||||
|
|||||||
@@ -893,6 +893,11 @@
|
|||||||
if(!can_use(usr, 1))
|
if(!can_use(usr, 1))
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
if(!istype(usr, /mob/living/silicon) && locked)
|
||||||
|
// Shouldn't happen, this is here to prevent href exploits
|
||||||
|
usr << "You must unlock the panel to use this!"
|
||||||
|
return 1
|
||||||
|
|
||||||
if (href_list["lock"])
|
if (href_list["lock"])
|
||||||
coverlocked = !coverlocked
|
coverlocked = !coverlocked
|
||||||
|
|
||||||
|
|||||||
@@ -63,8 +63,10 @@
|
|||||||
if(!src.loc)
|
if(!src.loc)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if(!use_power)
|
//Don't do this. It allows machines that set use_power to 0 when off (many machines) to
|
||||||
return 1
|
//be turned on again and used after a power failure because they never gain the NOPOWER flag.
|
||||||
|
//if(!use_power)
|
||||||
|
// return 1
|
||||||
|
|
||||||
var/area/A = src.loc.loc // make sure it's in an area
|
var/area/A = src.loc.loc // make sure it's in an area
|
||||||
if(!A || !isarea(A) || !A.master)
|
if(!A || !isarea(A) || !A.master)
|
||||||
|
|||||||
@@ -315,7 +315,7 @@
|
|||||||
if (!ui)
|
if (!ui)
|
||||||
// the ui does not exist, so we'll create a new() one
|
// 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
|
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
|
||||||
ui = new(user, src, ui_key, "smes.tmpl", "SMES Power Storage Unit", 540, 380)
|
ui = new(user, src, ui_key, "smes.tmpl", "SMES Unit", 540, 380)
|
||||||
// when the ui is first opened this is the data it will use
|
// 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
|
// open the new ui window
|
||||||
|
|||||||
@@ -462,10 +462,10 @@
|
|||||||
if(prob(75))
|
if(prob(75))
|
||||||
I.loc = src
|
I.loc = src
|
||||||
for(var/mob/M in viewers(src))
|
for(var/mob/M in viewers(src))
|
||||||
M.show_message("\the [I] lands in \the [src].", 3)
|
M.show_message("\The [I] lands in \the [src].", 3)
|
||||||
else
|
else
|
||||||
for(var/mob/M in viewers(src))
|
for(var/mob/M in viewers(src))
|
||||||
M.show_message("\the [I] bounces off of \the [src]'s rim!", 3)
|
M.show_message("\The [I] bounces off of \the [src]'s rim!", 3)
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
return ..(mover, target, height, air_group)
|
return ..(mover, target, height, air_group)
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 71 KiB |
2291
maps/exodus-1.dmm
2291
maps/exodus-1.dmm
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user