diff --git a/code/datums/achievements/_awards.dm b/code/datums/achievements/_awards.dm index 5ac205750948..080d90dc01f2 100644 --- a/code/datums/achievements/_awards.dm +++ b/code/datums/achievements/_awards.dm @@ -96,7 +96,7 @@ var/datum/metacoins_controller/metacoin_controller = get_metacoins_controller() if(metacoin_controller) var/achievement_type_string = "[type]" - metacoin_controller.award_metacoins(holder.owner_ckey, type, "achievement:[achievement_type_string]", "Achievement: [name || achievement_type_string]", FALSE, TRUE) + metacoin_controller.award_metacoins(holder.owner_ckey, type, "achievement:[achievement_type_string]", "Achievement: [name || achievement_type_string]", FALSE, TRUE, sound = TRUE) //MASSMETA EDIT ADDITION END (metacoins) to_chat(user, span_greenannounce("Achievement unlocked: [name]!")) var/sound/sound_to_send = LAZYACCESS(GLOB.achievement_sounds, user.client.prefs.read_preference(/datum/preference/choiced/sound_achievement)) @@ -165,7 +165,7 @@ var/datum/metacoins_controller/metacoin_controller = get_metacoins_controller() if(metacoin_controller) var/score_type_string = "[type]" - metacoin_controller.award_metacoins(holder.owner_ckey, type, "score:[score_type_string]", "Score: [name || score_type_string]", TRUE, TRUE) + metacoin_controller.award_metacoins(holder.owner_ckey, type, "score:[score_type_string]", "Score: [name || score_type_string]", TRUE, TRUE, sound = TRUE) //MASSMETA EDIT ADDITION END (metacoins) /datum/award/score/get_ui_data(list/award_data, datum/achievement_data/holder) diff --git a/modular_meta/features/metacoins/code/award_overrides.dm b/modular_meta/features/metacoins/code/award_overrides.dm new file mode 100644 index 000000000000..8d0c742365c8 --- /dev/null +++ b/modular_meta/features/metacoins/code/award_overrides.dm @@ -0,0 +1,124 @@ +// Achievement reward defines +// Feel free to add more macro's if you feel like it +#define METACOIN_AWARD_NONE 0 +#define METACOIN_AWARD_ONE_POINT 1 +#define METACOIN_AWARD_CLOSE_TO_NOTHING 5 +#define METACOIN_AWARD_SMALL 50 +#define METACOIN_AWARD_MED 150 +#define METACOIN_AWARD_BIG 250 +#define METACOIN_AWARD_HUGE 500 // economics here kinda suck actually + +// Achievements +/datum/award + var/reward = METACOIN_AWARD_SMALL + +// METACOIN_AWARD_SMALL + +/datum/award/achievement/mafia + reward = METACOIN_AWARD_SMALL + +/datum/award/achievement/mafia/universally_hated + reward = METACOIN_AWARD_SMALL + +// METACOIN_AWARD_MED +/datum/award/achievement/misc/sisyphus + reward = METACOIN_AWARD_MED + +/datum/award/achievement/jobs/theoretical_limits + reward = METACOIN_AWARD_MED + +/datum/award/achievement/jobs/service_good + reward = METACOIN_AWARD_MED + +// METACOIN_AWARD BIG + +/datum/award/achievement/misc/grand_ritual_finale + reward = METACOIN_AWARD_BIG + +// METACOIN_AWARD_HUGE + +/datum/award/achievement/misc/pulse + reward = METACOIN_AWARD_HUGE + +/datum/award/achievement/jobs/helbitaljanken + reward = 1500 // you deserve this + +/datum/award/achievement/misc/time_waste + reward = METACOIN_AWARD_HUGE + +// Scores + +/datum/award/score/ + reward = METACOIN_AWARD_CLOSE_TO_NOTHING + +// METACOIN_AWARD_NONE + +/datum/award/score/achievements_score + reward = METACOIN_AWARD_NONE + +/datum/award/score/blood_miner_score + reward = METACOIN_AWARD_NONE + +/datum/award/score/intento_score + reward = METACOIN_AWARD_NONE + +/datum/award/score/boss_score + reward = METACOIN_AWARD_NONE + +/datum/award/score/demonic_miner_score + reward = METACOIN_AWARD_NONE + +/datum/award/score/swarmer_beacon_score + reward = METACOIN_AWARD_NONE + +/datum/award/achievement/misc/selfouch + reward = METACOIN_AWARD_NONE + +// CLOSE_TO_NOTHING + +// ONE_POINT + +/datum/award/score/drake_score + reward = METACOIN_AWARD_ONE_POINT + +/datum/award/score/hierophant_score + reward = METACOIN_AWARD_ONE_POINT + +/datum/award/score/maintenance_pill + reward = METACOIN_AWARD_ONE_POINT + +/datum/award/score/progress/fish + reward = METACOIN_AWARD_ONE_POINT + +/datum/award/score/progress/pda_themes + reward = METACOIN_AWARD_ONE_POINT + +/datum/award/score/tendril_score + reward = METACOIN_AWARD_ONE_POINT + +// METACOIN_AWARD_SMALL + +/datum/award/score/wendigo_score + reward = METACOIN_AWARD_SMALL + +/datum/award/score/colussus_score + reward = METACOIN_AWARD_SMALL + +/datum/award/score/thething_score + reward = METACOIN_AWARD_SMALL + +/datum/award/score/bartender_tourist_score + reward = METACOIN_AWARD_SMALL + +/datum/award/score/chef_tourist_score + reward = METACOIN_AWARD_SMALL + +/datum/award/score/hardcore_random + reward = METACOIN_AWARD_SMALL + +/datum/award/score/style_score + reward = METACOIN_AWARD_SMALL + +// METACOIN_AWARD_MED +/datum/award/score/legion_score + reward = METACOIN_AWARD_MED // this one is hard to kill y'know? diff --git a/modular_meta/features/metacoins/code/metacoin.dm b/modular_meta/features/metacoins/code/metacoin.dm index 27a45c0eb4d7..658c303ff84e 100644 --- a/modular_meta/features/metacoins/code/metacoin.dm +++ b/modular_meta/features/metacoins/code/metacoin.dm @@ -1,3 +1,4 @@ +// Set these to zero's to disable them completely #define METACOIN_REWARD_ROUNDSTART_READY 10 #define METACOIN_REWARD_SURVIVE_EVAC 25 #define METACOIN_REWARD_IMPORTANT_JOBS 50 @@ -5,51 +6,6 @@ #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? #define METACOIN_ICON_PATH "icons/obj/economy.dmi" #define METACOIN_ICON_STATE "coin_tails" // someone get us a nice lil' carp_coin sprite, or "masscoin" -#define METACOIN_AWARD_NONE 0 -#define METACOIN_AWARD_ONE_POINT 1 -#define METACOIN_AWARD_CLOSE_TO_NOTHING 5 -#define METACOIN_AWARD_SMALL 50 -#define METACOIN_AWARD_MED 150 -#define METACOIN_AWARD_BIG 250 -#define METACOIN_AWARD_HUGE 500 // economics here kinda suck actually - -//Custom rewards list, if you want to, let's say, award more metacoins for specific achievements. -GLOBAL_ALIST_INIT(metacoin_achievement_reward_overrides, alist( - // 0 metacoins - /datum/award/achievement/misc/selfouch = METACOIN_AWARD_NONE, //so noone abuse it - - // 1 metacoin - - - // 5 metacoins - /datum/award/achievement/mafia = METACOIN_AWARD_CLOSE_TO_NOTHING, - - // 50 metacoins - /datum/award/achievement/misc = METACOIN_AWARD_SMALL, - /datum/award/achievement/jobs = METACOIN_AWARD_SMALL, - /datum/award/achievement/mafia/universally_hated = METACOIN_AWARD_SMALL, //you pretty good, so get your 110 points in total - /datum/award/achievement/boss = METACOIN_AWARD_SMALL, - /datum/award/achievement/skill = METACOIN_AWARD_SMALL, - - // 150 metacoins - /datum/award/achievement/misc/sisyphus = METACOIN_AWARD_MED, - /datum/award/achievement/jobs/theoretical_limits = METACOIN_AWARD_MED, - /datum/award/achievement/jobs/service_good = METACOIN_AWARD_MED, //we're actually need some kind of service-players - - // 250 metacoins - /datum/award/achievement/misc/grand_ritual_finale = METACOIN_AWARD_BIG, //you anyways don't get it, noob - - // 500 metacoins - /datum/award/achievement/misc/pulse = METACOIN_AWARD_HUGE, //i just hit the jackpooot. - - // Scores - /datum/award/score/hardcore_random = METACOIN_AWARD_CLOSE_TO_NOTHING, //5 more points for random character it's fair - /datum/award/score/intento_score = METACOIN_AWARD_NONE, // That's getting abused 100% - /datum/award/score/chef_tourist_score = METACOIN_AWARD_CLOSE_TO_NOTHING, - /datum/award/score/style_score = METACOIN_AWARD_CLOSE_TO_NOTHING, - /datum/award/score/maintenance_pill = METACOIN_AWARD_ONE_POINT, - /datum/award/score/progress/fish = METACOIN_AWARD_ONE_POINT, -)) GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller) @@ -94,12 +50,11 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller) roundstart_ready_ckeys = ready_ckey_set - var/roundstart_reward = get_reward_amount(METACOIN_REWARD_ROUNDSTART_READY) - if(roundstart_reward <= 0) + if(METACOIN_REWARD_ROUNDSTART_READY <= 0) return for(var/player_ckey in roundstart_ready_ckeys) - award_metacoins(player_ckey, roundstart_reward, "roundstart_ready", "Roundstart Ready") + award_metacoins(player_ckey, METACOIN_REWARD_ROUNDSTART_READY, "roundstart_ready", "Roundstart Ready") /datum/metacoins_controller/proc/grant_round_end_rewards() if(round_awards_applied) @@ -107,10 +62,6 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller) round_awards_applied = TRUE - var/survive_reward = get_reward_amount(METACOIN_REWARD_SURVIVE_EVAC) - var/important_role_reward = get_reward_amount(METACOIN_REWARD_IMPORTANT_JOBS) - var/antag_greentext_reward = get_reward_amount(METACOIN_REWARD_ANTAG_GREENTEXT) - var/list/processed_ckeys = list() for(var/player_ckey in GLOB.joined_player_list) if(!player_ckey || processed_ckeys[player_ckey]) @@ -118,12 +69,12 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller) processed_ckeys[player_ckey] = TRUE - if(survive_reward > 0 && is_evacuation_condition_met(player_ckey)) - award_metacoins(player_ckey, survive_reward, "survived_shift", "Survived Shift") - if(important_role_reward > 0 && is_important_role(player_ckey)) - award_metacoins(player_ckey, important_role_reward, "social_role", "Highly Important Role") - if(antag_greentext_reward > 0 && is_antag_greentext(player_ckey)) - award_metacoins(player_ckey, antag_greentext_reward, "antag_greentext", "Antagonist Greentext") + if(METACOIN_REWARD_SURVIVE_EVAC > 0 && is_evacuation_condition_met(player_ckey)) + award_metacoins(player_ckey, METACOIN_REWARD_SURVIVE_EVAC, "survived_shift", "Survived Shift") + if(METACOIN_REWARD_IMPORTANT_JOBS > 0 && is_important_role(player_ckey)) + award_metacoins(player_ckey, METACOIN_REWARD_IMPORTANT_JOBS, "social_role", "Highly Important Role") + if(METACOIN_REWARD_ANTAG_GREENTEXT > 0 && is_antag_greentext(player_ckey)) + award_metacoins(player_ckey, METACOIN_REWARD_ANTAG_GREENTEXT, "antag_greentext", "Antagonist Greentext") /// Main proc for your awards. Integrate it wherever you like to /// /// Arguments: @@ -132,11 +83,15 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller) /// * source - Source key for round log entries and per-round dedupe checks. /// * reason - reason shown in reward chat message. /// * allow_repeat - If TRUE, skips source dedupe and allows payout on every call. -/// * resolve_from_award_type - If TRUE, reward_value is resolved through reward overrides/default. -/// +/// * resolve_from_award_type - If TRUE, reward_value is resolved through the award datum's reward var. +/// * sound - If TRUE plays a sound, check notify_player_reward_awarded /// Returns TRUE when payout is persisted, FALSE otherwise. -/datum/metacoins_controller/proc/award_metacoins(target_ckey, reward_value, source, reason, allow_repeat = FALSE, resolve_from_award_type = FALSE) - var/amount = resolve_from_award_type ? get_achievement_reward(reward_value) : get_reward_amount(reward_value) +/datum/metacoins_controller/proc/award_metacoins(target_ckey, reward_value, source, reason, allow_repeat = FALSE, resolve_from_award_type = FALSE, sound = TRUE) + var/amount + if(resolve_from_award_type) + amount = get_reward_amount(reward_value) + else + amount = reward_value if(!target_ckey || amount <= 0) return FALSE @@ -171,7 +126,7 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller) "source" = sanitized_source, "reason" = sanitized_reason, )) - notify_player_reward_awarded(target_ckey, amount, reward_entries) + notify_player_reward_awarded(target_ckey, amount, reward_entries, sound) var/mob/player_mob = get_mob_by_ckey(target_ckey) if(player_mob) @@ -179,19 +134,16 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller) return TRUE -/datum/metacoins_controller/proc/get_achievement_reward(achievement_type) - if(!achievement_type) +/datum/metacoins_controller/proc/get_reward_amount(award_type) + if(!ispath(award_type, /datum/award)) return 0 - var/list/reward_overrides = GLOB.metacoin_achievement_reward_overrides - var/custom_reward = reward_overrides?[achievement_type] - if(isnull(custom_reward)) - custom_reward = reward_overrides?["[achievement_type]"] - - if(isnull(custom_reward)) - return get_reward_amount(METACOIN_AWARD_SMALL) + var/datum/award/award_path = award_type + var/reward = award_path.reward + if(isnull(reward)) + reward = 50 - return get_reward_amount(custom_reward) + return reward /datum/metacoins_controller/proc/is_roundstart_ready(target_ckey) if(!target_ckey) @@ -208,7 +160,7 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller) var/total_reward = 0 for(var/list/award_entry in award_log) - total_reward += text2num(award_entry["amount"]) || 0 + total_reward += award_entry["amount"] || 0 return total_reward @@ -312,14 +264,7 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller) return TRUE -/datum/metacoins_controller/proc/get_reward_amount(raw_reward) - if(isnum(raw_reward)) - return max(0, round(raw_reward)) - - var/parsed_reward = text2num("[raw_reward]") || 0 - return max(0, round(parsed_reward)) - -/datum/metacoins_controller/proc/notify_player_reward_awarded(target_ckey, total_reward, list/reward_entries) +/datum/metacoins_controller/proc/notify_player_reward_awarded(target_ckey, total_reward, list/reward_entries, sound = TRUE) if(total_reward <= 0) return @@ -329,13 +274,14 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller) var/list/reason_parts = list() for(var/list/reward_entry in reward_entries) - var/entry_amount = text2num(reward_entry["amount"]) || 0 + var/entry_amount = reward_entry["amount"] || 0 if(entry_amount <= 0) continue reason_parts += "+[entry_amount] [reward_entry["reason"] || "Reward"]" var/reasons_text = length(reason_parts) ? jointext(reason_parts, ", ") : "+[total_reward] Reward" - player_mob.playsound_local(player_mob, 'sound/effects/coin2.ogg', 40, TRUE, use_reverb = FALSE) + if(sound) + player_mob.playsound_local(player_mob, 'sound/effects/coin2.ogg', 40, TRUE, use_reverb = FALSE, pressure_affected = FALSE) to_chat(player_mob, span_boldnicegreen("You received [total_reward] metacoins ([reasons_text]).")) /datum/metacoins_controller/proc/add_metacoins(target_ckey, amount) @@ -419,7 +365,7 @@ GLOBAL_DATUM(metacoins_controller, /datum/metacoins_controller) var/metacoin_balance = 0 if(select_query.NextRow(async = FALSE)) - metacoin_balance = text2num(select_query.item[1]) || 0 + metacoin_balance = select_query.item[1] || 0 qdel(select_query) return metacoin_balance @@ -487,10 +433,3 @@ ADMIN_VERB(mc_give, R_ADMIN, "Grant Metacoins", "Grant metacoins to a target cke #undef METACOIN_IMPORTANT_JOBS #undef METACOIN_ICON_PATH #undef METACOIN_ICON_STATE -#undef METACOIN_AWARD_NONE -#undef METACOIN_AWARD_ONE_POINT -#undef METACOIN_AWARD_CLOSE_TO_NOTHING -#undef METACOIN_AWARD_SMALL -#undef METACOIN_AWARD_MED -#undef METACOIN_AWARD_BIG -#undef METACOIN_AWARD_HUGE diff --git a/modular_meta/features/metacoins/code/metacoin_gambling.dm b/modular_meta/features/metacoins/code/metacoin_gambling.dm index a21820e1da70..0b04986efa42 100644 --- a/modular_meta/features/metacoins/code/metacoin_gambling.dm +++ b/modular_meta/features/metacoins/code/metacoin_gambling.dm @@ -112,24 +112,58 @@ return max(next_spin_time - world.time, 0) -/datum/metacoin_shop_controller/proc/announce_slot_big_win(winner_name, payout_amount, jackpot_hit) +/datum/metacoin_shop_controller/proc/announce_slot_big_win(winner_name, payout_amount, jackpot_hit, atom/winner_source) if(!winner_name || payout_amount <= 0) return -//priority announce might be too much actually.. who cares though? + + var/announce_text + var/announce_title + var/announce_sound + if(jackpot_hit) - priority_announce( - text = "[winner_name] hit the metacoin slot JACKPOT and won [payout_amount] metacoins!", - title = "Metacoin Slot Jackpot", - sound = 'sound/machines/roulette/roulettejackpot.ogg', - has_important_message = TRUE, - ) + announce_text = "[winner_name] hit the metacoin slot JACKPOT and won [payout_amount] metacoins!" + announce_title = "Metacoin Slot Jackpot" + announce_sound = 'sound/machines/roulette/roulettejackpot.ogg' + else if(payout_amount >= METACOIN_SLOT_PAYOUT_LINE5) + announce_text = "[winner_name] won a huge metacoin slot payout: [payout_amount] metacoins!" + announce_title = "Metacoin Slot Big Win" + announce_sound = 'sound/effects/kaching.ogg' + else return - if(payout_amount >= METACOIN_SLOT_PAYOUT_LINE5) - priority_announce( - text = "[winner_name] won a huge metacoin slot payout: [payout_amount] metacoins!", - title = "Metacoin Slot Big Win", - sound = 'sound/effects/kaching.ogg', + var/title = html_encode(announce_title) + var/text = html_encode(announce_text) + var/announce_final = "