Project1

标题: 如何在Scene_Battle2的腳本裡添加一個判斷 [打印本页]

作者: 柳橙汁    时间: 2009-10-11 15:03
标题: 如何在Scene_Battle2的腳本裡添加一個判斷
本帖最后由 柳橙汁 于 2009-10-11 17:01 编辑

我想請問
如何在Scene_Battle2裡添加如下判斷

如果獲得1個30號物品 則10號變量+1
如果獲得2個30號物品 則10號變量+2

請問語法要怎麼寫?要添加到哪個位置? ⊙_⊙
作者: 奶油Da蛋糕    时间: 2009-10-11 15:09
  1. class Scene_Battle
  2. alias update_phase5_cake update_phase5
  3. def update_phase5
  4. update_phase5_cake
  5. $game_variable[10] += 1 if item == RPG::Item and item.id == 30
  6. end
  7. end
复制代码

作者: 柳橙汁    时间: 2009-10-11 15:25
2# 奶油Da蛋糕


請問這一整段要插入在哪裡? ⊙_⊙
作者: IamI    时间: 2009-10-11 15:31
class Scene_Battle
alias update_phase5_cake update_phase5
def update_phase5
update_phase5_cake
$game_variable[10] += 1 if item == RPG::Item and item.id == 30
end
end
奶油Da蛋糕 发表于 2009-10-11 15:09

看到这个脚本的那一瞬间,我喷了,然后笑了……
作者: 柳橙汁    时间: 2009-10-11 15:34
4# IamI


那要怎麼寫才對? =  =
作者: 奶油Da蛋糕    时间: 2009-10-11 15:39
$game_variable后面少加了个s,应该是$game_variables
你插入MAIN前面就可以了。

另外,II笑的是我少的那个S么?
作者: 柳橙汁    时间: 2009-10-11 16:04
6# 奶油Da蛋糕


可是我測試時 發現戰鬥結束後
 
$game_variables[10] += 1 if item == RPG::Item and item.id == 30

這一行會出錯 ⊙_⊙
作者: 奶油Da蛋糕    时间: 2009-10-11 16:06
6# 奶油Da蛋糕


可是我測試時 發現戰鬥結束後
 
$game_variables[10] += 1 if item == RPG::Item and item.id == 30

這一行會出錯 ⊙_⊙
柳橙汁 发表于 2009-10-11 16:04

是吗 =.= 果然写错了呀。
报错什么呢?=.= 实在不行的话我也无能为力了。
作者: 柳橙汁    时间: 2009-10-11 16:15
8# 奶油Da蛋糕


還是大大有什麼方法可以直接在下面腳本裡添加判斷? ⊙_⊙

#--------------------------------------------------------------------------
  # ● 开始结束战斗回合
  #--------------------------------------------------------------------------
  def start_phase5
    # 转移到回合 5
    @phase = 5
    # 演奏战斗结束 ME
    $game_system.me_play($game_system.battle_end_me)
    # 还原为战斗开始前的 BGM
    $game_system.bgm_play($game_temp.map_bgm)
    # 初始化 EXP、金钱、宝物
    exp = 0
    gold = 0
    treasures = []
    # 循环
    for enemy in $game_troop.enemies
      # 敌人不是隐藏状态的情况下
      unless enemy.hidden
        # 获得 EXP、增加金钱
        exp += enemy.exp
        gold += enemy.gold
        # 出现宝物判定
        if rand(100) < enemy.treasure_prob
          if enemy.item_id > 0
            treasures.push($data_items[enemy.item_id])
          end
          if enemy.weapon_id > 0
            treasures.push($data_weapons[enemy.weapon_id])
          end
          if enemy.armor_id > 0
            treasures.push($data_armors[enemy.armor_id])
          end
        end
      end
    end
    # 限制宝物数为 6 个
    treasures = treasures[0..5]
    # 获得 EXP
    for i in 0...$game_party.actors.size
      actor = $game_party.actors
      if actor.cant_get_exp? == false
        last_level = actor.level
        actor.exp += exp
        if actor.level > last_level
          @status_window.level_up(i)
        end
      end
    end
    # 获得金钱
    $game_party.gain_gold(gold)
    # 获得宝物
    for item in treasures
      case item
      when RPG::Item
        $game_party.gain_item(item.id, 1)
      when RPG::Weapon
        $game_party.gain_weapon(item.id, 1)
      when RPG::Armor
        $game_party.gain_armor(item.id, 1)
      end
    end
    # 生成战斗结果窗口
    @result_window = Window_BattleResult.new(exp, gold, treasures)
    # 设置等待计数
    @phase5_wait_count = 100
  end
  #--------------------------------------------------------------------------
  # ● 画面更新 (结束战斗回合)
  #--------------------------------------------------------------------------
  def update_phase5
    # 等待计数大于 0 的情况下
    if @phase5_wait_count > 0
      # 减少等待计数
      @phase5_wait_count -= 1
      # 等待计数为 0 的情况下
      if @phase5_wait_count == 0
        # 显示结果窗口
        @result_window.visible = true
        # 清除主回合标志
        $game_temp.battle_main_phase = false
        # 刷新状态窗口
        @status_window.refresh
      end
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 战斗结束
      battle_end(0)
    end
  end
end
作者: 传说中di    时间: 2009-10-11 16:35
用事件就可以的为什么要用脚本呢。。
作者: 奶油Da蛋糕    时间: 2009-10-11 16:41
哦,方法名搞错了。是
  1. class Scene_Battle
  2. alias start_phase5_cake start_phase5
  3. def start_phase5
  4. start_phase5_cake
  5. $game_variables[10] += 1 if item == RPG::Item and item.id == 30
  6. end
  7. end
复制代码
你试试行了不,不行的话你自己在
  1. # 获得宝物
  2.     for item in treasures
  3.       case item
  4.       when RPG::Item
  5.         $game_party.gain_item(item.id, 1)
  6.       when RPG::Weapon
  7.         $game_party.gain_weapon(item.id, 1)
  8.       when RPG::Armor
  9.         $game_party.gain_armor(item.id, 1)
  10.       end
  11.     end
复制代码
里面加上$game_variables[10] += 1 if item.id == 30
变成
  1. # 获得宝物
  2.     for item in treasures
  3.       case item
  4.       when RPG::Item
  5.         $game_party.gain_item(item.id, 1)
  6. $game_variables[10] += 1 if item.id == 30

  7.       when RPG::Weapon
  8.         $game_party.gain_weapon(item.id, 1)
  9.       when RPG::Armor
  10.         $game_party.gain_armor(item.id, 1)
  11.       end
  12.     end
复制代码

作者: 柳橙汁    时间: 2009-10-11 16:45
10# 传说中di


因為我想讓它如果在戰鬥後獲得1個30號物品 10號變量就+1
              2個30號物品 10號變量就+2

事件我不知道怎麼做 希望能有腳本的方法
作者: IamI    时间: 2009-10-11 16:56
本帖最后由 IamI 于 2009-10-11 17:00 编辑

神啊,可以不要让我笑这么多次吗。
好吧终于有一个是对的了……
作者: 柳橙汁    时间: 2009-10-11 17:00
11# 奶油Da蛋糕


可以了~! 謝謝奶油大大專業的解說!! 很清楚~! 
作者: 柳橙汁    时间: 2009-10-11 17:03
13# IamI


人家是用奶油大大給的第二個方法~ 加一句判斷就可以了~ =///=
作者: IamI    时间: 2009-10-11 17:11
好吧这是追加教育
class Scene_Battle
alias start_phase5_cake start_phase5
def start_phase5
start_phase5_cake
$game_variables[10] += 1 if item == RPG::Item and item.id == 30
end
end

首先,在这个方法里面,从来就没有什么叫item的局部变量或者全局变量……
其次,==是值相等判定。要判定对象与类的从属关系,用is_a?或者“===”
作者: 奶油Da蛋糕    时间: 2009-10-11 17:18
好吧这是追加教育

首先,在这个方法里面,从来就没有什么叫item的局部变量或者全局变量……
其次,==是值相等判定。要判定对象与类的从属关系,用is_a?或者“===” ...
IamI 发表于 2009-10-11 17:11


哦,也就是说,这个是不能用插件的啦。
作者: 传说中di    时间: 2009-10-11 18:41
这样也可以
   if item.id == 30     
$game_variables[10] += 1
end




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1