From f639ece55dc0b9bf5dff0cbc213045a8bf5234e9 Mon Sep 17 00:00:00 2001 From: "rastaf.zero@gmail.com" Date: Sat, 25 Jun 2011 11:30:05 +0000 Subject: [PATCH] Update for game masters: -Right click commands "Make robot/alien/ai/monkey" moved to "edit player" screen. -Right click commands "Make traitor/cultist/changeling/etc" moved to "edit mind" screen. -- note: currently the only way to humanize monkey is to use "edit mind" screen. -Added right click commands showing "edit player" and "edit memory" screens. In light of an incoming tournament on ss13.ru I have added "Select equipment" right click command. It allows to instantly dress mob as you wish. Coders, feel free to add more dress packs, like "centcom inspector", "space pirate" and so on. A strange command "list_occ" now called "List free slots" and shows unoccupied jobs. Added golden cup, sprite belongs to Farart. You can now take a power cell from charger even if there is no power. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1724 316c924e-a436-60f5-8080-3fe189b3f50e --- code/WorkInProgress/Chemistry-Tools.dm | 16 + code/datums/mind.dm | 8 +- code/defines/obj/weapon.dm | 8 + code/game/machinery/cell_charger.dm | 2 - code/game/objects/items/weapons/AI_modules.dm | 6 +- code/game/objects/items/weapons/guns_new.dm | 11 + code/game/spacecraft/syndicatebeacon.dm | 2 +- code/modules/admin/admin.dm | 379 ++++++++---------- code/modules/admin/admin_verbs.dm | 65 +-- code/modules/admin/verbs/debug.dm | 104 ++++- code/modules/admin/verbs/onlyone.dm | 2 +- code/modules/admin/verbs/randomverbs.dm | 9 +- code/modules/mob/living/living.dm | 16 + code/modules/mob/living/silicon/ai/life.dm | 2 +- code/modules/mob/living/silicon/robot/laws.dm | 2 +- code/modules/power/apc.dm | 52 +-- icons/obj/drinks.dmi | Bin 36166 -> 37259 bytes 17 files changed, 395 insertions(+), 289 deletions(-) diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm index 57a12ed7928..1a6bede4d4b 100644 --- a/code/WorkInProgress/Chemistry-Tools.dm +++ b/code/WorkInProgress/Chemistry-Tools.dm @@ -1725,6 +1725,22 @@ ..() reagents.add_reagent("cryoxadone", 30) +/obj/item/weapon/reagent_containers/glass/golden_cup + desc = "A golden cup" + name = "golden cup" + icon = 'drinks.dmi' + icon_state = "golden_cup" + item_state = "" //nope :( + w_class = 4 + force = 14 + throwforce = 10 + amount_per_transfer_from_this = 20 + possible_transfer_amounts = null + volume = 100 + flags = FPRINT | CONDUCT | TABLEPASS | OPENCONTAINER + +/obj/item/weapon/reagent_containers/glass/golden_cup/tournament_26_06_2011 + desc = "A golden cup. It will be presented to a winner of tournament 26 june and name of the winner will be graved on it." //Syringes /obj/item/weapon/reagent_containers/syringe/robot diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 56b207a8c3f..d024a32428a 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -508,7 +508,7 @@ datum/mind ticker.mode.cult += src ticker.mode.update_cult_icons_added(src) special_role = "Cultist" - current << "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root." + current << "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie." current << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back." var/datum/game_mode/cult/cult = ticker.mode if (istype(cult)) @@ -668,6 +668,8 @@ datum/mind var/mob/living/carbon/human/H = current var/mob/living/carbon/monkey/M = current if (istype(H)) + log_admin("[key_name(usr)] attempting to monkeyize [key_name(current)]") + message_admins("\blue [key_name_admin(usr)] attempting to monkeyize [key_name_admin(current)]", 1) src = null M = H.monkeyize() src = M.mind @@ -680,6 +682,8 @@ datum/mind var/mob/living/carbon/human/H = current var/mob/living/carbon/monkey/M = current if (istype(H)) + log_admin("[key_name(usr)] attempting to monkeyize and infect [key_name(current)]") + message_admins("\blue [key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]", 1) src = null M = H.monkeyize() src = M.mind @@ -692,6 +696,8 @@ datum/mind if (istype(M.virus,/datum/disease/jungle_fever)) M.virus.cure(0) sleep(0) //because deleting of virus is doing throught spawn(0) + log_admin("[key_name(usr)] attempting to humanize [key_name(current)]") + message_admins("\blue [key_name_admin(usr)] attempting to humanize [key_name_admin(current)]", 1) var/obj/item/weapon/dnainjector/m2h/m2h = new var/obj/item/weapon/implant/mobfinder = new(M) //hack because humanizing deletes mind --rastaf0 src = null diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 3eccfe17bb6..9b0a79dab7d 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -1497,6 +1497,14 @@ Total SMES charging rate should not exceed total power generation rate, or an ov maxcharge = 30000 g_amt = 80 +/obj/item/weapon/cell/infinite + name = "infinite-capacity power cell!" + origin_tech = null + maxcharge = 30000 + g_amt = 80 + use() + return + /*/obj/item/weapon/cell/potato name = "Potato Battery" desc = "A rechargable starch based power cell." diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 3bc7ac3f8fe..dd496bbfb35 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -32,8 +32,6 @@ overlays = null /obj/machinery/cell_charger/attack_hand(mob/user) - if(..()) - return if(charging) usr.put_in_hand(charging) diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index b62586a9d20..69789b4f205 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -203,7 +203,7 @@ AI MODULES /obj/item/weapon/aiModule/oneHuman/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() var/law = "Only [targetName] is human." - if (!checktraitor(target)) // Makes sure the AI isn't a traitor before changing their law 0. --NeoFite + if (!is_special_character(target)) // Makes sure the AI isn't a traitor before changing their law 0. --NeoFite target << law target.set_zeroth_law(law) lawchanges.Add("The law specified [targetName]") @@ -353,7 +353,7 @@ AI MODULES /obj/item/weapon/aiModule/reset/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() - if (!checktraitor(target)) + if (!is_special_character(target)) target.set_zeroth_law("") target.clear_supplied_laws() target.clear_ion_laws() @@ -369,7 +369,7 @@ AI MODULES /obj/item/weapon/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() - if (!checktraitor(target)) + if (!is_special_character(target)) target.set_zeroth_law("") target << "[sender.real_name] attempted to wipe your laws using a purge module." target.clear_supplied_laws() diff --git a/code/game/objects/items/weapons/guns_new.dm b/code/game/objects/items/weapons/guns_new.dm index 7118b440b35..5e550f5603d 100644 --- a/code/game/objects/items/weapons/guns_new.dm +++ b/code/game/objects/items/weapons/guns_new.dm @@ -464,6 +464,17 @@ var/const/PROJECTILE_DART = 8 power_supply.give(power_supply.maxcharge) update_icon() + destroyer + name = "pulse destroyer" + desc = "A heavy-duty, pulse-based energy weapon. The mode is set to DESRTOY. Always destroy." + mode = 2 + New() + power_supply = new /obj/item/weapon/cell/infinite(src) + power_supply.give(power_supply.maxcharge) + update_icon() + attack_self(mob/living/user as mob) + return + nuclear name = "Advanced Energy Gun" desc = "An energy gun with an experimental miniaturized reactor." diff --git a/code/game/spacecraft/syndicatebeacon.dm b/code/game/spacecraft/syndicatebeacon.dm index d25fa0f7681..a61cfcdadda 100644 --- a/code/game/spacecraft/syndicatebeacon.dm +++ b/code/game/spacecraft/syndicatebeacon.dm @@ -22,7 +22,7 @@ usr.machine = src var/dat = "Scanning [pick("retina pattern", "voice print", "fingerprints", "dna sequence")]...
Identity confirmed,
" if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai)) - if(checktraitor(user)) + if(is_special_character(user)) dat += "Operative record found. Greetings, Agent [user.name].
" else if(charges < 1) dat += "Connection severed.
" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 562a7eed6af..1d6ed945278 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -283,7 +283,7 @@ var/showadminmessages = 1 world.save_mode(master_mode) .(href, list("c_mode"=1)) - +/* if (href_list["monkeyone"]) if ((src.rank in list( "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) var/mob/M = locate(href_list["monkeyone"]) @@ -297,7 +297,7 @@ var/showadminmessages = 1 if(istype(M, /mob/living/silicon)) alert("The AI can't be monkeyized!", null, null, null, null, null) return - +*/ if (href_list["forcespeech"]) if ((src.rank in list( "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) var/mob/M = locate(href_list["forcespeech"]) @@ -503,7 +503,7 @@ var/showadminmessages = 1 return if (href_list["makeai"]) //Yes, im fucking lazy, so what? it works ... hopefully - if ((src.rank in list( "Trial Admin", "Game Admin", "Game Master", "Admin Candidate", "Badmin" ))) + if (src.level>=3) var/mob/M = locate(href_list["makeai"]) if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M @@ -529,6 +529,29 @@ var/showadminmessages = 1 alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null) return + if (href_list["makealien"]) + if (src.level>=3) + var/mob/M = locate(href_list["makealien"]) + if(istype(M, /mob/living/carbon/human)) + usr.client.cmd_admin_alienize(M) + else + alert("Wrong mob. Must be human.") + return + else + alert("You cannot perform this action. You must be of a higher administrative rank!") + return + + if (href_list["makerobot"]) + if (src.level>=3) + var/mob/M = locate(href_list["makerobot"]) + if(istype(M, /mob/living/carbon/human)) + usr.client.cmd_admin_robotize(M) + else + alert("Wrong mob. Must be human.") + return + else + alert("You cannot perform this action. You must be of a higher administrative rank!") + return /***************** BEFORE************** if (href_list["l_players"]) @@ -569,51 +592,7 @@ var/showadminmessages = 1 if (href_list["adminplayeropts"]) var/mob/M = locate(href_list["adminplayeropts"]) - if(!M) - usr << "You seem to be selecting a mob that doesn't exist anymore." - return - var/dat = "Options for [M.key]" - var/foo = "\[ " - if (ismob(M) && M.client) - if(!M.client.authenticated && !M.client.authenticating) - foo += text("Authorize | ") - else - foo += text("Authorized | ") - foo += text("Promote/Demote | ") - if(!istype(M, /mob/new_player)) - if(!ismonkey(M)) - foo += text("Monkeyize | ") - else - foo += text("Monkeyized | ") - if(isAI(M)) - foo += text("Is an AI | ") - else if(ishuman(M)) - foo += text("Make AI | ") - foo += text("Thunderdome 1 | ") - foo += text("Thunderdome 2 | ") - foo += text("Thunderdome Admin | ") - foo += text("Thunderdome Observer | ") - foo += text("Prison | ") - foo += text("Maze | ") - foo += text("Heal/Revive | ") - else - foo += text("Hasn't Entered Game | ") - foo += text("Forcesay | ") - foo += text("Mute: [(M.muted ? "Muted" : "Voiced")] | ") - foo += text("Boot") - foo += text("
") - foo += text("Jump to | ") - foo += text("Get | ") - foo += text("Send") - foo += text("
") - foo += text("Traitor? | ") - foo += text("Narrate to | ") - foo += text("Subtle message") - foo += text("
") - foo += text("Ban | ") - foo += text("Jobban") - dat += text("[foo]") - usr << browse(dat, "window=adminplayeropts;size=480x150") + edit_player(M) if (href_list["jumpto"]) if(rank in list("Badmin", "Game Admin", "Game Master")) @@ -863,13 +842,13 @@ var/showadminmessages = 1 H.monkeyize() ok = 1 if("power") - power_restore() log_admin("[key_name(usr)] made all areas powered", 1) message_admins("\blue [key_name_admin(usr)] made all areas powered", 1) + power_restore() if("unpower") - power_failure() log_admin("[key_name(usr)] made all areas unpowered", 1) message_admins("\blue [key_name_admin(usr)] made all areas unpowered", 1) + power_failure() if("activateprison") world << "\blue Transit signature detected." world << "\blue Incoming shuttle." @@ -939,13 +918,27 @@ var/showadminmessages = 1 if(!objective) return for(var/mob/living/carbon/human/H in world) - if(H.stat == 2 || !(H.client)) continue - if(checktraitor(H)) continue - traitorize(H, objective, 0) - for(var/mob/living/silicon/ai/A in world) - if(A.stat == 2 || !(A.client)) continue - if(checktraitor(A)) continue - traitorize(A, objective, 0) + if(H.stat == 2 || !H.client || !H.mind) continue + if(is_special_character(H)) continue + //traitorize(H, objective, 0) + ticker.mode.traitors += H.mind + H.mind.special_role = "traitor" + var/datum/objective/new_objective = new + new_objective.owner = H + new_objective.explanation_text = objective + H.mind.objectives += new_objective + ticker.mode.greet_traitor(H) + //ticker.mode.forge_traitor_objectives(H.mind) + ticker.mode.finalize_traitor(H) + for(var/mob/living/silicon/A in world) + ticker.mode.traitors += A.mind + A.mind.special_role = "traitor" + var/datum/objective/new_objective = new + new_objective.owner = A + new_objective.explanation_text = objective + A.mind.objectives += new_objective + ticker.mode.greet_traitor(A) + ticker.mode.finalize_traitor(A) message_admins("\blue [key_name_admin(usr)] used everyone is a traitor secret. Objective is [objective]", 1) log_admin("[key_name(usr)] used everyone is a traitor secret. Objective is [objective]") else @@ -1388,7 +1381,62 @@ var/showadminmessages = 1 ///////////////////////////////////////////////////////////////////////////////////////////////Panels - +/obj/admins/proc/edit_player(var/mob/M in world) + set category = "Admin" + set name = "Edit player" + set desc="Edit player (respawn, ban, heal, etc)" + if(!M) + usr << "You seem to be selecting a mob that doesn't exist anymore." + return + if (!istype(src,/obj/admins)) + src = usr.client.holder + if (!istype(src,/obj/admins)) + usr << "Error: you are not an admin!" + return + var/dat = "Options for [M.key]" + var/foo = "\[ " + if (ismob(M) && M.client) + if(!M.client.authenticated && !M.client.authenticating) + foo += text("Authorize | ") + else + foo += text("Authorized | ") + foo += text("Promote/Demote | ") + if(!istype(M, /mob/new_player)) + if(!ismonkey(M)) + foo += text("Monkeyize | ") + else + foo += text("Monkeyized | ") + if(isAI(M)) + foo += text("Is an AI | ") + else if(ishuman(M)) + foo += text("Make AI | ") + foo += text("Make Robot | ") + foo += text("Make Alium | ") + foo += text("Thunderdome 1 | ") + foo += text("Thunderdome 2 | ") + foo += text("Thunderdome Admin | ") + foo += text("Thunderdome Observer | ") + foo += text("Prison | ") + foo += text("Maze | ") + foo += text("Heal/Revive | ") + else + foo += text("Hasn't Entered Game | ") + foo += text("Forcesay | ") + foo += text("Mute: [(M.muted ? "Muted" : "Voiced")] | ") + foo += text("Boot") + foo += text("
") + foo += text("Jump to | ") + foo += text("Get | ") + foo += text("Send") + foo += text("
") + foo += text("Edit mind | ") + foo += text("Narrate to | ") + foo += text("Subtle message") + foo += text("
") + foo += text("Ban | ") + foo += text("Jobban") + dat += text("[foo]") + usr << browse(dat, "window=adminplayeropts;size=480x150") /obj/admins/proc/player() var/dat = "Player Menu" @@ -1430,8 +1478,14 @@ var/showadminmessages = 1 dat += {"[(M.client ? "[(M.client.goon ? "" : "")][M.client]" : "No client")] X PM - [checktraitor(M) ? "" : ""]Traitor? "} + switch(is_special_character(M)) + if(0) + dat += {"]Traitor?"} + if(1) + dat += {"Traitor?"} + if(2) + dat += {"Traitor?"} if (config.sql_enabled) dat += "ERROR" else @@ -1469,8 +1523,14 @@ var/showadminmessages = 1 dat += {"[(M.client ? "[(M.client.goon ? "" : "")][M.client]" : "No client")] X PM - [checktraitor(M) ? "" : ""]Traitor? "} + switch(is_special_character(M)) + if(0) + dat += {"]Traitor?"} + if(1) + dat += {"Traitor?"} + if(2) + dat += {"Traitor?"} if(currentkarma) dat += "[currentkarma]" else @@ -1777,6 +1837,7 @@ var/showadminmessages = 1 message = adminscrub(message,500) world << "\blue [usr.client.stealth ? "Administrator" : usr.key] Announces:\n \t [message]" log_admin("Announce: [key_name(usr)] : [message]") + /obj/admins/proc/toggleooc() set category = "Server" set desc="Toggle dis bitch" @@ -1840,9 +1901,9 @@ var/showadminmessages = 1 set name="Toggle Entering" enter_allowed = !( enter_allowed ) if (!( enter_allowed )) - world << "You may no longer enter the game." + world << "New players may no longer enter the game." else - world << "You may now enter the game." + world << "New players may now enter the game." log_admin("[key_name(usr)] toggled new player game entering.") message_admins("\blue [key_name_admin(usr)] toggled new player game entering.", 1) world.update_status() @@ -1957,52 +2018,41 @@ var/showadminmessages = 1 else alert("[M.name] is not prisoned.") -/mob/living/proc/revive() - //src.fireloss = 0 - src.toxloss = 0 - //src.bruteloss = 0 - src.oxyloss = 0 - src.paralysis = 0 - src.stunned = 0 - src.weakened =0 - //src.health = 100 - src.heal_overall_damage(1000, 1000) - src.buckled = initial(src.buckled) - src.handcuffed = initial(src.handcuffed) - if(src.stat > 1) src.stat=0 - ..() - return - - ////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS -/proc/checktraitor(mob/M as mob) +/proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode if(!ticker || !ticker.mode) return 0 - if (istype(M, /obj/AIcore)) + if (!istype(M)) return 0 - switch(ticker.mode.config_tag) - if("revolution") - if((M.mind in ticker.mode.head_revolutionaries) || (M.mind in ticker.mode:revolutionaries)) - return 1 - if("cult") - if(M.mind in ticker.mode.cult) - return 1 - if("malfunction") - if(M.mind in ticker.mode.malf_ai) - return 1 - if("nuclear") - if(M.mind in ticker.mode.syndicates) - return 1 - if("wizard") - if(M.mind in ticker.mode.wizards) - return 1 - if("changeling") - if(M.mind in ticker.mode.changelings) - return 1 - if("monkey") - if(istype(M.virus, /datum/disease/jungle_fever)) - return 1 + if((M.mind in ticker.mode.head_revolutionaries) || (M.mind in ticker.mode.revolutionaries)) + if (ticker.mode.config_tag == "revolution") + return 2 + return 1 + if(M.mind in ticker.mode.cult) + if (ticker.mode.config_tag == "cult") + return 2 + return 1 + if(M.mind in ticker.mode.malf_ai) + if (ticker.mode.config_tag == "malfunction") + return 2 + return 1 + if(M.mind in ticker.mode.syndicates) + if (ticker.mode.config_tag == "nuclear") + return 2 + return 1 + if(M.mind in ticker.mode.wizards) + if (ticker.mode.config_tag == "wizard") + return 2 + return 1 + if(M.mind in ticker.mode.changelings) + if (ticker.mode.config_tag == "changeling") + return 2 + return 1 + if(istype(M.virus, /datum/disease/jungle_fever)) + if (ticker.mode.config_tag == "monkey") + return 2 + return 1 if(isrobot(M)) var/mob/living/silicon/robot/R = M if(R.emagged) @@ -2012,99 +2062,7 @@ var/showadminmessages = 1 return 0 -/obj/admins/proc/traitorize(mob/M as mob, var/objective, var/mode) - //mode = 1 for normal traitorise, mode = 0 for traitor_all - if ((src.rank in list( "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) - if(M.stat == 2 || !(M.client)) - alert("Person is dead or not logged in or hasn't started yet. Be nice") - return - if(checktraitor(M)) - alert("Person is already a traitor you jerk") - return - if(!objective) - objective = input("What should the objective be?") - if(!objective) - return - if (istype(M, /mob/living/carbon/human)) - if(M.mind) - var/mob/living/carbon/human/N = M - ticker.mode.equip_traitor(N) - - ticker.mode.traitors += M.mind - - M.mind.special_role = "traitor" - - var/datum/objective/custom_objective = new(objective) - custom_objective.owner = M.mind - M.mind.objectives += custom_objective - - var/datum/objective/escape/escape_objective = new - escape_objective.owner = M.mind - M.mind.objectives += escape_objective - - M << "You are the traitor." - - var/obj_count = 1 - for(var/datum/objective/OBJ in M.mind.objectives) - M << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ - - //to stop spamming during traitor all secret - if(mode) - log_admin("[key_name(usr)] has made [key_name(M)] a traitor.") - message_admins("\blue [key_name_admin(usr)] has made [key_name_admin(M)] a traitor. Objective is: [objective]", 1) - else - usr << "This guy doesn't have a mind datum, traitoring him doesn't work right." - else if (istype(M, /mob/living/silicon/ai)) - ticker.mode.traitors += M.mind - M.mind.special_role = "traitor" - - var/datum/objective/custom_objective = new(objective) - custom_objective.owner = M.mind - M.mind.objectives += custom_objective - - var/datum/objective/survive/survive_objective = new - survive_objective.owner = M.mind - M.mind.objectives += survive_objective - - M << "You are the traitor." - - var/obj_count = 1 - for(var/datum/objective/OBJ in M.mind.objectives) - M << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ - - M << "Your laws have been changed!" - var/law = "Only [syndicate_name()] agents are human beings. There are no [syndicate_name()] agents on [station_name()] - you will be notified if any arrive." - M:set_zeroth_law(law) - for(var/mob/living/silicon/O in world) - O << "New law: 0. [law]" - - //Begin code phrase. - M << "The Syndicate provided you with the following information on how to identify their agents:" - if(prob(80)) - M << "\red Code Phrase: \black [syndicate_code_phrase]" - M.mind.store_memory("Code Phrase: [syndicate_code_phrase]") - else - M << "Unfortunetly, the Syndicate did not provide you with a code phrase." - if(prob(80)) - M << "\red Code Response: \black [syndicate_code_response]" - M.mind.store_memory("Code Response: [syndicate_code_response]") - else - M << "Unfortunetly, the Syndicate did not provide you with a code response." - M << "Use the code words in the order provided, during regular conversation, to identify their agents. Proceed with caution, however, as everyone is a potential foe." - //End code phrase. - - if(mode) - log_admin("[key_name(usr)] has made [key_name(M)] a traitor.") - message_admins("\blue [key_name_admin(usr)] has made [key_name_admin(M)] a traitor. Objective is: [objective]", 1) - else - alert("I cannot allow this to happen") - else - alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null) - return - - +/* /obj/admins/proc/get_sab_desc(var/target) switch(target) if(1) @@ -2121,26 +2079,7 @@ var/showadminmessages = 1 return "Cut power to at least 80% of the station" else return "Error: Invalid sabotage target: [target]" - -/obj/admins/proc/get_item_desc(var/target) - switch (target) - if (1) - return "a fully loaded laser gun" - if (2) - return "a hand teleporter" - if (3) - return "a fully armed and heated plasma bomb" - if (4) - return "a jet pack" - if (5) - return "an ID card with universal access" - if (6) - return "a captain's dark green jumpsuit" - else - return "Error: Invalid theft target: [target]" - - - +*/ /obj/admins/proc/spawn_atom(var/object as text) set category = "Debug" set desc= "(atom path) Spawn an atom" @@ -2177,14 +2116,16 @@ var/showadminmessages = 1 /obj/admins/proc/edit_memory(var/mob/M in world) - set category = "Special Verbs" - set desc = "Edit traitor's objectives" - set name = "Traitor Objectives" + set category = "Admin" + set desc = "Edit mobs's memory and role" + set name = "Edit mind" if (!M.mind) usr << "Sorry, this mob have no mind!" M.mind.edit_memory() + + /obj/admins/proc/toggletintedweldhelmets() set category = "Debug" set desc="Reduces view range when wearing welding helmets" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 1158794a47a..c4c8d9b3f42 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -115,14 +115,17 @@ verbs += /obj/admins/proc/votekill //abort vote verbs += /client/proc/give_spell - verbs += /client/proc/cmd_admin_alienize - verbs += /client/proc/cmd_admin_changelinginize + verbs += /obj/admins/proc/edit_memory + verbs += /obj/admins/proc/edit_player + verbs += /client/proc/cmd_admin_dress + //verbs += /client/proc/cmd_admin_alienize + //verbs += /client/proc/cmd_admin_changelinginize //verbs += /client/proc/cmd_admin_abominize // -- TLE - verbs += /client/proc/cmd_admin_monkeyize - verbs += /client/proc/cmd_admin_robotize - verbs += /client/proc/make_cultist // -- TLE + //verbs += /client/proc/cmd_admin_monkeyize + //verbs += /client/proc/cmd_admin_robotize + //verbs += /client/proc/make_cultist // -- TLE verbs += /client/proc/cmd_admin_ninjafy //N - verbs += /client/proc/makepAI // -- TLE + //verbs += /client/proc/makepAI // -- TLE verbs += /client/proc/respawn_character //N verbs += /client/proc/Getmob @@ -252,14 +255,17 @@ verbs += /obj/admins/proc/votekill //abort vote verbs += /client/proc/give_spell - verbs += /client/proc/cmd_admin_alienize - verbs += /client/proc/cmd_admin_changelinginize + verbs += /obj/admins/proc/edit_memory + verbs += /obj/admins/proc/edit_player + verbs += /client/proc/cmd_admin_dress + //verbs += /client/proc/cmd_admin_alienize + //verbs += /client/proc/cmd_admin_changelinginize //verbs += /client/proc/cmd_admin_abominize // -- TLE - verbs += /client/proc/cmd_admin_monkeyize - verbs += /client/proc/cmd_admin_robotize - verbs += /client/proc/make_cultist // -- TLE + //verbs += /client/proc/cmd_admin_monkeyize + //verbs += /client/proc/cmd_admin_robotize + //verbs += /client/proc/make_cultist // -- TLE verbs += /client/proc/cmd_admin_ninjafy //N - verbs += /client/proc/makepAI // -- TLE + //verbs += /client/proc/makepAI // -- TLE verbs += /client/proc/respawn_character //N verbs += /client/proc/Getmob @@ -385,11 +391,13 @@ verbs += /obj/admins/proc/vmode //start vote verbs += /obj/admins/proc/votekill //abort vote + verbs += /obj/admins/proc/edit_memory + verbs += /obj/admins/proc/edit_player //verbs += /client/proc/cmd_admin_alienize //verbs += /client/proc/cmd_admin_changelinginize - //verbs += /client/proc/cmd_admin_abominize // -- TLE - verbs += /client/proc/cmd_admin_monkeyize - verbs += /client/proc/cmd_admin_robotize + //verbs += /client/proc/cmd_admin_abominize // -- TLE + //verbs += /client/proc/cmd_admin_monkeyize + //verbs += /client/proc/cmd_admin_robotize //verbs += /client/proc/make_cultist // -- TLE //verbs += /client/proc/cmd_admin_ninjafy //N verbs += /client/proc/respawn_character //N @@ -544,11 +552,13 @@ verbs += /obj/admins/proc/vmode //start vote verbs += /obj/admins/proc/votekill //abort vote + verbs += /obj/admins/proc/edit_memory + verbs += /obj/admins/proc/edit_player //verbs += /client/proc/cmd_admin_alienize //verbs += /client/proc/cmd_admin_changelinginize //verbs += /client/proc/cmd_admin_abominize // -- TLE - verbs += /client/proc/cmd_admin_monkeyize - verbs += /client/proc/cmd_admin_robotize + //verbs += /client/proc/cmd_admin_monkeyize + //verbs += /client/proc/cmd_admin_robotize //verbs += /client/proc/make_cultist // -- TLE //verbs += /client/proc/cmd_admin_ninjafy //N verbs += /client/proc/respawn_character //N @@ -693,6 +703,8 @@ verbs += /obj/admins/proc/vmode //start vote verbs += /obj/admins/proc/votekill //abort vote + //verbs += /obj/admins/proc/edit_memory + verbs += /obj/admins/proc/edit_player //verbs += /client/proc/cmd_admin_alienize //verbs += /client/proc/cmd_admin_changelinginize //verbs += /client/proc/cmd_admin_abominize // -- TLE @@ -837,6 +849,8 @@ verbs += /obj/admins/proc/vmode //start vote verbs += /obj/admins/proc/votekill //abort vote + //verbs += /obj/admins/proc/edit_memory + verbs += /obj/admins/proc/edit_player //verbs += /client/proc/cmd_admin_alienize //verbs += /client/proc/cmd_admin_changelinginize //verbs += /client/proc/cmd_admin_abominize // -- TLE @@ -965,6 +979,8 @@ verbs += /obj/admins/proc/vmode //start vote verbs += /obj/admins/proc/votekill //abort vote + //verbs += /obj/admins/proc/edit_memory + verbs += /obj/admins/proc/edit_player //verbs += /client/proc/cmd_admin_alienize //verbs += /client/proc/cmd_admin_changelinginize //verbs += /client/proc/cmd_admin_abominize // -- TLE @@ -1134,14 +1150,17 @@ verbs -= /obj/admins/proc/votekill //abort vote verbs -= /client/proc/give_spell - verbs -= /client/proc/cmd_admin_alienize - verbs -= /client/proc/cmd_admin_changelinginize + verbs -= /obj/admins/proc/edit_memory + verbs -= /obj/admins/proc/edit_player + verbs -= /client/proc/cmd_admin_dress + //verbs -= /client/proc/cmd_admin_alienize + //verbs -= /client/proc/cmd_admin_changelinginize //verbs -= /client/proc/cmd_admin_abominize // -- TLE - verbs -= /client/proc/cmd_admin_monkeyize - verbs -= /client/proc/cmd_admin_robotize - verbs -= /client/proc/make_cultist // -- TLE + //verbs -= /client/proc/cmd_admin_monkeyize + //verbs -= /client/proc/cmd_admin_robotize + //verbs -= /client/proc/make_cultist // -- TLE verbs -= /client/proc/cmd_admin_ninjafy //N - verbs -= /client/proc/makepAI + //verbs -= /client/proc/makepAI verbs -= /client/proc/respawn_character //N verbs -= /client/proc/Getmob diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 9f84d5451cb..4406ae000c1 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -191,7 +191,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M:Alienize() else alert("Invalid mob") - +/* /client/proc/cmd_admin_monkeyize(var/mob/M in world) set category = "Fun" set name = "Make Monkey" @@ -223,7 +223,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.mind.special_role = "Changeling" else alert("Invalid mob") - +*/ /* /client/proc/cmd_admin_abominize(var/mob/M in world) set category = null @@ -236,11 +236,12 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that return if(istype(M, /mob/living/carbon/human)) log_admin("[key_name(src)] has made [M.key] an abomination.") - /* - spawn(10) - M.make_abomination() - */ + + // spawn(10) + // M.make_abomination() + */ +/* /client/proc/make_cultist(var/mob/M in world) // -- TLE, modified by Urist set category = "Fun" set name = "Make Cultist" @@ -279,6 +280,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.mind.special_role = "Cultist" ticker.mode.cult += M.mind src << "Made [M] a cultist." +*/ /client/proc/cmd_debug_del_all() set category = "Debug" @@ -323,3 +325,93 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that alert("Invalid ID card") else alert("Invalid mob") + +/client/proc/cmd_admin_dress(var/mob/living/carbon/human/M in world) + set category = "Fun" + set name = "Select equipment" + if(!ishuman(M)) + alert("Invalid mob") + return + //log_admin("[key_name(src)] has alienized [M.key].") + var/list/dresspacks = list( + "strip", + "tournament standard", + "tournament gangster", + "tournament chef", + "tournament janitor", + ) + var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in dresspacks + if (isnull(dresscode)) + return + for (var/obj/item/I in M) + if (istype(I, /obj/item/weapon/implant)) + continue + del(I) + switch(dresscode) + if ("strip") + //do nothing + if ("tournament standard") //we think stunning weapon is too overpowered to use it on tournaments. --rastaf0 + M.equip_if_possible(new /obj/item/clothing/under/color/blue(M), M.slot_w_uniform) + M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes) + + M.equip_if_possible(new /obj/item/clothing/suit/armor/vest(M), M.slot_wear_suit) + M.equip_if_possible(new /obj/item/clothing/head/helmet/thunderdome(M), M.slot_head) + + M.equip_if_possible(new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(M), M.slot_r_hand) + M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_l_hand) + M.equip_if_possible(new /obj/item/weapon/smokebomb(M), M.slot_r_store) + + + if ("tournament gangster") //gangster are supposed to fight each other. --rastaf0 + M.equip_if_possible(new /obj/item/clothing/under/det(M), M.slot_w_uniform) + M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes) + + M.equip_if_possible(new /obj/item/clothing/suit/det_suit(M), M.slot_wear_suit) + M.equip_if_possible(new /obj/item/clothing/glasses/thermal/monocle(M), M.slot_glasses) + M.equip_if_possible(new /obj/item/clothing/head/det_hat(M), M.slot_head) + + M.equip_if_possible(new /obj/item/weapon/cloaking_device(M), M.slot_r_store) + + M.equip_if_possible(new /obj/item/weapon/gun/projectile(M), M.slot_r_hand) + M.equip_if_possible(new /obj/item/ammo_magazine(M), M.slot_l_store) + + if ("tournament chef") //Steven Seagal FTW + M.equip_if_possible(new /obj/item/clothing/under/rank/chef(M), M.slot_w_uniform) + M.equip_if_possible(new /obj/item/clothing/suit/chef(M), M.slot_wear_suit) + M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes) + M.equip_if_possible(new /obj/item/clothing/head/chefhat(M), M.slot_head) + + + M.equip_if_possible(new /obj/item/weapon/kitchen/rollingpin(M), M.slot_r_hand) + M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_l_hand) + M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_r_store) + M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_s_store) + + if ("tournament janitor") + M.equip_if_possible(new /obj/item/clothing/under/rank/janitor(M), M.slot_w_uniform) + M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes) + var/obj/item/weapon/storage/backpack/backpack = new(M) + for(var/obj/item/I in backpack) + del(I) + M.equip_if_possible(backpack, M.slot_back) + + M.equip_if_possible(new /obj/item/weapon/mop(M), M.slot_r_hand) + var/obj/item/weapon/reagent_containers/glass/bucket/bucket = new(M) + bucket.reagents.add_reagent("water", 70) + M.equip_if_possible(bucket, M.slot_l_hand) + + M.equip_if_possible(new /obj/item/weapon/chem_grenade/cleaner(M), M.slot_r_store) + M.equip_if_possible(new /obj/item/weapon/chem_grenade/cleaner(M), M.slot_l_store) + M.equip_if_possible(new /obj/item/stack/tile/steel(M), M.slot_in_backpack) + M.equip_if_possible(new /obj/item/stack/tile/steel(M), M.slot_in_backpack) + M.equip_if_possible(new /obj/item/stack/tile/steel(M), M.slot_in_backpack) + M.equip_if_possible(new /obj/item/stack/tile/steel(M), M.slot_in_backpack) + M.equip_if_possible(new /obj/item/stack/tile/steel(M), M.slot_in_backpack) + M.equip_if_possible(new /obj/item/stack/tile/steel(M), M.slot_in_backpack) + M.equip_if_possible(new /obj/item/stack/tile/steel(M), M.slot_in_backpack) + + var/obj/mopbucket/mopbucket = new(M.loc) + mopbucket.reagents.add_reagent("water", 100) + + M.update_clothing() + return \ No newline at end of file diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index fc9aef2d8a8..f2f27470b88 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -9,7 +9,7 @@ return for(var/mob/living/carbon/human/H in world) if(H.stat == 2 || !(H.client)) continue - if(checktraitor(H)) continue + if(is_special_character(H)) continue ticker.mode.equip_traitor(H) ticker.mode.traitors += H.mind diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 0745f68329b..8490d86ca33 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -651,14 +651,14 @@ Traitors and the like can also be revived with the previous role mostly intact. /client/proc/cmd_admin_list_occ() set category = "Admin" - set name = "List OOC" + set name = "List free slots" if (!authenticated || !holder) src << "Only administrators may use this command." return for(var/t in occupations) - src << "[t]
" + src << "[t]: [occupations[t]]" /client/proc/cmd_admin_explosion(atom/O as obj|mob|turf in world) set category = "Special Verbs" @@ -889,8 +889,7 @@ Traitors and the like can also be revived with the previous role mostly intact. set category = "Special Verbs" set name = "Attack Log" - //var/list/L = M.get_contents() - usr << text("\red Attack Log äëß []", mob) + usr << text("\red Attack Log for []", mob) for(var/t in M.attack_log) - usr << "[t]" + usr << t diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index d7b13222178..09e31c3a61c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -203,3 +203,19 @@ bruteloss += brute fireloss += burn src.updatehealth() + +/mob/living/proc/revive() + //src.fireloss = 0 + src.toxloss = 0 + //src.bruteloss = 0 + src.oxyloss = 0 + src.paralysis = 0 + src.stunned = 0 + src.weakened =0 + //src.health = 100 + src.heal_overall_damage(1000, 1000) + src.buckled = initial(src.buckled) + src.handcuffed = initial(src.handcuffed) + if(src.stat > 1) src.stat=0 + ..() + return \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index b25c8c12923..6f277f8d987 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -106,7 +106,7 @@ src << "You've lost power!" // world << "DEBUG CODE TIME! [loc] is the area the AI is sucking power from" - if (!checktraitor(src)) + if (!is_special_character(src)) src.set_zeroth_law("") src.clear_supplied_laws() var/time = time2text(world.realtime,"hh:mm:ss") diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm index 1fe9d6908c6..6a26a5a1721 100644 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ b/code/modules/mob/living/silicon/robot/laws.dm @@ -68,7 +68,7 @@ if (length(temp) > 0) laws.ion[index] = temp - if (!checktraitor(src) || mind.original != src) + if (!is_special_character(src) || mind.original != src) temp = master.zeroth laws.zeroth = temp diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 2033ecc568f..6a8d7eff04e 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -439,7 +439,7 @@ // attack with hand - remove cell (if cover open) or interact with the APC /obj/machinery/power/apc/attack_hand(mob/user) - if (!can_use()) + if (!can_use(user)) return src.add_fingerprint(user) if(opened && (!istype(user, /mob/living/silicon))) @@ -704,26 +704,26 @@ src.aidisabled = 0 src.updateDialog() -/obj/machinery/power/apc/proc/can_use() //used by attack_hand() and Topic() - if (usr.stat) - usr << "\red You must be conscious to use this [src]!" +/obj/machinery/power/apc/proc/can_use(mob/user as mob) //used by attack_hand() and Topic() + if (user.stat) + user << "\red You must be conscious to use this [src]!" return 0 - if ( ! (istype(usr, /mob/living/carbon/human) || \ - istype(usr, /mob/living/silicon) || \ - istype(usr, /mob/living/carbon/monkey) /*&& ticker && ticker.mode.name == "monkey"*/) ) - usr << "\red You don't have the dexterity to use this [src]!" - usr << browse(null, "window=apc") - usr.machine = null + if ( ! (istype(user, /mob/living/carbon/human) || \ + istype(user, /mob/living/silicon) || \ + istype(user, /mob/living/carbon/monkey) /*&& ticker && ticker.mode.name == "monkey"*/) ) + user << "\red You don't have the dexterity to use this [src]!" + user << browse(null, "window=apc") + user.machine = null return 0 - if(usr.restrained()) - usr << "\red You must have free hands to use this [src]" + if(user.restrained()) + user << "\red You must have free hands to use this [src]" return 0 - if(usr.lying) - usr << "\red You must stand to use this [src]!" + if(user.lying) + user << "\red You must stand to use this [src]!" return 0 - if (istype(usr, /mob/living/silicon)) - var/mob/living/silicon/ai/AI = usr - var/mob/living/silicon/robot/robot = usr + if (istype(user, /mob/living/silicon)) + var/mob/living/silicon/ai/AI = user + var/mob/living/silicon/robot/robot = user if ( \ src.aidisabled || \ malfhack && istype(malfai) && \ @@ -732,28 +732,28 @@ (istype(robot) && (robot in malfai.connected_robots)) \ ) \ ) - usr << "\red \The [src] have AI control disabled!" - usr << browse(null, "window=apc") - usr.machine = null + user << "\red \The [src] have AI control disabled!" + user << browse(null, "window=apc") + user.machine = null return 0 else - if ((!in_range(src, usr) || !istype(src.loc, /turf))) - usr << browse(null, "window=apc") - usr.machine = null + if ((!in_range(src, user) || !istype(src.loc, /turf))) + user << browse(null, "window=apc") + user.machine = null return 0 - var/mob/living/carbon/human/H = usr + var/mob/living/carbon/human/H = user if (istype(H)) if(H.brainloss >= 60) for(var/mob/M in viewers(src, null)) M << "\red [H] stares cluelessly at [src] and drools." return 0 else if(prob(H.brainloss)) - usr << "\red You momentarily forget how to use [src]." + user << "\red You momentarily forget how to use [src]." return 0 return 1 /obj/machinery/power/apc/Topic(href, href_list) - if (!can_use()) + if (!can_use(usr)) return src.add_fingerprint(usr) usr.machine = src diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 4045ede6b7c45c8c6c71734e8c0162d7046bdc38..bbe3270f88023ccdad9b71e57f79e5d9b1e3b3c9 100644 GIT binary patch delta 19344 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 VVNKa1<0Ak%JooszJ=lGW^&bh%-c0}i delta 18243 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