From 12d1c45cb018d39caf4b4d2e87c06853d576f631 Mon Sep 17 00:00:00 2001 From: meow20 Date: Sat, 7 Sep 2024 22:21:15 +0200 Subject: [PATCH 1/8] offer buildmode --- code/__HELPERS/trait_helpers.dm | 1 + code/_globalvars/traits.dm | 1 + code/modules/buildmode/submodes/offer.dm | 29 +++++++++++++++++++++++ code/modules/mob/mob_misc_procs.dm | 21 +++++++++++----- icons/misc/buildmode.dmi | Bin 1731 -> 2009 bytes paradise.dme | 1 + 6 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 code/modules/buildmode/submodes/offer.dm diff --git a/code/__HELPERS/trait_helpers.dm b/code/__HELPERS/trait_helpers.dm index af8040177b82..ecaa149c21e2 100644 --- a/code/__HELPERS/trait_helpers.dm +++ b/code/__HELPERS/trait_helpers.dm @@ -137,6 +137,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai //***** MOB TRAITS *****// #define TRAIT_RESPAWNABLE "can_respawn_as_ghost_roles" +#define TRAIT_BEING_OFFERED "offered" #define TRAIT_BLIND "blind" #define TRAIT_MUTE "mute" #define TRAIT_DEAF "deaf" diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index f276bcc25abd..43bb64040753 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -5,6 +5,7 @@ */ GLOBAL_LIST_INIT(traits_by_type, list( /mob = list( + "TRAIT_BEING_OFFERED" = TRAIT_BEING_OFFERED, "TRAIT_BLIND" = TRAIT_BLIND, "TRAIT_MUTE" = TRAIT_MUTE, "TRAIT_DEAF" = TRAIT_DEAF, diff --git a/code/modules/buildmode/submodes/offer.dm b/code/modules/buildmode/submodes/offer.dm new file mode 100644 index 000000000000..4abc6905c64c --- /dev/null +++ b/code/modules/buildmode/submodes/offer.dm @@ -0,0 +1,29 @@ +// Speeds up the offering process and optionally allows the admin to set up playtime requirement and "Show role" only once. +// Default settings are 20h time requirement, and show antag role. +/datum/buildmode_mode/offer + key = "offer" + var/hours = 20 + var/hide_role + +/datum/buildmode_mode/offer/show_help(mob/user) + to_chat(user, "***********************************************************") + to_chat(user, "Left click to offer a mob") + to_chat(user, "Right click to change amount of playtime a player needs to be able to sign up and whether to display their special role") + to_chat(user, "***********************************************************") + +/datum/buildmode_mode/offer/change_settings(mob/user) + hours = input(user, "Playtime required", "Input", 20) as num|null + if(alert("Do you want to show the mob's special role?", null, "Yes", "No") == "Yes" ) + hide_role = FALSE + else + hide_role = TRUE + +/datum/buildmode_mode/offer/handle_click(mob/user, params, atom/A) + var/list/pa = params2list(params) + var/left_click = pa.Find("left") + var/selected_atom + + if (left_click && ismob(A) && !isobserver(A)) + selected_atom = A + offer_control(selected_atom, hours, hide_role) + diff --git a/code/modules/mob/mob_misc_procs.dm b/code/modules/mob/mob_misc_procs.dm index b01207220e52..fac77d416b54 100644 --- a/code/modules/mob/mob_misc_procs.dm +++ b/code/modules/mob/mob_misc_procs.dm @@ -158,16 +158,24 @@ return U.sensor_mode return SUIT_SENSOR_OFF -/proc/offer_control(mob/M) - to_chat(M, "Control of your mob has been offered to dead players.") +/proc/offer_control(mob/M, hours, hide_role) + if(HAS_TRAIT(M, TRAIT_BEING_OFFERED)) + return + var/minhours + ADD_TRAIT(M, TRAIT_BEING_OFFERED, "build_mode") log_admin("[key_name(usr)] has offered control of ([key_name(M)]) to ghosts.") - var/minhours = input(usr, "Minimum hours required to play [M]?", "Set Min Hrs", 10) as num - message_admins("[key_name_admin(usr)] has offered control of ([key_name_admin(M)]) to ghosts with [minhours] hrs playtime") var/question = "Do you want to play as [M.real_name ? M.real_name : M.name][M.job ? " ([M.job])" : ""]" - if(alert("Do you want to show the antag status?","Show antag status","Yes","No") == "Yes") - question += ", [M.mind?.special_role ? M.mind?.special_role : "No special role"]" + if (!hours) + minhours = input(usr, "Minimum hours required to play [M]?", "Set Min Hrs", 10) as num + else + minhours = hours + if (!hide_role) + if(alert("Do you want to show the antag status?","Show antag status","Yes","No") == "Yes") + question += ", [M.mind?.special_role ? M.mind?.special_role : "No special role"]" + message_admins("[key_name_admin(usr)] has offered control of ([key_name_admin(M)]) to ghosts with [minhours] hrs playtime") var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("[question]?", poll_time = 10 SECONDS, min_hours = minhours, source = M) var/mob/dead/observer/theghost = null + REMOVE_TRAIT(M, TRAIT_BEING_OFFERED, "build_mode") if(length(candidates)) if(QDELETED(M)) @@ -178,6 +186,7 @@ M.ghostize() M.key = theghost.key dust_if_respawnable(theghost) + else to_chat(M, "There were no ghosts willing to take control.") message_admins("No ghosts were willing to take control of [key_name_admin(M)])") diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi index 025cf3350a251eb8d5aacfd5af494ba3f29727f2..80c9d404a10b2fc712b918d2901352145548a832 100644 GIT binary patch delta 1995 zcmV;+2Q>J@4cQNnB!3=IOjJbx000Id4+Sz4163UbI~EIFB>+$v07w^R%m4)_4nB@F zF#rGn0d!JMQvg8b*k%9#0QGuQSad{Xb7OL8aCB*JZU6vyoSl@xYQr!LhR^m>nD#!l zu7_QA87-rS^%aT|E47$yWwx8Jw{K{mz0@JjO@i;&?_UV7)qmIi`*2jdpM&f$L}IT# z)%N98ik@^bL-W3o!XTYZ8k?9P;ZUwtQfLZsDBq-L0yrG&J5XK7>Id~PK{?iVN@UZ# zp$2W6BZXyda~2gusuw9ici?N(i^QlYn`}~;OyGWz(m{JhKX09Xmxa%(x&5DKG43!R zOs(RHq#&1U!;-kkaV*Kop+?6=9s#l!d8a-0>edv@<)*=qXh}ptRA_wUMLUO&v@_~m`Ko?buxzO2Wezr7pU`u_PsTL8~`dVP{t{Po??0R8j11~<x@T*70fc`?!6-`wxE92WRVp&CieNedf0^dn*0>kgjBIEAyw)&yVQsNE&$V;wM@# z6xISci%1~-{D|HW1iEeZ4W7c$cla$6WPW}??+HSHEUW~<5ruz&z{Y2C=I00Wj)1~L z2!HI85=YC$-djdL12vvgI&+EE2ittFIEOb1NLGI@VGyr~6atNZ002XW!zTzm# z{k*PmG#R!Il3 z^PKm%qpJkMg<$Kzi)paNK=^rGWA|wwWq$;l6AU>(Up7_xxu4f{H4h{K%mD)2N|5_` zU03F!k{|>PQ&|$MeqPrq!R*l2Z3MZWAJ7^BUo%vqgsVVA4LO+2{J!V_cXi; zo*>>+9AG}Q3Engkh8GzDAy6Tme1DXU>)G`@AQrPdgR!^qNTY-Z1Yz)TFbe`+Fi%zH zZd712>{b_h8*s4OD*;DM#7OS5*>!C``69Fgz=oL#fNyYc(Uo0C?pdx?h$_?U2o^NM;RlTFwn9OWoL};? z6#~G1ot#ZMiNzf-1;NqTb3ZrvC8qP5*?Aru?Qx+QfDptJP3FNx0!a147Q=Xf1N+Gx zod6I)p@j#2xMN(y5eQYQrPzXK%uc9>g+dr@>$-mpO6AD z;Lu%;5+rBZta#W8N&>qaA%G<#0KX?7(_v){0LEib5V%Hr)7#V6Vt=p*0#A1we6{@@ zc>wIZ>*rG*ELZZtD+H7RJvXh#q)$KtNYn!a;}_fPap-IqNLW$CQN$y^NdRR$S3Hg19TC5|lkC2}lE` zdqJ=a5|lll9@7LRVt)e0tfLI5Ds`s`>O@$$on3wJ^(L2+p3cZZ6owAU|C1Z5W_rM-Ru&EG5S^$Td3sI=EFpk<=cet>{K zKtOB1wb^jrzI(n#z#o~|)=h6G;Ezn$`hM{p1n4c%8&y}|?|&kYE5HAB42+AW!_b=C z5CJ`MM@JEVYJxuAVo&CQA=d*90>>X-L1HsTkoA~Wc9&=(S_HtW^|UT}ieQdbv`YY7 zgPkIvf~P|eV_*kI(Mf{%Il2J?G@i861X&E=wow#rW?Zfq$^$_#|20OyQ<1N_=Y9LQ zzk}Or%g6;dlSH}Le{e23KyYp@GFXN^_&mU^$pxNzqV4kFW`eKYRcQWRX|G@4aqIZB d`F+~H{{yxcvyXp*0%`yN002ovPDHLkV1m2N$5a3S delta 1715 zcmV;k22AfFDZ*Bkpc$}S+%?`pK5QNY06h!aFzk?Sq zMq@naE0}FrWg~PeV2y8YV-vmDru4R(e8Vsk7^}^0e>kb_@gOVofw)j>wVX_)c#@8$ zUKVpH4ARxaW(g4@*5ha-g(e^BaVEvZgTrS20@;JC{!yzA%73xOb0i!49cs{)ZKSZw zWt&9?f$~90&=nLp>Oo@E)S9eQ7>(!WAf2wheDkzB~y z1l&?_OTaT`mw*STFePqu98$8f&(U#`hlkb|Iaa&V_VcsfY!oQ^echKp0000UP)t-s z1|bgs003sp0DlWzB?DC*08kkKNEZb=76mdB1t<q=RIcxxz1`)5^qJ zGYz=f4fJc#u%4-cKB?uO<*I)9^_qWpl$V!3uIh3&FMltWrPhCRHZLzfr>4GM&gSLi zr@!pA{{C_quyVukcm>#bdHFFl_4{SOK;?KmC?!GWY+y}&xxCK`aOG&cI`qj12^!!v;wlDDx;)0OQmUGuTX#dCDBL-#`vt*3{R_ z$vi(g&JVxS<9q*)=lbAVtq*FRk9gGiqt0IXJbxeXuyaS9zw~*24{uc&z$+^ot3pjZ zU3Yo@77q;sMbcR$QF#fnL7(Su^2h*eijCEn)mTlHvq6{VV}5HO@Og3;YzBT$?(%%h zy}^1=F)--ze8l7X0alho?Hu%Zeg^~jRhpw3H3l$1q42Ay&+`#`YLF!ToPY*>(B=7< zGk>XR&8Dls`zd4T^L)TV1JIz8`#c};$Uv_;xwJ<9$p&4XkGVJKQ%D|7iIRA->+^iT zZr~Tvl>t`+Z6$IV$13GK~Wx#-q6)vzc7Xo-QNOb2M5cxaau0m^$%70Z1 zx;*dSsj`6qXN4NWz|5;5^Ob=sfSY|&MXu2^oZ=$&9!%NMYc+7^#t9G5kngT z1FSK?R&G#E5keTuK`m!LMi`|IN`KhO4OE%SS=!ZAG~Sy~WiYn}V1;eWok2MvLIUmI z*(FLO^|+v2Wy%`^GX|R)_C9SzXW+^2mH8b5T*0~TgIdQ7 z1P&nQszB!$fE~2XA-wDq1Hne1rZ0eObVjQ9lQ-1g{P?C2q>9HFz;k`DkALUK_x>M` z@&{NSd=B{XTpt|RZ2=SvD1!CD0d@ltN#whPrx-{=39mw{0c(jAYI_Y>6+Ax9te#{y z13*9^!A=8DrsLySqhM>Gc8>w<$^iVvp!}M)a{x#>Xh4JUZgA+CeKBs6T*v@l9IzhQuWMYHbz56{?JUxY9) z3=BB`dCS0CUsbg`J~luC+@NqZa3cYc)II^ZL6Ut2wK{{Ap{l)s?KG&>oG~DvW=KoA)mf7rnLLe+SJ!K3_LrHbeCgGu3cet&$A27G$3mPql@ z4~QoD@ec^{{lgy+b@Ia>5Owky1_t)!fxg}GI>&$#`5kta0UP@r)+QN%sDx|5L<6uJ zeAGDrv(CDT2K%5wg0l?Xrh+xM@jL@ho;1$@27Dv~HZCU&T+IQ_>tyj0rfGe^?1_I~ zC%XYK%fS8@15BI)V=Ta6KwvQAp8QM|pQ81_2Z)Zd!|(L?{x4!puI<|X%lZHS002ov JPDHLkV1nR3FY*8Y diff --git a/paradise.dme b/paradise.dme index e45c0b1c98c6..cb376f366911 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1656,6 +1656,7 @@ #include "code\modules\buildmode\submodes\forcemove.dm" #include "code\modules\buildmode\submodes\link.dm" #include "code\modules\buildmode\submodes\mapgen.dm" +#include "code\modules\buildmode\submodes\offer.dm" #include "code\modules\buildmode\submodes\save.dm" #include "code\modules\buildmode\submodes\throwing.dm" #include "code\modules\buildmode\submodes\tilt.dm" From 989d61aa183821600476d9eea87ebf9aad2c5b61 Mon Sep 17 00:00:00 2001 From: meow20 Date: Sat, 7 Sep 2024 22:39:37 +0200 Subject: [PATCH 2/8] stops asking to show special role if already decided in build mode --- code/modules/mob/mob_misc_procs.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/mob_misc_procs.dm b/code/modules/mob/mob_misc_procs.dm index fac77d416b54..38b749ed79bb 100644 --- a/code/modules/mob/mob_misc_procs.dm +++ b/code/modules/mob/mob_misc_procs.dm @@ -169,9 +169,11 @@ minhours = input(usr, "Minimum hours required to play [M]?", "Set Min Hrs", 10) as num else minhours = hours - if (!hide_role) + if(isnull(hide_role)) if(alert("Do you want to show the antag status?","Show antag status","Yes","No") == "Yes") question += ", [M.mind?.special_role ? M.mind?.special_role : "No special role"]" + else if(!hide_role) + question += ", [M.mind?.special_role ? M.mind?.special_role : "No special role"]" message_admins("[key_name_admin(usr)] has offered control of ([key_name_admin(M)]) to ghosts with [minhours] hrs playtime") var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("[question]?", poll_time = 10 SECONDS, min_hours = minhours, source = M) var/mob/dead/observer/theghost = null From ffce564f80121dce3afc80c2dc219a9134e658cc Mon Sep 17 00:00:00 2001 From: meow20 Date: Sat, 7 Sep 2024 22:50:02 +0200 Subject: [PATCH 3/8] Update offer.dm --- code/modules/buildmode/submodes/offer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/buildmode/submodes/offer.dm b/code/modules/buildmode/submodes/offer.dm index 4abc6905c64c..e6b7722b88a3 100644 --- a/code/modules/buildmode/submodes/offer.dm +++ b/code/modules/buildmode/submodes/offer.dm @@ -1,5 +1,5 @@ // Speeds up the offering process and optionally allows the admin to set up playtime requirement and "Show role" only once. -// Default settings are 20h time requirement, and show antag role. +// Default setting is 20H like the default recommendation for offering from drop down menu. /datum/buildmode_mode/offer key = "offer" var/hours = 20 From df81c645b12394800746182b091d9843c64a00e3 Mon Sep 17 00:00:00 2001 From: meow20 Date: Sat, 7 Sep 2024 22:56:08 +0200 Subject: [PATCH 4/8] minor oopsy --- code/modules/mob/mob_misc_procs.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/mob_misc_procs.dm b/code/modules/mob/mob_misc_procs.dm index 38b749ed79bb..7203de4b15ea 100644 --- a/code/modules/mob/mob_misc_procs.dm +++ b/code/modules/mob/mob_misc_procs.dm @@ -188,7 +188,6 @@ M.ghostize() M.key = theghost.key dust_if_respawnable(theghost) - else to_chat(M, "There were no ghosts willing to take control.") message_admins("No ghosts were willing to take control of [key_name_admin(M)])") From de66be311299cb1629968abcca94bb5377ec9f25 Mon Sep 17 00:00:00 2001 From: meow20 Date: Sat, 7 Sep 2024 23:01:55 +0200 Subject: [PATCH 5/8] linter crying --- code/modules/buildmode/submodes/offer.dm | 4 ++-- code/modules/mob/mob_misc_procs.dm | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/buildmode/submodes/offer.dm b/code/modules/buildmode/submodes/offer.dm index e6b7722b88a3..d0f777a6acad 100644 --- a/code/modules/buildmode/submodes/offer.dm +++ b/code/modules/buildmode/submodes/offer.dm @@ -13,7 +13,7 @@ /datum/buildmode_mode/offer/change_settings(mob/user) hours = input(user, "Playtime required", "Input", 20) as num|null - if(alert("Do you want to show the mob's special role?", null, "Yes", "No") == "Yes" ) + if(alert("Do you want to show the mob's special role?", null, "Yes", "No") == "Yes") hide_role = FALSE else hide_role = TRUE @@ -23,7 +23,7 @@ var/left_click = pa.Find("left") var/selected_atom - if (left_click && ismob(A) && !isobserver(A)) + if(left_click && ismob(A) && !isobserver(A)) selected_atom = A offer_control(selected_atom, hours, hide_role) diff --git a/code/modules/mob/mob_misc_procs.dm b/code/modules/mob/mob_misc_procs.dm index 7203de4b15ea..5304688ac7bb 100644 --- a/code/modules/mob/mob_misc_procs.dm +++ b/code/modules/mob/mob_misc_procs.dm @@ -165,7 +165,7 @@ ADD_TRAIT(M, TRAIT_BEING_OFFERED, "build_mode") log_admin("[key_name(usr)] has offered control of ([key_name(M)]) to ghosts.") var/question = "Do you want to play as [M.real_name ? M.real_name : M.name][M.job ? " ([M.job])" : ""]" - if (!hours) + if(!hours) minhours = input(usr, "Minimum hours required to play [M]?", "Set Min Hrs", 10) as num else minhours = hours From 4a0ae712412f0923a90f5ce305de6eb47e64ac48 Mon Sep 17 00:00:00 2001 From: meow20 <62257265+meow20@users.noreply.github.com> Date: Sat, 7 Sep 2024 23:17:27 +0200 Subject: [PATCH 6/8] Update code/modules/buildmode/submodes/offer.dm Co-authored-by: chuga-git <98280110+chuga-git@users.noreply.github.com> Signed-off-by: meow20 <62257265+meow20@users.noreply.github.com> --- code/modules/buildmode/submodes/offer.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/buildmode/submodes/offer.dm b/code/modules/buildmode/submodes/offer.dm index d0f777a6acad..e3a57d02c453 100644 --- a/code/modules/buildmode/submodes/offer.dm +++ b/code/modules/buildmode/submodes/offer.dm @@ -19,8 +19,8 @@ hide_role = TRUE /datum/buildmode_mode/offer/handle_click(mob/user, params, atom/A) - var/list/pa = params2list(params) - var/left_click = pa.Find("left") + var/list/modifiers = params2list(params) + var/left_click = LAZYACCESS(modifiers, LEFT_CLICK) var/selected_atom if(left_click && ismob(A) && !isobserver(A)) From 059f65dc4282e5bf5e936bee0ae94dcaf06ae706 Mon Sep 17 00:00:00 2001 From: meow20 Date: Thu, 12 Sep 2024 11:13:47 +0200 Subject: [PATCH 7/8] Update mob_misc_procs.dm --- code/modules/mob/mob_misc_procs.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/mob_misc_procs.dm b/code/modules/mob/mob_misc_procs.dm index 5304688ac7bb..adaa286af0e9 100644 --- a/code/modules/mob/mob_misc_procs.dm +++ b/code/modules/mob/mob_misc_procs.dm @@ -162,7 +162,7 @@ if(HAS_TRAIT(M, TRAIT_BEING_OFFERED)) return var/minhours - ADD_TRAIT(M, TRAIT_BEING_OFFERED, "build_mode") + ADD_TRAIT(M, TRAIT_BEING_OFFERED, "admin_offer") log_admin("[key_name(usr)] has offered control of ([key_name(M)]) to ghosts.") var/question = "Do you want to play as [M.real_name ? M.real_name : M.name][M.job ? " ([M.job])" : ""]" if(!hours) @@ -177,7 +177,7 @@ message_admins("[key_name_admin(usr)] has offered control of ([key_name_admin(M)]) to ghosts with [minhours] hrs playtime") var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("[question]?", poll_time = 10 SECONDS, min_hours = minhours, source = M) var/mob/dead/observer/theghost = null - REMOVE_TRAIT(M, TRAIT_BEING_OFFERED, "build_mode") + REMOVE_TRAIT(M, TRAIT_BEING_OFFERED, "admin_offer") if(length(candidates)) if(QDELETED(M)) From 390aeb157d4ef951836c0dac93834aed698ee313 Mon Sep 17 00:00:00 2001 From: meow20 <62257265+meow20@users.noreply.github.com> Date: Sat, 14 Sep 2024 08:27:05 +0200 Subject: [PATCH 8/8] Update code/modules/mob/mob_misc_procs.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: meow20 <62257265+meow20@users.noreply.github.com> --- code/modules/mob/mob_misc_procs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/mob_misc_procs.dm b/code/modules/mob/mob_misc_procs.dm index adaa286af0e9..82c6b28156e7 100644 --- a/code/modules/mob/mob_misc_procs.dm +++ b/code/modules/mob/mob_misc_procs.dm @@ -171,7 +171,7 @@ minhours = hours if(isnull(hide_role)) if(alert("Do you want to show the antag status?","Show antag status","Yes","No") == "Yes") - question += ", [M.mind?.special_role ? M.mind?.special_role : "No special role"]" + question += ", [M.mind?.special_role || "No special role"]" else if(!hide_role) question += ", [M.mind?.special_role ? M.mind?.special_role : "No special role"]" message_admins("[key_name_admin(usr)] has offered control of ([key_name_admin(M)]) to ghosts with [minhours] hrs playtime")