@@ -20,7 +20,7 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
2020 if (. )
2121 return
2222 get_metacoins_controller ()
23- get_metacoin_shop_controller ()
23+ get_metacoin_controller ()
2424
2525/ datum / metacoins_controller
2626 var /list /roundstart_ready_ckeys = list ()
@@ -69,12 +69,9 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
6969
7070 processed_ckeys[player_ckey] = TRUE
7171
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" )
72+ var /list /rewards = get_round_rewards(player_ckey)
73+ if (length(rewards))
74+ award_entries (player_ckey, rewards)
7875// / Main proc for your awards. Integrate it wherever you like to
7976// /
8077// / Arguments:
@@ -84,7 +81,7 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
8481// / * reason - reason shown in reward chat message.
8582// / * allow_repeat - If TRUE, skips source dedupe and allows payout on every call.
8683// / * 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
84+ // / * sound - If TRUE plays a sound, check notify_reward
8885// / Returns TRUE when payout is persisted, FALSE otherwise.
8986/ datum / metacoins_controller/ proc / award_metacoins(target_ckey, reward_value, source, reason, allow_repeat = FALSE , resolve_from_award_type = FALSE , sound = TRUE )
9087 var /amount
@@ -95,8 +92,17 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
9592 if (! target_ckey || amount <= 0 )
9693 return FALSE
9794
98- var /sanitized_source = source || " unknown"
99- var /sanitized_reason = reason || " Reward"
95+ var /list /rewards = list (list (
96+ " amount" = amount,
97+ " source" = source || " unknown" ,
98+ " reason" = reason || " Reward" ,
99+ " by_award_type" = resolve_from_award_type,
100+ ))
101+ return award_entries(target_ckey, rewards, allow_repeat, sound)
102+
103+ / datum / metacoins_controller/ proc / award_entries(target_ckey, list / rewards, allow_repeat = FALSE , sound = TRUE )
104+ if (! target_ckey || ! length(rewards))
105+ return FALSE
100106
101107 var /list /source_awards
102108 if (! allow_repeat)
@@ -105,35 +111,77 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
105111 source_awards = list ()
106112 awarded_sources_by_ckey[target_ckey] = source_awards
107113
108- if (source_awards[sanitized_source])
109- return FALSE
114+ var /total_amount = 0
115+ var /list /pay_rewards = list ()
116+ for (var /list /reward_entry as anything in rewards)
117+ var /amount = reward_entry[" amount" ] || 0
118+ if (amount <= 0 )
119+ continue
120+
121+ var /sanitized_source = reward_entry[" source" ] || " unknown"
122+ var /sanitized_reason = reward_entry[" reason" ] || " Reward"
123+ if (! allow_repeat && source_awards[sanitized_source])
124+ log_game (" [ src ] metacoin payout skipped: ckey= [ target_ckey] , amount= [ amount] , source=' [ sanitized_source] ', reason=' [ sanitized_reason] ', cause='duplicate source'." )
125+ continue
126+
127+ pay_rewards += list (list (
128+ " amount" = amount,
129+ " source" = sanitized_source,
130+ " reason" = sanitized_reason,
131+ " by_award_type" = reward_entry[" by_award_type" ] || FALSE ,
132+ ))
133+ total_amount += amount
134+
135+ if (total_amount <= 0 )
136+ return FALSE
110137
111138 if (! SSdbcore. Connect())
139+ log_game (" [ src ] metacoin payout failed: ckey= [ target_ckey] , amount= [ total_amount] , cause='db unavailable', rewards= [ json_encode(pay_rewards)] ." )
112140 return FALSE
113141
114- if (! add_metacoins(target_ckey, amount))
142+ if (! add_metacoins(target_ckey, total_amount))
143+ log_game (" [ src ] metacoin payout failed: ckey= [ target_ckey] , amount= [ total_amount] , cause='update failed', rewards= [ json_encode(pay_rewards)] ." )
115144 return FALSE
116145
117146 if (! allow_repeat)
118- source_awards[sanitized_source] = TRUE
147+ for (var /list /reward_entry as anything in pay_rewards)
148+ source_awards[reward_entry[" source" ]] = TRUE
119149
120- log_game (" [ src ] metacoin payout: ckey= [ target_ckey] , amount= [ amount ] , source=' [ sanitized_source ] ', reason=' [ sanitized_reason ] ', allow_repeat=[ allow_repeat] , by_award_type= [ resolve_from_award_type ] ." )
150+ log_game (" [ src ] metacoin payout: ckey= [ target_ckey] , amount= [ total_amount ] , allow_repeat= [ allow_repeat] , rewards= [ json_encode(pay_rewards) ] ." )
121151
122- add_round_award_log_entry (target_ckey, amount, sanitized_source, sanitized_reason)
152+ for (var /list /reward_entry as anything in pay_rewards)
153+ add_round_award_log_entry (target_ckey, reward_entry[" amount" ], reward_entry[" source" ], reward_entry[" reason" ])
123154
124- var /list /reward_entries = list (list (
125- " amount" = amount,
126- " source" = sanitized_source,
127- " reason" = sanitized_reason,
128- ))
129- notify_player_reward_awarded (target_ckey, amount, reward_entries, sound)
155+ notify_reward (target_ckey, total_amount, pay_rewards, sound)
130156
131157 var /mob /player_mob = get_mob_by_ckey(target_ckey)
132158 if (player_mob)
133159 SStgui. update_user_uis(player_mob)
134160
135161 return TRUE
136162
163+ / datum / metacoins_controller/ proc / get_round_rewards(target_ckey)
164+ var /list /rewards = list ()
165+ if (METACOIN_REWARD_SURVIVE_EVAC > 0 && is_evacuation_condition_met(target_ckey))
166+ rewards += list (list (
167+ " amount" = METACOIN_REWARD_SURVIVE_EVAC ,
168+ " source" = " survived_shift" ,
169+ " reason" = " Survived Shift" ,
170+ ))
171+ if (METACOIN_REWARD_IMPORTANT_JOBS > 0 && is_important_role(target_ckey))
172+ rewards += list (list (
173+ " amount" = METACOIN_REWARD_IMPORTANT_JOBS ,
174+ " source" = " social_role" ,
175+ " reason" = " Highly Important Role" ,
176+ ))
177+ if (METACOIN_REWARD_ANTAG_GREENTEXT > 0 && is_antag_greentext(target_ckey))
178+ rewards += list (list (
179+ " amount" = METACOIN_REWARD_ANTAG_GREENTEXT ,
180+ " source" = " antag_greentext" ,
181+ " reason" = " Antagonist Greentext" ,
182+ ))
183+ return rewards
184+
137185/ datum / metacoins_controller/ proc / get_reward_amount(award_type)
138186 if (! ispath(award_type, / datum / award))
139187 return 0
@@ -222,7 +270,7 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
222270 if (! player_turf)
223271 return FALSE
224272
225- if (player_turf. onCentCom())
273+ if (player_turf. onCentCom() || player_turf . onSyndieBase() || player_turf . on_escaped_shuttle() )
226274 return TRUE
227275
228276 return !! SSshuttle. emergency. shuttle_areas[player_area]
@@ -245,13 +293,13 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
245293 return TRUE
246294 if (antag_datum. antag_flags & ANTAG_FAKE )
247295 continue
248- if (! is_antag_objectives_successful (antag_datum))
296+ if (! is_greentext (antag_datum))
249297 continue
250298 return TRUE
251299
252300 return FALSE
253301
254- / datum / metacoins_controller/ proc / is_antag_objectives_successful ( datum / antagonist/ antag_datum)
302+ / datum / metacoins_controller/ proc / is_greentext ( datum / antagonist/ antag_datum)
255303 if (! antag_datum)
256304 return FALSE
257305
@@ -264,7 +312,7 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
264312
265313 return TRUE
266314
267- / datum / metacoins_controller/ proc / notify_player_reward_awarded (target_ckey, total_reward, list / reward_entries, sound = TRUE )
315+ / datum / metacoins_controller/ proc / notify_reward (target_ckey, total_reward, list / reward_entries, sound = TRUE )
268316 if (total_reward <= 0 )
269317 return
270318
@@ -298,8 +346,9 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
298346 )
299347
300348 var /success = update_query. warn_execute(async = FALSE )
349+ var /affected = update_query. affected
301350 qdel (update_query)
302- return success
351+ return success && affected > 0
303352
304353/ datum / metacoins_panel
305354 var /client /owner
@@ -329,7 +378,7 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
329378 data[" roundAwardLog" ] = client_ckey ? controller. get_round_award_log(client_ckey) : list ()
330379 data[" canOpenShop" ] = TRUE
331380
332- var /balance = fetch_metacoin_balance (client_ckey)
381+ var /balance = fetch_balance (client_ckey)
333382 data[" dbConnected" ] = ! isnull(balance)
334383 data[" balance" ] = isnull(balance) ? 0 : balance
335384
@@ -346,7 +395,7 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller)
346395
347396 return FALSE
348397
349- / datum / metacoins_panel/ proc / fetch_metacoin_balance (target_ckey)
398+ / datum / metacoins_panel/ proc / fetch_balance (target_ckey)
350399 if (! target_ckey)
351400 return 0
352401
@@ -392,7 +441,7 @@ ADMIN_VERB(mc_give, R_ADMIN, "Grant Metacoins", "Grant metacoins to a target cke
392441 if (! length(grant_reason))
393442 grant_reason = " Manual admin grant"
394443
395- var /create_note = tgui_alert(user, " Include a note?" , " Grant Metacoins" , list (" No" , " Yes" )) == " Yes"
444+ // var/create_note = tgui_alert(user, "Include a note?", "Grant Metacoins", list("No", "Yes")) == "Yes"
396445
397446 var /datum /metacoins_controller/controller = get_metacoins_controller()
398447 if (! controller)
@@ -409,15 +458,15 @@ ADMIN_VERB(mc_give, R_ADMIN, "Grant Metacoins", "Grant metacoins to a target cke
409458 log_admin (" [ key_name(user)] failed to grant [ amount] metacoins to [ target_ckey] . Reason=' [ grant_reason] '." )
410459 to_chat (user, span_warning(" Failed to grant metacoins. Check SQL logs" ), confidential = TRUE )
411460 return
412-
461+ /* // i've thought about it, that's kinda useless
413462 if(create_note)
414463 var/note_text = "Metacoins granted: +[amount]. Reason: [grant_reason]"
415464 create_message("note", target_ckey, user.ckey, note_text, null, null, 0, 0, null, 0, "none")
416-
417- var /admin_msg = " [ key_name_admin(user)] granted [ amount] metacoins to [ target_ckey] . Reason=' [ grant_reason] '. Auto-note= [ create_note ? " yes " : " no " ] ."
465+ */
466+ var /admin_msg = " [ key_name_admin(user)] granted [ amount] metacoins to [ target_ckey] . Reason=' [ grant_reason] ']."
418467 message_admins (admin_msg)
419- log_admin (" [ key_name(user)] granted [ amount] metacoins to [ target_ckey] . Reason=' [ grant_reason] '. Auto-note= [ create_note ? " yes " : " no " ] . " )
420- log_game (" [ key_name(user)] granted [ amount] metacoins to [ target_ckey] . Reason=' [ grant_reason] '. Auto-note= [ create_note ? " yes " : " no " ] ." )
468+ log_admin (" [ key_name(user)] granted [ amount] metacoins to [ target_ckey] . Reason=' [ grant_reason] '." )
469+ log_game (" [ key_name(user)] granted [ amount] metacoins to [ target_ckey] . Reason=' [ grant_reason] ']." )
421470
422471/ client / verb / view_metacoins()
423472 set name = " View Metacoins"
0 commit comments