Sujet n°11555
Posté par Ray' le 8 Juin - 18:29 (2012)
Titre : Bug Surf (récurant)
Bonjour à tous.
Alors voilà, j'ai encore un problème avec l'évènement du Surf.
Lorsque le personnage commence à utiliser l'attaque en dehors d'un combat, j'ai un message d'erreur de syntaxe avec le log suivant :

Spoiler
Code:
---------- Erreur de script : Interpreter Bis* ----------
----- Version du logiciel : PSP DS v0.4
----- Type
SyntaxError

----- Message
(eval):1:in `command_111'compile error
(eval):1: unterminated string meets end of file
(eval):1: syntax error
$pokemon_party.got_skill(RIVAGES") and $game_player.terrain_tag != 6 and player_front_terrain_tag == 6
                                                                                                      ^

----- Position dans Interpreter Bis*
Ligne 268

----- Backtrace
Script : Interpreter Bis* | Ligne : 268 | Méthode : in `command_111'
Script : Interpreter 2 | Ligne : 41 | Méthode : in `eval'
Script : Interpreter Bis* | Ligne : 268 | Méthode : in `command_111'
Script : Interpreter 2 | Ligne : 41 | Méthode : in `execute_command'
Script : Interpreter 1 | Ligne : 199 | Méthode : in `update'
Script : Interpreter 1 | Ligne : 113 | Méthode : in `loop'
Script : Interpreter 1 | Ligne : 204 | Méthode : in `update'
Script : Interpreter 1 | Ligne : 130 | Méthode : in `update'
Script : Interpreter 1 | Ligne : 113 | Méthode : in `loop'
Script : Interpreter 1 | Ligne : 204 | Méthode : in `update'
Script : Scene_Map | Ligne : 48 | Méthode : in `alias_update'
Script : Scene_Map | Ligne : 46 | Méthode : in `loop'
Script : Scene_Map | Ligne : 59 | Méthode : in `alias_update'
Script : MAPPANEL* | Ligne : 89 | Méthode : in `oldUpdate'
Script : Bouton_Rouge* | Ligne : 54 | Méthode : in `update'
Script : Scene_Map | Ligne : 26 | Méthode : in `main'
Script : Scene_Map | Ligne : 21 | Méthode : in `loop'
Script : Scene_Map | Ligne : 34 | Méthode : in `main'
Script : Main | Ligne : 58


Au cas où,je poste le script interpreter bis* :

Spoiler
Code:
#==============================================================================
# ■ Interpreter
# Pokemon Script Project - Krosk
# 18/07/07
#-----------------------------------------------------------------------------
# Scène à modifier à loisir
#-----------------------------------------------------------------------------
# Fonctions du logiciel
#-----------------------------------------------------------------------------

class Interpreter
  #--------------------------------------------------------------------------
  # Fonction communes
  #     parameter : 1 ID、0 Equipe
  #--------------------------------------------------------------------------
  def iterate_actor(parameter)
    if parameter == 0
      for actor in $pokemon_party.actors
        yield actor
      end
    else
      actor = $pokemon_party.actors[$game_variables[4]]
      yield actor if actor != nil
    end
  end
 
  #--------------------------------------------------------------------------
  # Ajouter / Retirer monnaie
  #--------------------------------------------------------------------------
  def command_125
    value = operate_value(@parameters[0], @parameters[1], @parameters[2])
    $pokemon_party.add_money(value)
    return true
  end
 
  #--------------------------------------------------------------------------
  # Ajouter / Retirer objets
  #--------------------------------------------------------------------------
  def command_126
    value = operate_value(@parameters[1], @parameters[2], @parameters[3])
    $pokemon_party.add_item(@parameters[0], value)
    return true
  end
 
  #--------------------------------------------------------------------------
  # Modifier les PV
  #--------------------------------------------------------------------------
  def command_311
    value = operate_value(@parameters[1], @parameters[2], @parameters[3])
    iterate_actor(@parameters[0]) do |actor|
      if actor.hp > 0
        if @parameters[4] == false and actor.hp + value <= 0
          actor.hp = 1
        else
          actor.hp += value
        end
      end
    end
    $game_temp.gameover = $pokemon_party.dead?
    return true
  end
 
  #--------------------------------------------------------------------------
  # Infliger statut
  #--------------------------------------------------------------------------
  def command_313
    iterate_actor(@parameters[0]) do |actor|
      if @parameters[1] == 0
        if @parameters[2] == 9
          actor.hp = 0
        else
          actor.status = @parameters[2]
        end
      elsif actor.status == @parameters[2]
        actor.cure
      elsif actor.dead? and @parameters[2] == 9
        actor.hp = actor.max_hp
      end
    end
    return true
  end

  #--------------------------------------------------------------------------
  # Soigner complètement
  #-------------------------------------------------------------------------- 
  def command_314
    iterate_actor(@parameters[0]) do |actor|
      actor.refill
    end
    return true
  end
 
  #--------------------------------------------------------------------------
  # Ajouter de l'exp
  #--------------------------------------------------------------------------   
  def command_315
    # 操作する値を取得
    value = operate_value(@parameters[1], @parameters[2], @parameters[3])
    # イテレータで処理
    iterate_actor(@parameters[0]) do |actor|
      # アクターの EXP を変更
      actor.exp += value
      if actor.level_check
        actor.level_up
        if actor.evolve_check != false
          scenebis = Pokemon_Evolve.new(actor, actor.evolve_check)
          scenebis.main
          Graphics.transition
        end
      end
    end
    # 継続
    return true
  end
 
  #--------------------------------------------------------------------------
  # Régler le niveau
  #--------------------------------------------------------------------------
  def command_316
    value = operate_value(@parameters[1], @parameters[2], @parameters[3])
    iterate_actor(@parameters[0]) do |actor|
      if value > 0
        for i in 1..value
          actor.level_up
          if actor.evolve_check != false
            scenebis = Pokemon_Evolve.new(actor, actor.evolve_check)
            scenebis.main
            Graphics.transition
          end
        end
      else
        actor.level += value
        if actor.level <= 0
          actor.level = 1
        end
      end
      actor.statistic_refresh
    end
    return true
  end
 
  #--------------------------------------------------------------------------
  # Enseigner compétence
  #--------------------------------------------------------------------------
  def command_318
    actor = $pokemon_party.actors[$game_variables[4]]
    if actor != nil
      if @parameters[1] == 0
        enseigner_capacite(actor, @parameters[2])
      else
        actor.forget_skill(@parameters[2])
      end
    end
    # 継続
    return true
  end
 
  #--------------------------------------------------------------------------
  # Modifier nom
  #--------------------------------------------------------------------------
  def command_320
    # アクターを取得
    actor = $pokemon_party.actors[$game_variables[4]]
    # 名前を変更
    if actor != nil
     
      if @parameters[1] != ""
        actor.given_name = @parameters[1]
      else
        name_pokemon(actor)
      end
    end
    # 継続
    return true
  end
 
  #--------------------------------------------------------------------------
  # Démarrer un combat
  #-------------------------------------------------------------------------- 
  def command_301
    call_battle_trainer(@parameters[0], true, @parameters[1], @parameters[2])
    current_indent = @list[@index].indent
    $game_temp.battle_proc = Proc.new { |n| @branch[current_indent] = n }
    #@index += 1
    return true
  end
 
  #--------------------------------------------------------------------------
  # Action conditionnelle
  #--------------------------------------------------------------------------
  def command_111
    # ローカル変数 result を初期化
    result = false
    # 条件判定
    case @parameters[0]
    when 0  # スイッチ
      result = ($game_switches[@parameters[1]] == (@parameters[2] == 0))
    when 1  # 変数
      value1 = $game_variables[@parameters[1]]
      if @parameters[2] == 0
        value2 = @parameters[3]
      else
        value2 = $game_variables[@parameters[3]]
      end
      case @parameters[4]
      when 0  # と同値
        result = (value1 == value2)
      when 1  # 以上
        result = (value1 >= value2)
      when 2  # 以下
        result = (value1 <= value2)
      when 3  # 超
        result = (value1 > value2)
      when 4  # 未満
        result = (value1 < value2)
      when 5  # 以外
        result = (value1 != value2)
      end
    when 2  # セルフスイッチ
      if @event_id > 0
        key = [$game_map.map_id, @event_id, @parameters[1]]
        if @parameters[2] == 0
          result = ($game_self_switches[key] == true)
        else
          result = ($game_self_switches[key] != true)
        end
      end
    when 3  # タイマー
      if $game_system.timer_working
        sec = $game_system.timer / Graphics.frame_rate
        if @parameters[2] == 0
          result = (sec >= @parameters[1])
        else
          result = (sec <= @parameters[1])
        end
      end
    when 4  # アクター
      if pokemon_numero($game_variables[4]) != nil
        case @parameters[2]
        when 1
          result = (pokemon_numero($game_variables[4]).name == @parameters[3])
        when 2  # スキル
          result = (pokemon_numero($game_variables[4]).skill_learnt?(@parameters[3]))
        when 5
          if @parameters[3] == 9
            result = pokemon_numero($game_variables[4]).dead?
          else
            result = (pokemon_numero($game_variables[4]).status == @parameters[3])
          end
        end
      end
    when 6  # キャラクター
      character = get_character(@parameters[1])
      if character != nil
        result = (character.direction == @parameters[2])
      end
    when 7  # ゴールド
      if @parameters[2] == 0
        result = ($pokemon_party.money >= @parameters[1])
      else
        result = ($pokemon_party.money <= @parameters[1])
      end
    when 8  # アイテム
      result = ($pokemon_party.item_number(@parameters[1]) > 0)
    when 11  # ボタン
      result = (Input.press?(@parameters[1]))
    when 12  # スクリプト
      result = eval(@parameters[1])
    end
    # 判定結果をハッシュに格納
    @branch[@list[@index].indent] = result
    # 判定結果が真だった場合
    if @branch[@list[@index].indent] == true
      # 分岐データを削除
      @branch.delete(@list[@index].indent)
      # 継続
      return true
    end
    # 条件に該当しない場合 : コマンドスキップ
    return command_skip
  end
 
  #--------------------------------------------------------------------------
  # Shop
  #--------------------------------------------------------------------------
  def command_302
    shop_list = [@parameters[1]]
    loop do
      @index += 1
      if @list[@index].code == 605
        shop_list.push(@list[@index].parameters[1])
      else
        break
      end
    end
    $scene = Pokemon_Shop.new(shop_list)
    @wait_count = 2
    @index -= 1
    return true
  end
 
  #--------------------------------------------------------------------------
  # Gestion de Variables
  #--------------------------------------------------------------------------
  def command_122
    # 値を初期化
    value = 0
    # オペランドで分岐
    case @parameters[3]
    when 0  # 定数
      value = @parameters[4]
    when 1  # 変数
      value = $game_variables[@parameters[4]]
    when 2  # 乱数
      value = @parameters[4] + rand(@parameters[5] - @parameters[4] + 1)
    when 3  # アイテム
      value = $pokemon_party.item_number(@parameters[4])
    when 4  # アクター
      actor = $pokemon_party.actors[$game_variables[4]]
      if actor != nil
        case @parameters[5]
        when 0  # レベル
          value = actor.level
        when 1  # EXP
          value = actor.exp
        when 2  # Type1
          value = actor.type1
        when 3  # type2
          value = actor.type2
        when 4  # HP
          value = actor.hp
        when 5  # max_hp
          value = actor.max_hp
        when 6  # 腕力
          value = actor.atk
        when 7  # 器用さ
          value = actor.dfe
        when 8  # 素早さ
          value = actor.spd
        when 9  # 魔力
          value = actor.ats
        when 10  # 攻撃力
          value = actor.dfs
        when 11  # 物理防御
          value = actor.gender
        when 12  # 魔法防御
          value = actor.id
        when 13  # 回避修正
          value = actor.loyalty
        end
      end
    when 6  # キャラクター
      character = get_character(@parameters[4])
      if character != nil
        case @parameters[5]
        when 0  # X 座標
          value = character.x
        when 1  # Y 座標
          value = character.y
        when 2  # 向き
          value = character.direction
        when 3  # 画面 X 座標
          value = character.screen_x
        when 4  # 画面 Y 座標
          value = character.screen_y
        when 5  # 地形タグ
          value = character.terrain_tag
        end
      end
    when 7  # その他
      case @parameters[4]
      when 0  # マップ ID
        value = $game_map.map_id
      when 1  # パーティ人数
        value = $pokemon_party.actors.size
      when 2  # ゴールド
        value = $pokemon_party.money
      when 3  # 歩数
        value = $pokemon_party.steps
      when 4  # プレイ時間
        value = Graphics.frame_count / Graphics.frame_rate
      when 5  # タイマー
        value = $game_system.timer / Graphics.frame_rate
      when 6  # セーブ回数
        value = $game_system.save_count
      end
    end
    for i in @parameters[0] .. @parameters[1]
      # 操作で分岐
      case @parameters[2]
      when 0  # 代入
        $game_variables[i] = value
      when 1  # 加算
        $game_variables[i] += value
      when 2  # 減算
        $game_variables[i] -= value
      when 3  # 乗算
        $game_variables[i] *= value
      when 4  # 除算
        if value != 0
          $game_variables[i] /= value
        end
      when 5  # 剰余
        if value != 0
          $game_variables[i] %= value
        end
      end
      # 上限チェック
      if $game_variables[i] > 99999999
        $game_variables[i] = 99999999
      end
      # 下限チェック
      if $game_variables[i] < -99999999
        $game_variables[i] = -99999999
      end
    end
    # マップをリフレッシュ
    $game_map.need_refresh = true
    # 継続
    return true
  end
 
  #--------------------------------------------------------------------------
  # Inserer un script
  #--------------------------------------------------------------------------
  def command_355
    # script に 1 行目を設定
    script = @list[@index].parameters[0] + "\n"
    # ループ
    loop do
      # 次のイベントコマンドがスクリプト 2 行目以降の場合
      if @list[@index+1].code == 655
        # script に 2 行目以降を追加
        script += @list[@index+1].parameters[0] + "\n"
      # イベントコマンドがスクリプト 2 行目以降ではない場合
      else
        # ループ中断
        break
      end
      # インデックスを進める
      @index += 1
    end
    $running_script = "MAP #{@map_id} EVENT #{@event_id}\nSCRIPT\n#{script}"
    (eval(script) or true)
  end
 
end


Merci d'avance pour vos réponses (si vous avez besoin de plus de données, n'hésitez pas à demander ^^).

NB : J'ai remplacé le nom de l'attaque SURF par RIVAGES.

Posté par Nuri Yuri le 8 Juin - 18:40 (2012)
L'erreur se trouve ici : $pokemon_party.got_skill(RIVAGES") and $game_player.terrain_tag != 6 and player_front_terrain_tag == 6
Ton string ne commence pas au bon endroit, puis il n'a pas de fin.
Le code correcte : $pokemon_party.got_skill("RIVAGES") and $game_player.terrain_tag != 6 and player_front_terrain_tag == 6

Posté par Ray' le 9 Juin - 11:13 (2012)
C'est quoi cette erreur débile... Résignation man
En tout cas merci beaucoup pour ton aide, je n'ai plus de problèmes à ce niveau pour l'instant.
Sur ce, bonne soirée Clin d'œil foireux.

EDIT : J'ai encore un problème (pas un bug, plutôt une incohérence avec l'event commun).
Lorsque le héros avance pour aller sur l'eau, il prend l'apparence pendant SURF du héros, mais il reprend son apparence normale instantanément (j'ai une hypothèse, mais je ne sais pas en quoi le tag terrain 6 interviendrait dans cet event, alors qu'il y est cité).
Merci d'avance pour vos réponses.

Posté par Nuri Yuri le 9 Juin - 11:28 (2012)
C'est probablement dans la base script qui se base sur le tag 7 pour surf ou l'auto changement de forme de PSP DS, faut que tu regardes.

Posté par Ray' le 9 Juin - 11:42 (2012)
Je pense que c'est peut être l'auto changement de forme, parce que c'est pas la première fois que j'ai un problème du genre, mais où trouver la racine du problème ?

Posté par Rose Noire le 10 Juin - 16:21 (2012)
Je dis peut-être une bêtise mais chez moi j’avais le même problème avec surf et cela venait en faite d’un autre événement comme les chaussures de course où en tout cas un événement qui lui faisait reprendre son apparence normal une fois utilisé (si la touche « z » est maintenue changer apparence sinon et là je remettrais mon apparence de basse du coup sur l’eau il se remettait mon apparence de basse comme là touche « z » n’était pas utiliser)
Je ne dis pas que tu as fais la même erreur que moi mais on sait jamais Imbécile heureux