mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-24 09:02:27 +00:00
* Refactors airlock wire messages Makes it more straightforward to see that all the lights are off (i.e. no power). Also differentiates between showing bolt status when the indicators are on vs. off, as one is just a simple visual check while the other would supposedly require a more close-up inspection. It also makes it much easier to modify the conditions and text however needed instead of using a bunch of ternaries for everything. Additionally index_to_type uses the proper constants instead of hardcoded numbers. * Lights up the airlock indicator lights Also does minor refactor of the wires file. * Adds mechanics to toggle if AIs can bolt doors using AI control wire * Moves most AI "welcome text" to a separate pop-up window and adds it as a verb Also adds list of channels to the Radio-Settings verb. * Moves Initialize, Destroy to beginning, merges the two Initializes * Adds explicit override for admins and malfs, this allows them to (un)bolt stealthily should they choose to do so Also adds name and area of the airlock to the UI and refactors it some. * More better.
189 lines
4.6 KiB
Plaintext
189 lines
4.6 KiB
Plaintext
/*
|
|
AI ClickOn()
|
|
|
|
Note currently ai restrained() returns 0 in all cases,
|
|
therefore restrained code has been removed
|
|
|
|
The AI can double click to move the camera (this was already true but is cleaner),
|
|
or double click a mob to track them.
|
|
|
|
Note that AI have no need for the adjacency proc, and so this proc is a lot cleaner.
|
|
*/
|
|
/mob/living/silicon/ai/DblClickOn(var/atom/A, params)
|
|
if(client.buildmode) // comes after object.Click to allow buildmode gui objects to be clicked
|
|
build_click(src, client.buildmode, params, A)
|
|
return
|
|
|
|
if(control_disabled || stat) return
|
|
|
|
if(ismob(A))
|
|
ai_actual_track(A)
|
|
else
|
|
A.move_camera_by_click()
|
|
|
|
|
|
/mob/living/silicon/ai/ClickOn(var/atom/A, params)
|
|
if(world.time <= next_click)
|
|
return
|
|
next_click = world.time + 1
|
|
|
|
if(client.buildmode) // comes after object.Click to allow buildmode gui objects to be clicked
|
|
build_click(src, client.buildmode, params, A)
|
|
return
|
|
|
|
if(stat)
|
|
return
|
|
|
|
var/list/modifiers = params2list(params)
|
|
if(modifiers["shift"] && modifiers["ctrl"])
|
|
CtrlShiftClickOn(A)
|
|
return
|
|
if(modifiers["middle"])
|
|
MiddleClickOn(A)
|
|
return
|
|
if(modifiers["shift"])
|
|
ShiftClickOn(A)
|
|
return
|
|
if(modifiers["alt"]) // alt and alt-gr (rightalt)
|
|
AltClickOn(A)
|
|
return
|
|
if(modifiers["ctrl"])
|
|
CtrlClickOn(A)
|
|
return
|
|
|
|
if(control_disabled || !canClick())
|
|
return
|
|
|
|
if(multitool_mode && isobj(A))
|
|
var/obj/O = A
|
|
var/datum/component/multitool/MT = O.GetComponent(/datum/component/multitool)
|
|
if(MT)
|
|
MT.interact(ai_multi, src)
|
|
return
|
|
|
|
if(ai_camera.in_camera_mode)
|
|
ai_camera.camera_mode_off()
|
|
ai_camera.captureimage(A, usr)
|
|
return
|
|
|
|
/*
|
|
AI restrained() currently does nothing
|
|
if(restrained())
|
|
RestrainedClickOn(A)
|
|
else
|
|
*/
|
|
A.add_hiddenprint(src)
|
|
A.attack_ai(src)
|
|
|
|
/*
|
|
AI has no need for the UnarmedAttack() and RangedAttack() procs,
|
|
because the AI code is not generic; attack_ai() is used instead.
|
|
The below is only really for safety, or you can alter the way
|
|
it functions and re-insert it above.
|
|
*/
|
|
/mob/living/silicon/ai/UnarmedAttack(atom/A)
|
|
A.attack_ai(src)
|
|
/mob/living/silicon/ai/RangedAttack(atom/A)
|
|
A.attack_ai(src)
|
|
|
|
/atom/proc/attack_ai(mob/user as mob)
|
|
return
|
|
|
|
/*
|
|
Since the AI handles shift, ctrl, and alt-click differently
|
|
than anything else in the game, atoms have separate procs
|
|
for AI shift, ctrl, and alt clicking.
|
|
*/
|
|
|
|
/mob/living/silicon/ai/ShiftClickOn(var/atom/A)
|
|
if(!control_disabled && A.AIShiftClick(src))
|
|
return
|
|
..()
|
|
|
|
/mob/living/silicon/ai/CtrlClickOn(var/atom/A)
|
|
if(!control_disabled && A.AICtrlClick(src))
|
|
return
|
|
..()
|
|
|
|
/mob/living/silicon/ai/AltClickOn(var/atom/A)
|
|
if(!control_disabled && A.AIAltClick(src))
|
|
return
|
|
|
|
/mob/living/silicon/ai/MiddleClickOn(var/atom/A)
|
|
if(!control_disabled && A.AIMiddleClick(src))
|
|
return
|
|
..()
|
|
|
|
/*
|
|
The following criminally helpful code is just the previous code cleaned up;
|
|
I have no idea why it was in atoms.dm instead of respective files.
|
|
*/
|
|
|
|
/atom/proc/AICtrlShiftClick()
|
|
return
|
|
|
|
/atom/proc/AIShiftClick()
|
|
return
|
|
|
|
/obj/machinery/door/airlock/AIShiftClick() // Opens and closes doors!
|
|
if(density)
|
|
Topic(src, list("command"="open", "activate" = "1"))
|
|
else
|
|
Topic(src, list("command"="open", "activate" = "0"))
|
|
return 1
|
|
|
|
/atom/proc/AICtrlClick(mob/user)
|
|
return
|
|
|
|
/obj/machinery/door/airlock/AICtrlClick(mob/user) // Bolts doors
|
|
var/command = player_is_antag(user.mind) ? "bolts_override" : "bolts"
|
|
if(locked)
|
|
Topic(src, list("command"=command, "activate" = "0"))
|
|
else
|
|
Topic(src, list("command"=command, "activate" = "1"))
|
|
return 1
|
|
|
|
/obj/machinery/power/apc/AICtrlClick() // turns off/on APCs.
|
|
Topic(src, list("breaker"="1"))
|
|
return 1
|
|
|
|
/obj/machinery/turretid/AICtrlClick() //turns off/on Turrets
|
|
Topic(src, list("command"="enable", "value"="[!enabled]"))
|
|
return 1
|
|
|
|
/atom/proc/AIAltClick(var/atom/A)
|
|
return AltClick(A)
|
|
|
|
/obj/machinery/door/airlock/AIAltClick() // Electrifies doors.
|
|
if(!electrified_until)
|
|
// permanent shock
|
|
Topic(src, list("command"="electrify_permanently", "activate" = "1"))
|
|
else
|
|
// disable/6 is not in Topic; disable/5 disables both temporary and permanent shock
|
|
Topic(src, list("command"="electrify_permanently", "activate" = "0"))
|
|
return 1
|
|
|
|
/obj/machinery/turretid/AIAltClick() //toggles lethal on turrets
|
|
Topic(src, list("command"="lethal", "value"="[!lethal]"))
|
|
return 1
|
|
|
|
/atom/proc/AIMiddleClick(var/mob/living/silicon/user)
|
|
return 0
|
|
|
|
/obj/machinery/door/airlock/AIMiddleClick() // Toggles door bolt lights.
|
|
if(..())
|
|
return
|
|
|
|
if(!src.lights)
|
|
Topic(src, list("command"="lights", "activate" = "1"))
|
|
else
|
|
Topic(src, list("command"="lights", "activate" = "0"))
|
|
return 1
|
|
|
|
//
|
|
// Override AdjacentQuick for AltClicking
|
|
//
|
|
|
|
/mob/living/silicon/ai/TurfAdjacent(var/turf/T)
|
|
return (cameranet && cameranet.is_turf_visible(T))
|