Project1

标题: 深夜请教,在某角色结束某状态后执行某脚本 [打印本页]

作者: 工藤~新一じ    时间: 2016-4-15 18:53
标题: 深夜请教,在某角色结束某状态后执行某脚本
本帖最后由 RyanBern 于 2016-4-16 21:34 编辑

原帖如下

在Game_Battler 2脚本的
RUBY 代码复制
  1. elsif rand(100) < $data_states[i].auto_release_prob

  后面插入
       if self.state?(4)
         A
       end
可以做到当4号状态结束后,结束状态的那位角色执行A内容。
但我想加一个条件,当1号角色结束4号状态后,额外执行另一个内容。
在这里又要做一次伸手党!感谢!


但我找到了一个bug,
在这段脚本里
       if self.state?(4)
         A
       end
当任意一个状态结束后,角色有4号状态,则执行A脚本。包括4号状态本身结束,也会执行A脚本。

我想改的效果是只有4号状态本身结束,才执行A脚本。

好疯狂啊,发现这个bug后无限在寻找解决的办法,现在已经凌晨3点了,不能再找了,要睡了,4个小时后腰起床上班。
希望睡醒后可以看到希望。。。
作者: huajinyu123    时间: 2016-4-15 20:35
if self.id==1 and self.state?(4)
B
end
???????
作者: 工藤~新一じ    时间: 2016-4-16 03:19
huajinyu123 发表于 2016-4-15 20:35
if self.id==1 and self.state?(4)
B
end

我的脚本有错误。
我为此弄了一晚上
感觉明天要恶补咖啡啊
作者: 工藤~新一じ    时间: 2016-4-16 03:34
其实我有一个想法
触发A脚本的条件就是任意状态结束后,当前角色有4号状态,则触发
那4号状态本身结束也会触发,证明在触发脚本的时候,当前角色还未取消4号状态。
如此的话,是否可以加以下判断:
当前角色4号状态剩余回合数为X(我觉得X可能是1)
这样的话,我想要的效果就出来了
可惜我是脚本盲啊
作者: 乐之魂    时间: 2016-4-16 06:27
工藤~新一じ 发表于 2016-4-16 03:34
其实我有一个想法
触发A脚本的条件就是任意状态结束后,当前角色有4号状态,则触发
那4号状态本身结束也会 ...

用条件分歧?
点到最右边第4个选项最下面那个是运行脚本,
然后运行
否则运行别的

作者: 乐之魂    时间: 2016-4-16 06:27
本帖最后由 乐之魂 于 2016-4-16 07:57 编辑

额,我好像也没看懂,我还以为只是在队伍里导入脚本

作者: 夜狠简单    时间: 2016-4-16 10:05
  1. #--------------------------------------------------------------------------
  2.   # ● 解除状态
  3.   #     state_id : 状态 ID
  4.   #     force    : 强制解除标志 (处理自动状态时使用)
  5.   #--------------------------------------------------------------------------
  6.   def remove_state(state_id, force = false)
  7.     # 无法附加本状态的情况下
  8.     if state?(state_id)
  9.       # 被强制附加的状态、并不是强制解除的情况下
  10.       if @states_turn[state_id] == -1 and not force
  11.         # 过程结束
  12.         return
  13.       end
  14.       # 现在的 HP 为 0 当作选项 [当作 HP 0 的状态]有效的场合
  15.       if @hp == 0 and $data_states[state_id].zero_hp
  16.         # 判断是否有另外的 [当作 HP 0 的状态]状态
  17.         zero_hp = false
  18.         for i in @states
  19.           if i != state_id and $data_states[i].zero_hp
  20.             zero_hp = true
  21.           end
  22.         end
  23.         # 如果可以解除战斗不能、将 HP 更改为 1
  24.         if zero_hp == false
  25.           @hp = 1
  26.         end
  27.       end
  28.       # 将状态 ID 从 @states 队列和 @states_turn hash 中删除
  29.       @states.delete(state_id)
  30.       @states_turn.delete(state_id)
  31.     end
  32.     # 检查 HP 及 SP 的最大值
  33.     @hp = [@hp, self.maxhp].min
  34.     @sp = [@sp, self.maxsp].min
  35.       if state_id==7 #如果状态7解除
  36.       case self.id #角色ID
  37.          when 1 #1号角色
  38.            tsjc
  39.         when 2..6#2~6号角色
  40.           jc1
  41.          else#其他角色
  42.            jc
  43.          end
  44.        end
  45.      end
  46. #状态接触后执行的函数     
  47.   def jc
  48.     @hp = [@hp, self.maxhp].max+999#解除后取最大值并增加999HP*85/100
  49.   end
  50.   
  51.    def jc1
  52.     @hp = [@hp, self.maxhp].min/2#一半
  53.   end
  54.   
  55.   def tsjc
  56.     @hp = 1#解除后HP=1[@hp, self.maxhp].min*7/10
  57.   end
复制代码

作者: 工藤~新一じ    时间: 2016-4-16 18:58
夜狠简单 发表于 2016-4-16 10:05

又发现问题了问题有两个
这段脚本在效果上是这样的,当7号状态“取消”的时候,执行A脚本。
如果玩家勾选战斗结束后取消状态,也会执行A脚本,如果设置了其他状态取消7号状态,也会执行A脚本。
而我想要的效果是状态结束后
还有一个问题,我发现用了这段脚本,敌人死亡后还会停留,必须在死亡状态再攻击一次,才算死亡。





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