From 78c67b9a1fa2b26a09fba859f324070c068810a3 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 28 Apr 2019 03:40:50 -0700 Subject: [PATCH] patreon perks, admins, custom events --- code/__DEFINES/misc.dm | 6 ++-- code/game/verbs/ooc.dm | 8 +++--- code/modules/client/client defines.dm | 2 +- code/modules/client/client procs.dm | 21 ++++++++------ .../client/preference/loadout/loadout.dm | 5 +--- .../preference/loadout/loadout_donor.dm | 28 ++++++++++++++++--- code/modules/client/preference/preferences.dm | 22 +++++++-------- 7 files changed, 54 insertions(+), 38 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index dff9426c641..b006666ffda 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -318,10 +318,8 @@ #define SHELTER_DEPLOY_BAD_AREA "bad area" #define SHELTER_DEPLOY_ANCHORED_OBJECTS "anchored objects" -// Client donator levels -#define DONATOR_LEVEL_NONE 0 -#define DONATOR_LEVEL_ONE 1 -#define DONATOR_LEVEL_TWO 2 +// Maximum donation level +#define DONATOR_LEVEL_MAX 4 // The cooldown on OOC messages such as OOC, LOOC, praying and adminhelps #define OOC_COOLDOWN 5 diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 9325d3a08b5..5a2807e8379 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -11,7 +11,7 @@ var/global/admin_ooc_colour = "#b82e00" /client/verb/ooc(msg = "" as text) set name = "OOC" set category = "OOC" - + if(!mob) return if(IsGuestKey(key)) @@ -28,10 +28,10 @@ var/global/admin_ooc_colour = "#b82e00" if(prefs.muted & MUTE_OOC) to_chat(src, "You cannot use OOC (muted).") return - + if(!msg) msg = typing_input(src.mob, "", "ooc \"text\"") - + msg = trim(sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))) if(!msg) return @@ -76,7 +76,7 @@ var/global/admin_ooc_colour = "#b82e00" var/icon/byond = icon('icons/member_content.dmi', "blag") display_name = "[bicon(byond)][display_name]" - if(donator_level >= DONATOR_LEVEL_ONE) + if(donator_level > 0) if((prefs.toggles & DONATOR_PUBLIC)) var/icon/donator = icon('icons/ooc_tag_16x.dmi', "donator") display_name = "[bicon(donator)][display_name]" diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 00900fe5fd1..9f21e4b042c 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -81,7 +81,7 @@ var/datum/chatOutput/chatOutput // Donator stuff. - var/donator_level = DONATOR_LEVEL_NONE + var/donator_level = 0 // If set to true, this client can interact with atoms such as buttons and doors on top of regular machinery interaction var/advanced_admin_interaction = FALSE diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index a6216c87b1a..10a799ebac3 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -326,8 +326,6 @@ GLOB.admins += src holder.owner = src - donator_check() - //preferences datum - also holds some persistant data for the client (because we may as well keep these datums to a minimum) prefs = preferences_datums[ckey] if(!prefs) @@ -341,12 +339,6 @@ spawn() // Goonchat does some non-instant checks in start() chatOutput.start() - if(custom_event_msg && custom_event_msg != "") - to_chat(src, "

Custom Event

") - to_chat(src, "

A custom event is taking place. OOC Info:

") - to_chat(src, "[html_encode(custom_event_msg)]") - to_chat(src, "
") - if( (world.address == address || !address) && !host ) host = key world.update_status() @@ -374,6 +366,7 @@ to_chat(src, message) clientmessages.Remove(ckey) + donator_check() send_resources() @@ -398,6 +391,12 @@ screen += void + if(custom_event_msg && custom_event_msg != "") + to_chat(src, "

Custom Event

") + to_chat(src, "

A custom event is taking place. OOC Info:

") + to_chat(src, "[html_encode(custom_event_msg)]") + to_chat(src, "
") + if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them. to_chat(src, "Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you.") @@ -429,13 +428,17 @@ if(!dbcon.IsConnected()) return + if(check_rights(R_ADMIN, 0, mob)) // Yes, the mob is required, regardless of other examples in this file, it won't work otherwise + donator_level = DONATOR_LEVEL_MAX + return + //Donator stuff. var/DBQuery/query_donor_select = dbcon.NewQuery("SELECT ckey, tier, active FROM `[format_table_name("donators")]` WHERE ckey = '[ckey]'") query_donor_select.Execute() while(query_donor_select.NextRow()) if(!text2num(query_donor_select.item[3])) // Inactive donator. - donator_level = DONATOR_LEVEL_NONE + donator_level = 0 return donator_level = text2num(query_donor_select.item[2]) break diff --git a/code/modules/client/preference/loadout/loadout.dm b/code/modules/client/preference/loadout/loadout.dm index b42c5d5abf1..63825cc1237 100644 --- a/code/modules/client/preference/loadout/loadout.dm +++ b/code/modules/client/preference/loadout/loadout.dm @@ -4,7 +4,6 @@ var/list/gear_datums = list() /datum/loadout_category var/category = "" var/list/gear = list() - var/donor_only = FALSE /datum/loadout_category/New(cat) category = cat @@ -34,8 +33,6 @@ var/list/gear_datums = list() if(!loadout_categories[use_category]) loadout_categories[use_category] = new /datum/loadout_category(use_category) var/datum/loadout_category/LC = loadout_categories[use_category] - if(initial(G.donor_only)) - LC.donor_only = TRUE gear_datums[use_name] = new geartype LC.gear[use_name] = gear_datums[use_name] @@ -57,7 +54,7 @@ var/list/gear_datums = list() var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. var/subtype_path = /datum/gear //for skipping organizational subtypes (optional) var/subtype_cost_overlap = TRUE //if subtypes can take points at the same time - var/donor_only = FALSE // if it's only available to donors + var/donator_tier = 0 /datum/gear/New() ..() diff --git a/code/modules/client/preference/loadout/loadout_donor.dm b/code/modules/client/preference/loadout/loadout_donor.dm index 9e13662a7d8..5558a988209 100644 --- a/code/modules/client/preference/loadout/loadout_donor.dm +++ b/code/modules/client/preference/loadout/loadout_donor.dm @@ -1,5 +1,5 @@ /datum/gear/donor - donor_only = TRUE + donator_tier = 2 sort_category = "Donor" subtype_path = /datum/gear/donor @@ -77,6 +77,26 @@ display_name = "Guy Fawkes mask" path = /obj/item/clothing/mask/fawkes -/datum/gear/donor/noble_clothes - display_name = "Noble Clothes" - path = /obj/item/clothing/under/noble_clothes +/datum/gear/donor/id_decal_silver + display_name = "Silver ID Decal" + path = /obj/item/id_decal/silver + donator_tier = 3 + cost = 2 + +/datum/gear/donor/id_decal_prisoner + display_name = "Prisoner ID Decal" + path = /obj/item/id_decal/prisoner + donator_tier = 3 + cost = 2 + +/datum/gear/donor/id_decal_emag + display_name = "Emag ID Decal" + path = /obj/item/id_decal/emag + donator_tier = 3 + cost = 2 + +/datum/gear/donor/id_decal_gold + display_name = "Gold ID Decal" + path = /obj/item/id_decal/gold + donator_tier = 4 + cost = 4 \ No newline at end of file diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 22894aaa691..237da907a43 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -211,7 +211,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts unlock_content = C.IsByondMember() if(unlock_content) max_save_slots = MAX_SAVE_SLOTS_MEMBER - if(C.donator_level >= DONATOR_LEVEL_ONE) + if(C.donator_level > 0) max_gear_slots += 5 loaded_preferences_successfully = load_preferences(C) // Do not call this with no client/C, it generates a runtime / SQL error @@ -448,7 +448,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts dat += " - Color: [UI_style_color]    
" dat += " - UI Style: [UI_style]
" dat += "Deadchat Anonymity: [ghost_anonsay ? "Anonymous" : "Not Anonymous"]
" - if(user.client.donator_level >= DONATOR_LEVEL_ONE) + if(user.client.donator_level > 0) dat += "Donator Publicity: [(toggles & DONATOR_PUBLIC) ? "Public" : "Hidden"]
" dat += "Fancy NanoUI: [(nanoui_fancy) ? "Yes" : "No"]
" dat += "FPS: [clientfps]
" @@ -508,10 +508,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/firstcat = 1 for(var/category in loadout_categories) - var/datum/loadout_category/LC = loadout_categories[category] - if(LC.donor_only) - if(user.client.donator_level < DONATOR_LEVEL_TWO) // level two donators get the donator loadout, so don't show it to anyone with less than that - continue if(firstcat) firstcat = 0 else @@ -529,7 +525,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts for(var/gear_name in LC.gear) var/datum/gear/G = LC.gear[gear_name] var/ticked = (G.display_name in gear) - dat += "[G.display_name]" + if(G.donator_tier > user.client.donator_level) + dat += "[G.display_name]" + else + dat += "[G.display_name]" dat += "[G.cost]" if(G.allowed_roles) dat += "Restrictions: " @@ -1147,10 +1146,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(TG.display_name in gear) gear -= TG.display_name else - if(TG.donor_only) - if(user.client.donator_level < DONATOR_LEVEL_TWO) // donator items are locked to > tier 2 - //they normally can't even get this far- but just in case of href exploits, we check them here - return + if(TG.donator_tier && user.client.donator_level < TG.donator_tier) + to_chat(user, "That gear is only available at a higher donation tier than you are on.") + return var/total_cost = 0 var/list/type_blacklist = list() for(var/gear_name in gear) @@ -1944,7 +1942,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts toggles ^= MEMBER_PUBLIC if("donor_public") - if(user.client.donator_level >= DONATOR_LEVEL_ONE) + if(user.client.donator_level > 0) toggles ^= DONATOR_PUBLIC if("gender")