Skip to content

Commit 00139f0

Browse files
authored
Merge branch 'master' into upstream-5
2 parents 10af17a + d370295 commit 00139f0

7 files changed

Lines changed: 245 additions & 109 deletions

File tree

code/datums/achievements/_awards.dm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@
9696
var/datum/metacoins_controller/metacoin_controller = get_metacoins_controller()
9797
if(metacoin_controller)
9898
var/achievement_type_string = "[type]"
99-
metacoin_controller.award_metacoins(holder.owner_ckey, type, "achievement:[achievement_type_string]", "Achievement: [name || achievement_type_string]", FALSE, TRUE)
99+
metacoin_controller.award_metacoins(holder.owner_ckey, type, "achievement:[achievement_type_string]", "Achievement: [name || achievement_type_string]", FALSE, TRUE, sound = TRUE)
100100
//MASSMETA EDIT ADDITION END (metacoins)
101101
to_chat(user, span_greenannounce("<B>Achievement unlocked: [name]!</B>"))
102102
var/sound/sound_to_send = LAZYACCESS(GLOB.achievement_sounds, user.client.prefs.read_preference(/datum/preference/choiced/sound_achievement))
@@ -165,7 +165,7 @@
165165
var/datum/metacoins_controller/metacoin_controller = get_metacoins_controller()
166166
if(metacoin_controller)
167167
var/score_type_string = "[type]"
168-
metacoin_controller.award_metacoins(holder.owner_ckey, type, "score:[score_type_string]", "Score: [name || score_type_string]", TRUE, TRUE)
168+
metacoin_controller.award_metacoins(holder.owner_ckey, type, "score:[score_type_string]", "Score: [name || score_type_string]", TRUE, TRUE, sound = TRUE)
169169
//MASSMETA EDIT ADDITION END (metacoins)
170170

171171
/datum/award/score/get_ui_data(list/award_data, datum/achievement_data/holder)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
author: "MassMeta"
2+
delete-after: True
3+
changes:
4+
- bugfix: "Who won the lottery? I did! - Анонс игрокам в лобби и призракам о джекпоте теперь работает"
5+
- refactor: "Награды за достижения перенесены в датум самой награды, вместо глобального списка"
6+
- bugfix: "Теперь выдача антаг-токена проверяет на наличие mind'а игрока в списке выбранных динамиком, если да, то рефандит токен (возможно)"
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
// Achievement reward defines
2+
// Feel free to add more macro's if you feel like it
3+
#define METACOIN_AWARD_NONE 0
4+
#define METACOIN_AWARD_ONE_POINT 1
5+
#define METACOIN_AWARD_CLOSE_TO_NOTHING 5
6+
#define METACOIN_AWARD_SMALL 50
7+
#define METACOIN_AWARD_MED 150
8+
#define METACOIN_AWARD_BIG 250
9+
#define METACOIN_AWARD_HUGE 500 // economics here kinda suck actually
10+
11+
// Achievements
12+
/datum/award
13+
var/reward = METACOIN_AWARD_SMALL
14+
15+
// METACOIN_AWARD_SMALL
16+
17+
/datum/award/achievement/mafia
18+
reward = METACOIN_AWARD_SMALL
19+
20+
/datum/award/achievement/mafia/universally_hated
21+
reward = METACOIN_AWARD_SMALL
22+
23+
// METACOIN_AWARD_MED
24+
/datum/award/achievement/misc/sisyphus
25+
reward = METACOIN_AWARD_MED
26+
27+
/datum/award/achievement/jobs/theoretical_limits
28+
reward = METACOIN_AWARD_MED
29+
30+
/datum/award/achievement/jobs/service_good
31+
reward = METACOIN_AWARD_MED
32+
33+
// METACOIN_AWARD BIG
34+
35+
/datum/award/achievement/misc/grand_ritual_finale
36+
reward = METACOIN_AWARD_BIG
37+
38+
// METACOIN_AWARD_HUGE
39+
40+
/datum/award/achievement/misc/pulse
41+
reward = METACOIN_AWARD_HUGE
42+
43+
/datum/award/achievement/jobs/helbitaljanken
44+
reward = 1500 // you deserve this
45+
46+
/datum/award/achievement/misc/time_waste
47+
reward = METACOIN_AWARD_HUGE
48+
49+
// Scores
50+
51+
/datum/award/score/
52+
reward = METACOIN_AWARD_CLOSE_TO_NOTHING
53+
54+
// METACOIN_AWARD_NONE
55+
56+
/datum/award/score/achievements_score
57+
reward = METACOIN_AWARD_NONE
58+
59+
/datum/award/score/blood_miner_score
60+
reward = METACOIN_AWARD_NONE
61+
62+
/datum/award/score/intento_score
63+
reward = METACOIN_AWARD_NONE
64+
65+
/datum/award/score/boss_score
66+
reward = METACOIN_AWARD_NONE
67+
68+
/datum/award/score/demonic_miner_score
69+
reward = METACOIN_AWARD_NONE
70+
71+
/datum/award/score/swarmer_beacon_score
72+
reward = METACOIN_AWARD_NONE
73+
74+
/datum/award/achievement/misc/selfouch
75+
reward = METACOIN_AWARD_NONE
76+
77+
// CLOSE_TO_NOTHING
78+
79+
// ONE_POINT
80+
81+
/datum/award/score/drake_score
82+
reward = METACOIN_AWARD_ONE_POINT
83+
84+
/datum/award/score/hierophant_score
85+
reward = METACOIN_AWARD_ONE_POINT
86+
87+
/datum/award/score/maintenance_pill
88+
reward = METACOIN_AWARD_ONE_POINT
89+
90+
/datum/award/score/progress/fish
91+
reward = METACOIN_AWARD_ONE_POINT
92+
93+
/datum/award/score/progress/pda_themes
94+
reward = METACOIN_AWARD_ONE_POINT
95+
96+
/datum/award/score/tendril_score
97+
reward = METACOIN_AWARD_ONE_POINT
98+
99+
// METACOIN_AWARD_SMALL
100+
101+
/datum/award/score/wendigo_score
102+
reward = METACOIN_AWARD_SMALL
103+
104+
/datum/award/score/colussus_score
105+
reward = METACOIN_AWARD_SMALL
106+
107+
/datum/award/score/thething_score
108+
reward = METACOIN_AWARD_SMALL
109+
110+
/datum/award/score/bartender_tourist_score
111+
reward = METACOIN_AWARD_SMALL
112+
113+
/datum/award/score/chef_tourist_score
114+
reward = METACOIN_AWARD_SMALL
115+
116+
/datum/award/score/hardcore_random
117+
reward = METACOIN_AWARD_SMALL
118+
119+
/datum/award/score/style_score
120+
reward = METACOIN_AWARD_SMALL
121+
122+
// METACOIN_AWARD_MED
123+
/datum/award/score/legion_score
124+
reward = METACOIN_AWARD_MED // this one is hard to kill y'know?

modular_meta/features/metacoins/code/metacoin.dm

Lines changed: 31 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,11 @@
1+
// Set these to zero's to disable them completely
12
#define METACOIN_REWARD_ROUNDSTART_READY 10
23
#define METACOIN_REWARD_SURVIVE_EVAC 25
34
#define METACOIN_REWARD_IMPORTANT_JOBS 50
45
#define METACOIN_REWARD_ANTAG_GREENTEXT 50
56
#define METACOIN_IMPORTANT_JOBS list(JOB_SHAFT_MINER, JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_SECURITY_OFFICER_SUPPLY, JOB_SECURITY_OFFICER_SCIENCE, JOB_SECURITY_OFFICER_ENGINEERING, JOB_WARDEN, JOB_SECURITY_OFFICER, JOB_CHIEF_MEDICAL_OFFICER, JOB_DETECTIVE, JOB_CHIEF_ENGINEER ) // THIS SHALL BE IN CONFIG, BUT I'M VERY LAZY, OKAY?
67
#define METACOIN_ICON_PATH "icons/obj/economy.dmi"
78
#define METACOIN_ICON_STATE "coin_tails" // someone get us a nice lil' carp_coin sprite, or "masscoin"
8-
#define METACOIN_AWARD_NONE 0
9-
#define METACOIN_AWARD_ONE_POINT 1
10-
#define METACOIN_AWARD_CLOSE_TO_NOTHING 5
11-
#define METACOIN_AWARD_SMALL 50
12-
#define METACOIN_AWARD_MED 150
13-
#define METACOIN_AWARD_BIG 250
14-
#define METACOIN_AWARD_HUGE 500 // economics here kinda suck actually
15-
16-
//Custom rewards list, if you want to, let's say, award more metacoins for specific achievements.
17-
GLOBAL_ALIST_INIT(metacoin_achievement_reward_overrides, alist(
18-
// 0 metacoins
19-
/datum/award/achievement/misc/selfouch = METACOIN_AWARD_NONE, //so noone abuse it
20-
21-
// 1 metacoin
22-
23-
24-
// 5 metacoins
25-
/datum/award/achievement/mafia = METACOIN_AWARD_CLOSE_TO_NOTHING,
26-
27-
// 50 metacoins
28-
/datum/award/achievement/misc = METACOIN_AWARD_SMALL,
29-
/datum/award/achievement/jobs = METACOIN_AWARD_SMALL,
30-
/datum/award/achievement/mafia/universally_hated = METACOIN_AWARD_SMALL, //you pretty good, so get your 110 points in total
31-
/datum/award/achievement/boss = METACOIN_AWARD_SMALL,
32-
/datum/award/achievement/skill = METACOIN_AWARD_SMALL,
33-
34-
// 150 metacoins
35-
/datum/award/achievement/misc/sisyphus = METACOIN_AWARD_MED,
36-
/datum/award/achievement/jobs/theoretical_limits = METACOIN_AWARD_MED,
37-
/datum/award/achievement/jobs/service_good = METACOIN_AWARD_MED, //we're actually need some kind of service-players
38-
39-
// 250 metacoins
40-
/datum/award/achievement/misc/grand_ritual_finale = METACOIN_AWARD_BIG, //you anyways don't get it, noob
41-
42-
// 500 metacoins
43-
/datum/award/achievement/misc/pulse = METACOIN_AWARD_HUGE, //i just hit the jackpooot.
44-
45-
// Scores
46-
/datum/award/score/hardcore_random = METACOIN_AWARD_CLOSE_TO_NOTHING, //5 more points for random character it's fair
47-
/datum/award/score/intento_score = METACOIN_AWARD_NONE, // That's getting abused 100%
48-
/datum/award/score/chef_tourist_score = METACOIN_AWARD_CLOSE_TO_NOTHING,
49-
/datum/award/score/style_score = METACOIN_AWARD_CLOSE_TO_NOTHING,
50-
/datum/award/score/maintenance_pill = METACOIN_AWARD_ONE_POINT,
51-
/datum/award/score/progress/fish = METACOIN_AWARD_ONE_POINT,
52-
))
539

5410
GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
5511

@@ -94,36 +50,31 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
9450

9551
roundstart_ready_ckeys = ready_ckey_set
9652

97-
var/roundstart_reward = get_reward_amount(METACOIN_REWARD_ROUNDSTART_READY)
98-
if(roundstart_reward <= 0)
53+
if(METACOIN_REWARD_ROUNDSTART_READY <= 0)
9954
return
10055

10156
for(var/player_ckey in roundstart_ready_ckeys)
102-
award_metacoins(player_ckey, roundstart_reward, "roundstart_ready", "Roundstart Ready")
57+
award_metacoins(player_ckey, METACOIN_REWARD_ROUNDSTART_READY, "roundstart_ready", "Roundstart Ready")
10358

10459
/datum/metacoins_controller/proc/grant_round_end_rewards()
10560
if(round_awards_applied)
10661
return
10762

10863
round_awards_applied = TRUE
10964

110-
var/survive_reward = get_reward_amount(METACOIN_REWARD_SURVIVE_EVAC)
111-
var/important_role_reward = get_reward_amount(METACOIN_REWARD_IMPORTANT_JOBS)
112-
var/antag_greentext_reward = get_reward_amount(METACOIN_REWARD_ANTAG_GREENTEXT)
113-
11465
var/list/processed_ckeys = list()
11566
for(var/player_ckey in GLOB.joined_player_list)
11667
if(!player_ckey || processed_ckeys[player_ckey])
11768
continue
11869

11970
processed_ckeys[player_ckey] = TRUE
12071

121-
if(survive_reward > 0 && is_evacuation_condition_met(player_ckey))
122-
award_metacoins(player_ckey, survive_reward, "survived_shift", "Survived Shift")
123-
if(important_role_reward > 0 && is_important_role(player_ckey))
124-
award_metacoins(player_ckey, important_role_reward, "social_role", "Highly Important Role")
125-
if(antag_greentext_reward > 0 && is_antag_greentext(player_ckey))
126-
award_metacoins(player_ckey, antag_greentext_reward, "antag_greentext", "Antagonist Greentext")
72+
if(METACOIN_REWARD_SURVIVE_EVAC > 0 && is_evacuation_condition_met(player_ckey))
73+
award_metacoins(player_ckey, METACOIN_REWARD_SURVIVE_EVAC, "survived_shift", "Survived Shift")
74+
if(METACOIN_REWARD_IMPORTANT_JOBS > 0 && is_important_role(player_ckey))
75+
award_metacoins(player_ckey, METACOIN_REWARD_IMPORTANT_JOBS, "social_role", "Highly Important Role")
76+
if(METACOIN_REWARD_ANTAG_GREENTEXT > 0 && is_antag_greentext(player_ckey))
77+
award_metacoins(player_ckey, METACOIN_REWARD_ANTAG_GREENTEXT, "antag_greentext", "Antagonist Greentext")
12778
/// Main proc for your awards. Integrate it wherever you like to
12879
///
12980
/// Arguments:
@@ -132,11 +83,15 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
13283
/// * source - Source key for round log entries and per-round dedupe checks.
13384
/// * reason - reason shown in reward chat message.
13485
/// * allow_repeat - If TRUE, skips source dedupe and allows payout on every call.
135-
/// * resolve_from_award_type - If TRUE, reward_value is resolved through reward overrides/default.
136-
///
86+
/// * resolve_from_award_type - If TRUE, reward_value is resolved through the award datum's reward var.
87+
/// * sound - If TRUE plays a sound, check notify_player_reward_awarded
13788
/// Returns TRUE when payout is persisted, FALSE otherwise.
138-
/datum/metacoins_controller/proc/award_metacoins(target_ckey, reward_value, source, reason, allow_repeat = FALSE, resolve_from_award_type = FALSE)
139-
var/amount = resolve_from_award_type ? get_achievement_reward(reward_value) : get_reward_amount(reward_value)
89+
/datum/metacoins_controller/proc/award_metacoins(target_ckey, reward_value, source, reason, allow_repeat = FALSE, resolve_from_award_type = FALSE, sound = TRUE)
90+
var/amount
91+
if(resolve_from_award_type)
92+
amount = get_reward_amount(reward_value)
93+
else
94+
amount = reward_value
14095
if(!target_ckey || amount <= 0)
14196
return FALSE
14297

@@ -171,27 +126,24 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
171126
"source" = sanitized_source,
172127
"reason" = sanitized_reason,
173128
))
174-
notify_player_reward_awarded(target_ckey, amount, reward_entries)
129+
notify_player_reward_awarded(target_ckey, amount, reward_entries, sound)
175130

176131
var/mob/player_mob = get_mob_by_ckey(target_ckey)
177132
if(player_mob)
178133
SStgui.update_user_uis(player_mob)
179134

180135
return TRUE
181136

182-
/datum/metacoins_controller/proc/get_achievement_reward(achievement_type)
183-
if(!achievement_type)
137+
/datum/metacoins_controller/proc/get_reward_amount(award_type)
138+
if(!ispath(award_type, /datum/award))
184139
return 0
185140

186-
var/list/reward_overrides = GLOB.metacoin_achievement_reward_overrides
187-
var/custom_reward = reward_overrides?[achievement_type]
188-
if(isnull(custom_reward))
189-
custom_reward = reward_overrides?["[achievement_type]"]
190-
191-
if(isnull(custom_reward))
192-
return get_reward_amount(METACOIN_AWARD_SMALL)
141+
var/datum/award/award_path = award_type
142+
var/reward = award_path.reward
143+
if(isnull(reward))
144+
reward = 50
193145

194-
return get_reward_amount(custom_reward)
146+
return reward
195147

196148
/datum/metacoins_controller/proc/is_roundstart_ready(target_ckey)
197149
if(!target_ckey)
@@ -208,7 +160,7 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
208160

209161
var/total_reward = 0
210162
for(var/list/award_entry in award_log)
211-
total_reward += text2num(award_entry["amount"]) || 0
163+
total_reward += award_entry["amount"] || 0
212164

213165
return total_reward
214166

@@ -312,14 +264,7 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
312264

313265
return TRUE
314266

315-
/datum/metacoins_controller/proc/get_reward_amount(raw_reward)
316-
if(isnum(raw_reward))
317-
return max(0, round(raw_reward))
318-
319-
var/parsed_reward = text2num("[raw_reward]") || 0
320-
return max(0, round(parsed_reward))
321-
322-
/datum/metacoins_controller/proc/notify_player_reward_awarded(target_ckey, total_reward, list/reward_entries)
267+
/datum/metacoins_controller/proc/notify_player_reward_awarded(target_ckey, total_reward, list/reward_entries, sound = TRUE)
323268
if(total_reward <= 0)
324269
return
325270

@@ -329,13 +274,14 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
329274

330275
var/list/reason_parts = list()
331276
for(var/list/reward_entry in reward_entries)
332-
var/entry_amount = text2num(reward_entry["amount"]) || 0
277+
var/entry_amount = reward_entry["amount"] || 0
333278
if(entry_amount <= 0)
334279
continue
335280
reason_parts += "+[entry_amount] [reward_entry["reason"] || "Reward"]"
336281

337282
var/reasons_text = length(reason_parts) ? jointext(reason_parts, ", ") : "+[total_reward] Reward"
338-
player_mob.playsound_local(player_mob, 'sound/effects/coin2.ogg', 40, TRUE, use_reverb = FALSE)
283+
if(sound)
284+
player_mob.playsound_local(player_mob, 'sound/effects/coin2.ogg', 40, TRUE, use_reverb = FALSE, pressure_affected = FALSE)
339285
to_chat(player_mob, span_boldnicegreen("You received [total_reward] metacoins ([reasons_text])."))
340286

341287
/datum/metacoins_controller/proc/add_metacoins(target_ckey, amount)
@@ -419,7 +365,7 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
419365

420366
var/metacoin_balance = 0
421367
if(select_query.NextRow(async = FALSE))
422-
metacoin_balance = text2num(select_query.item[1]) || 0
368+
metacoin_balance = select_query.item[1] || 0
423369

424370
qdel(select_query)
425371
return metacoin_balance
@@ -487,10 +433,3 @@ ADMIN_VERB(mc_give, R_ADMIN, "Grant Metacoins", "Grant metacoins to a target cke
487433
#undef METACOIN_IMPORTANT_JOBS
488434
#undef METACOIN_ICON_PATH
489435
#undef METACOIN_ICON_STATE
490-
#undef METACOIN_AWARD_NONE
491-
#undef METACOIN_AWARD_ONE_POINT
492-
#undef METACOIN_AWARD_CLOSE_TO_NOTHING
493-
#undef METACOIN_AWARD_SMALL
494-
#undef METACOIN_AWARD_MED
495-
#undef METACOIN_AWARD_BIG
496-
#undef METACOIN_AWARD_HUGE

0 commit comments

Comments
 (0)