mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-14 11:42:27 +00:00
## About The Pull Request Tablet UIs are now changed when opening/closing an app, instead of constantly checking for a UI change every ui update. Program UI acts no longer call parent, as it was unnecessary, Computers are the ones that should be calling it. Fixes a ton of problems with static data not updating, such as in Messenger, ID management, Siliconnect, and Chat client Chat Client's Admin mode also works again, which was broken when accesses to check was turned into a list. Turns a few lists in Robocontrol into static ones when we aren't changing anything, and makes it actually scan your ID's access. Fixes budget ordering being unable to show the cart/call the cargo shuttle. ## Why It's Good For The Game While I can't seem to find a single issue report on any of the above, these are still problems that should be fixed. ## Changelog 🆑 fix: SiliConnect can download borg logs again. fix: The RD can once again enable Admin mode on Wirecarp fix: NT IRN can once again see the shopping cart and call the cargo shuttle. fix: Chat Client, ID Management and Messenger should now update their UIs properly. code: PDAs will hopefully not lag as much when clicking on buttons (such as in ID management). /🆑
140 lines
5.4 KiB
Plaintext
140 lines
5.4 KiB
Plaintext
/datum/computer_file/program/robotact
|
|
filename = "robotact"
|
|
filedesc = "RoboTact"
|
|
category = PROGRAM_CATEGORY_SCI
|
|
extended_desc = "A built-in app for cyborg self-management and diagnostics."
|
|
ui_header = "robotact.gif" //DEBUG -- new icon before PR
|
|
program_icon_state = "command"
|
|
requires_ntnet = FALSE
|
|
available_on_ntnet = FALSE
|
|
undeletable = TRUE
|
|
usage_flags = PROGRAM_TABLET
|
|
size = 5
|
|
tgui_id = "NtosRobotact"
|
|
program_icon = "terminal"
|
|
|
|
/datum/computer_file/program/robotact/on_start(mob/living/user)
|
|
if(!istype(computer, /obj/item/modular_computer/pda/silicon))
|
|
to_chat(user, span_warning("A warning flashes across \the [computer]: Device Incompatible."))
|
|
return FALSE
|
|
. = ..()
|
|
if(.)
|
|
var/obj/item/modular_computer/pda/silicon/tablet = computer
|
|
if(tablet.device_theme == PDA_THEME_SYNDICATE)
|
|
program_icon_state = "command-syndicate"
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/datum/computer_file/program/robotact/ui_data(mob/user)
|
|
var/list/data = list()
|
|
if(!iscyborg(user))
|
|
return data
|
|
|
|
//Implied, since we can't run on non tablets
|
|
var/obj/item/modular_computer/pda/silicon/tablet = computer
|
|
|
|
var/mob/living/silicon/robot/cyborg = tablet.silicon_owner
|
|
|
|
data["name"] = cyborg.name
|
|
data["designation"] = cyborg.model
|
|
data["masterAI"] = cyborg.connected_ai //Master AI
|
|
|
|
var/charge = 0
|
|
var/maxcharge = 1
|
|
if(cyborg.cell)
|
|
charge = cyborg.cell.charge
|
|
maxcharge = cyborg.cell.maxcharge
|
|
data["charge"] = charge //Current cell charge
|
|
data["maxcharge"] = maxcharge //Cell max charge
|
|
data["integrity"] = ((cyborg.health + 100) / 2) //health, as percentage
|
|
data["lampIntensity"] = cyborg.lamp_intensity //lamp power setting
|
|
data["sensors"] = "[cyborg.sensors_on?"ACTIVE":"DISABLED"]"
|
|
data["printerPictures"] = cyborg.connected_ai? cyborg.connected_ai.aicamera.stored.len : cyborg.aicamera.stored.len //Number of pictures taken, synced to AI if available
|
|
data["printerToner"] = cyborg.toner //amount of toner
|
|
data["printerTonerMax"] = cyborg.tonermax //It's a variable, might as well use it
|
|
data["thrustersInstalled"] = cyborg.ionpulse //If we have a thruster uprade
|
|
data["thrustersStatus"] = "[cyborg.ionpulse_on?"ACTIVE":"DISABLED"]" //Feedback for thruster status
|
|
data["selfDestructAble"] = (cyborg.emagged || istype(cyborg, /mob/living/silicon/robot/model/syndicate))
|
|
|
|
//Cover, TRUE for locked
|
|
data["cover"] = "[cyborg.locked? "LOCKED":"UNLOCKED"]"
|
|
//Ability to move. FAULT if lockdown wire is cut, DISABLED if borg locked, ENABLED otherwise
|
|
data["locomotion"] = "[cyborg.wires.is_cut(WIRE_LOCKDOWN)?"FAULT":"[cyborg.lockcharge?"DISABLED":"ENABLED"]"]"
|
|
//Model wire. FAULT if cut, NOMINAL otherwise
|
|
data["wireModule"] = "[cyborg.wires.is_cut(WIRE_RESET_MODEL)?"FAULT":"NOMINAL"]"
|
|
//DEBUG -- Camera(net) wire. FAULT if cut (or no cameranet camera), DISABLED if pulse-disabled, NOMINAL otherwise
|
|
data["wireCamera"] = "[!cyborg.builtInCamera || cyborg.wires.is_cut(WIRE_CAMERA)?"FAULT":"[cyborg.builtInCamera.can_use()?"NOMINAL":"DISABLED"]"]"
|
|
//AI wire. FAULT if wire is cut, CONNECTED if connected to AI, READY otherwise
|
|
data["wireAI"] = "[cyborg.wires.is_cut(WIRE_AI)?"FAULT":"[cyborg.connected_ai?"CONNECTED":"READY"]"]"
|
|
//Law sync wire. FAULT if cut, NOMINAL otherwise
|
|
data["wireLaw"] = "[cyborg.wires.is_cut(WIRE_LAWSYNC)?"FAULT":"NOMINAL"]"
|
|
|
|
return data
|
|
|
|
/datum/computer_file/program/robotact/ui_static_data(mob/user)
|
|
var/list/data = list()
|
|
if(!iscyborg(user))
|
|
return data
|
|
var/mob/living/silicon/robot/cyborg = user
|
|
//Implied
|
|
var/obj/item/modular_computer/pda/silicon/tablet = computer
|
|
|
|
data["Laws"] = cyborg.laws.get_law_list(TRUE, TRUE, FALSE)
|
|
data["borgLog"] = tablet.borglog
|
|
data["borgUpgrades"] = cyborg.upgrades
|
|
return data
|
|
|
|
/datum/computer_file/program/robotact/ui_act(action, params, datum/tgui/ui, datum/ui_state/state)
|
|
//Implied type, memes
|
|
var/obj/item/modular_computer/pda/silicon/tablet = computer
|
|
var/mob/living/silicon/robot/cyborg = tablet.silicon_owner
|
|
|
|
switch(action)
|
|
if("coverunlock")
|
|
if(cyborg.locked)
|
|
cyborg.locked = FALSE
|
|
cyborg.update_icons()
|
|
if(cyborg.emagged)
|
|
cyborg.logevent("ChÃ¥vÃis cover lock has been [cyborg.locked ? "engaged" : "released"]") //"The cover interface glitches out for a split second"
|
|
else
|
|
cyborg.logevent("Chassis cover lock has been [cyborg.locked ? "engaged" : "released"]")
|
|
|
|
if("lawchannel")
|
|
cyborg.set_autosay()
|
|
|
|
if("lawstate")
|
|
cyborg.checklaws()
|
|
|
|
if("alertPower")
|
|
if(cyborg.stat == CONSCIOUS)
|
|
if(!cyborg.cell || !cyborg.cell.charge)
|
|
cyborg.visible_message(span_notice("The power warning light on [span_name("[cyborg]")] flashes urgently."), \
|
|
"You announce you are operating in low power mode.")
|
|
playsound(cyborg, 'sound/machines/buzz-two.ogg', 50, FALSE)
|
|
|
|
if("toggleSensors")
|
|
cyborg.toggle_sensors()
|
|
|
|
if("viewImage")
|
|
if(cyborg.connected_ai)
|
|
cyborg.connected_ai.aicamera?.viewpictures(usr)
|
|
else
|
|
cyborg.aicamera?.viewpictures(usr)
|
|
|
|
if("printImage")
|
|
var/obj/item/camera/siliconcam/robot_camera/borgcam = cyborg.aicamera
|
|
borgcam?.borgprint(usr)
|
|
|
|
if("toggleThrusters")
|
|
cyborg.toggle_ionpulse()
|
|
|
|
if("lampIntensity")
|
|
cyborg.lamp_intensity = params["ref"]
|
|
cyborg.toggle_headlamp(FALSE, TRUE)
|
|
|
|
if("selfDestruct")
|
|
if(cyborg.stat || cyborg.lockcharge) //No detonation while stunned or locked down
|
|
return
|
|
if(cyborg.emagged || istype(cyborg, /mob/living/silicon/robot/model/syndicate)) //This option shouldn't even be showing otherwise
|
|
cyborg.self_destruct(cyborg)
|