Fixes a possible problem where admins could be kicked if ghostize failed whilst they tried to Adminghostize

Fixes Issue 959 - the holder's state was not being set properly. It is now all handled at login. Verbs only update if rank or state have changed. You can bypass this simply by setting holder.state = null  before calling update_admins()
Moved obj/admins stuff into holder.dm so the core stuff is together, pending some possible work on admin-ranks.
Admins can no-longer adminghost whilst in the lobby.


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4746 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
elly1989@rocketmail.com
2012-09-24 06:06:25 +00:00
parent 508ca6a7d3
commit 9e182f0e39
9 changed files with 2734 additions and 2741 deletions

View File

@@ -25,22 +25,6 @@
mouse_opacity = 0 mouse_opacity = 0
unacidable = 1//Just to be sure. unacidable = 1//Just to be sure.
/obj/admins
name = "admins"
var/rank = null
var/owner = null
var/state = 1
//state = 1 for playing : default
//state = 2 for observing
var/admincaster_screen = 0 //See newscaster.dm under machinery for a full description
var/datum/feed_message/admincaster_feed_message = new /datum/feed_message //These two will act as holders.
var/datum/feed_channel/admincaster_feed_channel = new /datum/feed_channel
var/admincaster_signature //What you'll sign the newsfeeds as
/obj/admins/New()
src.admincaster_signature = "Nanotrasen Officer #[rand(0,9)][rand(0,9)][rand(0,9)]"
..()
/obj/effect/beam /obj/effect/beam
name = "beam" name = "beam"
unacidable = 1//Just to be sure. unacidable = 1//Just to be sure.

File diff suppressed because it is too large Load Diff

View File

@@ -17,28 +17,30 @@
// verbs += /client/proc/Cell //More air things // verbs += /client/proc/Cell //More air things
/client/proc/update_admins(var/rank) /client/proc/update_admins(var/rank)
if(!holder) if(!holder)
holder = new /obj/admins(src) holder = new /obj/admins(src)
holder.rank = rank var/need_update = 0
/* Unused //check if our rank has changed
if(!holder.state) if(holder.rank != rank)
var/state = alert("Which state do you want the admin to begin in?", "Admin-state", "Play", "Observe", "Neither") holder.rank = rank
if(state == "Play") need_update = 1
//check if our state has changed
if(istype(mob,/mob/living))
if(holder.state != 1)
holder.state = 1 holder.state = 1
admin_play() need_update = 1
return else
else if(state == "Observe") if(holder.state != 2)
holder.state = 2 holder.state = 2
admin_observe() need_update = 1
return
else
del(holder)
return */
switch (rank) if(!need_update) return
if ("Game Master")
clear_admin_verbs()
switch(rank)
if("Game Master")
holder.level = 6 holder.level = 6
if ("Game Admin") if ("Game Admin")
@@ -88,10 +90,10 @@
if ("Admin Observer") if ("Admin Observer")
holder.level = -1 holder.level = -1
if ("Banned") // if ("Banned")
holder.level = -2 // holder.level = -2
del(src) // del(src)
return // return
else else
del(holder) del(holder)
@@ -286,127 +288,132 @@
/client/proc/clear_admin_verbs() /client/proc/clear_admin_verbs()
deadchat = 0 deadchat = 0
verbs.Remove(
verbs -= /obj/admins/proc/announce /obj/admins/proc/announce,
verbs -= /obj/admins/proc/startnow /obj/admins/proc/startnow,
verbs -= /obj/admins/proc/toggleAI //Toggle the AI /obj/admins/proc/toggleAI, /*Toggle the AI*/
verbs -= /obj/admins/proc/toggleenter //Toggle enterting /obj/admins/proc/toggleenter, /*Toggle enterting*/
verbs -= /obj/admins/proc/toggleguests //Toggle guests entering /obj/admins/proc/toggleguests, /*Toggle guests entering*/
verbs -= /obj/admins/proc/toggleooc //toggle ooc /obj/admins/proc/toggleooc, /*toggle ooc*/
verbs -= /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc /obj/admins/proc/toggleoocdead, /*toggle ooc for dead/unc*/
verbs -= /obj/admins/proc/delay //game start delay /obj/admins/proc/delay, /*game start delay*/
verbs -= /obj/admins/proc/immreboot //immediate reboot /obj/admins/proc/immreboot, /*immediate reboot*/
verbs -= /obj/admins/proc/restart //restart /obj/admins/proc/restart, /*restart*/
verbs -= /obj/admins/proc/show_traitor_panel /obj/admins/proc/show_traitor_panel,
verbs -= /obj/admins/proc/show_player_panel /obj/admins/proc/show_player_panel,
verbs -= /obj/admins/proc/toggle_aliens //toggle aliens /obj/admins/proc/toggle_aliens, /*toggle aliens*/
verbs -= /obj/admins/proc/toggle_space_ninja //toggle ninjas /obj/admins/proc/toggle_space_ninja,/*toggle ninjas*/
verbs -= /obj/admins/proc/adjump /obj/admins/proc/adjump,
verbs -= /obj/admins/proc/view_txt_log /obj/admins/proc/view_txt_log,
verbs -= /obj/admins/proc/view_atk_log /obj/admins/proc/view_atk_log,
verbs -= /obj/admins/proc/spawn_atom /obj/admins/proc/spawn_atom,
verbs -= /obj/admins/proc/adrev //toggle admin revives /obj/admins/proc/adrev, /*toggle admin revives*/
verbs -= /obj/admins/proc/adspawn //toggle admin item spawning /obj/admins/proc/adspawn, /*toggle admin item spawning*/
verbs -= /obj/admins/proc/toggleaban //abandon mob /obj/admins/proc/toggleaban, /*abandon mob*/
verbs -= /client/proc/hide_verbs /client/proc/hide_verbs,
verbs -= /client/proc/hide_most_verbs /client/proc/hide_most_verbs,
verbs -= /client/proc/show_verbs /client/proc/show_verbs,
verbs -= /client/proc/colorooc /client/proc/colorooc,
verbs -= /client/proc/triple_ai /client/proc/triple_ai,
verbs -= /client/proc/get_admin_state /client/proc/get_admin_state,
verbs -= /client/proc/reload_admins /client/proc/reload_admins,
verbs -= /client/proc/kill_air /client/proc/kill_air,
verbs -= /client/proc/cmd_debug_make_powernets /client/proc/cmd_debug_make_powernets,
verbs -= /client/proc/object_talk /client/proc/object_talk,
verbs -= /client/proc/strike_team /client/proc/strike_team,
verbs -= /client/proc/cmd_admin_list_open_jobs /client/proc/cmd_admin_list_open_jobs,
verbs -= /client/proc/cmd_admin_direct_narrate /client/proc/cmd_admin_direct_narrate,
verbs -= /client/proc/cmd_admin_world_narrate /client/proc/cmd_admin_world_narrate,
verbs -= /client/proc/callproc /client/proc/callproc,
verbs -= /client/proc/Cell /client/proc/Cell,
verbs -= /client/proc/cmd_debug_del_all /client/proc/cmd_debug_del_all,
verbs -= /client/proc/cmd_debug_tog_aliens /client/proc/cmd_debug_tog_aliens,
// verbs -= /client/proc/mapload /client/proc/check_words,
verbs -= /client/proc/check_words /client/proc/drop_bomb,
verbs -= /client/proc/drop_bomb /client/proc/make_sound,
/client/proc/only_one,
/client/proc/send_space_ninja,
/client/proc/debug_variables,
/client/proc/cmd_modify_ticker_variables,
/client/proc/Debug2, /*debug toggle switch*/
/client/proc/toggle_view_range,
/client/proc/Getmob,
/client/proc/Getkey,
/client/proc/sendmob,
/client/proc/Jump,
/client/proc/jumptokey,
/client/proc/jumptomob,
/client/proc/jumptoturf,
/client/proc/cmd_admin_add_freeform_ai_law,
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/cmd_admin_rejuvenate,
/client/proc/cmd_admin_delete,
/client/proc/toggleadminhelpsound,
/client/proc/admin_call_shuttle,
/client/proc/admin_cancel_shuttle,
/client/proc/cmd_admin_dress,
/client/proc/respawn_character,
/client/proc/spawn_xeno,
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/secrets,
/client/proc/check_antagonists,
/client/proc/play_sound,
/client/proc/stealth,
/client/proc/cmd_admin_check_contents,
/client/proc/cmd_admin_create_centcom_report,
/client/proc/deadchat, /*toggles deadchat*/
/client/proc/cmd_admin_pm_context,
/client/proc/cmd_admin_pm_panel,
/client/proc/cmd_admin_say,
/client/proc/cmd_admin_subtle_message,
/client/proc/dsay,
/client/proc/admin_ghost,
/client/proc/game_panel,
/client/proc/player_panel,
/client/proc/unban_panel,
/client/proc/jobbans,
/client/proc/unjobban_panel,
/client/proc/hide_verbs,
/client/proc/general_report,
/client/proc/air_report,
/client/proc/cmd_admin_say,
/client/proc/cmd_admin_gib_self,
/client/proc/restart_controller,
/client/proc/play_local_sound,
/client/proc/enable_debug_verbs,
/client/proc/toggleprayers,
/client/proc/toggle_clickproc, /*TODO ERRORAGE (Temporary proc while the enw clickproc is being tested)*/
/client/proc/toggle_hear_deadcast,
/client/proc/toggle_hear_radio,
/client/proc/player_panel_new,
/client/proc/toggle_gravity_on,
/client/proc/toggle_gravity_off,
/client/proc/toggle_random_events,
/client/proc/deadmin_self,
/client/proc/jumptocoord,
/client/proc/everyone_random,
/client/proc/Set_Holiday,
/client/proc/giveruntimelog, /*used by coders to retrieve runtime logs*/
/client/proc/getserverlog,
/client/proc/cinematic, /*show a cinematic sequence*/
/client/proc/admin_memo,
/client/proc/investigate_show, /*investigate in-game mishaps using various logs.*/
/client/proc/toggle_log_hrefs,
/client/proc/ToRban,
/proc/possess,
/proc/release,
/client/proc/togglebuildmodeself,
/client/proc/kill_airgroup,
/client/proc/debug_controller,
/client/proc/startSinglo,
/client/proc/check_ai_laws,
/client/proc/cmd_debug_mob_lists,
/obj/admins/proc/access_news_network,
/client/proc/one_click_antag,
/client/proc/invisimin
)
//verbs -= /client/proc/mapload
//verbs -= /client/proc/cmd_admin_drop_everything --merged with view variables //verbs -= /client/proc/cmd_admin_drop_everything --merged with view variables
verbs -= /client/proc/make_sound
verbs -= /client/proc/only_one
verbs -= /client/proc/send_space_ninja
verbs -= /client/proc/debug_variables
verbs -= /client/proc/cmd_modify_ticker_variables
verbs -= /client/proc/Debug2 //debug toggle switch
verbs -= /client/proc/toggle_view_range
verbs -= /client/proc/Getmob
verbs -= /client/proc/Getkey
verbs -= /client/proc/sendmob
verbs -= /client/proc/Jump
verbs -= /client/proc/jumptokey
verbs -= /client/proc/jumptomob
verbs -= /client/proc/jumptoturf
verbs -= /client/proc/cmd_admin_add_freeform_ai_law
verbs -= /client/proc/cmd_admin_add_random_ai_law
verbs -= /client/proc/cmd_admin_rejuvenate
verbs -= /client/proc/cmd_admin_delete
verbs -= /client/proc/toggleadminhelpsound
//verbs -= /client/proc/cmd_admin_remove_plasma --This proc is outdated, does not do anything
verbs -= /client/proc/admin_call_shuttle
verbs -= /client/proc/admin_cancel_shuttle
verbs -= /client/proc/cmd_admin_dress
verbs -= /client/proc/respawn_character
verbs -= /client/proc/spawn_xeno
verbs -= /client/proc/cmd_admin_add_random_ai_law
verbs -= /client/proc/secrets
verbs -= /client/proc/check_antagonists
verbs -= /client/proc/play_sound
verbs -= /client/proc/stealth
verbs -= /client/proc/cmd_admin_check_contents
verbs -= /client/proc/cmd_admin_create_centcom_report
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_say
verbs -= /client/proc/cmd_admin_subtle_message
//verbs -= /client/proc/warn
verbs -= /client/proc/dsay
verbs -= /client/proc/admin_ghost
verbs -= /client/proc/game_panel
verbs -= /client/proc/player_panel
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/cmd_admin_say
verbs -= /client/proc/cmd_admin_gib_self
verbs -= /client/proc/restart_controller
verbs -= /client/proc/play_local_sound
verbs -= /client/proc/enable_debug_verbs
verbs -= /client/proc/toggleprayers
// verbs -= /client/proc/Blobize
// verbs -= /client/proc/Blobcount
verbs -= /client/proc/toggle_clickproc //TODO ERRORAGE (Temporary proc while the enw clickproc is being tested)
verbs -= /client/proc/toggle_hear_deadcast
verbs -= /client/proc/toggle_hear_radio
verbs -= /client/proc/player_panel_new
verbs -= /client/proc/toggle_gravity_on
verbs -= /client/proc/toggle_gravity_off
verbs -= /client/proc/toggle_random_events
verbs -= /client/proc/deadmin_self
verbs -= /client/proc/jumptocoord
verbs -= /client/proc/everyone_random
verbs -= /client/proc/Set_Holiday
verbs -= /client/proc/giveruntimelog //used by coders to retrieve runtime logs
verbs -= /client/proc/getserverlog
verbs -= /client/proc/cinematic //show a cinematic sequence
verbs -= /client/proc/admin_memo
verbs -= /client/proc/investigate_show //investigate in-game mishaps using various logs.
verbs -= /client/proc/toggle_log_hrefs
verbs -= /client/proc/ToRban
verbs -= /proc/possess
verbs -= /proc/release
//verbs -= /client/proc/give_spell --Merged with view variables //verbs -= /client/proc/give_spell --Merged with view variables
//verbs -= /client/proc/cmd_admin_ninjafy --Merged with view variables //verbs -= /client/proc/cmd_admin_ninjafy --Merged with view variables
//verbs -= /client/proc/cmd_modify_object_variables --Merged with view variables //verbs -= /client/proc/cmd_modify_object_variables --Merged with view variables
@@ -420,15 +427,11 @@
//verbs -= /client/proc/cmd_admin_prison --Merged with player panel //verbs -= /client/proc/cmd_admin_prison --Merged with player panel
//verbs -= /obj/admins/proc/unprison --Merged with player panel //verbs -= /obj/admins/proc/unprison --Merged with player panel
//verbs -= /client/proc/cmd_switch_radio --removed because tcommsat is staying //verbs -= /client/proc/cmd_switch_radio --removed because tcommsat is staying
verbs -= /client/proc/togglebuildmodeself // verbs -= /client/proc/Blobize
verbs -= /client/proc/kill_airgroup // verbs -= /client/proc/Blobcount
verbs -= /client/proc/debug_controller //verbs -= /client/proc/warn
verbs -= /client/proc/startSinglo //verbs -= /client/proc/cmd_admin_mute --was never used (according to stats trackind) - use show player panel --erro
verbs -= /client/proc/check_ai_laws //verbs -= /client/proc/cmd_admin_remove_plasma --This proc is outdated, does not do anything
verbs -= /client/proc/cmd_debug_mob_lists
verbs -= /obj/admins/proc/access_news_network
verbs -= /client/proc/one_click_antag
verbs -= /client/proc/invisimin
return return
/client/proc/admin_ghost() /client/proc/admin_ghost()
@@ -441,11 +444,12 @@
ghost.can_reenter_corpse = 1 //just in-case. ghost.can_reenter_corpse = 1 //just in-case.
ghost.reenter_corpse() ghost.reenter_corpse()
feedback_add_details("admin_verb","P") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","P") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else else if(!istype(mob,/mob/new_player))
//ghostize //ghostize
var/mob/body = mob var/mob/body = mob
body.ghostize(1) body.ghostize(1)
if(body) body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus if(body && !body.key)
body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus
feedback_add_details("admin_verb","O") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","O") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -689,7 +693,7 @@
src << "Restoring admin verbs back" src << "Restoring admin verbs back"
var/temp = deadchat var/temp = deadchat
clear_admin_verbs() holder.state = null //forces a full verbs update
update_admins(holder.rank) update_admins(holder.rank)
deadchat = temp deadchat = temp
feedback_add_details("admin_verb","TAVVS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","TAVVS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -731,7 +735,6 @@
log_admin("[src] deadmined themself.") log_admin("[src] deadmined themself.")
message_admins("[src] deadmined themself.", 1) message_admins("[src] deadmined themself.", 1)
src.clear_admin_verbs() src.clear_admin_verbs()
src.update_admins(null)
admins.Remove(src.ckey) admins.Remove(src.ckey)
admin_list -= src admin_list -= src
usr << "You are now a normal player." usr << "You are now a normal player."

2566
code/modules/admin/holder.dm Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -33,7 +33,7 @@
if( findtext(href,"<script",1,0) ) if( findtext(href,"<script",1,0) )
world.log << "Attempted use of scripts within a topic call, by [src]" world.log << "Attempted use of scripts within a topic call, by [src]"
message_admins("Attempted use of scripts within a topic call, by [src]") message_admins("Attempted use of scripts within a topic call, by [src]")
del(usr) //del(usr)
return return
//Admin PM //Admin PM
@@ -97,15 +97,16 @@
host = key host = key
world.update_status() world.update_status()
..() //calls mob.Login()
//Admin Authorisation //Admin Authorisation
if( ckey in admins ) if( ckey in admins )
holder = new /obj/admins(src) holder = new /obj/admins(src)
holder.rank = admins[ckey] holder.rank = admins[ckey]
admin_list += src admin_list += src
update_admins(admins[ckey]) // update_admins(admins[ckey]) //handled by Login
..() //calls mob.Login()
if(holder)
admin_memo_show() admin_memo_show()
log_client_to_db() log_client_to_db()

View File

@@ -1,7 +1,2 @@
/mob/dead/observer/Login() /mob/dead/observer/Login()
..() ..()
if(client.holder && client.holder.state != 2)
client.holder.state = 2
var/rank = client.holder.rank
client.clear_admin_verbs()
client.update_admins(rank)

View File

@@ -18,13 +18,6 @@
if("nuclear emergency") if("nuclear emergency")
if(mind in ticker.mode:syndicates) if(mind in ticker.mode:syndicates)
ticker.mode.update_all_synd_icons() ticker.mode.update_all_synd_icons()
if(client.holder && client.holder.state != 1)
client.holder.state = 1
var/rank = client.holder.rank
client.clear_admin_verbs()
client.update_admins(rank)
return . return .
//This stuff needs to be merged from cloning.dm but I'm not in the mood to be shouted at for breaking all the things :< ~Carn //This stuff needs to be merged from cloning.dm but I'm not in the mood to be shouted at for breaking all the things :< ~Carn

View File

@@ -1,5 +1,10 @@
//handles setting lastKnownIP and computer_id for use by the ban systems as well as checking for multikeying //handles setting lastKnownIP and computer_id for use by the ban systems as well as checking for multikeying
/mob/proc/update_Login_details() /mob/proc/update_Login_details()
//trigger admin holder updates. This is hear as all Login() calls this proc.
if(client.holder)
client.update_admins(client.holder.rank)
//Multikey checks and logging
lastKnownIP = client.address lastKnownIP = client.address
computer_id = client.computer_id computer_id = client.computer_id
log_access("Login: [key_name(src)] from [lastKnownIP ? lastKnownIP : "localhost"]-[computer_id] || BYOND v[client.byond_version]") log_access("Login: [key_name(src)] from [lastKnownIP ? lastKnownIP : "localhost"]-[computer_id] || BYOND v[client.byond_version]")

View File

@@ -813,6 +813,7 @@
#include "code\modules\admin\create_mob.dm" #include "code\modules\admin\create_mob.dm"
#include "code\modules\admin\create_object.dm" #include "code\modules\admin\create_object.dm"
#include "code\modules\admin\create_turf.dm" #include "code\modules\admin\create_turf.dm"
#include "code\modules\admin\holder.dm"
#include "code\modules\admin\IsBanned.dm" #include "code\modules\admin\IsBanned.dm"
#include "code\modules\admin\NewBan.dm" #include "code\modules\admin\NewBan.dm"
#include "code\modules\admin\newbanjob.dm" #include "code\modules\admin\newbanjob.dm"
@@ -952,7 +953,6 @@
#include "code\modules\mob\update_icons.dm" #include "code\modules\mob\update_icons.dm"
#include "code\modules\mob\dead\death.dm" #include "code\modules\mob\dead\death.dm"
#include "code\modules\mob\dead\observer\hud.dm" #include "code\modules\mob\dead\observer\hud.dm"
#include "code\modules\mob\dead\observer\login.dm"
#include "code\modules\mob\dead\observer\logout.dm" #include "code\modules\mob\dead\observer\logout.dm"
#include "code\modules\mob\dead\observer\observer.dm" #include "code\modules\mob\dead\observer\observer.dm"
#include "code\modules\mob\dead\observer\say.dm" #include "code\modules\mob\dead\observer\say.dm"