Skip to content

Commit

Permalink
Merged in Zve/project_underground_3/topsecret (pull request #511)
Browse files Browse the repository at this point in the history
Теперь можно использовать наигранное время для открытия профессий и ролей.
  • Loading branch information
vol-test committed Apr 5, 2016
2 parents fdf1e78 + 4f4c127 commit a793aca
Show file tree
Hide file tree
Showing 32 changed files with 238 additions and 93 deletions.
5 changes: 4 additions & 1 deletion code/__DEFINES/role_preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

//Any number of preferences could be.
//These are synced with the Database, if you change the values of the defines
//then you MUST update the database!
//then you MUST update the database! Jobbans also uses those defines!!
#define ROLE_TRAITOR "Traitor"
#define ROLE_OPERATIVE "Operative"
#define ROLE_CHANGELING "Changeling"
Expand All @@ -21,6 +21,9 @@
#define ROLE_SHADOWLING "Shadowling"
#define ROLE_ABDUCTOR "Abductor"

#define ROLE_ERT "Emergency Response Team"
#define ROLE_DRONE "Maintenance Drone"


//Equating to one means that it's not gamemode prefs, so it should be visible always.
//Pay attention to 'IS_MODE_COMPILED' parametr.
Expand Down
22 changes: 22 additions & 0 deletions code/_globalvars/lists/misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,25 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse

// Posters
//var/global/list/datum/poster/poster_designs = typesof(/datum/poster) - /datum/poster

var/list/roles_ingame_minute_unlock = list(
ROLE_PAI = 0,
ROLE_PLANT = 0,
ROLE_TRAITOR = 480,
ROLE_OPERATIVE = 480,
ROLE_CHANGELING = 480,
ROLE_RAIDER = 480,
ROLE_ALIEN = 480,
ROLE_WIZARD = 960,
ROLE_ERT = 960,
ROLE_REV = 960,
ROLE_MEME = 960,
ROLE_DRONE = 960,
ROLE_CULTIST = 960,
ROLE_BLOB = 960,
ROLE_NINJA = 1200,
ROLE_MALF = 1200,
ROLE_MUTINEER = 1200,
ROLE_SHADOWLING = 1200,
ROLE_ABDUCTOR = 1200
)
4 changes: 4 additions & 0 deletions code/controllers/configuration.dm
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@
var/admin_legacy_system = 0 //Defines whether the server uses the legacy admin system with admins.txt or the SQL system. Config option in config.txt
var/ban_legacy_system = 0 //Defines whether the server uses the legacy banning system with the files in /data or the SQL system. Config option in config.txt
var/use_age_restriction_for_jobs = 0 //Do jobs use account age restrictions? --requires database
var/use_ingame_minutes_restriction_for_jobs = 0 //Do jobs use in-game minutes instead account age for restrictions?

var/simultaneous_pm_warning_timeout = 100

Expand Down Expand Up @@ -223,6 +224,9 @@
if ("use_age_restriction_for_jobs")
config.use_age_restriction_for_jobs = 1

if ("use_ingame_minutes_restriction_for_jobs")
config.use_ingame_minutes_restriction_for_jobs = 1

if ("jobs_have_minimal_access")
config.jobs_have_minimal_access = 1

Expand Down
2 changes: 2 additions & 0 deletions code/controllers/subsystem/pai.dm
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,8 @@ var/datum/subsystem/pai/SSpai
for(var/mob/dead/observer/O in player_list)
if(jobban_isbanned(O, ROLE_PAI))
continue
if(role_available_in_minutes(O, ROLE_PAI))
continue
if(asked[O.ckey])
if(world.time < asked[O.ckey] + askDelay || asked[O.ckey] == NEVER_FOR_THIS_ROUND)
continue
Expand Down
4 changes: 2 additions & 2 deletions code/game/gamemodes/autotraitor/autotraitor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@
playercount += 1
if (player.client && player.mind && player.mind.special_role && player.stat != DEAD)
traitorcount += 1
if (player.client && player.mind && !player.mind.special_role && player.stat != DEAD && (player.client && (ROLE_TRAITOR in player.client.prefs.be_role)) && !jobban_isbanned(player, "Syndicate"))
if (player.client && player.mind && !player.mind.special_role && player.stat != DEAD && (player.client && (ROLE_TRAITOR in player.client.prefs.be_role)) && !jobban_isbanned(player, "Syndicate") && !jobban_isbanned(player, ROLE_TRAITOR) && !role_available_in_minutes(player, ROLE_TRAITOR))
possible_traitors += player
for(var/datum/mind/player in possible_traitors)
for(var/job in restricted_jobs)
Expand Down Expand Up @@ -160,7 +160,7 @@
if(SSshuttle.departed)
return
//message_admins("Late Join Check")
if((character.client && (ROLE_TRAITOR in character.client.prefs.be_role)) && !jobban_isbanned(character, "Syndicate"))
if((character.client && (ROLE_TRAITOR in character.client.prefs.be_role)) && !jobban_isbanned(character, "Syndicate") && !jobban_isbanned(character, ROLE_TRAITOR) && !role_available_in_minutes(character, ROLE_TRAITOR))
//message_admins("Late Joiner has Be Syndicate")
//message_admins("Checking number of players")
var/playercount = 0
Expand Down
6 changes: 3 additions & 3 deletions code/game/gamemodes/cult/runes.dm
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ var/list/sacrificed = list()
M.visible_message("<span class='red'>[M] writhes in pain as the markings below him glow a bloody red.</span>", \
"<span class='red'>AAAAAAHHHH!.</span>", \
"<span class='red'>You hear an anguished scream.</span>")
if(is_convertable_to_cult(M.mind) && !jobban_isbanned(M, "cultist"))//putting jobban check here because is_convertable uses mind as argument
if(is_convertable_to_cult(M.mind) && !jobban_isbanned(M, ROLE_CULTIST) && !jobban_isbanned(M, "Syndicate") && !role_available_in_minutes(M, ROLE_CULTIST))//putting jobban check here because is_convertable uses mind as argument
ticker.mode.add_cultist(M.mind)
M.mind.special_role = "Cultist"
M << "<span class='cult'>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.</span>"
Expand Down Expand Up @@ -404,7 +404,7 @@ var/list/sacrificed = list()
break
if(!ghost)
return this_rune.fizzle()
if(jobban_isbanned(ghost, "cultist"))
if(jobban_isbanned(ghost, ROLE_CULTIST) || jobban_isbanned(ghost, "Syndicate") || role_available_in_minutes(ghost, ROLE_CULTIST))
return this_rune.fizzle()

usr.say("Gal'h'rfikk harfrandid mud[pick("'","`")]gib!")
Expand Down Expand Up @@ -1113,4 +1113,4 @@ var/list/sacrificed = list()
user.Paralyse(7)
D.Paralyse(7)

return
return
2 changes: 1 addition & 1 deletion code/game/gamemodes/game_mode.dm
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ Implants;
for(var/mob/new_player/player in player_list)
if(player.client && player.ready)
if(role in player.client.prefs.be_role)
if(!jobban_isbanned(player, "Syndicate") && !jobban_isbanned(player, role))
if(!jobban_isbanned(player, "Syndicate") && !jobban_isbanned(player, role) && !role_available_in_minutes(player, role))
players += player

// Shuffle the players list so that it becomes ping-independent.
Expand Down
2 changes: 1 addition & 1 deletion code/game/gamemodes/gang/recaller.dm
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@
user << "<span class='warning'>\icon[src] Error: All positions filled.</span>"
return

if(jobban_isbanned(user, "revolutionary") || jobban_isbanned(user, "Syndicate"))
if(jobban_isbanned(user, ROLE_REV) || jobban_isbanned(user, "Syndicate") || role_available_in_minutes(user, ROLE_REV))
user << "<span class='warning'>\icon[src] ACCESS DENIED: Blacklisted user.</span>"
return 0

Expand Down
2 changes: 2 additions & 0 deletions code/game/gamemodes/revolution/rp_revolution.dm
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@
src << "\red <b>[M] is already be a revolutionary!</b>"
else if(!ticker.mode:is_convertible(M))
src << "\red <b>[M] is implanted with a loyalty implant - Remove it first!</b>"
else if(jobban_isbanned(M, ROLE_REV) || jobban_isbanned(M, "Syndicate") || role_available_in_minutes(M, ROLE_REV))
src << "\red <b>[M] is a blacklisted player!</b>"
else
if(world.time < M.mind.rev_cooldown)
src << "\red Wait five seconds before reconversion attempt."
Expand Down
2 changes: 2 additions & 0 deletions code/game/jobs/job/captain.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
access = list() //See get_access()
minimal_access = list() //See get_access()
minimal_player_age = 14
minimal_player_ingame_minutes = 3900

/datum/job/captain/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -65,6 +66,7 @@
idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1
minimal_player_age = 10
minimal_player_ingame_minutes = 2400
access = list(access_security, access_sec_doors, access_brig, access_court, access_forensics_lockers,
access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads,
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
Expand Down
10 changes: 10 additions & 0 deletions code/game/jobs/job/civilian.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
selection_color = "#d7b088"
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
minimal_player_ingame_minutes = 1200

/datum/job/qm/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -44,6 +45,7 @@
selection_color = "#d7b088"
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
minimal_player_ingame_minutes = 960


/datum/job/cargo_tech/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
Expand Down Expand Up @@ -75,6 +77,7 @@
selection_color = "#d7b088"
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
minimal_access = list(access_mining, access_mint, access_mining_station, access_mailsorting)
minimal_player_ingame_minutes = 960

/datum/job/mining/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -110,6 +113,7 @@
selection_color = "#bbe291"
access = list(access_hydroponics, access_bar, access_kitchen, access_morgue)
minimal_access = list(access_bar)
minimal_player_ingame_minutes = 480

/datum/job/bartender/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -156,6 +160,7 @@
access = list(access_hydroponics, access_bar, access_kitchen, access_morgue)
minimal_access = list(access_kitchen)
alt_titles = list("Cook")
minimal_player_ingame_minutes = 480

/datum/job/chef/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -186,6 +191,7 @@
access = list(access_hydroponics, access_bar, access_kitchen) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning.
minimal_access = list(access_hydroponics) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning.
alt_titles = list("Hydroponicist")
minimal_player_ingame_minutes = 480

/datum/job/hydro/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -220,6 +226,7 @@
selection_color = "#bbe291"
access = list(access_janitor, access_maint_tunnels)
minimal_access = list(access_janitor, access_maint_tunnels)
minimal_player_ingame_minutes = 480

/datum/job/janitor/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -251,6 +258,7 @@
access = list(access_library, access_maint_tunnels)
minimal_access = list(access_library)
alt_titles = list("Journalist")
minimal_player_ingame_minutes = 480

/datum/job/librarian/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -282,6 +290,7 @@
selection_color = "#dddddd"
access = list(access_lawyer, access_court, access_sec_doors, access_maint_tunnels)
minimal_access = list(access_lawyer, access_court, access_sec_doors)
minimal_player_ingame_minutes = 1560

/datum/job/lawyer/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -324,6 +333,7 @@
selection_color = "#dddddd"
access = list(access_clown, access_theatre, access_maint_tunnels)
minimal_access = list(access_clown, access_theatre)
minimal_player_ingame_minutes = 480

/datum/job/clown/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down
1 change: 1 addition & 0 deletions code/game/jobs/job/civilian_chaplain.dm
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
access = list(access_morgue, access_chapel_office, access_crematorium, access_maint_tunnels)
minimal_access = list(access_morgue, access_chapel_office, access_crematorium)
alt_titles = list("Counselor")
minimal_player_ingame_minutes = 480

/datum/job/chaplain/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down
3 changes: 3 additions & 0 deletions code/game/jobs/job/engineering.dm
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
access_heads, access_construction, access_sec_doors, access_minisat,
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload)
minimal_player_age = 7
minimal_player_ingame_minutes = 2400

/datum/job/chief_engineer/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -57,6 +58,7 @@
minimal_access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction)
alt_titles = list("Maintenance Technician","Engine Technician","Electrician")
minimal_player_age = 3
minimal_player_ingame_minutes = 540

/datum/job/engineer/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -95,6 +97,7 @@
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_external_airlocks)
minimal_access = list(access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction, access_external_airlocks)
minimal_player_age = 3
minimal_player_ingame_minutes = 600

/datum/job/atmos/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down
46 changes: 43 additions & 3 deletions code/game/jobs/job/job.dm
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@
//If you have use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.)
var/minimal_player_age = 0

//If you have use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_ingame_minutes ingame minutes old. (meaning they must play a game.)
var/minimal_player_ingame_minutes = 0

/datum/job/proc/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
return 1

Expand All @@ -55,11 +58,14 @@

//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1
/datum/job/proc/player_old_enough(client/C)
if(available_in_days(C) == 0)
return 1 //Available in 0 days = available right now = player is old enough to play.
if(config.use_ingame_minutes_restriction_for_jobs)
if(available_in_real_minutes(C) == 0)
return 1 //Available in 0 minutes = available right now = player is old enough to play.
else
if(available_in_days(C) == 0)
return 1 //Available in 0 days = available right now = player is old enough to play.
return 0


/datum/job/proc/available_in_days(client/C)
if(!C)
return 0
Expand All @@ -72,6 +78,40 @@

return max(0, minimal_player_age - C.player_age)

/datum/job/proc/available_in_real_minutes(client/C)
if(!C)
return 0
if(C.holder || C.deadmin_holder)
return 0
if(!config.use_age_restriction_for_jobs)
return 0
if(!isnum(C.player_ingame_age))
return 0
if(!isnum(minimal_player_ingame_minutes))
return 0

return max(0, minimal_player_ingame_minutes - C.player_ingame_age)

//Not sure where to put this proc, lets leave it here for now.
/proc/role_available_in_minutes(mob/M, role)
if(!M || !istype(M) || !M.ckey)
return 0
var/client/C = M.client
if(!C)
return 0
if(C.holder || C.deadmin_holder)
return 0
if(!config.use_age_restriction_for_jobs)
return 0
if(!config.use_ingame_minutes_restriction_for_jobs)
return 0
if(!isnum(C.player_ingame_age))
return 0
if(!(role in roles_ingame_minute_unlock))
return 0

return max(0, roles_ingame_minute_unlock[role] - C.player_ingame_age)

/datum/job/proc/apply_fingerprints(var/mob/living/carbon/human/H)
if(!istype(H))
return
Expand Down
6 changes: 6 additions & 0 deletions code/game/jobs/job/medical.dm
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
access_keycard_auth, access_sec_doors, access_psychiatrist)
minimal_player_age = 10
minimal_player_ingame_minutes = 2400

/datum/job/cmo/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -54,6 +55,7 @@
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
minimal_access = list(access_medical, access_morgue, access_surgery)
alt_titles = list("Surgeon","Emergency Physician","Nurse")
minimal_player_ingame_minutes = 960

/datum/job/doctor/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -127,6 +129,7 @@
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
minimal_access = list(access_medical, access_chemistry)
alt_titles = list("Pharmacist")
minimal_player_ingame_minutes = 960

/datum/job/chemist/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -160,6 +163,7 @@
selection_color = "#ffeef0"
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research)
minimal_access = list(access_medical, access_morgue, access_genetics, access_research)
minimal_player_ingame_minutes = 960

/datum/job/geneticist/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -195,6 +199,7 @@
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
minimal_access = list(access_medical, access_virology)
alt_titles = list("Pathologist","Microbiologist")
minimal_player_ingame_minutes = 960

/datum/job/virologist/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down Expand Up @@ -233,6 +238,7 @@
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_psychiatrist)
minimal_access = list(access_medical, access_psychiatrist)
alt_titles = list("Psychologist")
minimal_player_ingame_minutes = 960

/datum/job/psychiatrist/equip(var/mob/living/carbon/human/H, visualsOnly = FALSE)
if(!H) return 0
Expand Down
Loading

0 comments on commit a793aca

Please sign in to comment.