Files
Aurora.3/code/controllers/subsystems/law.dm
Werner cfd1900ee4 Security Fines (#4634)
Allows security to fine criminals with the sentencing console
Prints a human readable copy of the charges and the applied sentence
2018-04-29 20:34:49 +03:00

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