设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3018|回复: 10
打印 上一主题 下一主题

[已经解决] 怎么限定技能每场战斗中的使用次数?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
42 小时
注册时间
2009-7-7
帖子
11
跳转到指定楼层
1
发表于 2011-1-7 21:24:22 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
就是比如说一个技能在第一次战斗中使用了一次以后就不能使用了,但是到了下一次战斗又可以使用,但还是只能在那次战斗中使用一次,也就是在每次战斗中只能使用一次,这要怎么样才可以做到阿?

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

11
发表于 2011-1-10 19:39:11 | 只看该作者
  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 是该技能在每场战斗中所有角色加起来可以使用的次数.
自己照着格式改照着格式添吧.
这段脚本只对角色有效.默认战斗系统测试了下没发现问题.别的就不知道了.

评分

参与人数 1星屑 +400 收起 理由
fux2 + 400 追加脚本费

查看全部评分












你知道得太多了

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
574
在线时间
169 小时
注册时间
2008-10-29
帖子
431
10
发表于 2011-1-10 15:37:28 | 只看该作者
本帖最后由 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
#=============================
以此类推




回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
9
发表于 2011-1-10 14:18:29 | 只看该作者
bonnyhorse 发表于 2011-1-8 21:32
回复 失去的记忆 的帖子

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

有好几个?? 这好办!
你把那个57变成一个数组,然后想添加多少就添加多少!
PS:一个帖子只能发一个问题,要想继续问请继续发帖!
做一个游戏也用这么长时间........
PS:说我自己呢
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
42 小时
注册时间
2009-7-7
帖子
11
8
 楼主| 发表于 2011-1-8 21:32:45 | 只看该作者
本帖最后由 bonnyhorse 于 2011-1-8 21:36 编辑

回复 失去的记忆 的帖子

恩,明白了,很感谢,但是我这样的技能有好几个,要怎么搞?
另外,这个原理你可不可以告诉我呀
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
7
发表于 2011-1-8 20:48:39 | 只看该作者
本帖最后由 失去的记忆 于 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 自己改.. 自己找相应的地方添加红色的代码即可

点评

而且不用全局变量吧?  发表于 2011-1-8 21:22
而且不用变量吧?  发表于 2011-1-8 21:21
的确,这样可以,但是如果LZ要使用多次或有多个技能呢?  发表于 2011-1-8 21:21

评分

参与人数 1星屑 +332 收起 理由
fux2 + 332 认可答案

查看全部评分

做一个游戏也用这么长时间........
PS:说我自己呢
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4397
在线时间
1910 小时
注册时间
2010-12-21
帖子
2365
6
发表于 2011-1-8 19:09:29 | 只看该作者
本帖最后由 黄亦天 于 2011-1-8 19:09 编辑

回复 bonnyhorse 的帖子

我倒是倾向于另一种方法,先设置一个同名,但是不能使用的技能,
原先的技能运行公共事件,某开关打开,某变量+1,条件分歧当此变量为XX时,习得那个不能使用的技能,忘记目前已有的那个技能。之后再设定一个公共事件,处理方式是并行处理,开关是刚才那个开关,内容是把那个变量带入0,忘记不能使用的那个技能,习得可以使用的那个技能,之后关闭这个开关。
这样就OK了~~
绿坝娘素材库企划

素材库获取方法:暂时中止,需求者私聊。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
42 小时
注册时间
2009-7-7
帖子
11
5
 楼主| 发表于 2011-1-8 18:58:13 | 只看该作者
回复 terry_zhp 的帖子
使用特技后加一个状态A,同时在特技里增加公共事件判断,有状态A时就不能使用该特技,
有状态A时就不能使用该特技,那个不能使用该特技要怎么设置呢?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
189 小时
注册时间
2009-12-15
帖子
343
4
发表于 2011-1-8 10:01:55 | 只看该作者
使用特技后加一个状态A,同时在特技里增加公共事件判断,有状态A时就不能使用该特技,然后在状态A里设定战斗结束时解除
应该可以吧
第二部游戏 《求职大作战》http://rpg.blue/thread-165630-1-1.html
第一部游戏 《天宇传奇》http://rpg.blue/thread-140339-1-1.html
柳柳新人/进阶教程,视频全集 http://rpg.blue/thread-164472-1-1.html
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
42 小时
注册时间
2009-7-7
帖子
11
3
 楼主| 发表于 2011-1-7 22:32:38 | 只看该作者
本帖最后由 bonnyhorse 于 2011-1-7 22:33 编辑

回复 stevenrock 的帖子

搜索不到状态冷却的脚本
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-15 22:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表