mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-05 23:11:52 +00:00
Merge pull request #1726 from Erthilo/master
Post Merge Fixes and Tweaks.
This commit is contained in:
@@ -9,19 +9,14 @@ var/global/floorIsLava = 0
|
||||
log_adminwarn(rendered)
|
||||
for (var/client/C in admin_list)
|
||||
if (C)
|
||||
var/msg = rendered
|
||||
if (admin_ref)
|
||||
msg = dd_replacetext(msg, "%admin_ref%", "\ref[C]")
|
||||
if (admin_holder_ref && C.holder)
|
||||
msg = dd_replacetext(msg, "%holder_ref%", "\ref[C.holder]")
|
||||
C << msg
|
||||
|
||||
/obj/admins/proc/player_has_info(var/key as text)
|
||||
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
|
||||
var/list/infos
|
||||
info >> infos
|
||||
if(!infos || !infos.len) return 0
|
||||
else return 1
|
||||
if(C.holder.level)
|
||||
if(C.holder.level > -3 && C.holder.level != 0)
|
||||
var/msg = rendered
|
||||
if (admin_ref)
|
||||
msg = dd_replacetext(msg, "%admin_ref%", "\ref[C]")
|
||||
if (admin_holder_ref && C.holder)
|
||||
msg = dd_replacetext(msg, "%holder_ref%", "\ref[C.holder]")
|
||||
C << msg
|
||||
|
||||
/proc/msg_admin_attack(var/text) //Toggleable Attack Messages
|
||||
var/rendered = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[text]</span></span>"
|
||||
@@ -202,6 +197,76 @@ var/global/floorIsLava = 0
|
||||
M.change_mob_type( /mob/living/simple_animal/constructwraith , null, null, delmob)
|
||||
if("shade")
|
||||
M.change_mob_type( /mob/living/simple_animal/shade , null, null, delmob)
|
||||
if(href_list["view_player_info"])
|
||||
show_player_info(href_list["view_player_info"])
|
||||
|
||||
if(href_list["add_player_info"])
|
||||
var/key = href_list["add_player_info"]
|
||||
var/add = input("Add Player Info") as null|text
|
||||
if(!add) return
|
||||
|
||||
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
|
||||
var/list/infos
|
||||
info >> infos
|
||||
if(!infos) infos = list()
|
||||
|
||||
var/datum/player_info/P = new
|
||||
P.author = usr.key
|
||||
P.rank = usr.client.holder.rank
|
||||
P.content = add
|
||||
var/modifyer = "th"
|
||||
switch(time2text(world.timeofday, "DD"))
|
||||
if("01","21","31")
|
||||
modifyer = "st"
|
||||
if("02","22",)
|
||||
modifyer = "nd"
|
||||
if("03","23")
|
||||
modifyer = "rd"
|
||||
var/day_string = "[time2text(world.timeofday, "DD")][modifyer]"
|
||||
if(copytext(day_string,1,2) == "0")
|
||||
day_string = copytext(day_string,2)
|
||||
var/full_date = time2text(world.timeofday, "DDD, Month DD of YYYY")
|
||||
var/day_loc = findtext(full_date, time2text(world.timeofday, "DD"))
|
||||
P.timestamp = "[copytext(full_date,1,day_loc)][day_string][copytext(full_date,day_loc+2)]"
|
||||
|
||||
infos += P
|
||||
|
||||
info << infos
|
||||
|
||||
message_admins("\blue [key_name_admin(usr)] has edited [key]'s notes.")
|
||||
log_admin("[key_name(usr)] has edited [key]'s notes.")
|
||||
|
||||
del info
|
||||
|
||||
var/savefile/note_list = new("data/player_notes.sav")
|
||||
var/list/note_keys
|
||||
note_list >> note_keys
|
||||
if(!note_keys) note_keys = list()
|
||||
if(!note_keys.Find(key)) note_keys += key
|
||||
note_list << note_keys
|
||||
del note_list
|
||||
|
||||
show_player_info(key)
|
||||
|
||||
if(href_list["remove_player_info"])
|
||||
var/key = href_list["remove_player_info"]
|
||||
var/index = text2num(href_list["remove_index"])
|
||||
|
||||
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
|
||||
var/list/infos
|
||||
info >> infos
|
||||
if(!infos || infos.len < index) return
|
||||
|
||||
var/datum/player_info/item = infos[index]
|
||||
infos.Remove(item)
|
||||
info << infos
|
||||
|
||||
message_admins("\blue [key_name_admin(usr)] deleted one of [key]'s notes.")
|
||||
log_admin("[key_name(usr)] deleted one of [key]'s notes.")
|
||||
|
||||
del info
|
||||
|
||||
show_player_info(key)
|
||||
|
||||
|
||||
/////////////////////////////////////new ban stuff
|
||||
@@ -216,6 +281,13 @@ var/global/floorIsLava = 0
|
||||
alert(usr,"This ban has already been lifted / does not exist.","Error","Ok")
|
||||
unbanpanel()
|
||||
|
||||
if(href_list["unban_cid"])
|
||||
var/banfolder = href_list["unban_cid"]
|
||||
Banlist.cd = "/base/[banfolder]"
|
||||
var/key = Banlist["key"]
|
||||
if(alert(usr, "Are you sure you want to remove the computer ID for [key]'s ban? Without the ID, a different account could get on the server from [key]'s computer.", "Confirmation", "Yes", "No") == "Yes")
|
||||
Banlist["skipIdCheck"] << 1
|
||||
|
||||
if(href_list["unbane"])
|
||||
UpdateTime()
|
||||
var/reason
|
||||
@@ -484,6 +556,24 @@ var/global/floorIsLava = 0
|
||||
else
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=wizard;jobban4=\ref[M]'>[dd_replacetext("Wizard", " ", " ")]</a></td>"
|
||||
|
||||
//Emergency Response Team
|
||||
if(jobban_isbanned(M, "Emergency Response Team" || isbanned_dept))
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'><font color=red>[dd_replacetext("Emergency Response Team", " ", " ")]</font></a></td>"
|
||||
else
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'>[dd_replacetext("Emergency Response Team", " ", " ")]</a></td>"
|
||||
|
||||
//Misc (Grey)
|
||||
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
||||
jobs += "<tr bgcolor='B5B5B5'><th colspan='10'>Misc Positions</th></tr><tr align='center'>"
|
||||
|
||||
//Records
|
||||
if(jobban_isbanned(M, "Records"))
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Records;jobban4=\ref[M]'><font color=red>[dd_replacetext("Records", " ", " ")]</font></a></td>"
|
||||
else
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Records;jobban4=\ref[M]'>[dd_replacetext("Records", " ", " ")]</a></td>"
|
||||
|
||||
|
||||
|
||||
/* //Malfunctioning AI //Removed Malf-bans because they're a pain to impliment
|
||||
if(jobban_isbanned(M, "malf AI") || isbanned_dept)
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=malf AI;jobban4=\ref[M]'><font color=red>[dd_replacetext("Malf AI", " ", " ")]</font></a></td>"
|
||||
@@ -597,6 +687,8 @@ var/global/floorIsLava = 0
|
||||
M << "\red<BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG>"
|
||||
M << "\red <B>The reason is: [reason]</B>"
|
||||
M << "\red Jobban can be lifted only upon request."
|
||||
if(config.banappeals)
|
||||
M << "\red To try to resolve this matter head to [config.banappeals]"
|
||||
href_list["jobban2"] = 1 // lets it fall through and refresh
|
||||
return 1
|
||||
|
||||
@@ -864,7 +956,7 @@ var/global/floorIsLava = 0
|
||||
return
|
||||
|
||||
if (href_list["sendtoprison"])
|
||||
if ((src.rank in list( "Moderator", "Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
|
||||
if ((src.rank in list(/* "Moderator", */"Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
|
||||
|
||||
var/confirm = alert(usr, "Send to admin prison for the round?", "Message", "Yes", "No")
|
||||
if(confirm != "Yes")
|
||||
@@ -1149,6 +1241,41 @@ var/global/floorIsLava = 0
|
||||
else
|
||||
alert("The mob must not be a new_player.")
|
||||
return
|
||||
if (href_list["granttaj"])
|
||||
if (src.level>=5)
|
||||
var/mob/M = locate(href_list["granttaj"])
|
||||
for (var/s in alien_whitelist)
|
||||
if(findtext(s,"[M.ckey] - Tajaran"))
|
||||
alert("This key is already on the whitelist!", null, null, null, null, null)
|
||||
return
|
||||
alien_whitelist += "[M.ckey] - Tajaran"
|
||||
usr << "[M.ckey] added to Tajaran whitelist."
|
||||
else
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!")
|
||||
return
|
||||
|
||||
if (href_list["grantsog"])
|
||||
if (src.level>=5)
|
||||
var/mob/M = locate(href_list["grantsog"])
|
||||
for (var/s in alien_whitelist)
|
||||
if(findtext(s,"[M.ckey] - Soghun"))
|
||||
alert("This key is already on the whitelist!", null, null, null, null, null)
|
||||
return
|
||||
alien_whitelist += "[M.ckey] - Soghun"
|
||||
usr << "[M.ckey] added to Soghun whitelist."
|
||||
else
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!")
|
||||
return
|
||||
|
||||
if (href_list["grantskrell"])
|
||||
if (src.level>=5)
|
||||
var/mob/M = locate(href_list["grantskrell"])
|
||||
for (var/s in alien_whitelist)
|
||||
if(findtext(s,"[M.ckey] - Skrell"))
|
||||
alert("This key is already on the whitelist!", null, null, null, null, null)
|
||||
return
|
||||
alien_whitelist += "[M.ckey] - Skrell"
|
||||
usr << "[M.ckey] added to Skrell whitelist."
|
||||
else
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!")
|
||||
return
|
||||
@@ -1191,47 +1318,64 @@ var/global/floorIsLava = 0
|
||||
// Now isn't that much better? IT IS NOW A PROC, i.e. kinda like a big panel like unstable
|
||||
|
||||
if (href_list["adminplayeropts"])
|
||||
var/mob/M = locate(href_list["adminplayeropts"])
|
||||
show_player_panel(M)
|
||||
if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
|
||||
var/mob/M = locate(href_list["adminplayeropts"])
|
||||
show_player_panel(M)
|
||||
else
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!")
|
||||
|
||||
if (href_list["player_info"])
|
||||
var/key = href_list["player_info"]
|
||||
show_player_info(key)
|
||||
|
||||
if (href_list["adminplayervars"])
|
||||
var/mob/M = locate(href_list["adminplayervars"])
|
||||
if(src && src.owner)
|
||||
if(istype(src.owner,/client))
|
||||
var/client/cl = src.owner
|
||||
cl.debug_variables(M)
|
||||
else if(ismob(src.owner))
|
||||
var/mob/MO = src.owner
|
||||
if(MO.client)
|
||||
var/client/cl = MO.client
|
||||
if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
|
||||
var/mob/M = locate(href_list["adminplayervars"])
|
||||
if(src && src.owner)
|
||||
if(istype(src.owner,/client))
|
||||
var/client/cl = src.owner
|
||||
cl.debug_variables(M)
|
||||
else if(ismob(src.owner))
|
||||
var/mob/MO = src.owner
|
||||
if(MO.client)
|
||||
var/client/cl = MO.client
|
||||
cl.debug_variables(M)
|
||||
else
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!")
|
||||
|
||||
if (href_list["adminplayersubtlemessage"])
|
||||
var/mob/M = locate(href_list["adminplayersubtlemessage"])
|
||||
if(src && src.owner)
|
||||
if(istype(src.owner,/client))
|
||||
var/client/cl = src.owner
|
||||
cl.cmd_admin_subtle_message(M)
|
||||
else if(ismob(src.owner))
|
||||
var/mob/MO = src.owner
|
||||
if(MO.client)
|
||||
var/client/cl = MO.client
|
||||
if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
|
||||
var/mob/M = locate(href_list["adminplayersubtlemessage"])
|
||||
if(src && src.owner)
|
||||
if(istype(src.owner,/client))
|
||||
var/client/cl = src.owner
|
||||
cl.cmd_admin_subtle_message(M)
|
||||
else if(ismob(src.owner))
|
||||
var/mob/MO = src.owner
|
||||
if(MO.client)
|
||||
var/client/cl = MO.client
|
||||
cl.cmd_admin_subtle_message(M)
|
||||
else
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!")
|
||||
|
||||
if (href_list["adminplayerobservejump"])
|
||||
var/mob/M = locate(href_list["adminplayerobservejump"])
|
||||
if(src && src.owner)
|
||||
var/client/C
|
||||
if(istype(src.owner,/client))
|
||||
C = src.owner
|
||||
else if(ismob(src.owner))
|
||||
var/mob/MO = src.owner
|
||||
C = MO.client
|
||||
if(C)
|
||||
if(state == 1)
|
||||
C.admin_ghost()
|
||||
sleep(2)
|
||||
C.jumptomob(M)
|
||||
if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
|
||||
var/mob/M = locate(href_list["adminplayerobservejump"])
|
||||
if(src && src.owner)
|
||||
var/client/C
|
||||
if(istype(src.owner,/client))
|
||||
C = src.owner
|
||||
else if(ismob(src.owner))
|
||||
var/mob/MO = src.owner
|
||||
C = MO.client
|
||||
if(C)
|
||||
if(state == 1)
|
||||
C.admin_ghost()
|
||||
sleep(2)
|
||||
C.jumptomob(M)
|
||||
else
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!")
|
||||
|
||||
|
||||
if (href_list["adminplayerobservecoodjump"])
|
||||
|
||||
@@ -1336,14 +1480,19 @@ var/global/floorIsLava = 0
|
||||
|
||||
|
||||
if (href_list["traitor_panel_pp"])
|
||||
var/mob/M = locate(href_list["traitor_panel_pp"])
|
||||
if(isnull(M))
|
||||
usr << "Mob doesn't seem to exist."
|
||||
return
|
||||
if(!ismob(M))
|
||||
usr << "This doen't seem to be a mob."
|
||||
return
|
||||
show_traitor_panel(M)
|
||||
if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
|
||||
var/mob/M = locate(href_list["traitor_panel_pp"])
|
||||
if(isnull(M))
|
||||
usr << "Mob doesn't seem to exist."
|
||||
return
|
||||
if(!ismob(M))
|
||||
usr << "This doen't seem to be a mob."
|
||||
return
|
||||
show_traitor_panel(M)
|
||||
else
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!")
|
||||
|
||||
|
||||
|
||||
if (href_list["BlueSpaceArtillery"])
|
||||
var/mob/target = locate(href_list["BlueSpaceArtillery"])
|
||||
@@ -1467,8 +1616,12 @@ var/global/floorIsLava = 0
|
||||
return
|
||||
|
||||
if (href_list["narrateto"])
|
||||
var/mob/M = locate(href_list["narrateto"])
|
||||
usr.client.cmd_admin_direct_narrate(M)
|
||||
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"])
|
||||
@@ -1514,7 +1667,16 @@ var/global/floorIsLava = 0
|
||||
return create_mob(usr)
|
||||
else
|
||||
alert("You are not a high enough administrator! Sorry!!!!")
|
||||
/*
|
||||
if (href_list["vmode"])
|
||||
vmode()
|
||||
|
||||
if (href_list["votekill"])
|
||||
votekill()
|
||||
|
||||
if (href_list["voteres"])
|
||||
voteres()
|
||||
*/
|
||||
if (href_list["prom_demot"])
|
||||
if ((src.rank in list("Trial Admin", "Badmin", "Game Admin", "Game Master" )))
|
||||
var/client/C = locate(href_list["prom_demot"])
|
||||
@@ -1532,6 +1694,7 @@ var/global/floorIsLava = 0
|
||||
<A href='?src=\ref[src];chgadlvl=Temporary Admin;client4ad=\ref[C]'>Temporary Admin</A> // Secondary Admin<BR>
|
||||
<A href='?src=\ref[src];chgadlvl=Moderator;client4ad=\ref[C]'>Moderator</A> // Moderator<BR>
|
||||
<A href='?src=\ref[src];chgadlvl=Admin Observer;client4ad=\ref[C]'>Admin Observer</A> // Filthy Xeno<BR>
|
||||
<A href='?src=\ref[src];chgadlvl=Retired Admin;client4ad=\ref[C]'>Retired Admin</A> // Retired Administrator<BR>
|
||||
<A href='?src=\ref[src];chgadlvl=Remove;client4ad=\ref[C]'>Remove Admin</A><BR>"}
|
||||
else if(src.level == 5)
|
||||
//coder
|
||||
@@ -1542,6 +1705,7 @@ var/global/floorIsLava = 0
|
||||
<A href='?src=\ref[src];chgadlvl=Temporary Admin;client4ad=\ref[C]'>Temporary Admin</A> // Secondary Admin<BR>
|
||||
<A href='?src=\ref[src];chgadlvl=Moderator;client4ad=\ref[C]'>Moderator</A> // Moderator<BR>
|
||||
<A href='?src=\ref[src];chgadlvl=Admin Observer;client4ad=\ref[C]'>Admin Observer</A> // Filthy Xeno<BR>
|
||||
<A href='?src=\ref[src];chgadlvl=Retired Admin;client4ad=\ref[C]'>Retired Admin</A> // Retired Administrator<BR>
|
||||
<A href='?src=\ref[src];chgadlvl=Remove;client4ad=\ref[C]'>Remove Admin</A><BR>"}
|
||||
else
|
||||
alert("Not a high enough level admin, sorry.")
|
||||
@@ -2267,7 +2431,7 @@ var/global/floorIsLava = 0
|
||||
return
|
||||
|
||||
if (href_list["secretsadmin"])
|
||||
if ((src.rank in list( "Moderator", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
|
||||
if ((src.rank in list(/* "Moderator", */"Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
|
||||
var/ok = 0
|
||||
switch(href_list["secretsadmin"])
|
||||
if("clear_bombs")
|
||||
@@ -2381,6 +2545,46 @@ var/global/floorIsLava = 0
|
||||
if(href_list["vsc"] == "default")
|
||||
vsc.SetDefault(usr)
|
||||
|
||||
if (href_list["rnd_max"])
|
||||
for(var/obj/machinery/computer/rdconsole/C in world)
|
||||
for(var/datum/tech/T in C.files.known_tech)
|
||||
T.level = 6
|
||||
C.files.RefreshResearch()
|
||||
|
||||
for(var/obj/machinery/r_n_d/server/C in world)
|
||||
for(var/datum/tech/T in C.files.known_tech)
|
||||
T.level = 6
|
||||
C.files.RefreshResearch()
|
||||
|
||||
// owner:rnd_check_designs()
|
||||
#define AUTOBANTIME 10
|
||||
if(href_list["warn"])
|
||||
var/mob/M = locate(href_list["warn"])
|
||||
if (ismob(M))
|
||||
var/client/user
|
||||
if(istype(usr, /client))
|
||||
user = usr
|
||||
else if(istype(usr, /mob))
|
||||
user = usr.client
|
||||
|
||||
if(!user.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
if(M.client && M.client.holder && (M.client.holder.level >= user.holder.level))
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null)
|
||||
return
|
||||
if(!M.client.warned)
|
||||
M << "\red <B>You have been warned by an administrator. This is the only warning you will recieve.</B>"
|
||||
M.client.warned = 1
|
||||
message_admins("\blue [user.ckey] warned [M.ckey].")
|
||||
else
|
||||
AddBan(M.ckey, M.computer_id, "Autobanning due to previous warn", user.ckey, 1, AUTOBANTIME)
|
||||
M << "\red<BIG><B>You have been autobanned by [user.ckey].</B></BIG>"
|
||||
M << "\red This is a temporary ban; it will automatically be removed in [AUTOBANTIME] minutes."
|
||||
log_admin("[user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.")
|
||||
ban_unban_log_save("[user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.")
|
||||
message_admins("\blue [user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.")
|
||||
//feedback_inc("ban_warn",1)
|
||||
|
||||
if(href_list["ac_view_wanted"]) //Admin newscaster Topic() stuff be here
|
||||
src.admincaster_screen = 18 //The ac_ prefix before the hrefs stands for AdminCaster.
|
||||
@@ -2727,6 +2931,9 @@ var/global/floorIsLava = 0
|
||||
body += "<A href='?src=\ref[src];tdome2=\ref[M]'>Thunderdome 2</A> | "
|
||||
body += "<A href='?src=\ref[src];tdomeadmin=\ref[M]'>Thunderdome Admin</A> | "
|
||||
body += "<A href='?src=\ref[src];tdomeobserve=\ref[M]'>Thunderdome Observer</A> | "
|
||||
body += "<A href='?src=\ref[src];granttaj=\ref[M]'>Grant Tajaran (Temp)</A> | "
|
||||
body += "<A href='?src=\ref[src];grantsog=\ref[M]'>Grant Soghun (Temp)</A> | "
|
||||
body += "<A href='?src=\ref[src];grantskrell=\ref[M]'>Grant Skrell (Temp)</A> | "
|
||||
|
||||
body += "<br>"
|
||||
body += "</body></html>"
|
||||
@@ -2735,6 +2942,84 @@ var/global/floorIsLava = 0
|
||||
feedback_add_details("admin_verb","SPP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/datum/player_info/var/author // admin who authored the information
|
||||
/datum/player_info/var/rank //rank of admin who made the notes
|
||||
/datum/player_info/var/content // text content of the information
|
||||
/datum/player_info/var/timestamp // Because this is bloody annoying
|
||||
|
||||
/obj/admins/proc/player_has_info(var/key as text)
|
||||
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
|
||||
var/list/infos
|
||||
info >> infos
|
||||
if(!infos || !infos.len) return 0
|
||||
else return 1
|
||||
|
||||
/obj/admins/proc/show_player_info(var/key as text)
|
||||
set category = "Admin"
|
||||
set name = "Show Player Info"
|
||||
if (!istype(src,/obj/admins))
|
||||
src = usr.client.holder
|
||||
if (!istype(src,/obj/admins))
|
||||
usr << "Error: you are not an admin!"
|
||||
return
|
||||
var/dat = "<html><head><title>Info on [key]</title></head>"
|
||||
dat += "<body>"
|
||||
|
||||
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
|
||||
var/list/infos
|
||||
info >> infos
|
||||
if(!infos)
|
||||
dat += "No information found on the given key.<br>"
|
||||
else
|
||||
var/update_file = 0
|
||||
var/i = 0
|
||||
for(var/datum/player_info/I in infos)
|
||||
i += 1
|
||||
if(!I.timestamp)
|
||||
I.timestamp = "Pre-4/3/2012"
|
||||
update_file = 1
|
||||
if(!I.rank)
|
||||
I.rank = "N/A"
|
||||
update_file = 1
|
||||
dat += "<font color=#008800>[I.content]</font> <i>by [I.author] ([I.rank])</i> on <i><font color=blue>[I.timestamp]</i></font> "
|
||||
if(I.author == usr.key)
|
||||
dat += "<A href='?src=\ref[src];remove_player_info=[key];remove_index=[i]'>Remove</A>"
|
||||
dat += "<br><br>"
|
||||
if(update_file) info << infos
|
||||
|
||||
dat += "<br>"
|
||||
dat += "<A href='?src=\ref[src];add_player_info=[key]'>Add Comment</A><br>"
|
||||
|
||||
dat += "</body></html>"
|
||||
usr << browse(dat, "window=adminplayerinfo;size=480x480")
|
||||
|
||||
/obj/admins/proc/show_skills(var/mob/living/carbon/human/M as mob in world)
|
||||
set category = "Admin"
|
||||
set name = "Show Skills"
|
||||
|
||||
if (!istype(src,/obj/admins))
|
||||
src = usr.client.holder
|
||||
if (!istype(src,/obj/admins))
|
||||
usr << "Error: you are not an admin!"
|
||||
return
|
||||
|
||||
show_skill_window(usr, M)
|
||||
|
||||
return
|
||||
|
||||
/client/proc/update_mob_sprite(mob/living/carbon/human/H as mob)
|
||||
set category = "Admin"
|
||||
set name = "Update Mob Sprite"
|
||||
set desc = "Should fix any mob sprite update errors."
|
||||
|
||||
if (!holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
if(istype(H))
|
||||
H.regenerate_icons()
|
||||
|
||||
|
||||
/obj/admins/proc/access_news_network() //MARKER
|
||||
set category = "Fun"
|
||||
set name = "Access Newscaster Network"
|
||||
@@ -2940,6 +3225,21 @@ var/global/floorIsLava = 0
|
||||
dat += "</table>"
|
||||
usr << browse(dat, "window=ban;size=400x400")
|
||||
|
||||
/obj/admins/proc/PlayerNotes()
|
||||
var/dat = "<B>Player notes</B><HR><table>"
|
||||
|
||||
var/savefile/S=new("data/player_notes.sav")
|
||||
var/list/note_keys
|
||||
S >> note_keys
|
||||
if(!note_keys)
|
||||
dat += "No notes found."
|
||||
else
|
||||
sortList(note_keys)
|
||||
for(var/t in note_keys)
|
||||
dat += text("<tr><td><A href='?src=\ref[src];view_player_info=[t]'>[t]</A></td></tr>")
|
||||
dat += "</table>"
|
||||
usr << browse(dat, "window=player_notes;size=400x400")
|
||||
|
||||
/obj/admins/proc/Game()
|
||||
|
||||
var/dat
|
||||
@@ -2978,6 +3278,10 @@ var/global/floorIsLava = 0
|
||||
dat += "<A href='?src=\ref[src];create_turf=1'>Create Turf</A><br>"
|
||||
if(lvl >= 5)
|
||||
dat += "<A href='?src=\ref[src];create_mob=1'>Create Mob</A><br>"
|
||||
if(lvl >= 3 )
|
||||
dat += "<br><A href='?src=\ref[src];vsc=airflow'>Edit Airflow Settings</A><br>"
|
||||
dat += "<A href='?src=\ref[src];vsc=plasma'>Edit Plasma Settings</A><br>"
|
||||
dat += "<A href='?src=\ref[src];vsc=default'>Choose a default ZAS setting</A><br>"
|
||||
// if(lvl == 6 )
|
||||
usr << browse(dat, "window=admin2;size=210x180")
|
||||
return
|
||||
@@ -3046,6 +3350,7 @@ var/global/floorIsLava = 0
|
||||
<A href='?src=\ref[src];secretsfun=radiation'>Irradiate the station</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=prison_break'>Trigger a Prison Break</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=virus'>Trigger a Virus Outbreak</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=trigger_armed_response_team'>Trigger the Emergency Response Team</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=immovable'>Spawn an Immovable Rod</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=lightsout'>Toggle a "lights out" event</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=ionstorm'>Spawn an Ion Storm</A><BR>
|
||||
@@ -3076,6 +3381,7 @@ var/global/floorIsLava = 0
|
||||
<A href='?src=\ref[src];secretsfun=movealienship'>Move Alien Dinghy</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=moveminingshuttle'>Move Mining Shuttle</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=blackout'>Break all lights</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=electric'>Trigger Electrical Storm</A><BR>"
|
||||
<A href='?src=\ref[src];secretsfun=whiteout'>Fix all lights</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=friendai'>Best Friend AI</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=floorlava'>The floor is lava! (DANGEROUS)</A><BR>"}
|
||||
@@ -3105,12 +3411,160 @@ var/global/floorIsLava = 0
|
||||
usr << browse(dat, "window=secrets")
|
||||
return
|
||||
|
||||
/obj/admins/proc/Voting()
|
||||
|
||||
var/dat
|
||||
var/lvl = 0
|
||||
switch(src.rank)
|
||||
if("Moderator")
|
||||
lvl = 1
|
||||
if("Temporary Admin")
|
||||
lvl = 2
|
||||
if("Admin Candidate")
|
||||
lvl = 3
|
||||
if("Trial Admin")
|
||||
lvl = 4
|
||||
if("Badmin")
|
||||
lvl = 5
|
||||
if("Game Admin")
|
||||
lvl = 6
|
||||
if("Game Master")
|
||||
lvl = 7
|
||||
|
||||
|
||||
dat += "<center><B>Voting</B></center><hr>\n"
|
||||
|
||||
if(lvl > 0)
|
||||
dat += {"
|
||||
<A href='?src=\ref[src];votekill=1'>Abort Vote</A><br>
|
||||
<A href='?src=\ref[src];vmode=1'>Start Vote</A><br>
|
||||
<A href='?src=\ref[src];voteres=1'>Toggle Voting</A><br>
|
||||
"}
|
||||
|
||||
usr << browse(dat, "window=admin2;size=210x160")
|
||||
return
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////admins2.dm merge
|
||||
//i.e. buttons/verbs
|
||||
|
||||
/*
|
||||
/obj/admins/proc/vmode()
|
||||
set category = "Server"
|
||||
set hidden = 1 // It doesn't have a cancel button, so it shouldn't be autocompleted. Should be started via Voting() instead
|
||||
if (!usr.client.holder)
|
||||
return
|
||||
|
||||
var/confirm = alert("What vote would you like to start?", "Vote", "Restart", "Custom Vote", "Change Game Mode")
|
||||
switch(confirm)
|
||||
if("Cancel")
|
||||
return
|
||||
if("Restart")
|
||||
vote.mode = 0
|
||||
// hack to yield 0=restart, 1=changemode
|
||||
if("Change Game Mode")
|
||||
vote.mode = 1
|
||||
if(!ticker)
|
||||
if(going)
|
||||
world << "<B>The game start has been delayed.</B>"
|
||||
going = 0
|
||||
if("Custom Vote")
|
||||
vote.mode = 2
|
||||
vote.enteringchoices = 1
|
||||
vote.customname = input(usr, "What are you voting for?", "Custom Vote") as text
|
||||
if(!vote.customname)
|
||||
vote.enteringchoices = 0
|
||||
vote.voting = 0
|
||||
return
|
||||
|
||||
var/N = input(usr, "How many options does this vote have?", "Custom Vote", 0) as num
|
||||
if(!N)
|
||||
vote.enteringchoices = 0
|
||||
vote.voting = 0
|
||||
return
|
||||
|
||||
var/i
|
||||
vote.choices = list()
|
||||
for(i=1; i<=N; i++)
|
||||
var/addvote = input(usr, "What is option #[i]?", "Enter Option #[i]") as text
|
||||
vote.choices += addvote
|
||||
vote.enteringchoices = 0
|
||||
|
||||
vote.voting = 1
|
||||
// now voting
|
||||
vote.votetime = world.timeofday + config.vote_period*10
|
||||
// when the vote will end
|
||||
spawn(config.vote_period*10)
|
||||
vote.endvote()
|
||||
if(vote.mode == 2)
|
||||
world << "\red<B>*** A custom vote has been initiated by [usr.key].</B>"
|
||||
world << "\red You have [vote.timetext(config.vote_period)] to vote."
|
||||
else
|
||||
world << "\red<B>*** A vote to [vote.mode?"change game mode":"restart"] has been initiated by [usr.key].</B>"
|
||||
world << "\red You have [vote.timetext(config.vote_period)] to vote."
|
||||
|
||||
log_admin("Voting to [vote.mode?"change mode":"restart round"] forced by admin [key_name(usr)]")
|
||||
|
||||
for(var/mob/CM in world)
|
||||
if(CM.client)
|
||||
if(config.vote_no_default || (config.vote_no_dead && CM.stat == 2))
|
||||
CM.client.vote = "none"
|
||||
else
|
||||
CM.client.vote = "default"
|
||||
|
||||
for(var/mob/CM in world)
|
||||
if(CM.client)
|
||||
if(config.vote_no_default || (config.vote_no_dead && CM.stat == 2))
|
||||
CM.client.vote = "none"
|
||||
else
|
||||
CM.client.vote = "default"
|
||||
//feedback_add_details("admin_verb","SV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/obj/admins/proc/votekill()
|
||||
set category = "Server"
|
||||
set name = "Abort Vote"
|
||||
set desc="Aborts a vote"
|
||||
if(vote.voting == 0)
|
||||
alert("No votes in progress")
|
||||
return
|
||||
world << "\red <b>*** Voting aborted by [usr.client.stealth ? "Admin Candidate" : usr.key].</b>"
|
||||
|
||||
log_admin("Voting aborted by [key_name(usr)]")
|
||||
|
||||
vote.voting = 0
|
||||
vote.nextvotetime = world.timeofday + 10*config.vote_delay
|
||||
|
||||
for(var/mob/M in world)
|
||||
// clear vote window from all clients
|
||||
if(M.client)
|
||||
M << browse(null, "window=vote")
|
||||
M.client.showvote = 0
|
||||
//feedback_add_details("admin_verb","AV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/obj/admins/proc/voteres()
|
||||
set category = "Server"
|
||||
set name = "Toggle Voting"
|
||||
set desc="Toggles Votes"
|
||||
var/confirm = alert("What vote would you like to toggle?", "Vote", "Restart [config.allow_vote_restart ? "Off" : "On"]", "Change Game Mode [config.allow_vote_mode ? "Off" : "On"]", "Cancel")
|
||||
if(confirm == "Cancel")
|
||||
return
|
||||
if(confirm == "Restart [config.allow_vote_restart ? "Off" : "On"]")
|
||||
config.allow_vote_restart = !config.allow_vote_restart
|
||||
world << "<b>Player restart voting toggled to [config.allow_vote_restart ? "On" : "Off"]</b>."
|
||||
log_admin("Restart voting toggled to [config.allow_vote_restart ? "On" : "Off"] by [key_name(usr)].")
|
||||
|
||||
if(config.allow_vote_restart)
|
||||
vote.nextvotetime = world.timeofday
|
||||
if(confirm == "Change Game Mode [config.allow_vote_mode ? "Off" : "On"]")
|
||||
config.allow_vote_mode = !config.allow_vote_mode
|
||||
world << "<b>Player mode voting toggled to [config.allow_vote_mode ? "On" : "Off"]</b>."
|
||||
log_admin("Mode voting toggled to [config.allow_vote_mode ? "On" : "Off"] by [key_name(usr)].")
|
||||
|
||||
if(config.allow_vote_mode)
|
||||
vote.nextvotetime = world.timeofday
|
||||
//feedback_add_details("admin_verb","TV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
*/
|
||||
/obj/admins/proc/restart()
|
||||
set category = "Server"
|
||||
set name = "Restart"
|
||||
|
||||
@@ -93,6 +93,9 @@
|
||||
del(src)
|
||||
return
|
||||
|
||||
if ("Retired Admin")
|
||||
holder.level = -3
|
||||
|
||||
else
|
||||
del(holder)
|
||||
return
|
||||
@@ -104,43 +107,34 @@
|
||||
if (holder.level >= -1)
|
||||
verbs += /client/proc/investigate_show
|
||||
verbs += /client/proc/cmd_admin_say
|
||||
verbs += /client/proc/cmd_mod_say
|
||||
verbs += /client/proc/cmd_admin_gib_self
|
||||
verbs += /client/proc/update_mob_sprite
|
||||
verbs += /client/proc/deadmin_self
|
||||
else if (holder.level == -3) // Retired Admin
|
||||
verbs += /client/proc/cmd_admin_say
|
||||
verbs += /client/proc/cmd_mod_say
|
||||
return
|
||||
else return
|
||||
|
||||
//Moderator
|
||||
if (holder.level >= 0)
|
||||
verbs += /obj/admins/proc/announce
|
||||
verbs += /obj/admins/proc/startnow
|
||||
verbs += /obj/admins/proc/toggleAI //Toggle the AI
|
||||
verbs += /obj/admins/proc/toggleenter //Toggle enterting
|
||||
verbs += /obj/admins/proc/toggleguests //Toggle guests entering
|
||||
verbs += /obj/admins/proc/toggleooc //toggle ooc
|
||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
verbs += /obj/admins/proc/show_player_panel
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
//verbs += /client/proc/cmd_admin_mute --was never used (according to stats trackind) - use show player panel --erro
|
||||
verbs += /client/proc/cmd_admin_pm_context
|
||||
verbs += /client/proc/cmd_admin_pm_panel
|
||||
verbs += /client/proc/cmd_admin_subtle_message
|
||||
//verbs += /client/proc/warn - was never used
|
||||
verbs += /client/proc/dsay
|
||||
verbs += /client/proc/admin_ghost
|
||||
verbs += /client/proc/game_panel
|
||||
verbs += /client/proc/player_panel
|
||||
verbs += /client/proc/player_panel_new
|
||||
verbs += /client/proc/unban_panel
|
||||
verbs += /client/proc/jobbans
|
||||
verbs += /client/proc/unjobban_panel
|
||||
verbs += /client/proc/hide_verbs
|
||||
verbs += /client/proc/general_report
|
||||
verbs += /client/proc/air_report
|
||||
verbs += /client/proc/deadmin_self
|
||||
verbs += /client/proc/check_ai_laws
|
||||
//verbs += /client/proc/cmd_admin_prison --Merged with player panel
|
||||
//verbs += /obj/admins/proc/unprison --Merged with player panel
|
||||
verbs += /client/proc/admin_ghost
|
||||
verbs += /client/proc/Report
|
||||
verbs += /client/proc/display_admin_reports
|
||||
verbs += /obj/admins/proc/show_skills
|
||||
else return
|
||||
|
||||
if(holder.level == 0) //Moderators don't get asay, only msay
|
||||
verbs -= /client/proc/cmd_admin_say
|
||||
verbs -= /client/proc/investigate_show
|
||||
verbs -= /client/proc/cmd_admin_gib_self
|
||||
verbs += /client/proc/mod_panel
|
||||
|
||||
//Temporary Admin
|
||||
if (holder.level >= 1)
|
||||
verbs += /obj/admins/proc/delay //game start delay
|
||||
@@ -152,6 +146,33 @@
|
||||
verbs += /client/proc/toggle_hear_radio
|
||||
verbs += /client/proc/deadmin_self
|
||||
//verbs += /client/proc/cmd_admin_attack_log --Merged with view variables
|
||||
|
||||
//
|
||||
//MOVED FROM MODERATOR
|
||||
//
|
||||
verbs += /obj/admins/proc/announce
|
||||
verbs += /obj/admins/proc/startnow
|
||||
verbs += /obj/admins/proc/toggleAI //Toggle the AI
|
||||
verbs += /obj/admins/proc/toggleenter //Toggle enterting
|
||||
verbs += /obj/admins/proc/toggleguests //Toggle guests entering
|
||||
verbs += /obj/admins/proc/toggleooc //toggle ooc
|
||||
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
|
||||
verbs += /obj/admins/proc/show_player_panel
|
||||
verbs += /client/proc/deadchat //toggles deadchat
|
||||
//verbs += /client/proc/cmd_admin_mute --was never used (according to stats trackind) - use show player panel --erro
|
||||
verbs += /client/proc/cmd_admin_subtle_message
|
||||
//verbs += /client/proc/warn - was never used
|
||||
verbs += /client/proc/dsay
|
||||
|
||||
verbs += /client/proc/game_panel
|
||||
verbs += /client/proc/player_panel
|
||||
verbs += /client/proc/player_panel_new
|
||||
verbs += /client/proc/unban_panel
|
||||
verbs += /client/proc/jobbans
|
||||
verbs += /client/proc/unjobban_panel
|
||||
verbs += /client/proc/check_ai_laws
|
||||
//verbs += /client/proc/cmd_admin_prison --Merged with player panel
|
||||
//verbs += /obj/admins/proc/unprison --Merged with player panel
|
||||
else return
|
||||
|
||||
//Admin Candidate
|
||||
@@ -187,8 +208,9 @@
|
||||
verbs += /proc/possess
|
||||
verbs += /proc/release
|
||||
verbs += /client/proc/one_click_antag
|
||||
|
||||
|
||||
//BS12 Commands
|
||||
verbs += /client/proc/admin_deny_shuttle
|
||||
verbs += /client/proc/editappear
|
||||
else return
|
||||
|
||||
//Badmin
|
||||
@@ -429,6 +451,15 @@
|
||||
verbs -= /obj/admins/proc/access_news_network
|
||||
verbs -= /client/proc/one_click_antag
|
||||
verbs -= /client/proc/invisimin
|
||||
//BS12 Admin Verbs
|
||||
verbs -= /client/proc/update_mob_sprite
|
||||
verbs -= /client/proc/mod_panel
|
||||
verbs -= /client/proc/admin_deny_shuttle
|
||||
verbs -= /client/proc/playernotes
|
||||
verbs -= /obj/admins/proc/show_skills
|
||||
verbs -= /client/proc/Report
|
||||
verbs -= /client/proc/display_admin_reports
|
||||
verbs -= /client/proc/editappear
|
||||
return
|
||||
|
||||
/client/proc/admin_ghost()
|
||||
@@ -468,8 +499,10 @@
|
||||
if(holder && mob)
|
||||
if(mob.invisibility == INVISIBILITY_OBSERVER)
|
||||
mob.invisibility = initial(mob.invisibility)
|
||||
usr << "\red <b>You are now visible to other players.</b>"
|
||||
else
|
||||
mob.invisibility = INVISIBILITY_OBSERVER
|
||||
usr << "\blue <b>You are now invisible to other players.</b>"
|
||||
|
||||
|
||||
/client/proc/player_panel()
|
||||
@@ -488,6 +521,14 @@
|
||||
feedback_add_details("admin_verb","PPN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
/client/proc/mod_panel()
|
||||
set name = "Moderator Panel"
|
||||
set category = "Admin"
|
||||
if(holder)
|
||||
holder.mod_panel()
|
||||
feedback_add_details("admin_verb","MDRP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
/client/proc/check_antagonists()
|
||||
set name = "Check Antagonists"
|
||||
set category = "Admin"
|
||||
@@ -558,6 +599,13 @@
|
||||
message_admins("[key_name_admin(usr)] has turned stealth mode [stealth ? "ON" : "OFF"]", 1)
|
||||
feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/playernotes()
|
||||
set name = "Show Player Info"
|
||||
set category = "Admin"
|
||||
if(holder)
|
||||
holder.PlayerNotes()
|
||||
return
|
||||
|
||||
#define AUTOBATIME 10
|
||||
/client/proc/warn(var/mob/M in player_list)
|
||||
/*set category = "Special Verbs"
|
||||
@@ -805,6 +853,98 @@
|
||||
config.log_hrefs = 1
|
||||
src << "<b>Started logging hrefs</b>"
|
||||
|
||||
/client/proc/editappear(mob/living/carbon/human/M as mob in world)
|
||||
set name = "Edit Appearance"
|
||||
set category = "Fun"
|
||||
if(!istype(M, /mob/living/carbon/human))
|
||||
usr << "\red You can only do this to humans!"
|
||||
return
|
||||
switch(alert("You sure you wish to edit this mob's appearance?",,"Yes","No"))
|
||||
if("No")
|
||||
return
|
||||
if(!ishuman(M))
|
||||
usr << "\red Non-humans are not editable yet!"
|
||||
else
|
||||
var/new_facial = input("Please select facial hair color.", "Character Generation") as color
|
||||
if(new_facial)
|
||||
M.r_facial = hex2num(copytext(new_facial, 2, 4))
|
||||
M.g_facial = hex2num(copytext(new_facial, 4, 6))
|
||||
M.b_facial = hex2num(copytext(new_facial, 6, 8))
|
||||
|
||||
var/new_hair = input("Please select hair color.", "Character Generation") as color
|
||||
if(new_facial)
|
||||
M.r_hair = hex2num(copytext(new_hair, 2, 4))
|
||||
M.g_hair = hex2num(copytext(new_hair, 4, 6))
|
||||
M.b_hair = hex2num(copytext(new_hair, 6, 8))
|
||||
|
||||
var/new_eyes = input("Please select eye color.", "Character Generation") as color
|
||||
if(new_eyes)
|
||||
M.r_eyes = hex2num(copytext(new_eyes, 2, 4))
|
||||
M.g_eyes = hex2num(copytext(new_eyes, 4, 6))
|
||||
M.b_eyes = hex2num(copytext(new_eyes, 6, 8))
|
||||
|
||||
var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text
|
||||
|
||||
if (new_tone)
|
||||
M.s_tone = max(min(round(text2num(new_tone)), 220), 1)
|
||||
M.s_tone = -M.s_tone + 35
|
||||
|
||||
// hair
|
||||
var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
|
||||
var/list/hairs = list()
|
||||
|
||||
// loop through potential hairs
|
||||
for(var/x in all_hairs)
|
||||
var/datum/sprite_accessory/hair/H = new x // create new hair datum based on type x
|
||||
hairs.Add(H.name) // add hair name to hairs
|
||||
del(H) // delete the hair after it's all done
|
||||
|
||||
var/new_style = input("Please select hair style", "Character Generation") as null|anything in hairs
|
||||
|
||||
// if new style selected (not cancel)
|
||||
if (new_style)
|
||||
M.h_style = new_style
|
||||
|
||||
for(var/x in all_hairs) // loop through all_hairs again. Might be slightly CPU expensive, but not significantly.
|
||||
var/datum/sprite_accessory/hair/H = new x // create new hair datum
|
||||
if(H.name == new_style)
|
||||
M.h_style = H // assign the hair_style variable a new hair datum
|
||||
break
|
||||
else
|
||||
del(H) // if hair H not used, delete. BYOND can garbage collect, but better safe than sorry
|
||||
|
||||
// facial hair
|
||||
var/list/all_fhairs = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair
|
||||
var/list/fhairs = list()
|
||||
|
||||
for(var/x in all_fhairs)
|
||||
var/datum/sprite_accessory/facial_hair/H = new x
|
||||
fhairs.Add(H.name)
|
||||
del(H)
|
||||
|
||||
new_style = input("Please select facial style", "Character Generation") as null|anything in fhairs
|
||||
|
||||
if(new_style)
|
||||
M.f_style = new_style
|
||||
for(var/x in all_fhairs)
|
||||
var/datum/sprite_accessory/facial_hair/H = new x
|
||||
if(H.name == new_style)
|
||||
M.f_style = H
|
||||
break
|
||||
else
|
||||
del(H)
|
||||
|
||||
var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female")
|
||||
if (new_gender)
|
||||
if(new_gender == "Male")
|
||||
M.gender = MALE
|
||||
else
|
||||
M.gender = FEMALE
|
||||
M.regenerate_icons()
|
||||
M.update_body()
|
||||
M.check_dna(M)
|
||||
|
||||
|
||||
/client/proc/check_ai_laws()
|
||||
set name = "Check AI Laws"
|
||||
set category = "Admin"
|
||||
|
||||
@@ -1,3 +1,227 @@
|
||||
/obj/admins/proc/player_panel_new()//The new one
|
||||
if (!usr.client.holder)
|
||||
return
|
||||
var/dat = "<html><head><title>Player Menu</title></head>"
|
||||
dat += "<body><table border=1 cellspacing=5><B><tr><th>Name/Real Name</th><th>Type</th><th>Assigned Job</th><th>Info</th><th>Options</th><th>Traitor?</th></tr></B>"
|
||||
//add <th>IP:</th> to this if wanting to add back in IP checking
|
||||
//add <td>(IP: [M.lastKnownIP])</td> if you want to know their ip to the lists below
|
||||
var/list/mobs = get_sorted_mobs()
|
||||
var/i = 1
|
||||
|
||||
for(var/mob/M in mobs)
|
||||
if(M.ckey)
|
||||
var/color = "#e6e6e6"
|
||||
i++
|
||||
if(i%2 == 0)
|
||||
color = "#f2f2f2"
|
||||
var/real = (M.name == M.real_name ? "<b>[M.name]/[M.real_name]</b>" : "<b>[M.real_name] (as [M.name]/[M.real_name])</b>")
|
||||
var/turf/T = get_turf(M)
|
||||
var/client_key = (M.key? M.key : "No key")
|
||||
dat += "<tr align='center' bgcolor='[color]'><td>[real] <br>[M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])</td>" // Adds current name
|
||||
if(isobserver(M))
|
||||
dat += "<td>Ghost</td>"
|
||||
else if(isalien(M))
|
||||
dat += "<td>Alien</td>"
|
||||
else if(islarva(M))
|
||||
dat += "<td>Alien larva</td>"
|
||||
else if(istajaran(M))
|
||||
dat += "<td>Tajaran</td>"
|
||||
else if(ishuman(M))
|
||||
dat += "<td>[M.job]</td>"
|
||||
else if(ismetroid(M))
|
||||
dat += "<td>Metroid</td>"
|
||||
else if(ismonkey(M))
|
||||
dat += "<td>Monkey</td>"
|
||||
else if(isAI(M))
|
||||
dat += "<td>AI</td>"
|
||||
else if(ispAI(M))
|
||||
dat += "<td>pAI</td>"
|
||||
else if(isrobot(M))
|
||||
dat += "<td>Cyborg</td>"
|
||||
else if(isanimal(M))
|
||||
dat += "<td>Animal</td>"
|
||||
else if(iscorgi(M))
|
||||
dat += "<td>Corgi</td>"
|
||||
else if(istype(M,/mob/new_player))
|
||||
dat += "<td>New Player</td>"
|
||||
else
|
||||
dat += "<td>\red ERROR</td>\black"
|
||||
|
||||
if(M.mind && M.mind.assigned_role && istype(M, /mob/living/carbon/human)) // Adds a column to Player Panel that shows their current job.
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
if (H.wear_id)
|
||||
var/obj/item/weapon/card/id/id
|
||||
|
||||
if(istype(H.wear_id, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/PDA = H.wear_id
|
||||
if(!isnull(PDA.id)) // The PDA may contain no ID
|
||||
id = PDA.id // The ID is contained inside the PDA
|
||||
|
||||
else
|
||||
id = H.wear_id // The ID was on the ID slot
|
||||
|
||||
if(!id) // Happens when there's no ID in the PDA located on the wear_id slot
|
||||
dat += "<td>[M.mind.assigned_role] (No ID)</td>"
|
||||
|
||||
else if(isnull(id.assignment)) // Preventing runtime errors blocking the player panel
|
||||
if(istype(id, /obj/item/weapon/card/id/syndicate))
|
||||
dat += "<td><font color=purple>Antagonist</font></td>"
|
||||
else
|
||||
usr << "<font color=red>ERROR:</font> Inform the coders that an [id.name] was checked for its assignment variable, and it was null."
|
||||
dat += "<td><font color=red>ERROR</font></td>"
|
||||
|
||||
else
|
||||
if(M.mind.assigned_role == id.assignment) // Polymorph
|
||||
dat += "<td>[M.mind.assigned_role]</td>"
|
||||
|
||||
else
|
||||
dat += "<td>[M.mind.assigned_role] ([id.assignment])"
|
||||
|
||||
else
|
||||
dat += "<td>[M.mind.assigned_role] (No ID)</td>"
|
||||
|
||||
else
|
||||
dat += "<td>No Assigned Role</td>"
|
||||
|
||||
var/muting = "Not Currently Working"
|
||||
// if(M.client)
|
||||
// muting = {"<A href='?src=\ref[src];mute2=\ref[M]'>Mute: [(M.client.muted ? "Muted" : "Voiced")]</A> |
|
||||
// <A href='?src=\ref[src];mute_complete=\ref[M]'>Complete mute: [(M.client.muted ? "Completely Muted" : "Voiced")]</A>
|
||||
// "}
|
||||
|
||||
dat += {"<td><A HREF='?src=\ref[src];player_info=[M.ckey]'>[player_has_info(M.ckey) ? "Info" : "N/A"] </A></td>
|
||||
<td><A href='?src=\ref[usr];priv_msg=\ref[M]'><b>PM</b></A> |
|
||||
<A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>PP</A> |
|
||||
<A HREF='?src=\ref[src];adminplayervars=\ref[M]'>VV</A> |
|
||||
<A HREF='?src=\ref[src];traitor_panel_pp=\ref[M]'>TP</A> |
|
||||
<A HREF='?src=\ref[src];adminplayersubtlemessage=\ref[M]'>SM</A> |
|
||||
<A HREF='?src=\ref[src];adminplayerobservejump=\ref[M]'>JMP</A></font>
|
||||
<br><font size="2">[muting]</font><br>
|
||||
<font size="2"><A href='?src=\ref[src];warn=\ref[M]'>Warn</A> | <A href='?src=\ref[src];boot2=\ref[M]'>Boot</A> | <A href='?src=\ref[src];newban=\ref[M]'>Ban</A> | <A href='?src=\ref[src];jobban2=\ref[M]'>Jobban</A></td>
|
||||
"}
|
||||
|
||||
switch(is_special_character(M))
|
||||
if(0)
|
||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'>Traitor?</A></td>"}
|
||||
if(1)
|
||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red>Traitor?</font></A></td>"}
|
||||
if(2)
|
||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red><b>Traitor?</b></font></A></td>"}
|
||||
|
||||
dat += "</table></body></html>"
|
||||
|
||||
usr << browse(dat, "window=players;size=905x600")
|
||||
|
||||
|
||||
/obj/admins/proc/mod_panel()//The new one
|
||||
if (!usr.client.holder)
|
||||
return
|
||||
var/dat = "<html><head><title>Player Menu</title></head>"
|
||||
dat += "<body><table border=1 cellspacing=5><B><tr><th>Name/Real Name</th><th>IP/CID</th><th>Info</th><th>Options</th><th>Traitor?</th></tr></B>"
|
||||
//add <th>IP:</th> to this if wanting to add back in IP checking <th>Type</th> <th>Assigned Job</th> <th>Traitor?</th>
|
||||
//add <td>(IP: [M.lastKnownIP])</td> if you want to know their ip to the lists below
|
||||
var/list/mobs = get_sorted_mobs()
|
||||
var/i = 1
|
||||
|
||||
for(var/mob/M in mobs)
|
||||
if(M.ckey)
|
||||
var/color = "#e6e6e6"
|
||||
i++
|
||||
if(i%2 == 0)
|
||||
color = "#f2f2f2"
|
||||
var/real = (M.name == M.real_name ? "<b>[M.name]/[M.real_name]</b>" : "<b>[M.real_name] (as [M.name]/[M.real_name])</b>")
|
||||
var/turf/T = get_turf(M)
|
||||
var/client_key = (M.key? M.key : "No key")
|
||||
dat += "<tr align='center' bgcolor='[color]'><td>[real] <br>[M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])</td>" // Adds current name
|
||||
/* if(isobserver(M))
|
||||
dat += "<td>Ghost</td>"
|
||||
else if(isalien(M))
|
||||
dat += "<td>Alien</td>"
|
||||
else if(islarva(M))
|
||||
dat += "<td>Alien larva</td>"
|
||||
else if(istajaran(M))
|
||||
dat += "<td>Tajaran</td>"
|
||||
else if(ishuman(M))
|
||||
dat += "<td>[M.job]</td>"
|
||||
else if(ismetroid(M))
|
||||
dat += "<td>Metroid</td>"
|
||||
else if(ismonkey(M))
|
||||
dat += "<td>Monkey</td>"
|
||||
else if(isAI(M))
|
||||
dat += "<td>AI</td>"
|
||||
else if(ispAI(M))
|
||||
dat += "<td>pAI</td>"
|
||||
else if(isrobot(M))
|
||||
dat += "<td>Cyborg</td>"
|
||||
else if(isanimal(M))
|
||||
dat += "<td>Animal</td>"
|
||||
else if(iscorgi(M))
|
||||
dat += "<td>Corgi</td>"
|
||||
else if(istype(M,/mob/new_player))
|
||||
dat += "<td>New Player</td>"
|
||||
else
|
||||
dat += "<td>\red ERROR</td>\black"
|
||||
|
||||
if(M.mind && M.mind.assigned_role && istype(M, /mob/living/carbon/human)) // Adds a column to Player Panel that shows their current job.
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
if (H.wear_id)
|
||||
var/obj/item/weapon/card/id/id
|
||||
|
||||
if(istype(H.wear_id, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/PDA = H.wear_id
|
||||
if(!isnull(PDA.id)) // The PDA may contain no ID
|
||||
id = PDA.id // The ID is contained inside the PDA
|
||||
|
||||
else
|
||||
id = H.wear_id // The ID was on the ID slot
|
||||
|
||||
if(!id) // Happens when there's no ID in the PDA located on the wear_id slot
|
||||
dat += "<td>[M.mind.assigned_role] (No ID)</td>"
|
||||
|
||||
else if(isnull(id.assignment)) // Preventing runtime errors blocking the player panel
|
||||
if(istype(id, /obj/item/weapon/card/id/syndicate))
|
||||
dat += "<td><font color=purple>Antagonist</font></td>"
|
||||
else
|
||||
usr << "<font color=red>ERROR:</font> Inform the coders that an [id.name] was checked for its assignment variable, and it was null."
|
||||
dat += "<td><font color=red>ERROR</font></td>"
|
||||
|
||||
else
|
||||
if(M.mind.assigned_role == id.assignment) // Polymorph
|
||||
dat += "<td>[M.mind.assigned_role]</td>"
|
||||
|
||||
else
|
||||
dat += "<td>[M.mind.assigned_role] ([id.assignment])"
|
||||
|
||||
else
|
||||
dat += "<td>[M.mind.assigned_role] (No ID)</td>"
|
||||
|
||||
else
|
||||
dat += "<td>No Assigned Role</td>"
|
||||
*/
|
||||
dat += {"<td>IP: [M.client ? M.client.address : "Disconnected"]<br>
|
||||
CID: [M.client ? M.client.computer_id : "Disconnected"]</td>
|
||||
"}
|
||||
|
||||
dat += {"<td><A HREF='?src=\ref[src];player_info=[M.ckey]'>[player_has_info(M.ckey) ? "Info" : "N/A"] </A></td>
|
||||
<td><A href='?src=\ref[usr];priv_msg=\ref[M]'><b>PM</b></A></td>
|
||||
"}
|
||||
|
||||
switch(is_special_character(M))
|
||||
if(0)
|
||||
dat += {"<td align=center>Loyal</td>"}
|
||||
if(1)
|
||||
dat += {"<td align=center><font color=red>Antag</font></td>"}
|
||||
if(2)
|
||||
dat += {"<td align=center><font color=red><b>Mode-Antag</b></font></td>"}
|
||||
|
||||
dat += "</table></body></html>"
|
||||
|
||||
usr << browse(dat, "window=players;size=600x600")
|
||||
|
||||
|
||||
/* //TG Player Panel
|
||||
/obj/admins/proc/player_panel_new()//The new one
|
||||
if (!usr.client.holder)
|
||||
return
|
||||
@@ -316,7 +540,7 @@
|
||||
"}
|
||||
|
||||
usr << browse(dat, "window=players;size=600x480")
|
||||
|
||||
*/
|
||||
//The old one
|
||||
/obj/admins/proc/player_panel_old()
|
||||
if (!usr.client.holder)
|
||||
@@ -492,113 +716,4 @@
|
||||
dat += "</body></html>"
|
||||
usr << browse(dat, "window=roundstatus;size=400x500")
|
||||
else
|
||||
alert("The game hasn't started yet!")
|
||||
|
||||
|
||||
/obj/admins/proc/mod_panel()//The new one
|
||||
if (!usr.client.holder)
|
||||
return
|
||||
var/dat = "<html><head><title>Player Menu</title></head>"
|
||||
dat += "<body><table border=1 cellspacing=5><B><tr><th>Name/Real Name</th><th>IP/CID</th><th>Info</th><th>Options</th><th>Traitor?</th></tr></B>"
|
||||
//add <th>IP:</th> to this if wanting to add back in IP checking <th>Type</th> <th>Assigned Job</th> <th>Traitor?</th>
|
||||
//add <td>(IP: [M.lastKnownIP])</td> if you want to know their ip to the lists below
|
||||
var/list/mobs = get_sorted_mobs()
|
||||
var/i = 1
|
||||
|
||||
for(var/mob/M in mobs)
|
||||
if(M.ckey)
|
||||
var/color = "#e6e6e6"
|
||||
i++
|
||||
if(i%2 == 0)
|
||||
color = "#f2f2f2"
|
||||
//no idea what tg used to replace original_name, probably a proc floating around somewhere
|
||||
//var/real = (M.real_name == M.original_name ? "<b>[M.name]/[M.real_name]</b>" : "<b>[M.original_name] (as [M.name]/[M.real_name])</b>")
|
||||
var/real = "<b>[M.name]/[M.real_name]</b>"
|
||||
var/turf/T = get_turf(M)
|
||||
var/client_key = (M.key? M.key : "No key")
|
||||
dat += "<tr align='center' bgcolor='[color]'><td>[real] <br>[M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])</td>" // Adds current name
|
||||
/* if(isobserver(M))
|
||||
dat += "<td>Ghost</td>"
|
||||
else if(isalien(M))
|
||||
dat += "<td>Alien</td>"
|
||||
else if(islarva(M))
|
||||
dat += "<td>Alien larva</td>"
|
||||
else if(istajaran(M))
|
||||
dat += "<td>Tajaran</td>"
|
||||
else if(ishuman(M))
|
||||
dat += "<td>[M.job]</td>"
|
||||
else if(ismetroid(M))
|
||||
dat += "<td>Metroid</td>"
|
||||
else if(ismonkey(M))
|
||||
dat += "<td>Monkey</td>"
|
||||
else if(isAI(M))
|
||||
dat += "<td>AI</td>"
|
||||
else if(ispAI(M))
|
||||
dat += "<td>pAI</td>"
|
||||
else if(isrobot(M))
|
||||
dat += "<td>Cyborg</td>"
|
||||
else if(isanimal(M))
|
||||
dat += "<td>Animal</td>"
|
||||
else if(iscorgi(M))
|
||||
dat += "<td>Corgi</td>"
|
||||
else if(istype(M,/mob/new_player))
|
||||
dat += "<td>New Player</td>"
|
||||
else
|
||||
dat += "<td>\red ERROR</td>\black"
|
||||
|
||||
if(M.mind && M.mind.assigned_role && istype(M, /mob/living/carbon/human)) // Adds a column to Player Panel that shows their current job.
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
if (H.wear_id)
|
||||
var/obj/item/weapon/card/id/id
|
||||
|
||||
if(istype(H.wear_id, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/PDA = H.wear_id
|
||||
if(!isnull(PDA.id)) // The PDA may contain no ID
|
||||
id = PDA.id // The ID is contained inside the PDA
|
||||
|
||||
else
|
||||
id = H.wear_id // The ID was on the ID slot
|
||||
|
||||
if(!id) // Happens when there's no ID in the PDA located on the wear_id slot
|
||||
dat += "<td>[M.mind.assigned_role] (No ID)</td>"
|
||||
|
||||
else if(isnull(id.assignment)) // Preventing runtime errors blocking the player panel
|
||||
if(istype(id, /obj/item/weapon/card/id/syndicate))
|
||||
dat += "<td><font color=purple>Antagonist</font></td>"
|
||||
else
|
||||
usr << "<font color=red>ERROR:</font> Inform the coders that an [id.name] was checked for its assignment variable, and it was null."
|
||||
dat += "<td><font color=red>ERROR</font></td>"
|
||||
|
||||
else
|
||||
if(M.mind.assigned_role == id.assignment) // Polymorph
|
||||
dat += "<td>[M.mind.assigned_role]</td>"
|
||||
|
||||
else
|
||||
dat += "<td>[M.mind.assigned_role] ([id.assignment])"
|
||||
|
||||
else
|
||||
dat += "<td>[M.mind.assigned_role] (No ID)</td>"
|
||||
|
||||
else
|
||||
dat += "<td>No Assigned Role</td>"
|
||||
*/
|
||||
dat += {"<td>IP: [M.client ? M.client.address : "Disconnected"]<br>
|
||||
CID: [M.client ? M.client.computer_id : "Disconnected"]</td>
|
||||
"}
|
||||
|
||||
dat += {"<td><A HREF='?src=\ref[src];player_info=[M.ckey]'>[player_has_info(M.ckey) ? "Info" : "N/A"] </A></td>
|
||||
<td><A href='?src=\ref[usr];priv_msg=\ref[M]'><b>PM</b></A></td>
|
||||
"}
|
||||
|
||||
switch(is_special_character(M))
|
||||
if(0)
|
||||
dat += {"<td align=center>Loyal</td>"}
|
||||
if(1)
|
||||
dat += {"<td align=center><font color=red>Antag</font></td>"}
|
||||
if(2)
|
||||
dat += {"<td align=center><font color=red><b>Mode-Antag</b></font></td>"}
|
||||
|
||||
dat += "</table></body></html>"
|
||||
|
||||
usr << browse(dat, "window=players;size=600x600")
|
||||
alert("The game hasn't started yet!")
|
||||
@@ -819,6 +819,22 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
return
|
||||
|
||||
/client/proc/admin_deny_shuttle()
|
||||
set category = "Admin"
|
||||
set name = "Toggle Deny Shuttle"
|
||||
|
||||
if (!ticker)
|
||||
return
|
||||
|
||||
if (!holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
emergency_shuttle.deny_shuttle = !emergency_shuttle.deny_shuttle
|
||||
|
||||
log_admin("[key_name(src)] has [emergency_shuttle.deny_shuttle ? "denied" : "allowed"] the shuttle to be called.")
|
||||
message_admins("[key_name_admin(usr)] has [emergency_shuttle.deny_shuttle ? "denied" : "allowed"] the shuttle to be called.")
|
||||
|
||||
/client/proc/cmd_admin_attack_log(mob/M as mob in mob_list)
|
||||
set category = "Special Verbs"
|
||||
set name = "Attack Log"
|
||||
|
||||
@@ -626,13 +626,17 @@
|
||||
M.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
|
||||
user.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
|
||||
log_attack("<font color='red'>[user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])</font>")
|
||||
|
||||
log_admin("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R]).")
|
||||
message_admins("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R]).")
|
||||
msg_admin_attack("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R]).")
|
||||
|
||||
else
|
||||
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
|
||||
log_attack("<font color='red'>UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R])</font>")
|
||||
|
||||
log_admin("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R]).")
|
||||
message_admins("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R]).")
|
||||
msg_admin_attack("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R]).")
|
||||
|
||||
D.reagents.trans_to(M, 15)
|
||||
M.take_organ_damage(5)
|
||||
for(var/mob/O in viewers(world.view, D))
|
||||
@@ -1330,8 +1334,10 @@
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been injected with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to inject [M.name] ([M.ckey])</font>")
|
||||
|
||||
log_admin("ATTACK: [user] ([user.ckey]) injected [M] ([M.ckey]) with [src].")
|
||||
message_admins("ATTACK: [user] ([user.ckey]) injected [M] ([M.ckey]) with [src].")
|
||||
msg_admin_attack("ATTACK: [user] ([user.ckey]) injected [M] ([M.ckey]) with [src].")
|
||||
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
|
||||
|
||||
@@ -1838,8 +1844,9 @@ var/list/grind_products = list()
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]</font>")
|
||||
|
||||
log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
|
||||
message_admins("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
|
||||
msg_admin_attack("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
|
||||
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
|
||||
@@ -2067,8 +2074,9 @@ var/list/grind_products = list()
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]</font>")
|
||||
|
||||
log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
|
||||
message_admins("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
|
||||
msg_admin_attack("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
|
||||
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
|
||||
@@ -2208,9 +2216,9 @@ var/list/grind_products = list()
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]</font>")
|
||||
log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
|
||||
message_admins("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
|
||||
|
||||
log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
|
||||
msg_admin_attack("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
|
||||
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
|
||||
@@ -2899,9 +2907,9 @@ var/list/grind_products = list()
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [src.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]</font>")
|
||||
log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
|
||||
message_admins("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
|
||||
|
||||
log_admin("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
|
||||
msg_admin_attack("ATTACK: [user] ([user.ckey]) fed [M] ([M.ckey]) with [src].")
|
||||
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
|
||||
|
||||
@@ -217,7 +217,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
A.loc = T
|
||||
else
|
||||
A << "This mob is not located in the game world."
|
||||
|
||||
/*
|
||||
/mob/dead/observer/verb/boo()
|
||||
set category = "Ghost"
|
||||
set name = "Boo!"
|
||||
@@ -231,7 +231,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
return
|
||||
//Maybe in the future we can add more <i>spooky</i> code here!
|
||||
return
|
||||
|
||||
*/
|
||||
/mob/dead/observer/verb/toggle_alien_candidate()
|
||||
set name = "Toggle Be Alien Candidate"
|
||||
set category = "Ghost"
|
||||
|
||||
@@ -46,6 +46,45 @@
|
||||
src.adding += using
|
||||
action_intent = using
|
||||
|
||||
//intent small hud objects
|
||||
using = new src.h_type( src )
|
||||
using.name = "help"
|
||||
using.icon = 'screen1_alien.dmi'
|
||||
using.icon_state = (mymob.a_intent == "help" ? "help_small_active" : "help_small")
|
||||
using.screen_loc = ui_help_small
|
||||
using.layer = 21
|
||||
src.adding += using
|
||||
help_intent = using
|
||||
|
||||
using = new src.h_type( src )
|
||||
using.name = "disarm"
|
||||
using.icon = 'screen1_alien.dmi'
|
||||
using.icon_state = (mymob.a_intent == "disarm" ? "disarm_small_active" : "disarm_small")
|
||||
using.screen_loc = ui_disarm_small
|
||||
using.layer = 21
|
||||
src.adding += using
|
||||
disarm_intent = using
|
||||
|
||||
using = new src.h_type( src )
|
||||
using.name = "grab"
|
||||
using.icon = 'screen1_alien.dmi'
|
||||
using.icon_state = (mymob.a_intent == "grab" ? "grab_small_active" : "grab_small")
|
||||
using.screen_loc = ui_grab_small
|
||||
using.layer = 21
|
||||
src.adding += using
|
||||
grab_intent = using
|
||||
|
||||
using = new src.h_type( src )
|
||||
using.name = "harm"
|
||||
using.icon = 'screen1_alien.dmi'
|
||||
using.icon_state = (mymob.a_intent == "hurt" ? "harm_small_active" : "harm_small")
|
||||
using.screen_loc = ui_harm_small
|
||||
using.layer = 21
|
||||
src.adding += using
|
||||
hurt_intent = using
|
||||
|
||||
//end intent small hud objects
|
||||
|
||||
using = new src.h_type( src )
|
||||
using.name = "mov_intent"
|
||||
using.dir = SOUTHWEST
|
||||
|
||||
@@ -393,6 +393,10 @@
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been thrown by [usr.name] ([usr.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]</font>")
|
||||
usr.attack_log += text("\[[time_stamp()]\] <font color='red'>Has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]</font>")
|
||||
|
||||
log_attack("<font color='red'>[usr.name] ([usr.ckey]) Has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]</font>")
|
||||
log_admin("ATTACK: [usr.name] ([usr.ckey]) Has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]")
|
||||
msg_admin_attack("ATTACK: [usr.name] ([usr.ckey]) Has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]")
|
||||
|
||||
if(!item) return //Grab processing has a chance of returning null
|
||||
|
||||
u_equip(item)
|
||||
|
||||
@@ -51,6 +51,45 @@
|
||||
src.adding += using
|
||||
action_intent = using
|
||||
|
||||
//intent small hud objects
|
||||
using = new src.h_type( src )
|
||||
using.name = "help"
|
||||
using.icon = ui_style
|
||||
using.icon_state = (mymob.a_intent == "help" ? "help_small_active" : "help_small")
|
||||
using.screen_loc = ui_help_small
|
||||
using.layer = 21
|
||||
src.adding += using
|
||||
help_intent = using
|
||||
|
||||
using = new src.h_type( src )
|
||||
using.name = "disarm"
|
||||
using.icon = ui_style
|
||||
using.icon_state = (mymob.a_intent == "disarm" ? "disarm_small_active" : "disarm_small")
|
||||
using.screen_loc = ui_disarm_small
|
||||
using.layer = 21
|
||||
src.adding += using
|
||||
disarm_intent = using
|
||||
|
||||
using = new src.h_type( src )
|
||||
using.name = "grab"
|
||||
using.icon = ui_style
|
||||
using.icon_state = (mymob.a_intent == "grab" ? "grab_small_active" : "grab_small")
|
||||
using.screen_loc = ui_grab_small
|
||||
using.layer = 21
|
||||
src.adding += using
|
||||
grab_intent = using
|
||||
|
||||
using = new src.h_type( src )
|
||||
using.name = "harm"
|
||||
using.icon = ui_style
|
||||
using.icon_state = (mymob.a_intent == "hurt" ? "harm_small_active" : "harm_small")
|
||||
using.screen_loc = ui_harm_small
|
||||
using.layer = 21
|
||||
src.adding += using
|
||||
hurt_intent = using
|
||||
|
||||
//end intent small hud objects
|
||||
|
||||
using = new src.h_type( src )
|
||||
using.name = "mov_intent"
|
||||
using.dir = SOUTHWEST
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
|
||||
log_admin("ATTACK: [M.name] ([M.ckey]) stungloved [src.name] ([src.ckey])")
|
||||
msg_admin_attack("ATTACK: [M.name] ([M.ckey]) stungloved [src.name] ([src.ckey])") //BS12 EDIT ALG
|
||||
log_attack("<font color='red'>[M.name] ([M.ckey]) stungloved [src.name] ([src.ckey])</font>")
|
||||
|
||||
log_attack("<font color='red'>[M.name] ([M.ckey]) stungloved [src.name] ([src.ckey])</font>")
|
||||
|
||||
var/armorblock = run_armor_check(M.zone_sel.selecting, "energy")
|
||||
apply_effects(5,5,0,0,5,0,0,armorblock)
|
||||
@@ -113,8 +113,8 @@
|
||||
|
||||
log_admin("ATTACK: [M.name] ([M.ckey]) used Electric Hands nanoaug on [src.name] ([src.ckey]), shocking them")
|
||||
msg_admin_attack("ATTACK: [M.name] ([M.ckey]) used Electric Hands nanoaug on [src.name] ([src.ckey]), shocking them") //BS12 EDIT ALG
|
||||
log_attack("<font color='red'>[M.name] ([M.ckey]) used Electric Hands nanoaug on [src.name]([src.ckey]), shocking them </font>")
|
||||
|
||||
log_attack("<font color='red'>[M.name] ([M.ckey]) used Electric Hands nanoaug on [src.name]([src.ckey]), shocking them </font>")
|
||||
|
||||
var/armorblock = run_armor_check(M.zone_sel.selecting, "energy")
|
||||
apply_effects(5,5,0,0,5,0,0,armorblock)
|
||||
@@ -138,6 +138,7 @@
|
||||
|
||||
log_admin("ATTACK: [M.name] ([M.ckey]) [attack_verb]ed [src.name] ([src.ckey])")
|
||||
msg_admin_attack("ATTACK: [M.name] ([M.ckey]) [attack_verb]ed [src.name] ([src.ckey])") //BS12 EDIT ALG
|
||||
|
||||
log_attack("<font color='red'>[M.name] ([M.ckey]) [attack_verb]ed [src.name] ([src.ckey])</font>")
|
||||
|
||||
var/damage = rand(0, 5)//BS12 EDIT
|
||||
|
||||
@@ -415,8 +415,8 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_l")
|
||||
overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_s")
|
||||
if("lizard", "tajaran", "skrell")
|
||||
overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace]_[g]_l")
|
||||
overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace]_[g]_s")
|
||||
overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.mutantrace]_[g]_l")
|
||||
overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.mutantrace]_[g]_s")
|
||||
if("plant")
|
||||
if(stat == DEAD) //TODO
|
||||
overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace]_d")
|
||||
@@ -798,12 +798,12 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
var/cur_species = get_species()
|
||||
if( cur_species == "Tajaran")
|
||||
if(!wear_suit || !(wear_suit.flags_inv & HIDEJUMPSUIT) && !istype(wear_suit, /obj/item/clothing/suit/space))
|
||||
overlays_lying[TAIL_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "tajtail_l")
|
||||
overlays_standing[TAIL_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "tajtail_s")
|
||||
overlays_lying[TAIL_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "tajtail_l")
|
||||
overlays_standing[TAIL_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "tajtail_s")
|
||||
else if( cur_species == "Soghun")
|
||||
if(!wear_suit || !(wear_suit.flags_inv & HIDEJUMPSUIT) && !istype(wear_suit, /obj/item/clothing/suit/space))
|
||||
overlays_lying[TAIL_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "sogtail_l")
|
||||
overlays_standing[TAIL_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "sogtail_s")
|
||||
overlays_lying[TAIL_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "sogtail_l")
|
||||
overlays_standing[TAIL_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "sogtail_s")
|
||||
|
||||
if(update_icons)
|
||||
update_icons()
|
||||
|
||||
@@ -54,6 +54,45 @@
|
||||
src.adding += using
|
||||
action_intent = using
|
||||
|
||||
//intent small hud objects
|
||||
using = new src.h_type( src )
|
||||
using.name = "help"
|
||||
using.icon = ui_style
|
||||
using.icon_state = (mymob.a_intent == "help" ? "help_small_active" : "help_small")
|
||||
using.screen_loc = ui_help_small
|
||||
using.layer = 21
|
||||
src.adding += using
|
||||
help_intent = using
|
||||
|
||||
using = new src.h_type( src )
|
||||
using.name = "disarm"
|
||||
using.icon = ui_style
|
||||
using.icon_state = (mymob.a_intent == "disarm" ? "disarm_small_active" : "disarm_small")
|
||||
using.screen_loc = ui_disarm_small
|
||||
using.layer = 21
|
||||
src.adding += using
|
||||
disarm_intent = using
|
||||
|
||||
using = new src.h_type( src )
|
||||
using.name = "grab"
|
||||
using.icon = ui_style
|
||||
using.icon_state = (mymob.a_intent == "grab" ? "grab_small_active" : "grab_small")
|
||||
using.screen_loc = ui_grab_small
|
||||
using.layer = 21
|
||||
src.adding += using
|
||||
grab_intent = using
|
||||
|
||||
using = new src.h_type( src )
|
||||
using.name = "harm"
|
||||
using.icon = ui_style
|
||||
using.icon_state = (mymob.a_intent == "hurt" ? "harm_small_active" : "harm_small")
|
||||
using.screen_loc = ui_harm_small
|
||||
using.layer = 21
|
||||
src.adding += using
|
||||
hurt_intent = using
|
||||
|
||||
//end intent small hud objects
|
||||
|
||||
using = new src.h_type( src )
|
||||
using.name = "mov_intent"
|
||||
using.dir = SOUTHWEST
|
||||
|
||||
33
code/modules/mob/living/simple_animal/kobold.dm
Normal file
33
code/modules/mob/living/simple_animal/kobold.dm
Normal file
@@ -0,0 +1,33 @@
|
||||
//kobold
|
||||
/mob/living/simple_animal/kobold
|
||||
name = "kobold"
|
||||
desc = "A small, rat-like creature."
|
||||
icon = 'mob.dmi'
|
||||
icon_state = "kobold_idle"
|
||||
icon_living = "kobold_idle"
|
||||
icon_dead = "kobold_dead"
|
||||
//speak = list("You no take candle!","Ooh, pretty shiny.","Me take?","Where gold here...","Me likey.")
|
||||
speak_emote = list("mutters","hisses","grumbles")
|
||||
emote_hear = list("mutters under it's breath.","grumbles.", "yips!")
|
||||
emote_see = list("looks around suspiciously.", "scratches it's arm.","putters around a bit.")
|
||||
speak_chance = 15
|
||||
turns_per_move = 5
|
||||
see_in_dark = 6
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/sliceable/meat
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "kicks the"
|
||||
minbodytemp = 250
|
||||
min_oxy = 16 //Require atleast 16kPA oxygen
|
||||
minbodytemp = 223 //Below -50 Degrees Celcius
|
||||
maxbodytemp = 323 //Above 50 Degrees Celcius
|
||||
|
||||
/mob/living/simple_animal/kobold/Life()
|
||||
..()
|
||||
if(prob(15) && turns_since_move && !stat)
|
||||
flick("kobold_act",src)
|
||||
|
||||
/mob/living/simple_animal/kobold/Move(var/dir)
|
||||
..()
|
||||
if(!stat)
|
||||
flick("kobold_walk",src)
|
||||
@@ -232,6 +232,9 @@
|
||||
assailant.attack_log += text("\[[time_stamp()]\] <font color='red'>Strangled (kill intent) [affecting.name] ([affecting.ckey])</font>")
|
||||
log_attack("<font color='red'>[assailant.name] ([assailant.ckey]) Strangled (kill intent) [affecting.name] ([affecting.ckey])</font>")
|
||||
|
||||
log_admin("ATTACK: [assailant.name] ([assailant.ckey]) Strangled (kill intent) [affecting.name] ([affecting.ckey])")
|
||||
msg_admin_attack("ATTACK: [assailant.name] ([assailant.ckey]) Strangled (kill intent) [affecting.name] ([affecting.ckey])")
|
||||
|
||||
assailant.next_move = world.time + 10
|
||||
affecting.losebreath += 1
|
||||
else
|
||||
|
||||
@@ -69,15 +69,31 @@
|
||||
if("help")
|
||||
usr.a_intent = "disarm"
|
||||
usr.hud_used.action_intent.icon_state = "disarm"
|
||||
usr.hud_used.hurt_intent.icon_state = "harm_small"
|
||||
usr.hud_used.help_intent.icon_state = "help_small"
|
||||
usr.hud_used.grab_intent.icon_state = "grab_small"
|
||||
usr.hud_used.disarm_intent.icon_state = "disarm_small_active"
|
||||
if("disarm")
|
||||
usr.a_intent = "grab"
|
||||
usr.hud_used.action_intent.icon_state = "grab"
|
||||
usr.hud_used.hurt_intent.icon_state = "harm_small"
|
||||
usr.hud_used.help_intent.icon_state = "help_small"
|
||||
usr.hud_used.grab_intent.icon_state = "grab_small_active"
|
||||
usr.hud_used.disarm_intent.icon_state = "disarm_small"
|
||||
if("grab")
|
||||
usr.a_intent = "hurt"
|
||||
usr.hud_used.action_intent.icon_state = "harm"
|
||||
usr.hud_used.hurt_intent.icon_state = "harm_small_active"
|
||||
usr.hud_used.help_intent.icon_state = "help_small"
|
||||
usr.hud_used.grab_intent.icon_state = "grab_small"
|
||||
usr.hud_used.disarm_intent.icon_state = "disarm_small"
|
||||
if("hurt")
|
||||
usr.a_intent = "help"
|
||||
usr.hud_used.action_intent.icon_state = "help"
|
||||
usr.hud_used.hurt_intent.icon_state = "harm_small"
|
||||
usr.hud_used.help_intent.icon_state = "help_small_active"
|
||||
usr.hud_used.grab_intent.icon_state = "grab_small"
|
||||
usr.hud_used.disarm_intent.icon_state = "disarm_small"
|
||||
else if(isrobot(usr))
|
||||
if(usr.a_intent == "help")
|
||||
usr.a_intent = "hurt"
|
||||
|
||||
@@ -206,13 +206,13 @@ datum/preferences
|
||||
if (gender == FEMALE) g = "f"
|
||||
|
||||
if(species == "Tajaran")
|
||||
preview_icon = new /icon('icons/effects/genetics.dmi', "tajaran_[g]_s")
|
||||
preview_icon.Blend(new /icon('icons/effects/genetics.dmi', "tajtail_s"), ICON_OVERLAY)
|
||||
preview_icon = new /icon('icons/effects/species.dmi', "tajaran_[g]_s")
|
||||
preview_icon.Blend(new /icon('icons/effects/species.dmi', "tajtail_s"), ICON_OVERLAY)
|
||||
else if(species == "Soghun")
|
||||
preview_icon = new /icon('icons/effects/genetics.dmi', "lizard_[g]_s")
|
||||
preview_icon.Blend(new /icon('icons/effects/genetics.dmi', "sogtail_s"), ICON_OVERLAY)
|
||||
preview_icon = new /icon('icons/effects/species.dmi', "lizard_[g]_s")
|
||||
preview_icon.Blend(new /icon('icons/effects/species.dmi', "sogtail_s"), ICON_OVERLAY)
|
||||
else if(species == "Skrell")
|
||||
preview_icon = new /icon('icons/effects/genetics.dmi', "skrell_[g]_s")
|
||||
preview_icon = new /icon('icons/effects/species.dmi', "skrell_[g]_s")
|
||||
else
|
||||
preview_icon = new /icon('icons/mob/human.dmi', "body_[g]_s")
|
||||
|
||||
|
||||
@@ -57,6 +57,10 @@ datum/preferences/proc/savefile_save(mob/user)
|
||||
F["real_name"] << src.real_name
|
||||
F["name_is_always_random"] << src.be_random_name
|
||||
|
||||
F["flavor_text"] << flavor_text
|
||||
F["med_record"] << med_record
|
||||
F["sec_record"] << sec_record
|
||||
|
||||
F["gender"] << src.gender
|
||||
F["age"] << src.age
|
||||
|
||||
@@ -73,6 +77,8 @@ datum/preferences/proc/savefile_save(mob/user)
|
||||
F["job_engsec_med"] << src.job_engsec_med
|
||||
F["job_engsec_low"] << src.job_engsec_low
|
||||
|
||||
F["job_alt_titles"] << job_alt_titles //BS12 Edit
|
||||
|
||||
F["userandomjob"] << src.userandomjob
|
||||
|
||||
//Body data
|
||||
@@ -103,6 +109,7 @@ datum/preferences/proc/savefile_save(mob/user)
|
||||
F["midis"] << src.midis
|
||||
F["ghost_ears"] << src.ghost_ears
|
||||
F["ghost_sight"] << src.ghost_sight
|
||||
F["pregame_music"] << src.pregame_music
|
||||
F["ooccolor"] << src.ooccolor
|
||||
F["lastchangelog"] << src.lastchangelog
|
||||
F["disabilities"] << src.disabilities
|
||||
@@ -111,6 +118,8 @@ datum/preferences/proc/savefile_save(mob/user)
|
||||
F["skills"] << src.skills
|
||||
F["skill_specialization"] << src.skill_specialization
|
||||
|
||||
F["organ_data"] << src.organ_data
|
||||
|
||||
F["OOC_Notes"] << src.metadata
|
||||
|
||||
F["sound_adminhelp"] << src.sound_adminhelp
|
||||
@@ -161,6 +170,10 @@ datum/preferences/proc/savefile_load(mob/user)
|
||||
F["gender"] >> src.gender
|
||||
F["age"] >> src.age
|
||||
|
||||
F["flavor_text"] >> flavor_text
|
||||
F["med_record"] >> med_record
|
||||
F["sec_record"] >> sec_record
|
||||
|
||||
F["hair_red"] >> src.r_hair
|
||||
F["hair_green"] >> src.g_hair
|
||||
F["hair_blue"] >> src.b_hair
|
||||
@@ -174,6 +187,8 @@ datum/preferences/proc/savefile_load(mob/user)
|
||||
F["eyes_green"] >> src.g_eyes
|
||||
F["eyes_blue"] >> src.b_eyes
|
||||
F["blood_type"] >> src.b_type
|
||||
F["species"] >> src.species
|
||||
if(isnull(species)) species = "Human"
|
||||
F["underwear"] >> src.underwear
|
||||
if(underwear == 0) underwear = 12 //For old players who have 0 in their savefile
|
||||
F["backbag"] >> src.backbag
|
||||
@@ -184,6 +199,7 @@ datum/preferences/proc/savefile_load(mob/user)
|
||||
F["midis"] >> src.midis
|
||||
F["ghost_ears"] >> src.ghost_ears
|
||||
if(isnull(ghost_ears)) ghost_ears = 1 //Hotfix
|
||||
F["pregame_music"] >> src.pregame_music
|
||||
F["ghost_sight"] >> src.ghost_sight
|
||||
if(isnull(ghost_sight)) ghost_sight = 1 //Hotfix
|
||||
F["ooccolor"] >> src.ooccolor
|
||||
@@ -202,12 +218,31 @@ datum/preferences/proc/savefile_load(mob/user)
|
||||
F["job_medsci_med"] >> src.job_medsci_med
|
||||
F["job_medsci_low"] >> src.job_medsci_low
|
||||
|
||||
|
||||
F["used_skillpoints"] >> src.used_skillpoints
|
||||
F["skills"] >> src.skills
|
||||
F["skill_specialization"] >> src.skill_specialization
|
||||
if(!src.skills) src.skills = list()
|
||||
if(!src.used_skillpoints) src.used_skillpoints= 0
|
||||
|
||||
F["organ_data"] >> src.organ_data
|
||||
if(!src.organ_data) src.organ_data = list()
|
||||
|
||||
F["job_engsec_high"] >> src.job_engsec_high
|
||||
F["job_engsec_med"] >> src.job_engsec_med
|
||||
F["job_engsec_low"] >> src.job_engsec_low
|
||||
|
||||
F["userandomjob"] >> src.userandomjob
|
||||
|
||||
F["disabilities"] >> src.disabilities
|
||||
if(isnull(src.disabilities)) //Sanity checking
|
||||
src.disabilities = 0
|
||||
F["disabilities"] << src.disabilities
|
||||
|
||||
F["job_alt_titles"] >> job_alt_titles
|
||||
if(!job_alt_titles)
|
||||
job_alt_titles = new()
|
||||
|
||||
F["OOC_Notes"] >> src.metadata
|
||||
|
||||
F["sound_adminhelp"] >> src.sound_adminhelp
|
||||
|
||||
@@ -241,13 +241,26 @@
|
||||
return
|
||||
switch(name)
|
||||
if("act_intent")
|
||||
if(ishuman(usr) || istype(usr,/mob/living/carbon/alien/humanoid) || islarva(usr))
|
||||
var/intent = usr.a_intent
|
||||
if(intent == "hurt")
|
||||
intent = "harm" //hurt and harm have different sprite names for some reason.
|
||||
usr.hud_used.action_intent.icon_state = "[intent]"
|
||||
if (usr.hud_used.show_intent_icons)
|
||||
usr.hud_used.show_intent_icons = 0
|
||||
usr.client.screen -= usr.hud_used.intent_small_hud_objects
|
||||
if("harm")
|
||||
if (usr.hud_used.show_intent_icons)
|
||||
usr.hud_used.show_intent_icons = 0
|
||||
usr.client.screen -= usr.hud_used.intent_small_hud_objects
|
||||
if("help")
|
||||
if (usr.hud_used.show_intent_icons)
|
||||
usr.hud_used.show_intent_icons = 0
|
||||
usr.client.screen -= usr.hud_used.intent_small_hud_objects
|
||||
if("disarm")
|
||||
if (usr.hud_used.show_intent_icons)
|
||||
usr.hud_used.show_intent_icons = 0
|
||||
usr.client.screen -= usr.hud_used.intent_small_hud_objects
|
||||
if("grab")
|
||||
if (usr.hud_used.show_intent_icons)
|
||||
usr.hud_used.show_intent_icons = 0
|
||||
usr.client.screen -= usr.hud_used.intent_small_hud_objects
|
||||
*/
|
||||
|
||||
/obj/screen/Click(location, control, params)
|
||||
switch(name)
|
||||
if("map")
|
||||
@@ -381,19 +394,39 @@
|
||||
if("help")
|
||||
usr.a_intent = "help"
|
||||
usr.hud_used.action_intent.icon_state = "help"
|
||||
usr.hud_used.show_intent_icons = 0
|
||||
usr.hud_used.hurt_intent.icon_state = "harm_small"
|
||||
usr.hud_used.help_intent.icon_state = "help_small_active"
|
||||
usr.hud_used.grab_intent.icon_state = "grab_small"
|
||||
usr.hud_used.disarm_intent.icon_state = "disarm_small"
|
||||
// usr.hud_used.show_intent_icons = 0
|
||||
// usr.client.screen -= usr.hud_used.intent_small_hud_objects
|
||||
if("harm")
|
||||
usr.a_intent = "hurt"
|
||||
usr.hud_used.action_intent.icon_state = "harm"
|
||||
usr.hud_used.show_intent_icons = 0
|
||||
usr.hud_used.hurt_intent.icon_state = "harm_small_active"
|
||||
usr.hud_used.help_intent.icon_state = "help_small"
|
||||
usr.hud_used.grab_intent.icon_state = "grab_small"
|
||||
usr.hud_used.disarm_intent.icon_state = "disarm_small"
|
||||
// usr.hud_used.show_intent_icons = 0
|
||||
// usr.client.screen -= usr.hud_used.intent_small_hud_objects
|
||||
if("grab")
|
||||
usr.a_intent = "grab"
|
||||
usr.hud_used.action_intent.icon_state = "grab"
|
||||
usr.hud_used.show_intent_icons = 0
|
||||
usr.hud_used.hurt_intent.icon_state = "harm_small"
|
||||
usr.hud_used.help_intent.icon_state = "help_small"
|
||||
usr.hud_used.grab_intent.icon_state = "grab_small_active"
|
||||
usr.hud_used.disarm_intent.icon_state = "disarm_small"
|
||||
// usr.hud_used.show_intent_icons = 0
|
||||
// usr.client.screen -= usr.hud_used.intent_small_hud_objects
|
||||
if("disarm")
|
||||
usr.a_intent = "disarm"
|
||||
usr.hud_used.action_intent.icon_state = "disarm"
|
||||
usr.hud_used.show_intent_icons = 0
|
||||
usr.hud_used.hurt_intent.icon_state = "harm_small"
|
||||
usr.hud_used.help_intent.icon_state = "help_small"
|
||||
usr.hud_used.grab_intent.icon_state = "grab_small"
|
||||
usr.hud_used.disarm_intent.icon_state = "disarm_small_active"
|
||||
// usr.hud_used.show_intent_icons = 0
|
||||
// usr.client.screen -= usr.hud_used.intent_small_hud_objects
|
||||
if("pull")
|
||||
usr.stop_pulling()
|
||||
if("throw")
|
||||
|
||||
@@ -55,6 +55,10 @@
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to stab [M.name] ([M.ckey])</font>")
|
||||
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) Used the [src.name] to stab [M.name] ([M.ckey])</font>")
|
||||
|
||||
log_admin("ATTACK: [user.name] ([user.ckey]) Used the [src.name] to stab [M.name] ([M.ckey])")
|
||||
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) Used the [src.name] to stab [M.name] ([M.ckey])") //BS12 EDIT ALG
|
||||
|
||||
return
|
||||
|
||||
/*
|
||||
|
||||
@@ -78,6 +78,9 @@
|
||||
|
||||
rigged = 1
|
||||
|
||||
log_admin("LOG: [user.name] ([user.ckey]) injected a power cell with plasma, rigging it to explode.")
|
||||
message_admins("LOG: [user.name] ([user.ckey]) injected a power cell with plasma, rigging it to explode.")
|
||||
|
||||
S.reagents.clear_reagents()
|
||||
|
||||
|
||||
@@ -100,6 +103,10 @@
|
||||
corrupt()
|
||||
return
|
||||
//explosion(T, 0, 1, 2, 2)
|
||||
|
||||
log_admin("LOG: Rigged power cell explosion, last touched by [fingerprintslast]")
|
||||
message_admins("LOG: Rigged power cell explosion, last touched by [fingerprintslast]")
|
||||
|
||||
explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range)
|
||||
|
||||
spawn(1)
|
||||
|
||||
@@ -285,6 +285,10 @@
|
||||
switchcount++
|
||||
if(rigged)
|
||||
if(status == LIGHT_OK && trigger)
|
||||
|
||||
log_admin("LOG: Rigged light explosion, last touched by [fingerprintslast]")
|
||||
message_admins("LOG: Rigged light explosion, last touched by [fingerprintslast]")
|
||||
|
||||
explode()
|
||||
else if( prob( min(60, switchcount*switchcount*0.01) ) )
|
||||
if(status == LIGHT_OK && trigger)
|
||||
@@ -359,6 +363,10 @@
|
||||
del(L)
|
||||
|
||||
if(on && rigged)
|
||||
|
||||
log_admin("LOG: Rigged light explosion, last touched by [fingerprintslast]")
|
||||
message_admins("LOG: Rigged light explosion, last touched by [fingerprintslast]")
|
||||
|
||||
explode()
|
||||
else
|
||||
user << "This type of light requires a [fitting]."
|
||||
@@ -690,6 +698,9 @@
|
||||
|
||||
if(S.reagents.has_reagent("plasma", 5))
|
||||
|
||||
log_admin("LOG: [user.name] ([user.ckey]) injected a light with plasma, rigging it to explode.")
|
||||
message_admins("LOG: [user.name] ([user.ckey]) injected a light with plasma, rigging it to explode.")
|
||||
|
||||
rigged = 1
|
||||
|
||||
S.reagents.clear_reagents()
|
||||
|
||||
@@ -90,10 +90,17 @@
|
||||
M.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src]</b>"
|
||||
firer.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src]</b>"
|
||||
log_attack("<font color='red'>[firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]</font>")
|
||||
|
||||
log_admin("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]")
|
||||
msg_admin_attack("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]") //BS12 EDIT ALG
|
||||
|
||||
else
|
||||
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>[src]</b>"
|
||||
log_attack("<font color='red'>UNKNOWN shot [M] ([M.ckey]) with a [src]</font>")
|
||||
|
||||
log_admin("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a [src]")
|
||||
msg_admin_attack("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a [src]") //BS12 EDIT ALG
|
||||
|
||||
spawn(0)
|
||||
if(A)
|
||||
var/permutation = A.bullet_act(src, def_zone) // searches for return value
|
||||
|
||||
@@ -49,6 +49,9 @@
|
||||
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
|
||||
log_admin("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
|
||||
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG
|
||||
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, INGEST)
|
||||
spawn(5)
|
||||
|
||||
@@ -48,6 +48,8 @@
|
||||
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
|
||||
log_admin("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
|
||||
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG
|
||||
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, INGEST)
|
||||
|
||||
@@ -101,6 +101,10 @@
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been smashed with a bottle by [user.name] ([user.ckey])</font>")
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [target.name] with a bottle. ([target.ckey])</font>")
|
||||
|
||||
log_admin("ATTACK: [user.name] ([user.ckey]) attacked [target.name] with a bottle. ([target.ckey])")
|
||||
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) attacked [target.name] with a bottle. ([target.ckey])") //BS12 EDIT ALG
|
||||
|
||||
|
||||
//The reagents in the bottle splash all over the target, thanks for the idea Nodrak
|
||||
if(src.reagents)
|
||||
for(var/mob/O in viewers(user, null))
|
||||
|
||||
@@ -67,6 +67,9 @@
|
||||
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
|
||||
log_admin("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
|
||||
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG
|
||||
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message("\red [user] feeds [M] [src].", 1)
|
||||
|
||||
@@ -2279,4 +2282,4 @@
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("nutriment", 1)
|
||||
reagents.add_reagent("nutriment", 1)
|
||||
|
||||
@@ -37,7 +37,8 @@
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to inject [M.name] ([M.ckey])</font>")
|
||||
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
|
||||
log_admin("ATTACK: [user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
|
||||
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG
|
||||
|
||||
src.reagents.reaction(M, INGEST)
|
||||
if(M.reagents)
|
||||
|
||||
@@ -66,6 +66,10 @@
|
||||
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
|
||||
log_admin("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
|
||||
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG
|
||||
|
||||
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, INGEST)
|
||||
spawn(5)
|
||||
|
||||
@@ -77,9 +77,17 @@
|
||||
M.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
|
||||
user.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
|
||||
log_attack("<font color='red'>[user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])</font>")
|
||||
|
||||
log_admin("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])")
|
||||
msg_admin_attack("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])") //BS12 EDIT ALG
|
||||
|
||||
else
|
||||
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
|
||||
log_attack("<font color='red'>UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R])</font>")
|
||||
|
||||
log_admin("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R])")
|
||||
msg_admin_attack("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R])") //BS12 EDIT ALG
|
||||
|
||||
if(D.reagents)
|
||||
D.reagents.trans_to(M, 15)
|
||||
M.take_organ_damage(5)
|
||||
|
||||
@@ -114,6 +114,9 @@
|
||||
for (var/mob/C in viewers(src))
|
||||
C.show_message("\red [GM.name] has been placed in the [src] by [user].", 3)
|
||||
del(G)
|
||||
log_attack("<font color='red'>[usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a disposals unit.</font>")
|
||||
log_admin("ATTACK: [usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a disposals unit.")
|
||||
msg_admin_attack("ATTACK: [usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a disposals unit.")
|
||||
return
|
||||
|
||||
if(!I) return
|
||||
|
||||
Reference in New Issue
Block a user