diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index adf5e2ab45..14d772437d 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -342,7 +342,7 @@ var/global/datum/controller/occupations/job_master
else
permitted = 1
- if(G.whitelisted && !is_alien_whitelisted(H, G.whitelisted))
+ if(G.whitelisted && !is_alien_whitelisted(H, all_species[G.whitelisted]))
permitted = 0
if(!permitted)
diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm
index 440cf2e22e..a391ef60b4 100644
--- a/code/game/jobs/whitelist.dm
+++ b/code/game/jobs/whitelist.dm
@@ -30,22 +30,48 @@ var/list/whitelist = list()
else
alien_whitelist = splittext(text, "\n")
-//todo: admin aliens
-/proc/is_alien_whitelisted(mob/M, var/species)
- if(!config.usealienwhitelist)
- return 1
- if(species == "human" || species == "Human")
- return 1
- if(check_rights(R_ADMIN, 0))
- return 1
- if(!alien_whitelist)
- return 0
- if(M && species)
+/proc/is_alien_whitelisted(mob/M, var/datum/species/species)
+ //They are admin or the whitelist isn't in use
+ if(whitelist_overrides(M)) return 1
+
+ //You did something wrong
+ if(!M || !species) return 0
+
+ //The species isn't even whitelisted
+ if(!(species.spawn_flags & SPECIES_IS_WHITELISTED)) return 1
+
+ //If we have a loaded file, search it
+ if(alien_whitelist)
for (var/s in alien_whitelist)
- if(findtext(s,"[M.ckey] - [species]"))
+ if(findtext(s,"[M.ckey] - [species.name]"))
return 1
if(findtext(s,"[M.ckey] - All"))
return 1
+
+/proc/is_lang_whitelisted(mob/M, var/datum/language/language)
+ //They are admin or the whitelist isn't in use
+ if(whitelist_overrides(M)) return 1
+
+ //You did something wrong
+ if(!M || !language) return 0
+
+ //The language isn't even whitelisted
+ if(!(language.flags & WHITELISTED)) return 1
+
+ //If we have a loaded file, search it
+ if(alien_whitelist)
+ for (var/s in alien_whitelist)
+ if(findtext(s,"[M.ckey] - [language.name]"))
+ return 1
+ if(findtext(s,"[M.ckey] - All"))
+ return 1
+
+/proc/whitelist_overrides(mob/M)
+ if(!config.usealienwhitelist)
+ return 1
+ if(check_rights(R_ADMIN, 0))
+ return 1
+
return 0
#undef WHITELISTFILE
diff --git a/code/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm
index 7e9a803766..5d4a73c64a 100644
--- a/code/modules/client/preference_setup/general/02_language.dm
+++ b/code/modules/client/preference_setup/general/02_language.dm
@@ -49,7 +49,7 @@
var/list/available_languages = S.secondary_langs.Copy()
for(var/L in all_languages)
var/datum/language/lang = all_languages[L]
- if(!(lang.flags & RESTRICTED) && (!config.usealienwhitelist || is_alien_whitelisted(user, L) || !(lang.flags & WHITELISTED)))
+ if(!(lang.flags & RESTRICTED) && (is_lang_whitelisted(user, lang)))
available_languages |= L
// make sure we don't let them waste slots on the default languages
diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm
index 3842d243f8..f92f889de8 100644
--- a/code/modules/client/preference_setup/general/03_body.dm
+++ b/code/modules/client/preference_setup/general/03_body.dm
@@ -640,11 +640,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
dat += "
"
var/restricted = 0
- if(config.usealienwhitelist) //If we're using the whitelist, make sure to check it!
- if(!(current_species.spawn_flags & SPECIES_CAN_JOIN))
- restricted = 2
- else if((current_species.spawn_flags & SPECIES_IS_WHITELISTED) && !is_alien_whitelisted(preference_mob(),current_species))
- restricted = 1
+
+ if(!(current_species.spawn_flags & SPECIES_CAN_JOIN))
+ restricted = 2
+ else if(!is_alien_whitelisted(preference_mob(),current_species))
+ restricted = 1
if(restricted)
if(restricted == 1)
diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm
index dd494b03bc..31b510ef1a 100644
--- a/code/modules/client/preference_setup/loadout/loadout.dm
+++ b/code/modules/client/preference_setup/loadout/loadout.dm
@@ -55,7 +55,7 @@ var/list/gear_datums = list()
var/list/valid_gear_choices = list()
for(var/gear_name in gear_datums)
var/datum/gear/G = gear_datums[gear_name]
- if(G.whitelisted && !is_alien_whitelisted(preference_mob(), G.whitelisted))
+ if(G.whitelisted && !is_alien_whitelisted(preference_mob(), all_species[G.whitelisted]))
continue
if(max_cost && G.cost > max_cost)
continue
diff --git a/code/modules/mob/living/carbon/alien/diona/progression.dm b/code/modules/mob/living/carbon/alien/diona/progression.dm
index 588acea5ad..de9bc72bda 100644
--- a/code/modules/mob/living/carbon/alien/diona/progression.dm
+++ b/code/modules/mob/living/carbon/alien/diona/progression.dm
@@ -1,6 +1,6 @@
/mob/living/carbon/alien/diona/confirm_evolution()
- if(!is_alien_whitelisted(src, "Diona") && config.usealienwhitelist)
+ if(!is_alien_whitelisted(src, all_species["Diona"]))
src << alert("You are currently not whitelisted to play as a full diona.")
return null
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 6d9d3c3bda..58fa9ecdd1 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -152,16 +152,6 @@
usr << "\red The round is either not ready, or has already finished..."
return
- if(client.prefs.species != "Human" && !check_rights(R_ADMIN, 0))
- if(!is_alien_whitelisted(src, client.prefs.species) && config.usealienwhitelist)
- src << alert("You are currently not whitelisted to play [client.prefs.species].")
- return 0
-
- var/datum/species/S = all_species[client.prefs.species]
- if(!(S.spawn_flags & SPECIES_IS_WHITELISTED))
- src << alert("Your current species,[client.prefs.species], is not available for play on the station.")
- return 0
-
LateChoices()
if(href_list["manifest"])
@@ -176,15 +166,14 @@
usr << "The station is currently exploding. Joining would go poorly."
return
- if(client.prefs.species != "Human")
- if(!is_alien_whitelisted(src, client.prefs.species) && config.usealienwhitelist)
- src << alert("You are currently not whitelisted to play [client.prefs.species].")
- return 0
+ if(!is_alien_whitelisted(src, all_species[client.prefs.species]))
+ src << alert("You are currently not whitelisted to play [client.prefs.species].")
+ return 0
- var/datum/species/S = all_species[client.prefs.species]
- if(!(S.spawn_flags & SPECIES_CAN_JOIN))
- src << alert("Your current species, [client.prefs.species], is not available for play on the station.")
- return 0
+ var/datum/species/S = all_species[client.prefs.species]
+ if(!(S.spawn_flags & SPECIES_CAN_JOIN))
+ src << alert("Your current species, [client.prefs.species], is not available for play on the station.")
+ return 0
AttemptLateSpawn(href_list["SelectedJob"],client.prefs.spawnpoint)
return
@@ -413,7 +402,7 @@
if(chosen_species && use_species_name)
// Have to recheck admin due to no usr at roundstart. Latejoins are fine though.
- if(is_species_whitelisted(chosen_species) || has_admin_rights())
+ if(is_alien_whitelisted(chosen_species))
new_character = new(loc, use_species_name)
if(!new_character)
@@ -424,8 +413,7 @@
for(var/lang in client.prefs.alternate_languages)
var/datum/language/chosen_language = all_languages[lang]
if(chosen_language)
- if(!config.usealienwhitelist || !(chosen_language.flags & WHITELISTED) || is_alien_whitelisted(src, lang) || has_admin_rights() \
- || (new_character.species && (chosen_language.name in new_character.species.secondary_langs)))
+ if(is_lang_whitelisted(src,chosen_language) || (new_character.species && (chosen_language.name in new_character.species.secondary_langs)))
new_character.add_language(lang)
if(ticker.random_players)
@@ -487,10 +475,6 @@
/mob/new_player/proc/has_admin_rights()
return check_rights(R_ADMIN, 0, src)
-/mob/new_player/proc/is_species_whitelisted(datum/species/S)
- if(!S) return 1
- return is_alien_whitelisted(src, S.name) || !config.usealienwhitelist || !(S.spawn_flags & SPECIES_IS_WHITELISTED)
-
/mob/new_player/get_species()
var/datum/species/chosen_species
if(client.prefs.species)
@@ -499,7 +483,7 @@
if(!chosen_species)
return "Human"
- if(is_species_whitelisted(chosen_species) || has_admin_rights())
+ if(is_alien_whitelisted(chosen_species))
return chosen_species.name
return "Human"