From 76bde4de93717ced79e293df48c0fe490446ecf5 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Thu, 2 Apr 2015 23:21:52 +0100 Subject: [PATCH 1/4] Adds jackboots for dirty aliens to custom loadout --- code/modules/client/preferences_gear.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index 4b421d02bb..b2a245b372 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -625,6 +625,12 @@ var/global/list/gear_datums = list() cost = 2 slot = slot_shoes +/datum/gear/toeless_jackboots + display_name = "toe-less jackboots" + path = /obj/item/clothing/shoes/jackboots/fluff/kecer_eldraran //permisson of owner of custom item was granted + cost = 2 + slot = slot_shoes + /datum/gear/sandal display_name = "sandals" path = /obj/item/clothing/shoes/sandal From f74fc1a2bd2c01b01a06d7a7d83e9f54b91362af Mon Sep 17 00:00:00 2001 From: volas Date: Sat, 4 Apr 2015 16:30:28 +0300 Subject: [PATCH 2/4] Fix checking in paranoid mode for debug verbs --- code/modules/admin/admin_verbs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 36d53e521b..68b8c04805 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -283,7 +283,7 @@ var/list/admin_verbs_mentor = list( if(holder.rights & R_SERVER) verbs += admin_verbs_server if(holder.rights & R_DEBUG) verbs += admin_verbs_debug - if(config.debugparanoid && !check_rights(R_ADMIN)) + if(config.debugparanoid && !(holder.rights & R_ADMIN)) verbs.Remove(admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on. if(holder.rights & R_POSSESS) verbs += admin_verbs_possess if(holder.rights & R_PERMISSIONS) verbs += admin_verbs_permissions From ef105f0659f7f9013b37c0146856fea4311e291e Mon Sep 17 00:00:00 2001 From: volas Date: Sat, 4 Apr 2015 23:47:22 +0300 Subject: [PATCH 3/4] Additional checks for paper work --- code/modules/paperwork/paper.dm | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index c3a3cfe1ee..7c19ee3442 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -194,7 +194,7 @@ update_icon() /obj/item/weapon/paper/proc/get_signature(var/obj/item/weapon/pen/P, mob/user as mob) - if(P) + if(P && istype(P, /obj/item/weapon/pen)) return P.get_signature(user) return (user && user.real_name) ? user.real_name : "Anonymous" @@ -324,7 +324,17 @@ 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_PAPER_MESSAGE_LEN) + + var/textlimit = MAX_PAPER_MESSAGE_LEN - length(info) + if(textlimit <= 0) + usr << "You're trying to find a free place on paper, but can't!" + return + + var/t = strip_html_simple(input("Enter what you want to write:", "Write", null, null) as message, textlimit) + + if(!t) + return + 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)) @@ -347,10 +357,18 @@ message_admins("PAPER: [usr] ([usr.ckey]) tried to use forbidden word in [src]: [bad].") return */ + var last_fields_value = fields + t = html_encode(t) t = replacetext(t, "\n", "
") t = parsepencode(t, i, usr, iscrayon) // Encode everything from pencode to html + + if(fields > 50)//large amount of fields creates a heavy load on the server, see updateinfolinks() and addtofield() + usr << "Too many fields. Sorry, you can't do this." + fields = last_fields_value + return + if(id!="end") addtofield(text2num(id), t) // He wants to edit a field, let him. else From 036a9483721cf2c7d56bcc3546b4ac386a343cb4 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 6 Apr 2015 09:43:49 +0200 Subject: [PATCH 4/4] Rune logging. Adds various rune logging. --- code/datums/spells/mind_transfer.dm | 2 +- code/defines/procs/admin.dm | 22 ++++++++- code/game/gamemodes/cult/ritual.dm | 4 ++ code/game/gamemodes/cult/runes.dm | 75 ++++++++++++++++++++--------- 4 files changed, 78 insertions(+), 25 deletions(-) diff --git a/code/datums/spells/mind_transfer.dm b/code/datums/spells/mind_transfer.dm index 61c6f980fd..50e1e6b07f 100644 --- a/code/datums/spells/mind_transfer.dm +++ b/code/datums/spells/mind_transfer.dm @@ -57,7 +57,7 @@ Also, you never added distance checking after target is selected. I've went ahea var/mob/caster = user//The wizard/whomever doing the body transferring. //SPELL LOSS BEGIN - admin_attack_log(caster, victim, "Used mind transfer on", "Had mind transfer used on him by", "used mind transfer on") + admin_attack_log(caster, victim, "Used mind transfer", "Was the victim of mind transfer", "used mind transfer on") //NOTE: The caster must ALWAYS keep mind transfer, even when other spells are lost. var/obj/effect/proc_holder/spell/targeted/mind_transfer/m_transfer = locate() in user.spell_list//Find mind transfer directly. diff --git a/code/defines/procs/admin.dm b/code/defines/procs/admin.dm index 2bfb8b9436..1ae066d640 100644 --- a/code/defines/procs/admin.dm +++ b/code/defines/procs/admin.dm @@ -2,12 +2,30 @@ proc/log_and_message_admins(var/message as text) log_admin(usr ? "[key_name(usr)] [message]" : "EVENT [message]") message_admins(usr ? "[key_name(usr)] [message]" : "EVENT [message]") +proc/log_and_message_admins_many(var/list/mob/users, var/message) + if(!users || !users.len) + return + + var/list/user_keys = list() + for(var/mob/user in users) + user_keys += key_name(user) + + log_admin("[english_list(user_keys)] [message]") + message_admins("[english_list(user_keys)] [message]") + proc/admin_log_and_message_admins(var/message as text) log_admin(usr ? "[key_name_admin(usr)] [message]" : "EVENT [message]") message_admins(usr ? "[key_name_admin(usr)] [message]" : "EVENT [message]", 1) proc/admin_attack_log(var/mob/attacker, var/mob/victim, var/attacker_message, var/victim_message, var/admin_message) - victim.attack_log += text("\[[time_stamp()]\] [victim_message] [key_name(attacker)]") - attacker.attack_log += text("\[[time_stamp()]\] [attacker_message] [key_name(victim)]") + victim.attack_log += text("\[[time_stamp()]\] [key_name(attacker)] - [victim_message]") + attacker.attack_log += text("\[[time_stamp()]\] [key_name(victim)] - [attacker_message]") msg_admin_attack("[key_name(attacker)] [admin_message] [key_name(victim)] (INTENT: [uppertext(attacker.a_intent)]) (JMP)") + +proc/admin_attacker_log_many_victims(var/mob/attacker, var/list/mob/victims, var/attacker_message, var/victim_message, var/admin_message) + if(!victims || !victims.len) + return + + for(var/mob/victim in victims) + admin_attack_log(attacker, victim, attacker_message, victim_message, admin_message) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index e3ac71b77c..67c5ffffcb 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -458,6 +458,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", user << "\red You slice open one of your fingers and begin drawing a rune on the floor whilst chanting the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world." user.take_overall_damage((rand(9)+1)/10) // 0.1 to 1.0 damage if(do_after(user, 50)) + var/area/A = get_area(user) + log_and_message_admins("created \an [chosen_rune] rune at \the [A.name] - [user.loc.x]-[user.loc.y]-[user.loc.z].") if(usr.get_active_hand() != src) return var/mob/living/carbon/human/H = user @@ -515,6 +517,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", var/mob/living/carbon/human/H = user R.blood_DNA = list() R.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type + var/area/A = get_area(user) + log_and_message_admins("created \an [r] rune at \the [A.name] - [user.loc.x]-[user.loc.y]-[user.loc.z].") switch(r) if("teleport") var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri") diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 88e16dbe46..26b2ca7bc8 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -104,7 +104,7 @@ var/list/sacrificed = list() if(M.stat==2) continue usr.say("Mah[pick("'","`")]weyh pleggh at e'ntrath!") - + if (M.species && (M.species.flags & NO_PAIN)) M.visible_message("\red The markings below [M] glow a bloody red.") else @@ -116,6 +116,7 @@ var/list/sacrificed = list() // Mostly for the benefit of those who resist, but it makes sense for even those who join to have some.. effect. M.take_overall_damage(0, 10) + admin_attack_log(usr, M, "Used a convert rune", "Was subjected to a convert rune", "used a convert rune on") var/choice = alert(M,"Do you want to join the cult?","Submit to Nar'Sie","Resist","Submit") if(choice == "Submit") ticker.mode.add_cultist(M.mind) @@ -146,12 +147,13 @@ var/list/sacrificed = list() /////////////////////////////////////////FOURTH RUNE tearreality() - var/cultist_count = 0 + var/list/cultists = new() for(var/mob/M in range(1,src)) if(iscultist(M) && !M.stat) M.say("Tok-lyr rqa'nap g[pick("'","`")]lt-ulotf!") - cultist_count += 1 - if(cultist_count >= 9) + cultists += 1 + if(cultists.len >= 9) + log_and_message_admins_many(cultists, "summoned Nar-sie.") new /obj/machinery/singularity/narsie/large(src.loc) if(ticker.mode.name == "cult") ticker.mode:eldergod = 0 @@ -162,6 +164,7 @@ var/list/sacrificed = list() /////////////////////////////////////////FIFTH RUNE emp(var/U,var/range_red) //range_red - var which determines by which number to reduce the default emp range, U is the source loc, needed because of talisman emps which are held in hand at the moment of using and that apparently messes things up -- Urist + log_and_message_admins("activated an EMP rune.") if(istype(src,/obj/effect/rune)) usr.say("Ta'gh fara[pick("'","`")]qha fel d'amar det!") else @@ -183,6 +186,7 @@ var/list/sacrificed = list() if(R.word1==cultwords["travel"] && R.word2==cultwords["blood"] && R.word3==cultwords["self"]) for(var/mob/living/carbon/D in R.loc) if(D.stat!=2) + admin_attack_log(usr, D, "Used a blood drain rune.", "Was victim of a blood drain rune.", "used a blood drain rune on") var/bdrain = rand(1,25) D << "\red You feel weakened." D.take_overall_damage(bdrain, 0) @@ -423,6 +427,7 @@ var/list/sacrificed = list() D << "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." D << "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." + log_and_message_admins("used a manifest rune.") var/mob/living/user = usr while(this_rune && user && user.stat==CONSCIOUS && user.client && user.loc==this_rune.loc) @@ -591,7 +596,7 @@ var/list/sacrificed = list() C.say("Barhah hra zar[pick("'","`")]garis!") for(var/mob/H in victims) - + var/accepted = 0 var/worth = 0 if(istype(H,/mob/living/carbon/human)) var/mob/living/carbon/human/lamb = H @@ -606,6 +611,7 @@ var/list/sacrificed = list() H.dust()//To prevent the MMI from remaining else H.gib() + accepted = 1 usr << "\red The Geometer of Blood accepts this sacrifice, your objective is now complete." else usr << "\red Your target's earthly bonds are too strong. You need more cultists to succeed in this ritual." @@ -613,9 +619,11 @@ var/list/sacrificed = list() if(cultsinrange.len >= 3) if(H.stat !=2) if(prob(80) || worth) + accepted = 1 usr << "\red The Geometer of Blood accepts this [worth ? "exotic " : ""]sacrifice." ticker.mode:grant_runeword(usr) else + accepted = 1 usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, this soul was not enough to gain His favor." if(isrobot(H)) @@ -624,9 +632,11 @@ var/list/sacrificed = list() H.gib() else if(prob(40) || worth) + accepted = 1 usr << "\red The Geometer of blood accepts this [worth ? "exotic " : ""]sacrifice." ticker.mode:grant_runeword(usr) else + accepted = 1 usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, a mere dead body is not enough to satisfy Him." if(isrobot(H)) @@ -638,9 +648,11 @@ var/list/sacrificed = list() usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed." else if(prob(40)) + accepted = 1 usr << "\red The Geometer of blood accepts this sacrifice." ticker.mode:grant_runeword(usr) else + accepted = 1 usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, a mere dead body is not enough to satisfy Him." if(isrobot(H)) @@ -651,9 +663,11 @@ var/list/sacrificed = list() if(cultsinrange.len >= 3) if(H.stat !=2) if(prob(80)) + accepted = 1 usr << "\red The Geometer of Blood accepts this sacrifice." ticker.mode:grant_runeword(usr) else + accepted = 1 usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, this soul was not enough to gain His favor." if(isrobot(H)) @@ -662,9 +676,11 @@ var/list/sacrificed = list() H.gib() else if(prob(40)) + accepted = 1 usr << "\red The Geometer of blood accepts this sacrifice." ticker.mode:grant_runeword(usr) else + accepted = 1 usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, a mere dead body is not enough to satisfy Him." if(isrobot(H)) @@ -676,15 +692,20 @@ var/list/sacrificed = list() usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed." else if(prob(40)) + accepted = 1 usr << "\red The Geometer of blood accepts this sacrifice." ticker.mode:grant_runeword(usr) else + accepted = 1 usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, a mere dead body is not enough to satisfy Him." if(isrobot(H)) H.dust()//To prevent the MMI from remaining else H.gib() + if(accepted) + admin_attack_log(usr, H, "Used a sacrifice rune.", "Was victim of a sacrifice rune.", "used a sacrifice rune on") + log_and_message_admins_many(cultsinrange - usr, "Assisted activating a sacrifice rune.") for(var/mob/living/carbon/monkey/M in src.loc) if (ticker.mode.name == "cult") if(M.mind == ticker.mode:sacrifice_target) @@ -855,7 +876,7 @@ var/list/sacrificed = list() deafen() if(istype(src,/obj/effect/rune)) - var/affected = 0 + var/list/affected = new() for(var/mob/living/carbon/C in range(7,src)) if (iscultist(C)) continue @@ -864,17 +885,18 @@ var/list/sacrificed = list() continue C.ear_deaf += 50 C.show_message("\red The world around you suddenly becomes quiet.", 3) - affected++ + affected += C if(prob(1)) C.sdisabilities |= DEAF - if(affected) + if(affected.len) usr.say("Sti[pick("'","`")] kaliedir!") usr << "\red The world becomes quiet as the deafening rune dissipates into fine dust." + admin_attacker_log_many_victims(usr, affected, "Used a deafen rune.", "Was victim of a deafen rune.", "used a deafen rune on") del(src) else return fizzle() else - var/affected = 0 + var/list/affected = new() for(var/mob/living/carbon/C in range(7,usr)) if (iscultist(C)) continue @@ -884,10 +906,11 @@ var/list/sacrificed = list() C.ear_deaf += 30 //talismans is weaker. C.show_message("\red The world around you suddenly becomes quiet.", 3) - affected++ - if(affected) + affected += C + if(affected.len) usr.whisper("Sti[pick("'","`")] kaliedir!") usr << "\red Your talisman turns into gray dust, deafening everyone around." + admin_attacker_log_many_victims(usr, affected, "Used a deafen rune.", "Was victim of a deafen rune.", "used a deafen rune on") for (var/mob/V in orange(1,src)) if(!(iscultist(V))) V.show_message("\red Dust flows from [usr]'s hands for a moment, and the world suddenly becomes quiet..", 3) @@ -895,7 +918,7 @@ var/list/sacrificed = list() blind() if(istype(src,/obj/effect/rune)) - var/affected = 0 + var/list/affected = new() for(var/mob/living/carbon/C in viewers(src)) if (iscultist(C)) continue @@ -909,15 +932,16 @@ var/list/sacrificed = list() if(prob(10)) C.sdisabilities |= BLIND C.show_message("\red Suddenly you see red flash that blinds you.", 3) - affected++ - if(affected) + affected += C + if(affected.len) usr.say("Sti[pick("'","`")] kaliesin!") usr << "\red The rune flashes, blinding those who not follow the Nar-Sie, and dissipates into fine dust." + admin_attacker_log_many_victims(usr, affected, "Used a blindness rune.", "Was victim of a blindness rune.", "used a blindness rune on") del(src) else return fizzle() else - var/affected = 0 + var/list/affected = new() for(var/mob/living/carbon/C in view(2,usr)) if (iscultist(C)) continue @@ -927,11 +951,12 @@ var/list/sacrificed = list() C.eye_blurry += 30 C.eye_blind += 10 //talismans is weaker. - affected++ + affected += C C.show_message("\red You feel a sharp pain in your eyes, and the world disappears into darkness..", 3) - if(affected) + if(affected.len) usr.whisper("Sti[pick("'","`")] kaliesin!") usr << "\red Your talisman turns into gray dust, blinding those who not follow the Nar-Sie." + admin_attacker_log_many_victims(usr, affected, "Used a blindness rune.", "Was victim of a blindness rune.", "used a blindness rune on") return @@ -942,12 +967,13 @@ var/list/sacrificed = list() if (istype(H.current,/mob/living/carbon)) cultists+=H.current */ - var/culcount = 0 //also, wording for it is old wording for obscure rune, which is now hide-see-blood. + var/list/cultists = new //also, wording for it is old wording for obscure rune, which is now hide-see-blood. + var/list/victims = new // var/list/cultboil = list(cultists-usr) //and for this words are destroy-see-blood. for(var/mob/living/carbon/C in orange(1,src)) if(iscultist(C) && !C.stat) - culcount++ - if(culcount>=3) + cultists+=C + if(cultists.len>=3) for(var/mob/living/carbon/M in viewers(usr)) if(iscultist(M)) continue @@ -956,6 +982,7 @@ var/list/sacrificed = list() continue M.take_overall_damage(51,51) M << "\red Your blood boils!" + victims += M if(prob(5)) spawn(5) M.gib() @@ -966,6 +993,8 @@ var/list/sacrificed = list() if(iscultist(C) && !C.stat) C.say("Dedo ol[pick("'","`")]btoh!") C.take_overall_damage(15, 0) + admin_attacker_log_many_victims(usr, victims, "Used a blood boil rune.", "Was the victim of a blood boil rune.", "used a blood boil rune on") + log_and_message_admins_many(cultists - usr, "assisted activating a blood boil rune.") del(src) else return fizzle() @@ -1005,7 +1034,6 @@ var/list/sacrificed = list() if(istype(src,/obj/effect/rune)) ///When invoked as rune, flash and stun everyone around. usr.say("Fuu ma[pick("'","`")]jin!") for(var/mob/living/L in viewers(src)) - if(iscarbon(L)) var/mob/living/carbon/C = L flick("e_flash", C.flash) @@ -1014,11 +1042,13 @@ var/list/sacrificed = list() C.Weaken(1) C.Stun(1) C.show_message("\red The rune explodes in a bright flash.", 3) + admin_attack_log(usr, C, "Used a stun rune.", "Was victim of a stun rune.", "used a stun rune on") else if(issilicon(L)) var/mob/living/silicon/S = L S.Weaken(5) S.show_message("\red BZZZT... The rune has exploded in a bright flash.", 3) + admin_attack_log(usr, S, "Used a stun rune.", "Was victim of a stun rune.", "used a stun rune on") del(src) else ///When invoked as talisman, stun and mute the target mob. usr.say("Dream sign ''Evil sealing talisman'[pick("'","`")]!") @@ -1032,7 +1062,7 @@ var/list/sacrificed = list() if(issilicon(T)) T.Weaken(15) - + admin_attack_log(usr, T, "Used a stun rune.", "Was victim of a stun rune.", "used a stun rune on") else if(iscarbon(T)) var/mob/living/carbon/C = T flick("e_flash", C.flash) @@ -1040,6 +1070,7 @@ var/list/sacrificed = list() C.silent += 15 C.Weaken(25) C.Stun(25) + admin_attack_log(usr, C, "Used a stun rune.", "Was victim of a stun rune.", "used a stun rune on") return /////////////////////////////////////////TWENTY-FIFTH RUNE