Files
infinitefusion-e18/Data/Scripts/053_PIF_Hoenn/PokeNav/Challenges/Challenges.rb
T
2026-07-10 15:42:06 -04:00

155 lines
3.9 KiB
Ruby

def openChallengeApp
pbFadeOutIn {
scene = PokemonChallenges_Scene.new
screen = PokemonChallenges_Screen.new(scene)
screen.pbStartScreen
# scene.pbRefresh
}
end
class Player
def add_challenge(challenge_id)
@challenges = {} unless @challenges
challenge_template = CHALLENGES[challenge_id]
return unless challenge_template
reward = pick_challenge_reward(challenge_template.category)
@challenges[challenge_id] = PlayerChallenge.new(challenge_id, reward)
end
def complete_challenge(challenge_id)
@challenges = {} unless @challenges
if @challenges.has_key?(challenge_id)
challenge = @challenges[challenge_id]
challenge.completed = true
@challenges[challenge_id] = challenge
$Trainer.nb_completed_challenges = 0 unless $Trainer.nb_completed_challenges
$Trainer.nb_completed_challenges += 1
pbSEPlay("challenge_complete")
end
end
def completed_challenge?(challenge_id)
if @challenges.has_key?(challenge_id)
return @challenges[challenge_id]
end
return false
end
def select_random_challenge(category)
candidates = CHALLENGES.select { |_k, v| v.category == category }.keys
return nil if candidates.empty?
return candidates.sample
end
def refresh_challenges()
@challenges = {} unless @challenges
@challenges.each do |challenge_id, challenge|
unless challenge.completed
remove_challenge(challenge.id)
end
end
categories = [:encounter, :battle, :catch, :fusion]
categories.each do |category|
unclaimed_challenges = listPlayerChallengesOfCategory(category)
if unclaimed_challenges.empty?
challenge_id = select_random_challenge(category)
add_challenge(challenge_id)
end
end
end
def listPlayerChallengesOfCategory(category)
challenges_list = []
@challenges.each do |challenge_id, challenge|
if challenge.category == category
challenges_list << challenge.id
end
end
return challenges_list
end
def remove_challenge(challenge_id)
@challenges.delete(challenge_id)
end
def clear_all_challenges
@challenges = {} unless @challenges
for id in @challenges
remove_challenge(id)
end
end
def pick_challenge_reward(category)
tier = rand(3) == 0 ? :TIER2 : :TIER1
items_list = []
case category
when :encounter
items_list = tier == :TIER1 ? CHALLENGE_ENCOUNTER_REWARDS_TIER1 : CHALLENGE_ENCOUNTER_REWARDS_TIER2
when :battle
items_list = tier == :TIER1 ? CHALLENGE_BATTLE_REWARDS_TIER1 : CHALLENGE_BATTLE_REWARDS_TIER2
when :catch
items_list = tier == :TIER1 ? CHALLENGE_CATCH_REWARDS_TIER1 : CHALLENGE_CATCH_REWARDS_TIER2
when :fusion
items_list = tier == :TIER1 ? CHALLENGE_FUSE_REWARDS_TIER1 : CHALLENGE_FUSE_REWARDS_TIER2
end
item = items_list.sample
if tier == :TIER1
quantity = rand(1..3)
else
quantity = 1
end
reward = []
for i in 1..quantity
reward << item
end
return reward
end
end
class PlayerChallenge
attr_reader :id
attr_reader :item_reward
attr_reader :template
attr_accessor :completed
def initialize(id, item_reward = [])
@id = id
@item_reward = item_reward
@template = CHALLENGES[id]
@completed = false
end
def description
return _INTL(@template.description)
end
def category
return _INTL(@template.category)
end
def money_reward
return _INTL(@template.money_reward)
end
end
class ChallengeTemplate
attr_reader :id, :description, :category, :money_reward
def initialize(id, description, category, money_reward)
@id = id
@description = description
@money_reward = money_reward
@category = category
end
end
CHALLENGES = {}
def define_challenge(id, description:, category:, money_reward:)
CHALLENGES[id] = ChallengeTemplate.new(id, description, category, money_reward)
end