mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2026-07-22 07:37:00 +00:00
155 lines
3.9 KiB
Ruby
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
|
|
|