查看: 3680|回复: 5

[已经解决] 关于CodeCrush的任务系统与SideView横版战斗系统结合的击杀数BUG

[复制链接]
梦石
0
星屑
7989
在线时间
1319 小时
注册时间
2006-7-18
回帖
459
发表于 2015-1-20 17:12:27 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 雷影 于 2015-1-21 14:18 编辑

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

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2015-1-20 17:49:22 来自手机 | 显示全部楼层
本帖最后由 taroxd 于 2015-1-20 17:52 编辑

官网有解释,自己看

因为官网结构的坑爹所以不太适合甩链接,总之你自己看吧。
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2015-1-20 18:08:23 | 显示全部楼层
本帖最后由 tseyik 于 2015-1-20 18:16 编辑

需要有這脚本
VXAce-RGSS3-6 撃破数カウンタ       
[pre lang="ruby" line="1"]#==============================================================================
# ■ VXAce-RGSS3-6 撃破数カウンタ [Ver.1.0.0]         by Claimh
#------------------------------------------------------------------------------
# 各アクターが倒したエネミーの数をカウントします。
#------------------------------------------------------------------------------
#・ウィンドウ上に表示させる
#Widow_Statusなどに追記してください。
#<記述>
# draw_defeat_count(actor_id, enemy_id, x, y)
#   actor_id   :対象アクターID(0を指定すると全アクター)
#   enemy_id   :対象エネミーID(0を指定すると全エネミー)
#   x      :横方向の表示位置
#   y      :縦方向の表示位置
#------------------------------------------------------------------------------
#・変数に入れる
#イベントのスクリプト上に記述してください。
#<記述>
# input_defeat_count(actor_id, enemy_id, variable_id)
#   actor_id   :対象アクターID(0を指定すると全アクター)
#   enemy_id   :対象エネミーID(0を指定すると全エネミー)
#   variable_id :撃破数を入れる変数
#==============================================================================

module DefeatCounter ## 他スクリプトとの併用のために残す
  #--------------------------------------------------------------------------
  # ● 指定アクターの撃破数
  #       actor_id      :対象アクターID(0を指定すると全アクター)
  #       enemy_id      :対象エネミーID(0を指定すると全エネミー)
  #--------------------------------------------------------------------------
  def self.defeat_count(actor_id=0, enemy_id=0)
    return $game_actors.defeat(enemy_id, actor_id)
  end
end

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_defeat_count initialize
  def initialize(actor_id)
    initialize_defeat_count(actor_id)
    @Defeat = {}
  end
  #--------------------------------------------------------------------------
  # ● 撃破数取得
  #--------------------------------------------------------------------------
  def defeat(enemy_id=0)
    return defeat_all if enemy_id == 0
    @defeat[enemy_id] = 0 unless @defeat.keys.include?(enemy_id)
    return @defeat[enemy_id]
  end
  #--------------------------------------------------------------------------
  # ● 撃破数取得
  #--------------------------------------------------------------------------
  def defeat_all
    @defeat.keys.inject(0) { |n, id| n += @defeat[id] }
  end
  #--------------------------------------------------------------------------
  # ● 撃破数カウント
  #--------------------------------------------------------------------------
  def defeat_cnt(enemy_id)
    return if enemy_id == 0
    @defeat[enemy_id] = 0 unless @defeat.keys.include?(enemy_id)
    @defeat[enemy_id] += 1
  end
end

class Game_Actors
  #--------------------------------------------------------------------------
  # ● 撃破数取得
  #--------------------------------------------------------------------------
  def defeat(enemy_id=0, actor_id=0)
    return defeat_all(enemy_id) if actor_id == 0
    return self.[](actor_id).defeat(enemy_id)
  end
  #--------------------------------------------------------------------------
  # ● 撃破数取得
  #--------------------------------------------------------------------------
  def defeat_all(enemy_id=0)
    @data.inject(0) { |n, actor| n += (actor.nil? ? 0 : actor.defeat(enemy_id)) }
  end
end

#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● ダメージの処理
  #    呼び出し前に @result.hp_damage @result.mp_damage @result.hp_drain
  #    @result.mp_drain が設定されていること。
  #--------------------------------------------------------------------------
  alias execute_damage_defeat execute_damage
  def execute_damage(user)
    execute_damage_defeat(user)
    return if actor? or !dead? or user.enemy?
    return if $game_troop.enable_dead_count?(self.index)
    $game_troop.defeat_dead_count(self.index)
    user.defeat_cnt(self.enemy_id)
  end
end


#==============================================================================
# ■ Game_Troop
#==============================================================================
class Game_Troop < Game_Unit
  #--------------------------------------------------------------------------
  # ● セットアップ
  #--------------------------------------------------------------------------
  alias setup_defeat setup
  def setup(troop_id)
    setup_defeat(troop_id)
    @enemy_defeat = []
  end
  #--------------------------------------------------------------------------
  # ● 撃破時のカウント
  #--------------------------------------------------------------------------
  def defeat_dead_count(index)
    @enemy_defeat[index] = true
  end
  #--------------------------------------------------------------------------
  # ● 既にカウント済み?
  #--------------------------------------------------------------------------
  def enable_dead_count?(index)
    @enemy_defeat[index] || false
  end
end


class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● 指定した変数にアクターの撃破数を格納する
  #       actor_id      :対象アクター(0を指定すると全アクター)
  #       enemy_id      :対象エネミー(0を指定すると全エネミー)
  #       variable_id   :撃破数を格納する変数
  #--------------------------------------------------------------------------
  def input_defeat_count(actor_id, enemy_id, variable_id)
    $game_variables[variable_id] = $game_actors.defeat(enemy_id, actor_id)
    return true
  end
end

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● 指定した変数にアクターの撃破数を表示する
  #       actor_id      :対象アクター(0を指定すると全アクター)
  #       enemy_id      :対象エネミー(0を指定すると全エネミー)
  #       x             :横方向の表示位置
  #       y             :縦方向の表示位置
  #--------------------------------------------------------------------------
  def draw_defeat_count(actor_id, enemy_id, x, y)
    draw_text(x, y, 200, line_height, $game_actors.defeat(enemy_id, actor_id), 2)
  end
end


[/pre]       
       
       
       
       
       
       
         

点评

没记错的话,禁止转载哦~  发表于 2015-1-21 12:51
已经有了的!现在问题就是用技能和魔法打死就有计数,普通攻击打死没计数!  发表于 2015-1-20 19:22
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2015-1-21 12:54:25 | 显示全部楼层
我并没有看出这段脚本有什么问题。

追踪一下 execute_damage 的执行可能会找到一些线索吧。(无环境,帮不上)

点评

反复测试发现脚本本身没问题了!就是和SideView横版战斗系统一起的话,普攻杀死怪不计数!可能是横版战斗重新写了普通的计算,加入普攻武器动作  发表于 2015-1-21 13:37

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 我很赞同

查看全部评分

回复

使用道具 举报

梦石
0
星屑
7989
在线时间
1319 小时
注册时间
2006-7-18
回帖
459
 楼主| 发表于 2015-1-21 13:12:06 | 显示全部楼层
本帖最后由 雷影 于 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= {}


补充:晕!新建工程测试没问题,可是与横版战斗系统结合就不行了!还是普通攻击没计数!

点评

@defeat = {} 小写注意  发表于 2015-1-21 15:11
回复

使用道具 举报

梦石
0
星屑
7989
在线时间
1319 小时
注册时间
2006-7-18
回帖
459
 楼主| 发表于 2015-1-21 14:43:32 | 显示全部楼层
本帖最后由 雷影 于 2015-1-21 14:47 编辑

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

点评

说明sv重定义了有关普通攻击计数的方法。  发表于 2015-1-21 14:44
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部