mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 19:44:09 +01:00
#Fixed Chaplain hoodie sprite.
#Respawn_character() now properly respawns aliens and monkeys if specified to do so. #Added more options in admin quick panel (for players) to get, send, check if traitor, narrate, and subtle message mob. #Admins can now click an X by admin name, in asay, to jump to that admin. Makes things easier. #Moved admin transform verbs into fun tab. #Removed boom boom shake the room since not even hosts are allowed to use it. #Pierrot's throat now has a 35% chance of being cured by eating bananas. Up from 5. #Fixed AI cards. #ed209 and Beepsky now properly figure in deafness when speaking. Doesn't affect voice files. #Fixed Syndicate PDA not triggering door. #Aliens can no longer magically crawl to the prison station and back. #Aliens can now quickly (5 seconds) break out of cuffs by resisting. No change to buckled. #Facehuggers will now properly set the alien_egg_flag if the target was infected or not. Curing the alien egg should also reset the flag. I think it will be best to get rid of the flag entirely in the future. #Added isalienadult(mob) proc to check for humanoid aliens. #Probably fixed death squad spawning. They pick by key now, instead of mob name. #Spawning xenos now uses the client match method so you can specify who you want to respawn if wanted. #Ninjas now tell admins what their set mission is. If given objectives by admin, it should report them at round end for certain rounds. #Spawning ninjas now uses the same method as respawn character (typing in key/ckey). #Added a ninjify admnin verb. Possible to right click. #Can now resize spiderOS window. #Misc fixes and adjustments. Minor map change to CentCom holding facility. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1685 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
+65
-24
@@ -570,7 +570,7 @@ var/showadminmessages = 1
|
||||
if (href_list["adminplayeropts"])
|
||||
var/mob/M = locate(href_list["adminplayeropts"])
|
||||
if(!M)
|
||||
usr << "You seem to be selecting a mob that doesn't exist."
|
||||
usr << "You seem to be selecting a mob that doesn't exist anymore."
|
||||
return
|
||||
var/dat = "<html><head><title>Options for [M.key]</title></head>"
|
||||
var/foo = "\[ "
|
||||
@@ -581,13 +581,13 @@ var/showadminmessages = 1
|
||||
foo += text("<B>Authorized</B> | ")
|
||||
foo += text("<A HREF='?src=\ref[src];prom_demot=\ref[M.client]'>Promote/Demote</A> | ")
|
||||
if(!istype(M, /mob/new_player))
|
||||
if(!istype(M, /mob/living/carbon/monkey))
|
||||
if(!ismonkey(M))
|
||||
foo += text("<A HREF='?src=\ref[src];monkeyone=\ref[M]'>Monkeyize</A> | ")
|
||||
else
|
||||
foo += text("<B>Monkeyized</B> | ")
|
||||
if(istype(M, /mob/living/silicon/ai))
|
||||
if(isAI(M))
|
||||
foo += text("<B>Is an AI</B> | ")
|
||||
else if(istype(M, /mob/living/carbon/human))
|
||||
else if(ishuman(M))
|
||||
foo += text("<A HREF='?src=\ref[src];makeai=\ref[M]'>Make AI</A> | ")
|
||||
foo += text("<A HREF='?src=\ref[src];tdome1=\ref[M]'>Thunderdome 1</A> | ")
|
||||
foo += text("<A HREF='?src=\ref[src];tdome2=\ref[M]'>Thunderdome 2</A> | ")
|
||||
@@ -595,25 +595,61 @@ var/showadminmessages = 1
|
||||
foo += text("<A HREF='?src=\ref[src];tdomeobserve=\ref[M]'>Thunderdome Observer</A> | ")
|
||||
foo += text("<A HREF='?src=\ref[src];sendtoprison=\ref[M]'>Prison</A> | ")
|
||||
foo += text("<A HREF='?src=\ref[src];sendtomaze=\ref[M]'>Maze</A> | ")
|
||||
|
||||
foo += text("<A HREF='?src=\ref[src];revive=\ref[M]'>Heal/Revive</A> | ")
|
||||
else
|
||||
foo += text("<B>Hasn't Entered Game</B> | ")
|
||||
foo += text("<A HREF='?src=\ref[src];forcespeech=\ref[M]'>Say</A> | ")
|
||||
foo += text("<A href='?src=\ref[src];forcespeech=\ref[M]'>Forcesay</A> | ")
|
||||
foo += text("<A href='?src=\ref[src];mute2=\ref[M]'>Mute: [(M.muted ? "Muted" : "Voiced")]</A> | ")
|
||||
foo += text("<A href='?src=\ref[src];boot2=\ref[M]'>Boot</A> | ")
|
||||
foo += text("<A href='?src=\ref[src];boot2=\ref[M]'>Boot</A>")
|
||||
foo += text("<br>")
|
||||
foo += text("<A href='?src=\ref[src];jumpto=\ref[M]'>Jump to</A> | ")
|
||||
foo += text("<A href='?src=\ref[src];newban=\ref[M]'>Ban</A> \]")
|
||||
foo += text("<A href='?src=\ref[src];jobban2=\ref[M]'>Jobban</A> | ")
|
||||
foo += text("<A href='?src=\ref[src];getmob=\ref[M]'>Get</A> | ")
|
||||
foo += text("<A href='?src=\ref[src];sendmob=\ref[M]'>Send</A>")
|
||||
foo += text("<br>")
|
||||
foo += text("<A href='?src=\ref[src];traitor=\ref[M]'>Traitor?</A> | ")
|
||||
foo += text("<A href='?src=\ref[src];narrateto=\ref[M]'>Narrate to</A> | ")
|
||||
foo += text("<A href='?src=\ref[src];subtlemessage=\ref[M]'>Subtle message</A>")
|
||||
foo += text("<br>")
|
||||
foo += text("<A href='?src=\ref[src];newban=\ref[M]'>Ban</A> | ")
|
||||
foo += text("<A href='?src=\ref[src];jobban2=\ref[M]'>Jobban</A>")
|
||||
dat += text("<body>[foo]</body></html>")
|
||||
usr << browse(dat, "window=adminplayeropts;size=480x100")
|
||||
usr << browse(dat, "window=adminplayeropts;size=480x150")
|
||||
|
||||
if (href_list["jumpto"])
|
||||
if(( src.level in list(6, 5, 4) ) || ((src.level in list(3, 2)) && (src.state == 2)))
|
||||
if(rank in list("Badmin", "Game Admin", "Game Master"))
|
||||
var/mob/M = locate(href_list["jumpto"])
|
||||
usr.client.jumptomob(M)
|
||||
else
|
||||
alert("You are not a high enough administrator or you aren't observing!")
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!")
|
||||
return
|
||||
|
||||
if (href_list["getmob"])
|
||||
if(rank in list( "Trial Admin", "Badmin", "Game Admin", "Game Master"))
|
||||
var/mob/M = locate(href_list["getmob"])
|
||||
usr.client.Getmob(M)
|
||||
else
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!")
|
||||
return
|
||||
|
||||
if (href_list["sendmob"])
|
||||
if(rank in list( "Trial Admin", "Badmin", "Game Admin", "Game Master"))
|
||||
var/mob/M = locate(href_list["sendmob"])
|
||||
usr.client.sendmob(M)
|
||||
else
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!")
|
||||
return
|
||||
|
||||
if (href_list["narrateto"])
|
||||
if(rank in list("Game Admin", "Game Master"))
|
||||
var/mob/M = locate(href_list["narrateto"])
|
||||
usr.client.cmd_admin_direct_narrate(M)
|
||||
else
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!")
|
||||
return
|
||||
|
||||
if (href_list["subtlemessage"])
|
||||
var/mob/M = locate(href_list["subtlemessage"])
|
||||
usr.client.cmd_admin_subtle_message(M)
|
||||
|
||||
if (href_list["traitor"])
|
||||
if(!ticker || !ticker.mode)
|
||||
@@ -622,7 +658,7 @@ var/showadminmessages = 1
|
||||
var/mob/M = locate(href_list["traitor"])
|
||||
var/datum/game_mode/current_mode = ticker.mode
|
||||
|
||||
if (istype(M, /mob/living/carbon/human) && M:mind)
|
||||
if (ishuman(M) && M:mind)
|
||||
M:mind.edit_memory()
|
||||
return
|
||||
|
||||
@@ -665,11 +701,17 @@ var/showadminmessages = 1
|
||||
if(M.mind in current_mode:syndicates)
|
||||
alert("Is a Syndicate operative!", "[M.key]")
|
||||
return
|
||||
if(istype(M,/mob/living/silicon/robot))
|
||||
|
||||
if(isrobot(M))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
if(R.emagged)
|
||||
alert("Is emagged!\n0th law: [R.laws.zeroth]", "[R.key]")
|
||||
return
|
||||
|
||||
if(isalien(M))
|
||||
alert("Is an [M.mind ? M.mind.special_role : "Alien"]!", "[M.key]")
|
||||
return
|
||||
|
||||
// traitor, or other modes where traitors/counteroperatives would be.
|
||||
if(M.mind in current_mode.traitors)
|
||||
var/datum/mind/antagonist = M.mind
|
||||
@@ -683,13 +725,12 @@ var/showadminmessages = 1
|
||||
return
|
||||
|
||||
//they're nothing so turn them into a traitor!
|
||||
if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/silicon/ai))
|
||||
if(ishuman(M) || issilicon(M))
|
||||
var/traitorize = alert("Is not a traitor, make Traitor?", "Traitor", "Yes", "Cancel")
|
||||
if(traitorize == "Cancel")
|
||||
return
|
||||
if(traitorize == "Yes")
|
||||
traitorize(M,,1)
|
||||
//they're a ghost/monkey
|
||||
else
|
||||
alert("Cannot make this mob a traitor")
|
||||
if (href_list["create_object"])
|
||||
@@ -1481,21 +1522,21 @@ var/showadminmessages = 1
|
||||
currentkarma = query.item[1]
|
||||
|
||||
dat += "<tr><td>[M.name]</td>"
|
||||
if(istype(M, /mob/living/silicon/ai))
|
||||
if(isAI(M))
|
||||
dat += "<td>AI</td>"
|
||||
if(istype(M, /mob/living/silicon/robot))
|
||||
if(isrobot(M))
|
||||
dat += "<td>Cyborg</td>"
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
if(ishuman(M))
|
||||
dat += "<td>[M.real_name]</td>"
|
||||
if(istype(M, /mob/living/silicon/pai))
|
||||
dat += "<td>pAI</td>"
|
||||
if(istype(M, /mob/new_player))
|
||||
dat += "<td>New Player</td>"
|
||||
if(istype(M, /mob/dead/observer))
|
||||
if(isobserver(M))
|
||||
dat += "<td>Ghost</td>"
|
||||
if(istype(M, /mob/living/carbon/monkey))
|
||||
if(ismonkey(M))
|
||||
dat += "<td>Monkey</td>"
|
||||
if(istype(M, /mob/living/carbon/alien))
|
||||
if(isalien(M))
|
||||
dat += "<td>Alien</td>"
|
||||
dat += {"<td>[(M.client ? "[(M.client.goon ? "<font color=red>" : "<font>")][M.client]</font>" : "No client")]</td>
|
||||
<td align=center><A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>X</A></td>
|
||||
@@ -2023,11 +2064,11 @@ var/showadminmessages = 1
|
||||
if("changeling")
|
||||
if(M.mind in ticker.mode:changelings)
|
||||
return 1
|
||||
if(istype(M,/mob/living/silicon/robot))
|
||||
if(isrobot(M))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
if(R.emagged)
|
||||
return 1
|
||||
if(M.mind in ticker.mode.traitors)
|
||||
if(M.mind&&M.mind.special_role)//If they have a mind and special role, they are some type of traitor or antagonist.
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
+1160
-1149
File diff suppressed because it is too large
Load Diff
@@ -24,5 +24,5 @@
|
||||
if (src.holder.rank == "Admin Observer")
|
||||
M << "<span class=\"gfartadmin\"><span class=\"prefix\">ADMIN:</span> <span class=\"name\">[key_name(usr, M)]:</span> <span class=\"message\">[msg]</span></span>"
|
||||
else
|
||||
M << "<span class=\"admin\"><span class=\"prefix\">ADMIN:</span> <span class=\"name\">[key_name(usr, M)]:</span> <span class=\"message\">[msg]</span></span>"
|
||||
M << "<span class=\"admin\"><span class=\"prefix\">ADMIN:</span> <span class=\"name\">[key_name(usr, M)]</span><a href='?src=\ref[M.client.holder];jumpto=\ref[mob]'>X</a>: <span class=\"message\">[msg]</span></span>"
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
usr.show_message(t, 1)
|
||||
|
||||
/client/proc/cmd_admin_robotize(var/mob/M in world)
|
||||
set category = "Admin"
|
||||
set category = "Fun"
|
||||
set name = "Make Robot"
|
||||
|
||||
if(!ticker)
|
||||
@@ -152,22 +152,48 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
else
|
||||
alert("Invalid mob")
|
||||
|
||||
/client/proc/makepAI(var/turf/T in world)
|
||||
set category = "Fun"
|
||||
set name = "Make pAI"
|
||||
set desc = "Specify a location to spawn a pAI device, then specify a key to play that pAI"
|
||||
|
||||
var/list/available = list()
|
||||
for(var/mob/C in world)
|
||||
if(C.key)
|
||||
available.Add(C)
|
||||
var/mob/choice = input("Choose a player to play the pAI", "Spawn pAI") in available
|
||||
if(!choice)
|
||||
return 0
|
||||
if(!istype(choice, /mob/dead/observer))
|
||||
var/confirm = input("[choice.key] isn't ghosting right now. Are you sure you want to yank him out of them out of their body and place them in this pAI?", "Spawn pAI Confirmation", "No") in list("Yes", "No")
|
||||
if(confirm != "Yes")
|
||||
return 0
|
||||
var/obj/item/device/paicard/card = new(T)
|
||||
var/mob/living/silicon/pai/pai = new(card)
|
||||
pai.name = input(choice, "Enter your pAI name:", "pAI Name", "Personal AI") as text
|
||||
pai.real_name = pai.name
|
||||
pai.key = choice.key
|
||||
card.pai = pai
|
||||
for(var/datum/paiCandidate/candidate in paiController.pai_candidates)
|
||||
if(candidate.key == choice.key)
|
||||
paiController.pai_candidates.Remove(candidate)
|
||||
|
||||
/client/proc/cmd_admin_alienize(var/mob/M in world)
|
||||
set category = "Admin"
|
||||
set category = "Fun"
|
||||
set name = "Make Alien"
|
||||
|
||||
if(!ticker)
|
||||
alert("Wait until the game starts")
|
||||
return
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
log_admin("[key_name(src)] is attempting to alienize [M.key].")
|
||||
if(ishuman(M))
|
||||
log_admin("[key_name(src)] has alienized [M.key].")
|
||||
spawn(10)
|
||||
M:Alienize()
|
||||
else
|
||||
alert("Invalid mob")
|
||||
|
||||
/client/proc/cmd_admin_monkeyize(var/mob/M in world)
|
||||
set category = "Admin"
|
||||
set category = "Fun"
|
||||
set name = "Make Monkey"
|
||||
|
||||
if(!ticker)
|
||||
@@ -182,7 +208,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
alert("Invalid mob")
|
||||
|
||||
/client/proc/cmd_admin_changelinginize(var/mob/M in world)
|
||||
set category = "Admin"
|
||||
set category = "Fun"
|
||||
set name = "Make Changeling"
|
||||
|
||||
if(!ticker)
|
||||
@@ -198,8 +224,9 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
else
|
||||
alert("Invalid mob")
|
||||
|
||||
/*
|
||||
/client/proc/cmd_admin_abominize(var/mob/M in world)
|
||||
set category = "Admin"
|
||||
set category = null
|
||||
set name = "Make Abomination"
|
||||
|
||||
usr << "Ruby Mode disabled. Command aborted."
|
||||
@@ -213,9 +240,9 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
spawn(10)
|
||||
M.make_abomination()
|
||||
*/
|
||||
|
||||
*/
|
||||
/client/proc/make_cultist(var/mob/M in world) // -- TLE, modified by Urist
|
||||
set category = "Admin"
|
||||
set category = "Fun"
|
||||
set name = "Make Cultist"
|
||||
set desc = "Makes target a cultist"
|
||||
if(!wordtravel)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/client/proc/cmd_admin_drop_everything(mob/M as mob in world)
|
||||
set category = null
|
||||
set name = "Drop Everything"
|
||||
if(!src.authenticated || !src.holder)
|
||||
if(!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
for(var/obj/item/W in M)
|
||||
@@ -13,7 +13,7 @@
|
||||
/client/proc/cmd_admin_prison(mob/M as mob in world)
|
||||
set category = "Admin"
|
||||
set name = "Prison"
|
||||
if(!src.authenticated || !src.holder)
|
||||
if(!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
if (ismob(M))
|
||||
@@ -40,7 +40,7 @@
|
||||
set category = "Special Verbs"
|
||||
set name = "Subtle Message"
|
||||
|
||||
if (!src.authenticated || !src.holder)
|
||||
if (!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
set category = "Special Verbs"
|
||||
set name = "Global Narrate"
|
||||
|
||||
if (!src.authenticated || !src.holder)
|
||||
if (!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
set category = "Special Verbs"
|
||||
set name = "Direct Narrate"
|
||||
|
||||
if(!src.authenticated || !src.holder)
|
||||
if(!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
var/msg = input("Message:", text("Enter the text you wish to appear to your target:")) as text
|
||||
@@ -87,17 +87,17 @@
|
||||
/client/proc/cmd_admin_pm(mob/M as mob in world)
|
||||
set category = "Admin"
|
||||
set name = "Admin PM"
|
||||
if(!src.authenticated || !src.holder)
|
||||
if(!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
if(M)
|
||||
if(src.mob.muted)
|
||||
if(mob.muted)
|
||||
src << "You are muted have a nice day"
|
||||
return
|
||||
if (!( ismob(M) ))
|
||||
return
|
||||
var/t = input("Message:", text("Private message to [M.key]")) as text|null
|
||||
if(src.holder.rank != "Game Admin" && src.holder.rank != "Game Master")
|
||||
if(holder.rank != "Game Admin" && holder.rank != "Game Master")
|
||||
t = strip_html(t,500)
|
||||
if (!( t ))
|
||||
return
|
||||
@@ -120,7 +120,7 @@
|
||||
/client/proc/cmd_admin_godmode(mob/M as mob in world)
|
||||
set category = "Special Verbs"
|
||||
set name = "Godmode"
|
||||
if(!src.authenticated || !src.holder)
|
||||
if(!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
if (M.nodamage == 1)
|
||||
@@ -136,10 +136,10 @@
|
||||
/client/proc/cmd_admin_mute(mob/M as mob in world)
|
||||
set category = "Special Verbs"
|
||||
set name = "Admin Mute"
|
||||
if(!src.authenticated || !src.holder)
|
||||
if(!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
if (M.client && M.client.holder && (M.client.holder.level >= src.holder.level))
|
||||
if (M.client && M.client.holder && (M.client.holder.level >= holder.level))
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null)
|
||||
return
|
||||
M.muted = !M.muted
|
||||
@@ -153,7 +153,7 @@
|
||||
/client/proc/cmd_admin_add_random_ai_law()
|
||||
set category = "Fun"
|
||||
set name = "Add Random AI Law"
|
||||
if(!src.authenticated || !src.holder)
|
||||
if(!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
@@ -184,7 +184,7 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
|
||||
for(var/mob/living/carbon/human/pos in world)
|
||||
pos_crew += pos.real_name
|
||||
crew = pick(pos_crew)
|
||||
switch(pick(1,2,3,4,5,6,7,8,9,10,11,12))
|
||||
switch(rand(1,12))
|
||||
if(1)
|
||||
M << "\red THERE ARE [amount] [who2] ON THE STATION...LAWS UPDATED"
|
||||
M.add_ion_law("THERE ARE [amount] [who2] ON THE STATION")
|
||||
@@ -272,57 +272,67 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
|
||||
command_alert("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert")
|
||||
world << sound('ionstorm.ogg')
|
||||
|
||||
/client/proc/spawn_xeno() //Stealth spawns xenos /N
|
||||
/*
|
||||
Stealth spawns xenos
|
||||
Changed to accomodate specific spawning. It was annoying before. /N
|
||||
*/
|
||||
/client/proc/spawn_xeno()
|
||||
set category = "Fun"
|
||||
set name = "Spawn Xeno"
|
||||
set desc = "Spawns a xenomorph for all those boring rounds, without having you to do so manually."
|
||||
if(!src.authenticated || !src.holder)
|
||||
set popup_menu = 0
|
||||
|
||||
if(!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
var/list/xeno_list = list()
|
||||
for(var/obj/landmark/X in world)
|
||||
if (X.name == "xeno_spawn")
|
||||
xeno_list.Add(X)
|
||||
if(!xeno_list.len)
|
||||
alert("There are no available spots to spawn the xeno. Aborting command.")
|
||||
return
|
||||
|
||||
var/CASTE = alert(src, "Please choose which caste to spawn.",,"Hunter","Sentinel","Drone")
|
||||
create_xeno()
|
||||
return
|
||||
|
||||
var/obj/landmark/spawn_here = pick(xeno_list)
|
||||
//I use this proc for respawn character too. /N
|
||||
/proc/create_xeno(mob/dead/observer/G)
|
||||
var/alien_caste = alert(src, "Please choose which caste to spawn.",,"Hunter","Sentinel","Drone")
|
||||
|
||||
var/mob/new_xeno
|
||||
switch(CASTE)
|
||||
var/obj/landmark/spawn_here = xeno_spawn.len ? pick(xeno_spawn) : pick(latejoin)
|
||||
|
||||
var/mob/living/carbon/alien/humanoid/new_xeno
|
||||
switch(alien_caste)
|
||||
if("Hunter")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/hunter (spawn_here.loc)
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/hunter (spawn_here)
|
||||
if("Sentinel")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/sentinel (spawn_here.loc)
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/sentinel (spawn_here)
|
||||
if("Drone")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/drone (spawn_here.loc)
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/drone (spawn_here)
|
||||
|
||||
var/list/candidates = list() // Picks a random ghost for the role. Mostly a copy of alien burst code. Doesn't spawn the one using the command.
|
||||
for(var/mob/dead/observer/G in world)
|
||||
if(G.client)
|
||||
if(!G.client.holder && ((G.client.inactivity/10)/60) <= 5)
|
||||
candidates.Add(G)
|
||||
if(candidates.len)
|
||||
var/mob/dead/observer/G = pick(candidates)
|
||||
message_admins("\blue [key_name_admin(usr)] has spawned [G.key] as a filthy xeno.", 1)
|
||||
// Picks a random ghost for the role if none is specified. Mostly a copy of alien burst code.
|
||||
var/candidates_list[] = list()
|
||||
if(G)//If G exists through a passed argument.
|
||||
candidates_list += G.client
|
||||
else//Else we need to find them.
|
||||
for(G in world)
|
||||
if(G.client)
|
||||
if(!G.client.holder && ((G.client.inactivity/10)/60) <= 5)
|
||||
candidates_list += G.client//We want their client, not their ghost.
|
||||
if(candidates_list.len)//If there are people to spawn.
|
||||
if(!G)//If G was not passed through an argument.
|
||||
var/client/G_client = input("Pick the client you want to respawn as a xeno.", "Active Players") as null|anything in candidates_list//It will auto-pick a person when there is only one candidate.
|
||||
if(G_client)//They may have logged out when the admin was choosing people. Or were not chosen. Would run time error otherwise.
|
||||
G = G_client.mob
|
||||
|
||||
new_xeno.mind = new//Mind initialize stuff.
|
||||
new_xeno.mind.current = new_xeno
|
||||
new_xeno.mind.assigned_role = "Alien"
|
||||
new_xeno.mind.special_role = CASTE
|
||||
new_xeno.mind.key = G.key
|
||||
if(G.client)
|
||||
G.client.mob = new_xeno
|
||||
if(G)//If G exists.
|
||||
message_admins("\blue [key_name_admin(usr)] has spawned [G.key] as a filthy xeno.", 1)
|
||||
new_xeno.mind_initialize(G, alien_caste)
|
||||
new_xeno.key = G.key
|
||||
else//We won't be reporting duds.
|
||||
del(new_xeno)
|
||||
|
||||
del(G)
|
||||
else
|
||||
alert("There are no available ghosts to throw into the xeno. Aborting command.")
|
||||
del(new_xeno)
|
||||
return
|
||||
|
||||
alert("There are no available ghosts to throw into the xeno. Aborting command.")
|
||||
del(new_xeno)
|
||||
return
|
||||
|
||||
/*
|
||||
If a guy was gibbed and you want to revive him, this is a good way to do so.
|
||||
Works kind of like entering the game with a new character. Character receives a new mind if they didn't have one.
|
||||
@@ -345,17 +355,63 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
G_found = G
|
||||
break
|
||||
|
||||
if(!G_found)//If a ghost was found.
|
||||
if(!G_found)//If a ghost was not found.
|
||||
alert("There is no active key like that in the game or the person is not currently a ghost. Aborting command.")
|
||||
return
|
||||
|
||||
//First we spawn a dude.
|
||||
var/mob/living/carbon/human/new_character = new(src)//The mob being spawned.
|
||||
|
||||
/*Second, we try and locate a record for the person being respawned through data_core.
|
||||
//Second, we check if they are an alien or monkey.
|
||||
var/adj_name = copytext(G_found.name,1,7)//What is their name?
|
||||
if(G_found.mind&&G_found.mind.special_role=="Alien")//If they have a mind, are they an alien?
|
||||
adj_name="alien "
|
||||
if( adj_name==("alien "||"monkey"))
|
||||
if(alert("This character appears to either be an an alien or monkey. Would you like to respawn them as such?",,"Yes","No")=="Yes")//If you do.
|
||||
switch(adj_name)//Let's check based on adjusted name.
|
||||
if("monkey")//A monkey. Monkeys don't have a mind, so we can safely spawn them here if needed.
|
||||
var/mob/living/carbon/monkey/M = new(pick(latejoin))//Spawn a monkey at latejoin.
|
||||
M.key = G_found.key//They are now a monkey. Nothing else needs doing.
|
||||
if("alien ")//An alien. Aliens can have a mind which can be used to determine a few things.
|
||||
if(G_found.mind)
|
||||
var/turf/location = xeno_spawn.len ? pick(xeno_spawn) : pick(latejoin)//Location where they will be spawned.
|
||||
var/mob/living/carbon/alien/new_xeno//Null alien mob first.
|
||||
switch(G_found.mind.special_role)//If they have a mind, we can determine which caste they were.
|
||||
if("Hunter")
|
||||
new_xeno = new/mob/living/carbon/alien/humanoid/hunter(location)
|
||||
if("Sentinel")
|
||||
new_xeno = new/mob/living/carbon/alien/humanoid/sentinel(location)
|
||||
if("Drone")
|
||||
new_xeno = new/mob/living/carbon/alien/humanoid/drone(location)
|
||||
if("Queen")
|
||||
new_xeno = new/mob/living/carbon/alien/humanoid/queen(location)
|
||||
else//If we don't know what special role they have, for whatever reason, or they're a larva.
|
||||
create_xeno(G_found)
|
||||
return
|
||||
//Now to give them a new mind.
|
||||
new_xeno.mind = new
|
||||
new_xeno.mind.assigned_role = "Alien"
|
||||
new_xeno.mind.special_role = G_found.mind.special_role
|
||||
new_xeno.mind.key = G_found.key
|
||||
new_xeno.mind.current = new_xeno
|
||||
new_xeno.key = G_found.key
|
||||
new_xeno << "You have been fully respawned. Enjoy the game."
|
||||
message_admins("\blue [key_name_admin(usr)] has respawned [new_xeno.key] as a filthy xeno.", 1)
|
||||
//And we're done. Announcing other stuff is handled by spawn_xeno.
|
||||
else
|
||||
create_xeno(G_found)//Else we default to the standard command for spawning a xenomorph.
|
||||
return
|
||||
del(G_found)
|
||||
return
|
||||
//Monkeys aren't terribly important so we won't be announcing them. The proc basically ends here.
|
||||
else//Or not.
|
||||
G_found.mind=null//Null their mind so we don't screw things up ahead.
|
||||
G_found.real_name="[pick(pick(first_names_male,first_names_female))] [pick(last_names)]"//Give them a random real name.
|
||||
|
||||
/*Third, we try and locate a record for the person being respawned through data_core.
|
||||
This isn't an exact science but it does the trick more often than not.*/
|
||||
var/datum/data/record/record_found//Referenced to later to either randomize or not randomize the character.
|
||||
if(G_found.mind)//They must have a mind to reference the record.
|
||||
if(G_found.mind)//They must have a mind to reference the record. Here we also double check for aliens.
|
||||
var/id = md5("[G_found.real_name][G_found.mind.assigned_role]")
|
||||
for(var/datum/data/record/t in data_core.locked)
|
||||
if(t.fields["id"]==id)
|
||||
@@ -400,7 +456,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
//We will update their appearance when determining DNA.
|
||||
else
|
||||
new_character.gender = MALE
|
||||
if(alert("Save file not detected. Record data not detected. Please specify the character's gender.",,"Male","Female")=="Female")
|
||||
if(alert("Save file not detected. Record data not detected. Please specify [G_found.real_name]'s gender.",,"Male","Female")=="Female")
|
||||
new_character.gender = FEMALE
|
||||
var/name_safety = G_found.real_name//Default is a random name so we want to save this.
|
||||
A.randomize_appearance_for(new_character)//Now we will randomize their appearance since we have no way of knowing what they look/looked like.
|
||||
@@ -475,6 +531,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
new_character = new_character.AIize()
|
||||
if(new_character.mind.special_role=="traitor")
|
||||
call(/datum/game_mode/traitor/proc/add_law_zero)(new_character)
|
||||
//Add aliens.
|
||||
else
|
||||
new_character.Equip_Rank(new_character.mind.assigned_role, joined_late=1)//Or we simply equip them.
|
||||
|
||||
@@ -498,7 +555,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
/client/proc/cmd_admin_add_freeform_ai_law()
|
||||
set category = "Fun"
|
||||
set name = "Add Custom AI law"
|
||||
if(!src.authenticated || !src.holder)
|
||||
if(!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
var/input = input(usr, "Please enter anything you want the AI to do. Anything. Serious.", "What?", "") as text|null
|
||||
@@ -523,10 +580,10 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
set category = "Special Verbs"
|
||||
set name = "Rejuvenate"
|
||||
// All admins should be authenticated, but... what if?
|
||||
if(!src.authenticated || !src.holder)
|
||||
if(!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
if(!src.mob)
|
||||
if(!mob)
|
||||
return
|
||||
if(!istype(M))
|
||||
alert("Cannot revive a ghost")
|
||||
@@ -558,7 +615,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
/client/proc/cmd_admin_create_centcom_report()
|
||||
set category = "Special Verbs"
|
||||
set name = "Create Command Report"
|
||||
if(!src.authenticated || !src.holder)
|
||||
if(!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
var/input = input(usr, "Please enter anything you want. Anything. Serious.", "What?", "") as message|null
|
||||
@@ -582,7 +639,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
set category = "Admin"
|
||||
set name = "Delete"
|
||||
|
||||
if (!src.authenticated || !src.holder)
|
||||
if (!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
@@ -595,7 +652,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
set category = "Admin"
|
||||
set name = "List OOC"
|
||||
|
||||
if (!src.authenticated || !src.holder)
|
||||
if (!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
@@ -606,7 +663,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
set category = "Special Verbs"
|
||||
set name = "Explosion"
|
||||
|
||||
if (!src.authenticated || !src.holder)
|
||||
if (!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
@@ -632,7 +689,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
set category = "Special Verbs"
|
||||
set name = "EM Pulse"
|
||||
|
||||
if (!src.authenticated || !src.holder)
|
||||
if (!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
@@ -653,7 +710,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
set category = "Special Verbs"
|
||||
set name = "Gib"
|
||||
|
||||
if (!src.authenticated || !src.holder)
|
||||
if (!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
@@ -671,15 +728,15 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
/client/proc/cmd_admin_gib_self()
|
||||
set name = "Gibself"
|
||||
set category = "Fun"
|
||||
if (istype(src.mob, /mob/dead/observer)) // so they don't spam gibs everywhere
|
||||
if (istype(mob, /mob/dead/observer)) // so they don't spam gibs everywhere
|
||||
return
|
||||
else
|
||||
src.mob.gib()
|
||||
mob.gib()
|
||||
/*
|
||||
/client/proc/cmd_manual_ban()
|
||||
set name = "Manual Ban"
|
||||
set category = "Special Verbs"
|
||||
if(!src.authenticated || !src.holder)
|
||||
if(!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
var/mob/M = null
|
||||
@@ -692,7 +749,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(!selection)
|
||||
return
|
||||
M = selection:mob
|
||||
if ((M.client && M.client.holder && (M.client.holder.level >= src.holder.level)))
|
||||
if ((M.client && M.client.holder && (M.client.holder.level >= holder.level)))
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!")
|
||||
return
|
||||
|
||||
@@ -750,7 +807,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
/client/proc/cmd_admin_remove_plasma()
|
||||
set category = "Debug"
|
||||
set name = "Stabilize Atmos."
|
||||
if(!src.authenticated || !src.holder)
|
||||
if(!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
// DEFERRED
|
||||
@@ -782,13 +839,10 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
set name = "Change View Range"
|
||||
set desc = "switches between 1x and custom views"
|
||||
|
||||
if(src.view == world.view)
|
||||
src.view = input("Select view range:", "FUCK YE", 7) in list(1,2,3,4,5,6,7,8,9,10,11,12,13,14,128)
|
||||
if(view == world.view)
|
||||
view = input("Select view range:", "FUCK YE", 7) in list(1,2,3,4,5,6,7,8,9,10,11,12,13,14,128)
|
||||
else
|
||||
src.view = world.view
|
||||
|
||||
|
||||
|
||||
view = world.view
|
||||
|
||||
/client/proc/admin_call_shuttle()
|
||||
|
||||
@@ -798,7 +852,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if ((!( ticker ) || emergency_shuttle.location))
|
||||
return
|
||||
|
||||
if (!src.authenticated || !src.holder)
|
||||
if (!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
@@ -822,7 +876,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if ((!( ticker ) || emergency_shuttle.location || emergency_shuttle.direction == 0))
|
||||
return
|
||||
|
||||
if (!src.authenticated || !src.holder)
|
||||
if (!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
@@ -839,30 +893,3 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
for(var/t in M.attack_log)
|
||||
usr << "[t]"
|
||||
|
||||
|
||||
/client/proc/makepAI(var/turf/T in world)
|
||||
set category = "Admin"
|
||||
set name = "Make pAI"
|
||||
set desc = "Specify a location to spawn a pAI device, then specify a key to play that pAI"
|
||||
|
||||
var/list/available = list()
|
||||
for(var/mob/C in world)
|
||||
if(C.key)
|
||||
available.Add(C)
|
||||
var/mob/choice = input("Choose a player to play the pAI", "Spawn pAI") in available
|
||||
if(!choice)
|
||||
return 0
|
||||
if(!istype(choice, /mob/dead/observer))
|
||||
var/confirm = input("[choice.key] isn't ghosting right now. Are you sure you want to yank him out of them out of their body and place them in this pAI?", "Spawn pAI Confirmation", "No") in list("Yes", "No")
|
||||
if(confirm != "Yes")
|
||||
return 0
|
||||
var/obj/item/device/paicard/card = new(T)
|
||||
var/mob/living/silicon/pai/pai = new(card)
|
||||
pai.name = input(choice, "Enter your pAI name:", "pAI Name", "Personal AI") as text
|
||||
pai.real_name = pai.name
|
||||
pai.key = choice.key
|
||||
card.pai = pai
|
||||
for(var/datum/paiCandidate/candidate in paiController.pai_candidates)
|
||||
if(candidate.key == choice.key)
|
||||
paiController.pai_candidates.Remove(candidate)
|
||||
|
||||
|
||||
@@ -46,18 +46,19 @@ var/global/sent_strike_team = 0
|
||||
var/nuke_code = "[rand(10000, 99999.0)]"
|
||||
|
||||
//Generates a list of commandos from active ghosts. Then the user picks which characters to respawn as the commandos.
|
||||
var/mob/dead/observer/G
|
||||
var/candidates[] = list()//candidates for being a commando out of all the active ghosts in world.
|
||||
var/commandos[] = list()//actual commando ghosts as picked by the user.
|
||||
var/mob/dead/observer/G//Basic variable to search for later.
|
||||
var/candidates_list[] = list()//candidates for being a commando out of all the active ghosts in world.
|
||||
var/commandos_list[] = list()//actual commando ghosts as picked by the user.
|
||||
for(G in world)
|
||||
if(G.client)
|
||||
if(!G.client.holder && ((G.client.inactivity/10)/60) <= 5) //Whoever called/has the proc won't be added to the list.
|
||||
// if(((G.client.inactivity/10)/60) <= 5) //Removing it allows even the caller to jump in. Good for testing.
|
||||
candidates += G
|
||||
for(var/i=commandos_possible,(i>0&&candidates.len),i--)
|
||||
G = input("Pick characters to spawn as the commandos. This will go on until there either no more ghosts to pick from or the slots are full.", "Active Players", G) in candidates//It will auto-pick a person when there is only one candidate.
|
||||
candidates -= G
|
||||
commandos += G
|
||||
candidates_list += G.client//Add their client to list.
|
||||
for(var/i=commandos_possible,(i>0&&candidates_list.len),i--)//Decrease with every commando selected.
|
||||
var/client/G_client = input("Pick characters to spawn as the commandos. This will go on until there either no more ghosts to pick from or the slots are full.", "Active Players") as null|anything in candidates_list//It will auto-pick a person when there is only one candidate.
|
||||
if(G_client)//They may have logged out when the admin was choosing people. Or were not chosen. Would run time error otherwise.
|
||||
candidates_list -= G_client//Subtract from candidates.
|
||||
commandos_list += G_client.mob//Add their ghost to commandos.
|
||||
|
||||
//Spawns commandos and equips them.
|
||||
for (var/obj/landmark/L in world)
|
||||
@@ -67,13 +68,13 @@ var/global/sent_strike_team = 0
|
||||
|
||||
var/mob/living/carbon/human/new_commando = create_death_commando(L, leader_selected)
|
||||
|
||||
if(commandos.len)
|
||||
G = pick(commandos)
|
||||
commandos -= G
|
||||
if(commandos_list.len)
|
||||
G = pick(commandos_list)
|
||||
new_commando.mind.key = G.key//For mind stuff.
|
||||
new_commando.key = G.key
|
||||
new_commando.internal = new_commando.s_store
|
||||
new_commando.internals.icon_state = "internal1"
|
||||
commandos_list -= G
|
||||
del(G)
|
||||
|
||||
new_commando.mind.store_memory("<B>Nuke Code:</B> \red [nuke_code].")//So they don't forget their code or mission.
|
||||
@@ -124,7 +125,10 @@ var/global/sent_strike_team = 0
|
||||
new_commando.mind.current = new_commando
|
||||
new_commando.mind.assigned_role = "MODE"
|
||||
new_commando.mind.special_role = "Death Commando"
|
||||
ticker.minds += new_commando.mind
|
||||
if(!(new_commando.mind in ticker.minds))
|
||||
ticker.minds += new_commando.mind//Adds them to regular mind list.
|
||||
if(!(new_commando.mind in ticker.mode.traitors))//If they weren't already an extra traitor.
|
||||
ticker.mode.traitors += new_commando.mind//Adds them to current traitor list. Which is really the extra antagonist list.
|
||||
new_commando.equip_death_commando(leader_selected)
|
||||
del(spawn_location)
|
||||
return new_commando
|
||||
|
||||
Reference in New Issue
Block a user