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
5410GLOBAL_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