mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-26 18:21:56 +00:00
#Added a Halogen Counter function for engineering PDAs. Measures radiation of a mob. #Brain/MMI code overhaul. Brains/MMIs should no longer screw up when the brain is deleted. MMIs should now properly eject from cyborgs if they are blown up, among other changes. Brains no longer die when transferred between containers but won't be able to speak without a container. #Added a research MMI that comes with a radio built in. The brain can toggle the radio functions on or off via verb panel (MMI). #Traitor code words will now use the crew roster for name generation 70% of the time. #Ghostize() is now a lot more robust. If you need to throw someone into a ghost if they are killed/whatever, use it. #Deleting a mob will now spawn a ghost for it through ghostize(), if it has a key, so you don't need to worry about that. You can null key people if you want to kick them out of the game. #Ghost verbs are now in their own panel (Ghost). ghost() is the proc/verb that mobs get to turn into ghosts. ghostize() is now a proc only used through other procs. #Changed how ninjas get their verbs. Long story short, wizards are now able to mind swap with ninjas. Stay hidden Snake! Also, more code improvements and additions to ninjas, including more fun for the AI. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1607 316c924e-a436-60f5-8080-3fe189b3f50e
225 lines
7.2 KiB
Plaintext
225 lines
7.2 KiB
Plaintext
/mob/dead/observer/New(mob/body, var/safety = 0)
|
|
invisibility = 10
|
|
sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF
|
|
see_invisible = 15
|
|
see_in_dark = 100
|
|
verbs += /mob/dead/observer/proc/dead_tele
|
|
|
|
if(body)
|
|
var/turf/location = get_turf(body)//Where is the mob located?
|
|
if(location)//Found turf.
|
|
loc = location
|
|
else//Safety, in case a turf cannot be found.
|
|
loc = pick(latejoin)
|
|
real_name = body.real_name
|
|
name = body.real_name
|
|
if(!safety)
|
|
corpse = body
|
|
verbs += /mob/dead/observer/proc/reenter_corpse
|
|
|
|
/*
|
|
Transfer_mind is there to check if mob is being deleted/not going to have a body.
|
|
Works together with spawning an observer, noted above.
|
|
*/
|
|
|
|
/mob/proc/ghostize(var/transfer_mind = 0)
|
|
if(key)
|
|
if(client)
|
|
client.screen.len = null//Clear the hud, just to be sure.
|
|
var/mob/dead/observer/ghost = new(src,transfer_mind)//Transfer safety to observer spawning proc.
|
|
if(transfer_mind)//When a body is destroyed.
|
|
if(mind)
|
|
mind.transfer_to(ghost)
|
|
else//They may not have a mind and be gibbed/destroyed.
|
|
ghost.key = key
|
|
else//Else just modify their key and connect them.
|
|
ghost.key = key
|
|
|
|
verbs -= /mob/proc/ghost
|
|
if (ghost.client)
|
|
ghost.client.eye = ghost
|
|
|
|
else if(transfer_mind)//Body getting destroyed but the person is not present inside.
|
|
for(var/mob/dead/observer/O in world)
|
|
if(O.corpse == src&&O.key)//If they have the same corpse and are keyed.
|
|
if(mind)
|
|
O.mind = mind//Transfer their mind if they have one.
|
|
break
|
|
return
|
|
|
|
/*
|
|
This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues.
|
|
*/
|
|
/mob/proc/ghost()
|
|
set category = "Ghost"
|
|
set name = "Ghost"
|
|
set desc = "You cannot be revived as a ghost."
|
|
|
|
/*if(stat != 2) //this check causes nothing but troubles. Commented out for Nar-Sie's sake. --rastaf0
|
|
src << "Only dead people and admins get to ghost, and admins don't use this verb to ghost while alive."
|
|
return*/
|
|
if(key)
|
|
var/mob/dead/observer/ghost = new(src)
|
|
ghost.key = key
|
|
verbs -= /mob/proc/ghost
|
|
if (ghost.client)
|
|
ghost.client.eye = ghost
|
|
return
|
|
|
|
/mob/proc/adminghostize()
|
|
if(client)
|
|
client.mob = new/mob/dead/observer(src)
|
|
return
|
|
|
|
/mob/dead/observer/Move(NewLoc, direct)
|
|
if(NewLoc)
|
|
loc = NewLoc
|
|
return
|
|
if((direct & NORTH) && y < world.maxy)
|
|
y++
|
|
if((direct & SOUTH) && y > 1)
|
|
y--
|
|
if((direct & EAST) && x < world.maxx)
|
|
x++
|
|
if((direct & WEST) && x > 1)
|
|
x--
|
|
|
|
/mob/dead/observer/examine()
|
|
if(usr)
|
|
usr << desc
|
|
|
|
/mob/dead/observer/can_use_hands() return 0
|
|
/mob/dead/observer/is_active() return 0
|
|
|
|
/mob/dead/observer/Stat()
|
|
..()
|
|
statpanel("Status")
|
|
if (client.statpanel == "Status")
|
|
if(ticker)
|
|
if(ticker.mode)
|
|
//world << "DEBUG: ticker not null"
|
|
if(ticker.mode.name == "AI malfunction")
|
|
//world << "DEBUG: malf mode ticker test"
|
|
if(ticker.mode:malf_mode_declared)
|
|
stat(null, "Time left: [max(ticker.mode:AI_win_timeleft/(ticker.mode:apcs/3), 0)]")
|
|
if(emergency_shuttle)
|
|
if(emergency_shuttle.online && emergency_shuttle.location < 2)
|
|
var/timeleft = emergency_shuttle.timeleft()
|
|
if (timeleft)
|
|
stat(null, "ETA-[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
|
|
|
|
/mob/dead/observer/proc/reenter_corpse()
|
|
set category = "Ghost"
|
|
set name = "Re-enter Corpse"
|
|
if(!corpse)
|
|
alert("You don't have a corpse!")
|
|
return
|
|
if(client && client.holder && client.holder.state == 2)
|
|
var/rank = client.holder.rank
|
|
client.clear_admin_verbs()
|
|
client.holder.state = 1
|
|
client.update_admins(rank)
|
|
if(iscultist(corpse) && corpse.ajourn==1 && corpse.stat!=2) //checks if it's an astral-journeying cultistm if it is and he's not on an astral journey rune, re-entering won't work
|
|
var/S=0
|
|
for(var/obj/rune/R in world)
|
|
if(corpse.loc==R.loc && R.word1 == wordhell && R.word2 == wordtravel && R.word3 == wordself)
|
|
S=1
|
|
if(!S)
|
|
usr << "\red The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you."
|
|
return
|
|
if(corpse.ajourn)
|
|
corpse.ajourn=0
|
|
client.mob = corpse
|
|
if (corpse.stat==2)
|
|
verbs += /mob/proc/ghost
|
|
del(src)
|
|
|
|
/mob/dead/observer/proc/dead_tele()
|
|
set category = "Ghost"
|
|
set name = "Teleport"
|
|
set desc= "Teleport"
|
|
if((usr.stat != 2) || !istype(usr, /mob/dead/observer))
|
|
usr << "Not when you're not dead!"
|
|
return
|
|
usr.verbs -= /mob/dead/observer/proc/dead_tele
|
|
spawn(30)
|
|
usr.verbs += /mob/dead/observer/proc/dead_tele
|
|
var/A
|
|
A = input("Area to jump to", "BOOYEA", A) in ghostteleportlocs
|
|
var/area/thearea = ghostteleportlocs[A]
|
|
|
|
var/list/L = list()
|
|
for(var/turf/T in get_area_turfs(thearea.type))
|
|
L+=T
|
|
usr.loc = pick(L)
|
|
|
|
var/list/karma_spenders = list()
|
|
|
|
/mob/dead/observer/verb/spend_karma(var/mob/M in world) // Karma system -- TLE
|
|
set name = "Spend Karma"
|
|
set category = "Ghost"
|
|
set desc = "Let the gods know whether someone's been naughty or nice. <One use only>"
|
|
if(!istype(M, /mob))
|
|
usr << "\red That's not a mob. You shouldn't have even been able to specify that. Please inform your server administrator post haste."
|
|
return
|
|
|
|
if(!M.client)
|
|
usr << "\red That mob has no client connected at the moment."
|
|
return
|
|
if(client.karma_spent)
|
|
usr << "\red You've already spent your karma for the round."
|
|
return
|
|
for(var/a in karma_spenders)
|
|
if(a == key)
|
|
usr << "\red You've already spent your karma for the round."
|
|
return
|
|
if(M.key == key)
|
|
usr << "\red You can't spend karma on yourself!"
|
|
return
|
|
var/choice = input("Give [M.name] good karma or bad karma?", "Karma") in list("Good", "Bad", "Cancel")
|
|
if(!choice || choice == "Cancel")
|
|
return
|
|
if(choice == "Good")
|
|
M.client.karma += 1
|
|
if(choice == "Bad")
|
|
M.client.karma -= 1
|
|
usr << "[choice] karma spent on [M.name]."
|
|
client.karma_spent = 1
|
|
karma_spenders.Add(key)
|
|
if(M.client.karma <= -2 || M.client.karma >= 2)
|
|
var/special_role = "None"
|
|
var/assigned_role = "None"
|
|
var/karma_diary = file("data/logs/karma_[time2text(world.realtime, "YYYY/MM-Month/DD-Day")].log")
|
|
if(M.mind)
|
|
if(M.mind.special_role)
|
|
special_role = M.mind.special_role
|
|
if(M.mind.assigned_role)
|
|
assigned_role = M.mind.assigned_role
|
|
karma_diary << "[M.name] ([M.key]) [assigned_role]/[special_role]: [M.client.karma] - [time2text(world.timeofday, "hh:mm:ss")]"
|
|
var/isnegative = 1
|
|
if(choice == "Good")
|
|
isnegative = 0
|
|
else
|
|
isnegative = 1
|
|
sql_report_karma(src, M, isnegative)
|
|
|
|
/mob/dead/observer/verb/toggle_alien_candidate()
|
|
set name = "Toggle Be Alien Candidate"
|
|
set category = "Ghost"
|
|
set desc = "Determines whether you will or will not be an alien candidate when someone bursts."
|
|
if(client.be_alien)
|
|
client.be_alien = 0
|
|
src << "You are now excluded from alien candidate lists until end of round."
|
|
else if(!client.be_alien)
|
|
client.be_alien = 1
|
|
src << "You are now included in alien candidate lists until end of round."
|
|
|
|
/mob/dead/observer/memory()
|
|
set hidden = 1
|
|
src << "\red You are dead! You have no mind to store memory!"
|
|
|
|
/mob/dead/observer/add_memory()
|
|
set hidden = 1
|
|
src << "\red You are dead! You have no mind to store memory!"
|
|
|