diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 02b8a8e30b1..10e4e985b37 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -319,10 +319,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 1d26a013986..c15ea50c93e 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 4ecb8fea741..ae2698bcfb2 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -328,8 +328,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)
@@ -343,12 +341,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()
@@ -376,6 +368,7 @@
to_chat(src, message)
clientmessages.Remove(ckey)
+ donator_check()
send_resources()
@@ -400,6 +393,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.")
@@ -431,13 +430,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")
|