Sujet n°11963
Posté par
Rey' le
26 Aoû - 17:37 (2012)Titre :
Bug PSPDS 5G au début d'un combat.Bonjour à tous. Comme il est écrit dans le titre, j'ai le bug lors du lancement d'un combat de dresseur. J'ai fais beaucoup de recherche et je n'ai rien trouvé.
Voici le log :
---------- Erreur de script : API ----------
----- Version du logiciel : PSP DS v0.4
----- Type
TypeError
----- Message
cannot convert nil into String
----- Position dans API
Ligne 1
----- Backtrace
Script : API | Ligne : 1 | Méthode : in `+'
Script : API | Ligne : 1 | Méthode : in `load_bitmap'
Script : API | Ligne : 1 | Méthode : in `battleback'
Script : Pokemon_Battle_Trainer* | Ligne : 175 | Méthode : in `pre_battle_transition'
Script : Pokemon_Battle_Core 1* | Ligne : 229 | Méthode : in `main'
Script : Main | Ligne : 59
Et voilà des screenshots.
Ici, j'ai configuré l'arrière plan des combats :
Et ici : j'ai configuré son apparence en combat...
Merci d'avance pour votre aide !
Posté par
Gemini le
26 Aoû - 19:12 (2012)Salut
Désolé, je n'ai pas de solution à te proposer si ce n'est de passer sous PSP4G+, c'est une version plus stable que PSP5G et qui ne fait rien de moins. (A ma connaissance)
Posté par
Rey' le
26 Aoû - 19:33 (2012)M'ouais... Mais justement, je suis passé sur PSPDS 5G pour avoir le dual-screen et la 5G...
Il me semble que ça vient normalement de l'apparence en combat, mais l'ayant configuré, je me demande si ce n'est pas un problème dans le script.
Posté par
The_Doctor le
26 Aoû - 23:10 (2012)bon bin utilise pspds simple et tu importe la 5G
Posté par
Rey' le
27 Aoû - 11:11 (2012)Sinon, j'ai peut être trouvé une piste. En créant une map de test, et en configurant un combat contre le même dresseur, ça marche.
Je n'ai pas d'erreur de log, le combat se fait normalement. Si vous avez des idées du pourquoi du comment, hésiter pas et dites moi.
Et peut être qu'on pourra enfin régler ce bug.
Posté par
Pαlвσlѕку le
27 Aoû - 11:33 (2012)Je viens suite à ton MP.
Il me faudrait que tu me passes les 10 lignes avant et après celle où il y a le bug.
Le log ne me permet pas de savoir où à lieu le bug, mais à première vue, le bug semble venir d'une variable qui est nulle, avec toutes les conséquences qui en découlent.
Posté par
Rey' le
27 Aoû - 14:49 (2012)Je te passe ça.
#------------------------------------------------------------
# Animations pré-combat
#------------------------------------------------------------
def pre_battle_transition
# Jingle et BGM
$game_system.bgm_play($game_system.battle_bgm)
Audio.me_play("Audio/ME/battle_jingle.mid")
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.picture($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 #254 #782
@enemy_sprite.y = 95
@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 #254 #782
@actor_ground.bitmap = RPG::Cache.battleback(@ground_name_actor)
@actor_ground.ox = @actor_ground.bitmap.width / 2
@actor_ground.oy = @actor_ground.bitmap.height
@actor_ground.x += 782 #286 #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 #286 #782
Graphics.transition(50, "Graphics/Transitions/battle0.png")
end
@actor_party_status = Pokemon_Battle_Party_Status.new(@party, @battle_order, false, @z_level + 15)
@enemy_party_status = Pokemon_Battle_Party_Status.new($battle_var.enemy_party, $battle_var.enemy_battle_order, true, @z_level + 15)
@actor_party_status.visible = false
@enemy_party_status.visible = false
# note: .active = true activera les animations liées à ces fenêtres
@actor_party_status.active = false
@enemy_party_status.active = false
# Lancement des animations
pre_battle_transition
pre_battle_animation
# Effets pré-premier round
post_round_effect
@frame = 0
@frame_bis = 10
Graphics.transition
Et enfin Main (sauf si c'est inutile) :
# トランジション準備
splash.dispose
splash1.dispose
Graphics.transition(5)
Graphics.freeze
# シーンオブジェクト (タイトル画面) を作成
$scene = Scene_Title.new
# $scene が有効な限り main メソッドを呼び出す
while $scene != nil
$scene.main
end
# フェードアウト
Graphics.transition(20)
rescue Exception => exception
EXC::error_handler(exception)
rescue Errno::ENOENT
# 例外 Errno::ENOENT を補足
# ファイルがオープンできなかった場合、メッセージを表示して終了する
filename = $!.message.sub("Ne trouve pas le fichier ou le répertoire - ", "")
print("Le ficher #{filename} n'a pas été trouvé.")
end
Voilà.
Edit visible : Je me suis dis que ceci pouvait être utile.
PS: J'ai d'ailleurs une petite idée de la provenance du bug. Si je place mon point d'apparition à la map de l'intro, j'ai le bug.
Mais si je le place directement sur la map, plus aucun problème. Je me demande si ce n'est pas un conflit avec quelque chose
en rapport avec le personnage en combat...
Posté par
The_Doctor le
27 Aoû - 15:36 (2012)1 met tes code sous forme de euuh bin de code
2 ta map test est faite avec le meme tileset ?
et 3 utilise tu des interrupteur dans ton combat et utilise tu des interrupteurs dans ton intro
Posté par
Rey' le
27 Aoû - 16:29 (2012)Oui, j'utilise des interrupteurs dans mon intro, puisque j'ai repris celle par défaut à ma sauce. Ceci n'interfère en aucun cas avec les interrupteurs du combat, si tu faisais allusion à ça.
Ensuite, oui, la map test utilise le même tileset, et fait le même combat.
Une petite précision tout de même, le combat n'est pas vraiment lancé par le personnage en personne, mais par un event en coin de map en démarrage automatique.
Voilà, si ça peut aider.
Posté par
The_Doctor le
27 Aoû - 19:18 (2012)le démarrage auto fait buger psp la plupart du temps mais sinon ca va
non franchement met cet évent en processus parallèle plutôt car en auto je croit que ça fait des bug
Posté par
Rey' le
27 Aoû - 21:41 (2012)Je viens de tester, mais rien n'y fait, toujours le bug.
Posté par
Laito' le
27 Aoû - 22:48 (2012) dab777 a écrit: |
le démarrage auto fait buger psp la plupart du temps mais sinon ca va |
dab777 fait bugguer les membres de PSP la plupart du temps mais sinon ça va .
Reynald, il me semble que ça vienne bien des battles backs, mais ça peut venir de celui de soir et nuit.
À vérifier.
Posté par
Rey' le
28 Aoû - 09:41 (2012)Je t'ai fais un screen, histoire de te montrer.
(D'ailleurs, si tu t'aperçois que les groundbattle_actor_after et nuit ne sont pas pareil que celui de jour, c'est parce que les ressources n'était pas intégré. J'ai donc du intégrer des ressources avec aucun rapport. )
Comme tu vois, j'ai tout, alors, je ne vois pas le problème. Et le plus étrange est que, si tu lis mes messages d'au dessus, sur une map de test, ça marche.
Posté par
Laito' le
28 Aoû - 09:44 (2012)Okay, t'as installé les polices dis moi ? Car je suis pas sûr mais je crois que ça cause un bug comme celui-ci
Posté par
Rey' le
28 Aoû - 09:49 (2012)Et bien non, je l'ai réinstallé encore une fois, mais toujours le même bug. =/
Posté par
adrien63190 le
28 Aoû - 09:58 (2012)Je ne suis pas expert en PSP mais je pense que l'erreur vient de là
car j'ai l'impression que tu n'as pas paramétré l'apparence de l'adversaire en combat
Posté par
Laito' le
28 Aoû - 09:59 (2012) adrien63190 a écrit: |
Je ne suis pas expert en PSP mais je pense que l'erreur vient de là
{{{Spoiler}}}
car j'ai l'impression que tu n'as pas paramétré l'apparence de l'adversaire en combat |
Peut être, mais moi j'ai déjà fait des combats avec des hommes invisibles sur PSP car je n'avais rien assigné pourtant, ça a fonctionné.
Posté par
Rey' le
28 Aoû - 10:04 (2012)Justement, si tu regarde bien mes autres messages, tu verras que je l'ai configuré.
Je vais essayer en recréant une autre map identique à celle où j'ai le bug.
Posté par
adrien63190 le
28 Aoû - 10:10 (2012)J'ai vu que tu avais dis avoir configuré l'apparence et si tu le dis c'est que tu l'as fais mais tu n'as rien mis entre les parenthèse et donc je proposais ce que je pensais car rien n'a l'air de fonctionner. Mais ne m'y connaissant pas encore beaucoup,c'est fortement possible que cela ne vienne pas de là.
Posté par
Rey' le
29 Aoû - 12:47 (2012)Vous allez peut être pas le croire, mais étrangement, en faisant un copier coller de la map, ça remarche. Oo'.
Je vais faire des tests, et si je vois que c'est à cause de ça, je fais un Edit.
Edit visible : Conclusion trop hâtive, ça ne marche pas. =/
Posté par
IamTheAdic le
29 Aoû - 15:01 (2012)Je pense que tu as mal configurer le background. Vérifie bien si il ne manque pas une image.
Posté par
Rey' le
29 Aoû - 23:10 (2012)Si tu parle du battle à configurer dans la BDD, oui, je l'ai fais.
Si tu parles de autre chose, alors, je voudrais bien que tu me dises de quoi il s'agit alors.
Posté par
hoirogorio le
30 Aoû - 09:42 (2012)Il parle du fond de combat plutôt je crois
Posté par
Rey' le
30 Aoû - 09:52 (2012)Alors, oui, je l'ai configuré.
Posté par
The_Doctor le
30 Aoû - 11:54 (2012)c a quel moment du combar que tu as des probleme
Posté par
Laito' le
30 Aoû - 12:29 (2012) Reynald76 a écrit: |
j'ai le bug lors du lancement d'un combat de dresseur. |
Posté par
Nuri Yuri le
30 Aoû - 13:40 (2012)Dab, tu dois écrire correctement, le SMS comme les fautes volontaires d'orthographe ne sont pas tolérés, c'est la dernière fois que je t'avertis.
Posté par
Rey' le
30 Aoû - 14:42 (2012)Dab, comme l'as cité Laitonite, j'ai le bug en début de combat. Pour le log et les scripts qui bug, tu peux aller les consulter à la première page.
Posté par
Pαlвσlѕку le
30 Aoû - 20:42 (2012)Tu pourrais préciser la ligne qui bug dans Pokemon Battle Trainer ?
Posté par
Rey' le
30 Aoû - 20:49 (2012)C'est la ligne 175 qui bug.
Posté par
Pαlвσlѕку le
30 Aoû - 20:56 (2012)Je sais que c'est la ligne 175, mais je voudrais savoir ce qu'elle contient.
Posté par
Rey' le
1 Sep - 00:12 (2012)Elle contient la ligne :
Code: |
@background.bitmap = RPG::Cache.battleback(@battleback_name) |
EDIT Visible : Il m'a semblé plus pratique de te mettre le code entier, alors tiens :
Code: |
#============================================================================== # ■ 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) @z_level = 0 @ia = ia @trainer_id = trainer_id @run = run_able @lose = lose_able @capture = capturable $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[6] != nil shiny = pokemon_data[6] 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 i = 0 for skill in pokemon_data[4] if skill != nil and skill != "AUCUN" pokemon.skills_set[i] = Skill.new(Skill_Info.id(skill)) end if skill == "AUCUN" pokemon.skills_set[i] = nil end i += 1 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 $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_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 = 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 $game_system.bgm_play($game_system.battle_bgm) Audio.me_play("Audio/ME/battle_jingle.mid") 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.picture($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 #254 #782 @enemy_sprite.y = 95 @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 #254 #782 @actor_ground.bitmap = RPG::Cache.battleback(@ground_name_actor) @actor_ground.ox = @actor_ground.bitmap.width / 2 @actor_ground.oy = @actor_ground.bitmap.height @actor_ground.x += 782 #286 #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 #286 #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 == 324 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 += 416 @enemy_party_status.x -= 416 Graphics.update loop do @actor_party_status.x -= 20 @enemy_party_status.x += 20 Graphics.update if @actor_party_status.x <= 132-16 - 123 @actor_party_status.reset_position @enemy_party_status.reset_position break end end #wait_hit wait(60) # 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 + 5 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 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 alive = 0 for pokemon in @party.actors if not pokemon.dead? alive += 1 end end 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 name = $battle_var.enemy_party.actors[index+1].name draw_text(name + " va être envoyé", "par " + Trainer_Info.string(@trainer_id) + ".") if @enemy_party_status.active @enemy_party_status.reset_position @enemy_party_status.visible = true @enemy_party_status.x = -399 until @enemy_party_status.x == -139 @enemy_party_status.x += 20 Graphics.update end end wait_hit if alive > 1 if $choix_battle == true draw_text("Voulez-vous appeler", "un autre Pokémon ?") decision = false if draw_choice("Changer de Pokémon","Continuer le combat avec "+ @actor.given_name) $battle_var.window_index = @index scene = Pokemon_Party_Menu_Battle.new(0) scene.main return_data = scene.return_data decision = true Graphics.transition end 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 == -399 @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 = @index scene = Pokemon_Party_Menu_Battle.new(0) 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] # 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::PI 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 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 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 actor.skill_effect_reset actor.reset_stat_stage actor.add_bonus(@enemy.battle_list) if @actor.level < MAX_LEVEL draw_text(actor.given_name + " a gagné", amount.to_s + " points Exp. !") end 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 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 #Audio.bgm_fade(800) exp_battle $battle_var.result_win = true $game_variables[12] += 5 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 @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 + 5 @enemy_sprite.x = 524 @enemy_sprite.y -= @enemy_sprite.bitmap.height / 2 -130 loop do @enemy_sprite.x -= 10 @enemy_sprite.y = 86 Graphics.update if @enemy_sprite.x <= 360 #324 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 + "$ !") $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 def end_battle_defeat wait(40) $battle_var.result_defeat = true @enemy_sprite_dresseur = Sprite.new @enemy_sprite_dresseur.z = @z_level + 15 @enemy_sprite_dresseur.bitmap = RPG::Cache.battler(@start_enemy_battler, 0) @enemy_sprite_dresseur.x = 444 @enemy_sprite_dresseur.y = 32 loop do @enemy_sprite_dresseur.x -= 10 Graphics.update if @enemy_sprite_dresseur.x <= 210 break end end $pokemon_party.money /= 2 wait_hit list_string = Trainer_Info.string_defeat(@trainer_id) draw_text(list_string) wait_hit draw_text("#{Player.name} n'a pas plus de","Pokémon en forme !") wait_hit draw_text("#{Player.name} donne la moitié de son argent" , "au vainqueur.") wait_hit draw_text("... ... ... ...") wait_hit draw_text("#{Player.name} est hors-jeu !") wait(40) if not(@lose) if $game_variables[1] == 0 print("Réglez votre point de retour !") else $game_map.setup($game_variables[1]) $game_map.display_x = $game_variables[2] $game_map.display_y = $game_variables[3] $game_player.moveto($game_variables[2], $game_variables[3]) end $game_temp.common_event_id = 2 end $game_temp.map_bgm = $game_map.bgm end_battle(2) end end end |
Posté par
Pαlвσlѕку le
1 Sep - 18:09 (2012)Vérifie si l'interrupteur n°15 est activé, s'il ne l'est pas il faut l'activer.
Posté par
Rey' le
1 Sep - 18:43 (2012)Je viens de l'activer, toujours le même bug... =/
D'ailleurs, je sais pas si ça a un rapport avec le combat, mais chez moi, l'interrupteur 15 s'appelle Temps marche.
Posté par
Pαlвσlѕку le
1 Sep - 19:41 (2012)Je pensais que le problème venait du fait que le système J/N était désactivé, puisque le background des combats dépend de l'heure de la journée.
Mais visiblement le problème ne vient pas de là.
Je continue de chercher mais pour l'instant j'ai rien d'autre à proposer.
Si quelqu'un a une idée réfléchie qui n'a pas été proposé sur ce topic, qu'il la pose.
Posté par
Rey' le
1 Sep - 20:21 (2012)D'accord, merci tout de même. Je vais continuer à faire des tests de mon côté, et je vous tiens au courant.
Posté par
Elric le
1 Sep - 20:54 (2012)Je ne sais pas si ça a déjà été proposé mais essaie ça :
Mets un event en Demarrage Auto avec les instructions suivantes :
Modifier les propriétés de la carte : Arrière-plan de combat:'nom_de_ton_fond'
Supprimer cet événement
Là ça devrait normalement marcher.
Posté par
Rey' le
1 Sep - 20:57 (2012)Ça ne marche toujours pas... Sinon, est t'il possible que cela vienne de mon event en lui même ? Si oui, je vous fais un screen de mon event.
Posté par
Aaron le
2 Sep - 00:06 (2012)envois un screen de ton event je crois savoir d'ou viens ton probleme.
Posté par
Rey' le
2 Sep - 12:27 (2012)D'accord, le voici en quatre images. L'interrupteur AU SECOURS est un interrupteur s'activant suite à un évènement au contact du héros.
Posté par
Pαlвσlѕку le
2 Sep - 19:26 (2012)Je te propose une dernière solution, c'est de m'envoyer par MP ton projet, pour que je regarde d'où vient le problème.
Ne compile pas ton projet, sinon je ne pourrais pas lire les données.
Je m'engage à ne pas diffuser le contenu de ton projet, ni à l'utiliser.
Posté par
Aaron le
2 Sep - 20:46 (2012)Tu as dis que tu avais réglé quel fond de combat sur ton tilset?
Edit:si tu le souhaite je peux jeter un cou d'oeil ton projet aussi pour voir d l'interrieur se serra peut-etre plus pratique.
Je m'engage aussi a ne rien dévoiler du contenu de se projet.
Posté par
Rey' le
2 Sep - 21:44 (2012)D'accord, je m'occupe de cela des demains, encore merci, vous aurez le MP demain.
Posté par
Pαlвσlѕку le
3 Sep - 12:59 (2012)Je viens de regarder ce que tu viens de m'envoyer et pour l'instant ça semble être le système J/N qui soit en cause.
Tu sembles avoir tout bien programmé (BDD, event) donc pour l'instant je n'arrive pas à trouver d'où vient le problème.
Comme je l'ai dis précédemment, le background et le système J/N sont liés.
Or bien que le système de temps réel fonctionne, pour une raison inexplicable pour le moment, le système de ton (qui doit changer le ton de l'écran en fonction de l'heure de la journée) ne fonctionne pas comme il devrait.
L'interrupteur n°14 est activé mais le système ne tourne pas, et c'est ce système qui dit au script des combats quand on est dans la journée en stockant cette information dans la variable n°37 qui doit normalement contenir "jour", "nuit", etc. contient 0 dans notre cas ce qui pose un véritable problème dans les combats.
Je continue à chercher, mais cet après-midi je ne peux pas.
J'essaierais de regarder ça ce soir à nouveau.
Posté par
Rey' le
9 Nov - 14:16 (2012)EDIT VISIBLE : Problème réglé grâce à l'aide d'Opale. La solution est en fait simple.
Dans le script Pokémon_Battle_Trainer, à la ligne 195, juste avant Graphics.freeze, rajoutez ça !
if @battleback_name == nil
@battleback_name = $game_map.battleback_name + ".png"
@ground_name = "ground" + $game_map.battleback_name + ".png"
@ground_name_actor = "ground" + $game_map.battleback_name + "_actor.png"
end
Voilà, je remercie en tout cas Opale de son aide et Palbolsky pour avoir essayé de m'aider !
Edit : Ce bout de code ne règle cependant pas le bug du système Jour/Nuit.