mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-17 13:42:44 +00:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into NanoGrade
Conflicts: code/_helpers/time.dm code/modules/economy/ATM.dm
This commit is contained in:
@@ -1,18 +0,0 @@
|
|||||||
// Comment this out if the external btime library is unavailable
|
|
||||||
#define PRECISE_TIMER_AVAILABLE
|
|
||||||
|
|
||||||
#ifdef PRECISE_TIMER_AVAILABLE
|
|
||||||
var/global/__btime__libName = "btime.[world.system_type==MS_WINDOWS?"dll":"so"]"
|
|
||||||
#define TimeOfHour (__extern__timeofhour)
|
|
||||||
#define __extern__timeofhour text2num(call(__btime__libName, "gettime")())
|
|
||||||
/hook/startup/proc/checkbtime()
|
|
||||||
try
|
|
||||||
// This will always return 1 unless the btime library cannot be accessed
|
|
||||||
if(TimeOfHour || 1) return 1
|
|
||||||
catch(var/exception/e)
|
|
||||||
log_to_dd("PRECISE_TIMER_AVAILABLE is defined in btime.dm, but calling the btime library failed: [e]")
|
|
||||||
log_to_dd("This is a fatal error. The world will now shut down.")
|
|
||||||
del(world)
|
|
||||||
#else
|
|
||||||
#define TimeOfHour (world.timeofday % 36000)
|
|
||||||
#endif
|
|
||||||
@@ -27,3 +27,6 @@
|
|||||||
|
|
||||||
#define TICKS_IN_DAY 24*60*60*10
|
#define TICKS_IN_DAY 24*60*60*10
|
||||||
#define TICKS_IN_SECOND 10
|
#define TICKS_IN_SECOND 10
|
||||||
|
|
||||||
|
#define SIMPLE_SIGN(X) ((X) < 0 ? -1 : 1)
|
||||||
|
#define SIGN(X) ((X) ? SIMPLE_SIGN(X) : 0)
|
||||||
|
|||||||
@@ -11,10 +11,9 @@
|
|||||||
#define PROCESS_DEFAULT_HANG_ALERT_TIME 600 // 60 seconds
|
#define PROCESS_DEFAULT_HANG_ALERT_TIME 600 // 60 seconds
|
||||||
#define PROCESS_DEFAULT_HANG_RESTART_TIME 900 // 90 seconds
|
#define PROCESS_DEFAULT_HANG_RESTART_TIME 900 // 90 seconds
|
||||||
#define PROCESS_DEFAULT_SCHEDULE_INTERVAL 50 // 50 ticks
|
#define PROCESS_DEFAULT_SCHEDULE_INTERVAL 50 // 50 ticks
|
||||||
#define PROCESS_DEFAULT_SLEEP_INTERVAL 8 // 2 ticks
|
#define PROCESS_DEFAULT_SLEEP_INTERVAL 8 // 1/8th of a tick
|
||||||
#define PROCESS_DEFAULT_CPU_THRESHOLD 90 // 90%
|
|
||||||
|
|
||||||
// SCHECK macros
|
// SCHECK macros
|
||||||
// This references src directly to work around a weird bug with try/catch
|
// This references src directly to work around a weird bug with try/catch
|
||||||
#define SCHECK_EVERY(this_many_calls) if(++src.calls_since_last_scheck >= this_many_calls) sleepCheck()
|
#define SCHECK_EVERY(this_many_calls) if(++src.calls_since_last_scheck >= this_many_calls) sleepCheck()
|
||||||
#define SCHECK SCHECK_EVERY(50)
|
#define SCHECK sleepCheck()
|
||||||
|
|||||||
72
code/__defines/xenoarcheaology.dm
Normal file
72
code/__defines/xenoarcheaology.dm
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
#define ARCHAEO_BOWL 1
|
||||||
|
#define ARCHAEO_URN 2
|
||||||
|
#define ARCHAEO_CUTLERY 3
|
||||||
|
#define ARCHAEO_STATUETTE 4
|
||||||
|
#define ARCHAEO_INSTRUMENT 5
|
||||||
|
#define ARCHAEO_KNIFE 6
|
||||||
|
#define ARCHAEO_COIN 7
|
||||||
|
#define ARCHAEO_HANDCUFFS 8
|
||||||
|
#define ARCHAEO_BEARTRAP 9
|
||||||
|
#define ARCHAEO_LIGHTER 10
|
||||||
|
#define ARCHAEO_BOX 11
|
||||||
|
#define ARCHAEO_GASTANK 12
|
||||||
|
#define ARCHAEO_TOOL 13
|
||||||
|
#define ARCHAEO_METAL 14
|
||||||
|
#define ARCHAEO_PEN 15
|
||||||
|
#define ARCHAEO_CRYSTAL 16
|
||||||
|
#define ARCHAEO_CULTBLADE 17
|
||||||
|
#define ARCHAEO_TELEBEACON 18
|
||||||
|
#define ARCHAEO_CLAYMORE 19
|
||||||
|
#define ARCHAEO_CULTROBES 20
|
||||||
|
#define ARCHAEO_SOULSTONE 21
|
||||||
|
#define ARCHAEO_SHARD 22
|
||||||
|
#define ARCHAEO_RODS 23
|
||||||
|
#define ARCHAEO_STOCKPARTS 24
|
||||||
|
#define ARCHAEO_KATANA 25
|
||||||
|
#define ARCHAEO_LASER 26
|
||||||
|
#define ARCHAEO_GUN 27
|
||||||
|
#define ARCHAEO_UNKNOWN 28
|
||||||
|
#define ARCHAEO_FOSSIL 29
|
||||||
|
#define ARCHAEO_SHELL 30
|
||||||
|
#define ARCHAEO_PLANT 31
|
||||||
|
#define ARCHAEO_REMAINS_HUMANOID 32
|
||||||
|
#define ARCHAEO_REMAINS_ROBOT 33
|
||||||
|
#define ARCHAEO_REMAINS_XENO 34
|
||||||
|
#define ARCHAEO_GASMASK 35
|
||||||
|
#define MAX_ARCHAEO 35
|
||||||
|
|
||||||
|
#define DIGSITE_GARDEN 1
|
||||||
|
#define DIGSITE_ANIMAL 2
|
||||||
|
#define DIGSITE_HOUSE 3
|
||||||
|
#define DIGSITE_TECHNICAL 4
|
||||||
|
#define DIGSITE_TEMPLE 5
|
||||||
|
#define DIGSITE_WAR 6
|
||||||
|
|
||||||
|
#define EFFECT_TOUCH 0
|
||||||
|
#define EFFECT_AURA 1
|
||||||
|
#define EFFECT_PULSE 2
|
||||||
|
#define MAX_EFFECT 2
|
||||||
|
|
||||||
|
#define TRIGGER_TOUCH 0
|
||||||
|
#define TRIGGER_WATER 1
|
||||||
|
#define TRIGGER_ACID 2
|
||||||
|
#define TRIGGER_VOLATILE 3
|
||||||
|
#define TRIGGER_TOXIN 4
|
||||||
|
#define TRIGGER_FORCE 5
|
||||||
|
#define TRIGGER_ENERGY 6
|
||||||
|
#define TRIGGER_HEAT 7
|
||||||
|
#define TRIGGER_COLD 8
|
||||||
|
#define TRIGGER_PHORON 9
|
||||||
|
#define TRIGGER_OXY 10
|
||||||
|
#define TRIGGER_CO2 11
|
||||||
|
#define TRIGGER_NITRO 12
|
||||||
|
#define MAX_TRIGGER 12
|
||||||
|
|
||||||
|
#define EFFECT_UNKNOWN 0
|
||||||
|
#define EFFECT_ENERGY 1
|
||||||
|
#define EFFECT_PSIONIC 2
|
||||||
|
#define EFFECT_ELECTRO 3
|
||||||
|
#define EFFECT_PARTICLE 4
|
||||||
|
#define EFFECT_ORGANIC 5
|
||||||
|
#define EFFECT_BLUESPACE 6
|
||||||
|
#define EFFECT_SYNTH 7
|
||||||
@@ -4,17 +4,56 @@
|
|||||||
#define MINUTE *600
|
#define MINUTE *600
|
||||||
#define MINUTES *600
|
#define MINUTES *600
|
||||||
|
|
||||||
var/roundstart_hour = 0
|
#define HOUR *36000
|
||||||
//Returns the world time in english
|
#define HOURS *36000
|
||||||
proc/worldtime2text(time = world.time, timeshift = 1)
|
|
||||||
if(!roundstart_hour) roundstart_hour = pick(2,7,12,17)
|
|
||||||
return timeshift ? time2text(time+(36000*roundstart_hour), "hh:mm") : time2text(time, "hh:mm")
|
|
||||||
|
|
||||||
proc/worlddate2text()
|
#define DAY *864000
|
||||||
return num2text((text2num(time2text(world.timeofday, "YYYY"))+544)) + "-" + time2text(world.timeofday, "MM-DD")
|
#define DAYS *864000
|
||||||
|
|
||||||
proc/time_stamp()
|
#define TimeOfGame (get_game_time())
|
||||||
return time2text(world.timeofday, "hh:mm:ss")
|
#define TimeOfTick (world.tick_usage*0.01*world.tick_lag)
|
||||||
|
|
||||||
|
/proc/get_game_time()
|
||||||
|
var/global/time_offset = 0
|
||||||
|
var/global/last_time = 0
|
||||||
|
var/global/last_usage = 0
|
||||||
|
|
||||||
|
var/wtime = world.time
|
||||||
|
var/wusage = world.tick_usage * 0.01
|
||||||
|
|
||||||
|
if(last_time < wtime && last_usage > 1)
|
||||||
|
time_offset += last_usage - 1
|
||||||
|
|
||||||
|
last_time = wtime
|
||||||
|
last_usage = wusage
|
||||||
|
|
||||||
|
return wtime + (time_offset + wusage) * world.tick_lag
|
||||||
|
|
||||||
|
var/roundstart_hour
|
||||||
|
var/station_date = ""
|
||||||
|
var/next_station_date_change = 1 DAY
|
||||||
|
|
||||||
|
#define duration2stationtime(time) time2text(station_time_in_ticks + time, "hh:mm")
|
||||||
|
#define worldtime2stationtime(time) time2text(roundstart_hour HOURS + time, "hh:mm")
|
||||||
|
#define round_duration_in_ticks (round_start_time ? world.time - round_start_time : 0)
|
||||||
|
#define station_time_in_ticks (roundstart_hour HOURS + round_duration_in_ticks)
|
||||||
|
|
||||||
|
/proc/stationtime2text()
|
||||||
|
return time2text(station_time_in_ticks, "hh:mm")
|
||||||
|
|
||||||
|
/proc/stationdate2text()
|
||||||
|
var/update_time = FALSE
|
||||||
|
if(station_time_in_ticks > next_station_date_change)
|
||||||
|
next_station_date_change += 1 DAY
|
||||||
|
update_time = TRUE
|
||||||
|
if(!station_date || update_time)
|
||||||
|
var/extra_days = round(station_time_in_ticks / (1 DAY)) DAYS
|
||||||
|
var/timeofday = world.timeofday + extra_days
|
||||||
|
station_date = num2text((text2num(time2text(timeofday, "YYYY"))+544)) + "-" + time2text(timeofday, "MM-DD")
|
||||||
|
return station_date
|
||||||
|
|
||||||
|
/proc/time_stamp()
|
||||||
|
return time2text(station_time_in_ticks, "hh:mm:ss")
|
||||||
|
|
||||||
/* Returns 1 if it is the selected month and day */
|
/* Returns 1 if it is the selected month and day */
|
||||||
proc/isDay(var/month, var/day)
|
proc/isDay(var/month, var/day)
|
||||||
@@ -36,9 +75,7 @@ var/round_start_time = 0
|
|||||||
round_start_time = world.time
|
round_start_time = world.time
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
#define round_duration_in_ticks (round_start_time ? world.time - round_start_time : 0)
|
/proc/roundduration2text()
|
||||||
|
|
||||||
/proc/round_duration_as_text()
|
|
||||||
if(!round_start_time)
|
if(!round_start_time)
|
||||||
return "00:00"
|
return "00:00"
|
||||||
if(last_round_duration && world.time < next_duration_update)
|
if(last_round_duration && world.time < next_duration_update)
|
||||||
@@ -56,6 +93,14 @@ var/round_start_time = 0
|
|||||||
next_duration_update = world.time + 1 MINUTES
|
next_duration_update = world.time + 1 MINUTES
|
||||||
return last_round_duration
|
return last_round_duration
|
||||||
|
|
||||||
|
//Can be useful for things dependent on process timing
|
||||||
|
/proc/process_schedule_interval(var/process_name)
|
||||||
|
var/datum/controller/process/process = processScheduler.getProcess(process_name)
|
||||||
|
return process.schedule_interval
|
||||||
|
|
||||||
|
/hook/startup/proc/set_roundstart_hour()
|
||||||
|
roundstart_hour = pick(2,7,12,17)
|
||||||
|
return 1
|
||||||
/*
|
/*
|
||||||
Returns "watch handle" (really just a timestamp)
|
Returns "watch handle" (really just a timestamp)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
/**
|
|
||||||
* _stubs.dm
|
|
||||||
*
|
|
||||||
* This file contains constructs that the process scheduler expects to exist
|
|
||||||
* in a standard ss13 fork.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* logTheThing
|
|
||||||
*
|
|
||||||
* In goonstation, this proc writes a message to either the world log or diary.
|
|
||||||
*
|
|
||||||
* Blame Keelin.
|
|
||||||
*/
|
|
||||||
/proc/logTheThing(type, source, target, text, diaryType)
|
|
||||||
if(diaryType)
|
|
||||||
log_debug("Diary: \[[diaryType]:[type]] [text]")
|
|
||||||
else
|
|
||||||
log_debug("Log: \[[type]] [text]")
|
|
||||||
@@ -69,10 +69,10 @@
|
|||||||
* recordkeeping vars
|
* recordkeeping vars
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Records the time (1/10s timeofday) at which the process last finished sleeping
|
// Records the time (1/10s timeoftick) at which the process last finished sleeping
|
||||||
var/tmp/last_slept = 0
|
var/tmp/last_slept = 0
|
||||||
|
|
||||||
// Records the time (1/10s timeofday) at which the process last began running
|
// Records the time (1/10s timeofgame) at which the process last began running
|
||||||
var/tmp/run_start = 0
|
var/tmp/run_start = 0
|
||||||
|
|
||||||
// Records the number of times this process has been killed and restarted
|
// Records the number of times this process has been killed and restarted
|
||||||
@@ -106,12 +106,8 @@
|
|||||||
last_object = null
|
last_object = null
|
||||||
|
|
||||||
/datum/controller/process/proc/started()
|
/datum/controller/process/proc/started()
|
||||||
var/timeofhour = TimeOfHour
|
|
||||||
// Initialize last_slept so we can know when to sleep
|
|
||||||
last_slept = timeofhour
|
|
||||||
|
|
||||||
// Initialize run_start so we can detect hung processes.
|
// Initialize run_start so we can detect hung processes.
|
||||||
run_start = timeofhour
|
run_start = TimeOfGame
|
||||||
|
|
||||||
// Initialize defer count
|
// Initialize defer count
|
||||||
cpu_defer_count = 0
|
cpu_defer_count = 0
|
||||||
@@ -163,18 +159,13 @@
|
|||||||
setStatus(PROCESS_STATUS_HUNG)
|
setStatus(PROCESS_STATUS_HUNG)
|
||||||
|
|
||||||
/datum/controller/process/proc/handleHung()
|
/datum/controller/process/proc/handleHung()
|
||||||
var/timeofhour = TimeOfHour
|
|
||||||
var/datum/lastObj = last_object
|
var/datum/lastObj = last_object
|
||||||
var/lastObjType = "null"
|
var/lastObjType = "null"
|
||||||
if(istype(lastObj))
|
if(istype(lastObj))
|
||||||
lastObjType = lastObj.type
|
lastObjType = lastObj.type
|
||||||
|
|
||||||
// If timeofhour has rolled over, then we need to adjust.
|
var/msg = "[name] process hung at tick #[ticks]. Process was unresponsive for [(TimeOfGame - run_start) / 10] seconds and was restarted. Last task: [last_task]. Last Object Type: [lastObjType]"
|
||||||
if (timeofhour < run_start)
|
log_debug(msg)
|
||||||
run_start -= 36000
|
|
||||||
var/msg = "[name] process hung at tick #[ticks]. Process was unresponsive for [(timeofhour - run_start) / 10] seconds and was restarted. Last task: [last_task]. Last Object Type: [lastObjType]"
|
|
||||||
logTheThing("debug", null, null, msg)
|
|
||||||
logTheThing("diary", null, null, msg, "debug")
|
|
||||||
message_admins(msg)
|
message_admins(msg)
|
||||||
|
|
||||||
main.restartProcess(src.name)
|
main.restartProcess(src.name)
|
||||||
@@ -182,8 +173,8 @@
|
|||||||
/datum/controller/process/proc/kill()
|
/datum/controller/process/proc/kill()
|
||||||
if (!killed)
|
if (!killed)
|
||||||
var/msg = "[name] process was killed at tick #[ticks]."
|
var/msg = "[name] process was killed at tick #[ticks]."
|
||||||
logTheThing("debug", null, null, msg)
|
log_debug(msg)
|
||||||
logTheThing("diary", null, null, msg, "debug")
|
message_admins(msg)
|
||||||
//finished()
|
//finished()
|
||||||
|
|
||||||
// Allow inheritors to clean up if needed
|
// Allow inheritors to clean up if needed
|
||||||
@@ -208,17 +199,12 @@
|
|||||||
if (main.getCurrentTickElapsedTime() > main.timeAllowance)
|
if (main.getCurrentTickElapsedTime() > main.timeAllowance)
|
||||||
sleep(world.tick_lag)
|
sleep(world.tick_lag)
|
||||||
cpu_defer_count++
|
cpu_defer_count++
|
||||||
last_slept = TimeOfHour
|
last_slept = 0
|
||||||
else
|
else
|
||||||
var/timeofhour = TimeOfHour
|
if (TimeOfTick > last_slept + sleep_interval)
|
||||||
// If timeofhour has rolled over, then we need to adjust.
|
|
||||||
if (timeofhour < last_slept)
|
|
||||||
last_slept -= 36000
|
|
||||||
|
|
||||||
if (timeofhour > last_slept + sleep_interval)
|
|
||||||
// If we haven't slept in sleep_interval deciseconds, sleep to allow other work to proceed.
|
// If we haven't slept in sleep_interval deciseconds, sleep to allow other work to proceed.
|
||||||
sleep(0)
|
sleep(0)
|
||||||
last_slept = TimeOfHour
|
last_slept = TimeOfTick
|
||||||
|
|
||||||
/datum/controller/process/proc/update()
|
/datum/controller/process/proc/update()
|
||||||
// Clear delta
|
// Clear delta
|
||||||
@@ -239,10 +225,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/datum/controller/process/proc/getElapsedTime()
|
/datum/controller/process/proc/getElapsedTime()
|
||||||
var/timeofhour = TimeOfHour
|
return TimeOfGame - run_start
|
||||||
if (timeofhour < run_start)
|
|
||||||
return timeofhour - (run_start - 36000)
|
|
||||||
return timeofhour - run_start
|
|
||||||
|
|
||||||
/datum/controller/process/proc/tickDetail()
|
/datum/controller/process/proc/tickDetail()
|
||||||
return
|
return
|
||||||
@@ -343,6 +326,11 @@
|
|||||||
stat("[name]", "T#[getTicks()] | AR [averageRunTime] | LR [lastRunTime] | HR [highestRunTime] | D [cpu_defer_count]")
|
stat("[name]", "T#[getTicks()] | AR [averageRunTime] | LR [lastRunTime] | HR [highestRunTime] | D [cpu_defer_count]")
|
||||||
|
|
||||||
/datum/controller/process/proc/catchException(var/exception/e, var/thrower)
|
/datum/controller/process/proc/catchException(var/exception/e, var/thrower)
|
||||||
|
if(istype(e)) // Real runtimes go to the real error handler
|
||||||
|
// There are two newlines here, because handling desc sucks
|
||||||
|
e.desc = " Caught by process: [name]\n\n" + e.desc
|
||||||
|
world.Error(e, e_src = thrower)
|
||||||
|
return
|
||||||
var/etext = "[e]"
|
var/etext = "[e]"
|
||||||
var/eid = "[e]" // Exception ID, for tracking repeated exceptions
|
var/eid = "[e]" // Exception ID, for tracking repeated exceptions
|
||||||
var/ptext = "" // "processing..." text, for what was being processed (if known)
|
var/ptext = "" // "processing..." text, for what was being processed (if known)
|
||||||
|
|||||||
@@ -43,8 +43,6 @@ var/global/datum/controller/processScheduler/processScheduler
|
|||||||
|
|
||||||
var/tmp/currentTick = 0
|
var/tmp/currentTick = 0
|
||||||
|
|
||||||
var/tmp/currentTickStart = 0
|
|
||||||
|
|
||||||
var/tmp/timeAllowance = 0
|
var/tmp/timeAllowance = 0
|
||||||
|
|
||||||
var/tmp/cpuAverage = 0
|
var/tmp/cpuAverage = 0
|
||||||
@@ -247,7 +245,7 @@ var/global/datum/controller/processScheduler/processScheduler
|
|||||||
|
|
||||||
/datum/controller/processScheduler/proc/recordStart(var/datum/controller/process/process, var/time = null)
|
/datum/controller/processScheduler/proc/recordStart(var/datum/controller/process/process, var/time = null)
|
||||||
if (isnull(time))
|
if (isnull(time))
|
||||||
time = TimeOfHour
|
time = TimeOfGame
|
||||||
last_queued[process] = world.time
|
last_queued[process] = world.time
|
||||||
last_start[process] = time
|
last_start[process] = time
|
||||||
else
|
else
|
||||||
@@ -256,11 +254,7 @@ var/global/datum/controller/processScheduler/processScheduler
|
|||||||
|
|
||||||
/datum/controller/processScheduler/proc/recordEnd(var/datum/controller/process/process, var/time = null)
|
/datum/controller/processScheduler/proc/recordEnd(var/datum/controller/process/process, var/time = null)
|
||||||
if (isnull(time))
|
if (isnull(time))
|
||||||
time = TimeOfHour
|
time = TimeOfGame
|
||||||
|
|
||||||
// If world.timeofday has rolled over, then we need to adjust.
|
|
||||||
if (time < last_start[process])
|
|
||||||
last_start[process] -= 36000
|
|
||||||
|
|
||||||
var/lastRunTime = time - last_start[process]
|
var/lastRunTime = time - last_start[process]
|
||||||
|
|
||||||
@@ -349,29 +343,23 @@ var/global/datum/controller/processScheduler/processScheduler
|
|||||||
updateCurrentTickData()
|
updateCurrentTickData()
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
return TimeOfHour - currentTickStart
|
return TimeOfTick
|
||||||
|
|
||||||
/datum/controller/processScheduler/proc/updateCurrentTickData()
|
/datum/controller/processScheduler/proc/updateCurrentTickData()
|
||||||
if (world.time > currentTick)
|
if (world.time > currentTick)
|
||||||
// New tick!
|
// New tick!
|
||||||
currentTick = world.time
|
currentTick = world.time
|
||||||
currentTickStart = TimeOfHour
|
|
||||||
updateTimeAllowance()
|
updateTimeAllowance()
|
||||||
cpuAverage = (world.cpu + cpuAverage + cpuAverage) / 3
|
cpuAverage = (world.cpu + cpuAverage + cpuAverage) / 3
|
||||||
|
|
||||||
/datum/controller/processScheduler/proc/updateTimeAllowance()
|
/datum/controller/processScheduler/proc/updateTimeAllowance()
|
||||||
// Time allowance goes down linearly with world.cpu.
|
// Time allowance goes down linearly with world.cpu.
|
||||||
var/tmp/error = cpuAverage - 100
|
var/tmp/error = cpuAverage - 100
|
||||||
var/tmp/timeAllowanceDelta = sign(error) * -0.5 * world.tick_lag * max(0, 0.001 * abs(error))
|
var/tmp/timeAllowanceDelta = SIMPLE_SIGN(error) * -0.5 * world.tick_lag * max(0, 0.001 * abs(error))
|
||||||
|
|
||||||
//timeAllowance = world.tick_lag * min(1, 0.5 * ((200/max(1,cpuAverage)) - 1))
|
//timeAllowance = world.tick_lag * min(1, 0.5 * ((200/max(1,cpuAverage)) - 1))
|
||||||
timeAllowance = min(timeAllowanceMax, max(0, timeAllowance + timeAllowanceDelta))
|
timeAllowance = min(timeAllowanceMax, max(0, timeAllowance + timeAllowanceDelta))
|
||||||
|
|
||||||
/datum/controller/processScheduler/proc/sign(var/x)
|
|
||||||
if (x == 0)
|
|
||||||
return 1
|
|
||||||
return x / abs(x)
|
|
||||||
|
|
||||||
/datum/controller/processScheduler/proc/statProcesses()
|
/datum/controller/processScheduler/proc/statProcesses()
|
||||||
if(!isRunning)
|
if(!isRunning)
|
||||||
stat("Processes", "Scheduler not running")
|
stat("Processes", "Scheduler not running")
|
||||||
@@ -380,3 +368,6 @@ var/global/datum/controller/processScheduler/processScheduler
|
|||||||
stat(null, "[round(cpuAverage, 0.1)] CPU, [round(timeAllowance, 0.1)/10] TA")
|
stat(null, "[round(cpuAverage, 0.1)] CPU, [round(timeAllowance, 0.1)/10] TA")
|
||||||
for(var/datum/controller/process/p in processes)
|
for(var/datum/controller/process/p in processes)
|
||||||
p.statProcess()
|
p.statProcess()
|
||||||
|
|
||||||
|
/datum/controller/processScheduler/proc/getProcess(var/process_name)
|
||||||
|
return nameToProcessMap[process_name]
|
||||||
|
|||||||
@@ -1,56 +0,0 @@
|
|||||||
(function ($) {
|
|
||||||
function setRef(theRef) {
|
|
||||||
ref = theRef;
|
|
||||||
}
|
|
||||||
|
|
||||||
function jax(action, data) {
|
|
||||||
if (typeof data === 'undefined')
|
|
||||||
data = {};
|
|
||||||
var params = [];
|
|
||||||
for (var k in data) {
|
|
||||||
if (data.hasOwnProperty(k)) {
|
|
||||||
params.push(encodeURIComponent(k) + '=' + encodeURIComponent(data[k]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var newLoc = '?src=' + ref + ';action=' + action + ';' + params.join(';');
|
|
||||||
window.location = newLoc;
|
|
||||||
}
|
|
||||||
|
|
||||||
function requestRefresh(e) {
|
|
||||||
jax("refresh", null);
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleRefresh(processTable) {
|
|
||||||
$('#processTable').html(processTable);
|
|
||||||
initProcessTableButtons();
|
|
||||||
}
|
|
||||||
|
|
||||||
function requestKill(e) {
|
|
||||||
var button = $(e.currentTarget);
|
|
||||||
jax("kill", {name: button.data("process-name")});
|
|
||||||
}
|
|
||||||
|
|
||||||
function requestEnable(e) {
|
|
||||||
var button = $(e.currentTarget);
|
|
||||||
jax("enable", {name: button.data("process-name")});
|
|
||||||
}
|
|
||||||
|
|
||||||
function requestDisable(e) {
|
|
||||||
var button = $(e.currentTarget);
|
|
||||||
jax("disable", {name: button.data("process-name")});
|
|
||||||
}
|
|
||||||
|
|
||||||
function initProcessTableButtons() {
|
|
||||||
$(".kill-btn").on("click", requestKill);
|
|
||||||
$(".enable-btn").on("click", requestEnable);
|
|
||||||
$(".disable-btn").on("click", requestDisable);
|
|
||||||
}
|
|
||||||
|
|
||||||
window.setRef = setRef;
|
|
||||||
window.handleRefresh = handleRefresh;
|
|
||||||
|
|
||||||
$(function() {
|
|
||||||
initProcessTableButtons();
|
|
||||||
$('#btn-refresh').on("click", requestRefresh);
|
|
||||||
});
|
|
||||||
}(jQuery));
|
|
||||||
@@ -120,7 +120,7 @@ var/global/list/round_voters = list() // Keeps track of the individuals voting f
|
|||||||
if(choices[current_votes[key]] == .)
|
if(choices[current_votes[key]] == .)
|
||||||
round_voters += key // Keep track of who voted for the winning round.
|
round_voters += key // Keep track of who voted for the winning round.
|
||||||
if(mode != VOTE_GAMEMODE || . == "Extended" || ticker.hide_mode == 0) // Announce Extended gamemode, but not other gamemodes
|
if(mode != VOTE_GAMEMODE || . == "Extended" || ticker.hide_mode == 0) // Announce Extended gamemode, but not other gamemodes
|
||||||
text += "<b>Vote Result: [.]</b>"
|
text += "<b>Vote Result: [mode == VOTE_GAMEMODE ? gamemode_names[.] : .]</b>"
|
||||||
else
|
else
|
||||||
text += "<b>The vote has ended.</b>"
|
text += "<b>The vote has ended.</b>"
|
||||||
|
|
||||||
|
|||||||
@@ -25,11 +25,12 @@
|
|||||||
/datum/uplink_item/item/ammo/tommydrum
|
/datum/uplink_item/item/ammo/tommydrum
|
||||||
name = "Tommygun Drum Magazine (.45)"
|
name = "Tommygun Drum Magazine (.45)"
|
||||||
path = /obj/item/ammo_magazine/tommydrum
|
path = /obj/item/ammo_magazine/tommydrum
|
||||||
item_cost = 4 // Buy 40 bullets, get 10 free!
|
item_cost = 40 // Buy 40 bullets, get 10 free!
|
||||||
|
|
||||||
/datum/uplink_item/item/ammo/darts
|
/datum/uplink_item/item/ammo/darts
|
||||||
name = "Darts"
|
name = "Darts"
|
||||||
path = /obj/item/ammo_magazine/chemdart
|
path = /obj/item/ammo_magazine/chemdart
|
||||||
|
item_cost = 5
|
||||||
|
|
||||||
/datum/uplink_item/item/ammo/sniperammo
|
/datum/uplink_item/item/ammo/sniperammo
|
||||||
name = "Anti-Materiel Rifle ammo box (14.5mm)"
|
name = "Anti-Materiel Rifle ammo box (14.5mm)"
|
||||||
@@ -98,7 +99,9 @@
|
|||||||
/datum/uplink_item/item/ammo/g12/stun
|
/datum/uplink_item/item/ammo/g12/stun
|
||||||
name = "12g Auto-Shotgun Magazine (Stun)"
|
name = "12g Auto-Shotgun Magazine (Stun)"
|
||||||
path = /obj/item/weapon/storage/box/stunshells
|
path = /obj/item/weapon/storage/box/stunshells
|
||||||
|
item_cost = 10 // Discount due to it being LTL.
|
||||||
|
|
||||||
/datum/uplink_item/item/ammo/g12/flash
|
/datum/uplink_item/item/ammo/g12/flash
|
||||||
name = "12g Auto-Shotgun Magazine (Flash)"
|
name = "12g Auto-Shotgun Magazine (Flash)"
|
||||||
path = /obj/item/weapon/storage/box/flashshells
|
path = /obj/item/weapon/storage/box/flashshells
|
||||||
|
item_cost = 10 // Discount due to it being LTL.
|
||||||
@@ -61,17 +61,17 @@
|
|||||||
/datum/uplink_item/item/badassery/surplus/merc2
|
/datum/uplink_item/item/badassery/surplus/merc2
|
||||||
name = "Surplus Crate - 240 TC"
|
name = "Surplus Crate - 240 TC"
|
||||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 2
|
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 2
|
||||||
item_worth = 360
|
item_worth = 540
|
||||||
|
|
||||||
/datum/uplink_item/item/badassery/surplus/merc4
|
/datum/uplink_item/item/badassery/surplus/merc4
|
||||||
name = "Surplus Crate - 480 TC"
|
name = "Surplus Crate - 480 TC"
|
||||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 4
|
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 4
|
||||||
item_worth = 720
|
item_worth = 1200
|
||||||
|
|
||||||
/datum/uplink_item/item/badassery/surplus/merc6
|
/datum/uplink_item/item/badassery/surplus/merc6
|
||||||
name = "Surplus Crate - 720 TC"
|
name = "Surplus Crate - 720 TC"
|
||||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 6
|
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 6
|
||||||
item_worth = 1440
|
item_worth = 1980
|
||||||
|
|
||||||
/datum/uplink_item/item/badassery/surplus/New()
|
/datum/uplink_item/item/badassery/surplus/New()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -31,10 +31,10 @@
|
|||||||
|
|
||||||
/datum/uplink_item/item/stealth_items/voice
|
/datum/uplink_item/item/stealth_items/voice
|
||||||
name = "Voice Changer"
|
name = "Voice Changer"
|
||||||
item_cost = 30
|
item_cost = 15
|
||||||
path = /obj/item/clothing/mask/gas/voice
|
path = /obj/item/clothing/mask/gas/voice
|
||||||
|
|
||||||
/datum/uplink_item/item/stealth_items/camera_floppy
|
/datum/uplink_item/item/stealth_items/camera_floppy
|
||||||
name = "Camera Network Access - Floppy"
|
name = "Camera Network Access - Floppy"
|
||||||
item_cost = 30
|
item_cost = 15
|
||||||
path = /obj/item/weapon/disk/file/cameras/syndicate
|
path = /obj/item/weapon/disk/file/cameras/syndicate
|
||||||
|
|||||||
@@ -26,10 +26,10 @@
|
|||||||
|
|
||||||
/datum/uplink_item/item/stealthy_weapons/cigarette_kit
|
/datum/uplink_item/item/stealthy_weapons/cigarette_kit
|
||||||
name = "Cigarette Kit"
|
name = "Cigarette Kit"
|
||||||
item_cost = 15
|
item_cost = 10
|
||||||
path = /obj/item/weapon/storage/box/syndie_kit/cigarette
|
path = /obj/item/weapon/storage/box/syndie_kit/cigarette
|
||||||
|
|
||||||
/datum/uplink_item/item/stealthy_weapons/random_toxin
|
/datum/uplink_item/item/stealthy_weapons/random_toxin
|
||||||
name = "Random Toxin - Beaker"
|
name = "Random Toxin - Beaker"
|
||||||
item_cost = 15
|
item_cost = 10
|
||||||
path = /obj/item/weapon/storage/box/syndie_kit/toxin
|
path = /obj/item/weapon/storage/box/syndie_kit/toxin
|
||||||
|
|||||||
@@ -14,16 +14,55 @@
|
|||||||
item_cost = 10
|
item_cost = 10
|
||||||
path = /obj/item/weapon/storage/toolbox/syndicate
|
path = /obj/item/weapon/storage/toolbox/syndicate
|
||||||
|
|
||||||
/datum/uplink_item/item/tools/plastique
|
/datum/uplink_item/item/tools/clerical
|
||||||
name = "C-4 (Destroys walls)"
|
name = "Morphic Clerical Kit"
|
||||||
item_cost = 20
|
item_cost = 10
|
||||||
path = /obj/item/weapon/plastique
|
path = /obj/item/weapon/storage/box/syndie_kit/clerical
|
||||||
|
|
||||||
/datum/uplink_item/item/tools/encryptionkey_radio
|
/datum/uplink_item/item/tools/encryptionkey_radio
|
||||||
name = "Encrypted Radio Channel Key"
|
name = "Encrypted Radio Channel Key"
|
||||||
item_cost = 20
|
item_cost = 10
|
||||||
path = /obj/item/device/encryptionkey/syndicate
|
path = /obj/item/device/encryptionkey/syndicate
|
||||||
|
|
||||||
|
/datum/uplink_item/item/tools/money
|
||||||
|
name = "Operations Funding"
|
||||||
|
item_cost = 10
|
||||||
|
path = /obj/item/weapon/storage/secure/briefcase/money
|
||||||
|
desc = "A briefcase with 10,000 untraceable thalers for funding your sneaky activities."
|
||||||
|
|
||||||
|
/datum/uplink_item/item/tools/plastique
|
||||||
|
name = "C-4 (Destroys walls)"
|
||||||
|
item_cost = 10
|
||||||
|
path = /obj/item/weapon/plastique
|
||||||
|
|
||||||
|
/datum/uplink_item/item/tools/duffle
|
||||||
|
name = "Black Duffle Bag"
|
||||||
|
item_cost = 10
|
||||||
|
path = /obj/item/weapon/storage/backpack/dufflebag/syndie
|
||||||
|
|
||||||
|
/datum/uplink_item/item/tools/duffle/med
|
||||||
|
name = "Black Medical Duffle Bag"
|
||||||
|
path = /obj/item/weapon/storage/backpack/dufflebag/syndie/med
|
||||||
|
|
||||||
|
/datum/uplink_item/item/tools/duffle/ammo
|
||||||
|
name = "Black Ammunition Duffle Bag"
|
||||||
|
path = /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo
|
||||||
|
|
||||||
|
/datum/uplink_item/item/tools/space_suit
|
||||||
|
name = "Space Suit"
|
||||||
|
item_cost = 15
|
||||||
|
path = /obj/item/weapon/storage/box/syndie_kit/space
|
||||||
|
|
||||||
|
/datum/uplink_item/item/tools/encryptionkey_binary
|
||||||
|
name = "Binary Translator Key"
|
||||||
|
item_cost = 15
|
||||||
|
path = /obj/item/device/encryptionkey/binary
|
||||||
|
|
||||||
|
/datum/uplink_item/item/tools/packagebomb
|
||||||
|
name = "Package Bomb (Small)"
|
||||||
|
item_cost = 20
|
||||||
|
path = /obj/item/weapon/storage/box/syndie_kit/demolitions
|
||||||
|
|
||||||
/datum/uplink_item/item/tools/hacking_tool
|
/datum/uplink_item/item/tools/hacking_tool
|
||||||
name = "Door Hacking Tool"
|
name = "Door Hacking Tool"
|
||||||
item_cost = 20
|
item_cost = 20
|
||||||
@@ -32,32 +71,11 @@
|
|||||||
When in hacking mode this device will grant full access to any standard airlock within 20 to 40 seconds. \
|
When in hacking mode this device will grant full access to any standard airlock within 20 to 40 seconds. \
|
||||||
This device will also be able to immediately access the last 6 to 8 hacked airlocks."
|
This device will also be able to immediately access the last 6 to 8 hacked airlocks."
|
||||||
|
|
||||||
/datum/uplink_item/item/tools/encryptionkey_binary
|
|
||||||
name = "Binary Translator Key"
|
|
||||||
item_cost = 20
|
|
||||||
path = /obj/item/device/encryptionkey/binary
|
|
||||||
|
|
||||||
/datum/uplink_item/item/tools/emag
|
/datum/uplink_item/item/tools/emag
|
||||||
name = "Cryptographic Sequencer"
|
name = "Cryptographic Sequencer"
|
||||||
item_cost = 30
|
item_cost = 30
|
||||||
path = /obj/item/weapon/card/emag
|
path = /obj/item/weapon/card/emag
|
||||||
|
|
||||||
/datum/uplink_item/item/tools/clerical
|
|
||||||
name = "Morphic Clerical Kit"
|
|
||||||
item_cost = 15
|
|
||||||
path = /obj/item/weapon/storage/box/syndie_kit/clerical
|
|
||||||
|
|
||||||
/datum/uplink_item/item/tools/money
|
|
||||||
name = "Operations Funding"
|
|
||||||
item_cost = 15
|
|
||||||
path = /obj/item/weapon/storage/secure/briefcase/money
|
|
||||||
desc = "A briefcase with 10,000 untraceable thalers for funding your sneaky activities."
|
|
||||||
|
|
||||||
/datum/uplink_item/item/tools/space_suit
|
|
||||||
name = "Space Suit"
|
|
||||||
item_cost = 15
|
|
||||||
path = /obj/item/weapon/storage/box/syndie_kit/space
|
|
||||||
|
|
||||||
/datum/uplink_item/item/tools/thermal
|
/datum/uplink_item/item/tools/thermal
|
||||||
name = "Thermal Imaging Glasses"
|
name = "Thermal Imaging Glasses"
|
||||||
item_cost = 30
|
item_cost = 30
|
||||||
@@ -65,9 +83,21 @@
|
|||||||
|
|
||||||
/datum/uplink_item/item/tools/powersink
|
/datum/uplink_item/item/tools/powersink
|
||||||
name = "Powersink (DANGER!)"
|
name = "Powersink (DANGER!)"
|
||||||
item_cost = 50
|
item_cost = 40
|
||||||
path = /obj/item/device/powersink
|
path = /obj/item/device/powersink
|
||||||
|
|
||||||
|
/datum/uplink_item/item/tools/packagebomb/large
|
||||||
|
name = "Package Bomb (Large)"
|
||||||
|
item_cost = 40
|
||||||
|
path = /obj/item/weapon/storage/box/syndie_kit/demolitions_heavy
|
||||||
|
|
||||||
|
/*
|
||||||
|
/datum/uplink_item/item/tools/packagebomb/huge
|
||||||
|
name = "Package Bomb (Huge)
|
||||||
|
item_cost = 60
|
||||||
|
path = /obj/item/weapon/storage/box/syndie_kit/demolitions_super_heavy
|
||||||
|
*/
|
||||||
|
|
||||||
/datum/uplink_item/item/tools/ai_module
|
/datum/uplink_item/item/tools/ai_module
|
||||||
name = "Hacked AI Upload Module"
|
name = "Hacked AI Upload Module"
|
||||||
item_cost = 60
|
item_cost = 60
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
/datum/uplink_item/item/visible_weapons/combatknife
|
/datum/uplink_item/item/visible_weapons/combatknife
|
||||||
name = "Combat Knife"
|
name = "Combat Knife"
|
||||||
item_cost = 30
|
item_cost = 20
|
||||||
path = /obj/item/weapon/material/hatchet/tacknife/combatknife
|
path = /obj/item/weapon/material/hatchet/tacknife/combatknife
|
||||||
|
|
||||||
/datum/uplink_item/item/visible_weapons/energy_sword
|
/datum/uplink_item/item/visible_weapons/energy_sword
|
||||||
|
|||||||
@@ -41,7 +41,9 @@ var/datum/antagonist/technomancer/technomancers
|
|||||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/disposable_teleporter/free(technomancer_mob), slot_r_store)
|
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/disposable_teleporter/free(technomancer_mob), slot_r_store)
|
||||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/technomancer_catalog(technomancer_mob), slot_l_store)
|
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/technomancer_catalog(technomancer_mob), slot_l_store)
|
||||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/radio/headset(technomancer_mob), slot_l_ear)
|
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/radio/headset(technomancer_mob), slot_l_ear)
|
||||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/technomancer_core(technomancer_mob), slot_back)
|
var/obj/item/weapon/technomancer_core/core = new /obj/item/weapon/technomancer_core(technomancer_mob)
|
||||||
|
technomancer_mob.equip_to_slot_or_del(core, slot_back)
|
||||||
|
technomancer_belongings.Add(core) // So it can be Tracked.
|
||||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/flashlight(technomancer_mob), slot_belt)
|
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/flashlight(technomancer_mob), slot_belt)
|
||||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(technomancer_mob), slot_shoes)
|
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(technomancer_mob), slot_shoes)
|
||||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/head/technomancer/master(technomancer_mob), slot_head)
|
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/head/technomancer/master(technomancer_mob), slot_head)
|
||||||
@@ -59,7 +61,9 @@ var/datum/antagonist/technomancer/technomancers
|
|||||||
technomancer_mob.equip_to_slot_or_del(catalog, slot_l_store)
|
technomancer_mob.equip_to_slot_or_del(catalog, slot_l_store)
|
||||||
|
|
||||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/radio/headset(technomancer_mob), slot_l_ear)
|
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/radio/headset(technomancer_mob), slot_l_ear)
|
||||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/technomancer_core(technomancer_mob), slot_back)
|
var/obj/item/weapon/technomancer_core/core = new /obj/item/weapon/technomancer_core(technomancer_mob)
|
||||||
|
technomancer_mob.equip_to_slot_or_del(core, slot_back)
|
||||||
|
technomancer_belongings.Add(core) // So it can be Tracked.
|
||||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/flashlight(technomancer_mob), slot_belt)
|
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/flashlight(technomancer_mob), slot_belt)
|
||||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(technomancer_mob), slot_shoes)
|
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(technomancer_mob), slot_shoes)
|
||||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/head/technomancer/apprentice(technomancer_mob), slot_head)
|
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/head/technomancer/apprentice(technomancer_mob), slot_head)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "Organic Space Suit"
|
name = "Organic Space Suit"
|
||||||
desc = "We grow an organic suit to protect ourselves from space exposure."
|
desc = "We grow an organic suit to protect ourselves from space exposure."
|
||||||
helptext = "To remove the suit, use the ability again."
|
helptext = "To remove the suit, use the ability again."
|
||||||
ability_icon_state = "ling_space_suit"
|
ability_icon_state = "lingspacesuit"
|
||||||
genomecost = 1
|
genomecost = 1
|
||||||
verbpath = /mob/proc/changeling_spacesuit
|
verbpath = /mob/proc/changeling_spacesuit
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
name = "Chitinous Spacearmor"
|
name = "Chitinous Spacearmor"
|
||||||
desc = "We turn our skin into tough chitin to protect us from damage and space exposure."
|
desc = "We turn our skin into tough chitin to protect us from damage and space exposure."
|
||||||
helptext = "To remove the armor, use the ability again."
|
helptext = "To remove the armor, use the ability again."
|
||||||
ability_icon_state = "ling_armor"
|
ability_icon_state = "lingarmor"
|
||||||
genomecost = 3
|
genomecost = 3
|
||||||
verbpath = /mob/proc/changeling_spacearmor
|
verbpath = /mob/proc/changeling_spacearmor
|
||||||
|
|
||||||
@@ -34,7 +34,6 @@
|
|||||||
/obj/item/clothing/suit/space/changeling
|
/obj/item/clothing/suit/space/changeling
|
||||||
name = "flesh mass"
|
name = "flesh mass"
|
||||||
icon_state = "lingspacesuit"
|
icon_state = "lingspacesuit"
|
||||||
item_state = "lingspacehelmet"
|
|
||||||
desc = "A huge, bulky mass of pressure and temperature-resistant organic tissue, evolved to facilitate space travel."
|
desc = "A huge, bulky mass of pressure and temperature-resistant organic tissue, evolved to facilitate space travel."
|
||||||
flags = STOPPRESSUREDAMAGE //Not THICKMATERIAL because it's organic tissue, so if somebody tries to inject something into it,
|
flags = STOPPRESSUREDAMAGE //Not THICKMATERIAL because it's organic tissue, so if somebody tries to inject something into it,
|
||||||
//it still ends up in your blood. (also balance but muh fluff)
|
//it still ends up in your blood. (also balance but muh fluff)
|
||||||
@@ -55,7 +54,6 @@
|
|||||||
/obj/item/clothing/head/helmet/space/changeling
|
/obj/item/clothing/head/helmet/space/changeling
|
||||||
name = "flesh mass"
|
name = "flesh mass"
|
||||||
icon_state = "lingspacehelmet"
|
icon_state = "lingspacehelmet"
|
||||||
item_state = "lingspacehelmet"
|
|
||||||
desc = "A covering of pressure and temperature-resistant organic tissue with a glass-like chitin front."
|
desc = "A covering of pressure and temperature-resistant organic tissue with a glass-like chitin front."
|
||||||
flags = BLOCKHAIR | STOPPRESSUREDAMAGE //Again, no THICKMATERIAL.
|
flags = BLOCKHAIR | STOPPRESSUREDAMAGE //Again, no THICKMATERIAL.
|
||||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
for(var/limb in H.organs_by_name)
|
for(var/limb in H.organs_by_name)
|
||||||
var/obj/item/organ/external/current_limb = H.organs_by_name[limb]
|
var/obj/item/organ/external/current_limb = H.organs_by_name[limb]
|
||||||
current_limb.undislocate()
|
current_limb.undislocate()
|
||||||
|
current_limb.open = 0
|
||||||
|
|
||||||
C.halloss = 0
|
C.halloss = 0
|
||||||
C.shock_stage = 0 //Pain
|
C.shock_stage = 0 //Pain
|
||||||
|
|||||||
@@ -2,15 +2,30 @@
|
|||||||
name = "Self Respiration"
|
name = "Self Respiration"
|
||||||
desc = "We evolve our body to no longer require drawing oxygen from the atmosphere."
|
desc = "We evolve our body to no longer require drawing oxygen from the atmosphere."
|
||||||
helptext = "We will no longer require internals, and we cannot inhale any gas, including harmful ones."
|
helptext = "We will no longer require internals, and we cannot inhale any gas, including harmful ones."
|
||||||
|
ability_icon_state = "ling_toggle_breath"
|
||||||
genomecost = 0
|
genomecost = 0
|
||||||
isVerb = 0
|
|
||||||
verbpath = /mob/proc/changeling_self_respiration
|
verbpath = /mob/proc/changeling_self_respiration
|
||||||
|
|
||||||
//No breathing required
|
//No breathing required
|
||||||
/mob/proc/changeling_self_respiration()
|
/mob/proc/changeling_self_respiration()
|
||||||
|
set category = "Changeling"
|
||||||
|
set name = "Toggle Breathing"
|
||||||
|
set desc = "We choose whether or not to breathe."
|
||||||
|
|
||||||
|
var/datum/changeling/changeling = changeling_power(0,0,100,UNCONSCIOUS)
|
||||||
|
if(!changeling)
|
||||||
|
return 0
|
||||||
|
|
||||||
if(istype(src,/mob/living/carbon))
|
if(istype(src,/mob/living/carbon))
|
||||||
var/mob/living/carbon/C = src
|
var/mob/living/carbon/C = src
|
||||||
|
if(C.suiciding)
|
||||||
|
src << "You're committing suicide, this isn't going to work."
|
||||||
|
return 0
|
||||||
|
if(C.does_not_breathe == 0)
|
||||||
C.does_not_breathe = 1
|
C.does_not_breathe = 1
|
||||||
src << "<span class='notice'>We stop breathing, as we no longer need to.</span>"
|
src << "<span class='notice'>We stop breathing, as we no longer need to.</span>"
|
||||||
return 1
|
return 1
|
||||||
|
else
|
||||||
|
C.does_not_breathe = 0
|
||||||
|
src << "<span class='notice'>We resume breathing, as we now need to again.</span>"
|
||||||
return 0
|
return 0
|
||||||
@@ -247,7 +247,8 @@ var/list/all_technomancer_presets = typesof(/datum/technomancer/presets) - /datu
|
|||||||
if(desired_object.cost <= budget)
|
if(desired_object.cost <= budget)
|
||||||
budget -= desired_object.cost
|
budget -= desired_object.cost
|
||||||
H << "<span class='notice'>You have just bought \a [desired_object.name].</span>"
|
H << "<span class='notice'>You have just bought \a [desired_object.name].</span>"
|
||||||
new desired_object.obj_path(get_turf(H))
|
var/obj/O = new desired_object.obj_path(get_turf(H))
|
||||||
|
technomancer_belongings.Add(O) // Used for the Track spell.
|
||||||
|
|
||||||
else //Can't afford.
|
else //Can't afford.
|
||||||
H << "<span class='danger'>You can't afford that!</span>"
|
H << "<span class='danger'>You can't afford that!</span>"
|
||||||
|
|||||||
@@ -83,6 +83,9 @@
|
|||||||
energy_delta = energy - old_energy
|
energy_delta = energy - old_energy
|
||||||
if(world.time % 5 == 0) // Maintaining fat lists is expensive, I imagine.
|
if(world.time % 5 == 0) // Maintaining fat lists is expensive, I imagine.
|
||||||
maintain_summon_list()
|
maintain_summon_list()
|
||||||
|
if(wearer && wearer.mind)
|
||||||
|
if(!(technomancers.is_antagonist(wearer.mind))) // In case someone tries to wear a stolen core.
|
||||||
|
wearer.adjust_instability(20)
|
||||||
|
|
||||||
/obj/item/weapon/technomancer_core/proc/regenerate()
|
/obj/item/weapon/technomancer_core/proc/regenerate()
|
||||||
energy = min(max(energy + regen_rate, 0), max_energy)
|
energy = min(max(energy + regen_rate, 0), max_energy)
|
||||||
|
|||||||
11
code/game/gamemodes/technomancer/devices/implants.dm
Normal file
11
code/game/gamemodes/technomancer/devices/implants.dm
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
/datum/technomancer/consumable/freedom_implant
|
||||||
|
name = "Freedom Implant"
|
||||||
|
desc = "A hidden implant which allows one to escape bindings such as handcuffs."
|
||||||
|
cost = 50
|
||||||
|
obj_path = /obj/item/weapon/storage/box/syndie_kit/imp_freedom
|
||||||
|
|
||||||
|
/datum/technomancer/consumable/explosive_implant
|
||||||
|
name = "Explosive Implant"
|
||||||
|
desc = "A hidden implant which will explode if it hears a passphrase."
|
||||||
|
cost = 150
|
||||||
|
obj_path = /obj/item/weapon/storage/box/syndie_kit/imp_explosive
|
||||||
@@ -82,8 +82,7 @@
|
|||||||
/obj/item/weapon/storage/belt/holding
|
/obj/item/weapon/storage/belt/holding
|
||||||
name = "Belt of Holding"
|
name = "Belt of Holding"
|
||||||
desc = "Can hold more than you'd expect."
|
desc = "Can hold more than you'd expect."
|
||||||
icon_state = "emsbelt"
|
icon_state = "ems"
|
||||||
item_state = "emsbelt"
|
|
||||||
max_w_class = 3 // Can hold normal sized items.
|
max_w_class = 3 // Can hold normal sized items.
|
||||||
storage_slots = 14 // Twice the capacity of a typical belt.
|
storage_slots = 14 // Twice the capacity of a typical belt.
|
||||||
max_storage_space = 42
|
max_storage_space = 42
|
||||||
|
|||||||
@@ -205,6 +205,11 @@
|
|||||||
var/radius = max(get_dist(H, src), 1)
|
var/radius = max(get_dist(H, src), 1)
|
||||||
// People next to the source take a third of the instability. Further distance decreases the amount absorbed.
|
// People next to the source take a third of the instability. Further distance decreases the amount absorbed.
|
||||||
var/outgoing_instability = (instability / 3) * ( 1 / (radius**2) )
|
var/outgoing_instability = (instability / 3) * ( 1 / (radius**2) )
|
||||||
|
|
||||||
|
// Energy armor like from the AMI RIG can protect from this.
|
||||||
|
var/armor = getarmor(null, "energy")
|
||||||
|
var/armor_factor = abs( (armor - 100) / 100)
|
||||||
|
outgoing_instability = outgoing_instability * armor_factor
|
||||||
H.adjust_instability(outgoing_instability)
|
H.adjust_instability(outgoing_instability)
|
||||||
|
|
||||||
set_light(distance, distance, l_color = "#C26DDE")
|
set_light(distance, distance, l_color = "#C26DDE")
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
icon_state = "generic"
|
icon_state = "generic"
|
||||||
cast_methods = null
|
cast_methods = null
|
||||||
aspect = ASPECT_FROST
|
aspect = ASPECT_FROST
|
||||||
glow_color = "#FF6A00"
|
glow_color = "#00B3FF"
|
||||||
|
|
||||||
/obj/item/weapon/spell/aura/frost/process()
|
/obj/item/weapon/spell/aura/frost/process()
|
||||||
if(!pay_energy(100))
|
if(!pay_energy(100))
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
glow_color = "#0000FF" //TODO
|
glow_color = "#0000FF" //TODO
|
||||||
|
|
||||||
/obj/item/weapon/spell/aura/unstable/process()
|
/obj/item/weapon/spell/aura/unstable/process()
|
||||||
if(!pay_energy(500))
|
if(!pay_energy(200))
|
||||||
qdel(src)
|
qdel(src)
|
||||||
var/list/nearby_mobs = range(14,owner)
|
var/list/nearby_mobs = range(14,owner)
|
||||||
for(var/mob/living/L in nearby_mobs)
|
for(var/mob/living/L in nearby_mobs)
|
||||||
@@ -25,6 +25,7 @@
|
|||||||
var/damage_to_inflict = max(L.health / L.maxHealth, 0) // Otherwise, those in crit would actually be healed.
|
var/damage_to_inflict = max(L.health / L.maxHealth, 0) // Otherwise, those in crit would actually be healed.
|
||||||
|
|
||||||
var/armor_factor = abs(L.getarmor(null, "energy") - 100)
|
var/armor_factor = abs(L.getarmor(null, "energy") - 100)
|
||||||
|
armor_factor = armor_factor / 100
|
||||||
|
|
||||||
damage_to_inflict = damage_to_inflict * armor_factor
|
damage_to_inflict = damage_to_inflict * armor_factor
|
||||||
|
|
||||||
|
|||||||
@@ -6,11 +6,13 @@
|
|||||||
obj_path = /obj/item/weapon/spell/gambit
|
obj_path = /obj/item/weapon/spell/gambit
|
||||||
|
|
||||||
/var/global/list/all_technomancer_gambit_spells = typesof(/obj/item/weapon/spell) - list(
|
/var/global/list/all_technomancer_gambit_spells = typesof(/obj/item/weapon/spell) - list(
|
||||||
|
/obj/item/weapon/spell,
|
||||||
/obj/item/weapon/spell/gambit,
|
/obj/item/weapon/spell/gambit,
|
||||||
/obj/item/weapon/spell/projectile,
|
/obj/item/weapon/spell/projectile,
|
||||||
/obj/item/weapon/spell/aura,
|
/obj/item/weapon/spell/aura,
|
||||||
/obj/item/weapon/spell/insert,
|
/obj/item/weapon/spell/insert,
|
||||||
/obj/item/weapon/spell/spawner)
|
/obj/item/weapon/spell/spawner,
|
||||||
|
/obj/item/weapon/spell/summon)
|
||||||
|
|
||||||
/obj/item/weapon/spell/gambit
|
/obj/item/weapon/spell/gambit
|
||||||
name = "gambit"
|
name = "gambit"
|
||||||
|
|||||||
@@ -46,10 +46,19 @@
|
|||||||
|
|
||||||
/obj/item/weapon/spell/illusion/on_use_cast(mob/user)
|
/obj/item/weapon/spell/illusion/on_use_cast(mob/user)
|
||||||
if(illusion)
|
if(illusion)
|
||||||
|
var/choice = alert(user, "Would you like to have \the [illusion] speak, or do an emote?", "Illusion", "Speak","Emote","Cancel")
|
||||||
|
switch(choice)
|
||||||
|
if("Cancel")
|
||||||
|
return
|
||||||
|
if("Speak")
|
||||||
var/what_to_say = input(user, "What do you want \the [illusion] to say?","Illusion Speak") as null|text
|
var/what_to_say = input(user, "What do you want \the [illusion] to say?","Illusion Speak") as null|text
|
||||||
what_to_say = sanitize(what_to_say)
|
//what_to_say = sanitize(what_to_say) //Sanitize occurs inside say() already.
|
||||||
if(what_to_say)
|
if(what_to_say)
|
||||||
illusion.say(what_to_say)
|
illusion.say(what_to_say)
|
||||||
|
if("Emote")
|
||||||
|
var/what_to_emote = input(user, "What do you want \the [illusion] to do?","Illusion Emote") as null|text
|
||||||
|
if(what_to_emote)
|
||||||
|
illusion.emote(what_to_emote)
|
||||||
|
|
||||||
/obj/item/weapon/spell/illusion/Destroy()
|
/obj/item/weapon/spell/illusion/Destroy()
|
||||||
if(illusion)
|
if(illusion)
|
||||||
|
|||||||
@@ -33,15 +33,24 @@
|
|||||||
AM.forceMove(get_turf(src))
|
AM.forceMove(get_turf(src))
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
/obj/effect/phase_shift/relaymove(mob/user as mob)
|
||||||
|
if(user.stat)
|
||||||
|
return
|
||||||
|
|
||||||
|
user << "<span class='notice'>You step out of the rift.</span>"
|
||||||
|
user.forceMove(get_turf(src))
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
/obj/item/weapon/spell/phase_shift/on_use_cast(mob/user)
|
/obj/item/weapon/spell/phase_shift/on_use_cast(mob/user)
|
||||||
if(isturf(user.loc)) //Check if we're not already in a rift.
|
if(isturf(user.loc)) //Check if we're not already in a rift.
|
||||||
|
if(pay_energy(2000))
|
||||||
var/obj/effect/phase_shift/PS = new(get_turf(user))
|
var/obj/effect/phase_shift/PS = new(get_turf(user))
|
||||||
visible_message("<span class='warning'>[user] vanishes into a pink rift!</span>")
|
visible_message("<span class='warning'>[user] vanishes into a pink rift!</span>")
|
||||||
user << "<span class='info'>You create an unstable rift, and go through it. Be sure to not stay too long.</span>"
|
user << "<span class='info'>You create an unstable rift, and go through it. Be sure to not stay too long.</span>"
|
||||||
user.forceMove(PS)
|
user.forceMove(PS)
|
||||||
else //We're already in a rift, time to get out.
|
adjust_instability(10)
|
||||||
if(istype(loc, /obj/effect/phase_shift))
|
|
||||||
var/obj/effect/phase_shift/PS = user.loc
|
|
||||||
qdel(PS) //Ejecting is handled in Destory()
|
|
||||||
visible_message("<span class='warning'>[user] reappears from the rift as it collapses.</span>")
|
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
else
|
||||||
|
user << "<span class='warning'>You don't have enough energy to make a rift!</span>"
|
||||||
|
else //We're already in a rift or something like a closet.
|
||||||
|
user << "<span class='warning'>Making a rift here would probably be a bad idea.</span>"
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
icon_state = "bluespace"
|
icon_state = "bluespace"
|
||||||
// nodamage = 1
|
// nodamage = 1
|
||||||
damage_type = BURN
|
damage_type = BURN
|
||||||
|
armor_penetration = 100
|
||||||
|
|
||||||
/obj/item/weapon/spell/projectile/overload/on_ranged_cast(atom/hit_atom, mob/living/user)
|
/obj/item/weapon/spell/projectile/overload/on_ranged_cast(atom/hit_atom, mob/living/user)
|
||||||
energy_cost_per_shot = round(core.max_energy * 0.15)
|
energy_cost_per_shot = round(core.max_energy * 0.15)
|
||||||
|
|||||||
@@ -43,6 +43,8 @@
|
|||||||
/mob/living/simple_animal/ward/death()
|
/mob/living/simple_animal/ward/death()
|
||||||
if(creator)
|
if(creator)
|
||||||
creator << "<span class='danger'>Your ward inside [get_area(src)] was killed!</span>"
|
creator << "<span class='danger'>Your ward inside [get_area(src)] was killed!</span>"
|
||||||
|
..()
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
/mob/living/simple_animal/ward/proc/expire()
|
/mob/living/simple_animal/ward/proc/expire()
|
||||||
if(creator && src)
|
if(creator && src)
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ var/list/technomancer_belongings = list()
|
|||||||
for(var/mob/living/L in mob_list)
|
for(var/mob/living/L in mob_list)
|
||||||
if(!is_ally(L) && !can_track_non_allies)
|
if(!is_ally(L) && !can_track_non_allies)
|
||||||
continue
|
continue
|
||||||
|
if(L == user)
|
||||||
|
continue
|
||||||
mob_choices += L
|
mob_choices += L
|
||||||
var/choice = input(user,"Decide what or who to track.","Tracking") as null|anything in object_choices + mob_choices
|
var/choice = input(user,"Decide what or who to track.","Tracking") as null|anything in object_choices + mob_choices
|
||||||
if(choice)
|
if(choice)
|
||||||
@@ -58,9 +60,9 @@ var/list/technomancer_belongings = list()
|
|||||||
icon_state = "track_unknown"
|
icon_state = "track_unknown"
|
||||||
|
|
||||||
else
|
else
|
||||||
set_dir(get_dir(src,tracked))
|
set_dir(get_dir(src,get_turf(tracked)))
|
||||||
|
|
||||||
switch(get_dist(src,tracked))
|
switch(get_dist(src,get_turf(tracked)))
|
||||||
if(0)
|
if(0)
|
||||||
icon_state = "track_direct"
|
icon_state = "track_direct"
|
||||||
if(1 to 8)
|
if(1 to 8)
|
||||||
|
|||||||
@@ -343,10 +343,12 @@ var/global/datum/controller/occupations/job_master
|
|||||||
permitted = 1
|
permitted = 1
|
||||||
|
|
||||||
if(G.whitelisted && !is_alien_whitelisted(H, all_species[G.whitelisted]))
|
if(G.whitelisted && !is_alien_whitelisted(H, all_species[G.whitelisted]))
|
||||||
|
|
||||||
|
//if(G.whitelisted && (G.whitelisted != H.species.name || !is_alien_whitelisted(H, G.whitelisted)))
|
||||||
permitted = 0
|
permitted = 0
|
||||||
|
|
||||||
if(!permitted)
|
if(!permitted)
|
||||||
H << "<span class='warning'>Your current job or whitelist status does not permit you to spawn with [thing]!</span>"
|
H << "<span class='warning'>Your current species, job or whitelist status does not permit you to spawn with [thing]!</span>"
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if(G.slot && !(G.slot in custom_equip_slots))
|
if(G.slot && !(G.slot in custom_equip_slots))
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ var/list/whitelist = list()
|
|||||||
/proc/whitelist_overrides(mob/M)
|
/proc/whitelist_overrides(mob/M)
|
||||||
if(!config.usealienwhitelist)
|
if(!config.usealienwhitelist)
|
||||||
return 1
|
return 1
|
||||||
if(check_rights(R_ADMIN, 0))
|
if(check_rights(R_ADMIN, 0, M))
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -419,7 +419,7 @@
|
|||||||
visible_message("<span class='notice'>\The [src] rattles and prints out a sheet of paper.</span>")
|
visible_message("<span class='notice'>\The [src] rattles and prints out a sheet of paper.</span>")
|
||||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc)
|
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc)
|
||||||
P.info = "<CENTER><B>Body Scan - [href_list["name"]]</B></CENTER><BR>"
|
P.info = "<CENTER><B>Body Scan - [href_list["name"]]</B></CENTER><BR>"
|
||||||
P.info += "<b>Time of scan:</b> [worldtime2text(world.time)]<br><br>"
|
P.info += "<b>Time of scan:</b> [worldtime2stationtime(world.time)]<br><br>"
|
||||||
P.info += "[printing_text]"
|
P.info += "[printing_text]"
|
||||||
P.info += "<br><br><b>Notes:</b><br>"
|
P.info += "<br><br><b>Notes:</b><br>"
|
||||||
P.name = "Body Scan - [href_list["name"]]"
|
P.name = "Body Scan - [href_list["name"]]"
|
||||||
|
|||||||
@@ -250,7 +250,7 @@
|
|||||||
|
|
||||||
var/obj/item/weapon/paper/P = new(loc)
|
var/obj/item/weapon/paper/P = new(loc)
|
||||||
if (mode)
|
if (mode)
|
||||||
P.name = text("crew manifest ([])", worldtime2text())
|
P.name = text("crew manifest ([])", stationtime2text())
|
||||||
P.info = {"<h4>Crew Manifest</h4>
|
P.info = {"<h4>Crew Manifest</h4>
|
||||||
<br>
|
<br>
|
||||||
[data_core ? data_core.get_manifest(0) : ""]
|
[data_core ? data_core.get_manifest(0) : ""]
|
||||||
|
|||||||
@@ -20,17 +20,17 @@
|
|||||||
/obj/item/weapon/card/id/guest/examine(mob/user)
|
/obj/item/weapon/card/id/guest/examine(mob/user)
|
||||||
..(user)
|
..(user)
|
||||||
if (world.time < expiration_time)
|
if (world.time < expiration_time)
|
||||||
user << "<span class='notice'>This pass expires at [worldtime2text(expiration_time)].</span>"
|
user << "<span class='notice'>This pass expires at [worldtime2stationtime(expiration_time)].</span>"
|
||||||
else
|
else
|
||||||
user << "<span class='warning'>It expired at [worldtime2text(expiration_time)].</span>"
|
user << "<span class='warning'>It expired at [worldtime2stationtime(expiration_time)].</span>"
|
||||||
|
|
||||||
/obj/item/weapon/card/id/guest/read()
|
/obj/item/weapon/card/id/guest/read()
|
||||||
if(!Adjacent(usr))
|
if(!Adjacent(usr))
|
||||||
return //Too far to read
|
return //Too far to read
|
||||||
if (world.time > expiration_time)
|
if (world.time > expiration_time)
|
||||||
usr << "<span class='notice'>This pass expired at [worldtime2text(expiration_time)].</span>"
|
usr << "<span class='notice'>This pass expired at [worldtime2stationtime(expiration_time)].</span>"
|
||||||
else
|
else
|
||||||
usr << "<span class='notice'>This pass expires at [worldtime2text(expiration_time)].</span>"
|
usr << "<span class='notice'>This pass expires at [worldtime2stationtime(expiration_time)].</span>"
|
||||||
|
|
||||||
usr << "<span class='notice'>It grants access to following areas:</span>"
|
usr << "<span class='notice'>It grants access to following areas:</span>"
|
||||||
for (var/A in temp_access)
|
for (var/A in temp_access)
|
||||||
@@ -207,13 +207,13 @@
|
|||||||
if ("issue")
|
if ("issue")
|
||||||
if (giver)
|
if (giver)
|
||||||
var/number = add_zero("[rand(0,9999)]", 4)
|
var/number = add_zero("[rand(0,9999)]", 4)
|
||||||
var/entry = "\[[worldtime2text()]\] Pass #[number] issued by [giver.registered_name] ([giver.assignment]) to [giv_name]. Reason: [reason]. Grants access to following areas: "
|
var/entry = "\[[stationtime2text()]\] Pass #[number] issued by [giver.registered_name] ([giver.assignment]) to [giv_name]. Reason: [reason]. Grants access to following areas: "
|
||||||
for (var/i=1 to accesses.len)
|
for (var/i=1 to accesses.len)
|
||||||
var/A = accesses[i]
|
var/A = accesses[i]
|
||||||
if (A)
|
if (A)
|
||||||
var/area = get_access_desc(A)
|
var/area = get_access_desc(A)
|
||||||
entry += "[i > 1 ? ", [area]" : "[area]"]"
|
entry += "[i > 1 ? ", [area]" : "[area]"]"
|
||||||
entry += ". Expires at [worldtime2text(world.time + duration*10*60)]."
|
entry += ". Expires at [worldtime2stationtime(world.time + duration*10*60)]."
|
||||||
internal_log.Add(entry)
|
internal_log.Add(entry)
|
||||||
|
|
||||||
var/obj/item/weapon/card/id/guest/pass = new(src.loc)
|
var/obj/item/weapon/card/id/guest/pass = new(src.loc)
|
||||||
|
|||||||
@@ -454,7 +454,7 @@
|
|||||||
var/counter = 1
|
var/counter = 1
|
||||||
while(src.active2.fields[text("com_[]", counter)])
|
while(src.active2.fields[text("com_[]", counter)])
|
||||||
counter++
|
counter++
|
||||||
src.active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD")] [worldtime2text()], [game_year]<BR>[t1]")
|
src.active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD")] [stationtime2text()], [game_year]<BR>[t1]")
|
||||||
|
|
||||||
if (href_list["del_c"])
|
if (href_list["del_c"])
|
||||||
if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])]))
|
if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])]))
|
||||||
|
|||||||
@@ -391,7 +391,7 @@ What a mess.*/
|
|||||||
var/counter = 1
|
var/counter = 1
|
||||||
while(active2.fields[text("com_[]", counter)])
|
while(active2.fields[text("com_[]", counter)])
|
||||||
counter++
|
counter++
|
||||||
active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD")] [worldtime2text()], [game_year]<BR>[t1]")
|
active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD")] [stationtime2text()], [game_year]<BR>[t1]")
|
||||||
|
|
||||||
if ("Delete Record (ALL)")
|
if ("Delete Record (ALL)")
|
||||||
if (active1)
|
if (active1)
|
||||||
|
|||||||
@@ -461,7 +461,7 @@
|
|||||||
var/counter = 1
|
var/counter = 1
|
||||||
while(src.active2.fields[text("com_[]", counter)])
|
while(src.active2.fields[text("com_[]", counter)])
|
||||||
counter++
|
counter++
|
||||||
src.active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD")] [worldtime2text()], [game_year]<BR>[t1]")
|
src.active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD")] [stationtime2text()], [game_year]<BR>[t1]")
|
||||||
|
|
||||||
if (href_list["del_c"])
|
if (href_list["del_c"])
|
||||||
if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])]))
|
if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])]))
|
||||||
|
|||||||
@@ -410,7 +410,7 @@ What a mess.*/
|
|||||||
var/counter = 1
|
var/counter = 1
|
||||||
while(active2.fields[text("com_[]", counter)])
|
while(active2.fields[text("com_[]", counter)])
|
||||||
counter++
|
counter++
|
||||||
active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD")] [worldtime2text()], [game_year]<BR>[t1]")
|
active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD")] [stationtime2text()], [game_year]<BR>[t1]")
|
||||||
|
|
||||||
if ("Delete Record (ALL)")
|
if ("Delete Record (ALL)")
|
||||||
if (active1)
|
if (active1)
|
||||||
|
|||||||
@@ -201,7 +201,7 @@
|
|||||||
T.amount = "[transaction_amount]"
|
T.amount = "[transaction_amount]"
|
||||||
T.source_terminal = src.name
|
T.source_terminal = src.name
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
D.transaction_log.Add(T)
|
D.transaction_log.Add(T)
|
||||||
//
|
//
|
||||||
T = new()
|
T = new()
|
||||||
@@ -210,7 +210,7 @@
|
|||||||
T.amount = "[transaction_amount]"
|
T.amount = "[transaction_amount]"
|
||||||
T.source_terminal = src.name
|
T.source_terminal = src.name
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
vendor_account.transaction_log.Add(T)
|
vendor_account.transaction_log.Add(T)
|
||||||
|
|
||||||
newlap = new /obj/machinery/computer3/laptop/vended(src.loc)
|
newlap = new /obj/machinery/computer3/laptop/vended(src.loc)
|
||||||
@@ -350,7 +350,7 @@
|
|||||||
T.amount = "[transaction_amount]"
|
T.amount = "[transaction_amount]"
|
||||||
T.source_terminal = src.name
|
T.source_terminal = src.name
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
D.transaction_log.Add(T)
|
D.transaction_log.Add(T)
|
||||||
//
|
//
|
||||||
T = new()
|
T = new()
|
||||||
@@ -359,7 +359,7 @@
|
|||||||
T.amount = "[transaction_amount]"
|
T.amount = "[transaction_amount]"
|
||||||
T.source_terminal = src.name
|
T.source_terminal = src.name
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
vendor_account.transaction_log.Add(T)
|
vendor_account.transaction_log.Add(T)
|
||||||
|
|
||||||
qdel(relap)
|
qdel(relap)
|
||||||
|
|||||||
@@ -466,8 +466,8 @@
|
|||||||
|
|
||||||
|
|
||||||
//Make an announcement and log the person entering storage.
|
//Make an announcement and log the person entering storage.
|
||||||
control_computer.frozen_crew += "[occupant.real_name], [occupant.mind.role_alt_title] - [worldtime2text()]"
|
control_computer.frozen_crew += "[occupant.real_name], [occupant.mind.role_alt_title] - [stationtime2text()]"
|
||||||
control_computer._admin_logs += "[key_name(occupant)] ([occupant.mind.role_alt_title]) at [worldtime2text()]"
|
control_computer._admin_logs += "[key_name(occupant)] ([occupant.mind.role_alt_title]) at [stationtime2text()]"
|
||||||
log_and_message_admins("[key_name(occupant)] ([occupant.mind.role_alt_title]) entered cryostorage.")
|
log_and_message_admins("[key_name(occupant)] ([occupant.mind.role_alt_title]) entered cryostorage.")
|
||||||
|
|
||||||
announce.autosay("[occupant.real_name], [occupant.mind.role_alt_title], [on_store_message]", "[on_store_name]")
|
announce.autosay("[occupant.real_name], [occupant.mind.role_alt_title], [on_store_message]", "[on_store_name]")
|
||||||
|
|||||||
@@ -412,6 +412,8 @@ About the new airlock wires panel:
|
|||||||
if(electrified_until && isAllPowerLoss())
|
if(electrified_until && isAllPowerLoss())
|
||||||
electrify(0)
|
electrify(0)
|
||||||
|
|
||||||
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/door/airlock/proc/loseBackupPower()
|
/obj/machinery/door/airlock/proc/loseBackupPower()
|
||||||
backup_power_lost_until = backupPowerCablesCut() ? -1 : world.time + SecondsToTicks(60)
|
backup_power_lost_until = backupPowerCablesCut() ? -1 : world.time + SecondsToTicks(60)
|
||||||
|
|
||||||
@@ -419,6 +421,8 @@ About the new airlock wires panel:
|
|||||||
if(electrified_until && isAllPowerLoss())
|
if(electrified_until && isAllPowerLoss())
|
||||||
electrify(0)
|
electrify(0)
|
||||||
|
|
||||||
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/door/airlock/proc/regainMainPower()
|
/obj/machinery/door/airlock/proc/regainMainPower()
|
||||||
if(!mainPowerCablesCut())
|
if(!mainPowerCablesCut())
|
||||||
main_power_lost_until = 0
|
main_power_lost_until = 0
|
||||||
@@ -426,11 +430,15 @@ About the new airlock wires panel:
|
|||||||
if(!backup_power_lost_until)
|
if(!backup_power_lost_until)
|
||||||
backup_power_lost_until = -1
|
backup_power_lost_until = -1
|
||||||
|
|
||||||
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/door/airlock/proc/regainBackupPower()
|
/obj/machinery/door/airlock/proc/regainBackupPower()
|
||||||
if(!backupPowerCablesCut())
|
if(!backupPowerCablesCut())
|
||||||
// Restore backup power only if main power is offline, otherwise permanently disable
|
// Restore backup power only if main power is offline, otherwise permanently disable
|
||||||
backup_power_lost_until = main_power_lost_until == 0 ? -1 : 0
|
backup_power_lost_until = main_power_lost_until == 0 ? -1 : 0
|
||||||
|
|
||||||
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/door/airlock/proc/electrify(var/duration, var/feedback = 0)
|
/obj/machinery/door/airlock/proc/electrify(var/duration, var/feedback = 0)
|
||||||
var/message = ""
|
var/message = ""
|
||||||
if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY) && arePowerSystemsOn())
|
if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY) && arePowerSystemsOn())
|
||||||
|
|||||||
@@ -64,6 +64,7 @@
|
|||||||
bound_height = width * world.icon_size
|
bound_height = width * world.icon_size
|
||||||
|
|
||||||
health = maxhealth
|
health = maxhealth
|
||||||
|
update_icon()
|
||||||
|
|
||||||
update_nearby_tiles(need_rebuild=1)
|
update_nearby_tiles(need_rebuild=1)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -24,10 +24,16 @@
|
|||||||
src.base_state = src.icon_state
|
src.base_state = src.icon_state
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/obj/machinery/door/window/update_icon()
|
||||||
|
if(density)
|
||||||
|
icon_state = base_state
|
||||||
|
else
|
||||||
|
icon_state = "[base_state]open"
|
||||||
|
|
||||||
/obj/machinery/door/window/proc/shatter(var/display_message = 1)
|
/obj/machinery/door/window/proc/shatter(var/display_message = 1)
|
||||||
new /obj/item/weapon/material/shard(src.loc)
|
new /obj/item/weapon/material/shard(src.loc)
|
||||||
var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src.loc)
|
new /obj/item/weapon/material/shard(src.loc)
|
||||||
CC.amount = 2
|
new /obj/item/stack/cable_coil(src.loc, 1)
|
||||||
var/obj/item/weapon/airlock_electronics/ae
|
var/obj/item/weapon/airlock_electronics/ae
|
||||||
if(!electronics)
|
if(!electronics)
|
||||||
ae = new/obj/item/weapon/airlock_electronics( src.loc )
|
ae = new/obj/item/weapon/airlock_electronics( src.loc )
|
||||||
@@ -103,43 +109,39 @@
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
/obj/machinery/door/window/open()
|
/obj/machinery/door/window/open()
|
||||||
if (src.operating == 1) //doors can still open when emag-disabled
|
if (operating == 1) //doors can still open when emag-disabled
|
||||||
return 0
|
return 0
|
||||||
if (!ticker)
|
if (!ticker)
|
||||||
return 0
|
return 0
|
||||||
if(!src.operating) //in case of emag
|
if (!operating) //in case of emag
|
||||||
src.operating = 1
|
operating = 1
|
||||||
flick(text("[]opening", src.base_state), src)
|
flick(text("[src.base_state]opening"), src)
|
||||||
playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1)
|
playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1)
|
||||||
src.icon_state = text("[]open", src.base_state)
|
|
||||||
sleep(10)
|
sleep(10)
|
||||||
|
|
||||||
explosion_resistance = 0
|
explosion_resistance = 0
|
||||||
src.density = 0
|
density = 0
|
||||||
// src.sd_SetOpacity(0) //TODO: why is this here? Opaque windoors? ~Carn
|
update_icon()
|
||||||
update_nearby_tiles()
|
update_nearby_tiles()
|
||||||
|
|
||||||
if(operating == 1) //emag again
|
if(operating == 1) //emag again
|
||||||
src.operating = 0
|
operating = 0
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/obj/machinery/door/window/close()
|
/obj/machinery/door/window/close()
|
||||||
if (src.operating)
|
if (operating)
|
||||||
return 0
|
return 0
|
||||||
src.operating = 1
|
src.operating = 1
|
||||||
flick(text("[]closing", src.base_state), src)
|
flick(text("[]closing", src.base_state), src)
|
||||||
playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1)
|
playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1)
|
||||||
src.icon_state = src.base_state
|
|
||||||
|
|
||||||
src.density = 1
|
density = 1
|
||||||
|
update_icon()
|
||||||
explosion_resistance = initial(explosion_resistance)
|
explosion_resistance = initial(explosion_resistance)
|
||||||
// if(src.visible)
|
|
||||||
// SetOpacity(1) //TODO: why is this here? Opaque windoors? ~Carn
|
|
||||||
update_nearby_tiles()
|
update_nearby_tiles()
|
||||||
|
|
||||||
sleep(10)
|
sleep(10)
|
||||||
|
operating = 0
|
||||||
src.operating = 0
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/obj/machinery/door/window/take_damage(var/damage)
|
/obj/machinery/door/window/take_damage(var/damage)
|
||||||
@@ -197,12 +199,14 @@
|
|||||||
var/obj/structure/windoor_assembly/wa = new/obj/structure/windoor_assembly(src.loc)
|
var/obj/structure/windoor_assembly/wa = new/obj/structure/windoor_assembly(src.loc)
|
||||||
if (istype(src, /obj/machinery/door/window/brigdoor))
|
if (istype(src, /obj/machinery/door/window/brigdoor))
|
||||||
wa.secure = "secure_"
|
wa.secure = "secure_"
|
||||||
wa.name = "Secure Wired Windoor Assembly"
|
wa.name = "secure wired windoor assembly"
|
||||||
else
|
else
|
||||||
wa.name = "Wired Windoor Assembly"
|
wa.name = "wired windoor assembly"
|
||||||
if (src.base_state == "right" || src.base_state == "rightsecure")
|
if (src.base_state == "right" || src.base_state == "rightsecure")
|
||||||
wa.facing = "r"
|
wa.facing = "r"
|
||||||
wa.set_dir(src.dir)
|
wa.set_dir(src.dir)
|
||||||
|
wa.anchored = 1
|
||||||
|
wa.created_name = name
|
||||||
wa.state = "02"
|
wa.state = "02"
|
||||||
wa.update_icon()
|
wa.update_icon()
|
||||||
|
|
||||||
@@ -223,7 +227,7 @@
|
|||||||
ae.icon_state = "door_electronics_smoked"
|
ae.icon_state = "door_electronics_smoked"
|
||||||
|
|
||||||
operating = 0
|
operating = 0
|
||||||
shatter(src)
|
qdel(src)
|
||||||
return
|
return
|
||||||
|
|
||||||
//If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway)
|
//If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway)
|
||||||
@@ -262,6 +266,10 @@
|
|||||||
maxhealth = 300
|
maxhealth = 300
|
||||||
health = 300.0 //Stronger doors for prison (regular window door health is 150)
|
health = 300.0 //Stronger doors for prison (regular window door health is 150)
|
||||||
|
|
||||||
|
/obj/machinery/door/window/brigdoor/shatter()
|
||||||
|
new /obj/item/stack/rods(src.loc, 2)
|
||||||
|
..()
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/door/window/northleft
|
/obj/machinery/door/window/northleft
|
||||||
dir = NORTH
|
dir = NORTH
|
||||||
|
|||||||
@@ -76,7 +76,7 @@
|
|||||||
var/datum/feed_message/newMsg = new /datum/feed_message
|
var/datum/feed_message/newMsg = new /datum/feed_message
|
||||||
newMsg.author = author
|
newMsg.author = author
|
||||||
newMsg.body = msg
|
newMsg.body = msg
|
||||||
newMsg.time_stamp = "[worldtime2text()]"
|
newMsg.time_stamp = "[stationtime2text()]"
|
||||||
newMsg.is_admin_message = adminMessage
|
newMsg.is_admin_message = adminMessage
|
||||||
if(message_type)
|
if(message_type)
|
||||||
newMsg.message_type = message_type
|
newMsg.message_type = message_type
|
||||||
|
|||||||
@@ -150,7 +150,7 @@
|
|||||||
return 1
|
return 1
|
||||||
if(STATUS_DISPLAY_TIME)
|
if(STATUS_DISPLAY_TIME)
|
||||||
message1 = "TIME"
|
message1 = "TIME"
|
||||||
message2 = worldtime2text()
|
message2 = stationtime2text()
|
||||||
update_display(message1, message2)
|
update_display(message1, message2)
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -23,12 +23,6 @@ var/list/ai_status_emotions = list(
|
|||||||
"Dorfy" = new /datum/ai_emotion("ai_urist"),
|
"Dorfy" = new /datum/ai_emotion("ai_urist"),
|
||||||
"Facepalm" = new /datum/ai_emotion("ai_facepalm"),
|
"Facepalm" = new /datum/ai_emotion("ai_facepalm"),
|
||||||
"Friend Computer" = new /datum/ai_emotion("ai_friend"),
|
"Friend Computer" = new /datum/ai_emotion("ai_friend"),
|
||||||
"Your Best Friend" = new /datum/ai_emotion("ai_flowey"),
|
|
||||||
"Your Best Nightmare" = new /datum/ai_emotion("ai_floweymalf"),
|
|
||||||
"Soviet Union" = new /datum/ai_emotion("ai_soviet"),
|
|
||||||
"Holly" = new /datum/ai_emotion("ai_holly"),
|
|
||||||
"Hilly" = new /datum/ai_emotion("ai_hilly"),
|
|
||||||
"Fish" = new /datum/ai_emotion("ai_fishtank"),
|
|
||||||
"Tribunal" = new /datum/ai_emotion("ai_tribunal", "serithi"),
|
"Tribunal" = new /datum/ai_emotion("ai_tribunal", "serithi"),
|
||||||
"Tribunal Malfunctioning" = new /datum/ai_emotion("ai_tribunal_malf", "serithi")
|
"Tribunal Malfunctioning" = new /datum/ai_emotion("ai_tribunal_malf", "serithi")
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -314,7 +314,7 @@
|
|||||||
T.amount = "[currently_vending.price]"
|
T.amount = "[currently_vending.price]"
|
||||||
T.source_terminal = src.name
|
T.source_terminal = src.name
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
customer_account.transaction_log.Add(T)
|
customer_account.transaction_log.Add(T)
|
||||||
|
|
||||||
// Give the vendor the money. We use the account owner name, which means
|
// Give the vendor the money. We use the account owner name, which means
|
||||||
@@ -337,7 +337,7 @@
|
|||||||
T.amount = "[currently_vending.price]"
|
T.amount = "[currently_vending.price]"
|
||||||
T.source_terminal = src.name
|
T.source_terminal = src.name
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
vendor_account.transaction_log.Add(T)
|
vendor_account.transaction_log.Add(T)
|
||||||
|
|
||||||
/obj/machinery/vending/attack_ai(mob/user as mob)
|
/obj/machinery/vending/attack_ai(mob/user as mob)
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
|||||||
|
|
||||||
/obj/item/device/pda/examine(mob/user)
|
/obj/item/device/pda/examine(mob/user)
|
||||||
if(..(user, 1))
|
if(..(user, 1))
|
||||||
user << "The time [worldtime2text()] is displayed in the corner of the screen."
|
user << "The time [stationtime2text()] is displayed in the corner of the screen."
|
||||||
|
|
||||||
/obj/item/device/pda/medical
|
/obj/item/device/pda/medical
|
||||||
default_cartridge = /obj/item/weapon/cartridge/medical
|
default_cartridge = /obj/item/weapon/cartridge/medical
|
||||||
@@ -523,7 +523,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
|||||||
cartdata["charges"] = cartridge.charges ? cartridge.charges : 0
|
cartdata["charges"] = cartridge.charges ? cartridge.charges : 0
|
||||||
data["cartridge"] = cartdata
|
data["cartridge"] = cartdata
|
||||||
|
|
||||||
data["stationTime"] = worldtime2text()
|
data["stationTime"] = stationtime2text()
|
||||||
data["new_Message"] = new_message
|
data["new_Message"] = new_message
|
||||||
data["new_News"] = new_news
|
data["new_News"] = new_news
|
||||||
|
|
||||||
|
|||||||
@@ -334,7 +334,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
|||||||
data["video_comm"] = video_source ? "\ref[video_source.loc]" : null
|
data["video_comm"] = video_source ? "\ref[video_source.loc]" : null
|
||||||
data["imContacts"] = im_contacts_ui
|
data["imContacts"] = im_contacts_ui
|
||||||
data["imList"] = im_list_ui
|
data["imList"] = im_list_ui
|
||||||
data["time"] = worldtime2text()
|
data["time"] = stationtime2text()
|
||||||
data["ring"] = ringer
|
data["ring"] = ringer
|
||||||
data["homeScreen"] = modules_ui
|
data["homeScreen"] = modules_ui
|
||||||
data["note"] = note // current notes
|
data["note"] = note // current notes
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
w_class = 4
|
w_class = 4
|
||||||
icon = 'icons/obj/device.dmi'
|
icon = 'icons/obj/device.dmi'
|
||||||
icon_state = "suitcooler0"
|
icon_state = "suitcooler0"
|
||||||
slot_flags = SLOT_BACK //you can carry it on your back if you want, but it won't do anything unless attached to suit storage
|
slot_flags = SLOT_BACK
|
||||||
|
|
||||||
//copied from tank.dm
|
//copied from tank.dm
|
||||||
flags = CONDUCT
|
flags = CONDUCT
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
var/on = 0 //is it turned on?
|
var/on = 0 //is it turned on?
|
||||||
var/cover_open = 0 //is the cover open?
|
var/cover_open = 0 //is the cover open?
|
||||||
var/obj/item/weapon/cell/cell
|
var/obj/item/weapon/cell/cell
|
||||||
var/max_cooling = 12 // in degrees per second - probably don't need to mess with heat capacity here
|
var/max_cooling = 15 // in degrees per second - probably don't need to mess with heat capacity here
|
||||||
var/charge_consumption = 3 // charge per second at max_cooling
|
var/charge_consumption = 3 // charge per second at max_cooling
|
||||||
var/thermostat = T20C
|
var/thermostat = T20C
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@
|
|||||||
|
|
||||||
var/mob/living/carbon/human/H = M
|
var/mob/living/carbon/human/H = M
|
||||||
|
|
||||||
if (!H.wear_suit || H.s_store != src)
|
if (!H.wear_suit || (H.s_store != src && H.back != src))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -158,7 +158,7 @@
|
|||||||
nanoui_data["categories"] = categories
|
nanoui_data["categories"] = categories
|
||||||
nanoui_data["discount_name"] = discount_item ? discount_item.name : ""
|
nanoui_data["discount_name"] = discount_item ? discount_item.name : ""
|
||||||
nanoui_data["discount_amount"] = (1-discount_amount)*100
|
nanoui_data["discount_amount"] = (1-discount_amount)*100
|
||||||
nanoui_data["offer_expiry"] = worldtime2text(next_offer_time)
|
nanoui_data["offer_expiry"] = worldtime2stationtime(next_offer_time)
|
||||||
else if(nanoui_menu == 1)
|
else if(nanoui_menu == 1)
|
||||||
var/items[0]
|
var/items[0]
|
||||||
for(var/datum/uplink_item/item in category.items)
|
for(var/datum/uplink_item/item in category.items)
|
||||||
|
|||||||
@@ -7,19 +7,16 @@
|
|||||||
icon_state = "telecrystal"
|
icon_state = "telecrystal"
|
||||||
w_class = 1
|
w_class = 1
|
||||||
max_amount = 240
|
max_amount = 240
|
||||||
flags = NOBLUDGEON
|
|
||||||
origin_tech = list(TECH_MATERIAL = 6, TECH_BLUESPACE = 4)
|
origin_tech = list(TECH_MATERIAL = 6, TECH_BLUESPACE = 4)
|
||||||
|
force = 1 //Needs a token force to ensure you can attack because for some reason you can't attack with 0 force things
|
||||||
|
|
||||||
/obj/item/stack/telecrystal/afterattack(var/obj/item/I as obj, mob/user as mob, proximity)
|
/obj/item/stack/telecrystal/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||||
if(!proximity)
|
if(amount >= 5)
|
||||||
return
|
target.visible_message("<span class='warning'>\The [target] has been transported with \the [src] by \the [user].</span>")
|
||||||
if(istype(I, /obj/item))
|
safe_blink(target, 14)
|
||||||
if(I.hidden_uplink && I.hidden_uplink.active) //No metagaming by using this on every PDA around just to see if it gets used up.
|
use(5)
|
||||||
I.hidden_uplink.uses += amount
|
else
|
||||||
I.hidden_uplink.update_nano_data()
|
user << "<span class='warning'>There are not enough telecrystals to do that.</span>"
|
||||||
nanomanager.update_uis(I.hidden_uplink)
|
|
||||||
use(amount)
|
|
||||||
user << "<span class='notice'>You slot \the [src] into \the [I] and charge its internal uplink.</span>"
|
|
||||||
|
|
||||||
/obj/item/stack/telecrystal/attack_self(mob/user as mob)
|
/obj/item/stack/telecrystal/attack_self(mob/user as mob)
|
||||||
if(user.mind.accept_tcrystals) //Checks to see if antag type allows for tcrystals
|
if(user.mind.accept_tcrystals) //Checks to see if antag type allows for tcrystals
|
||||||
|
|||||||
@@ -86,7 +86,7 @@
|
|||||||
var/scan_data = ""
|
var/scan_data = ""
|
||||||
|
|
||||||
if(timeofdeath)
|
if(timeofdeath)
|
||||||
scan_data += "<b>Time of death:</b> [worldtime2text(timeofdeath)]<br><br>"
|
scan_data += "<b>Time of death:</b> [worldtime2stationtime(timeofdeath)]<br><br>"
|
||||||
|
|
||||||
var/n = 1
|
var/n = 1
|
||||||
for(var/wdata_idx in wdata)
|
for(var/wdata_idx in wdata)
|
||||||
@@ -133,7 +133,7 @@
|
|||||||
if(damaging_weapon)
|
if(damaging_weapon)
|
||||||
scan_data += "Severity: [damage_desc]<br>"
|
scan_data += "Severity: [damage_desc]<br>"
|
||||||
scan_data += "Hits by weapon: [total_hits]<br>"
|
scan_data += "Hits by weapon: [total_hits]<br>"
|
||||||
scan_data += "Approximate time of wound infliction: [worldtime2text(age)]<br>"
|
scan_data += "Approximate time of wound infliction: [worldtime2stationtime(age)]<br>"
|
||||||
scan_data += "Affected limbs: [D.organ_names]<br>"
|
scan_data += "Affected limbs: [D.organ_names]<br>"
|
||||||
scan_data += "Possible weapons:<br>"
|
scan_data += "Possible weapons:<br>"
|
||||||
for(var/weapon_name in weapon_chances)
|
for(var/weapon_name in weapon_chances)
|
||||||
|
|||||||
@@ -7,10 +7,10 @@
|
|||||||
hitsound = 'sound/weapons/smash.ogg'
|
hitsound = 'sound/weapons/smash.ogg'
|
||||||
flags = CONDUCT
|
flags = CONDUCT
|
||||||
throwforce = 10
|
throwforce = 10
|
||||||
w_class = 3.0
|
w_class = 3
|
||||||
throw_speed = 2
|
throw_speed = 2
|
||||||
throw_range = 10
|
throw_range = 10
|
||||||
force = 10.0
|
force = 10
|
||||||
matter = list(DEFAULT_WALL_MATERIAL = 90)
|
matter = list(DEFAULT_WALL_MATERIAL = 90)
|
||||||
attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
|
attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,8 @@
|
|||||||
//Explosive grenade projectile, borrowed from fragmentation grenade code.
|
//Explosive grenade projectile, borrowed from fragmentation grenade code.
|
||||||
/obj/item/projectile/bullet/pellet/fragment
|
/obj/item/projectile/bullet/pellet/fragment
|
||||||
damage = 10
|
damage = 10
|
||||||
range_step = 2
|
armor_penetration = 30
|
||||||
|
range_step = 2 //projectiles lose a fragment each time they travel this distance. Can be a non-integer.
|
||||||
|
|
||||||
base_spread = 0 //causes it to be treated as a shrapnel explosion instead of cone
|
base_spread = 0 //causes it to be treated as a shrapnel explosion instead of cone
|
||||||
spread_step = 20
|
spread_step = 20
|
||||||
@@ -32,9 +33,8 @@
|
|||||||
icon_state = "frggrenade"
|
icon_state = "frggrenade"
|
||||||
item_state = "grenade"
|
item_state = "grenade"
|
||||||
|
|
||||||
var/num_fragments = 50 //total number of fragments produced by the grenade
|
var/fragment_type = /obj/item/projectile/bullet/pellet/fragment
|
||||||
var/fragment_damage = 10
|
var/num_fragments = 63 //total number of fragments produced by the grenade
|
||||||
var/damage_step = 2 //projectiles lose a fragment each time they travel this distance. Can be a non-integer.
|
|
||||||
var/explosion_size = 2 //size of the center explosion
|
var/explosion_size = 2 //size of the center explosion
|
||||||
|
|
||||||
//The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern
|
//The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern
|
||||||
@@ -56,9 +56,7 @@
|
|||||||
for(var/turf/T in target_turfs)
|
for(var/turf/T in target_turfs)
|
||||||
var/obj/item/projectile/bullet/pellet/fragment/P = new (O)
|
var/obj/item/projectile/bullet/pellet/fragment/P = new (O)
|
||||||
|
|
||||||
P.damage = fragment_damage
|
|
||||||
P.pellets = fragments_per_projectile
|
P.pellets = fragments_per_projectile
|
||||||
P.range_step = damage_step
|
|
||||||
P.shot_from = src.name
|
P.shot_from = src.name
|
||||||
|
|
||||||
P.launch(T)
|
P.launch(T)
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
sharp = 1
|
sharp = 1
|
||||||
edge = 1
|
edge = 1
|
||||||
w_class = 2
|
w_class = 2
|
||||||
force_divisor = 0.2 // 6 with hardness 30 (glass)
|
force_divisor = 0.25 // 7.5 with hardness 30 (glass)
|
||||||
thrown_force_divisor = 0.4 // 4 with weight 15 (glass)
|
thrown_force_divisor = 0.5
|
||||||
item_state = "shard-glass"
|
item_state = "shard-glass"
|
||||||
attack_verb = list("stabbed", "slashed", "sliced", "cut")
|
attack_verb = list("stabbed", "slashed", "sliced", "cut")
|
||||||
default_material = "glass"
|
default_material = "glass"
|
||||||
@@ -87,7 +87,7 @@
|
|||||||
if(affecting)
|
if(affecting)
|
||||||
if(affecting.robotic >= ORGAN_ROBOT)
|
if(affecting.robotic >= ORGAN_ROBOT)
|
||||||
return
|
return
|
||||||
if(affecting.take_damage(5, 0))
|
if(affecting.take_damage(force, 0))
|
||||||
H.UpdateDamageIcon()
|
H.UpdateDamageIcon()
|
||||||
H.updatehealth()
|
H.updatehealth()
|
||||||
if(affecting.can_feel_pain())
|
if(affecting.can_feel_pain())
|
||||||
|
|||||||
@@ -214,25 +214,25 @@
|
|||||||
name = "virologist satchel"
|
name = "virologist satchel"
|
||||||
desc = "A sterile satchel with virologist colours."
|
desc = "A sterile satchel with virologist colours."
|
||||||
icon_state = "satchel-vir"
|
icon_state = "satchel-vir"
|
||||||
item_state_slots = list(slot_r_hand_str = "medicalpack", slot_l_hand_str = "medicalpack")
|
item_state_slots = list(slot_r_hand_str = "viropack", slot_l_hand_str = "viropack")
|
||||||
|
|
||||||
/obj/item/weapon/storage/backpack/satchel/chem
|
/obj/item/weapon/storage/backpack/satchel/chem
|
||||||
name = "chemist satchel"
|
name = "chemist satchel"
|
||||||
desc = "A sterile satchel with chemist colours."
|
desc = "A sterile satchel with chemist colours."
|
||||||
icon_state = "satchel-chem"
|
icon_state = "satchel-chem"
|
||||||
item_state_slots = list(slot_r_hand_str = "medicalpack", slot_l_hand_str = "medicalpack")
|
item_state_slots = list(slot_r_hand_str = "chempack", slot_l_hand_str = "chempack")
|
||||||
|
|
||||||
/obj/item/weapon/storage/backpack/satchel/gen
|
/obj/item/weapon/storage/backpack/satchel/gen
|
||||||
name = "geneticist satchel"
|
name = "geneticist satchel"
|
||||||
desc = "A sterile satchel with geneticist colours."
|
desc = "A sterile satchel with geneticist colours."
|
||||||
icon_state = "satchel-gen"
|
icon_state = "satchel-gen"
|
||||||
item_state_slots = list(slot_r_hand_str = "medicalpack", slot_l_hand_str = "medicalpack")
|
item_state_slots = list(slot_r_hand_str = "genpack", slot_l_hand_str = "genpack")
|
||||||
|
|
||||||
/obj/item/weapon/storage/backpack/satchel/tox
|
/obj/item/weapon/storage/backpack/satchel/tox
|
||||||
name = "scientist satchel"
|
name = "scientist satchel"
|
||||||
desc = "Useful for holding research materials."
|
desc = "Useful for holding research materials."
|
||||||
icon_state = "satchel-tox"
|
icon_state = "satchel-tox"
|
||||||
item_state_slots = list(slot_r_hand_str = "medicalpack", slot_l_hand_str = "medicalpack")
|
item_state_slots = list(slot_r_hand_str = "toxpack", slot_l_hand_str = "toxpack")
|
||||||
|
|
||||||
/obj/item/weapon/storage/backpack/satchel/sec
|
/obj/item/weapon/storage/backpack/satchel/sec
|
||||||
name = "security satchel"
|
name = "security satchel"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "belt"
|
name = "belt"
|
||||||
desc = "Can hold various things."
|
desc = "Can hold various things."
|
||||||
icon = 'icons/obj/clothing/belts.dmi'
|
icon = 'icons/obj/clothing/belts.dmi'
|
||||||
icon_state = "utilitybelt"
|
icon_state = "utility"
|
||||||
storage_slots = 7
|
storage_slots = 7
|
||||||
max_storage_space = 28 //This should ensure belts always have enough room to store whatever.
|
max_storage_space = 28 //This should ensure belts always have enough room to store whatever.
|
||||||
max_w_class = 3
|
max_w_class = 3
|
||||||
@@ -27,11 +27,10 @@
|
|||||||
var/mob/M = src.loc
|
var/mob/M = src.loc
|
||||||
M.update_inv_belt()
|
M.update_inv_belt()
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/storage/belt/utility
|
/obj/item/weapon/storage/belt/utility
|
||||||
name = "tool-belt" //Carn: utility belt is nicer, but it bamboozles the text parsing.
|
name = "tool-belt" //Carn: utility belt is nicer, but it bamboozles the text parsing.
|
||||||
desc = "Can hold various tools."
|
desc = "Can hold various tools."
|
||||||
icon_state = "utilitybelt"
|
icon_state = "utility"
|
||||||
can_hold = list(
|
can_hold = list(
|
||||||
///obj/item/weapon/combitool,
|
///obj/item/weapon/combitool,
|
||||||
/obj/item/weapon/crowbar,
|
/obj/item/weapon/crowbar,
|
||||||
@@ -59,7 +58,6 @@
|
|||||||
/obj/item/weapon/tape_roll,
|
/obj/item/weapon/tape_roll,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/storage/belt/utility/full/New()
|
/obj/item/weapon/storage/belt/utility/full/New()
|
||||||
..()
|
..()
|
||||||
new /obj/item/weapon/screwdriver(src)
|
new /obj/item/weapon/screwdriver(src)
|
||||||
@@ -69,7 +67,6 @@
|
|||||||
new /obj/item/weapon/wirecutters(src)
|
new /obj/item/weapon/wirecutters(src)
|
||||||
new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange"))
|
new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange"))
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/storage/belt/utility/atmostech/New()
|
/obj/item/weapon/storage/belt/utility/atmostech/New()
|
||||||
..()
|
..()
|
||||||
new /obj/item/weapon/screwdriver(src)
|
new /obj/item/weapon/screwdriver(src)
|
||||||
@@ -79,12 +76,10 @@
|
|||||||
new /obj/item/weapon/wirecutters(src)
|
new /obj/item/weapon/wirecutters(src)
|
||||||
new /obj/item/device/t_scanner(src)
|
new /obj/item/device/t_scanner(src)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/storage/belt/medical
|
/obj/item/weapon/storage/belt/medical
|
||||||
name = "medical belt"
|
name = "medical belt"
|
||||||
desc = "Can hold various medical equipment."
|
desc = "Can hold various medical equipment."
|
||||||
icon_state = "medicalbelt"
|
icon_state = "medical"
|
||||||
can_hold = list(
|
can_hold = list(
|
||||||
/obj/item/device/healthanalyzer,
|
/obj/item/device/healthanalyzer,
|
||||||
/obj/item/weapon/dnainjector,
|
/obj/item/weapon/dnainjector,
|
||||||
@@ -115,12 +110,12 @@
|
|||||||
/obj/item/weapon/storage/belt/medical/emt
|
/obj/item/weapon/storage/belt/medical/emt
|
||||||
name = "EMT utility belt"
|
name = "EMT utility belt"
|
||||||
desc = "A sturdy black webbing belt with attached pouches."
|
desc = "A sturdy black webbing belt with attached pouches."
|
||||||
icon_state = "emsbelt"
|
icon_state = "ems"
|
||||||
|
|
||||||
/obj/item/weapon/storage/belt/security
|
/obj/item/weapon/storage/belt/security
|
||||||
name = "security belt"
|
name = "security belt"
|
||||||
desc = "Can hold security gear like handcuffs and flashes."
|
desc = "Can hold security gear like handcuffs and flashes."
|
||||||
icon_state = "securitybelt"
|
icon_state = "security"
|
||||||
max_w_class = 3
|
max_w_class = 3
|
||||||
can_hold = list(
|
can_hold = list(
|
||||||
/obj/item/weapon/grenade,
|
/obj/item/weapon/grenade,
|
||||||
@@ -150,7 +145,7 @@
|
|||||||
/obj/item/weapon/storage/belt/detective
|
/obj/item/weapon/storage/belt/detective
|
||||||
name = "forensic utility belt"
|
name = "forensic utility belt"
|
||||||
desc = "A belt for holding forensics equipment."
|
desc = "A belt for holding forensics equipment."
|
||||||
icon_state = "securitybelt"
|
icon_state = "security"
|
||||||
storage_slots = 7
|
storage_slots = 7
|
||||||
max_w_class = 3
|
max_w_class = 3
|
||||||
can_hold = list(
|
can_hold = list(
|
||||||
@@ -190,7 +185,7 @@
|
|||||||
/obj/item/weapon/storage/belt/soulstone
|
/obj/item/weapon/storage/belt/soulstone
|
||||||
name = "soul stone belt"
|
name = "soul stone belt"
|
||||||
desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away"
|
desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away"
|
||||||
icon_state = "soulstonebelt"
|
icon_state = "soulstone"
|
||||||
storage_slots = 6
|
storage_slots = 6
|
||||||
can_hold = list(
|
can_hold = list(
|
||||||
/obj/item/device/soulstone
|
/obj/item/device/soulstone
|
||||||
@@ -209,7 +204,7 @@
|
|||||||
/obj/item/weapon/storage/belt/champion
|
/obj/item/weapon/storage/belt/champion
|
||||||
name = "championship belt"
|
name = "championship belt"
|
||||||
desc = "Proves to the world that you are the strongest!"
|
desc = "Proves to the world that you are the strongest!"
|
||||||
icon_state = "championbelt"
|
icon_state = "champion"
|
||||||
storage_slots = 1
|
storage_slots = 1
|
||||||
can_hold = list(
|
can_hold = list(
|
||||||
"/obj/item/clothing/mask/luchador"
|
"/obj/item/clothing/mask/luchador"
|
||||||
@@ -218,7 +213,7 @@
|
|||||||
/obj/item/weapon/storage/belt/security/tactical
|
/obj/item/weapon/storage/belt/security/tactical
|
||||||
name = "combat belt"
|
name = "combat belt"
|
||||||
desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage."
|
desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage."
|
||||||
icon_state = "swatbelt"
|
icon_state = "swat"
|
||||||
storage_slots = 9
|
storage_slots = 9
|
||||||
max_w_class = 3
|
max_w_class = 3
|
||||||
max_storage_space = 28
|
max_storage_space = 28
|
||||||
@@ -231,7 +226,7 @@
|
|||||||
/obj/item/weapon/storage/belt/janitor
|
/obj/item/weapon/storage/belt/janitor
|
||||||
name = "janitorial belt"
|
name = "janitorial belt"
|
||||||
desc = "A belt used to hold most janitorial supplies."
|
desc = "A belt used to hold most janitorial supplies."
|
||||||
icon_state = "janibelt"
|
icon_state = "janitor"
|
||||||
storage_slots = 7
|
storage_slots = 7
|
||||||
max_w_class = 3
|
max_w_class = 3
|
||||||
can_hold = list(
|
can_hold = list(
|
||||||
@@ -251,3 +246,33 @@
|
|||||||
/obj/item/weapon/reagent_containers/spray,
|
/obj/item/weapon/reagent_containers/spray,
|
||||||
/obj/item/weapon/soap
|
/obj/item/weapon/soap
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/belt/archaeology
|
||||||
|
name = "excavation gear-belt"
|
||||||
|
desc = "Can hold various excavation gear."
|
||||||
|
icon_state = "gear"
|
||||||
|
can_hold = list(
|
||||||
|
/obj/item/weapon/storage/box/samplebags,
|
||||||
|
/obj/item/device/core_sampler,
|
||||||
|
/obj/item/device/beacon_locator,
|
||||||
|
/obj/item/device/radio/beacon,
|
||||||
|
/obj/item/device/gps,
|
||||||
|
/obj/item/device/measuring_tape,
|
||||||
|
/obj/item/device/flashlight,
|
||||||
|
/obj/item/weapon/pickaxe,
|
||||||
|
/obj/item/device/depth_scanner,
|
||||||
|
/obj/item/device/camera,
|
||||||
|
/obj/item/weapon/paper,
|
||||||
|
/obj/item/weapon/photo,
|
||||||
|
/obj/item/weapon/folder,
|
||||||
|
/obj/item/weapon/pen,
|
||||||
|
/obj/item/weapon/folder,
|
||||||
|
/obj/item/weapon/clipboard,
|
||||||
|
/obj/item/weapon/anodevice,
|
||||||
|
/obj/item/clothing/glasses,
|
||||||
|
/obj/item/weapon/wrench,
|
||||||
|
/obj/item/weapon/storage/excavation,
|
||||||
|
/obj/item/weapon/anobattery,
|
||||||
|
/obj/item/device/ano_scanner,
|
||||||
|
/obj/item/weapon/pickaxe/hand
|
||||||
|
)
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
icon_state = "red"
|
icon_state = "red"
|
||||||
item_state_slots = list(slot_r_hand_str = "toolbox_red", slot_l_hand_str = "toolbox_red")
|
item_state_slots = list(slot_r_hand_str = "toolbox_red", slot_l_hand_str = "toolbox_red")
|
||||||
flags = CONDUCT
|
flags = CONDUCT
|
||||||
force = 5
|
force = 10
|
||||||
throwforce = 10
|
throwforce = 10
|
||||||
throw_speed = 1
|
throw_speed = 1
|
||||||
throw_range = 7
|
throw_range = 7
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
icon_state = "syndicate"
|
icon_state = "syndicate"
|
||||||
item_state_slots = list(slot_r_hand_str = "toolbox_syndi", slot_l_hand_str = "toolbox_syndi")
|
item_state_slots = list(slot_r_hand_str = "toolbox_syndi", slot_l_hand_str = "toolbox_syndi")
|
||||||
origin_tech = list(TECH_COMBAT = 1, TECH_ILLEGAL = 1)
|
origin_tech = list(TECH_COMBAT = 1, TECH_ILLEGAL = 1)
|
||||||
force = 7.0
|
force = 14
|
||||||
|
|
||||||
/obj/item/weapon/storage/toolbox/syndicate/New()
|
/obj/item/weapon/storage/toolbox/syndicate/New()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -266,3 +266,18 @@
|
|||||||
new /obj/item/clothing/gloves/arm_guard/combat(src)
|
new /obj/item/clothing/gloves/arm_guard/combat(src)
|
||||||
new /obj/item/clothing/shoes/leg_guard/combat(src)
|
new /obj/item/clothing/shoes/leg_guard/combat(src)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/box/syndie_kit/demolitions/New()
|
||||||
|
..()
|
||||||
|
new /obj/item/weapon/syndie/c4explosive(src)
|
||||||
|
new /obj/item/weapon/screwdriver(src)
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/box/syndie_kit/demolitions_heavy/New()
|
||||||
|
..()
|
||||||
|
new /obj/item/weapon/syndie/c4explosive/heavy(src)
|
||||||
|
new /obj/item/weapon/screwdriver(src)
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/box/syndie_kit/demolitions_super_heavy/New()
|
||||||
|
..()
|
||||||
|
new /obj/item/weapon/syndie/c4explosive/heavy/super_heavy(src)
|
||||||
|
new /obj/item/weapon/screwdriver(src)
|
||||||
@@ -23,19 +23,23 @@
|
|||||||
power = 2
|
power = 2
|
||||||
size = "large"
|
size = "large"
|
||||||
|
|
||||||
|
/obj/item/weapon/syndie/c4explosive/heavy/super_heavy
|
||||||
|
name = "large-sized package"
|
||||||
|
desc = "A mysterious package, it's quite exceptionally heavy."
|
||||||
|
power = 3
|
||||||
|
|
||||||
/obj/item/weapon/syndie/c4explosive/New()
|
/obj/item/weapon/syndie/c4explosive/New()
|
||||||
var/K = rand(1,2000)
|
var/K = rand(1,2000)
|
||||||
K = md5(num2text(K)+name)
|
K = md5(num2text(K)+name)
|
||||||
K = copytext(K,1,7)
|
K = copytext(K,1,7)
|
||||||
src.desc += "\n You see [K] engraved on \the [src]."
|
desc += "\n You see [K] engraved on \the [src]."
|
||||||
var/obj/item/weapon/syndie/c4detonator/detonator = new(src.loc)
|
var/obj/item/weapon/flame/lighter/zippo/c4detonator/detonator = new(src.loc)
|
||||||
detonator.desc += "\n You see [K] engraved on the lighter."
|
detonator.desc += " You see [K] engraved on the lighter."
|
||||||
detonator.bomb = src
|
detonator.bomb = src
|
||||||
|
|
||||||
/obj/item/weapon/syndie/c4explosive/proc/detonate()
|
/obj/item/weapon/syndie/c4explosive/proc/detonate()
|
||||||
icon_state = "c-4[size]_1"
|
icon_state = "c-4[size]_1"
|
||||||
spawn(50)
|
explosion(get_turf(src), power, power*2, power*3, power*4, power*5)
|
||||||
explosion(get_turf(src), power, power*2, power*3, power*4, power*4)
|
|
||||||
for(var/dirn in cardinal) //This is to guarantee that C4 at least breaks down all immediately adjacent walls and doors.
|
for(var/dirn in cardinal) //This is to guarantee that C4 at least breaks down all immediately adjacent walls and doors.
|
||||||
var/turf/simulated/wall/T = get_step(src,dirn)
|
var/turf/simulated/wall/T = get_step(src,dirn)
|
||||||
if(locate(/obj/machinery/door/airlock) in T)
|
if(locate(/obj/machinery/door/airlock) in T)
|
||||||
@@ -50,35 +54,39 @@
|
|||||||
/*Detonator, disguised as a lighter*/
|
/*Detonator, disguised as a lighter*/
|
||||||
/*Click it when closed to open, when open to bring up a prompt asking you if you want to close it or press the button.*/
|
/*Click it when closed to open, when open to bring up a prompt asking you if you want to close it or press the button.*/
|
||||||
|
|
||||||
/obj/item/weapon/syndie/c4detonator
|
/obj/item/weapon/flame/lighter/zippo/c4detonator
|
||||||
icon_state = "c-4detonator_0"
|
var/detonator_mode = 0
|
||||||
item_state = "zippo"
|
|
||||||
name = "\improper Zippo lighter" /*Sneaky, thanks Dreyfus.*/
|
|
||||||
desc = "The zippo."
|
|
||||||
w_class = 1
|
|
||||||
|
|
||||||
var/obj/item/weapon/syndie/c4explosive/bomb
|
var/obj/item/weapon/syndie/c4explosive/bomb
|
||||||
var/pr_open = 0 /*Is the "What do you want to do?" prompt open?*/
|
|
||||||
|
|
||||||
/obj/item/weapon/syndie/c4detonator/attack_self(mob/user as mob)
|
/obj/item/weapon/flame/lighter/zippo/c4detonator/attack_self(mob/user as mob)
|
||||||
switch(src.icon_state)
|
if(!detonator_mode)
|
||||||
if("c-4detonator_0")
|
..()
|
||||||
src.icon_state = "c-4detonator_1"
|
|
||||||
user << "You flick open the lighter."
|
|
||||||
|
|
||||||
if("c-4detonator_1")
|
else if(!lit)
|
||||||
if(!pr_open)
|
base_state = icon_state
|
||||||
pr_open = 1
|
lit = 1
|
||||||
|
icon_state = "[base_state]1"
|
||||||
|
//item_state = "[base_state]on"
|
||||||
|
user.visible_message("<span class='rose'>Without even breaking stride, \the [user] flips open \the [src] in one smooth movement.</span>")
|
||||||
|
|
||||||
|
else if(lit && detonator_mode)
|
||||||
switch(alert(user, "What would you like to do?", "Lighter", "Press the button.", "Close the lighter."))
|
switch(alert(user, "What would you like to do?", "Lighter", "Press the button.", "Close the lighter."))
|
||||||
if("Press the button.")
|
if("Press the button.")
|
||||||
user << "<span class='warning'>You press the button.</span>"
|
user << "<span class='warning'>You press the button.</span>"
|
||||||
flick("c-4detonator_click", src)
|
icon_state = "[base_state]click"
|
||||||
if(src.bomb)
|
if(src.bomb)
|
||||||
src.bomb.detonate()
|
src.bomb.detonate()
|
||||||
log_admin("[key_name(user)] has triggered [src.bomb] with [src].")
|
log_admin("[key_name(user)] has triggered [src.bomb] with [src].")
|
||||||
message_admins("<span class='danger'>[key_name_admin(user)] has triggered [src.bomb] with [src].</span>")
|
message_admins("<span class='danger'>[key_name_admin(user)] has triggered [src.bomb] with [src].</span>")
|
||||||
|
|
||||||
if("Close the lighter.")
|
if("Close the lighter.")
|
||||||
src.icon_state = "c-4detonator_0"
|
lit = 0
|
||||||
user << "You close the lighter."
|
icon_state = "[base_state]"
|
||||||
pr_open = 0
|
//item_state = "[base_state]"
|
||||||
|
user.visible_message("<span class='rose'>You hear a quiet click, as \the [user] shuts off \the [src] without even looking at what they're doing.</span>")
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/weapon/flame/lighter/zippo/c4detonator/attackby(obj/item/weapon/W, mob/user as mob)
|
||||||
|
if(istype(W, /obj/item/weapon/screwdriver))
|
||||||
|
detonator_mode = !detonator_mode
|
||||||
|
user << "<span class='notice'>You unscrew the top panel of \the [src] revealing a button.</span>"
|
||||||
@@ -21,9 +21,9 @@
|
|||||||
icon_state = "wrench"
|
icon_state = "wrench"
|
||||||
flags = CONDUCT
|
flags = CONDUCT
|
||||||
slot_flags = SLOT_BELT
|
slot_flags = SLOT_BELT
|
||||||
force = 5.0
|
force = 6
|
||||||
throwforce = 7.0
|
throwforce = 7
|
||||||
w_class = 2.0
|
w_class = 2
|
||||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
|
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
|
||||||
matter = list(DEFAULT_WALL_MATERIAL = 150)
|
matter = list(DEFAULT_WALL_MATERIAL = 150)
|
||||||
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
|
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
|
||||||
@@ -39,9 +39,9 @@
|
|||||||
icon_state = "screwdriver"
|
icon_state = "screwdriver"
|
||||||
flags = CONDUCT
|
flags = CONDUCT
|
||||||
slot_flags = SLOT_BELT | SLOT_EARS
|
slot_flags = SLOT_BELT | SLOT_EARS
|
||||||
force = 5.0
|
force = 6
|
||||||
w_class = 1.0
|
w_class = 1
|
||||||
throwforce = 5.0
|
throwforce = 5
|
||||||
throw_speed = 3
|
throw_speed = 3
|
||||||
throw_range = 5
|
throw_range = 5
|
||||||
matter = list(DEFAULT_WALL_MATERIAL = 75)
|
matter = list(DEFAULT_WALL_MATERIAL = 75)
|
||||||
@@ -100,7 +100,7 @@
|
|||||||
icon_state = "cutters"
|
icon_state = "cutters"
|
||||||
flags = CONDUCT
|
flags = CONDUCT
|
||||||
slot_flags = SLOT_BELT
|
slot_flags = SLOT_BELT
|
||||||
force = 6.0
|
force = 6
|
||||||
throw_speed = 2
|
throw_speed = 2
|
||||||
throw_range = 9
|
throw_range = 9
|
||||||
w_class = 2.0
|
w_class = 2.0
|
||||||
@@ -411,11 +411,11 @@
|
|||||||
icon_state = "crowbar"
|
icon_state = "crowbar"
|
||||||
flags = CONDUCT
|
flags = CONDUCT
|
||||||
slot_flags = SLOT_BELT
|
slot_flags = SLOT_BELT
|
||||||
force = 5.0
|
force = 6
|
||||||
throwforce = 7.0
|
throwforce = 7
|
||||||
pry = 1
|
pry = 1
|
||||||
item_state = "crowbar"
|
item_state = "crowbar"
|
||||||
w_class = 2.0
|
w_class = 2
|
||||||
origin_tech = list(TECH_ENGINEERING = 1)
|
origin_tech = list(TECH_ENGINEERING = 1)
|
||||||
matter = list(DEFAULT_WALL_MATERIAL = 50)
|
matter = list(DEFAULT_WALL_MATERIAL = 50)
|
||||||
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
|
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
|
||||||
|
|||||||
@@ -114,6 +114,8 @@
|
|||||||
new /obj/item/weapon/shield/riot/tele(src)
|
new /obj/item/weapon/shield/riot/tele(src)
|
||||||
new /obj/item/weapon/storage/box/holobadge/hos(src)
|
new /obj/item/weapon/storage/box/holobadge/hos(src)
|
||||||
new /obj/item/clothing/accessory/badge/holo/hos(src)
|
new /obj/item/clothing/accessory/badge/holo/hos(src)
|
||||||
|
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
||||||
|
new /obj/item/weapon/crowbar/red(src)
|
||||||
new /obj/item/weapon/storage/box/flashbangs(src)
|
new /obj/item/weapon/storage/box/flashbangs(src)
|
||||||
new /obj/item/weapon/storage/belt/security(src)
|
new /obj/item/weapon/storage/belt/security(src)
|
||||||
new /obj/item/device/flash(src)
|
new /obj/item/device/flash(src)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
w_class = 5
|
w_class = 5
|
||||||
var/state = 0
|
var/state = 0
|
||||||
var/base_icon_state = ""
|
var/base_icon_state = ""
|
||||||
var/base_name = "Airlock"
|
var/base_name = "airlock"
|
||||||
var/obj/item/weapon/airlock_electronics/electronics = null
|
var/obj/item/weapon/airlock_electronics/electronics = null
|
||||||
var/airlock_type = "" //the type path of the airlock once completed
|
var/airlock_type = "" //the type path of the airlock once completed
|
||||||
var/glass_type = "/glass"
|
var/glass_type = "/glass"
|
||||||
@@ -19,91 +19,91 @@
|
|||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_com
|
/obj/structure/door_assembly/door_assembly_com
|
||||||
base_icon_state = "com"
|
base_icon_state = "com"
|
||||||
base_name = "Command Airlock"
|
base_name = "Command airlock"
|
||||||
glass_type = "/glass_command"
|
glass_type = "/glass_command"
|
||||||
airlock_type = "/command"
|
airlock_type = "/command"
|
||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_sec
|
/obj/structure/door_assembly/door_assembly_sec
|
||||||
base_icon_state = "sec"
|
base_icon_state = "sec"
|
||||||
base_name = "Security Airlock"
|
base_name = "Security airlock"
|
||||||
glass_type = "/glass_security"
|
glass_type = "/glass_security"
|
||||||
airlock_type = "/security"
|
airlock_type = "/security"
|
||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_eng
|
/obj/structure/door_assembly/door_assembly_eng
|
||||||
base_icon_state = "eng"
|
base_icon_state = "eng"
|
||||||
base_name = "Engineering Airlock"
|
base_name = "Engineering airlock"
|
||||||
glass_type = "/glass_engineering"
|
glass_type = "/glass_engineering"
|
||||||
airlock_type = "/engineering"
|
airlock_type = "/engineering"
|
||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_eat
|
/obj/structure/door_assembly/door_assembly_eat
|
||||||
base_icon_state = "eat"
|
base_icon_state = "eat"
|
||||||
base_name = "Engineering Atmos Airlock"
|
base_name = "Engineering atmos airlock"
|
||||||
glass_type = "/glass_engineeringatmos"
|
glass_type = "/glass_engineeringatmos"
|
||||||
airlock_type = "/engineering"
|
airlock_type = "/engineering"
|
||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_min
|
/obj/structure/door_assembly/door_assembly_min
|
||||||
base_icon_state = "min"
|
base_icon_state = "min"
|
||||||
base_name = "Mining Airlock"
|
base_name = "Mining airlock"
|
||||||
glass_type = "/glass_mining"
|
glass_type = "/glass_mining"
|
||||||
airlock_type = "/mining"
|
airlock_type = "/mining"
|
||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_atmo
|
/obj/structure/door_assembly/door_assembly_atmo
|
||||||
base_icon_state = "atmo"
|
base_icon_state = "atmo"
|
||||||
base_name = "Atmospherics Airlock"
|
base_name = "Atmospherics airlock"
|
||||||
glass_type = "/glass_atmos"
|
glass_type = "/glass_atmos"
|
||||||
airlock_type = "/atmos"
|
airlock_type = "/atmos"
|
||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_research
|
/obj/structure/door_assembly/door_assembly_research
|
||||||
base_icon_state = "res"
|
base_icon_state = "res"
|
||||||
base_name = "Research Airlock"
|
base_name = "Research airlock"
|
||||||
glass_type = "/glass_research"
|
glass_type = "/glass_research"
|
||||||
airlock_type = "/research"
|
airlock_type = "/research"
|
||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_science
|
/obj/structure/door_assembly/door_assembly_science
|
||||||
base_icon_state = "sci"
|
base_icon_state = "sci"
|
||||||
base_name = "Science Airlock"
|
base_name = "Science airlock"
|
||||||
glass_type = "/glass_science"
|
glass_type = "/glass_science"
|
||||||
airlock_type = "/science"
|
airlock_type = "/science"
|
||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_med
|
/obj/structure/door_assembly/door_assembly_med
|
||||||
base_icon_state = "med"
|
base_icon_state = "med"
|
||||||
base_name = "Medical Airlock"
|
base_name = "Medical airlock"
|
||||||
glass_type = "/glass_medical"
|
glass_type = "/glass_medical"
|
||||||
airlock_type = "/medical"
|
airlock_type = "/medical"
|
||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_mai
|
/obj/structure/door_assembly/door_assembly_mai
|
||||||
base_icon_state = "mai"
|
base_icon_state = "mai"
|
||||||
base_name = "Maintenance Airlock"
|
base_name = "Maintenance airlock"
|
||||||
airlock_type = "/maintenance"
|
airlock_type = "/maintenance"
|
||||||
glass = -1
|
glass = -1
|
||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_ext
|
/obj/structure/door_assembly/door_assembly_ext
|
||||||
base_icon_state = "ext"
|
base_icon_state = "ext"
|
||||||
base_name = "External Airlock"
|
base_name = "External airlock"
|
||||||
airlock_type = "/external"
|
airlock_type = "/external"
|
||||||
glass = -1
|
glass = -1
|
||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_fre
|
/obj/structure/door_assembly/door_assembly_fre
|
||||||
base_icon_state = "fre"
|
base_icon_state = "fre"
|
||||||
base_name = "Freezer Airlock"
|
base_name = "Freezer airlock"
|
||||||
airlock_type = "/freezer"
|
airlock_type = "/freezer"
|
||||||
glass = -1
|
glass = -1
|
||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_hatch
|
/obj/structure/door_assembly/door_assembly_hatch
|
||||||
base_icon_state = "hatch"
|
base_icon_state = "hatch"
|
||||||
base_name = "Airtight Hatch"
|
base_name = "airtight hatch"
|
||||||
airlock_type = "/hatch"
|
airlock_type = "/hatch"
|
||||||
glass = -1
|
glass = -1
|
||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_mhatch
|
/obj/structure/door_assembly/door_assembly_mhatch
|
||||||
base_icon_state = "mhatch"
|
base_icon_state = "mhatch"
|
||||||
base_name = "Maintenance Hatch"
|
base_name = "maintenance hatch"
|
||||||
airlock_type = "/maintenance_hatch"
|
airlock_type = "/maintenance_hatch"
|
||||||
glass = -1
|
glass = -1
|
||||||
|
|
||||||
/obj/structure/door_assembly/door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly
|
/obj/structure/door_assembly/door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly
|
||||||
base_icon_state = "highsec"
|
base_icon_state = "highsec"
|
||||||
base_name = "High Security Airlock"
|
base_name = "high security airlock"
|
||||||
airlock_type = "/highsecurity"
|
airlock_type = "/highsecurity"
|
||||||
glass = -1
|
glass = -1
|
||||||
|
|
||||||
@@ -221,7 +221,6 @@
|
|||||||
W.loc = src
|
W.loc = src
|
||||||
user << "<span class='notice'>You installed the airlock electronics!</span>"
|
user << "<span class='notice'>You installed the airlock electronics!</span>"
|
||||||
src.state = 2
|
src.state = 2
|
||||||
src.name = "Near finished Airlock Assembly"
|
|
||||||
src.electronics = W
|
src.electronics = W
|
||||||
|
|
||||||
else if(istype(W, /obj/item/weapon/crowbar) && state == 2 )
|
else if(istype(W, /obj/item/weapon/crowbar) && state == 2 )
|
||||||
@@ -238,7 +237,6 @@
|
|||||||
if(!src) return
|
if(!src) return
|
||||||
user << "<span class='notice'>You removed the airlock electronics!</span>"
|
user << "<span class='notice'>You removed the airlock electronics!</span>"
|
||||||
src.state = 1
|
src.state = 1
|
||||||
src.name = "Wired Airlock Assembly"
|
|
||||||
electronics.loc = src.loc
|
electronics.loc = src.loc
|
||||||
electronics = null
|
electronics = null
|
||||||
|
|
||||||
@@ -294,9 +292,9 @@
|
|||||||
switch (state)
|
switch (state)
|
||||||
if(0)
|
if(0)
|
||||||
if (anchored)
|
if (anchored)
|
||||||
name = "Secured "
|
name = "secured "
|
||||||
if(1)
|
if(1)
|
||||||
name = "Wired "
|
name = "wired "
|
||||||
if(2)
|
if(2)
|
||||||
name = "Near Finished "
|
name = "near finished "
|
||||||
name += "[glass == 1 ? "Window " : ""][istext(glass) ? "[glass] Airlock" : base_name] Assembly"
|
name += "[glass == 1 ? "window " : ""][istext(glass) ? "[glass] airlock" : base_name] assembly ([created_name])"
|
||||||
|
|||||||
@@ -126,7 +126,8 @@
|
|||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/structure/girder/proc/construct_wall(obj/item/stack/material/S, mob/user)
|
/obj/structure/girder/proc/construct_wall(obj/item/stack/material/S, mob/user)
|
||||||
if(S.get_amount() < 2)
|
var/amount_to_use = reinf_material ? 1 : 2
|
||||||
|
if(S.get_amount() < amount_to_use)
|
||||||
user << "<span class='notice'>There isn't enough material here to construct a wall.</span>"
|
user << "<span class='notice'>There isn't enough material here to construct a wall.</span>"
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
@@ -143,7 +144,6 @@
|
|||||||
|
|
||||||
user << "<span class='notice'>You begin adding the plating...</span>"
|
user << "<span class='notice'>You begin adding the plating...</span>"
|
||||||
|
|
||||||
var/amount_to_use = reinf_material ? 1 : 2
|
|
||||||
if(!do_after(user,40) || !S.use(amount_to_use))
|
if(!do_after(user,40) || !S.use(amount_to_use))
|
||||||
return 1 //once we've gotten this far don't call parent attackby()
|
return 1 //once we've gotten this far don't call parent attackby()
|
||||||
|
|
||||||
|
|||||||
@@ -19,12 +19,18 @@ obj/structure/windoor_assembly
|
|||||||
w_class = 3
|
w_class = 3
|
||||||
|
|
||||||
var/obj/item/weapon/airlock_electronics/electronics = null
|
var/obj/item/weapon/airlock_electronics/electronics = null
|
||||||
|
var/created_name = null
|
||||||
|
|
||||||
//Vars to help with the icon's name
|
//Vars to help with the icon's name
|
||||||
var/facing = "l" //Does the windoor open to the left or right?
|
var/facing = "l" //Does the windoor open to the left or right?
|
||||||
var/secure = "" //Whether or not this creates a secure windoor
|
var/secure = "" //Whether or not this creates a secure windoor
|
||||||
var/state = "01" //How far the door assembly has progressed in terms of sprites
|
var/state = "01" //How far the door assembly has progressed in terms of sprites
|
||||||
|
|
||||||
|
obj/structure/windoor_assembly/secure
|
||||||
|
name = "secure windoor assembly"
|
||||||
|
secure = "secure_"
|
||||||
|
icon_state = "l_secure_windoor_assembly01"
|
||||||
|
|
||||||
obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0)
|
obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0)
|
||||||
..()
|
..()
|
||||||
if(constructed)
|
if(constructed)
|
||||||
@@ -65,24 +71,31 @@ obj/structure/windoor_assembly/Destroy()
|
|||||||
|
|
||||||
|
|
||||||
/obj/structure/windoor_assembly/attackby(obj/item/W as obj, mob/user as mob)
|
/obj/structure/windoor_assembly/attackby(obj/item/W as obj, mob/user as mob)
|
||||||
//I really should have spread this out across more states but thin little windoors are hard to sprite.
|
if(istype(W, /obj/item/weapon/pen))
|
||||||
|
var/t = sanitizeSafe(input(user, "Enter the name for the windoor.", src.name, src.created_name), MAX_NAME_LEN)
|
||||||
|
if(!t) return
|
||||||
|
if(!in_range(src, usr) && src.loc != usr) return
|
||||||
|
created_name = t
|
||||||
|
return
|
||||||
|
|
||||||
switch(state)
|
switch(state)
|
||||||
if("01")
|
if("01")
|
||||||
if(istype(W, /obj/item/weapon/weldingtool) && !anchored )
|
if(istype(W, /obj/item/weapon/weldingtool) && !anchored )
|
||||||
var/obj/item/weapon/weldingtool/WT = W
|
var/obj/item/weapon/weldingtool/WT = W
|
||||||
if (WT.remove_fuel(0,user))
|
if (WT.remove_fuel(0,user))
|
||||||
user.visible_message("[user] dissassembles the windoor assembly.", "You start to dissassemble the windoor assembly.")
|
user.visible_message("[user] disassembles the windoor assembly.", "You start to disassemble the windoor assembly.")
|
||||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||||
|
|
||||||
if(do_after(user, 40))
|
if(do_after(user, 40))
|
||||||
if(!src || !WT.isOn()) return
|
if(!src || !WT.isOn()) return
|
||||||
user << "<span class='notice'>You dissasembled the windoor assembly!</span>"
|
user << "<span class='notice'>You disassembled the windoor assembly!</span>"
|
||||||
new /obj/item/stack/material/glass/reinforced(get_turf(src), 5)
|
|
||||||
if(secure)
|
if(secure)
|
||||||
PoolOrNew(/obj/item/stack/rods, list(get_turf(src), 4))
|
new /obj/item/stack/material/glass/reinforced(get_turf(src), 2)
|
||||||
|
else
|
||||||
|
new /obj/item/stack/material/glass(get_turf(src), 2)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
else
|
else
|
||||||
user << "<span class='notice'>You need more welding fuel to dissassemble the windoor assembly.</span>"
|
user << "<span class='notice'>You need more welding fuel to disassemble the windoor assembly.</span>"
|
||||||
return
|
return
|
||||||
|
|
||||||
//Wrenching an unsecure assembly anchors it in place. Step 4 complete
|
//Wrenching an unsecure assembly anchors it in place. Step 4 complete
|
||||||
@@ -95,9 +108,9 @@ obj/structure/windoor_assembly/Destroy()
|
|||||||
user << "<span class='notice'>You've secured the windoor assembly!</span>"
|
user << "<span class='notice'>You've secured the windoor assembly!</span>"
|
||||||
src.anchored = 1
|
src.anchored = 1
|
||||||
if(src.secure)
|
if(src.secure)
|
||||||
src.name = "Secure Anchored Windoor Assembly"
|
src.name = "secure anchored windoor assembly"
|
||||||
else
|
else
|
||||||
src.name = "Anchored Windoor Assembly"
|
src.name = "anchored windoor assembly"
|
||||||
|
|
||||||
//Unwrenching an unsecure assembly un-anchors it. Step 4 undone
|
//Unwrenching an unsecure assembly un-anchors it. Step 4 undone
|
||||||
else if(istype(W, /obj/item/weapon/wrench) && anchored)
|
else if(istype(W, /obj/item/weapon/wrench) && anchored)
|
||||||
@@ -109,26 +122,9 @@ obj/structure/windoor_assembly/Destroy()
|
|||||||
user << "<span class='notice'>You've unsecured the windoor assembly!</span>"
|
user << "<span class='notice'>You've unsecured the windoor assembly!</span>"
|
||||||
src.anchored = 0
|
src.anchored = 0
|
||||||
if(src.secure)
|
if(src.secure)
|
||||||
src.name = "Secure Windoor Assembly"
|
src.name = "secure windoor assembly"
|
||||||
else
|
else
|
||||||
src.name = "Windoor Assembly"
|
src.name = "windoor assembly"
|
||||||
|
|
||||||
//Adding plasteel makes the assembly a secure windoor assembly. Step 2 (optional) complete.
|
|
||||||
else if(istype(W, /obj/item/stack/rods) && !secure)
|
|
||||||
var/obj/item/stack/rods/R = W
|
|
||||||
if(R.get_amount() < 4)
|
|
||||||
user << "<span class='warning'>You need more rods to do this.</span>"
|
|
||||||
return
|
|
||||||
user << "<span class='notice'>You start to reinforce the windoor with rods.</span>"
|
|
||||||
|
|
||||||
if(do_after(user,40) && !secure)
|
|
||||||
if (R.use(4))
|
|
||||||
user << "<span class='notice'>You reinforce the windoor.</span>"
|
|
||||||
src.secure = "secure_"
|
|
||||||
if(src.anchored)
|
|
||||||
src.name = "Secure Anchored Windoor Assembly"
|
|
||||||
else
|
|
||||||
src.name = "Secure Windoor Assembly"
|
|
||||||
|
|
||||||
//Adding cable to the assembly. Step 5 complete.
|
//Adding cable to the assembly. Step 5 complete.
|
||||||
else if(istype(W, /obj/item/stack/cable_coil) && anchored)
|
else if(istype(W, /obj/item/stack/cable_coil) && anchored)
|
||||||
@@ -140,9 +136,9 @@ obj/structure/windoor_assembly/Destroy()
|
|||||||
user << "<span class='notice'>You wire the windoor!</span>"
|
user << "<span class='notice'>You wire the windoor!</span>"
|
||||||
src.state = "02"
|
src.state = "02"
|
||||||
if(src.secure)
|
if(src.secure)
|
||||||
src.name = "Secure Wired Windoor Assembly"
|
src.name = "secure wired windoor assembly"
|
||||||
else
|
else
|
||||||
src.name = "Wired Windoor Assembly"
|
src.name = "wired windoor assembly"
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
|
|
||||||
@@ -160,9 +156,9 @@ obj/structure/windoor_assembly/Destroy()
|
|||||||
new/obj/item/stack/cable_coil(get_turf(user), 1)
|
new/obj/item/stack/cable_coil(get_turf(user), 1)
|
||||||
src.state = "01"
|
src.state = "01"
|
||||||
if(src.secure)
|
if(src.secure)
|
||||||
src.name = "Secure Anchored Windoor Assembly"
|
src.name = "secure anchored windoor assembly"
|
||||||
else
|
else
|
||||||
src.name = "Anchored Windoor Assembly"
|
src.name = "anchored windoor assembly"
|
||||||
|
|
||||||
//Adding airlock electronics for access. Step 6 complete.
|
//Adding airlock electronics for access. Step 6 complete.
|
||||||
else if(istype(W, /obj/item/weapon/airlock_electronics) && W:icon_state != "door_electronics_smoked")
|
else if(istype(W, /obj/item/weapon/airlock_electronics) && W:icon_state != "door_electronics_smoked")
|
||||||
@@ -175,7 +171,7 @@ obj/structure/windoor_assembly/Destroy()
|
|||||||
user.drop_item()
|
user.drop_item()
|
||||||
W.loc = src
|
W.loc = src
|
||||||
user << "<span class='notice'>You've installed the airlock electronics!</span>"
|
user << "<span class='notice'>You've installed the airlock electronics!</span>"
|
||||||
src.name = "Near finished Windoor Assembly"
|
src.name = "near finished windoor assembly"
|
||||||
src.electronics = W
|
src.electronics = W
|
||||||
else
|
else
|
||||||
W.loc = src.loc
|
W.loc = src.loc
|
||||||
@@ -189,9 +185,9 @@ obj/structure/windoor_assembly/Destroy()
|
|||||||
if(!src || !src.electronics) return
|
if(!src || !src.electronics) return
|
||||||
user << "<span class='notice'>You've removed the airlock electronics!</span>"
|
user << "<span class='notice'>You've removed the airlock electronics!</span>"
|
||||||
if(src.secure)
|
if(src.secure)
|
||||||
src.name = "Secure Wired Windoor Assembly"
|
src.name = "secure wired windoor assembly"
|
||||||
else
|
else
|
||||||
src.name = "Wired Windoor Assembly"
|
src.name = "wired windoor assembly"
|
||||||
var/obj/item/weapon/airlock_electronics/ae = electronics
|
var/obj/item/weapon/airlock_electronics/ae = electronics
|
||||||
electronics = null
|
electronics = null
|
||||||
ae.loc = src.loc
|
ae.loc = src.loc
|
||||||
@@ -222,6 +218,9 @@ obj/structure/windoor_assembly/Destroy()
|
|||||||
windoor.base_state = "rightsecure"
|
windoor.base_state = "rightsecure"
|
||||||
windoor.set_dir(src.dir)
|
windoor.set_dir(src.dir)
|
||||||
windoor.density = 0
|
windoor.density = 0
|
||||||
|
windoor.name = created_name
|
||||||
|
spawn(0)
|
||||||
|
windoor.close()
|
||||||
|
|
||||||
if(src.electronics.one_access)
|
if(src.electronics.one_access)
|
||||||
windoor.req_access = null
|
windoor.req_access = null
|
||||||
@@ -240,6 +239,9 @@ obj/structure/windoor_assembly/Destroy()
|
|||||||
windoor.base_state = "right"
|
windoor.base_state = "right"
|
||||||
windoor.set_dir(src.dir)
|
windoor.set_dir(src.dir)
|
||||||
windoor.density = 0
|
windoor.density = 0
|
||||||
|
windoor.name = created_name
|
||||||
|
spawn(0)
|
||||||
|
windoor.close()
|
||||||
|
|
||||||
if(src.electronics.one_access)
|
if(src.electronics.one_access)
|
||||||
windoor.req_access = null
|
windoor.req_access = null
|
||||||
@@ -257,8 +259,11 @@ obj/structure/windoor_assembly/Destroy()
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
//Update to reflect changes(if applicable)
|
//Update to reflect changes(if applicable)
|
||||||
update_icon()
|
update_state()
|
||||||
|
|
||||||
|
/obj/structure/windoor_assembly/proc/update_state()
|
||||||
|
update_icon()
|
||||||
|
name += " ([created_name])"
|
||||||
|
|
||||||
//Rotates the windoor assembly clockwise
|
//Rotates the windoor assembly clockwise
|
||||||
/obj/structure/windoor_assembly/verb/revrotate()
|
/obj/structure/windoor_assembly/verb/revrotate()
|
||||||
|
|||||||
@@ -161,6 +161,7 @@
|
|||||||
if(reinf) tforce *= 0.25
|
if(reinf) tforce *= 0.25
|
||||||
if(health - tforce <= 7 && !reinf)
|
if(health - tforce <= 7 && !reinf)
|
||||||
anchored = 0
|
anchored = 0
|
||||||
|
update_verbs()
|
||||||
update_nearby_icons()
|
update_nearby_icons()
|
||||||
step(src, get_dir(AM, src))
|
step(src, get_dir(AM, src))
|
||||||
take_damage(tforce)
|
take_damage(tforce)
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
if(density)
|
if(density)
|
||||||
can_open = WALL_OPENING
|
can_open = WALL_OPENING
|
||||||
//flick("[material.icon_base]fwall_opening", src)
|
//flick("[material.icon_base]fwall_opening", src)
|
||||||
sleep(15)
|
|
||||||
density = 0
|
density = 0
|
||||||
update_icon()
|
update_icon()
|
||||||
set_light(0)
|
set_light(0)
|
||||||
@@ -20,7 +19,6 @@
|
|||||||
//flick("[material.icon_base]fwall_closing", src)
|
//flick("[material.icon_base]fwall_closing", src)
|
||||||
density = 1
|
density = 1
|
||||||
update_icon()
|
update_icon()
|
||||||
sleep(15)
|
|
||||||
set_light(1)
|
set_light(1)
|
||||||
src.blocks_air = 1
|
src.blocks_air = 1
|
||||||
src.opacity = 1
|
src.opacity = 1
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
src << "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))"
|
src << "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))"
|
||||||
return
|
return
|
||||||
suiciding = 1
|
suiciding = 1
|
||||||
|
does_not_breathe = 0 //Prevents ling-suicide zombies, or something
|
||||||
var/obj/item/held_item = get_active_hand()
|
var/obj/item/held_item = get_active_hand()
|
||||||
if(held_item)
|
if(held_item)
|
||||||
var/damagetype = held_item.suicide_act(src)
|
var/damagetype = held_item.suicide_act(src)
|
||||||
|
|||||||
@@ -392,7 +392,7 @@
|
|||||||
if (ticker && ticker.current_state >= GAME_STATE_PLAYING)
|
if (ticker && ticker.current_state >= GAME_STATE_PLAYING)
|
||||||
var/dat = "<html><head><title>Round Status</title></head><body><h1><B>Round Status</B></h1>"
|
var/dat = "<html><head><title>Round Status</title></head><body><h1><B>Round Status</B></h1>"
|
||||||
dat += "Current Game Mode: <B>[ticker.mode.name]</B><BR>"
|
dat += "Current Game Mode: <B>[ticker.mode.name]</B><BR>"
|
||||||
dat += "Round Duration: <B>[round_duration_as_text()]</B><BR>"
|
dat += "Round Duration: <B>[roundduration2text()]</B><BR>"
|
||||||
dat += "<B>Emergency shuttle</B><BR>"
|
dat += "<B>Emergency shuttle</B><BR>"
|
||||||
if (!emergency_shuttle.online())
|
if (!emergency_shuttle.online())
|
||||||
dat += "<a href='?src=\ref[src];call_shuttle=1'>Call Shuttle</a><br>"
|
dat += "<a href='?src=\ref[src];call_shuttle=1'>Call Shuttle</a><br>"
|
||||||
|
|||||||
@@ -892,9 +892,9 @@
|
|||||||
if (ticker && ticker.mode)
|
if (ticker && ticker.mode)
|
||||||
return alert(usr, "The game has already started.", null, null, null, null)
|
return alert(usr, "The game has already started.", null, null, null, null)
|
||||||
master_mode = href_list["c_mode2"]
|
master_mode = href_list["c_mode2"]
|
||||||
log_admin("[key_name(usr)] set the mode as [master_mode].")
|
log_admin("[key_name(usr)] set the mode as [config.mode_names[master_mode]].")
|
||||||
message_admins("\blue [key_name_admin(usr)] set the mode as [master_mode].", 1)
|
message_admins("\blue [key_name_admin(usr)] set the mode as [config.mode_names[master_mode]].", 1)
|
||||||
world << "\blue <b>The mode is now: [master_mode]</b>"
|
world << "\blue <b>The mode is now: [config.mode_names[master_mode]]</b>"
|
||||||
Game() // updates the main game menu
|
Game() // updates the main game menu
|
||||||
world.save_mode(master_mode)
|
world.save_mode(master_mode)
|
||||||
.(href, list("c_mode"=1))
|
.(href, list("c_mode"=1))
|
||||||
|
|||||||
@@ -137,6 +137,7 @@
|
|||||||
prefs.last_id = computer_id //these are gonna be used for banning
|
prefs.last_id = computer_id //these are gonna be used for banning
|
||||||
|
|
||||||
. = ..() //calls mob.Login()
|
. = ..() //calls mob.Login()
|
||||||
|
prefs.sanitize_preferences()
|
||||||
|
|
||||||
if(custom_event_msg && custom_event_msg != "")
|
if(custom_event_msg && custom_event_msg != "")
|
||||||
src << "<h1 class='alert'>Custom Event</h1>"
|
src << "<h1 class='alert'>Custom Event</h1>"
|
||||||
|
|||||||
@@ -52,34 +52,38 @@ var/list/gear_datums = list()
|
|||||||
S["gear"] << pref.gear
|
S["gear"] << pref.gear
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/loadout/proc/valid_gear_choices(var/max_cost)
|
/datum/category_item/player_setup_item/loadout/proc/valid_gear_choices(var/max_cost)
|
||||||
var/list/valid_gear_choices = list()
|
. = list()
|
||||||
|
var/mob/preference_mob = preference_mob()
|
||||||
for(var/gear_name in gear_datums)
|
for(var/gear_name in gear_datums)
|
||||||
var/datum/gear/G = gear_datums[gear_name]
|
var/datum/gear/G = gear_datums[gear_name]
|
||||||
if(G.whitelisted && !is_alien_whitelisted(preference_mob(), all_species[G.whitelisted]))
|
|
||||||
|
if(G.whitelisted && !is_alien_whitelisted(preference_mob, all_species[G.whitelisted]))
|
||||||
continue
|
continue
|
||||||
if(max_cost && G.cost > max_cost)
|
if(max_cost && G.cost > max_cost)
|
||||||
continue
|
continue
|
||||||
valid_gear_choices += gear_name
|
. += gear_name
|
||||||
return valid_gear_choices
|
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/loadout/sanitize_character()
|
/datum/category_item/player_setup_item/loadout/sanitize_character()
|
||||||
|
var/mob/preference_mob = preference_mob()
|
||||||
if(!islist(pref.gear))
|
if(!islist(pref.gear))
|
||||||
pref.gear = list()
|
pref.gear = list()
|
||||||
|
|
||||||
for(var/gear_name in pref.gear)
|
for(var/gear_name in pref.gear)
|
||||||
if(!(gear_name in gear_datums))
|
if(!(gear_name in gear_datums))
|
||||||
pref.gear -= gear_name
|
pref.gear -= gear_name
|
||||||
|
|
||||||
var/total_cost = 0
|
var/total_cost = 0
|
||||||
for(var/gear_name in pref.gear)
|
for(var/gear_name in pref.gear)
|
||||||
if(!gear_datums[gear_name])
|
if(!gear_datums[gear_name])
|
||||||
|
preference_mob << "<span class='warning'>You cannot have more than one of the \the [gear_name]</span>"
|
||||||
pref.gear -= gear_name
|
pref.gear -= gear_name
|
||||||
else if(!(gear_name in valid_gear_choices()))
|
else if(!(gear_name in valid_gear_choices()))
|
||||||
|
preference_mob << "<span class='warning'>You cannot take \the [gear_name] as you are not whitelisted for the species.</span>"
|
||||||
pref.gear -= gear_name
|
pref.gear -= gear_name
|
||||||
else
|
else
|
||||||
var/datum/gear/G = gear_datums[gear_name]
|
var/datum/gear/G = gear_datums[gear_name]
|
||||||
if(total_cost + G.cost > MAX_GEAR_COST)
|
if(total_cost + G.cost > MAX_GEAR_COST)
|
||||||
pref.gear -= gear_name
|
pref.gear -= gear_name
|
||||||
|
preference_mob << "<span class='warning'>You cannot afford to take \the [gear_name]</span>"
|
||||||
else
|
else
|
||||||
total_cost += G.cost
|
total_cost += G.cost
|
||||||
|
|
||||||
|
|||||||
@@ -180,6 +180,31 @@
|
|||||||
path = /obj/item/clothing/suit/wcoat
|
path = /obj/item/clothing/suit/wcoat
|
||||||
cost = 1
|
cost = 1
|
||||||
|
|
||||||
|
/datum/gear/suit/wcoat/red
|
||||||
|
display_name = "red waistcoat"
|
||||||
|
path = /obj/item/clothing/suit/wcoat/red
|
||||||
|
|
||||||
|
/datum/gear/suit/wcoat/grey
|
||||||
|
display_name = "grey waistcoat"
|
||||||
|
path = /obj/item/clothing/suit/wcoat/grey
|
||||||
|
|
||||||
|
/datum/gear/suit/wcoat/brown
|
||||||
|
display_name = "brown waistcoat"
|
||||||
|
path = /obj/item/clothing/suit/wcoat/brown
|
||||||
|
|
||||||
|
/datum/gear/suit/swvest
|
||||||
|
display_name = "black sweatervest"
|
||||||
|
path = /obj/item/clothing/suit/wcoat/swvest
|
||||||
|
cost = 1
|
||||||
|
|
||||||
|
/datum/gear/suit/swvest/blue
|
||||||
|
display_name = "blue sweatervest"
|
||||||
|
path = /obj/item/clothing/suit/wcoat/swvest/blue
|
||||||
|
|
||||||
|
/datum/gear/suit/swvest/red
|
||||||
|
display_name = "red sweatervest"
|
||||||
|
path = /obj/item/clothing/suit/wcoat/swvest/red
|
||||||
|
|
||||||
/datum/gear/suit/forensics
|
/datum/gear/suit/forensics
|
||||||
display_name = "forensics long, red"
|
display_name = "forensics long, red"
|
||||||
path = /obj/item/clothing/suit/storage/forensics/red/long
|
path = /obj/item/clothing/suit/storage/forensics/red/long
|
||||||
|
|||||||
@@ -2,14 +2,12 @@
|
|||||||
/datum/gear/suit/zhan_furs
|
/datum/gear/suit/zhan_furs
|
||||||
display_name = "Zhan-Khazan furs (Tajara)"
|
display_name = "Zhan-Khazan furs (Tajara)"
|
||||||
path = /obj/item/clothing/suit/tajaran/furs
|
path = /obj/item/clothing/suit/tajaran/furs
|
||||||
whitelisted = "Tajara"
|
|
||||||
sort_category = "Xenowear"
|
sort_category = "Xenowear"
|
||||||
|
|
||||||
/datum/gear/suit/unathi_mantle
|
/datum/gear/suit/unathi_mantle
|
||||||
display_name = "hide mantle (Unathi)"
|
display_name = "hide mantle (Unathi)"
|
||||||
path = /obj/item/clothing/suit/unathi/mantle
|
path = /obj/item/clothing/suit/unathi/mantle
|
||||||
cost = 1
|
cost = 1
|
||||||
whitelisted = "Unathi"
|
|
||||||
sort_category = "Xenowear"
|
sort_category = "Xenowear"
|
||||||
|
|
||||||
/datum/gear/ears/skrell/chains //Chains
|
/datum/gear/ears/skrell/chains //Chains
|
||||||
|
|||||||
@@ -129,8 +129,6 @@
|
|||||||
// Need due to, for example, the 01_basic module relying on species having been loaded to sanitize correctly but that isn't loaded until module 03_body.
|
// Need due to, for example, the 01_basic module relying on species having been loaded to sanitize correctly but that isn't loaded until module 03_body.
|
||||||
for(var/datum/category_item/player_setup_item/PI in items)
|
for(var/datum/category_item/player_setup_item/PI in items)
|
||||||
PI.load_character(S)
|
PI.load_character(S)
|
||||||
for(var/datum/category_item/player_setup_item/PI in items)
|
|
||||||
PI.sanitize_character()
|
|
||||||
|
|
||||||
/datum/category_group/player_setup_category/proc/save_character(var/savefile/S)
|
/datum/category_group/player_setup_category/proc/save_character(var/savefile/S)
|
||||||
// Sanitize all data, then save it
|
// Sanitize all data, then save it
|
||||||
@@ -142,8 +140,6 @@
|
|||||||
/datum/category_group/player_setup_category/proc/load_preferences(var/savefile/S)
|
/datum/category_group/player_setup_category/proc/load_preferences(var/savefile/S)
|
||||||
for(var/datum/category_item/player_setup_item/PI in items)
|
for(var/datum/category_item/player_setup_item/PI in items)
|
||||||
PI.load_preferences(S)
|
PI.load_preferences(S)
|
||||||
for(var/datum/category_item/player_setup_item/PI in items)
|
|
||||||
PI.sanitize_preferences()
|
|
||||||
|
|
||||||
/datum/category_group/player_setup_category/proc/save_preferences(var/savefile/S)
|
/datum/category_group/player_setup_category/proc/save_preferences(var/savefile/S)
|
||||||
for(var/datum/category_item/player_setup_item/PI in items)
|
for(var/datum/category_item/player_setup_item/PI in items)
|
||||||
|
|||||||
@@ -237,12 +237,14 @@ datum/preferences
|
|||||||
else if(href_list["reload"])
|
else if(href_list["reload"])
|
||||||
load_preferences()
|
load_preferences()
|
||||||
load_character()
|
load_character()
|
||||||
|
sanitize_preferences()
|
||||||
else if(href_list["load"])
|
else if(href_list["load"])
|
||||||
if(!IsGuestKey(usr.key))
|
if(!IsGuestKey(usr.key))
|
||||||
open_load_dialog(usr)
|
open_load_dialog(usr)
|
||||||
return 1
|
return 1
|
||||||
else if(href_list["changeslot"])
|
else if(href_list["changeslot"])
|
||||||
load_character(text2num(href_list["changeslot"]))
|
load_character(text2num(href_list["changeslot"]))
|
||||||
|
sanitize_preferences()
|
||||||
close_load_dialog(usr)
|
close_load_dialog(usr)
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -32,7 +32,8 @@
|
|||||||
/obj/item/clothing/head/chaplain_hood
|
/obj/item/clothing/head/chaplain_hood
|
||||||
name = "chaplain's hood"
|
name = "chaplain's hood"
|
||||||
desc = "It's hood that covers the head. It keeps you warm during the space winters."
|
desc = "It's hood that covers the head. It keeps you warm during the space winters."
|
||||||
icon_state = "beret_black"
|
icon_state = "chaplain_hood"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black")
|
||||||
flags_inv = BLOCKHAIR
|
flags_inv = BLOCKHAIR
|
||||||
body_parts_covered = HEAD
|
body_parts_covered = HEAD
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,11 @@
|
|||||||
siemens_coefficient = 0.9
|
siemens_coefficient = 0.9
|
||||||
body_parts_covered = 0
|
body_parts_covered = 0
|
||||||
|
|
||||||
|
/obj/item/clothing/head/centhat/customs
|
||||||
|
name = "Customs Hat"
|
||||||
|
desc = "A formal hat for SolGov Customs Officers."
|
||||||
|
icon_state = "customshat"
|
||||||
|
|
||||||
/obj/item/clothing/head/hairflower
|
/obj/item/clothing/head/hairflower
|
||||||
name = "hair flower pin"
|
name = "hair flower pin"
|
||||||
icon_state = "hairflower"
|
icon_state = "hairflower"
|
||||||
@@ -73,7 +78,7 @@
|
|||||||
/obj/item/clothing/head/nursehat
|
/obj/item/clothing/head/nursehat
|
||||||
name = "nurse's hat"
|
name = "nurse's hat"
|
||||||
desc = "It allows quick identification of trained medical personnel."
|
desc = "It allows quick identification of trained medical personnel."
|
||||||
item_state_slots = list(slot_r_hand_str = "nursehat", slot_l_hand_str = "nursehat")
|
icon_state = "nursehat"
|
||||||
siemens_coefficient = 0.9
|
siemens_coefficient = 0.9
|
||||||
body_parts_covered = 0
|
body_parts_covered = 0
|
||||||
|
|
||||||
|
|||||||
@@ -168,7 +168,7 @@
|
|||||||
|
|
||||||
helm_type = /obj/item/clothing/head/helmet/space/rig/ert
|
helm_type = /obj/item/clothing/head/helmet/space/rig/ert
|
||||||
|
|
||||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/weapon/pickaxe/hand,/obj/item/weapon/storage/bag/fossils)
|
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/weapon/pickaxe/hand,/obj/item/weapon/storage/bag/fossils)
|
||||||
|
|
||||||
req_access = list()
|
req_access = list()
|
||||||
req_one_access = list()
|
req_one_access = list()
|
||||||
|
|||||||
@@ -92,6 +92,31 @@
|
|||||||
blood_overlay_type = "armor"
|
blood_overlay_type = "armor"
|
||||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/wcoat/red
|
||||||
|
name = "red waistcoat"
|
||||||
|
icon_state = "red_waistcoat"
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/wcoat/grey
|
||||||
|
name = "grey waistcoat"
|
||||||
|
icon_state = "grey_waistcoat"
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/wcoat/brown
|
||||||
|
name = "brown waistcoat"
|
||||||
|
icon_state = "brown_waistcoat"
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/wcoat/swvest
|
||||||
|
name = "black sweatervest"
|
||||||
|
desc = "A sleeveless sweater. Wear this if you don't want your arms to be warm, or if you're a nerd."
|
||||||
|
icon_state = "sweatervest"
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/wcoat/swvest/blue
|
||||||
|
name = "blue sweatervest"
|
||||||
|
icon_state = "sweatervest_blue"
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/wcoat/swvest/red
|
||||||
|
name = "red sweatervest"
|
||||||
|
icon_state = "sweatervest_red"
|
||||||
|
|
||||||
/obj/item/clothing/suit/apron/overalls
|
/obj/item/clothing/suit/apron/overalls
|
||||||
name = "coveralls"
|
name = "coveralls"
|
||||||
desc = "A set of denim overalls."
|
desc = "A set of denim overalls."
|
||||||
@@ -198,6 +223,12 @@
|
|||||||
icon_state = "neocoat"
|
icon_state = "neocoat"
|
||||||
item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket")
|
item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket")
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/customs
|
||||||
|
name = "customs jacket"
|
||||||
|
desc = "A standard SolGov Customs formal jacket."
|
||||||
|
icon_state = "customs_jacket"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "suit_blue", slot_l_hand_str = "suit_blue")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* stripper
|
* stripper
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -33,6 +33,14 @@
|
|||||||
icon_state = "waiter"
|
icon_state = "waiter"
|
||||||
rolled_sleeves = 0
|
rolled_sleeves = 0
|
||||||
|
|
||||||
|
/obj/item/clothing/under/customs
|
||||||
|
name = "customs uniform"
|
||||||
|
desc = "A standard SolGov customs uniform. Complete with epaulettes."
|
||||||
|
icon_state = "cu_suit"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/customs/khaki
|
||||||
|
icon_state = "cu_suit_kh"
|
||||||
|
|
||||||
/obj/item/clothing/under/rank/mailman
|
/obj/item/clothing/under/rank/mailman
|
||||||
name = "mailman's jumpsuit"
|
name = "mailman's jumpsuit"
|
||||||
desc = "<i>'Special delivery!'</i>"
|
desc = "<i>'Special delivery!'</i>"
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ log transactions
|
|||||||
T.amount = I:worth
|
T.amount = I:worth
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
authenticated_account.transaction_log.Add(T)
|
authenticated_account.transaction_log.Add(T)
|
||||||
|
|
||||||
user << "<span class='info'>You insert [I] into [src].</span>"
|
user << "<span class='info'>You insert [I] into [src].</span>"
|
||||||
@@ -307,7 +307,7 @@ log transactions
|
|||||||
T.purpose = transfer_purpose
|
T.purpose = transfer_purpose
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
T.amount = "([transfer_amount])"
|
T.amount = "([transfer_amount])"
|
||||||
authenticated_account.transaction_log.Add(T)
|
authenticated_account.transaction_log.Add(T)
|
||||||
else
|
else
|
||||||
@@ -343,7 +343,7 @@ log transactions
|
|||||||
T.purpose = "Unauthorised login attempt"
|
T.purpose = "Unauthorised login attempt"
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
failed_account.transaction_log.Add(T)
|
failed_account.transaction_log.Add(T)
|
||||||
else
|
else
|
||||||
usr << "\icon[src]<span class='warning'>Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.</span>"
|
usr << "\icon[src]<span class='warning'>Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.</span>"
|
||||||
@@ -363,7 +363,7 @@ log transactions
|
|||||||
T.purpose = "Remote terminal access"
|
T.purpose = "Remote terminal access"
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
authenticated_account.transaction_log.Add(T)
|
authenticated_account.transaction_log.Add(T)
|
||||||
|
|
||||||
usr << "\icon[src]<span class='info'>Access granted. Welcome user '[authenticated_account.owner_name].'</span>"
|
usr << "\icon[src]<span class='info'>Access granted. Welcome user '[authenticated_account.owner_name].'</span>"
|
||||||
@@ -395,7 +395,7 @@ log transactions
|
|||||||
T.amount = "([amount])"
|
T.amount = "([amount])"
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
authenticated_account.transaction_log.Add(T)
|
authenticated_account.transaction_log.Add(T)
|
||||||
else
|
else
|
||||||
usr << "\icon[src]<span class='warning'>You don't have enough funds to do that!</span>"
|
usr << "\icon[src]<span class='warning'>You don't have enough funds to do that!</span>"
|
||||||
@@ -422,7 +422,7 @@ log transactions
|
|||||||
T.amount = "([amount])"
|
T.amount = "([amount])"
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
authenticated_account.transaction_log.Add(T)
|
authenticated_account.transaction_log.Add(T)
|
||||||
else
|
else
|
||||||
usr << "\icon[src]<span class='warning'>You don't have enough funds to do that!</span>"
|
usr << "\icon[src]<span class='warning'>You don't have enough funds to do that!</span>"
|
||||||
@@ -478,7 +478,7 @@ log transactions
|
|||||||
T.purpose = "Remote terminal access"
|
T.purpose = "Remote terminal access"
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
authenticated_account.transaction_log.Add(T)
|
authenticated_account.transaction_log.Add(T)
|
||||||
|
|
||||||
view_screen = 0
|
view_screen = 0
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
M.account_number = rand(111111, 999999)
|
M.account_number = rand(111111, 999999)
|
||||||
else
|
else
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
T.source_terminal = source_db.machine_id
|
T.source_terminal = source_db.machine_id
|
||||||
|
|
||||||
M.account_number = next_account_number
|
M.account_number = next_account_number
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
R.info += "<i>Account number:</i> [M.account_number]<br>"
|
R.info += "<i>Account number:</i> [M.account_number]<br>"
|
||||||
R.info += "<i>Account pin:</i> [M.remote_access_pin]<br>"
|
R.info += "<i>Account pin:</i> [M.remote_access_pin]<br>"
|
||||||
R.info += "<i>Starting balance:</i> $[M.money]<br>"
|
R.info += "<i>Starting balance:</i> $[M.money]<br>"
|
||||||
R.info += "<i>Date and time:</i> [worldtime2text()], [current_date_string]<br><br>"
|
R.info += "<i>Date and time:</i> [stationtime2text()], [current_date_string]<br><br>"
|
||||||
R.info += "<i>Creation terminal ID:</i> [source_db.machine_id]<br>"
|
R.info += "<i>Creation terminal ID:</i> [source_db.machine_id]<br>"
|
||||||
R.info += "<i>Authorised NT officer overseeing creation:</i> [source_db.held_card.registered_name]<br>"
|
R.info += "<i>Authorised NT officer overseeing creation:</i> [source_db.held_card.registered_name]<br>"
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
else
|
else
|
||||||
T.amount = "[amount]"
|
T.amount = "[amount]"
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
T.source_terminal = terminal_id
|
T.source_terminal = terminal_id
|
||||||
D.transaction_log.Add(T)
|
D.transaction_log.Add(T)
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
T.purpose = reason
|
T.purpose = reason
|
||||||
T.amount = amount
|
T.amount = amount
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
return T
|
return T
|
||||||
|
|
||||||
|
|||||||
@@ -140,7 +140,7 @@
|
|||||||
T.amount = transaction_amount
|
T.amount = transaction_amount
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
linked_account.transaction_log.Add(T)
|
linked_account.transaction_log.Add(T)
|
||||||
else
|
else
|
||||||
usr << "\icon[src]<span class='warning'>\The [O] doesn't have that much money!</span>"
|
usr << "\icon[src]<span class='warning'>\The [O] doesn't have that much money!</span>"
|
||||||
@@ -264,7 +264,7 @@
|
|||||||
T.amount = "[transaction_amount]"
|
T.amount = "[transaction_amount]"
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
D.transaction_log.Add(T)
|
D.transaction_log.Add(T)
|
||||||
//
|
//
|
||||||
T = new()
|
T = new()
|
||||||
@@ -273,7 +273,7 @@
|
|||||||
T.amount = "[transaction_amount]"
|
T.amount = "[transaction_amount]"
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
linked_account.transaction_log.Add(T)
|
linked_account.transaction_log.Add(T)
|
||||||
else
|
else
|
||||||
usr << "\icon[src]<span class='warning'>You don't have that much money!</span>"
|
usr << "\icon[src]<span class='warning'>You don't have that much money!</span>"
|
||||||
|
|||||||
@@ -256,7 +256,7 @@
|
|||||||
T.amount = "([transaction_amount])"
|
T.amount = "([transaction_amount])"
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
D.transaction_log.Add(T)
|
D.transaction_log.Add(T)
|
||||||
|
|
||||||
// Create log entry in owner's account
|
// Create log entry in owner's account
|
||||||
@@ -266,7 +266,7 @@
|
|||||||
T.amount = "[transaction_amount]"
|
T.amount = "[transaction_amount]"
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
linked_account.transaction_log.Add(T)
|
linked_account.transaction_log.Add(T)
|
||||||
|
|
||||||
// Save log
|
// Save log
|
||||||
@@ -304,7 +304,7 @@
|
|||||||
T.amount = "[transaction_amount]"
|
T.amount = "[transaction_amount]"
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
linked_account.transaction_log.Add(T)
|
linked_account.transaction_log.Add(T)
|
||||||
|
|
||||||
// Save log
|
// Save log
|
||||||
@@ -414,7 +414,7 @@
|
|||||||
<tr></tr>
|
<tr></tr>
|
||||||
<tr><td class="tx-name">Customer</td><td class="tx-data">[c_name]</td></tr>
|
<tr><td class="tx-name">Customer</td><td class="tx-data">[c_name]</td></tr>
|
||||||
<tr><td class="tx-name">Pay Method</td><td class="tx-data">[p_method]</td></tr>
|
<tr><td class="tx-name">Pay Method</td><td class="tx-data">[p_method]</td></tr>
|
||||||
<tr><td class="tx-name">Station Time</td><td class="tx-data">[worldtime2text()]</td></tr>
|
<tr><td class="tx-name">Station Time</td><td class="tx-data">[stationtime2text()]</td></tr>
|
||||||
</table>
|
</table>
|
||||||
<table width=300>
|
<table width=300>
|
||||||
"}
|
"}
|
||||||
|
|||||||
@@ -231,7 +231,7 @@
|
|||||||
T.amount = "([transaction_amount])"
|
T.amount = "([transaction_amount])"
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
D.transaction_log.Add(T)
|
D.transaction_log.Add(T)
|
||||||
|
|
||||||
// Create log entry in owner's account
|
// Create log entry in owner's account
|
||||||
@@ -241,7 +241,7 @@
|
|||||||
T.amount = "[transaction_amount]"
|
T.amount = "[transaction_amount]"
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
linked_account.transaction_log.Add(T)
|
linked_account.transaction_log.Add(T)
|
||||||
|
|
||||||
// Save log
|
// Save log
|
||||||
@@ -274,7 +274,7 @@
|
|||||||
T.amount = "[transaction_amount]"
|
T.amount = "[transaction_amount]"
|
||||||
T.source_terminal = machine_id
|
T.source_terminal = machine_id
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
linked_account.transaction_log.Add(T)
|
linked_account.transaction_log.Add(T)
|
||||||
|
|
||||||
// Save log
|
// Save log
|
||||||
@@ -348,7 +348,7 @@
|
|||||||
<tr></tr>
|
<tr></tr>
|
||||||
<tr><td class="tx-name">Customer</td><td class="tx-data">[c_name]</td></tr>
|
<tr><td class="tx-name">Customer</td><td class="tx-data">[c_name]</td></tr>
|
||||||
<tr><td class="tx-name">Pay Method</td><td class="tx-data">[p_method]</td></tr>
|
<tr><td class="tx-name">Pay Method</td><td class="tx-data">[p_method]</td></tr>
|
||||||
<tr><td class="tx-name">Station Time</td><td class="tx-data">[worldtime2text()]</td></tr>
|
<tr><td class="tx-name">Station Time</td><td class="tx-data">[stationtime2text()]</td></tr>
|
||||||
</table>
|
</table>
|
||||||
<table width=300>
|
<table width=300>
|
||||||
"}
|
"}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
if(EM.add_to_queue)
|
if(EM.add_to_queue)
|
||||||
EC.available_events += EM
|
EC.available_events += EM
|
||||||
|
|
||||||
log_debug("Event '[EM.name]' has completed at [worldtime2text()].")
|
log_debug("Event '[EM.name]' has completed at [worldtime2stationtime(world.time)].")
|
||||||
|
|
||||||
/datum/event_manager/proc/delay_events(var/severity, var/delay)
|
/datum/event_manager/proc/delay_events(var/severity, var/delay)
|
||||||
var/list/datum/event_container/EC = event_containers[severity]
|
var/list/datum/event_container/EC = event_containers[severity]
|
||||||
@@ -67,12 +67,12 @@
|
|||||||
var/datum/event_meta/EM = E.event_meta
|
var/datum/event_meta/EM = E.event_meta
|
||||||
if(EM.name == "Nothing")
|
if(EM.name == "Nothing")
|
||||||
continue
|
continue
|
||||||
var/message = "'[EM.name]' began at [worldtime2text(E.startedAt)] "
|
var/message = "'[EM.name]' began at [worldtime2stationtime(E.startedAt)] "
|
||||||
if(E.isRunning)
|
if(E.isRunning)
|
||||||
message += "and is still running."
|
message += "and is still running."
|
||||||
else
|
else
|
||||||
if(E.endedAt - E.startedAt > MinutesToTicks(5)) // Only mention end time if the entire duration was more than 5 minutes
|
if(E.endedAt - E.startedAt > MinutesToTicks(5)) // Only mention end time if the entire duration was more than 5 minutes
|
||||||
message += "and ended at [worldtime2text(E.endedAt)]."
|
message += "and ended at [worldtime2stationtime(E.endedAt)]."
|
||||||
else
|
else
|
||||||
message += "and ran to completion."
|
message += "and ran to completion."
|
||||||
|
|
||||||
@@ -130,7 +130,7 @@
|
|||||||
var/next_event_at = max(0, EC.next_event_time - world.time)
|
var/next_event_at = max(0, EC.next_event_time - world.time)
|
||||||
html += "<tr>"
|
html += "<tr>"
|
||||||
html += "<td>[severity_to_string[severity]]</td>"
|
html += "<td>[severity_to_string[severity]]</td>"
|
||||||
html += "<td>[worldtime2text(max(EC.next_event_time, world.time))]</td>"
|
html += "<td>[worldtime2stationtime(max(EC.next_event_time, world.time))]</td>"
|
||||||
html += "<td>[round(next_event_at / 600, 0.1)]</td>"
|
html += "<td>[round(next_event_at / 600, 0.1)]</td>"
|
||||||
html += "<td>"
|
html += "<td>"
|
||||||
html += "<A align='right' href='?src=\ref[src];dec_timer=2;event=\ref[EC]'>--</A>"
|
html += "<A align='right' href='?src=\ref[src];dec_timer=2;event=\ref[EC]'>--</A>"
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
html += "<tr>"
|
html += "<tr>"
|
||||||
html += "<td>[severity_to_string[EM.severity]]</td>"
|
html += "<td>[severity_to_string[EM.severity]]</td>"
|
||||||
html += "<td>[EM.name]</td>"
|
html += "<td>[EM.name]</td>"
|
||||||
html += "<td>[worldtime2text(ends_at)]</td>"
|
html += "<td>[worldtime2stationtime(ends_at)]</td>"
|
||||||
html += "<td>[ends_in]</td>"
|
html += "<td>[ends_in]</td>"
|
||||||
html += "<td><A align='right' href='?src=\ref[src];stop=\ref[E]'>Stop</A></td>"
|
html += "<td><A align='right' href='?src=\ref[src];stop=\ref[E]'>Stop</A></td>"
|
||||||
html += "</tr>"
|
html += "</tr>"
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
kill()
|
kill()
|
||||||
|
|
||||||
/datum/event/money_hacker/announce()
|
/datum/event/money_hacker/announce()
|
||||||
var/message = "A brute force hack has been detected (in progress since [worldtime2text()]). The target of the attack is: Financial account #[affected_account.account_number], \
|
var/message = "A brute force hack has been detected (in progress since [stationtime2text()]). The target of the attack is: Financial account #[affected_account.account_number], \
|
||||||
without intervention this attack will succeed in approximately 10 minutes. Required intervention: temporary suspension of affected accounts until the attack has ceased. \
|
without intervention this attack will succeed in approximately 10 minutes. Required intervention: temporary suspension of affected accounts until the attack has ceased. \
|
||||||
Notifications will be sent as updates occur.<br>"
|
Notifications will be sent as updates occur.<br>"
|
||||||
var/my_department = "[station_name()] firewall subroutines"
|
var/my_department = "[station_name()] firewall subroutines"
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
T.date = pick("", current_date_string, date1, date2)
|
T.date = pick("", current_date_string, date1, date2)
|
||||||
var/time1 = rand(0, 99999999)
|
var/time1 = rand(0, 99999999)
|
||||||
var/time2 = "[round(time1 / 36000)+12]:[(time1 / 600 % 60) < 10 ? add_zero(time1 / 600 % 60, 1) : time1 / 600 % 60]"
|
var/time2 = "[round(time1 / 36000)+12]:[(time1 / 600 % 60) < 10 ? add_zero(time1 / 600 % 60, 1) : time1 / 600 % 60]"
|
||||||
T.time = pick("", worldtime2text(), time2)
|
T.time = pick("", stationtime2text(), time2)
|
||||||
T.source_terminal = pick("","[pick("Biesel","New Gibson")] GalaxyNet Terminal #[rand(111,999)]","your mums place","nantrasen high CommanD")
|
T.source_terminal = pick("","[pick("Biesel","New Gibson")] GalaxyNet Terminal #[rand(111,999)]","your mums place","nantrasen high CommanD")
|
||||||
|
|
||||||
affected_account.transaction_log.Add(T)
|
affected_account.transaction_log.Add(T)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
T.purpose = "Winner!"
|
T.purpose = "Winner!"
|
||||||
T.amount = winner_sum
|
T.amount = winner_sum
|
||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = stationtime2text()
|
||||||
T.source_terminal = "Sif TCD Terminal #[rand(111,333)]"
|
T.source_terminal = "Sif TCD Terminal #[rand(111,333)]"
|
||||||
D.transaction_log.Add(T)
|
D.transaction_log.Add(T)
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
|
|
||||||
if(areas && areas.len > 0)
|
if(areas && areas.len > 0)
|
||||||
var/my_department = "[station_name()] firewall subroutines"
|
var/my_department = "[station_name()] firewall subroutines"
|
||||||
var/rc_message = "An unknown malicious program has been detected in the [english_list(areaName)] lighting and airlock control systems at [worldtime2text()]. Systems will be fully compromised within approximately three minutes. Direct intervention is required immediately.<br>"
|
var/rc_message = "An unknown malicious program has been detected in the [english_list(areaName)] lighting and airlock control systems at [stationtime2text()]. Systems will be fully compromised within approximately three minutes. Direct intervention is required immediately.<br>"
|
||||||
for(var/obj/machinery/message_server/MS in world)
|
for(var/obj/machinery/message_server/MS in world)
|
||||||
MS.send_rc_message("Engineering", my_department, rc_message, "", "", 2)
|
MS.send_rc_message("Engineering", my_department, rc_message, "", "", 2)
|
||||||
for(var/mob/living/silicon/ai/A in player_list)
|
for(var/mob/living/silicon/ai/A in player_list)
|
||||||
|
|||||||
@@ -395,7 +395,7 @@ var/list/name_to_material
|
|||||||
weight = 15
|
weight = 15
|
||||||
door_icon_base = "stone"
|
door_icon_base = "stone"
|
||||||
destruction_desc = "shatters"
|
destruction_desc = "shatters"
|
||||||
window_options = list("One Direction" = 1, "Full Window" = 4)
|
window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 2)
|
||||||
created_window = /obj/structure/window/basic
|
created_window = /obj/structure/window/basic
|
||||||
rod_product = /obj/item/stack/material/glass/reinforced
|
rod_product = /obj/item/stack/material/glass/reinforced
|
||||||
|
|
||||||
@@ -425,6 +425,12 @@ var/list/name_to_material
|
|||||||
for (var/obj/structure/window/check_window in user.loc)
|
for (var/obj/structure/window/check_window in user.loc)
|
||||||
window_count++
|
window_count++
|
||||||
possible_directions -= check_window.dir
|
possible_directions -= check_window.dir
|
||||||
|
for (var/obj/structure/windoor_assembly/check_assembly in user.loc)
|
||||||
|
window_count++
|
||||||
|
possible_directions -= check_assembly.dir
|
||||||
|
for (var/obj/machinery/door/window/check_windoor in user.loc)
|
||||||
|
window_count++
|
||||||
|
possible_directions -= check_windoor.dir
|
||||||
|
|
||||||
// Get the closest available dir to the user's current facing.
|
// Get the closest available dir to the user's current facing.
|
||||||
var/build_dir = SOUTHWEST //Default to southwest for fulltile windows.
|
var/build_dir = SOUTHWEST //Default to southwest for fulltile windows.
|
||||||
@@ -435,18 +441,12 @@ var/list/name_to_material
|
|||||||
else
|
else
|
||||||
if(choice in list("One Direction","Windoor"))
|
if(choice in list("One Direction","Windoor"))
|
||||||
if(possible_directions.len)
|
if(possible_directions.len)
|
||||||
for(var/direction in list(user.dir, turn(user.dir,90), turn(user.dir,180), turn(user.dir,270) ))
|
for(var/direction in list(user.dir, turn(user.dir,90), turn(user.dir,270), turn(user.dir,180)))
|
||||||
if(direction in possible_directions)
|
if(direction in possible_directions)
|
||||||
build_dir = direction
|
build_dir = direction
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
failed_to_build = 1
|
failed_to_build = 1
|
||||||
if(!failed_to_build && choice == "Windoor")
|
|
||||||
if(!is_reinforced())
|
|
||||||
user << "<span class='warning'>This material is not reinforced enough to use for a door.</span>"
|
|
||||||
return
|
|
||||||
if((locate(/obj/structure/windoor_assembly) in T.contents) || (locate(/obj/machinery/door/window) in T.contents))
|
|
||||||
failed_to_build = 1
|
|
||||||
if(failed_to_build)
|
if(failed_to_build)
|
||||||
user << "<span class='warning'>There is no room in this location.</span>"
|
user << "<span class='warning'>There is no room in this location.</span>"
|
||||||
return 1
|
return 1
|
||||||
@@ -454,7 +454,8 @@ var/list/name_to_material
|
|||||||
var/build_path = /obj/structure/windoor_assembly
|
var/build_path = /obj/structure/windoor_assembly
|
||||||
var/sheets_needed = window_options[choice]
|
var/sheets_needed = window_options[choice]
|
||||||
if(choice == "Windoor")
|
if(choice == "Windoor")
|
||||||
build_dir = user.dir
|
if(is_reinforced())
|
||||||
|
build_path = /obj/structure/windoor_assembly/secure
|
||||||
else
|
else
|
||||||
build_path = created_window
|
build_path = created_window
|
||||||
|
|
||||||
@@ -484,7 +485,7 @@ var/list/name_to_material
|
|||||||
weight = 30
|
weight = 30
|
||||||
stack_origin_tech = "materials=2"
|
stack_origin_tech = "materials=2"
|
||||||
composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 2, "glass" = SHEET_MATERIAL_AMOUNT)
|
composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 2, "glass" = SHEET_MATERIAL_AMOUNT)
|
||||||
window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 5)
|
window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 2)
|
||||||
created_window = /obj/structure/window/reinforced
|
created_window = /obj/structure/window/reinforced
|
||||||
wire_product = null
|
wire_product = null
|
||||||
rod_product = null
|
rod_product = null
|
||||||
@@ -497,6 +498,7 @@ var/list/name_to_material
|
|||||||
integrity = 100
|
integrity = 100
|
||||||
icon_colour = "#FC2BC5"
|
icon_colour = "#FC2BC5"
|
||||||
stack_origin_tech = list(TECH_MATERIAL = 4)
|
stack_origin_tech = list(TECH_MATERIAL = 4)
|
||||||
|
window_options = list("One Direction" = 1, "Full Window" = 4)
|
||||||
created_window = /obj/structure/window/phoronbasic
|
created_window = /obj/structure/window/phoronbasic
|
||||||
wire_product = null
|
wire_product = null
|
||||||
rod_product = /obj/item/stack/material/glass/phoronrglass
|
rod_product = /obj/item/stack/material/glass/phoronrglass
|
||||||
@@ -507,6 +509,7 @@ var/list/name_to_material
|
|||||||
stack_type = /obj/item/stack/material/glass/phoronrglass
|
stack_type = /obj/item/stack/material/glass/phoronrglass
|
||||||
stack_origin_tech = list(TECH_MATERIAL = 5)
|
stack_origin_tech = list(TECH_MATERIAL = 5)
|
||||||
composite_material = list() //todo
|
composite_material = list() //todo
|
||||||
|
window_options = list("One Direction" = 1, "Full Window" = 4)
|
||||||
created_window = /obj/structure/window/phoronreinforced
|
created_window = /obj/structure/window/phoronreinforced
|
||||||
hardness = 40
|
hardness = 40
|
||||||
weight = 30
|
weight = 30
|
||||||
|
|||||||
@@ -57,7 +57,7 @@
|
|||||||
var/drill_verb = "drilling"
|
var/drill_verb = "drilling"
|
||||||
sharp = 1
|
sharp = 1
|
||||||
|
|
||||||
var/excavation_amount = 100
|
var/excavation_amount = 200
|
||||||
|
|
||||||
/obj/item/weapon/pickaxe/hammer
|
/obj/item/weapon/pickaxe/hammer
|
||||||
name = "sledgehammer"
|
name = "sledgehammer"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user