Project1

标题: 怎么限定技能每场战斗中的使用次数? [打印本页]

作者: bonnyhorse    时间: 2011-1-7 21:24
标题: 怎么限定技能每场战斗中的使用次数?
就是比如说一个技能在第一次战斗中使用了一次以后就不能使用了,但是到了下一次战斗又可以使用,但还是只能在那次战斗中使用一次,也就是在每次战斗中只能使用一次,这要怎么样才可以做到阿?
作者: stevenrock    时间: 2011-1-7 21:59
在右上角搜索状态冷却的脚本,然后就可以做出你所需要的效果了。
作者: bonnyhorse    时间: 2011-1-7 22:32
本帖最后由 bonnyhorse 于 2011-1-7 22:33 编辑

回复 stevenrock 的帖子

搜索不到状态冷却的脚本
作者: terry_zhp    时间: 2011-1-8 10:01
使用特技后加一个状态A,同时在特技里增加公共事件判断,有状态A时就不能使用该特技,然后在状态A里设定战斗结束时解除
应该可以吧
作者: bonnyhorse    时间: 2011-1-8 18:58
回复 terry_zhp 的帖子
使用特技后加一个状态A,同时在特技里增加公共事件判断,有状态A时就不能使用该特技,
有状态A时就不能使用该特技,那个不能使用该特技要怎么设置呢?
作者: 黄亦天    时间: 2011-1-8 19:09
本帖最后由 黄亦天 于 2011-1-8 19:09 编辑

回复 bonnyhorse 的帖子

我倒是倾向于另一种方法,先设置一个同名,但是不能使用的技能,
原先的技能运行公共事件,某开关打开,某变量+1,条件分歧当此变量为XX时,习得那个不能使用的技能,忘记目前已有的那个技能。之后再设定一个公共事件,处理方式是并行处理,开关是刚才那个开关,内容是把那个变量带入0,忘记不能使用的那个技能,习得可以使用的那个技能,之后关闭这个开关。
这样就OK了~~
作者: 失去的记忆    时间: 2011-1-8 20:48
本帖最后由 失去的记忆 于 2011-1-8 20:52 编辑

你们说的太复杂了....新人听不懂得啦...还是我来吧!
1.脚本Scene_Battle 4 (437行)
#--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 6 : 刷新)
  #--------------------------------------------------------------------------
  def update_phase4_step6
    @skill = $data_skills[@active_battler.current_action.skill_id]
    if @skill.id==57
      $一次性技能=true
    end

    # 清除强制行动对像的战斗者
    $game_temp.forcing_battler = nil
    # 公共事件 ID 有效的情况下
2.脚本Scene_Battle 1 (131行)
#--------------------------------------------------------------------------
  # ● 战斗结束
  #     result : 結果 (0:胜利 1:失败 2:逃跑)
  #--------------------------------------------------------------------------
  def battle_end(result)
    # 清除战斗中标志
    $game_temp.in_battle = false
    # 清除全体同伴的行动
    $game_party.clear_actions
    # 解除战斗用状态
    for actor in $game_party.actors
      actor.remove_states_battle
    end
    # 清除敌人
    $game_troop.enemies.clear
    # 调用战斗返回调用
    if $game_temp.battle_proc != nil
      $game_temp.battle_proc.call(result)
      $game_temp.battle_proc = nil
    end
    # 切换到地图画面
    $一次性技能=false
    $scene = Scene_Map.new
  end
3.脚本Game_Battler 3 (22行)
# 沉默状态的情况下、物理特技以外的特技不能使用
    if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
      return false
    end
    if $data_skills[skill_id].id==57 and $一次性技能
      return false
    end

    # 获取可以使用的时机

OK!搞定 不懂得问我...这个太简单了 不要把它想复杂了啊:loveliness:
PS:那个57就是技能ID 自己改.. 自己找相应的地方添加红色的代码即可
作者: bonnyhorse    时间: 2011-1-8 21:32
本帖最后由 bonnyhorse 于 2011-1-8 21:36 编辑

回复 失去的记忆 的帖子

恩,明白了,很感谢,但是我这样的技能有好几个,要怎么搞?
另外,这个原理你可不可以告诉我呀
作者: 失去的记忆    时间: 2011-1-10 14:18
bonnyhorse 发表于 2011-1-8 21:32
回复 失去的记忆 的帖子

恩,明白了,很感谢,但是我这样的技能有好几个,要怎么搞?

有好几个?? 这好办!
你把那个57变成一个数组,然后想添加多少就添加多少!
PS:一个帖子只能发一个问题,要想继续问请继续发帖!
作者: clap_pl    时间: 2011-1-10 15:37
本帖最后由 clap_pl 于 2011-1-10 15:49 编辑

有个简单一点的方法
你找到 def skill_can_use?(skill_id) 这个方法
比如你的1号技能(技能数据库中的第一个)
使用次数用变量1(变量列表中的第一个)来控制,
当使用次数大于5时,就不能使用了。

在 def skill_can_use?(skill_id) 加入以下语句
#================================
if skill_id == 1
return false if $game_variables[1]>=5
end
#================================
同理 如果是第二号技能 次数是6次 用第二个变量控制 就再加上一句
#=======================================
if skill_id == 2
return false if $game_variables[2]>=6
end
#=========================================
以此类推
当然 你需要在这种技能的设定时 附带一个公共事件 让相应的变量+1
如第一个技能 使用后 要附带一个公共事件 让变量1 增加1


#=========================================

最后 你需要在战斗前 将所有这种变量清零
你可以用事件做 比如每场战斗前都让这些变量清零
不过对于随机地雷战 就麻烦了
#=======================================

最简单有效而且一劳永逸的办法 就是在
Scene_Battle
里加上一句
找到如下内容
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
在后面加上一句
$game_variables[1] = 0 #清0第一个变量
$game_variables[2] = 0 #清0第二个变量

#============================
如果你的变量是连续的一系列变量 比如3到99 都是用来控制使用次数的,那就简单了
你写上
for i in 3..99 #注意 是2个点
$game_variable=0
end
#=============================
以此类推





作者: 后知后觉    时间: 2011-1-10 19:39
  1. module Hzhj
  2.   module_function
  3.   @@hzhj_one = {57=>4,58=>3,59=>2,60=>1}
  4.   @@hzhj_all = {58=>4,59=>3}
  5.   @@hzhj_all_count = {}
  6.   def one
  7.     return @@hzhj_one
  8.   end
  9.   def all
  10.     return @@hzhj_all
  11.   end
  12.   def count
  13.     return @@hzhj_all_count
  14.   end
  15. end
  16. class Game_Actor < Game_Battler
  17.   attr_reader :hzhj_skill_count
  18.   alias hzhj_old_hzhj_skill_count_initialize initialize
  19.   def initialize(*args)
  20.     @hzhj_skill_count = {}
  21.     hzhj_old_hzhj_skill_count_initialize(*args)
  22.   end
  23.   alias hzhj_old_hzhj_skill_count_skill_can_use? skill_can_use?
  24.   def skill_can_use?(skill_id)
  25.     if Hzhj.all[skill_id] != nil
  26.       if Hzhj.count[skill_id] != nil
  27.         if Hzhj.count[skill_id] >= Hzhj.all[skill_id]
  28.           return false
  29.         end
  30.       end
  31.     end
  32.     if Hzhj.one[skill_id] != nil
  33.       if @hzhj_skill_count[skill_id] != nil
  34.         if @hzhj_skill_count[skill_id] >= Hzhj.one[skill_id]
  35.           return false
  36.         end
  37.       end
  38.     end
  39.     return hzhj_old_hzhj_skill_count_skill_can_use?(skill_id)
  40.   end
  41. end
  42. class Game_Battler
  43.   alias hzhj_old_hzhj_skill_count_skill_effect skill_effect
  44.   def skill_effect(*args)
  45.     if $game_temp.in_battle
  46.       user = args[0]
  47.       if user.is_a?(Game_Actor)
  48.         skill = args[1]
  49.         if Hzhj.all[skill.id] != nil
  50.           if Hzhj.count[skill.id].nil?
  51.             Hzhj.count[skill.id] = 1
  52.           else
  53.             Hzhj.count[skill.id] += 1
  54.           end
  55.         end
  56.         if Hzhj.one[skill.id] != nil
  57.           if user.hzhj_skill_count[skill.id].nil?
  58.             user.hzhj_skill_count[skill.id] = 1
  59.           else
  60.             user.hzhj_skill_count[skill.id] += 1
  61.           end
  62.         end
  63.       end
  64.     end
  65.     return hzhj_old_hzhj_skill_count_skill_effect(*args)
  66.   end
  67. end
  68. class Scene_Battle
  69.   alias hzhj_old_hzhj_skill_count_main main
  70.   def main
  71.     Hzhj.count.clear
  72.     for actor in $game_party.actors
  73.       actor.hzhj_skill_count.clear
  74.     end
  75.     hzhj_old_hzhj_skill_count_main
  76.   end
  77. end
复制代码
开头的这一行
  @@hzhj_one = {57=>4,58=>3,59=>2,60=>1}
里面的57 58 59 60 是技能ID
里面的 4 3 2 1 是该技能在每场战斗中每个角色可以使用的次数.是针对某个角色.
再看下面的这一行.
  @@hzhj_all = {58=>4,59=>3}
里面的58 59 是技能的ID
里面的 4 3 是该技能在每场战斗中所有角色加起来可以使用的次数.
自己照着格式改照着格式添吧.
这段脚本只对角色有效.默认战斗系统测试了下没发现问题.别的就不知道了.




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