mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-26 01:22:03 +00:00
171 lines
4.5 KiB
Plaintext
171 lines
4.5 KiB
Plaintext
/mob/observer/New(mob/corpse)
|
|
set invisibility = 10
|
|
|
|
..()
|
|
|
|
if(corpse)
|
|
src.corpse = corpse
|
|
src.loc = get_turf(corpse.loc)
|
|
src.real_name = corpse.real_name
|
|
src.name = corpse.real_name
|
|
|
|
src.sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS
|
|
src.see_invisible = 10
|
|
src.see_in_dark = 100
|
|
src.verbs += /mob/observer/proc/dead_tele
|
|
src.verbs += /mob/observer/proc/reenter_corpse
|
|
|
|
/mob/proc/ghostize()
|
|
set name = "Ghost"
|
|
set desc = "You cannot be revived as a ghost"
|
|
if(src.client)
|
|
src.client.mob = new/mob/observer(src)
|
|
return
|
|
|
|
/mob/observer/Move(NewLoc, direct)
|
|
if(NewLoc)
|
|
src.loc = NewLoc
|
|
return
|
|
if((direct & NORTH) && src.y < world.maxy)
|
|
src.y++
|
|
if((direct & SOUTH) && src.y > 1)
|
|
src.y--
|
|
if((direct & EAST) && src.x < world.maxx)
|
|
src.x++
|
|
if((direct & WEST) && src.x > 1)
|
|
src.x--
|
|
|
|
/mob/observer/examine()
|
|
if(usr) usr << src.desc
|
|
|
|
/mob/observer/can_use_hands() return 0
|
|
/mob/observer/is_active() return 0
|
|
|
|
/mob/observer/Stat()
|
|
..()
|
|
statpanel("Status")
|
|
if (src.client.statpanel == "Status")
|
|
if(ticker && ticker.mode)
|
|
if (ticker.timeleft)
|
|
stat(null, "ETA-[ticker.timeleft / 600 % 60]:[ticker.timeleft / 100 % 6][ticker.timeleft / 100 % 10]")
|
|
|
|
if(ticker.mode.name == "Corporate Restructuring" && ticker.target)
|
|
var/icon = ticker.target.name
|
|
var/icon2 = ticker.target.real_name
|
|
var/area = get_area(ticker.target)
|
|
stat(null, text("Target: [icon2] (as [icon]) is in [area]"))
|
|
|
|
if(ticker.mode.name == "AI malfunction" && ticker.processing)
|
|
stat(null, text("Time until all [station_name()]'s systems are taken over: [(ticker.AIwin - ticker.AItime) / 600 % 60]:[(ticker.AIwin - ticker.AItime) / 100 % 6][(ticker.AIwin - ticker.AItime) / 10 % 10]"))
|
|
|
|
if (ticker.mode.name == "ctf")
|
|
stat(null, text("Red Team - [ticker.red_score]"))
|
|
stat(null, text("Green Team - [ticker.green_score]"))
|
|
|
|
/mob/observer/proc/reenter_corpse()
|
|
set category = "Special Verbs"
|
|
set name = "Re-enter Corpse"
|
|
if(!corpse)
|
|
alert("You don't have a corpse!")
|
|
return
|
|
if(corpse.stat == 2)
|
|
alert("Your body is dead!")
|
|
return
|
|
if(src.client && src.client.holder && src.client.holder.state == 2)
|
|
var/rank = src.client.holder.rank
|
|
src.client.clear_admin_verbs()
|
|
src.client.holder.state = 1
|
|
src.client.update_admins(rank)
|
|
src.client.mob = corpse
|
|
del(src)
|
|
|
|
/mob/observer/proc/dead_tele()
|
|
set category = "Special Verbs"
|
|
set name = "Teleport"
|
|
set desc= "Teleport"
|
|
if((usr.stat != 2) || !istype(usr, /mob/observer))
|
|
usr << "Not when you're not dead!"
|
|
return
|
|
var/A
|
|
usr.verbs -= /mob/observer/proc/dead_tele
|
|
spawn(50)
|
|
usr.verbs += /mob/observer/proc/dead_tele
|
|
A = input("Area to jump to", "BOOYEA", A) in list("Engine","Hallways","Toxins","Storage","Maintenance","Crew Quarters","Medical","Security","Chapel","Bridge")
|
|
|
|
switch (A)
|
|
if ("Engine")
|
|
var/list/L = list()
|
|
for(var/area/B in world)
|
|
if(istype(B, /area/engine) && !istype(B, /area/engine/combustion) && !istype(B, /area/engine/engine_walls))
|
|
L += B
|
|
A = pick(L)
|
|
if ("Hallways")
|
|
var/list/L = list()
|
|
for(var/area/B in world)
|
|
if(istype(B, /area/hallway))
|
|
L += B
|
|
A = pick(L)
|
|
if ("Toxins")
|
|
var/list/L = list()
|
|
for(var/area/B in world)
|
|
if(istype(B, /area/toxins) && !istype(B, /area/toxins/test_chamber))
|
|
L += B
|
|
A = pick(L)
|
|
if ("Storage")
|
|
var/list/L = list()
|
|
for(var/area/B in world)
|
|
if(istype(B, /area/storage))
|
|
L += B
|
|
A = pick(L)
|
|
if ("Maintenance")
|
|
var/list/L = list()
|
|
for(var/area/B in world)
|
|
if(istype(B, /area/maintenance))
|
|
L += B
|
|
A = pick(L)
|
|
if ("Crew Quarters")
|
|
var/list/L = list()
|
|
for(var/area/B in world)
|
|
if(istype(B, /area/crew_quarters))
|
|
L += B
|
|
A = pick(L)
|
|
if ("Medical")
|
|
var/list/L = list()
|
|
for(var/area/B in world)
|
|
if(istype(B, /area/medical))
|
|
L += B
|
|
A = pick(L)
|
|
if ("Security")
|
|
var/list/L = list()
|
|
for(var/area/B in world)
|
|
if(istype(B, /area/security))
|
|
L += B
|
|
A = pick(L)
|
|
if ("Chapel")
|
|
var/list/L = list()
|
|
for(var/area/B in world)
|
|
if(istype(B, /area/chapel))
|
|
L += B
|
|
A = pick(L)
|
|
if ("Bridge")
|
|
var/list/L = list()
|
|
for(var/area/B in world)
|
|
if(istype(B, /area/bridge))
|
|
L += B
|
|
A = pick(L)
|
|
|
|
var/list/L = list()
|
|
for(var/turf/T in A)
|
|
if(!T.density)
|
|
var/clear = 1
|
|
for(var/obj/O in T)
|
|
if(O.density)
|
|
clear = 0
|
|
break
|
|
if(clear)
|
|
L+=T
|
|
|
|
usr.loc = pick(L)
|
|
|
|
|