mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-20 14:22:17 +00:00
Runtime map now has a bunch of new areas / items with often-tested stuffs, and some hard-to-put-at-runtime stuffs. Runtime map jobs now are positioned to make it faster to reach the aforementioned often-tested stuffs. Runtime map doesn't generate an overmap anymore by default, which speeds up the process. Runtime map now loads in ~11 seconds instead of ~40 seconds as it was before. Updated the maploader to be faster in parsing maps. Bapi is not engaged anymore if we're only measuring the map size, which speeds up the process. In fastboot we do not generate the codexes anymore, which speeds up the process. In fastboot and if exoplanets and away sites are not enabled, we do not parse the map templates anymore, which speeds up the process. Updated the icon smoothing to be faster. Optimized cargo area code. Other optimizations.
216 lines
7.5 KiB
Plaintext
216 lines
7.5 KiB
Plaintext
/// This is really ugly copypaste, but we are seriously at the point where I don't give a fuck anymore.
|
|
/// Well, it's not the worst copypaste since this and the computer program need to be separate anyway, but it's still ugly.
|
|
/datum/tgui_module/admin/law_manager
|
|
var/ion_law = "IonLaw"
|
|
var/zeroth_law = "ZerothLaw"
|
|
var/inherent_law = "InherentLaw"
|
|
var/supplied_law = "SuppliedLaw"
|
|
var/supplied_law_position = MIN_SUPPLIED_LAW_NUMBER
|
|
|
|
var/current_view = 0
|
|
|
|
var/global/list/datum/ai_laws/admin_laws
|
|
var/global/list/datum/ai_laws/player_laws
|
|
var/mob/living/silicon/owner = null
|
|
|
|
/datum/tgui_module/admin/law_manager/New(var/mob/living/silicon/S)
|
|
..()
|
|
owner = S
|
|
|
|
if(!admin_laws)
|
|
admin_laws = new()
|
|
player_laws = new()
|
|
|
|
init_subtypes(/datum/ai_laws, admin_laws)
|
|
sortTim(admin_laws, GLOBAL_PROC_REF(cmp_name_asc))
|
|
|
|
for(var/datum/ai_laws/laws in admin_laws)
|
|
if(laws.selectable)
|
|
player_laws += laws
|
|
|
|
/datum/tgui_module/admin/law_manager/ui_interact(mob/user, datum/tgui/ui)
|
|
ui = SStgui.try_update_ui(user, src, ui)
|
|
if(!ui)
|
|
ui = new(user, src, "LawManager", "Law Manager (Admin)")
|
|
ui.autoupdate = FALSE
|
|
ui.open()
|
|
|
|
/datum/tgui_module/admin/law_manager/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
|
|
if(..())
|
|
return
|
|
|
|
switch(action)
|
|
if("set_view")
|
|
current_view = text2num(params["set_view"])
|
|
return TRUE
|
|
|
|
if("law_channel")
|
|
if(params["law_channel"] in owner.law_channels())
|
|
owner.law_channel = params["law_channel"]
|
|
return TRUE
|
|
|
|
if("state_law")
|
|
var/datum/ai_law/AL = locate(params["ref"]) in owner.laws.all_laws()
|
|
if(AL)
|
|
var/state_law = text2num(params["state_law"])
|
|
owner.laws.set_state_law(AL, state_law)
|
|
return TRUE
|
|
|
|
if("add_zeroth_law")
|
|
if(zeroth_law && is_admin(usr) && !owner.laws.zeroth_law)
|
|
owner.set_zeroth_law(zeroth_law)
|
|
return TRUE
|
|
|
|
if("add_ion_law")
|
|
if(ion_law && is_malf(usr))
|
|
owner.add_ion_law(ion_law)
|
|
return TRUE
|
|
|
|
if("add_inherent_law")
|
|
if(inherent_law && is_malf(usr))
|
|
owner.add_inherent_law(inherent_law)
|
|
return TRUE
|
|
|
|
if("add_supplied_law")
|
|
if(supplied_law && supplied_law_position >= 1 && MIN_SUPPLIED_LAW_NUMBER <= MAX_SUPPLIED_LAW_NUMBER && is_malf(usr))
|
|
owner.add_supplied_law(supplied_law_position, supplied_law)
|
|
return TRUE
|
|
|
|
if("change_zeroth_law")
|
|
var/new_law = sanitize(input("Enter new law Zero. Leaving the field blank will cancel the edit.", "Edit Law", zeroth_law))
|
|
if(new_law && new_law != zeroth_law && state.can_use_topic(src, usr))
|
|
zeroth_law = new_law
|
|
return TRUE
|
|
|
|
if("change_ion_law")
|
|
var/new_law = sanitize(input("Enter new ion law. Leaving the field blank will cancel the edit.", "Edit Law", ion_law))
|
|
if(new_law && new_law != ion_law && state.can_use_topic(src, usr))
|
|
ion_law = new_law
|
|
return TRUE
|
|
|
|
if("change_inherent_law")
|
|
var/new_law = sanitize(input("Enter new inherent law. Leaving the field blank will cancel the edit.", "Edit Law", inherent_law))
|
|
if(new_law && new_law != inherent_law && state.can_use_topic(src, usr))
|
|
inherent_law = new_law
|
|
return TRUE
|
|
|
|
if("change_supplied_law")
|
|
var/new_law = sanitize(input("Enter new supplied law. Leaving the field blank will cancel the edit.", "Edit Law", supplied_law))
|
|
if(new_law && new_law != supplied_law && state.can_use_topic(src, usr))
|
|
supplied_law = new_law
|
|
return TRUE
|
|
|
|
if("change_supplied_law_position")
|
|
var/new_position = input(usr, "Enter new supplied law position between 1 and [MAX_SUPPLIED_LAW_NUMBER], inclusive. Inherent laws at the same index as a supplied law will not be stated.", "Law Position", supplied_law_position) as num|null
|
|
if(isnum(new_position) && state.can_use_topic(src, usr))
|
|
supplied_law_position = clamp(new_position, 1, MAX_SUPPLIED_LAW_NUMBER)
|
|
return TRUE
|
|
|
|
if("edit_law")
|
|
if(is_malf(usr))
|
|
var/datum/ai_law/AL = locate(params["edit_law"]) in owner.laws.all_laws()
|
|
if(AL)
|
|
var/new_law = sanitize(input(usr, "Enter new law. Leaving the field blank will cancel the edit.", "Edit Law", AL.law))
|
|
if(new_law && new_law != AL.law && is_malf(usr) && state.can_use_topic(src, usr))
|
|
log_and_message_admins("has changed a law of [owner] from '[AL.law]' to '[new_law]'")
|
|
AL.law = new_law
|
|
return TRUE
|
|
|
|
if("delete_law")
|
|
if(is_malf(usr))
|
|
var/datum/ai_law/AL = locate(params["delete_law"]) in owner.laws.all_laws()
|
|
if(AL && is_malf(usr))
|
|
owner.delete_law(AL)
|
|
return TRUE
|
|
|
|
if("state_laws")
|
|
owner.statelaws(owner.laws)
|
|
return TRUE
|
|
|
|
if("state_law_set")
|
|
var/datum/ai_laws/ALs = locate(params["state_law_set"]) in (is_admin(usr) ? admin_laws : player_laws)
|
|
if(ALs)
|
|
owner.statelaws(ALs)
|
|
return TRUE
|
|
|
|
if("transfer_laws")
|
|
if(is_malf(usr))
|
|
var/datum/ai_laws/ALs = locate(params["transfer_laws"]) in (is_admin(usr) ? admin_laws : player_laws)
|
|
if(ALs)
|
|
log_and_message_admins("has transfered the [ALs.name] laws to [owner].")
|
|
ALs.sync(owner, 0)
|
|
current_view = 0
|
|
return TRUE
|
|
|
|
if("notify_laws")
|
|
to_chat(owner, SPAN_DANGER("Law Notice"))
|
|
owner.laws.show_laws(owner)
|
|
if(isAI(owner))
|
|
var/mob/living/silicon/ai/AI = owner
|
|
for(var/mob/living/silicon/robot/R in AI.connected_robots)
|
|
to_chat(R, SPAN_DANGER("Law Notice"))
|
|
R.laws.show_laws(R)
|
|
if(usr != owner)
|
|
to_chat(usr, SPAN_NOTICE("Laws displayed."))
|
|
return TRUE
|
|
|
|
/datum/tgui_module/admin/law_manager/ui_data(mob/user)
|
|
var/list/data = list()
|
|
owner.lawsync()
|
|
|
|
data["ion_law_nr"] = ionnum()
|
|
data["ion_law"] = ion_law
|
|
data["zeroth_law"] = zeroth_law
|
|
data["inherent_law"] = inherent_law
|
|
data["supplied_law"] = supplied_law
|
|
data["supplied_law_position"] = supplied_law_position
|
|
|
|
package_laws(data, "zeroth_laws", list(owner.laws.zeroth_law))
|
|
package_laws(data, "ion_laws", owner.laws.ion_laws)
|
|
package_laws(data, "inherent_laws", owner.laws.inherent_laws)
|
|
package_laws(data, "supplied_laws", owner.laws.supplied_laws)
|
|
|
|
data["isAI"] = isAI(owner)
|
|
data["isMalf"] = is_malf(user)
|
|
data["isSlaved"] = owner.is_slaved()
|
|
data["isAdmin"] = is_admin(user)
|
|
data["view"] = current_view
|
|
|
|
var/channels = list()
|
|
for (var/ch_name in owner.law_channels())
|
|
channels += list(list("channel" = ch_name))
|
|
data["channel"] = owner.law_channel
|
|
data["channels"] = channels
|
|
data["law_sets"] = package_multiple_laws(data["isAdmin"] ? admin_laws : player_laws)
|
|
|
|
return data
|
|
|
|
/datum/tgui_module/admin/law_manager/proc/package_laws(var/list/data, var/field, var/list/datum/ai_law/laws)
|
|
var/list/packaged_laws = list()
|
|
for(var/datum/ai_law/AL in laws)
|
|
packaged_laws += list(list("law" = AL.law, "index" = AL.get_index(), "state" = owner.laws.get_state_law(AL), "ref" = "[REF(AL)]"))
|
|
data[field] = packaged_laws
|
|
data["has_[field]"] = packaged_laws.len
|
|
|
|
/datum/tgui_module/admin/law_manager/proc/package_multiple_laws(var/list/datum/ai_laws/laws)
|
|
var/list/law_sets = list()
|
|
for(var/datum/ai_laws/ALs in laws)
|
|
var/packaged_laws = list()
|
|
package_laws(packaged_laws, "zeroth_laws", list(ALs.zeroth_law, ALs.zeroth_law_borg))
|
|
package_laws(packaged_laws, "ion_laws", ALs.ion_laws)
|
|
package_laws(packaged_laws, "inherent_laws", ALs.inherent_laws)
|
|
package_laws(packaged_laws, "supplied_laws", ALs.supplied_laws)
|
|
law_sets += list(list("name" = ALs.name, "header" = ALs.law_header, "ref" = "[REF(ALs)]","laws" = packaged_laws))
|
|
|
|
return law_sets
|
|
|
|
/datum/tgui_module/admin/law_manager/proc/is_malf(var/mob/user)
|
|
return (is_admin(user) && !owner.is_slaved()) || owner.is_malf_or_traitor()
|
|
|
|
/datum/tgui_module/admin/law_manager/proc/sync_laws(var/mob/living/silicon/ai/AI)
|
|
if(!AI)
|
|
return
|
|
for(var/mob/living/silicon/robot/R in AI.connected_robots)
|
|
R.sync()
|
|
log_and_message_admins("has syncronized [AI]'s laws with its borgs.")
|