-------------------------------- ----- Written by Darryl123 ----- -------------------------------- ------------------------- ----- Miscellaneous ----- ------------------------- -- Check if achievements can be unlocked. function can_unlock() return (db.actor and db.actor.afterFirstUpdate) end -- Counts how many achievements exist. local achievements_count = nil function get_achievements_count() -- Check if a count has already been made. if (achievements_count) then return achievements_count end -- Scan the achievements section for achievements. achievements_count = 0 local line_count = ini_sys:line_count("achievements") or 0 for i = 0, line_count - 1 do -- Check whether the achievement requires story mode. local junk1, section, junk2 = ini_sys:r_line("achievements", i, "", "") local ignore = ini_sys:r_bool_ex(section, "ignore", false) local story = ini_sys:r_bool_ex(section, "story", false) local ironman = ini_sys:r_bool_ex(section, "ironman", false) local warfare = ini_sys:r_bool_ex(section, "warfare", false) local is_story = (story and not has_alife_info("story_mode_disabled")) local is_ironman = (ironman and IsHardcoreMode()) local is_warfare = (warfare and _G.WARFARE) if (not (story or ironman or warfare)) -- if achievement has no restricted mode or (is_story and not ironman) -- if achievement for story mode only or (is_story and is_ironman) or (is_warfare) then if (not ignore) then achievements_count = achievements_count + 1 end end end return achievements_count end -- Counts how many achievements are locked. function get_achievements_locked_count() return get_achievements_count() - get_achievements_unlocked_count() end -- Counts how many achievements are unlocked. function get_achievements_unlocked_count() return game_statistics.get_actor_achievements_count() end -- Checks whether an achievement is unlocked. function has_achievement(achievement) return game_statistics.has_actor_achievement(achievement) end -------------------- ----- Functors ----- -------------------- -- Bookworm Food function bookworm_food_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("bookworm_food")) then return true end -- Unlock the achievement. if (bookworm_food_requirements()) then bookworm_food_rewards() return true end end -- Completionist. function completionist_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("completionist")) then return true end -- Unlock the achievement. if (completionist_requirements()) then completionist_rewards() return true end end -- Down to Earth. function down_to_earth_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("down_to_earth")) then return true end -- Unlock the achievement. if (down_to_earth_requirements()) then down_to_earth_rewards() return true end end -- Duga Free. function duga_free_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("duga_free")) then return true end -- Unlock the achievement. if (duga_free_requirements()) then duga_free_rewards() return true end end -- Geologist. function geologist_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("geologist")) then return true end -- Unlock the achievement. if (geologist_requirements()) then geologist_rewards() return true end end -- Heavy Pockets. function heavy_pockets_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("heavy_pockets")) then return true end -- Unlock the achievement. if (heavy_pockets_requirements()) then heavy_pockets_rewards() return true end end -- Infopreneur. function infopreneur_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("infopreneur")) then return true end -- Unlock the achievement. if (infopreneur_requirements()) then infopreneur_rewards() return true end end -- Mechanized Warfare. function mechanized_warfare_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("mechanized_warfare")) then return true end -- Unlock the achievement. if (mechanized_warfare_requirements()) then mechanized_warfare_rewards() return true end end -- Patriarch. function patriarch_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("patriarch")) then return true end -- Unlock the achievement. if (patriarch_requirements()) then patriarch_rewards() return true end end -- Radiotherapy. function radiotherapy_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("radiotherapy")) then return true end -- Unlock the achievement. if (radiotherapy_requirements()) then radiotherapy_rewards() return true end end -- Rag and Bone. function rag_and_bone_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("rag_and_bone")) then return true end -- Unlock the achievement. if (rag_and_bone_requirements()) then rag_and_bone_rewards() return true end end -- Silver or Lead. function silver_or_lead_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("silver_or_lead")) then return true end -- Unlock the achievement. if (silver_or_lead_requirements()) then silver_or_lead_rewards() return true end end -- Tourist. function tourist_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("tourist")) then return true end -- Unlock the achievement. if (has_alife_info("tourist_achievement_delay")) then tourist_rewards() return true end -- An infoportion delays the achievement. -- Without this it often unlocks during level transition. if (tourist_requirements()) then db.actor:give_info_portion("tourist_achievement_delay") return false end end -- Well Dressed. function well_dressed_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("well_dressed")) then return true end -- Unlock the achievement. if (well_dressed_requirements()) then well_dressed_rewards() return true end end -- Wishful Thinking. function wishful_thinking_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("wishful_thinking")) then return true end -- Unlock the achievement. if (wishful_thinking_requirements()) then wishful_thinking_rewards() return true end end -- Infantile Pleasure. function infantile_pleasure_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("infantile_pleasure")) then return true end -- Unlock the achievement. if (infantile_pleasure_requirements()) then infantile_pleasure_rewards() return true end end -- Recycler. function recycler_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("recycler")) then return true end -- Unlock the achievement. if (recycler_requirements()) then recycler_rewards() return true end end -- Artificer Eagerness. function artificer_eagerness_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("artificer_eagerness")) then return true end -- Unlock the achievement. if (artificer_eagerness_requirements()) then artificer_eagerness_rewards() return true end end -- Unforeseen Guest. function unforeseen_guest_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("unforeseen_guest")) then return true end -- Unlock the achievement. if (unforeseen_guest_requirements()) then unforeseen_guest_rewards() return true end end -- Absolver. function absolver_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("absolver")) then return true end -- Unlock the achievement. if (absolver_requirements()) then absolver_rewards() return true end end -- Collaborator. function collaborator_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("collaborator")) then return true end -- Unlock the achievement. if (collaborator_requirements()) then collaborator_rewards() return true end end -- Iron Curtain. function iron_curtain_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("iron_curtain")) then return true end -- Unlock the achievement. if (iron_curtain_requirements()) then iron_curtain_rewards() return true end end -- Murky Spirit. function murky_spirit_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("murky_spirit")) then return true end -- Unlock the achievement. if (murky_spirit_requirements()) then murky_spirit_rewards() return true end end -- Invictus. function invictus_functor() -- Check if it can be unlocked. if (not can_unlock()) then return false end -- Check if it is already unlocked. if (has_achievement("invictus")) then return true end -- Unlock the achievement. if (invictus_requirements()) then invictus_rewards() return true end end ------------------------ ----- Requirements ----- ------------------------ -- Bookworm Food -- Requires all encyclopedia articles be unlocked. function bookworm_food_requirements() return ( (ui_pda_encyclopedia_tab.get_articles_locked_count() == 0) ) end -- Completionist. -- Requires all available achievements to be unlocked. function completionist_requirements() return ( (get_achievements_locked_count() <= 1) ) end -- Down to Earth. -- Requires 3 helicopters killed, or just one with an RPG-7. function down_to_earth_requirements() return ( (game_statistics.get_statistic_count("helicopters_downed") >= 3) or (game_statistics.get_statistic_count("helicopters_downed2") >= 1) ) end -- Duga Free. -- Requires story mode, and that the Miracle Machine and Brain Scorcher are disabled. function duga_free_requirements() return ( not (has_alife_info("story_mode_disabled")) and (has_alife_info("yan_labx16_switcher_primary_off")) and (has_alife_info("bar_deactivate_radar_done")) ) end -- Geologist. -- Requires 50 artefacts be detected by the player. function geologist_requirements() return ( (game_statistics.get_statistic_count("artefacts_detected") >= 50) ) end -- Heavy Pockets. -- Requires player to possess 1,000,000 RU. function heavy_pockets_requirements() return ( (db.actor:money() >= 1000000) ) end -- Infopreneur. -- Requires player to deliver 50 PDAs. function infopreneur_requirements() return ( (game_statistics.get_statistic_count("pdas_delivered") >= 50) ) end -- Mechanized Warfare. -- Requires a mechanic to own all tools. function mechanized_warfare_requirements() return ( (has_alife_info("agr_smart_terrain_1_6_army_mechanic_stalker_upgrade_tier_3")) or (has_alife_info("army_south_mechan_mlr_upgrade_tier_3")) or (has_alife_info("bar_visitors_stalker_mechanic_upgrade_tier_3")) or (has_alife_info("cit_killers_merc_mechanic_stalker_upgrade_tier_3")) or (has_alife_info("dasc_tech_mlr_upgrade_tier_3")) or (has_alife_info("val_smart_terrain_7_3_bandit_mechanic_stalker_upgrade_tier_3")) or (has_alife_info("esc_smart_terrain_5_7_loner_mechanic_stalker_upgrade_tier_3")) or (has_alife_info("jup_b217_stalker_tech_upgrade_tier_3")) or (has_alife_info("jup_cont_mech_bandit_upgrade_tier_3")) or (has_alife_info("mar_base_stalker_tech_upgrade_tier_3")) or (has_alife_info("mil_smart_terrain_7_7_freedom_mechanic_stalker_upgrade_tier_3")) or (has_alife_info("mechanic_monolith_jup_depo_upgrade_tier_3")) or (has_alife_info("mechanic_monolith_kbo_upgrade_tier_3")) or (has_alife_info("pri_monolith_monolith_mechanic_stalker_upgrade_tier_3")) or (has_alife_info("merc_pri_a18_mech_mlr_upgrade_tier_3")) or (has_alife_info("trucks_cemetery_bandit_mechanic_upgrade_tier_3")) or (has_alife_info("yan_ecolog_kruglov_upgrade_tier_3")) or (has_alife_info("zat_a2_stalker_mechanic_upgrade_tier_3")) or (has_alife_info("zat_stancia_mech_merc_upgrade_tier_3")) or (has_alife_info("mechanic_army_yan_mlr_upgrade_tier_3")) or (has_alife_info("jup_depo_isg_tech_upgrade_tier_3")) or (has_alife_info("sim_default_army_mechanic_upgrade_tier_3")) or (has_alife_info("sim_default_bandit_mechanic_upgrade_tier_3")) or (has_alife_info("sim_default_csky_mechanic_upgrade_tier_3")) or (has_alife_info("sim_default_dolg_mechanic_upgrade_tier_3")) or (has_alife_info("sim_default_ecolog_mechanic_upgrade_tier_3")) or (has_alife_info("sim_default_freedom_mechanic_upgrade_tier_3")) or (has_alife_info("sim_default_killer_mechanic_upgrade_tier_3")) or (has_alife_info("sim_default_monolith_mechanic_upgrade_tier_3")) or (has_alife_info("sim_default_stalker_mechanic_upgrade_tier_3")) or (has_alife_info("sim_default_renegade_mechanic_upgrade_tier_3")) or (has_alife_info("sim_default_greh_mechanic_upgrade_tier_3")) or (has_alife_info("sim_default_isg_mechanic_upgrade_tier_3")) ) end -- Patriarch. -- Requires rank of 'Legend' be reached. function patriarch_requirements() return ( (db.actor:character_rank() >= 50000) ) end -- Radiotherapy. -- Requires 25 emissions and 25 psi-storms to be survived. function radiotherapy_requirements() return ( (game_statistics.get_statistic_count("emissions") >= 25) and (game_statistics.get_statistic_count("psi_storms") >= 25) ) end -- Rag and Bone. -- Requires 100 stashes be found and looted. function rag_and_bone_requirements() return ( (game_statistics.get_statistic_count("stashes_found") >= 100) ) end -- Silver or Lead. -- Requires player to kill 500 stalkers or have 50 surrender to you. function silver_or_lead_requirements() return ( (game_statistics.get_statistic_count("killed_stalkers") >= 500) or (game_statistics.get_statistic_count("enemies_surrendered") >= 50) ) end -- Tourist. -- Requires player to visit all levels. function tourist_requirements() return ( (game_statistics.has_actor_visitied_all_levels()) ) end -- Well Dressed. -- Requires player to kill 500 mutants or field dress 250 mutant parts. function well_dressed_requirements() return ( (game_statistics.get_statistic_count("killed_monsters") >= 500) or (game_statistics.get_statistic_count("field_dressings") >= 250) ) end -- Wishful Thinking. -- Requires story mode, and for the player to finish Living Legend questlines. function wishful_thinking_requirements() return ( not (has_alife_info("story_mode_disabled")) and (has_alife_info("living_legend_done")) ) end -- Infantile Pleasure -- Requires player to smash 200 boxes function infantile_pleasure_requirements() return ((game_statistics.get_statistic_count("boxes_smashed") >= 200)) end -- Recycler -- Requires player to disassemble 200 items function recycler_requirements() return ((game_statistics.get_statistic_count("items_disassembled") >= 200)) end -- Artificer Eagerness -- Requires player to craft 50 items function artificer_eagerness_requirements() return ((game_statistics.get_statistic_count("items_crafted") >= 50)) end -- Unforeseen Guest -- Requires player to stay disguised for 5 hours under stalkers watch function unforeseen_guest_requirements() return ((game_statistics.get_statistic_count("minutes_disguised") >= 5*60)) end -- Absolver. -- Requires story mode, and for the player to finish Mortal Sin questlines. function absolver_requirements() return ( not (has_alife_info("story_mode_disabled")) and (has_alife_info("mortal_sin_zone_hero")) ) end -- Collaborator. -- Requires story mode, and for the player to finish Operation Afterglow questlines. function collaborator_requirements() return ( not (has_alife_info("story_mode_disabled")) and (has_alife_info("operation_afterglow_complete")) ) end -- Iron Curtain. -- Requires Warfare mode, and for the player's faction to take over the levels. function iron_curtain_requirements() return ( IsWarfare() and (has_alife_info("warfare_actor_faction_domination")) ) end -- Murky Spirit. -- Requires story mode, and for the player to finish Lost to the Zone questlines. function murky_spirit_requirements() return ( not (has_alife_info("story_mode_disabled")) and (has_alife_info("operation_afterglow_complete")) and IsHardcoreMode() and not (has_alife_info("ironman_flag_off")) ) end -- Invictus. -- Requires story mode, and for the player to finish Living Legend questlines. function invictus_requirements() return ( not (has_alife_info("story_mode_disabled")) and (has_alife_info("operation_afterglow_complete")) and IsHardcoreMode() and not (has_alife_info("ironman_flag_off")) and not (has_alife_info("ironman_flag_died")) and (game_difficulties.get_game_factor("type") == 3) and (game_difficulties.get_eco_factor("type") == 3) and not (has_alife_info("diff_gameplay_flag_change")) and not (has_alife_info("diff_economy_flag_change")) and not (has_alife_info("debug_mode_flag_on")) ) end ------------------- ----- Rewards ----- ------------------- -- Bookworm Food. -- Future memory sticks become rare PDAs. function bookworm_food_rewards() SendScriptCallback("actor_on_achievement_earned","bookworm_food","st_achievement_15_unlock") end -- Completionist. function completionist_rewards() SendScriptCallback("actor_on_achievement_earned","completionist","st_achievement_10_unlock") end -- Down to Earth. -- Weaker helicopters are respawned. function down_to_earth_rewards() SendScriptCallback("actor_on_achievement_earned","down_to_earth","st_achievement_12_unlock") end -- Duga Free. -- Yantar & Radar psi-fields disabled. function duga_free_rewards() SendScriptCallback("actor_on_achievement_earned","duga_free","st_achievement_4_unlock") end -- Geologist. -- Increased spawn chance of artefacts. function geologist_rewards() SendScriptCallback("actor_on_achievement_earned","geologist","st_achievement_13_unlock") end -- Heavy Pockets. -- Traders sell cheaper and rarer goods. function heavy_pockets_rewards() SendScriptCallback("actor_on_achievement_earned","heavy_pockets","st_achievement_1_unlock") end -- Infopreneur. -- Money received for delivering PDAs increased. function infopreneur_rewards() SendScriptCallback("actor_on_achievement_earned","infopreneur","st_achievement_3_unlock") end -- Mechanized Warfare. -- A mechanic can now fully upgrade equipment. function mechanized_warfare_rewards() SendScriptCallback("actor_on_achievement_earned","mechanized_warfare","st_achievement_7_unlock") end -- Patriarch. -- Larger sized squads can be recruited. function patriarch_rewards() SendScriptCallback("actor_on_achievement_earned","patriarch","st_achievement_14_unlock") end -- Radiotherapy. -- 25% chance of surviving emissions and psi-vortices. function radiotherapy_rewards() SendScriptCallback("actor_on_achievement_earned","radiotherapy","st_achievement_2_unlock") end -- Rag and Bone. -- Random chance of better loot in task reward stashes. function rag_and_bone_rewards() SendScriptCallback("actor_on_achievement_earned","rag_and_bone","st_achievement_9_unlock") end -- Silver or Lead. -- 33% chance of a second stash from surrendering stalkers. function silver_or_lead_rewards() SendScriptCallback("actor_on_achievement_earned","silver_or_lead","st_achievement_6_unlock") end -- Tourist. -- 3 "Tourist's stashes" are revealed. function tourist_rewards() for i=1,3 do treasure_manager.create_random_stash(nil, "Curious stash", nil) end db.actor:disable_info_portion("tourist_achievement_delay") SendScriptCallback("actor_on_achievement_earned","tourist","st_achievement_8_unlock") end -- Well Dressed. -- 20% chance of extra parts when field dressing mutants. function well_dressed_rewards() SendScriptCallback("actor_on_achievement_earned","well_dressed","st_achievement_5_unlock") end -- Wishful Thinking. -- Unlock "Renegades" faction function wishful_thinking_rewards() axr_main.config:w_value("unlocked_factions","renegade",true) axr_main.config:save() SendScriptCallback("actor_on_achievement_earned","wishful_thinking","st_achievement_11_unlock") end -- Infantile Pleasure. -- 25% chance of extra items found in boxes. function infantile_pleasure_rewards() SendScriptCallback("actor_on_achievement_earned","infantile_pleasure","st_achievement_16_unlock") end -- Recycler. -- 33% chance of extra part obtained from disassembling. function recycler_rewards() SendScriptCallback("actor_on_achievement_earned","recycler","st_achievement_17_unlock") end -- Artificer Eagerness. -- 1 less part used for crafting. function artificer_eagerness_rewards() SendScriptCallback("actor_on_achievement_earned","artificer_eagerness","st_achievement_18_unlock") end -- Unforeseen Guest. -- less suspicious spikes upon sudden actions. function unforeseen_guest_rewards() SendScriptCallback("actor_on_achievement_earned","unforeseen_guest","st_achievement_19_unlock") end -- Absolver. -- Unlock "Sin" faction function absolver_rewards() axr_main.config:w_value("unlocked_factions","greh",true) axr_main.config:save() SendScriptCallback("actor_on_achievement_earned","absolver","st_achievement_20_unlock") end -- Collaborator. -- Unlock "ISG" faction function collaborator_rewards() axr_main.config:w_value("unlocked_factions","isg",true) axr_main.config:save() SendScriptCallback("actor_on_achievement_earned","collaborator","st_achievement_21_unlock") end -- Iron Curtain. -- Reward 40,000 RU function iron_curtain_rewards() db.actor:give_money(40000) SendScriptCallback("actor_on_achievement_earned","iron_curtain","st_achievement_22_unlock") end -- Murky Spirit. function murky_spirit_rewards() SendScriptCallback("actor_on_achievement_earned","murky_spirit","st_achievement_23_unlock") end -- Invictus. function invictus_rewards() SendScriptCallback("actor_on_achievement_earned","invictus","st_achievement_24_unlock") end