From 640ce4fd5c28955d85c14ed0e6887e7dee0ec610 Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Wed, 26 Sep 2012 20:10:58 +1000 Subject: [PATCH] WIP mergefixes Signed-off-by: Cael_Aislinn --- baystation12.dme | 1 + code/controllers/configuration.dm | 7 +- code/defines/procs/gamehelpers.dm | 5 + code/game/jobs/whitelist.dm | 4 +- code/game/objects/items/devices/uplinks.dm | 381 --------------------- code/game/verbs/ooc.dm | 18 +- code/game/verbs/who.dm | 10 - code/modules/admin/admin.dm | 203 +++-------- code/modules/admin/admin_verbs.dm | 74 ++-- code/modules/admin/verbs/adminpm.dm | 145 +------- code/modules/client/client defines.dm | 66 ---- code/modules/client/client procs.dm | 7 +- code/modules/mob/living/login.dm | 66 ---- code/modules/paperwork/paper.dm | 303 ---------------- 14 files changed, 125 insertions(+), 1165 deletions(-) diff --git a/baystation12.dme b/baystation12.dme index 9032f3da7e1..8d4b0ce236d 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1010,6 +1010,7 @@ #include "code\modules\mob\living\blob\blob.dm" #include "code\modules\mob\living\carbon\carbon.dm" #include "code\modules\mob\living\carbon\carbon_defines.dm" +#include "code\modules\mob\living\carbon\give.dm" #include "code\modules\mob\living\carbon\alien\alien.dm" #include "code\modules\mob\living\carbon\alien\death.dm" #include "code\modules\mob\living\carbon\alien\login.dm" diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 1f99541544c..57cadffa6bd 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -343,7 +343,12 @@ if("tor_ban") ToRban = 1 - if("automute_on") automute_on = 1 if("usealienwhitelist") usealienwhitelist = 1 else + if("automute_on") + automute_on = 1 + + if("usealienwhitelist") + usealienwhitelist = 1 + else diary << "Unknown setting in configuration: '[name]'" else if(type == "game_options") diff --git a/code/defines/procs/gamehelpers.dm b/code/defines/procs/gamehelpers.dm index c182249a242..26fdf31491b 100644 --- a/code/defines/procs/gamehelpers.dm +++ b/code/defines/procs/gamehelpers.dm @@ -274,3 +274,8 @@ proc/isInSight(var/atom/A, var/atom/B) if(M.ckey == lowertext(key)) return M return null + +proc/check_can_reach(atom/user, atom/target) + if(!in_range(user,target)) + return 0 + return CanReachThrough(get_turf(user), get_turf(target), target) diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index 1f0463e3191..1f493857d09 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -26,7 +26,9 @@ proc/load_alienwhitelist() /proc/is_alien_whitelisted(mob/M, var/species) if(!alien_whitelist) return 0 - if((M.client) && (M.client.holder) && (M.client.holder.level) && (M.client.holder.level >= 5)) return 1 if(M && species) + if((M.client) && (M.client.holder) && (M.client.holder.level) && (M.client.holder.level >= 5)) + return 1 + if(M && species) for (var/s in alien_whitelist) if(findtext(s,"[M.ckey] - [species]")) return 1 diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 6c9f58a5885..18baaefa237 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -1,380 +1,3 @@ -<<<<<<< HEAD -//This could either be split into the proper DM files or placed somewhere else all together, but it'll do for now -Nodrak - -/* - -A list of items and costs is stored under the datum of every game mode, alongside the number of crystals, and the welcoming message. - -*/ - -/obj/item/device/uplink - var/welcome // Welcoming menu message - var/items // List of items - var/item_data // raw item text - var/list/ItemList // Parsed list of items - var/uses // Numbers of crystals - // List of items not to shove in their hands. - var/list/NotInHand = list(/obj/machinery/singularity_beacon/syndicate) - -/obj/item/device/uplink/New() - welcome = ticker.mode.uplink_welcome - if(!item_data) - items = dd_replacetext(ticker.mode.uplink_items, "\n", "") // Getting the text string of items - else - items = dd_replacetext(item_data) - ItemList = dd_text2list(src.items, ";") // Parsing the items text string - uses = ticker.mode.uplink_uses - -//Let's build a menu! -/obj/item/device/uplink/proc/generate_menu() - - var/dat = "[src.welcome]
" - dat += "Tele-Crystals left: [src.uses]
" - dat += "
" - dat += "Request item:
" - dat += "Each item costs a number of tele-crystals as indicated by the number following their name.

" - - var/cost - var/item - var/name - var/path_obj - var/path_text - var/category_items = 1 //To prevent stupid :P - - for(var/D in ItemList) - var/list/O = stringsplit(D, ":") - if(O.len != 3) //If it is not an actual item, make a break in the menu. - if(O.len == 1) //If there is one item, it's probably a title - dat += "[O[1]]
" - category_items = 0 - else //Else, it's a white space. - if(category_items < 1) //If there were no itens in the last category... - dat += "We apologize, as you could not afford anything from this category.
" - dat += "
" - continue - - path_text = O[1] - cost = text2num(O[2]) - - if(cost>uses) - continue - - path_obj = text2path(path_text) - item = new path_obj() - name = O[3] - del item - - dat += "[name] ([cost])
" - category_items++ - - dat += "Random Item (??)
" - dat += "
" - return dat - -//If 'random' was selected -/obj/item/device/uplink/proc/chooseRandomItem() - var/list/randomItems = list() - - //Sorry for all the ifs, but it makes it 1000 times easier for other people/servers to add or remove items from this list - //Add only items the player can afford: - if(uses > 19) - randomItems.Add("/obj/item/weapon/circuitboard/teleporter") //Teleporter Circuit Board (costs 20, for nuke ops) - - if(uses > 9) - randomItems.Add("/obj/item/toy/syndicateballoon")//Syndicate Balloon - randomItems.Add("/obj/item/weapon/storage/syndie_kit/imp_uplink") //Uplink Implanter - randomItems.Add("/obj/item/weapon/storage/box/syndicate") //Syndicate bundle - - //if(uses > 8) //Nothing... yet. - //if(uses > 7) //Nothing... yet. - - if(uses > 6) - randomItems.Add("/obj/item/weapon/aiModule/syndicate") //Hacked AI Upload Module - randomItems.Add("/obj/item/device/radio/beacon/syndicate") //Singularity Beacon - - if(uses > 5) - randomItems.Add("/obj/item/weapon/gun/projectile") //Revolver - - if(uses > 4) - randomItems.Add("/obj/item/weapon/gun/energy/crossbow") //Energy Crossbow - randomItems.Add("/obj/item/device/powersink") //Powersink - - if(uses > 3) - randomItems.Add("/obj/item/weapon/melee/energy/sword") //Energy Sword - randomItems.Add("/obj/item/clothing/mask/gas/voice") //Voice Changer - randomItems.Add("/obj/item/device/chameleon") //Chameleon Projector - - if(uses > 2) - randomItems.Add("/obj/item/weapon/storage/emp_kit") //EMP Grenades - randomItems.Add("/obj/item/weapon/pen/paralysis") //Paralysis Pen - randomItems.Add("/obj/item/weapon/cartridge/syndicate") //Detomatix Cartridge - randomItems.Add("/obj/item/clothing/under/chameleon") //Chameleon Jumpsuit - randomItems.Add("/obj/item/weapon/card/id/syndicate") //Agent ID Card - randomItems.Add("/obj/item/weapon/card/emag") //Cryptographic Sequencer - randomItems.Add("/obj/item/weapon/storage/syndie_kit/space") //Syndicate Space Suit - randomItems.Add("/obj/item/device/encryptionkey/binary") //Binary Translator Key - randomItems.Add("/obj/item/weapon/storage/syndie_kit/imp_freedom") //Freedom Implant - randomItems.Add("/obj/item/clothing/glasses/thermal/syndi") //Thermal Imaging Goggles - - if(uses > 1) -/* - var/list/usrItems = usr.get_contents() //Checks to see if the user has a revolver before giving ammo - var/hasRevolver = 0 - for(var/obj/I in usrItems) //Only add revolver ammo if the user has a gun that can shoot it - if(istype(I,/obj/item/weapon/gun/projectile)) - hasRevolver = 1 - - if(hasRevolver) randomItems.Add("/obj/item/ammo_magazine/a357") //Revolver ammo -*/ - randomItems.Add("/obj/item/ammo_magazine/a357") //Revolver ammo - randomItems.Add("/obj/item/clothing/shoes/syndigaloshes") //No-Slip Syndicate Shoes - randomItems.Add("/obj/item/weapon/plastique") //C4 - - if(uses > 0) - randomItems.Add("/obj/item/weapon/soap/syndie") //Syndicate Soap - randomItems.Add("/obj/item/weapon/storage/toolbox/syndicate") //Syndicate Toolbox - - if(!randomItems.len) - del(randomItems) - return 0 - else - var/buyItem = pick(randomItems) - - switch(buyItem) //Ok, this gets a little messy, sorry. - if("/obj/item/weapon/circuitboard/teleporter") - uses -= 20 - if("/obj/item/toy/syndicateballoon" , "/obj/item/weapon/storage/syndie_kit/imp_uplink" , "/obj/item/weapon/storage/box/syndicate") - uses -= 10 - if("/obj/item/weapon/aiModule/syndicate" , "/obj/item/device/radio/beacon/syndicate") - uses -= 7 - if("/obj/item/weapon/gun/projectile") - uses -= 6 - if("/obj/item/weapon/gun/energy/crossbow" , "/obj/item/device/powersink") - uses -= 5 - if("/obj/item/weapon/melee/energy/sword" , "/obj/item/clothing/mask/gas/voice" , "/obj/item/device/chameleon") - uses -= 4 - if("/obj/item/weapon/storage/emp_kit" , "/obj/item/weapon/pen/paralysis" , "/obj/item/weapon/cartridge/syndicate" , "/obj/item/clothing/under/chameleon" , \ - "/obj/item/weapon/card/id/syndicate" , "/obj/item/weapon/card/emag" , "/obj/item/weapon/storage/syndie_kit/space" , "/obj/item/device/encryptionkey/binary" , \ - "/obj/item/weapon/storage/syndie_kit/imp_freedom" , "/obj/item/clothing/glasses/thermal/syndi") - uses -= 3 - if("/obj/item/ammo_magazine/a357" , "/obj/item/clothing/shoes/syndigaloshes" , "/obj/item/weapon/plastique") - uses -= 2 - if("/obj/item/weapon/soap/syndie" , "/obj/item/weapon/storage/toolbox/syndicate") - uses -= 1 - del(randomItems) - return buyItem - -/obj/item/device/uplink/proc/handleStatTracking(var/boughtItem) -//For stat tracking, sorry for making it so ugly - if(!boughtItem) return - - switch(boughtItem) - if("/obj/item/weapon/circuitboard/teleporter") - feedback_add_details("traitor_uplink_items_bought","TP") - if("/obj/item/toy/syndicateballoon") - feedback_add_details("traitor_uplink_items_bought","BS") - if("/obj/item/weapon/storage/syndie_kit/imp_uplink") - feedback_add_details("traitor_uplink_items_bought","UI") - if("/obj/item/weapon/storage/box/syndicate") - feedback_add_details("traitor_uplink_items_bought","BU") - if("/obj/item/weapon/aiModule/syndicate") - feedback_add_details("traitor_uplink_items_bought","AI") - if("/obj/item/device/radio/beacon/syndicate") - feedback_add_details("traitor_uplink_items_bought","SB") - if("/obj/item/weapon/gun/projectile") - feedback_add_details("traitor_uplink_items_bought","RE") - if("/obj/item/weapon/gun/energy/crossbow") - feedback_add_details("traitor_uplink_items_bought","XB") - if("/obj/item/device/powersink") - feedback_add_details("traitor_uplink_items_bought","PS") - if("/obj/item/weapon/melee/energy/sword") - feedback_add_details("traitor_uplink_items_bought","ES") - if("/obj/item/clothing/mask/gas/voice") - feedback_add_details("traitor_uplink_items_bought","VC") - if("/obj/item/device/chameleon") - feedback_add_details("traitor_uplink_items_bought","CP") - if("/obj/item/weapon/storage/emp_kit") - feedback_add_details("traitor_uplink_items_bought","EM") - if("/obj/item/weapon/pen/paralysis") - feedback_add_details("traitor_uplink_items_bought","PP") - if("/obj/item/weapon/cartridge/syndicate") - feedback_add_details("traitor_uplink_items_bought","DC") - if("/obj/item/clothing/under/chameleon") - feedback_add_details("traitor_uplink_items_bought","CJ") - if("/obj/item/weapon/card/id/syndicate") - feedback_add_details("traitor_uplink_items_bought","AC") - if("/obj/item/weapon/card/emag") - feedback_add_details("traitor_uplink_items_bought","EC") - if("/obj/item/weapon/storage/syndie_kit/space") - feedback_add_details("traitor_uplink_items_bought","SS") - if("/obj/item/device/encryptionkey/binary") - feedback_add_details("traitor_uplink_items_bought","BT") - if("/obj/item/weapon/storage/syndie_kit/imp_freedom") - feedback_add_details("traitor_uplink_items_bought","FI") - if("/obj/item/clothing/glasses/thermal/syndi") - feedback_add_details("traitor_uplink_items_bought","TM") - if("/obj/item/ammo_magazine/a357") - feedback_add_details("traitor_uplink_items_bought","RA") - if("/obj/item/clothing/shoes/syndigaloshes") - feedback_add_details("traitor_uplink_items_bought","SH") - if("/obj/item/weapon/plastique") - feedback_add_details("traitor_uplink_items_bought","C4") - if("/obj/item/weapon/soap/syndie") - feedback_add_details("traitor_uplink_items_bought","SP") - if("/obj/item/weapon/storage/toolbox/syndicate") - feedback_add_details("traitor_uplink_items_bought","ST") - -/obj/item/device/uplink/Topic(href, href_list) - - if (href_list["buy_item"]) - if(href_list["buy_item"] == "random") - var/boughtItem = chooseRandomItem() - if(boughtItem) - href_list["buy_item"] = boughtItem - feedback_add_details("traitor_uplink_items_bought","RN") - return 1 - else - return 0 - - else - if(text2num(href_list["cost"]) > uses) // Not enough crystals for the item - return 0 - - //if(usr:mind && ticker.mode.traitors[usr:mind]) - //var/datum/traitorinfo/info = ticker.mode.traitors[usr:mind] - //info.spawnlist += href_list["buy_item"] - - uses -= text2num(href_list["cost"]) - handleStatTracking(href_list["buy_item"]) //Note: chooseRandomItem handles it's own stat tracking. This proc is not meant for 'random'. - return 1 - - - -// HIDDEN UPLINK - Can be stored in anything but the host item has to have a trigger for it. -/* How to create an uplink in 3 easy steps! - - 1. All obj/item 's have a hidden_uplink var. By default it's null. Give the item one with "new(src)", it must be in it's contents. Feel free to add "uses". - - 2. Code in the triggers. Use check_trigger for this, I recommend closing the item's menu with "usr << browse(null, "window=windowname") if it returns true. - The var/value is the value that will be compared with the var/target. If they are equal it will activate the menu. - - 3. If you want the menu to stay until the users locks his uplink, add an active_uplink_check(mob/user as mob) in your interact/attack_hand proc. - Then check if it's true, if true return. This will stop the normal menu appearing and will instead show the uplink menu. -*/ - -/obj/item/device/uplink/hidden - name = "Hidden Uplink." - desc = "There is something wrong if you're examining this." - var/active = 0 - var/list/purchase_log = list() - -// The hidden uplink MUST be inside an obj/item's contents. -/obj/item/device/uplink/hidden/New() - spawn(2) - if(!istype(src.loc, /obj/item)) - del(src) - ..() - -// Toggles the uplink on and off. Normally this will bypass the item's normal functions and go to the uplink menu, if activated. -/obj/item/device/uplink/hidden/proc/toggle() - active = !active - -// Directly trigger the uplink. Turn on if it isn't already. -/obj/item/device/uplink/hidden/proc/trigger(mob/user as mob) - if(!active) - toggle() - interact(user) - -// Checks to see if the value meets the target. Like a frequency being a traitor_frequency, in order to unlock a headset. -// If true, it accesses trigger() and returns 1. If it fails, it returns false. Use this to see if you need to close the -// current item's menu. -/obj/item/device/uplink/hidden/proc/check_trigger(mob/user as mob, var/value, var/target) - if(value == target) - trigger(user) - return 1 - return 0 - -// Interaction code. Gathers a list of items purchasable from the paren't uplink and displays it. It also adds a lock button. -/obj/item/device/uplink/hidden/proc/interact(mob/user as mob) - - var/dat = "" - dat += src.generate_menu() - dat += "Lock" - dat += "" - user << browse(dat, "window=hidden") - onclose(user, "hidden") - return - -// The purchasing code. -/obj/item/device/uplink/hidden/Topic(href, href_list) - - if (usr.stat || usr.restrained()) - return - - if (!( istype(usr, /mob/living/carbon/human))) - return 0 - - if ((usr.contents.Find(src.loc) || (in_range(src.loc, usr) && istype(src.loc.loc, /turf)))) - usr.machine = src - if(href_list["lock"]) - toggle() - usr << browse(null, "window=hidden") - return 1 - - if(..(href, href_list) == 1) - var/path_obj = text2path(href_list["buy_item"]) - var/obj/I = new path_obj(get_turf(usr)) - if(ishuman(usr)) - var/mob/living/carbon/human/A = usr - A.put_in_any_hand_if_possible(I) - purchase_log += "[usr] ([usr.ckey]) bought [I]." - interact(usr) - return - -// I placed this here because of how relevant it is. -// You place this in your uplinkable item to check if an uplink is active or not. -// If it is, it will display the uplink menu and return 1, else it'll return false. -// If it returns true, I recommend closing the item's normal menu with "user << browse(null, "window=name")" -/obj/item/proc/active_uplink_check(mob/user as mob) - // Activates the uplink if it's active - if(src.hidden_uplink) - if(src.hidden_uplink.active) - src.hidden_uplink.trigger(user) - return 1 - return 0 - -// PRESET UPLINKS -// A collection of preset uplinks. -// -// Includes normal radio uplink, multitool uplink, -// implant uplink (not the implant tool) and a preset headset uplink. - -/obj/item/device/radio/uplink/New() - hidden_uplink = new(src) - icon_state = "radio" - -/obj/item/device/radio/uplink/attack_self(mob/user as mob) - if(hidden_uplink) - hidden_uplink.trigger(user) - -/obj/item/device/multitool/uplink/New() - hidden_uplink = new(src) - -/obj/item/device/multitool/uplink/attack_self(mob/user as mob) - if(hidden_uplink) - hidden_uplink.trigger(user) - -/obj/item/device/radio/headset/uplink - traitor_frequency = 1445 - -/obj/item/device/radio/headset/uplink/New() - ..() - hidden_uplink = new(src) - hidden_uplink.uses = 10 - - - -======= //This could either be split into the proper DM files or placed somewhere else all together, but it'll do for now -Nodrak /* @@ -747,7 +370,3 @@ A list of items and costs is stored under the datum of every game mode, alongsid ..() hidden_uplink = new(src) hidden_uplink.uses = 10 - - - ->>>>>>> remotes/git-svn diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index c6c3fd760e5..6fd9a86e498 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -44,7 +44,21 @@ for (var/client/C) if(C.listen_ooc) - if (src.client.holder && (!src.client.stealth || (C.holder && C.holder.level != 0))) if(!src.client.holder.fakekey || C.holder) if (src.client.holder.rank == "Admin Observer") C << "OOC: [src.key][src.client.holder.fakekey ? "/([src.client.holder.fakekey])" : ""]: [msg]" else if (src.client.holder.level >= 5) C << "OOC: [src.key][src.client.holder.fakekey ? "/([src.client.holder.fakekey])" : ""]: [msg]" else if (src.client.holder.rank == "Retired Admin") C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]" else if (src.client.holder.rank == "Moderator") C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]" else C << "OOC: [src.key][src.client.holder.fakekey ? "/([src.client.holder.fakekey])" : ""]: [msg]" else - C << "OOC: [src.client.holder.fakekey ? src.client.holder.fakekey : src.key]: [msg]" + if (src.client.holder) + if(!src.client.holder.fakekey || C.holder) + + if (src.client.holder.rank == "Admin Observer") + C << "OOC: [src.key][src.client.holder.fakekey ? "/([src.client.holder.fakekey])" : ""]: [msg]" + else if (src.client.holder.level >= 5) + C << "OOC: [src.key][src.client.holder.fakekey ? "/([src.client.holder.fakekey])" : ""]: [msg]" + + else if (src.client.holder.rank == "Retired Admin") + C << "OOC: [src.key][src.client.holder.fakekey ? "/([src.client.holder.fakekey])" : ""]: [msg]" + else if (src.client.holder.rank == "Moderator") + C << "OOC: [src.key][src.client.holder.fakekey ? "/([src.client.holder.fakekey])" : ""]: [msg]" + else + C << "OOC: [src.key][src.client.holder.fakekey ? "/([src.client.holder.fakekey])" : ""]: [msg]" + else + C << "OOC: [src.client.holder.fakekey ? "/([src.client.holder.fakekey])" : ""]: [msg]" else C << "OOC: [src.key]: [msg]" diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index e4cd1acd471..c3b9e40c66d 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -26,21 +26,11 @@ proc/get_all_admin_clients() var/list/peeps = list() for (var/client/C in client_list) -<<<<<<< HEAD - var/entry = "" - if (C.stealth && !usr.client.holder) - entry += "\t[C.fakekey]" - else - entry += "\t[C.key][C.stealth ? " (as [C.fakekey])" : ""]" - - if(usr.client.holder && (usr.client.holder.level != 0)) -======= var/entry = "\t" if(usr.client.holder) entry += "[C.key]" if(C.holder && C.holder.fakekey) entry += " (as [C.holder.fakekey])" ->>>>>>> remotes/git-svn var/mob/M = C.mob entry += " - Playing as [M.real_name]" switch(M.stat) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index e750b3e5f11..c9080f8872c 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -9,23 +9,12 @@ var/global/floorIsLava = 0 log_adminwarn(rendered) for (var/client/C in admin_list) if (C) - 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 = "ADMIN LOG: [text]" - log_adminwarn(rendered) - for (var/client/C in admin_list) - if (C) - if(!C.STFU_atklog) - var/msg = rendered - C << msg + 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 ///////////////////////////////////////////////////////////////////////////////////////////////Panels @@ -160,9 +149,6 @@ var/global/floorIsLava = 0 body += "Thunderdome 2 | " body += "Thunderdome Admin | " body += "Thunderdome Observer | " - body += "Grant Tajaran (Temp) | " - body += "Grant Soghun (Temp) | " - body += "Grant Skrell (Temp) | " body += "
" body += "" @@ -176,82 +162,6 @@ var/global/floorIsLava = 0 set name = "Access Newscaster Network" set desc = "Allows you to view, add and edit news feeds." -/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 = "Info on [key]" - dat += "" - - 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.
" - 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 += "[I.content] by [I.author] ([I.rank]) on [I.timestamp] " - if(I.author == usr.key) - dat += "Remove" - dat += "

" - if(update_file) info << infos - - dat += "
" - dat += "Add Comment
" - - dat += "" - 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() if (!istype(src,/datum/admins)) src = usr.client.holder if (!istype(src,/datum/admins)) @@ -452,21 +362,6 @@ var/global/floorIsLava = 0 dat += "" usr << browse(dat, "window=ban;size=400x400") -/obj/admins/proc/PlayerNotes() - var/dat = "Player notes
" - - 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("") - dat += "
[t]
" - usr << browse(dat, "window=player_notes;size=400x400") - /datum/admins/proc/Game() var/dat @@ -505,10 +400,6 @@ var/global/floorIsLava = 0 dat += "Create Turf
" if(lvl >= 5) dat += "Create Mob
" - if(lvl >= 3 ) - dat += "
Edit Airflow Settings
" - dat += "Edit Plasma Settings
" - dat += "Choose a default ZAS setting
" // if(lvl == 6 ) usr << browse(dat, "window=admin2;size=210x180") return @@ -577,7 +468,6 @@ var/global/floorIsLava = 0 Irradiate the station
Trigger a Prison Break
Trigger a Virus Outbreak
-Trigger the Emergency Response Team
Spawn an Immovable Rod
Toggle a "lights out" event
Spawn an Ion Storm
@@ -608,7 +498,6 @@ var/global/floorIsLava = 0 Move Alien Dinghy
Move Mining Shuttle
Break all lights
-Trigger Electrical Storm
" Fix all lights
Best Friend AI
The floor is lava! (DANGEROUS)
"} @@ -638,50 +527,11 @@ 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 += "
Voting

\n" - - if(lvl > 0) - dat += {" -Abort Vote
-Start Vote
-Toggle Voting
-"} - - 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 /datum/admins/proc/restart() set category = "Server" @@ -1088,6 +938,47 @@ var/global/floorIsLava = 0 if(!ai_number) usr << "No AIs located" //Just so you know the thing is actually working and not just ignoring you. +/datum/admins/proc/show_skills(var/mob/living/carbon/human/M as mob in world) + set category = "Admin" + set name = "Show Skills" + + if (!istype(src,/datum/admins)) + src = usr.client.holder + if (!istype(src,/datum/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() + +/datum/admins/proc/PlayerNotes() + var/dat = "Player notes
" + + 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("") + dat += "
[t]
" + usr << browse(dat, "window=player_notes;size=400x400") + // // //ALL DONE diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index c7e6e33c0e3..81293488aa7 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -107,80 +107,54 @@ if (holder) //THE BELOW handles granting powers. The above is for special cases only! holder.owner = src + //---- Special Admin Ranks + + //Retired admin + if (holder.level == -3) + verbs += /client/proc/cmd_admin_say + verbs += /client/proc/cmd_mod_say + return + //Admin Observer - if (holder.level >= -1) + 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) - + if (holder.level == 0) verbs += /client/proc/cmd_admin_pm_context verbs += /client/proc/cmd_admin_pm_panel verbs += /client/proc/hide_verbs verbs += /client/proc/deadmin_self - 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 += /datum/admins/proc/show_skills verbs += /client/proc/mod_panel + verbs += /client/proc/admin_ghost + return - // - //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 + //---- Full Admin Ranks + if (holder.level > 0) + verbs += /client/proc/cmd_admin_say + verbs += /client/proc/cmd_mod_say + 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/check_ai_laws - //verbs += /client/proc/cmd_admin_prison --Merged with player panel - //verbs += /datum/admins/proc/unprison --Merged with player panel - else return - - - else return //Temporary Admin if (holder.level >= 1) - verbs += /obj/admins/proc/delay //game start delay - verbs += /obj/admins/proc/immreboot //immediate reboot - verbs += /obj/admins/proc/restart //restart + verbs += /datum/admins/proc/delay //game start delay + verbs += /datum/admins/proc/immreboot //immediate reboot + verbs += /datum/admins/proc/restart //restart verbs += /client/proc/cmd_admin_check_contents verbs += /client/proc/cmd_admin_create_centcom_report verbs += /client/proc/toggle_hear_deadcast verbs += /client/proc/toggle_hear_radio verbs += /client/proc/deadmin_self - //verbs += /client/proc/cmd_admin_attack_log --Merged with view variables + verbs += /client/proc/playernotes //Admin Candidate if (holder.level >= 2) @@ -464,10 +438,12 @@ verbs -= /client/proc/mod_panel verbs -= /client/proc/admin_deny_shuttle verbs -= /client/proc/playernotes - verbs -= /obj/admins/proc/show_skills + verbs -= /datum/admins/proc/show_skills verbs -= /client/proc/Report verbs -= /client/proc/display_admin_reports verbs -= /client/proc/editappear + verbs -= /client/proc/cmd_mod_say + verbs -= /client/proc/playernotes return /client/proc/admin_ghost() diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 7e729e121af..9464ca0ab7f 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -1,125 +1,3 @@ -<<<<<<< HEAD -//allows right clicking mobs to send an admin PM to their client, forwards the selected mob's client to cmd_admin_pm -/client/proc/cmd_admin_pm_context(mob/M as mob in mob_list) - set category = null - set name = "Admin PM Mob" - if(!holder) - src << "Error: Admin-PM-Context: Only administrators may use this command." - return - if( !ismob(M) || !M.client ) return - cmd_admin_pm(M.client,null) - feedback_add_details("admin_verb","APMM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -//shows a list of clients we could send PMs to, then forwards our choice to cmd_admin_pm -/client/proc/cmd_admin_pm_panel() - set category = "Admin" - set name = "Admin PM" - if(!holder) - src << "Error: Admin-PM-Panel: Only administrators may use this command." - return - var/list/client/targets[0] - for(var/client/T) - if(T.mob) - if(istype(T.mob, /mob/new_player)) - targets["(New Player) - [T]"] = T - else if(istype(T.mob, /mob/dead/observer)) - targets["[T.mob.name](Ghost) - [T]"] = T - else - targets["[T.mob.real_name](as [T.mob.name]) - [T]"] = T - else - targets["(No Mob) - [T]"] = T - var/list/sorted = sortList(targets) - var/target = input(src,"To whom shall we send a message?","Admin PM",null) in sorted|null - cmd_admin_pm(targets[target],null) - feedback_add_details("admin_verb","APM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -//takes input from cmd_admin_pm_context, cmd_admin_pm_panel or /client/Topic and sends them a PM. -//Fetching a message if needed. src is the sender and C is the target client -/client/proc/cmd_admin_pm(var/client/C, var/msg) - if(src.muted_adminhelp) - src << "Error: Admin-PM: You are unable to use admin PM-s (muted by admins)." - return - - if( !C || !istype(C,/client) ) - if(holder) src << "Error: Admin-PM: Client not found." - else adminhelp(msg) //admin we are replying to left. adminhelp instead - return - - //get message text, limit it's length.and clean/escape html - if(!msg) - msg = input(src,"Message:", "Private message to [C.key]") as text|null - - if(!msg) return - if(!C) - if(holder) src << "Error: Admin-PM: Client not found." - else adminhelp(msg) //admin we are replying to has vanished, adminhelp instead - return - - if (src.handle_spam_prevention(msg,MUTE_ADMINHELP)) - return - - //clean the message if it's not sent by a GA or GM - if( !holder || !(holder.rank in list("Game Admin", "Game Master")) ) - msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) - if(!msg) return - - if(C.holder) - if(holder) //both are admins - if(holder.rank == "Moderator") //If moderator - C << "Mod PM from-[key_name(src, C, 1)]: [msg]" - src << "Mod PM to-[key_name(C, src, 1)]: [msg]" - else - C << "Admin PM from-[key_name(src, C, 1)]: [msg]" - src << "Admin PM to-[key_name(C, src, 1)]: [msg]" - - else //recipient is an admin but sender is not - C << "Reply PM from-[key_name(src, C, 1)]: [msg]" - src << "PM to-Admins: [msg]" - - //play the recieving admin the adminhelp sound (if they have them enabled) - if(C.sound_adminhelp) - C << 'sound/effects/adminhelp.ogg' - - else - if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT - if(holder.rank == "Moderator") - C << "Mod PM from-[key_name(src, C, 0)]: [msg]" - C << "Click on the moderators's name to reply." - src << "Mod PM to-[key_name(C, src, 1)]: [msg]" - else - C << "-- Administrator private message --" - C << "Admin PM from-[key_name(src, C, 0)]: [msg]" - C << "Click on the administrator's name to reply." - src << "Admin PM to-[key_name(C, src, 1)]: [msg]" - - //always play non-admin recipients the adminhelp sound - C << 'sound/effects/adminhelp.ogg' - - //AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn - if(config.popup_admin_pm) - spawn() //so we don't hold the caller proc up - var/sender = src - var/sendername = key - var/reply = input(C, msg,"Admin PM from-[sendername]", "") as text|null //show message and await a reply - if(C && reply) - if(sender) - C.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them - else - adminhelp(reply) //sender has left, adminhelp instead - return - - else //neither are admins - src << "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden." - return - - log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]") - - //we don't use message_admins here because the sender/receiver might get it too - for(var/client/X) //there are fewer clients than mobs - if(X.holder && X.key!=key && X.key!=C.key) //check client/X is an admin and isn't the sender or recipient - X << "PM: [key_name(src, X, 0)]->[key_name(C, X, 0)]: \blue [msg]" //inform X -======= //allows right clicking mobs to send an admin PM to their client, forwards the selected mob's client to cmd_admin_pm /client/proc/cmd_admin_pm_context(mob/M as mob in mob_list) set category = null @@ -187,8 +65,12 @@ if(C.holder) if(holder) //both are admins - C << "Admin PM from-[key_name(src, C, 1)]: [msg]" - src << "Admin PM to-[key_name(C, src, 1)]: [msg]" + if(holder.rank == "Moderator") //If moderator + C << "Mod PM from-[key_name(src, C, 1)]: [msg]" + src << "Mod PM to-[key_name(C, src, 1)]: [msg]" + else + C << "Admin PM from-[key_name(src, C, 1)]: [msg]" + src << "Admin PM to-[key_name(C, src, 1)]: [msg]" else //recipient is an admin but sender is not C << "Reply PM from-[key_name(src, C, 1)]: [msg]" @@ -200,10 +82,15 @@ else if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT - C << "-- Administrator private message --" - C << "Admin PM from-[key_name(src, C, 0)]: [msg]" - C << "Click on the administrator's name to reply." - src << "Admin PM to-[key_name(C, src, 1)]: [msg]" + if(holder.rank == "Moderator") + C << "Mod PM from-[key_name(src, C, 0)]: [msg]" + C << "Click on the moderators's name to reply." + src << "Mod PM to-[key_name(C, src, 1)]: [msg]" + else + C << "-- Administrator private message --" + C << "Admin PM from-[key_name(src, C, 0)]: [msg]" + C << "Click on the administrator's name to reply." + src << "Admin PM to-[key_name(C, src, 1)]: [msg]" //always play non-admin recipients the adminhelp sound C << 'sound/effects/adminhelp.ogg' @@ -231,4 +118,4 @@ for(var/client/X) //there are fewer clients than mobs if(X.holder && X.key!=key && X.key!=C.key) //check client/X is an admin and isn't the sender or recipient X << "PM: [key_name(src, X, 0)]->[key_name(C, X, 0)]: \blue [msg]" //inform X ->>>>>>> remotes/git-svn + diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index f0b8235c5ce..015405b2e30 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -1,65 +1,3 @@ -<<<<<<< HEAD -//Some of this is being changed to a datum to cut down on uneccessary variables at the client level. ~Carn -/client - //////////////// - //ADMIN THINGS// - //////////////// - var/obj/admins/holder = null - var/buildmode = 0 - var/stealth = 0 - var/fakekey = null - var/seeprayers = 0 - var/ooccolor = "#b82e00" - - var/muted_ic //can't use 'say' while alive or emotes. - var/muted_ooc //can't speak in ooc - var/muted_deadchat //can't use 'say' while dead or DSAY - var/muted_pray //can't send prayers - var/muted_adminhelp //can't send adminhelps, PM-s or use ASAY - - var/last_message = "" //Contains the last message sent by this client - used to protect against copy-paste spamming. - var/last_message_count = 0 //contins a number of how many times a message identical to last_message was sent. - - var/warned = 0 - var/sound_adminhelp = 0 //If set to 1 this will play a sound when adminhelps are received. - - ///////// - //OTHER// - ///////// - var/listen_ooc = 1 - var/move_delay = 1 - var/moving = null - var/adminobs = null - var/deadchat = 0 - var/changes = 0 - var/area = null - var/played = 0 - var/team = null - var/be_alien = 0 //Check if that guy wants to be an alien - var/be_pai = 1 //Consider client when searching for players to recruit as a pAI - var/activeslot = 1 //Default active slot! - var/STFU_ghosts //80+ people rounds are fun to admin when text flies faster than airport security - var/STFU_radio //80+ people rounds are fun to admin when text flies faster than airport security - var/STFU_atklog - - /////////////// - //SOUND STUFF// - /////////////// - var/canplaysound = 1 - var/ambience_playing= null - var/no_ambi = 0 //Toggle Ambience - var/midis = 1 //Toggle Midis - - //////////// - //SECURITY// - //////////// - var/next_allowed_topic_time = 10 - // comment out the line below when debugging locally to enable the options & messages menu - control_freak = 1 - - - -======= /client //////////////// //ADMIN THINGS// @@ -106,7 +44,3 @@ var/next_allowed_topic_time = 10 // comment out the line below when debugging locally to enable the options & messages menu control_freak = 1 - - - ->>>>>>> remotes/git-svn diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 71719823c26..aeb812dc683 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -103,7 +103,12 @@ host = key world.update_status() - ..() //calls mob.Login() //makejson() if(custom_event_msg && custom_event_msg != "") + //calls mob.Login() + ..() + + //makejson() + + if(custom_event_msg && custom_event_msg != "") src << "

Custom Event

" src << "

A custom event is taking place. OOC Info:

" src << "[html_encode(custom_event_msg)]" diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index 9ebce51a50b..33d5cfc7b31 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -1,69 +1,4 @@ -<<<<<<< HEAD -/mob/living/Login() - ..() - //Mind updates - mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist) - mind.active = 1 //indicates that the mind is currently synced with a client - //Round specific stuff like hud updates - if(ticker && ticker.mode) - switch(ticker.mode.name) - if("sandbox") - CanBuild() - if("revolution") - if((mind in ticker.mode.revolutionaries) || (src.mind in ticker.mode:head_revolutionaries)) - ticker.mode.update_rev_icons_added(src.mind) - if("cult") - if(mind in ticker.mode:cult) - ticker.mode.update_cult_icons_added(src.mind) - if("nuclear emergency") - if(mind in ticker.mode:syndicates) - 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 . - -//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 - /* clones - switch(ticker.mode.name) - if("revolution") - if(src.occupant.mind in ticker.mode:revolutionaries) - ticker.mode:update_all_rev_icons() //So the icon actually appears - if(src.occupant.mind in ticker.mode:head_revolutionaries) - ticker.mode:update_all_rev_icons() - if("nuclear emergency") - if (src.occupant.mind in ticker.mode:syndicates) - ticker.mode:update_all_synd_icons() - if("cult") - if (src.occupant.mind in ticker.mode:cult) - ticker.mode:add_cultist(src.occupant.mind) - ticker.mode:update_all_cult_icons() //So the icon actually appears - */ - - /* Plantpeople - switch(ticker.mode.name) - if ("revolution") - if (podman.mind in ticker.mode:revolutionaries) - ticker.mode:add_revolutionary(podman.mind) - ticker.mode:update_all_rev_icons() //So the icon actually appears - if (podman.mind in ticker.mode:head_revolutionaries) - ticker.mode:update_all_rev_icons() - if ("nuclear emergency") - if (podman.mind in ticker.mode:syndicates) - ticker.mode:update_all_synd_icons() - if ("cult") - if (podman.mind in ticker.mode:cult) - ticker.mode:add_cultist(podman.mind) - ticker.mode:update_all_cult_icons() //So the icon actually appears - if ("changeling") - if (podman.mind in ticker.mode:changelings) - podman.make_changeling() -======= /mob/living/Login() ..() //Mind updates @@ -121,5 +56,4 @@ if ("changeling") if (podman.mind in ticker.mode:changelings) podman.make_changeling() ->>>>>>> remotes/git-svn */ \ No newline at end of file diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 61a516f5c5b..0956239e142 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -1,304 +1,3 @@ -<<<<<<< HEAD -/obj/item/weapon/paper - name = "paper" - gender = PLURAL - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "paper" - throwforce = 0 - w_class = 1.0 - throw_speed = 3 - throw_range = 15 - layer = 4 - pressure_resistance = 1 - slot_flags = SLOT_HEAD - body_parts_covered = HEAD - attack_verb = list("") - - var/info //What's actually written on the paper. - var/info_links //A different version of the paper which includes html links at fields and EOF - var/stamps //The (text for the) stamps on the paper. - var/fields //Amount of user created fields - var/list/stamped - var/rigged = 0 - var/spam_flag = 0 - - var/const/deffont = "Verdana" - var/const/signfont = "Times New Roman" - var/const/crayonfont = "Comic Sans MS" - -/obj/item/weapon/paper/New() - ..() - src.pixel_y = rand(-8, 8) - src.pixel_x = rand(-9, 9) - spawn(2) - if(src.info) - src.overlays += "paper_words" - updateinfolinks() - return - -/obj/item/weapon/paper/update_icon() - if(src.info) - src.overlays += "paper_words" - return - -/obj/item/weapon/paper/examine() - set src in oview(1) - -// ..() //We don't want them to see the dumb "this is a paper" thing every time. - // I didn't like the idea that people can read tiny pieces of paper from across the room. - // Now you need to be next to the paper in order to read it. - if(in_range(usr, src)) - if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon))) - usr << browse("[name][stars(info)][stamps]", "window=[name]") - onclose(usr, "[name]") - else - usr << browse("[name][info][stamps]", "window=[name]") - onclose(usr, "[name]") - else - usr << "It is too far away." - return - -/obj/item/weapon/paper/verb/rename() - set name = "Rename paper" - set category = "Object" - set src in usr - - if ((CLUMSY in usr.mutations) && prob(50)) - usr << "You cut yourself on the paper." - return - var/n_name = input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text - n_name = copytext(n_name, 1, 32) - if ((loc == usr && usr.stat == 0)) - name = "paper[(n_name ? text("- '[n_name]'") : null)]" - add_fingerprint(usr) - return - -/obj/item/weapon/paper/attack_self(mob/living/user as mob) - examine() - if(rigged && (Holiday == "April Fool's Day")) - if(spam_flag == 0) - spam_flag = 1 - playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1) - spawn(20) - spam_flag = 0 - return - -/obj/item/weapon/paper/attack_ai(var/mob/living/silicon/ai/user as mob) - var/dist - if (istype(user) && user.current) //is AI - dist = get_dist(src, user.current) - else //cyborg or AI not seeing through a camera - dist = get_dist(src, user) - if (dist < 2) - usr << browse("[name][info][stamps]", "window=[name]") - onclose(usr, "[name]") - else - usr << browse("[name][stars(info)][stamps]", "window=[name]") - onclose(usr, "[name]") - return - -/obj/item/weapon/paper/proc/addtofield(var/id, var/text, var/links = 0) - var/locid = 0 - var/laststart = 1 - var/textindex = 1 - while(1) // I know this can cause infinite loops and fuck up the whole server, but the if(istart==0) should be safe as fuck - var/istart = 0 - if(links) - istart = findtext(info_links, "", laststart) - else - istart = findtext(info, "", laststart) - - if(istart==0) - return // No field found with matching id - - laststart = istart+1 - locid++ - if(locid == id) - var/iend = 1 - if(links) - iend = findtext(info_links, "", istart) - else - iend = findtext(info, "", istart) - - //textindex = istart+26 - textindex = iend - break - - if(links) - var/before = copytext(info_links, 1, textindex) - var/after = copytext(info_links, textindex) - info_links = before + text + after - else - var/before = copytext(info, 1, textindex) - var/after = copytext(info, textindex) - info = before + text + after - updateinfolinks() - -/obj/item/weapon/paper/proc/updateinfolinks() - info_links = info - var/i = 0 - for(i=1,i<=fields,i++) - addtofield(i, "write", 1) - info_links = info_links + "write" - -/obj/item/weapon/paper/proc/clearpaper() - info = null - stamps = null - stamped = list() - overlays = null - updateinfolinks() - -/obj/item/weapon/paper/proc/parsepencode(var/t, var/obj/item/weapon/pen/P, mob/user as mob, var/iscrayon = 0) -// t = copytext(sanitize(t),1,MAX_MESSAGE_LEN) - - t = dd_replacetext(t, "\[center\]", "
") - t = dd_replacetext(t, "\[/center\]", "
") - t = dd_replacetext(t, "\[br\]", "
") - t = dd_replacetext(t, "\[b\]", "") - t = dd_replacetext(t, "\[/b\]", "") - t = dd_replacetext(t, "\[i\]", "") - t = dd_replacetext(t, "\[/i\]", "") - t = dd_replacetext(t, "\[u\]", "") - t = dd_replacetext(t, "\[/u\]", "") - t = dd_replacetext(t, "\[large\]", "") - t = dd_replacetext(t, "\[/large\]", "") - t = dd_replacetext(t, "\[sign\]", "[user.real_name]") - t = dd_replacetext(t, "\[field\]", "") - - if(!iscrayon) - t = dd_replacetext(t, "\[*\]", "
  • ") - t = dd_replacetext(t, "\[hr\]", "
    ") - t = dd_replacetext(t, "\[small\]", "") - t = dd_replacetext(t, "\[/small\]", "") - t = dd_replacetext(t, "\[list\]", "
      ") - t = dd_replacetext(t, "\[/list\]", "
    ") - - t = "[t]" - else // If it is a crayon, and he still tries to use these, make them empty! - t = dd_replacetext(t, "\[*\]", "") - t = dd_replacetext(t, "\[hr\]", "") - t = dd_replacetext(t, "\[small\]", "") - t = dd_replacetext(t, "\[/small\]", "") - t = dd_replacetext(t, "\[list\]", "") - t = dd_replacetext(t, "\[/list\]", "") - - t = "[t]" - -// t = dd_replacetext(t, "#", "") // Junk converted to nothing! - - //Count the fields - var/laststart = 1 - while(1) - var/i = findtext(t, "", laststart) - if(i==0) - break - laststart = i+1 - fields++ - - return t - - -/obj/item/weapon/paper/proc/openhelp(mob/user as mob) - user << browse({"Pen Help - -
    Crayon&Pen commands

    -
    - \[br\] : Creates a linebreak.
    - \[center\] - \[/center\] : Centers the text.
    - \[b\] - \[/b\] : Makes the text bold.
    - \[i\] - \[/i\] : Makes the text italic.
    - \[u\] - \[/u\] : Makes the text underlined.
    - \[large\] - \[/large\] : Increases the size of the text.
    - \[sign\] : Inserts a signature of your name in a foolproof way.
    - \[field\] : Inserts an invisible field which lets you start type from there. Useful for forms.
    -
    -
    Pen exclusive commands

    - \[small\] - \[/small\] : Decreases the size of the text.
    - \[list\] - \[/list\] : A list.
    - \[*\] : A dot used for lists.
    - \[hr\] : Adds a horizontal rule. - "}, "window=paper_help") - -/obj/item/weapon/paper/Topic(href, href_list) - ..() - if ((usr.stat || usr.restrained())) - return - - if(href_list["write"]) - var/id = href_list["write"] - //var/t = strip_html_simple(input(usr, "What text do you wish to add to " + (id=="end" ? "the end of the paper" : "field "+id) + "?", "[name]", null),8192) as message - var/t = strip_html_simple(input("Enter what you want to write:", "Write", null, null) as message, MAX_MESSAGE_LEN) - var/obj/item/i = usr.get_active_hand() // Check to see if he still got that darn pen, also check if he's using a crayon or pen. - var/iscrayon = 0 - if(!istype(i, /obj/item/weapon/pen)) - if(!istype(i, /obj/item/toy/crayon)) - return - iscrayon = 1 - - - if ((!in_range(src, usr) && src.loc != usr && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != usr && usr.get_active_hand() != i)) // Some check to see if he's allowed to write - return - - t = parsepencode(t, i, usr, iscrayon) // Encode everything from pencode to html - - if(id!="end") - addtofield(text2num(id), t) // He wants to edit a field, let him. - else - info += t // Oh, he wants to edit to the end of the file, let him. - updateinfolinks() - - usr << browse("[name][info_links][stamps]", "window=[name]") // Update the window - - if(!overlays.Find("paper_words")) - overlays += "paper_words" - -/obj/item/weapon/paper/attackby(obj/item/weapon/P as obj, mob/user as mob) - ..() - var/clown = 0 - if(user.mind && (user.mind.assigned_role == "Clown")) - clown = 1 - - if (istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon)) - usr << browse("[name][info_links][stamps]", "window=[name]") - //openhelp(user) - return - else if(istype(P, /obj/item/weapon/stamp)) - if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.get_active_hand() != P)) - return - - stamps += (stamps=="" ? "
    " : "
    ") + "This paper has been stamped with the [P.name]." - - switch(P.type) - if(/obj/item/weapon/stamp/captain) - overlays += "paper_stamped_cap" - if(/obj/item/weapon/stamp/hop) - overlays += "paper_stamped_hop" - if(/obj/item/weapon/stamp/hos) - overlays += "paper_stamped_hos" - if(/obj/item/weapon/stamp/ce) - overlays += "paper_stamped_ce" - if(/obj/item/weapon/stamp/rd) - overlays += "paper_stamped_rd" - if(/obj/item/weapon/stamp/cmo) - overlays += "paper_stamped_cmo" - if(/obj/item/weapon/stamp/denied) - overlays += "paper_stamped_denied" - if(/obj/item/weapon/stamp/clown) - if (!clown) - usr << "You are unable to use the stamp." - return - else - overlays += "paper_stamped_clown" - else - overlays += "paper_stamped" - if(!stamped) - stamped = new - stamped += P.type - - user << "You stamp the paper with your rubber stamp." - - add_fingerprint(user) -======= /obj/item/weapon/paper name = "paper" gender = PLURAL @@ -600,5 +299,3 @@ user << "You stamp the paper with your rubber stamp." add_fingerprint(user) ->>>>>>> remotes/git-svn - return \ No newline at end of file