Project1

标题: 关于CodeCrush的任务系统与SideView横版战斗系统结合的击杀数BUG [打印本页]

作者: 雷影    时间: 2015-1-20 17:12
标题: 关于CodeCrush的任务系统与SideView横版战斗系统结合的击杀数BUG
本帖最后由 雷影 于 2015-1-21 14:18 编辑

使用这个脚本,设定了一个击杀怪物的任务,发现杀死怪物后不统计击杀数量!找了一下类似问题存在可没解决!这帖子说过……
https://rpg.blue/forum.php?mod=v ... E7%BB%9F&page=1
自己研究了一下发现用普通攻击杀死怪物就不会计入击杀数,用技能杀死才会有计数!开始以为是和SideView横版战斗系统冲突,研究了一下发现不是啊!!
特意去原站下了日版的工程测试,发现哪个脚本也是这样,而且 更甚的是用技能打死怪也不计入击破数!
怎么办啊!有什么办法解决么?
作者: taroxd    时间: 2015-1-20 17:49
本帖最后由 taroxd 于 2015-1-20 17:52 编辑

官网有解释,自己看

因为官网结构的坑爹所以不太适合甩链接,总之你自己看吧。
作者: tseyik    时间: 2015-1-20 18:08
本帖最后由 tseyik 于 2015-1-20 18:16 编辑

需要有這脚本
VXAce-RGSS3-6 撃破数カウンタ       
RUBY 代码复制
  1. #==============================================================================
  2. # ■ VXAce-RGSS3-6 撃破数カウンタ [Ver.1.0.0]         by Claimh
  3. #------------------------------------------------------------------------------
  4. # 各アクターが倒したエネミーの数をカウントします。
  5. #------------------------------------------------------------------------------
  6. #・ウィンドウ上に表示させる
  7. #Widow_Statusなどに追記してください。
  8. #<記述>
  9. # draw_defeat_count(actor_id, enemy_id, x, y)
  10. #   actor_id   :対象アクターID(0を指定すると全アクター)
  11. #   enemy_id   :対象エネミーID(0を指定すると全エネミー)
  12. #   x      :横方向の表示位置
  13. #   y      :縦方向の表示位置
  14. #------------------------------------------------------------------------------
  15. #・変数に入れる
  16. #イベントのスクリプト上に記述してください。
  17. #<記述>
  18. # input_defeat_count(actor_id, enemy_id, variable_id)
  19. #   actor_id   :対象アクターID(0を指定すると全アクター)
  20. #   enemy_id   :対象エネミーID(0を指定すると全エネミー)
  21. #   variable_id :撃破数を入れる変数
  22. #==============================================================================
  23.  
  24. module DefeatCounter ## 他スクリプトとの併用のために残す
  25.   #--------------------------------------------------------------------------
  26.   # ● 指定アクターの撃破数
  27.   #       actor_id      :対象アクターID(0を指定すると全アクター)
  28.   #       enemy_id      :対象エネミーID(0を指定すると全エネミー)
  29.   #--------------------------------------------------------------------------
  30.   def self.defeat_count(actor_id=0, enemy_id=0)
  31.     return $game_actors.defeat(enemy_id, actor_id)
  32.   end
  33. end
  34.  
  35. class Game_Actor < Game_Battler
  36.   #--------------------------------------------------------------------------
  37.   # ● オブジェクト初期化
  38.   #--------------------------------------------------------------------------
  39.   alias initialize_defeat_count initialize
  40.   def initialize(actor_id)
  41.     initialize_defeat_count(actor_id)
  42.     [url=home.php?mod=space&uid=376319]@Defeat[/url] = {}
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 撃破数取得
  46.   #--------------------------------------------------------------------------
  47.   def defeat(enemy_id=0)
  48.     return defeat_all if enemy_id == 0
  49.     @defeat[enemy_id] = 0 unless @defeat.keys.include?(enemy_id)
  50.     return @defeat[enemy_id]
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 撃破数取得
  54.   #--------------------------------------------------------------------------
  55.   def defeat_all
  56.     @defeat.keys.inject(0) { |n, id| n += @defeat[id] }
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 撃破数カウント
  60.   #--------------------------------------------------------------------------
  61.   def defeat_cnt(enemy_id)
  62.     return if enemy_id == 0
  63.     @defeat[enemy_id] = 0 unless @defeat.keys.include?(enemy_id)
  64.     @defeat[enemy_id] += 1
  65.   end
  66. end
  67.  
  68. class Game_Actors
  69.   #--------------------------------------------------------------------------
  70.   # ● 撃破数取得
  71.   #--------------------------------------------------------------------------
  72.   def defeat(enemy_id=0, actor_id=0)
  73.     return defeat_all(enemy_id) if actor_id == 0
  74.     return self.[](actor_id).defeat(enemy_id)
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 撃破数取得
  78.   #--------------------------------------------------------------------------
  79.   def defeat_all(enemy_id=0)
  80.     @data.inject(0) { |n, actor| n += (actor.nil? ? 0 : actor.defeat(enemy_id)) }
  81.   end
  82. end
  83.  
  84. #==============================================================================
  85. # ■ Game_Battler
  86. #==============================================================================
  87. class Game_Battler < Game_BattlerBase
  88.   #--------------------------------------------------------------------------
  89.   # ● ダメージの処理
  90.   #    呼び出し前に @result.hp_damage @result.mp_damage @result.hp_drain
  91.   #    @result.mp_drain が設定されていること。
  92.   #--------------------------------------------------------------------------
  93.   alias execute_damage_defeat execute_damage
  94.   def execute_damage(user)
  95.     execute_damage_defeat(user)
  96.     return if actor? or !dead? or user.enemy?
  97.     return if $game_troop.enable_dead_count?(self.index)
  98.     $game_troop.defeat_dead_count(self.index)
  99.     user.defeat_cnt(self.enemy_id)
  100.   end
  101. end
  102.  
  103.  
  104. #==============================================================================
  105. # ■ Game_Troop
  106. #==============================================================================
  107. class Game_Troop < Game_Unit
  108.   #--------------------------------------------------------------------------
  109.   # ● セットアップ
  110.   #--------------------------------------------------------------------------
  111.   alias setup_defeat setup
  112.   def setup(troop_id)
  113.     setup_defeat(troop_id)
  114.     @enemy_defeat = []
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 撃破時のカウント
  118.   #--------------------------------------------------------------------------
  119.   def defeat_dead_count(index)
  120.     @enemy_defeat[index] = true
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 既にカウント済み?
  124.   #--------------------------------------------------------------------------
  125.   def enable_dead_count?(index)
  126.     @enemy_defeat[index] || false
  127.   end
  128. end
  129.  
  130.  
  131. class Game_Interpreter
  132.   #--------------------------------------------------------------------------
  133.   # ● 指定した変数にアクターの撃破数を格納する
  134.   #       actor_id      :対象アクター(0を指定すると全アクター)
  135.   #       enemy_id      :対象エネミー(0を指定すると全エネミー)
  136.   #       variable_id   :撃破数を格納する変数
  137.   #--------------------------------------------------------------------------
  138.   def input_defeat_count(actor_id, enemy_id, variable_id)
  139.     $game_variables[variable_id] = $game_actors.defeat(enemy_id, actor_id)
  140.     return true
  141.   end
  142. end
  143.  
  144. class Window_Base < Window
  145.   #--------------------------------------------------------------------------
  146.   # ● 指定した変数にアクターの撃破数を表示する
  147.   #       actor_id      :対象アクター(0を指定すると全アクター)
  148.   #       enemy_id      :対象エネミー(0を指定すると全エネミー)
  149.   #       x             :横方向の表示位置
  150.   #       y             :縦方向の表示位置
  151.   #--------------------------------------------------------------------------
  152.   def draw_defeat_count(actor_id, enemy_id, x, y)
  153.     draw_text(x, y, 200, line_height, $game_actors.defeat(enemy_id, actor_id), 2)
  154.   end
  155. end
       
       
       
       
       
       
       
         
作者: taroxd    时间: 2015-1-21 12:54
我并没有看出这段脚本有什么问题。

追踪一下 execute_damage 的执行可能会找到一些线索吧。(无环境,帮不上)
作者: 雷影    时间: 2015-1-21 13:12
本帖最后由 雷影 于 2015-1-21 13:33 编辑

找到问题所在了,需要修改一下BattleManager里173行的:

$game_message.add(sprintf(Vocab::Emerge,  $data_troops[n].name))
改成
$game_message.add(sprintf(Vocab::Emerge, name))
就行了!!!

另外楼上击破数代码42行出错
  @Defeat = {}
改成
Defeat= {}


补充:晕!新建工程测试没问题,可是与横版战斗系统结合就不行了!还是普通攻击没计数!
作者: 雷影    时间: 2015-1-21 14:43
本帖最后由 雷影 于 2015-1-21 14:47 编辑

最终结论是:任务系统和横版战斗不能很好的结合!
设置击杀一定数量敌人的任务时,普通攻击杀死敌人不会计数,技能杀死可以计数!
恐怕是横版战斗重写了普通攻击的方式(普攻加入了挥动武器的动画)导致任务系统无法计数,而技能还是原版的所以可以计数!
所以最好就不要设置“击杀一定数量怪物”的任务了吧,想设置这类的话用迂回的方式吧,
比如使用变量,杀一只变量+1的方式
或者设定击杀怪物获得任务道具的方式!




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