#==============================================================================
# ■ Pokemon_Battle_Trainer
# Pokemon Script Project - Krosk
# 29/09/07
#-----------------------------------------------------------------------------
# Scène à ne pas modifier de préférence
#-----------------------------------------------------------------------------
# Système de Combat - Pokémon Dresseur
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# 0: Normal, 1: Poison, 2: Paralysé, 3: Brulé, 4:Sommeil, 5:Gelé, 8: Toxic
# @confuse (6), @flinch (7)
#-----------------------------------------------------------------------------
# 1 Normal 2 Feu 3 Eau 4 Electrique 5 Plante 6 Glace 7 Combat 8 Poison 9 Sol
# 10 Vol 11 Psy 12 Insecte 13 Roche 14 Spectre 15 Dragon 16 Acier 17 Tenebres
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# $battle_var.action_id
# 0 : Phase de Sélection
# 1 : Sélection Item
# 2 : Switch Pokémon
# 4 : Switch Fin de Tour
#-----------------------------------------------------------------------------
module POKEMON_S
#------------------------------------------------------------
# Pokemon_Battle_Trainer
# scene
#------------------------------------------------------------
class Pokemon_Battle_Trainer < Pokemon_Battle_Core
attr_accessor :z_level
attr_accessor :actor_status
attr_accessor :actor
#------------------------------------------------------------
# Fonction d'initialisation
# Appel: $scene = Pokemon_Battle_Trainer.new(
# party, trainer_id, ia)
# party: $pokemon_party (classe Pokemon_Party)
# trainer_id: L'ID du dresseur dans $data_trainer (groupe de monstres)
# ia: Fausse AI
# run_able: possible de fuir
#------------------------------------------------------------
def initialize(party, trainer_id, ia = false, run_able = false, lose_able = false, capturable = false, niveau = 2)
@z_level = 100
@ia = ia
@trainer_id = trainer_id
@run = run_able
@lose = lose_able
@niveau = niveau
@capture = niveau > 0 ? true : false
$sauvage = false
$battle_var.reset
# Création données des Pokémons adverses
#$battle_var.enemy_party = Pokemon_Party.new
for pokemon_data in Trainer_Info.pokemon_list(@trainer_id)
id = pokemon_data[0]
level = pokemon_data[1]
# Shiny
if pokemon_data[7] != nil
shiny = pokemon_data[7]
else
shiny = false
end
pokemon = Pokemon.new(id, level, shiny)
pokemon.given_name += " ennemi"
# Paramètres optionnels
# Objet
if pokemon_data[2] != nil
pokemon.item_hold = Item.id(pokemon_data[2])
end
# Moveset
if pokemon_data[4] != nil
for i in 0...pokemon_data[4].size
if pokemon_data[4][i] != nil and pokemon_data[4][i] != "AUCUN"
pokemon.skills_set[i] = Skill.new(Skill_Info.id(pokemon_data[4][i]))
end
if pokemon_data[4][i] == "AUCUN"
pokemon.skills_set[i] = nil
end
end
pokemon.skills_set.compact!
end
# Stats avancées
if pokemon_data[3] != nil and pokemon_data[3].length == 6
pokemon.dv_modifier(pokemon_data[3])
end
# Genre
if pokemon_data[5] != nil
pokemon.set_gender(pokemon_data[5])
end
# Forme
if pokemon_data[6] != nil
pokemon.form = pokemon_data[6]
end
if pokemon_data[8] != nil
pokemon.table_stats = pokemon_data[8]
end
# Table types
if pokemon_data[9] != nil
pokemon.table_type = pokemon_data[9]
end
# Skill types
if pokemon_data[10] != nil
pokemon.table_skill_type = pokemon_data[10]
end
# Nature
if pokemon_data[11].type == String
for i in 0...POKEMON_S::NATURE.size
if POKEMON_S::NATURE[i][0] == pokemon_data[11]
pokemon.nature = POKEMON_S::NATURE[i]
break
end
end
elsif pokemon_data[11].type == Array and pokemon_data[11].size == 6
pokemon.nature = pokemon_data[11]
end
# Bonheur
if pokemon_data[12] != nil
pokemon.loyalty = pokemon_data[12]
end
# Capturable
if pokemon_data[13] != nil
pokemon.capturable = pokemon_data[13]
end
# image ball
if pokemon_data[14] != nil
pokemon.ball_data = $item.data($item.id(pokemon_data[14]))["ball"]
end
# Table stats
$battle_var.enemy_party.actors.push(pokemon)
end
@enemy = $battle_var.enemy_party.actors[0]
$battle_var.enemy_battle_order = [0,1,2,3,4,5]
@party = party
# Mise à jour Pokedex: Pokémon vu
$data_pokedex[@enemy.id][0] = true
# Génération ordre de combat
@battle_order = Array.new(@party.size)
@battle_order.fill {|i| i}
# Désignation 1er Pokémon au combat
# @actor désigne le (class) Pokémon
actor_index = 0
@actor = @party.actors[actor_index]
if @actor == nil
print("Attention, vous n'avez pas de Pokémon dans votre équipe! Réglez ce bug.")
end
while @actor.dead?
actor_index += 1
@actor = @party.actors[actor_index]
end
# Correction ordre combat (Pokémon vivant en premier)
@battle_order = switch(@battle_order, 0, actor_index)
# Remise à zéro résultat
$battle_var.result_flee = false
$battle_var.result_flee_enemy = false
$battle_var.result_win = false
$battle_var.result_defeat = false
# Initialisation des variables de combat
@phase = 0
# 0 Non décidé, 1 Attaque, 2 Switch, 3 Item, 4 Fuite
@actor_action = 0
@enemy_action = 0
@start_actor_battler = Player.battler #$trainer_battler
@start_enemy_battler = $alea ? "trainer" + $no_alea : Trainer_Info.battler(@trainer_id)
$battle_var.have_fought.push(@actor.party_index)
$battle_var.battle_order = @battle_order
$battle_var.in_battle = true
@actor.reset_stat_stage
@enemy.reset_stat_stage
@actor.skill_effect_reset
@enemy.skill_effect_reset
@actor_skill = nil
@enemy_skill = nil
@actor.ability_active = false
@enemy.ability_active = false
@item_id = 0 # item utilisé
end
#------------------------------------------------------------
# Animations pré-combat
#------------------------------------------------------------
def pre_battle_transition
# Jingle et BGM
#Audio.bgm_play("Audio/BGM/PkmRS-Battle3.mid")
$game_system.bgm_play($game_system.battle_bgm)
if $game_variables[23]==0
Audio.bgm_play("Audio/BGM/Battle Sbire.mp3")
end
if $game_variables[23]==1
Audio.bgm_play("Audio/BGM/musique_2.mid")
end
if $game_variables[23]==2
Audio.bgm_play("Audio/BGM/musique_3.mid")
end
if $game_variables[23]==3
Audio.bgm_play("Audio/BGM/musique_4.mp3")
end
Graphics.freeze
# Sélection transition
s = (rand(BATTLE_TRANS)+1).to_s
@background.bitmap = RPG::Cache.picture("black.png")
Graphics.transition(100, "Graphics/Transitions/battle"+ s +".png")
Audio.me_stop
# Dessin
Graphics.freeze
@background.bitmap = RPG::Cache.battleback(@battleback_name)
@message_background.bitmap = RPG::Cache.battleback(BATTLE_MSG)
@enemy_sprite.bitmap = RPG::Cache.battler(@start_enemy_battler, 0)
@enemy_sprite.ox = @enemy_sprite.bitmap.width / 2
@enemy_sprite.oy = @enemy_sprite.bitmap.height * 2 / 3
@enemy_sprite.x -= 782
@enemy_ground.bitmap = RPG::Cache.battleback(@ground_name)
@enemy_ground.ox = @enemy_ground.bitmap.width / 2
@enemy_ground.oy = @enemy_ground.bitmap.height / 2
@enemy_ground.zoom_x = @enemy_ground.zoom_y = 2.0/3
@enemy_ground.x -= 782
@actor_ground.bitmap = RPG::Cache.battleback(@ground_name)
@actor_ground.ox = @actor_ground.bitmap.width / 2
@actor_ground.oy = @actor_ground.bitmap.height
@actor_ground.x += 782
@actor_sprite.bitmap = RPG::Cache.battler(@start_actor_battler, 0)
@actor_sprite.ox = @actor_sprite.bitmap.width / 2
@actor_sprite.oy = @actor_sprite.bitmap.height
@actor_sprite.x += 782
Graphics.transition(50, "Graphics/Transitions/battle0.png")
end
def pre_battle_animation
# Glissement des sprites
loop do
@enemy_sprite.x += 17
@enemy_ground.x += 17
@actor_sprite.x -= 17
@actor_ground.x -= 17
Graphics.update
if @enemy_sprite.x == 464
break
end
end
# Confrontation des joueurs avec affichage des balls
draw_text("Un combat est lancé", "par "+ Trainer_Info.string(@trainer_id) + "!")
@actor_party_status.reset_position
@enemy_party_status.reset_position
@actor_party_status.visible = true
@enemy_party_status.visible = true
@actor_party_status.active = true
@enemy_party_status.active = true
@actor_party_status.x += 400
@enemy_party_status.x -= 400
Graphics.update
loop do
@actor_party_status.x -= 20
@enemy_party_status.x += 20
Graphics.update
if @actor_party_status.x <= 309
@actor_party_status.reset_position
@enemy_party_status.reset_position
break
end
end
wait_hit
# Dégagement sprite dresseur
loop do
@enemy_sprite.x += 10
@enemy_party_status.x -= 20
Graphics.update
if @enemy_sprite.x >= 723
@enemy_party_status.visible = false
@enemy_party_status.reset_position
@enemy_sprite.oy = @enemy_sprite.bitmap.height / 2
break
end
end
@enemy_sprite.bitmap = RPG::Cache.battler(@enemy.battler_face, 0)
# Envoi sprite
launch_enemy_pokemon
# Attente appui de touche
wait(40)
# Dégagement du sprite dresseur
@actor_party_status.reset_position
loop do
@actor_sprite.x -= 10
@actor_party_status.x += 20
Graphics.update
if @actor_sprite.x <= -200
@actor_sprite.bitmap = RPG::Cache.battler(@actor.battler_back, 0)
@actor_party_status.reset_position
@actor_party_status.visible = false
break
end
end
# Envoi du pokémon (animation)
launch_pokemon
@text_window.contents.clear
Graphics.update
end
#------------------------------------------------------------
# Déroulement
#------------------------------------------------------------
def enemy_skill_decision
@enemy_caught = false
action = true
# ------- ---------- --------- --------
# Saut de phase de sélection (ennemi)
# action = false : saut
# action = true : pas de saut
# ------- ---------- --------- --------
action = phase_jump(true)
@enemy_action = 1
# Décision skill ennemi
if not(@actor.dead?) and action
list = []
for i in 0.. @enemy.skills_set.size - 1
list.push(i)
end
list.shuffle!
# Skill sans PP // Lutte
@enemy_skill = Skill.new(165)
# ----------
for i in list
if @enemy.skills_set[i].usable?
@enemy_skill = @enemy.skills_set[i]
end
end
end
# Trainer IA
if @ia and not(@actor.dead?) and action
# Skill sans PP // Lutte
# @enemy_skill = Skill.new(165)
rate_list = {}
i = 0
for skill in @enemy.skills_set
if skill.usable?
rate_list[i] = ia_rate_calculation(skill, @enemy, @actor)
else
rate_list[i] = 0
end
i += 1
end
# Tri dans l'ordre decroissant de valeur
sorted_list = rate_list.sort {|a,b| b[1]<=a[1]}
#for element in sorted_list
# print(@enemy.skills_set[element[0]].name)
# print(element[1])
#end
# Decision prioritaire: max dégat ou soin
# Valeur seuil: 200
# si une attaque/défense dépasse ce seuil, il est choisi
if sorted_list[0][1] > 200
@enemy_skill = @enemy.skills_set[sorted_list[0][0]]
else
# Decision par pallier
i = rand(100)
# Taux de decision
taux = [100, 25, 5, 0]
for a in 0..3
if i <= taux[a] and sorted_list[a] != nil and sorted_list[a][1] != 0
@enemy_skill = @enemy.skills_set[sorted_list[a][0]]
end
end
end
end
if not(action) # Reprise du skill précédent
@enemy_skill = $battle_var.enemy_last_used
end
end
#------------------------------------------------------------
# Rounds
#------------------------------------------------------------
def end_battle_check
@actor_status.refresh
@enemy_status.refresh
if $battle_var.enemy_party.dead? and not(@party.dead?)
end_battle_victory
elsif @enemy.dead? and not($battle_var.enemy_party.dead?)
exp_battle
index = $battle_var.enemy_party.actors.index(@enemy)
@enemy_switch_id = index+1
alive = 0
for pokemon in @party.actors
if not pokemon.dead?
alive += 1
end
end
if alive > 1
name = $battle_var.enemy_party.actors[index+1].name
draw_text(name + " va être envoyé", "par " + Trainer_Info.string(@trainer_id) + ".")
$pokemon_capturer = false
end
if @enemy_party_status.active
@enemy_party_status.reset_position
@enemy_party_status.visible = true
@enemy_party_status.x -= 400
until @enemy_party_status.x == -16
@enemy_party_status.x += 20
Graphics.update
end
end
wait_hit
if alive > 1
draw_text("Voulez-vous appeler", "un autre Pokémon?")
decision = false
if draw_choice
$battle_var.window_index = @action_window.index
scene = Pokemon_Party_Menu.new(0)
scene.main
return_data = scene.return_data
decision = true
Graphics.transition
end
# Switch de Pokémon
if ($battle_var.action_id == 4 or $battle_var.action_id == 6) and decision
@switch_id = return_data
actor_pokemon_switch
end
end
if @enemy_party_status.active
until @enemy_party_status.x == -416
@enemy_party_status.x -= 20
Graphics.update
end
@enemy_party_status.visible = false
@enemy_party_status.reset_position
end
# Switch enemy
enemy_pokemon_switch
end
if @actor.dead?
if @party.dead?
end_battle_defeat else
# Switch forcé
$battle_var.window_index = @action_window.index
scene = Pokemon_Party_Menu.new(0, @z_level + 150)
scene.main
return_data = scene.return_data
# Switch de Pokémon
if $battle_var.action_id == 4 or $battle_var.action_id == 6
@switch_id = return_data
actor_pokemon_switch
end
end
end
end
#------------------------------------------------------------
# Items
#------------------------------------------------------------
def actor_item_use # items à utiliser
# Item déjà utilisé ie remplacé par 0
if @item_id == 0
return
end
if Item.data(@item_id)["flee"] != nil
end_battle_flee
return
end
if Item.data(@item_id)["ball"] != nil
ball_data = Item.data(@item_id)["ball"]
catch_pokemon(ball_data)
end
end
#------------------------------------------------------------
# Lancer de pokéball
#------------------------------------------------------------
def catch_pokemon(ball_data)
# Initialisation des données
ball_name = ball_data[0]
ball_rate = ball_data[1]
ball_sprite = ball_data[2]
ball_open_sprite = ball_data[3]
ball_color = ball_data[4]
chances = rand(@niveau * 2) <= rand($pokemon_party.niveau)
if $battle_var.enemy_party.actors.index(@enemy) < ($battle_var.enemy_party.size - 1) and ball_rate.type == Array and ball_rate[0] == "vol" and @capture and @enemy.capturable and chances# < 0
if @enemy.asleep? or @enemy.frozen?
status_multiplier = 2
elsif @enemy.burn? or @enemy.paralyzed? or
@enemy.poisoned? or @enemy.toxic?
status_multiplier = 1.5
else
status_multiplier = 1
end
if ball_rate[1].type == Array
case ball_rate[1][0]
when "genre"
if ball_rate[1][@actor.gender] != nil
ball_rate = eval(ball_rate[1][@actor.gender])
else
if ball_rate[1][0] != nil
ball_rate = eval(ball_rate[1][0])
else
ball_rate = 1
end
end
when "taille"
height = Pokemon_Info.height(@enemy.id).split(' ')[0].to_i
ball_rate = eval(sprintf(ball_rate[1], height))
if ball_rate == nil or ball_rate < 1
ball_rate = 1
end
when "poids"
weight = Pokemon_Info.weight(@enemy.id).split(' ')[0].to_i
ball_rate = eval(sprintf(ball_rate[1], weight))
if ball_rate == nil or ball_rate < 1
ball_rate = 1
end
when "type"
if ball_rate[1][1].include?(@enemy.type1)
ball_rate = ball_rate[1][2]
elsif @enemy.type2 != 0 and ball_rate[1].include?(@enemy.type2)
ball_rate = ball_rate[1][2]
elsif ball_rate[1][3] != nil
ball_rate = ball_rate[1][3]
else
ball_rate = 1
end
when "id"
if ball_rate[1][1].include?(@enemy.id)
ball_rate = ball_rate[1][2]
elsif ball_rate[1][3] != nil
ball_rate = ball_rate[1][3]
else
ball_rate = 1
end
when "level"
max = 99
if ball_rate[1][2] != nil
max = ball_rate[1][2]
end
ball_rate = eval( sprintf( ball_rate[1][1], @enemy.level ) )
if ball_rate <= 1
ball_rate = 1
end
if ball_rate >= max
ball_rate = max
end
when "time"
max = 99
if ball_rate[1][2] != nil
max = ball_rate[1][2]
end
ball_rate = eval( sprintf( ball_rate[1][1], $battle_var.round ) )
if ball_rate <= 1
ball_rate = 1
end
if ball_rate >= max
ball_rate = max
end
else
ball_rate = 1
end
else
ball_rate = ball_rate[1]
end
multiplier = @enemy.rareness * (ball_rate)
maxhp = @enemy.maxhp_basis
hp = @enemy.hp
catch_rate = Integer((((maxhp * 3 - hp * 2)*multiplier).to_f/(maxhp*3).to_f)*status_multiplier)
catch_value = Integer(1048560 / (Math.sqrt(Math.sqrt(16711680/catch_rate.to_f))))
list = [rand(65536), rand(65536), rand(65536), rand(65536)]
j = 4 # nombre de fois que la balle oscille
for i in list
j -= i > catch_value ? 1 : 0
end
# Procédure / Animation
# Lancer
draw_text(Player.name + " utilise", ball_name + "!")
@ball_sprite = Sprite.new
@ball_sprite.bitmap = RPG::Cache.picture(ball_sprite)
@ball_sprite.x = -25
@ball_sprite.y = 270
@ball_sprite.z = @z_level + 16
t = 0.0
pi = Math:
I
loop do
t += 16
@ball_sprite.y = (270.0 - 230.0 * Math.sin(2 * pi / 3.0 * t / 445.0)).to_i
@ball_sprite.x = -15 + t
Graphics.update
if @ball_sprite.x >= 445
@ball_sprite.bitmap = RPG::Cache.picture(ball_open_sprite)
break
end
end
count = j
# "Aspiration"
@enemy_sprite.color = ball_color
@enemy_sprite.color.alpha = 0
@ball_sprite.z -= 2
until @enemy_sprite.color.alpha >= 255
@flash_sprite.opacity += 50
@enemy_sprite.color.alpha += 50
Graphics.update
end
Audio.se_play("Audio/SE/Pokeopen.wav")
loop do
@enemy_sprite.zoom_x -= 0.1
@enemy_sprite.zoom_y -= 0.1
@enemy_sprite.opacity -= 25
@flash_sprite.opacity -= 25
Graphics.update
if @enemy_sprite.zoom_x <= 0.1
@flash_sprite.opacity = 0
@enemy_sprite.opacity = 0
break
end
end
@ball_sprite.bitmap = RPG::Cache.picture(ball_sprite)
# Oscillement
t = 0
r = 0
loop do
t += 1
@ball_sprite.y = 81 + 50*(1-Math.exp(-t/20.0)*(Math.cos(t*2*pi/30.0)).abs)
if @ball_sprite.y >= 81+45 and r < 6
r += 1
Audio.se_play("Audio/SE/Pokerebond.wav")
end
Graphics.update
if t >= 60
break
end
end
while count > 0
count -= 1
t = 0
Audio.se_play("Audio/SE/Pokemove.wav")
loop do
t += 4
@ball_sprite.angle = 40*Math.sin(2*pi*t/100.0)
@ball_sprite.x = 449 - 12*Math.sin(2*pi*t/100.0)
@ball_sprite.y = 131 + 12*Math.sin(2*pi*t/100.0)
Graphics.update
if t == 100
@ball_sprite.angle = 0
break
end
end
end
if j != 4
# Echappé
@ball_sprite.bitmap = RPG::Cache.picture(ball_open_sprite)
@ball_sprite.z -= 1
Audio.se_stop
Audio.se_play("Audio/SE/Pokeopenbreak.wav")
@enemy_sprite.oy = @enemy_sprite.bitmap.height
@enemy_sprite.y += @enemy_sprite.bitmap.height / 2 + 34
loop do
@enemy_sprite.opacity += 25
@enemy_sprite.zoom_x += 0.1
@enemy_sprite.zoom_y += 0.1
@ball_sprite.opacity -= 25
@flash_sprite.opacity += 25
Graphics.update
if @enemy_sprite.zoom_x >= 1
@enemy_sprite.oy = @enemy_sprite.bitmap.height / 2
@enemy_sprite.y -= @enemy_sprite.bitmap.height / 2 + 34
Graphics.update
@ball_sprite.dispose
break
end
end
until @enemy_sprite.color.alpha <= 0
@enemy_sprite.color.alpha -= 25
@flash_sprite.opacity -= 25
Graphics.update
end
@enemy_sprite.color.alpha = 0
@enemy_sprite.opacity = 255
@flash_sprite.opacity = 0
Graphics.update
string1 = j == 3 ? "Mince!" : j == 2 ? "Aaaah!" : j == 1 ? "Raah!" : "Oh non!"
string2 = j == 3 ? "Ca y était presque!" : j == 2 ? "Presque!" : j == 1 ? "Ca y était presque!" : "Le POKéMON s'est libéré!"
draw_text(string1, string2)
wait(40)
else
for actor in $pokemon_party.actors
if $battle_var.have_fought.include?(actor.party_index)
actor.fight[0] += 1
if actor.dead? and not(actor.vaudou)
actor.vaudou = actor.medaille == nil ? false : $data_medaille[actor.medaille][4]
if actor.vaudou
draw_text(actor.name + " subit la","malédiction !")
wait(40)
wait_hit
end
else
actor.fight[1] += 1
end
end
end
# Attrapé
@enemy_caught = true
Audio.me_play("Audio/ME/Attraper.ogg")
wait_hit
until @ball_sprite.opacity <= 0
@ball_sprite.opacity -= 25
Graphics.update
end
end
if j != 4
return false
elsif j == 4
draw_text("Mon " + @enemy.name + " ! Voleur !")
wait(40)
voler_enemy
return true
end
else
# Procédure / Animation
# Lancer
draw_text(Player.name + " utilise", ball_name + "!")
@ball_sprite = Sprite.new
@ball_sprite.bitmap = RPG::Cache.picture(ball_sprite)
@ball_sprite.x = -25
@ball_sprite.y = 270
@ball_sprite.z = @z_level + 16
t = 0.0
pi = Math:
I
loop do
t += 16
@ball_sprite.y = (270.0 - 230.0 * Math.sin(2 * pi / 3.0 * t / 445.0)).to_i
@ball_sprite.x = -15 + t
Graphics.update
if @ball_sprite.x >= 445
break
end
end
Graphics.update
# Rejet
draw_text(Trainer_Info.string(@trainer_id) + " dévie", "la " + ball_name + " !")
Audio.se_stop
Audio.se_play("Audio/SE/Pokeopenbreak.wav")
t = 0
loop do
t += 1
@ball_sprite.x -= -20
@ball_sprite.y += t
Graphics.update
if t == 10
@ball_sprite.dispose
break
end
end
end
wait(40)
draw_text("Tu n'auras jamais", "mon " + @enemy.name + " !")
wait(40)
return false
end
#------------------------------------------------------------
# Fuite
#------------------------------------------------------------
def run_able?(runner, opponent)
if @run
return super
end
return false
end
def flee_able(actor, enemy)
if @run
return super
end
@action_window.visible = true
return false
end
def end_battle_flee(expulsion = false)
if @run
return super
end
draw_text("On ne s'enfuit pas", "d'un combat de dresseurs!")
wait_hit
end
def end_battle_flee_enemy(expulsion = false)
if @run
return super
end
draw_text("On ne s'enfuit pas", "d'un combat de dresseurs!")
wait_hit
end
#------------------------------------------------------------
# Exp en cours de combat
#------------------------------------------------------------
def exp_battle
@actor_status.z = @z_level + 15
# Réduction de liste
$battle_var.have_fought.uniq!
for index in $battle_var.have_fought
actor = $pokemon_party.actors[index]
if actor.dead?
$battle_var.have_fought.delete(index)
end
end
number = $battle_var.have_fought.length
@enemy.skill_effect_reset
@enemy.reset_stat_stage
if @evolve_checklist == nil
@evolve_checklist = []
end
if @money_rate == nil
@money_rate = 1
end
# Recherche de paramètres
type = 1.3
exp_share_number = 0
for pokemon in $pokemon_party.actors
if not(pokemon.dead?) and Item.data(pokemon.item_hold)["expshare"]
exp_share_number += 1
end
end
for actor in $pokemon_party.actors
if actor.dead?
next
end
amount = nil
if $battle_var.have_fought.include?(actor.party_index)
amount = actor.exp_calculation(@enemy.battle_list, @enemy.level, number, type, exp_share_number)
# Tag objet
if Item.data(actor.item_hold)["amuletcoin"]
@money_rate = 2
end
end
if Item.data(actor.item_hold)["expshare"] and
not($battle_var.have_fought.include?(actor.party_index)) and not(actor.dead?)
amount = actor.exp_calculation(@enemy.battle_list, @enemy.level, number, type, exp_share_number, 0)
end
if amount != nil and not($pokemon_capturer)
actor.skill_effect_reset
actor.reset_stat_stage
actor.add_bonus(@enemy.battle_list)
draw_text(actor.given_name + " a gagné", amount.to_s + " points d'expérience!")
Graphics.update
wait_hit
for i in 1..amount
actor.add_exp_battle(1)
if actor.level_check
actor.level_up(self)
if not(@evolve_checklist.include?(actor))
@evolve_checklist.push(actor)
end
end
if actor == @actor
if @actor.exp_list[@actor.level+1] != nil and @actor.level < MAX_LEVEL
divide = (@actor.exp_list[@actor.level+1]-@actor.exp_list[@actor.level])/192
if divide == 0
divide = 1
end
if (@actor.exp - @actor.exp_list[@actor.level])%divide == 0
@actor_status.exp_refresh
Graphics.update
end
end
end
end
else
$pokemon_capturer = false
end
end
@actor_status.refresh
Graphics.update
# Reset have_fought
$battle_var.have_fought = [@actor.party_index]
end
#------------------------------------------------------------
# Fin de combat
#------------------------------------------------------------
def end_battle_victory
$pokemon_party.incr_nb_matchs
for actor in $pokemon_party.actors
if $battle_var.have_fought.include?(actor.party_index)
actor.fight[0] += 1
if actor.dead? and not(actor.vaudou)
actor.vaudou = actor.medaille == nil or $data_medaille[actor.medaille] == nil ? false : $data_medaille[actor.medaille][4]
if actor.vaudou
draw_text(actor.name + " subit la","malédiction !")
wait(40)
wait_hit
end
else
actor.fight[1] += 1
end
end
end
#Audio.bgm_fade(800)
exp_battle
$battle_var.result_win = true
Audio.me_play("Audio/ME/fainted_jingle.mid")
#Audio.me_play("Audio/ME/trainer_jingle.mid")
Audio.bgm_play("Audio/BGM/PkmRS_Victory2.mid")
draw_text("Vous avez battu", Trainer_Info.string(@trainer_id) + "!")
@enemy_sprite.opacity = 255
@enemy_sprite.zoom_x = 1
@enemy_sprite.zoom_y = 1
@enemy_sprite.visible = true
@start_enemy_battler = $alea ? "trainer" + $no_alea : Trainer_Info.battler(@trainer_id)
@enemy_sprite.ox = @enemy_sprite.bitmap.width / 2
@enemy_sprite.oy = @enemy_sprite.bitmap.height / 2
@enemy_sprite.x = 723
@enemy_sprite.y = (@enemy_sprite.bitmap.height * 2 / 3) - 10
@enemy_sprite.bitmap = RPG::Cache.battler(@start_enemy_battler, 0)
loop do
@enemy_sprite.x -= 10
Graphics.update
if @enemy_sprite.x <= 464
break
end
end
wait_hit
list_string = Trainer_Info.string_victory(@trainer_id)
draw_text(list_string)
wait_hit
$battle_var.money = Trainer_Info.money(@trainer_id)
draw_text(Player.name + " remporte " + ($battle_var.money).to_s + "$!")
interets = 0
bq = 0
for i in $game_variables[5000]["banque"]
i.maj
if i.du > 0 and interets < $battle_var.money
int_temp = interets + ($battle_var.money * BANQUE::TAUX / 100.0).round
interets += int_temp > $battle_var.money ? $battle_var.money : int_temp
i.du -= interets
if i.du < 0
interets += i.du
i.du -= i.du
end
bq += 1
end
end
if bq == 1
draw_text(interets.to_s + "$ ont été prélevés pour","le remboursement de la banque !")
elsif bq > 1
draw_text(interets.to_s + "$ ont été prélevés pour","le remboursement des banques !")
end
$battle_var.money -= interets
$pokemon_party.add_money($battle_var.money)
wait(40)
wait(30)
$game_system.bgm_play($game_temp.map_bgm)
for actor in @evolve_checklist
info = actor.evolve_check
if info != false
scene = Pokemon_Evolve.new(actor, info, @z_level + 200)
scene.main
end
end
end_battle
end
end
end