mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-23 08:31:57 +00:00
Allows security to fine criminals with the sentencing console Prints a human readable copy of the charges and the applied sentence
92 lines
2.8 KiB
Plaintext
92 lines
2.8 KiB
Plaintext
/var/global/datum/controller/subsystem/law/SSlaw
|
|
|
|
/datum/controller/subsystem/law
|
|
name = "Law"
|
|
flags = SS_NO_FIRE
|
|
|
|
var/list/laws = list() // All laws
|
|
var/list/low_severity = list()
|
|
var/list/med_severity = list()
|
|
var/list/high_severity = list()
|
|
|
|
/datum/controller/subsystem/law/New()
|
|
NEW_SS_GLOBAL(SSlaw)
|
|
|
|
/datum/controller/subsystem/law/Initialize(timeofday)
|
|
if(config.sql_enabled)
|
|
load_from_sql()
|
|
else
|
|
load_from_code()
|
|
|
|
/datum/controller/subsystem/law/proc/load_from_code()
|
|
for (var/L in subtypesof(/datum/law/low_severity))
|
|
low_severity += new L
|
|
|
|
for (var/L in subtypesof(/datum/law/med_severity))
|
|
med_severity += new L
|
|
|
|
for (var/L in subtypesof(/datum/law/high_severity))
|
|
high_severity += new L
|
|
|
|
laws = low_severity + med_severity + high_severity
|
|
|
|
/datum/controller/subsystem/law/proc/load_from_sql()
|
|
if(!establish_db_connection(dbcon))
|
|
log_debug("SSlaw: SQL ERROR - Failed to connect.")
|
|
return load_from_code()
|
|
|
|
var/DBQuery/law_query = dbcon.NewQuery("SELECT law_id, name, description, min_fine, max_fine, min_brig_time, max_brig_time, severity, felony FROM ss13_law WHERE deleted_at IS NULL ORDER BY law_id ASC")
|
|
law_query.Execute()
|
|
while(law_query.NextRow())
|
|
CHECK_TICK
|
|
try
|
|
var/datum/law/L = new
|
|
L.id = law_query.item[1]
|
|
L.name = law_query.item[2]
|
|
L.desc = law_query.item[3]
|
|
L.min_fine = text2num(law_query.item[4])
|
|
L.max_fine = text2num(law_query.item[5])
|
|
L.min_brig_time = text2num(law_query.item[6])
|
|
L.max_brig_time = text2num(law_query.item[7])
|
|
L.severity = text2num(law_query.item[8])
|
|
L.felony = text2num(law_query.item[9])
|
|
|
|
if(L.severity == 1)
|
|
low_severity += L
|
|
else if(L.severity == 2)
|
|
med_severity += L
|
|
else if(L.severity == 3)
|
|
high_severity += L
|
|
else
|
|
throw("Law with id: [L.id] deleted due to invalid severity: [L.severity]")
|
|
qdel(L)
|
|
catch(var/exception/el)
|
|
log_debug("SSlaw: Error when loading law: [el]")
|
|
|
|
laws = low_severity + med_severity + high_severity
|
|
if(!laws.len)
|
|
log_debug("SSlaw: No laws loaded. Loading from code and migrating to SQL")
|
|
load_from_code()
|
|
migrate_to_sql()
|
|
|
|
/datum/controller/subsystem/law/proc/migrate_to_sql()
|
|
for(var/datum/law/L in laws)
|
|
log_debug("SSlaw: Migrating law [L.id] to SQL")
|
|
var/DBQuery/law_update_query = dbcon.NewQuery({"
|
|
INSERT IGNORE INTO ss13_law
|
|
(law_id, name, description, min_fine, max_fine, min_brig_time, max_brig_time, severity, felony)
|
|
VALUES
|
|
(:law_id:, :name:, :desc:, :min_fine:, :max_fine:, :min_brig_time:, :max_brig_time:, :severity:, :felony:)
|
|
"})
|
|
law_update_query.Execute(list(
|
|
"law_id"=L.id,
|
|
"name"=L.name,
|
|
"desc"=L.desc,
|
|
"min_fine"=L.min_fine,
|
|
"max_fine"=L.max_fine,
|
|
"min_brig_time"=L.min_brig_time,
|
|
"max_brig_time"=L.max_brig_time,
|
|
"severity"=L.severity,
|
|
"felony"=L.felony
|
|
))
|
|
return |