查看: 2433|回复: 3

[已经解决] 战斗表情变化脚本错误,如图,求大手指点

[复制链接]
梦石
0
星屑
50
在线时间
59 小时
注册时间
2013-1-11
回帖
14
发表于 2013-4-20 11:26:33 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 ilovejel 于 2013-4-21 23:52 编辑

[pre lang="ruby" line="1"]# 戦闘表情変化
module BattleManager
  DEFAULT_FACE_INDEX  = 0  # 通常
  DAMAGE_FACE_INDEX   = 1  # 被ダメージ
  RECOVERY_FACE_INDEX = 2  # 回復
  VICTORY_FACE_INDEX  = 3  # 勝利
  PAINFUL_FACE_INDEX  = 4  # 瀕死or重バッドステータス
  SLEEP_FACE_INDEX    = 5  # 睡眠
  
  SLEEP_STATE_ID = 9       # 睡眠
  HEAVY_BAD_STATUS_ID = [  # 重バッドステータス
    2,   # 徐々に石化
    4,   # 凍結
    5,   # 呪い
    6,   # 毒
    7,   # 風邪
    11,  # 麻痺
    12,  # 盲目
    ]

  def self.neutral_face_index
    if is_sleep?
      return SLEEP_FACE_INDEX
    elsif is_painful?
      return PAINFUL_FACE_INDEX
    else
      return DEFAULT_FACE_INDEX
    end
  end

  def self.is_sleep?
    true if $face_index_changed_actor.state?(SLEEP_STATE_ID)
  end

  def self.is_painful?  # 瀕死or重バッドステータス
    return true if $face_index_changed_actor.hp <= $face_index_changed_actor.mhp*0.25 || is_heavy_bad_status?
  end

  def self.is_heavy_bad_status?
    HEAVY_BAD_STATUS_ID.each do |i|
      return true if $face_index_changed_actor.state?(i)
    end
    false
  end
end

# 戦闘開始
class Scene_Battle < Scene_Base
  alias miriel_start start
  def start
    $game_party.all_members.each do |i|
      $face_index_changed_actor = $game_actors[i.id]
      #$data_actors[i.id].face_index = BattleManager.neutral_face_index
      $game_actors[i.id].set_face_index(BattleManager.neutral_face_index)
      $game_actors[i.id].face_updated = true
    end
    miriel_start
  end
end

# 戦闘行動中
class Window_BattleLog < Window_Selectable
  alias miriel_display_action_results display_action_results
  def display_action_results(target, item)   
    if target.actor? && !target.result.missed && !target.result.evaded
      $face_index_changed_actor = $game_actors[target.id]
      #actor = $data_actors[target.id]  # 顔グラは $data_actors
      actor = $game_actors[target.id]  # 顔グラは $data_actors
      index = case
        when target.result.hp_damage > 0 || target.result.mp_damage > 0 || target.result.tp_damage > 0
          BattleManager::DAMAGE_FACE_INDEX
        when target.result.hp_damage < 0 || target.result.mp_damage < 0 || target.result.tp_damage < 0
          BattleManager::RECOVERY_FACE_INDEX
        end
      actor.set_face_index(index)
      actor.face_updated = true
      miriel_display_action_results(target, item)
      actor.set_face_index(BattleManager.neutral_face_index)
      actor.face_updated = true
    else
      miriel_display_action_results(target, item)
    end
  end
end

# 勝利
class << BattleManager
  alias miriel_process_victory process_victory
  def process_victory
    $game_party.all_members.each {|i|
      #$data_actors[i.id].face_index = BattleManager::VICTORY_FACE_INDEX }
      $game_actors[i.id].set_face_index(BattleManager::VICTORY_FACE_INDEX)
      $game_actors[i.id].face_updated = true
    }
    miriel_process_victory
  end
end

# 戦闘終了
class Game_Battler < Game_BattlerBase
  alias miriel_on_battle_end on_battle_end
  def on_battle_end
    miriel_on_battle_end
    $game_party.all_members.each {|i|
#      $data_actors[i.id].face_index = BattleManager::DEFAULT_FACE_INDEX
      $game_actors[i.id].set_face_index(BattleManager::DEFAULT_FACE_INDEX)
      $game_actors[i.id].face_updated = true
    }
  end
end
[/pre]

这是我从日站找到的脚本,觉得很好,但是我是脚本盲。。。{:2_254:},看了下原版做得游戏脚本,几乎全部改动了,连公共事件都写成脚本了OTL,下边随便给个原版的工程。。。

ht删掉tp://pan.baidu.com/删掉share/link?shareid=450752&uk=3675150025
未命名.jpg
梦石
0
星屑
50
在线时间
687 小时
注册时间
2012-10-29
回帖
1526
发表于 2013-4-20 18:40:06 | 显示全部楼层
在 Game_Actor 默认脚本中并没有 def set_face_index,应该是有被改过的,或者有另外的脚本而您没有用上。
修改劇本中,仔細審查原來的劇情大綱,覺得有點不太滿意,嘗試編寫不同主角不同主線的劇情,希望能寫得出來。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
59 小时
注册时间
2013-1-11
回帖
14
 楼主| 发表于 2013-4-20 20:43:49 | 显示全部楼层
{:2_256:}嗯,因为这人连原脚本都改得面目全非。。{:2_264:}我逐行找都找不到。。。= =
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部