Download Data/Achievement.lua from sirnii/myspace: direct link, hf CLI and curl.
- Browser
- Download file 60.2 kB
-
https://huggingface.co/spaces/sirnii/myspace/resolve/main/Data/Achievement.lua
- Command line
-
hf download hf://spaces/sirnii/myspace/Data/Achievement.lua
-
curl -L -o Achievement.lua https://huggingface.co/spaces/sirnii/myspace/resolve/main/Data/Achievement.lua
60.2 kB
| -- ========== GENERATED BY Achievement Editor DO NOT EDIT MANUALLY! ========== | |
| PlaceObj('Achievement', { | |
| description = T(577854314600, --[[Achievement PlatinumTrophy description (limited to 100 characters on XBOX)]] "Unlocked all trophies."), | |
| display_name = T(220715659890, --[[Achievement PlatinumTrophy display_name]] "Medal Of Honor"), | |
| group = "PlayStation", | |
| how_to = T(498691177443, --[[Achievement PlatinumTrophy how_to (limited to 100 characters on XBOX)]] "Unlock all trophies."), | |
| id = "PlatinumTrophy", | |
| ps4_grade = "platinum", | |
| ps4_id = 0, | |
| ps5_grade = "platinum", | |
| ps5_id = 0, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(810430241463, --[[Achievement BloodRain description (limited to 100 characters on XBOX)]] "Dealt 1000 damage to enemies in one turn."), | |
| display_name = T(907749527147, --[[Achievement BloodRain display_name]] "Blood Rain"), | |
| group = "Combat", | |
| how_to = T(431654490364, --[[Achievement BloodRain how_to (limited to 100 characters on XBOX)]] "Deal 1000 damage to enemies in one turn."), | |
| id = "BloodRain", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "DamageDone", | |
| Handler = function (self, attacker, target, dmg, hit_descr) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(attacker) and attacker:IsOnEnemySide(target) and dmg > 0 then | |
| gv_Achievements[self.id] = (gv_Achievements[self.id] or 0) + dmg | |
| if gv_Achievements[self.id] >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "TurnEnded", | |
| Handler = function (self, teamEnded) | |
| if GetAchievementFlags(self.id) then return end | |
| gv_Achievements[self.id] = 0 | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "Attack", | |
| Handler = function (self, action, results, attack_args, combat_starting) | |
| if GetAchievementFlags(self.id) then return end | |
| if not combat_starting and not g_Combat then | |
| gv_Achievements[self.id] = 0 | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 1, | |
| ps5_id = 1, | |
| target = 1000, | |
| xbox_id = 46, | |
| }) | |
| PlaceObj('Achievement', { | |
| Comment = "current player", | |
| SortKey = 1000, | |
| description = T(911958725547, --[[Achievement BornKiller description (limited to 100 characters on XBOX)]] "Killed 5 enemies in one turn with a single merc."), | |
| display_name = T(365161191013, --[[Achievement BornKiller display_name]] "Born Killer"), | |
| group = "Combat", | |
| how_to = T(152740288772, --[[Achievement BornKiller how_to (limited to 100 characters on XBOX)]] "Kill 5 enemies in one turn with a single merc."), | |
| id = "BornKiller", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "OnAttack", | |
| Handler = function (self, attacker, action, target, results, attack_args) | |
| if GetAchievementFlags(self.id) then return end | |
| if g_CageFighting then return end | |
| if IsMerc(attacker) and attacker.ControlledBy == netUniqueId then | |
| local kills = EnemiesKilled(attacker, results) | |
| if kills > 0 then | |
| local state = GetAccountCurrentGameAchievementState(self.id) or {} | |
| local mercId = attacker.session_id | |
| state[mercId] = (state[mercId] or 0) + kills | |
| if state[mercId] >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| SetAccountCurrentGameAchievementState(self.id, state) | |
| end | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "TurnStart", | |
| Handler = function (self, teamEnded) | |
| if GetAchievementFlags(self.id) then return end | |
| SetAccountCurrentGameAchievementState(self.id, {}) | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "Attack", | |
| Handler = function (self, action, results, attack_args, combat_starting) | |
| if GetAchievementFlags(self.id) then return end | |
| if not combat_starting and not g_Combat then | |
| SetAccountCurrentGameAchievementState(self.id, {}) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 2, | |
| ps5_id = 2, | |
| target = 5, | |
| xbox_id = 42, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(872847195726, --[[Achievement BulletProof description (limited to 100 characters on XBOX)]] "Finished the campaign without a single merc dying or getting downed."), | |
| display_name = T(725359206535, --[[Achievement BulletProof display_name]] "Bullet Proof"), | |
| group = "Combat", | |
| how_to = T(115567857703, --[[Achievement BulletProof how_to (limited to 100 characters on XBOX)]] "Finish the campaign without a single merc dying or getting downed."), | |
| id = "BulletProof", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "CampaignEnd", | |
| Handler = function (self, campaignId) | |
| if GetAchievementFlags(self.id) then return end | |
| if gv_Achievements[self.id] ~= "failed" then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "UnitDowned", | |
| Handler = function (self, unit) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(unit) then | |
| gv_Achievements[self.id] = "failed" | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "UnitDied", | |
| Handler = function (self, unit, killer, results) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(unit) then | |
| gv_Achievements[self.id] = "failed" | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_grade = "silver", | |
| ps4_id = 3, | |
| ps5_grade = "silver", | |
| ps5_id = 3, | |
| xbox_id = 15, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(119695960362, --[[Achievement FlawlessVictory description (limited to 100 characters on XBOX)]] "Conquered an Outpost without losing HP."), | |
| display_name = T(434089830814, --[[Achievement FlawlessVictory display_name]] "Flawless Victory"), | |
| group = "Combat", | |
| how_to = T(926544369717, --[[Achievement FlawlessVictory how_to (limited to 100 characters on XBOX)]] "Conquer an Outpost without losing HP."), | |
| id = "FlawlessVictory", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "DamageDone", | |
| Handler = function (self, attacker, target, dmg, hit_descr) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(target) and hit_descr.prev_hit_points and target.HitPoints < hit_descr.prev_hit_points then | |
| gv_Achievements[self.id] = false | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "SectorSideChanged", | |
| Handler = function (self, sectorId, oldSide, newSide) | |
| if GetAchievementFlags(self.id) then return end | |
| if gv_Achievements[self.id] == sectorId and IsPlayerSide(newSide) then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "EnterSector", | |
| Handler = function (self, game_start, load_game) | |
| if GetAchievementFlags(self.id) then return end | |
| if not game_start and not load_game then | |
| local sector = gv_Sectors[gv_CurrentSectorId] | |
| if sector.Guardpost and not IsPlayerSide(sector.Side) then | |
| gv_Achievements[self.id] = gv_CurrentSectorId | |
| end | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 4, | |
| ps5_id = 4, | |
| xbox_id = 49, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(855827054392, --[[Achievement MartialArtiste description (limited to 100 characters on XBOX)]] "Conquered an Outpost without using firearms."), | |
| display_name = T(330886195762, --[[Achievement MartialArtiste display_name]] "Martial Artiste"), | |
| group = "Combat", | |
| how_to = T(509509051660, --[[Achievement MartialArtiste how_to (limited to 100 characters on XBOX)]] "Conquer an Outpost without using firearms."), | |
| id = "MartialArtiste", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "OnAttack", | |
| Handler = function (self, attacker, action, target, results, attack_args) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(attacker) and not IsKindOf(results.weapon, "MeleeWeapon") then | |
| gv_Achievements[self.id] = false | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "SectorSideChanged", | |
| Handler = function (self, sectorId, oldSide, newSide) | |
| if GetAchievementFlags(self.id) then return end | |
| if gv_Achievements[self.id] == sectorId and IsPlayerSide(newSide) then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "EnterSector", | |
| Handler = function (self, game_start, load_game) | |
| if GetAchievementFlags(self.id) then return end | |
| if not game_start and not load_game then | |
| local sector = gv_Sectors[gv_CurrentSectorId] | |
| if sector.Guardpost and not IsPlayerSide(sector.Side) then | |
| gv_Achievements[self.id] = gv_CurrentSectorId | |
| end | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_grade = "silver", | |
| ps4_id = 5, | |
| ps5_grade = "silver", | |
| ps5_id = 5, | |
| xbox_id = 48, | |
| }) | |
| PlaceObj('Achievement', { | |
| Comment = "current player", | |
| SortKey = 1000, | |
| description = T(851738195780, --[[Achievement NaturalSprinter description (limited to 100 characters on XBOX)]] "Moved a merc 35 tiles away in a single turn."), | |
| display_name = T(729701469966, --[[Achievement NaturalSprinter display_name]] "Natural Sprinter"), | |
| group = "Combat", | |
| how_to = T(698490476872, --[[Achievement NaturalSprinter how_to (limited to 100 characters on XBOX)]] "Move a merc 35 tiles away in a single turn."), | |
| id = "NaturalSprinter", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "TurnStart", | |
| Handler = function (self, team) | |
| if GetAchievementFlags(self.id) then return end | |
| SetAccountCurrentGameAchievementState(self.id, {}) | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "UnitMovementDone", | |
| Handler = function (self, unit, action_id, prev_pos) | |
| if not g_Combat or not prev_pos or not IsMerc(unit) or unit.ControlledBy ~= netUniqueId then return end | |
| local state = GetAccountCurrentGameAchievementState(self.id) or {} | |
| state[unit.session_id] = (state[unit.session_id] or 0) + (unit:GetDist(prev_pos) / const.SlabSizeX) | |
| if state[unit.session_id] >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| SetAccountCurrentGameAchievementState(self.id, state) | |
| end, | |
| }), | |
| }, | |
| ps4_id = 6, | |
| ps5_id = 6, | |
| target = 35, | |
| xbox_id = 43, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(164832430302, --[[Achievement Overwatchmen description (limited to 100 characters on XBOX)]] "Made 10 overwatch attacks in one turn."), | |
| display_name = T(996243104692, --[[Achievement Overwatchmen display_name]] "Overwatchmen"), | |
| group = "Combat", | |
| how_to = T(141359912587, --[[Achievement Overwatchmen how_to (limited to 100 characters on XBOX)]] "Make 10 overwatch attacks in one turn."), | |
| id = "Overwatchmen", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "OnAttack", | |
| Handler = function (self, attacker, action, target, results, attack_args) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(attacker) and attack_args.opportunity_attack and attack_args.opportunity_attack_type == "Overwatch" then | |
| gv_Achievements[self.id] = (gv_Achievements[self.id] or 0) + 1 | |
| if gv_Achievements[self.id] >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "TurnEnded", | |
| Handler = function (self, teamEnded) | |
| if GetAchievementFlags(self.id) then return end | |
| gv_Achievements[self.id] = 0 | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "CombatEnd", | |
| Handler = function (self, teamEnded) | |
| if GetAchievementFlags(self.id) then return end | |
| gv_Achievements[self.id] = 0 | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "Attack", | |
| Handler = function (self, action, results, attack_args, combat_starting, attacker, target) | |
| if GetAchievementFlags(self.id) then return end | |
| if not combat_starting and not g_Combat then | |
| gv_Achievements[self.id] = 0 | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 7, | |
| ps5_id = 7, | |
| target = 10, | |
| xbox_id = 45, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(338728430601, --[[Achievement SilentAndDeadly description (limited to 100 characters on XBOX)]] "Killed 7 enemies in one sector without triggering combat."), | |
| display_name = T(490534628132, --[[Achievement SilentAndDeadly display_name]] "Silent And Deadly"), | |
| group = "Combat", | |
| how_to = T(669838096944, --[[Achievement SilentAndDeadly how_to (limited to 100 characters on XBOX)]] "Kill 7 enemies in one sector without triggering combat."), | |
| id = "SilentAndDeadly", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "OnAttack", | |
| Handler = function (self, attacker, action, target, results, attack_args) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(attacker) and not g_Combat then | |
| local kills = EnemiesKilled(attacker, results) | |
| gv_Achievements[self.id] = (gv_Achievements[self.id] or 0) + kills | |
| if gv_Achievements[self.id] >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "EnterSector", | |
| Handler = function (self, game_start, load_game) | |
| if GetAchievementFlags(self.id) then return end | |
| if not game_start and not load_game then | |
| gv_Achievements[self.id] = 0 | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "CombatStart", | |
| Handler = function (self, dynamic_data) | |
| if GetAchievementFlags(self.id) then return end | |
| gv_Achievements[self.id] = 0 | |
| end, | |
| }), | |
| }, | |
| ps4_id = 8, | |
| ps5_id = 8, | |
| target = 7, | |
| xbox_id = 47, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(704839762293, --[[Achievement TrueCrit description (limited to 100 characters on XBOX)]] "Made 10 critical hits in one turn."), | |
| display_name = T(868987388803, --[[Achievement TrueCrit display_name]] "True Crit"), | |
| group = "Combat", | |
| how_to = T(699334368445, --[[Achievement TrueCrit how_to (limited to 100 characters on XBOX)]] "Make 10 critical hits in one turn."), | |
| id = "TrueCrit", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "OnAttack", | |
| Handler = function (self, attacker, action, target, results, attack_args) | |
| if GetAchievementFlags(self.id) then return end | |
| if not g_Combat or not IsKindOf(target, "Unit") then return end | |
| if IsMerc(attacker) then | |
| local crits = 0 | |
| if results.shots and #results.shots > 0 then | |
| for _, shot in ipairs(results.shots) do | |
| for _, hit in ipairs(shot.hits) do | |
| if hit.critical and IsKindOf(hit.obj, "Unit") then | |
| crits = crits + 1 | |
| end | |
| end | |
| end | |
| else | |
| if results.crit then | |
| crits = crits + 1 | |
| end | |
| end | |
| gv_Achievements[self.id] = (gv_Achievements[self.id] or 0) + crits | |
| if gv_Achievements[self.id] >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "TurnEnded", | |
| Handler = function (self, teamEnded) | |
| if GetAchievementFlags(self.id) then return end | |
| gv_Achievements[self.id] = 0 | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "CombatEnd", | |
| Handler = function (self, test_combat, combat, anyEnemies) | |
| if GetAchievementFlags(self.id) then return end | |
| gv_Achievements[self.id] = 0 | |
| end, | |
| }), | |
| }, | |
| ps4_id = 9, | |
| ps5_id = 9, | |
| target = 10, | |
| xbox_id = 44, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(322312460334, --[[Achievement AFistfulOfDiamonds description (limited to 100 characters on XBOX)]] "Controlled all sectors with mines."), | |
| display_name = T(312797445218, --[[Achievement AFistfulOfDiamonds display_name]] "A Fistful Of Diamonds"), | |
| group = "Direction", | |
| how_to = T(762369019591, --[[Achievement AFistfulOfDiamonds how_to (limited to 100 characters on XBOX)]] "Control all sectors with mines."), | |
| id = "AFistfulOfDiamonds", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "SectorSideChanged", | |
| Handler = function (self, sectorId, oldSide, newSide) | |
| if GetAchievementFlags(self.id) then return end | |
| local sector = gv_Sectors[sectorId] | |
| if IsPlayerSide(newSide) and sector.Mine then | |
| local totalMines = 0 | |
| local minesControlled = 0 | |
| for _, s in pairs(gv_Sectors) do | |
| if s.Mine then | |
| totalMines = totalMines + 1 | |
| if IsPlayerSide(s.Side) then | |
| minesControlled = minesControlled + 1 | |
| end | |
| end | |
| end | |
| if minesControlled >= totalMines then | |
| AchievementUnlock(self.id) | |
| end | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 10, | |
| ps5_id = 10, | |
| xbox_id = 1, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(290395589625, --[[Achievement AllYourBaseAreBelongToUs description (limited to 100 characters on XBOX)]] "Controlled 5 sectors with an Outpost."), | |
| display_name = T(144123582589, --[[Achievement AllYourBaseAreBelongToUs display_name]] "All Your Base Are Belong To Us"), | |
| group = "Direction", | |
| how_to = T(877212686494, --[[Achievement AllYourBaseAreBelongToUs how_to (limited to 100 characters on XBOX)]] "Control 5 sectors with an Outpost."), | |
| id = "AllYourBaseAreBelongToUs", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "SectorSideChanged", | |
| Handler = function (self, sectorId, oldSide, newSide) | |
| if GetAchievementFlags(self.id) then return end | |
| local sector = gv_Sectors[sectorId] | |
| if IsPlayerSide(newSide) and sector.Guardpost then | |
| local guardpostsControlled = 0 | |
| for _, s in pairs(gv_Sectors) do | |
| if s.Guardpost and IsPlayerSide(s.Side) then | |
| guardpostsControlled = guardpostsControlled + 1 | |
| end | |
| end | |
| if guardpostsControlled >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 11, | |
| ps5_id = 11, | |
| target = 5, | |
| xbox_id = 4, | |
| }) | |
| PlaceObj('Achievement', { | |
| Comment = "current player", | |
| SortKey = 1000, | |
| description = T(545503004820, --[[Achievement BreakingTheWall description (limited to 100 characters on XBOX)]] "Killed an enemy with a shot through an obstacle."), | |
| display_name = T(193951673209, --[[Achievement BreakingTheWall display_name]] "Breaking The Wall"), | |
| group = "Direction", | |
| how_to = T(810505979553, --[[Achievement BreakingTheWall how_to (limited to 100 characters on XBOX)]] "Kill an enemy with a shot through an obstacle."), | |
| id = "BreakingTheWall", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "OnAttack", | |
| Handler = function (self, attacker, action, target, results, attack_args) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(attacker) and attacker.ControlledBy == netUniqueId and results.shots and #results.shots > 0 and results.clear_attacks < #results.shots and EnemiesKilled(attacker, results) > 0 then | |
| local wallHit | |
| for _, shot in ipairs(results.shots) do | |
| for _, hit in ipairs(shot.hits) do | |
| if hit.obj and IsKindOf(hit.obj, "WallSlab") then | |
| wallHit = true | |
| break | |
| end | |
| end | |
| if wallHit then | |
| break | |
| end | |
| end | |
| if wallHit then | |
| AchievementUnlock(self.id) | |
| end | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 12, | |
| ps5_id = 12, | |
| xbox_id = 6, | |
| }) | |
| PlaceObj('Achievement', { | |
| Comment = "current player", | |
| SortKey = 1000, | |
| description = T(186518333537, --[[Achievement Bullseye description (limited to 100 characters on XBOX)]] "Killed 25 enemies with a headshot."), | |
| display_name = T(904913789519, --[[Achievement Bullseye display_name]] "Bullseye"), | |
| group = "Direction", | |
| how_to = T(865763504878, --[[Achievement Bullseye how_to (limited to 100 characters on XBOX)]] "Kill 25 enemies with a headshot."), | |
| id = "Bullseye", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "OnAttack", | |
| Handler = function (self, attacker, action, target, results, attack_args) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(attacker) and attacker.ControlledBy == netUniqueId then | |
| local kills = {} | |
| for _, shot in ipairs(results.shots) do | |
| for _, hit in ipairs(shot.hits) do | |
| if hit.obj and attacker:IsOnEnemySide(hit.obj) and hit.spot_group == "Head" and table.find(results.killed_units, hit.obj) then | |
| table.insert_unique(kills, hit.obj.session_id) | |
| end | |
| end | |
| end | |
| if #kills > 0 then | |
| local state = GetAccountCurrentGameAchievementState(self.id) or 0 | |
| state = state + #kills | |
| if state >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| SetAccountCurrentGameAchievementState(self.id, state) | |
| end | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 13, | |
| ps5_id = 13, | |
| target = 25, | |
| xbox_id = 3, | |
| }) | |
| PlaceObj('Achievement', { | |
| Comment = "current player", | |
| SortKey = 1000, | |
| description = T(523513735051, --[[Achievement DifferentWaysToDie description (limited to 100 characters on XBOX)]] "Killed an enemy with 5 different weapon types."), | |
| display_name = T(361303909436, --[[Achievement DifferentWaysToDie display_name]] "Different Ways To Die"), | |
| group = "Direction", | |
| how_to = T(203891626791, --[[Achievement DifferentWaysToDie how_to (limited to 100 characters on XBOX)]] "Kill an enemy with 5 different weapon types."), | |
| id = "DifferentWaysToDie", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "OnAttack", | |
| Handler = function (self, attacker, action, target, results, attack_args) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(attacker) and attacker.ControlledBy == netUniqueId and results.weapon and results.weapon.WeaponType then | |
| local kills = EnemiesKilled(attacker, results) | |
| if kills > 0 then | |
| local state = GetAccountCurrentGameAchievementState(self.id) or {} | |
| table.insert_unique(state, results.weapon.WeaponType) | |
| if #state >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| SetAccountCurrentGameAchievementState(self.id, state) | |
| end | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 14, | |
| ps5_id = 14, | |
| target = 5, | |
| xbox_id = 2, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(993435384871, --[[Achievement FieldTraining description (limited to 100 characters on XBOX)]] "Defended a sector with the help of militia without autoresolve."), | |
| display_name = T(231296917797, --[[Achievement FieldTraining display_name]] "Field Training"), | |
| group = "Direction", | |
| how_to = T(774529404226, --[[Achievement FieldTraining how_to (limited to 100 characters on XBOX)]] "Defend a sector with the help of militia without autoresolve."), | |
| id = "FieldTraining", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "ConflictEnd", | |
| Handler = function (self, sector, bNoVoice, playerAttacking, playerWon, isAutoResolve) | |
| if GetAchievementFlags(self.id) then return end | |
| if not playerAttacking and playerWon and #GetMilitiaSquads(sector) > 0 and not isAutoResolve then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 15, | |
| ps5_id = 15, | |
| xbox_id = 13, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(506831456489, --[[Achievement HotDiamonds description (limited to 100 characters on XBOX)]] "Ambushed a diamond shipment and got the case."), | |
| display_name = T(921919975685, --[[Achievement HotDiamonds display_name]] "Hot Diamonds"), | |
| group = "Direction", | |
| how_to = T(529510145610, --[[Achievement HotDiamonds how_to (limited to 100 characters on XBOX)]] "Ambush a diamond shipment and get the case."), | |
| id = "HotDiamonds", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "ItemAdded", | |
| Handler = function (self, unit, item, slotName, pos) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(unit) and item.class == "DiamondBriefcase" and item.extra_tag == "dynamic-db" then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "CashInItem", | |
| Handler = function (self, item) | |
| if GetAchievementFlags(self.id) then return end | |
| if item.class == "DiamondBriefcase" and item.extra_tag == "dynamic-db" then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 16, | |
| ps5_id = 16, | |
| xbox_id = 11, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(491484399853, --[[Achievement LethalWeapons description (limited to 100 characters on XBOX)]] "Killed 10 enemies in a single turn."), | |
| display_name = T(478171225920, --[[Achievement LethalWeapons display_name]] "Lethal Weapons"), | |
| group = "Direction", | |
| how_to = T(377131575653, --[[Achievement LethalWeapons how_to (limited to 100 characters on XBOX)]] "Kill 10 enemies in a single turn."), | |
| id = "LethalWeapons", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "OnAttack", | |
| Handler = function (self, attacker, action, target, results, attack_args) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(attacker) then | |
| local kills = EnemiesKilled(attacker, results) | |
| if kills > 0 then | |
| gv_Achievements[self.id] = (gv_Achievements[self.id] or 0) + kills | |
| if gv_Achievements[self.id] >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "TurnEnded", | |
| Handler = function (self, teamEnded) | |
| if GetAchievementFlags(self.id) then return end | |
| gv_Achievements[self.id] = 0 | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "Attack", | |
| Handler = function (self, action, results, attack_args, combat_starting) | |
| if GetAchievementFlags(self.id) then return end | |
| if not combat_starting and not g_Combat then | |
| gv_Achievements[self.id] = 0 | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 17, | |
| ps5_id = 17, | |
| target = 10, | |
| xbox_id = 9, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(792959937717, --[[Achievement LivingLegend description (limited to 100 characters on XBOX)]] "Hired a Legendary merc."), | |
| display_name = T(872535188900, --[[Achievement LivingLegend display_name]] "Living Legend"), | |
| group = "Direction", | |
| how_to = T(147916492607, --[[Achievement LivingLegend how_to (limited to 100 characters on XBOX)]] "Hire a Legendary merc."), | |
| id = "LivingLegend", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "MercHired", | |
| Handler = function (self, mercId, price, days, alreadyHired) | |
| if GetAchievementFlags(self.id) then return end | |
| local merc = gv_UnitData[mercId] | |
| if merc and merc.Tier == "Legendary" then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 18, | |
| ps5_id = 18, | |
| xbox_id = 8, | |
| }) | |
| PlaceObj('Achievement', { | |
| Comment = "current player", | |
| SortKey = 1000, | |
| description = T(842369104667, --[[Achievement ModdingExpert description (limited to 100 characters on XBOX)]] "Installed 7 mods on a single weapon."), | |
| display_name = T(424158225526, --[[Achievement ModdingExpert display_name]] "Modding Expert"), | |
| group = "Direction", | |
| how_to = T(175006091972, --[[Achievement ModdingExpert how_to (limited to 100 characters on XBOX)]] "Install 7 mods on a single weapon."), | |
| id = "ModdingExpert", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "WeaponModifiedSuccessSync", | |
| Handler = function (self, weapon, owner, modAdded, mechanic) | |
| if GetAchievementFlags(self.id) then return end | |
| if mechanic.ControlledBy == netUniqueId and IsKindOf(weapon, "FirearmBase") and weapon:GetNumAttachedComponents() >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 19, | |
| ps5_id = 19, | |
| target = 7, | |
| xbox_id = 10, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(268671993376, --[[Achievement NewKidOnTheBlock description (limited to 100 characters on XBOX)]] "Created an I.M.P. merc."), | |
| display_name = T(252968329296, --[[Achievement NewKidOnTheBlock display_name]] "New Kid On The Block"), | |
| group = "Direction", | |
| how_to = T(315702958489, --[[Achievement NewKidOnTheBlock how_to (limited to 100 characters on XBOX)]] "Create an I.M.P. merc."), | |
| id = "NewKidOnTheBlock", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "MercHired", | |
| Handler = function (self, mercId, price, days, alreadyHired) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsImpUnit(gv_UnitData[mercId]) then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 20, | |
| ps5_id = 20, | |
| xbox_id = 7, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(921666624864, --[[Achievement Sabotage description (limited to 100 characters on XBOX)]] "Reduced all defense shields of an Outpost."), | |
| display_name = T(686488730003, --[[Achievement Sabotage display_name]] "Sabotage"), | |
| group = "Direction", | |
| how_to = T(257729471729, --[[Achievement Sabotage how_to (limited to 100 characters on XBOX)]] "Reduce all defense shields of an Outpost."), | |
| id = "Sabotage", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "GuardpostAllShieldsDone", | |
| Handler = function (self, sectorId) | |
| if GetAchievementFlags(self.id) then return end | |
| AchievementUnlock(self.id) | |
| end, | |
| }), | |
| }, | |
| ps4_id = 21, | |
| ps5_id = 21, | |
| xbox_id = 12, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(960641119476, --[[Achievement TenOutOfTen description (limited to 100 characters on XBOX)]] "Have a Level 10 merc."), | |
| display_name = T(150219298467, --[[Achievement TenOutOfTen display_name]] "10 Out Of 10"), | |
| group = "Direction", | |
| how_to = T(148856160387, --[[Achievement TenOutOfTen how_to (limited to 100 characters on XBOX)]] "Have a Level 10 merc."), | |
| id = "TenOutOfTen", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "UnitLeveledUp", | |
| Handler = function (self, unit) | |
| if GetAchievementFlags(self.id) then return end | |
| if unit:GetLevel() >= 10 then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 22, | |
| ps5_id = 22, | |
| xbox_id = 5, | |
| }) | |
| PlaceObj('Achievement', { | |
| Comment = "current player", | |
| SortKey = 1000, | |
| description = T(119822047028, --[[Achievement ALongShot description (limited to 100 characters on XBOX)]] "Killed an enemy at extreme range."), | |
| display_name = T(750301231519, --[[Achievement ALongShot display_name]] "A Long Shot"), | |
| group = "Hidden", | |
| how_to = T(208023546436, --[[Achievement ALongShot how_to (limited to 100 characters on XBOX)]] "Kill an enemy at extreme range."), | |
| id = "ALongShot", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "OnKill", | |
| Handler = function (self, attacker, killedUnits) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(attacker) and attacker.ControlledBy == netUniqueId then | |
| for _, unit in ipairs(killedUnits) do | |
| if IsValid(unit) and attacker:IsOnEnemySide(unit) and (attacker:GetDist(unit) / const.Scale.voxelSizeX) >= self.target then | |
| AchievementUnlock(self.id) | |
| break | |
| end | |
| end | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_grade = "silver", | |
| ps4_id = 23, | |
| ps5_grade = "silver", | |
| ps5_id = 23, | |
| secret = true, | |
| target = 40, | |
| xbox_id = 23, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(895686751734, --[[Achievement ApocalypseLater description (limited to 100 characters on XBOX)]] "Hired the Major."), | |
| display_name = T(480100937125, --[[Achievement ApocalypseLater display_name]] "Apocalypse Later"), | |
| group = "Hidden", | |
| how_to = T(137793487053, --[[Achievement ApocalypseLater how_to (limited to 100 characters on XBOX)]] "Hire the Major."), | |
| id = "ApocalypseLater", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "MercHireStatusChanged", | |
| Handler = function (self, unitData, oldStatus, newStatus) | |
| if GetAchievementFlags(self.id) then return end | |
| if unitData.session_id == "Spike" and newStatus == "Hired" then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 24, | |
| ps5_id = 24, | |
| secret = true, | |
| xbox_id = 32, | |
| }) | |
| PlaceObj('Achievement', { | |
| Comment = "current player", | |
| SortKey = 1000, | |
| description = T(610287284347, --[[Achievement FriendlyFire description (limited to 100 characters on XBOX)]] "Hurt your own merc with the bullet that killed an enemy."), | |
| display_name = T(278452667109, --[[Achievement FriendlyFire display_name]] "Friendly Fire"), | |
| group = "Hidden", | |
| how_to = T(508061852041, --[[Achievement FriendlyFire how_to (limited to 100 characters on XBOX)]] "Hurt your own merc with the bullet that killed an enemy."), | |
| id = "FriendlyFire", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "OnAttack", | |
| Handler = function (self, attacker, action, target, results, attack_args) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(attacker) and attacker.ControlledBy == netUniqueId and results.shots and #results.shots > 0 then | |
| for _, shot in ipairs(results.shots) do | |
| local killedEnemy | |
| local hitMerc | |
| for _, hit in ipairs(shot.hits) do | |
| if hit.obj and IsMerc(hit.obj) then | |
| hitMerc = true | |
| end | |
| if hit.obj and hit.enemy_hit and hit.damage and hit.prev_hit_points and hit.damage >= hit.prev_hit_points then | |
| killedEnemy = true | |
| end | |
| end | |
| if killedEnemy and hitMerc then | |
| AchievementUnlock(self.id) | |
| return | |
| end | |
| end | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 25, | |
| ps5_id = 25, | |
| secret = true, | |
| xbox_id = 26, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(963062406870, --[[Achievement Prizefighter description (limited to 100 characters on XBOX)]] "Defeated all fighters in the Night Club."), | |
| display_name = T(728458082058, --[[Achievement Prizefighter display_name]] "Prizefighter"), | |
| group = "Hidden", | |
| how_to = T(661685811383, --[[Achievement Prizefighter how_to (limited to 100 characters on XBOX)]] "Defeat all fighters in the Night Club."), | |
| id = "Prizefighter", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "QuestParamChanged", | |
| Handler = function (self, questId, varId, prevVal, newVal) | |
| if GetAchievementFlags(self.id) then return end | |
| if questId == "Landsbach" and varId == "AllFightersBeaten" and newVal == true then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 26, | |
| ps5_id = 26, | |
| secret = true, | |
| xbox_id = 24, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(892466364170, --[[Achievement Psycho description (limited to 100 characters on XBOX)]] "Chose a Psycho dialogue option 5 times."), | |
| display_name = T(984238767804, --[[Achievement Psycho display_name]] "Psycho"), | |
| group = "Hidden", | |
| how_to = T(902602620687, --[[Achievement Psycho how_to (limited to 100 characters on XBOX)]] "Choose a Psycho dialogue option 5 times."), | |
| id = "Psycho", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "PhraseExecuted", | |
| Handler = function (self, phraseId) | |
| if GetAchievementFlags(self.id) then return end | |
| local phrase = GetPhrase(phraseId) | |
| if phrase then | |
| local psycho = CheckExecutedPhraseForPsycho(phrase) and 1 or 0 | |
| gv_Achievements[self.id] = (gv_Achievements[self.id] or 0) + psycho | |
| if (gv_Achievements[self.id] or 0) >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 27, | |
| ps5_id = 27, | |
| secret = true, | |
| target = 5, | |
| xbox_id = 28, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(239863007169, --[[Achievement ReadyWoody description (limited to 100 characters on XBOX)]] "Hired Gus."), | |
| display_name = T(580346307029, --[[Achievement ReadyWoody display_name]] "Ready, Woody!"), | |
| group = "Hidden", | |
| how_to = T(857345891615, --[[Achievement ReadyWoody how_to (limited to 100 characters on XBOX)]] "Hire Gus."), | |
| id = "ReadyWoody", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "MercHireStatusChanged", | |
| Handler = function (self, unitData, oldStatus, newStatus) | |
| if GetAchievementFlags(self.id) then return end | |
| if unitData.session_id == "Gus" and newStatus == "Hired" then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_grade = "silver", | |
| ps4_id = 28, | |
| ps5_grade = "silver", | |
| ps5_id = 28, | |
| secret = true, | |
| xbox_id = 31, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(318709322191, --[[Achievement Rehab description (limited to 100 characters on XBOX)]] "Helped Larry overcome his addiction."), | |
| display_name = T(953123524232, --[[Achievement Rehab display_name]] "Rehab"), | |
| group = "Hidden", | |
| how_to = T(898219595089, --[[Achievement Rehab how_to (limited to 100 characters on XBOX)]] "Help Larry overcome his addiction."), | |
| id = "Rehab", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "OperationChanged", | |
| Handler = function (self, unit, oldOperation, newOperation, prevProfession, interrupted) | |
| if GetAchievementFlags(self.id) then return end | |
| if oldOperation.id == "AddictionTreatment" and not interrupted then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 29, | |
| ps5_id = 29, | |
| secret = true, | |
| xbox_id = 30, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(593813560963, --[[Achievement SayMyName description (limited to 100 characters on XBOX)]] "Did three morally bad things."), | |
| display_name = T(365562174003, --[[Achievement SayMyName display_name]] "Say My Name"), | |
| group = "Hidden", | |
| how_to = T(965690657000, --[[Achievement SayMyName how_to (limited to 100 characters on XBOX)]] "Do three morally bad things."), | |
| id = "SayMyName", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "QuestParamChanged", | |
| Handler = function (self, questId, varId, prevVal, newVal) | |
| if GetAchievementFlags(self.id) then return end | |
| -- "Hire Graaf as a mine foreman" | |
| if questId == "DiamondRed" and varId == "GraafForeman" and newVal == true then | |
| gv_Achievements[self.id] = (gv_Achievements[self.id] or 0) + 1 | |
| end | |
| -- "kill Lurch and take his shotgun" | |
| if questId == "AyeMom" and varId == "GunTaken" and newVal == true then | |
| local lurch = gv_UnitData.NPC_Lurch | |
| if lurch and lurch:IsDead() then | |
| gv_Achievements[self.id] = (gv_Achievements[self.id] or 0) + 1 | |
| end | |
| end | |
| -- "Meet Bastien in Refugee Camp and make him give you money" | |
| if questId == "RefugeeBlues" and varId == "BastienShare" and newVal == true then | |
| gv_Achievements[self.id] = (gv_Achievements[self.id] or 0) + 1 | |
| end | |
| -- "Be Boss Blaubert's partner" | |
| if questId == "Luigi" and varId == "BossPartnership" and newVal == true then | |
| gv_Achievements[self.id] = (gv_Achievements[self.id] or 0) + 1 | |
| end | |
| if (gv_Achievements[self.id] or 0) >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "SectorSideChanged", | |
| Handler = function (self, sectorId, oldSide, newSide) | |
| if GetAchievementFlags(self.id) or not gv_Quests["PantagruelRebels"] then return end | |
| -- "Take over Maquis mine by force" | |
| if sectorId == "C7_Underground" and IsPlayerSide(newSide) then | |
| if GetQuestVar("PantagruelRebels", "MaquieEnemies") then | |
| gv_Achievements[self.id] = (gv_Achievements[self.id] or 0) + 1 | |
| end | |
| end | |
| if (gv_Achievements[self.id] or 0) >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 30, | |
| ps5_id = 30, | |
| secret = true, | |
| target = 3, | |
| xbox_id = 29, | |
| }) | |
| PlaceObj('Achievement', { | |
| Comment = "current player", | |
| SortKey = 1000, | |
| description = T(785039187961, --[[Achievement TwoBirdsOneStone description (limited to 100 characters on XBOX)]] "Killed two enemies with a single shot."), | |
| display_name = T(899260696739, --[[Achievement TwoBirdsOneStone display_name]] "Two Birds One Stone"), | |
| group = "Hidden", | |
| how_to = T(345293348180, --[[Achievement TwoBirdsOneStone how_to (limited to 100 characters on XBOX)]] "Kill two enemies with a single shot."), | |
| id = "TwoBirdsOneStone", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "OnAttack", | |
| Handler = function (self, attacker, action, target, results, attack_args) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(attacker) and attacker.ControlledBy == netUniqueId and results.shots and #results.shots == 1 and EnemiesKilled(attacker, results) >= 2 then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 31, | |
| ps5_id = 31, | |
| secret = true, | |
| xbox_id = 25, | |
| }) | |
| PlaceObj('Achievement', { | |
| Comment = "current player", | |
| SortKey = 1000, | |
| description = T(718694453555, --[[Achievement WinnerWinnerChickenDinner description (limited to 100 characters on XBOX)]] "Chicken murderer."), | |
| display_name = T(252119341614, --[[Achievement WinnerWinnerChickenDinner display_name]] "Winner, Winner, Chicken Dinner"), | |
| group = "Hidden", | |
| how_to = T(669885107481, --[[Achievement WinnerWinnerChickenDinner how_to (limited to 100 characters on XBOX)]] "Kill a chicken."), | |
| id = "WinnerWinnerChickenDinner", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "OnAttack", | |
| Handler = function (self, attacker, action, target, results, attack_args) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(attacker) and attacker.ControlledBy == netUniqueId then | |
| for _, hitData in ipairs(results) do | |
| local obj = hitData.obj | |
| if IsKindOf(obj, "Animal_Hen") and obj:IsDead() then | |
| AchievementUnlock(self.id) | |
| end | |
| end | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 32, | |
| ps5_id = 32, | |
| secret = true, | |
| xbox_id = 27, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(673543460181, --[[Achievement DieselPower description (limited to 100 characters on XBOX)]] "Solved the Diesel problem."), | |
| display_name = T(580828763361, --[[Achievement DieselPower display_name]] "Diesel Power"), | |
| group = "Quests", | |
| how_to = T(689846303069, --[[Achievement DieselPower how_to (limited to 100 characters on XBOX)]] "Solve the Diesel problem."), | |
| id = "DieselPower", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "QuestParamChanged", | |
| Handler = function (self, questId, varId, prevVal, newVal) | |
| if GetAchievementFlags(self.id) then return end | |
| if questId == "Landsbach" and varId == "GetRidOfDiesel" and newVal == true then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_grade = "silver", | |
| ps4_id = 33, | |
| ps5_grade = "silver", | |
| ps5_id = 33, | |
| xbox_id = 35, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(868668282301, --[[Achievement GreenDiamond description (limited to 100 characters on XBOX)]] "Obtained the Green Diamond."), | |
| display_name = T(168847895084, --[[Achievement GreenDiamond display_name]] "Green Diamond"), | |
| group = "Quests", | |
| how_to = T(149168865866, --[[Achievement GreenDiamond how_to (limited to 100 characters on XBOX)]] "Obtain the Green Diamond."), | |
| id = "GreenDiamond", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "ItemAdded", | |
| Handler = function (self, unit, item, slotName, pos) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(unit) and item.class == "TheGreenDiamond" then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 34, | |
| ps5_id = 34, | |
| xbox_id = 36, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(338667995652, --[[Achievement LoveCats description (limited to 100 characters on XBOX)]] "Made Maman and Chimurenga get together."), | |
| display_name = T(846246131029, --[[Achievement LoveCats display_name]] "Love Cats"), | |
| group = "Quests", | |
| how_to = T(100160794579, --[[Achievement LoveCats how_to (limited to 100 characters on XBOX)]] "Make Maman and Chimurenga get together."), | |
| id = "LoveCats", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "QuestParamChanged", | |
| Handler = function (self, questId, varId, prevVal, newVal) | |
| if GetAchievementFlags(self.id) then return end | |
| if questId == "PantagruelDramas" and varId == "YoungHearts" and newVal == true then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 35, | |
| ps5_id = 35, | |
| secret = true, | |
| xbox_id = 38, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(889771902479, --[[Achievement ProvenInnocent description (limited to 100 characters on XBOX)]] "Gathered enough evidence to clear your name."), | |
| display_name = T(259283301037, --[[Achievement ProvenInnocent display_name]] "Proven Innocent"), | |
| group = "Quests", | |
| how_to = T(291562539660, --[[Achievement ProvenInnocent how_to (limited to 100 characters on XBOX)]] "Gather enough evidence to clear your name."), | |
| id = "ProvenInnocent", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "QuestParamChanged", | |
| Handler = function (self, questId, varId, prevVal, newVal) | |
| if GetAchievementFlags(self.id) then return end | |
| if questId == "05_TakeDownCorazon" and varId == "Evidence" and newVal >= GetQuestVar(questId, "EvidenceRequired") then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 36, | |
| ps5_id = 36, | |
| secret = true, | |
| xbox_id = 39, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(657790232514, --[[Achievement SawItComing description (limited to 100 characters on XBOX)]] "Corazon betrayed you."), | |
| display_name = T(188253254182, --[[Achievement SawItComing display_name]] "Saw It Coming..."), | |
| group = "Quests", | |
| how_to = T(122883982105, --[[Achievement SawItComing how_to (limited to 100 characters on XBOX)]] "Corazon betrayed you."), | |
| id = "SawItComing", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "QuestParamChanged", | |
| Handler = function (self, questId, varId, prevVal, newVal) | |
| if GetAchievementFlags(self.id) then return end | |
| if questId == "04_Betrayal" and varId == "Completed" and newVal == true then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 37, | |
| ps5_id = 37, | |
| secret = true, | |
| xbox_id = 40, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(504681351963, --[[Achievement TruestDetective description (limited to 100 characters on XBOX)]] "Caught the Teddy Bear killer."), | |
| display_name = T(484366144845, --[[Achievement TruestDetective display_name]] "Truest Detective"), | |
| group = "Quests", | |
| how_to = T(610523312013, --[[Achievement TruestDetective how_to (limited to 100 characters on XBOX)]] "Catch the Teddy Bear killer."), | |
| id = "TruestDetective", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "QuestParamChanged", | |
| Handler = function (self, questId, varId, prevVal, newVal) | |
| if GetAchievementFlags(self.id) then return end | |
| if questId == "Ted" and varId == "Completed" and newVal == true then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 38, | |
| ps5_id = 38, | |
| secret = true, | |
| xbox_id = 41, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(547528613214, --[[Achievement TwelveChairs description (limited to 100 characters on XBOX)]] "Found Madam Lecoq's diamond necklace."), | |
| display_name = T(979859433082, --[[Achievement TwelveChairs display_name]] "Twelve Chairs"), | |
| group = "Quests", | |
| how_to = T(734069117003, --[[Achievement TwelveChairs how_to (limited to 100 characters on XBOX)]] "Find Madam Lecoq's diamond necklace."), | |
| id = "TwelveChairs", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "QuestParamChanged", | |
| Handler = function (self, questId, varId, prevVal, newVal) | |
| if GetAchievementFlags(self.id) then return end | |
| if questId == "TheTwelveChairs" and varId == "FoundNecklace" and newVal == true then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 39, | |
| ps5_id = 39, | |
| secret = true, | |
| xbox_id = 37, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(957788705095, --[[Achievement Unlockdown description (limited to 100 characters on XBOX)]] "Found a cure for the Red Rabies."), | |
| display_name = T(753539187750, --[[Achievement Unlockdown display_name]] "Unlockdown"), | |
| group = "Quests", | |
| how_to = T(833150760628, --[[Achievement Unlockdown how_to (limited to 100 characters on XBOX)]] "Find a cure for the Red Rabies."), | |
| id = "Unlockdown", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "QuestParamChanged", | |
| Handler = function (self, questId, varId, prevVal, newVal) | |
| if GetAchievementFlags(self.id) then return end | |
| if questId == "Sanatorium" and varId == "SamplesGiven" and newVal == true then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_grade = "silver", | |
| ps4_id = 40, | |
| ps5_grade = "silver", | |
| ps5_id = 40, | |
| xbox_id = 34, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(377566481789, --[[Achievement XMarksTheSpot description (limited to 100 characters on XBOX)]] "Found Lucky Veinard's secret treasures."), | |
| display_name = T(667944553137, --[[Achievement XMarksTheSpot display_name]] "X Marks The Spot"), | |
| group = "Quests", | |
| how_to = T(421408703447, --[[Achievement XMarksTheSpot how_to (limited to 100 characters on XBOX)]] "Find Lucky Veinard's secret treasures."), | |
| id = "XMarksTheSpot", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "QuestParamChanged", | |
| Handler = function (self, questId, varId, prevVal, newVal) | |
| if GetAchievementFlags(self.id) then return end | |
| if questId == "TreasureHunting" and varId == "foundcirclestreasure" and newVal == true then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_grade = "silver", | |
| ps4_id = 41, | |
| ps5_grade = "silver", | |
| ps5_id = 41, | |
| xbox_id = 33, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(545460392452, --[[Achievement DynamicDuo description (limited to 100 characters on XBOX)]] "Finished the campaign while having no more than two mercs at the same time."), | |
| display_name = T(277542343056, --[[Achievement DynamicDuo display_name]] "Dynamic Duo"), | |
| group = "Retention", | |
| how_to = T(471839901231, --[[Achievement DynamicDuo how_to (limited to 100 characters on XBOX)]] "Finish the campaign while having no more than two mercs at the same time."), | |
| id = "DynamicDuo", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "CampaignEnd", | |
| Handler = function (self, campaignId) | |
| if GetAchievementFlags(self.id) then return end | |
| if gv_Achievements[self.id] ~= "failed" then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "MercHired", | |
| Handler = function (self, mercId, price, days, alreadyHired) | |
| if GetAchievementFlags(self.id) then return end | |
| if #GetHiredMercIds() > 2 then | |
| gv_Achievements[self.id] = "failed" | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "UnitJoinedAsMerc", | |
| Handler = function (self, mercId, price, days, alreadyHired) | |
| if GetAchievementFlags(self.id) then return end | |
| if #GetHiredMercIds() > 2 then | |
| gv_Achievements[self.id] = "failed" | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_grade = "silver", | |
| ps4_id = 42, | |
| ps5_grade = "silver", | |
| ps5_id = 42, | |
| xbox_id = 18, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(313785946781, --[[Achievement GrittyDozen description (limited to 100 characters on XBOX)]] "Have at least 12 mercs."), | |
| display_name = T(639786242732, --[[Achievement GrittyDozen display_name]] "Gritty Dozen"), | |
| group = "Retention", | |
| how_to = T(857992386571, --[[Achievement GrittyDozen how_to (limited to 100 characters on XBOX)]] "Have at least 12 mercs."), | |
| id = "GrittyDozen", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "MercHired", | |
| Handler = function (self, mercId, price, days, alreadyHired) | |
| if GetAchievementFlags(self.id) then return end | |
| if #GetHiredMercIds() >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "UnitJoinedAsMerc", | |
| Handler = function (self, mercId, price, days, alreadyHired) | |
| if GetAchievementFlags(self.id) then return end | |
| if #GetHiredMercIds() >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 43, | |
| ps5_id = 43, | |
| target = 12, | |
| xbox_id = 21, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(103278828302, --[[Achievement Ironman description (limited to 100 characters on XBOX)]] 'Finished the game on "Mission Impossible", "Dead is Dead", "To The Bitter End" and "Lethal Weapons".'), | |
| display_name = T(452896945074, --[[Achievement Ironman display_name]] "Ironman"), | |
| group = "Retention", | |
| how_to = T(218540356017, --[[Achievement Ironman how_to (limited to 100 characters on XBOX)]] 'Finish the game on "Mission Impossible", "Dead is Dead", "To The Bitter End" and "Lethal Weapons".'), | |
| id = "Ironman", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "CampaignEnd", | |
| Handler = function (self, campaignId) | |
| if GetAchievementFlags(self.id) then return end | |
| if Game.game_difficulty == "VeryHard" and IsGameRuleActive("DeadIsDead") and IsGameRuleActive("Ironman") and IsGameRuleActive("LethalWeapons") and not IsGameRuleActive("ForgivingMode") and gv_Achievements[self.id] ~= "failed" then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "ChangeGameRule", | |
| Handler = function (self, rule, value) | |
| if GetAchievementFlags(self.id) then return end | |
| if rule == "ForgivingMode" and value then | |
| gv_Achievements[self.id] = "failed" | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "DifficultyChange", | |
| Handler = function (self) | |
| if GetAchievementFlags(self.id) then return end | |
| if Game.game_difficulty ~= "VeryHard" then | |
| gv_Achievements[self.id] = "failed" | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "NewGame", | |
| Handler = function (self, game) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsGameRuleActive("ForgivingMode") and Game.game_difficulty ~= "VeryHard" then | |
| gv_Achievements[self.id] = "failed" | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_grade = "gold", | |
| ps4_id = 44, | |
| ps5_grade = "gold", | |
| ps5_id = 44, | |
| xbox_id = 16, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(719266083045, --[[Achievement JustAFleshWound description (limited to 100 characters on XBOX)]] "Taken 300 damage in a single turn without any merc dying or getting downed."), | |
| display_name = T(434853556936, --[[Achievement JustAFleshWound display_name]] "Just A Flesh Wound"), | |
| group = "Retention", | |
| how_to = T(657003907968, --[[Achievement JustAFleshWound how_to (limited to 100 characters on XBOX)]] "Take 300 damage in a single turn without any merc dying or getting downed."), | |
| id = "JustAFleshWound", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "DamageDone", | |
| Handler = function (self, attacker, target, dmg, hit_descr) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(target) and dmg > 0 then | |
| gv_Achievements[self.id] = (gv_Achievements[self.id] or 0) + dmg | |
| if target.HitPoints == 0 then | |
| gv_Achievements[self.id] = 0 | |
| end | |
| if gv_Achievements[self.id] >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "UnitDied", | |
| Handler = function (self, unit, killer, results) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(unit) then | |
| gv_Achievements[self.id] = 0 | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "UnitDowned", | |
| Handler = function (self, unit, killer, results) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsMerc(unit) then | |
| gv_Achievements[self.id] = 0 | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "TurnEnded", | |
| Handler = function (self, teamEnded) | |
| if GetAchievementFlags(self.id) then return end | |
| gv_Achievements[self.id] = 0 | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "Attack", | |
| Handler = function (self, action, results, attack_args, combat_starting) | |
| if GetAchievementFlags(self.id) then return end | |
| if not combat_starting and not g_Combat then | |
| gv_Achievements[self.id] = 0 | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 45, | |
| ps5_id = 45, | |
| target = 300, | |
| xbox_id = 50, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(157013389224, --[[Achievement Liberator description (limited to 100 characters on XBOX)]] "Earned at least 75 Loyalty in 5 towns."), | |
| display_name = T(360574911271, --[[Achievement Liberator display_name]] "Liberator"), | |
| group = "Retention", | |
| how_to = T(677038024683, --[[Achievement Liberator how_to (limited to 100 characters on XBOX)]] "Earn at least 75 Loyalty in 5 towns."), | |
| id = "Liberator", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "LoyaltyChanged", | |
| Handler = function (self, cityId, change) | |
| if GetAchievementFlags(self.id) then return end | |
| local highLoyaltyCities = 0 | |
| for _, city in pairs(gv_Cities) do | |
| if city.Loyalty >= 75 then | |
| highLoyaltyCities= highLoyaltyCities + 1 | |
| end | |
| end | |
| if highLoyaltyCities >= 5 then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 46, | |
| ps5_id = 46, | |
| xbox_id = 20, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(950963933037, --[[Achievement LoneWolf description (limited to 100 characters on XBOX)]] "Finished the campaign while having no more than one merc at the same time."), | |
| display_name = T(422926797000, --[[Achievement LoneWolf display_name]] "Lone Wolf"), | |
| group = "Retention", | |
| how_to = T(987003129842, --[[Achievement LoneWolf how_to (limited to 100 characters on XBOX)]] "Finish the campaign while having no more than one merc at the same time."), | |
| id = "LoneWolf", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "CampaignEnd", | |
| Handler = function (self, campaignId) | |
| if GetAchievementFlags(self.id) then return end | |
| if gv_Achievements[self.id] ~= "failed" then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "MercHired", | |
| Handler = function (self, mercId, price, days, alreadyHired) | |
| if GetAchievementFlags(self.id) then return end | |
| if #GetHiredMercIds() > 1 then | |
| gv_Achievements[self.id] = "failed" | |
| end | |
| end, | |
| }), | |
| PlaceObj('MsgReaction', { | |
| Event = "UnitJoinedAsMerc", | |
| Handler = function (self, mercId, price, days, alreadyHired) | |
| if GetAchievementFlags(self.id) then return end | |
| if #GetHiredMercIds() > 1 then | |
| gv_Achievements[self.id] = "failed" | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_grade = "silver", | |
| ps4_id = 47, | |
| ps5_grade = "silver", | |
| ps5_id = 47, | |
| xbox_id = 17, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(151643533374, --[[Achievement Pacifist description (limited to 100 characters on XBOX)]] "Finished the campaign without killing any civilian."), | |
| display_name = T(194042060571, --[[Achievement Pacifist display_name]] "Pacifist"), | |
| group = "Retention", | |
| how_to = T(338716292182, --[[Achievement Pacifist how_to (limited to 100 characters on XBOX)]] "Finish the campaign without killing any civilian."), | |
| id = "Pacifist", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "CampaignEnd", | |
| Handler = function (self, campaignId) | |
| if GetAchievementFlags(self.id) then return end | |
| if gv_CiviliansKilled <= 0 then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_grade = "silver", | |
| ps4_id = 48, | |
| ps5_grade = "silver", | |
| ps5_id = 48, | |
| xbox_id = 19, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(838187958581, --[[Achievement Tactician description (limited to 100 characters on XBOX)]] "Controlled at least 50 sectors."), | |
| display_name = T(219959948272, --[[Achievement Tactician display_name]] "Tactician"), | |
| group = "Retention", | |
| how_to = T(996157707667, --[[Achievement Tactician how_to (limited to 100 characters on XBOX)]] "Control at least 50 sectors."), | |
| id = "Tactician", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "SectorSideChanged", | |
| Handler = function (self, sectorId, oldSide, newSide) | |
| if GetAchievementFlags(self.id) then return end | |
| if IsPlayerSide(newSide) then | |
| local controlled = 0 | |
| for _, s in pairs(gv_Sectors) do | |
| if IsPlayerSide(s.Side) then | |
| controlled = controlled + 1 | |
| end | |
| end | |
| if controlled >= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_id = 49, | |
| ps5_id = 49, | |
| target = 50, | |
| xbox_id = 22, | |
| }) | |
| PlaceObj('Achievement', { | |
| SortKey = 1000, | |
| description = T(763203074646, --[[Achievement TimeIsMoney description (limited to 100 characters on XBOX)]] "Finished the campaign before 1 MAY, 2001."), | |
| display_name = T(622226557896, --[[Achievement TimeIsMoney display_name]] "Time Is Money"), | |
| group = "Retention", | |
| how_to = T(227445552899, --[[Achievement TimeIsMoney how_to (limited to 100 characters on XBOX)]] "Finish the campaign before 1 MAY, 2001."), | |
| id = "TimeIsMoney", | |
| msg_reactions = { | |
| PlaceObj('MsgReaction', { | |
| Event = "CampaignEnd", | |
| Handler = function (self, campaignId) | |
| if GetAchievementFlags(self.id) then return end | |
| -- target is in days | |
| if DivRound(Game.CampaignTime - Game.CampaignTimeStart, const.Scale.day) <= self.target then | |
| AchievementUnlock(self.id) | |
| end | |
| end, | |
| }), | |
| }, | |
| ps4_grade = "gold", | |
| ps4_id = 50, | |
| ps5_grade = "gold", | |
| ps5_id = 50, | |
| target = 27, | |
| xbox_id = 14, | |
| }) | |