Project1

标题: “战斗不能”状态问题 [打印本页]

作者: lxzuz    时间: 2012-6-23 15:29
标题: “战斗不能”状态问题
如何设置一个角色免疫“战斗不能”的状态?dsu_plus_rewardpost_czw
作者: 54酱    时间: 2012-6-23 16:39
在职业里设置状态免疫不行么...
角色的话比较麻烦...
作者: 符文    时间: 2012-6-23 16:55
职业里很好设置啊。

截图1340441689.jpg (54.06 KB, 下载次数: 7)

就这样

就这样

作者: lxzuz    时间: 2012-6-23 17:06
符文 发表于 2012-6-23 16:55
职业里很好设置啊。

不行,我试过了,就算改成f和a都不行
作者: kangxi0109    时间: 2012-6-23 18:19
本帖最后由 kangxi0109 于 2012-6-24 16:47 编辑
lxzuz 发表于 2012-6-23 17:06
不行,我试过了,就算改成f和a都不行


我想知道楼主的具体想法,是纯粹免疫“战斗不能”这个状态,还是将那个角色弄成不死之身。
另外,因为是脚本设定的原因,所以一旦hp变成0就会强制附加“战斗不能”状态。

更新内容:
纯粹让某角色免疫掉“战斗不能”状态的话是可以办到的,但是如果楼主没有其他的设定为“当HP为0”的状态的话,那就会造成角色死亡后(HP为0)仍可进行普通攻击的情况。
在Game_Battler 1里面修改如下部分,以2号角色为例,死亡时免疫1号的“战斗不能”状态,但不会把其他的设定为“当HP为0”的状态免疫:
  1.   #--------------------------------------------------------------------------
  2.   # ● 更改 HP
  3.   #     hp : 新的 HP
  4.   #--------------------------------------------------------------------------
  5.   def hp=(hp)
  6.     @hp = [[hp, maxhp].min, 0].max
  7.     # 解除附加的战斗不能状态
  8.     for i in 1...$data_states.size
  9.       if $data_states[i].zero_hp #若状态设定为“当HP为0”
  10.         if self.dead?
  11. #-------------------------------------------------------修改↓
  12.           if self.is_a?(Game_Actor) && self.id == 2 && i == 1 #目标为角色、ID为2号、状态为1号时
  13.             else
  14.           add_state(i)
  15.           end
  16. #-------------------------------------------------------
  17.         else
  18.           remove_state(i)
  19.         end
  20.       end
  21.     end
  22.   end
复制代码

作者: qq654169707    时间: 2012-6-24 17:56
出现这种状态之后不能使用回血技能和药物怎么回事啊,这不是相当于死亡一样吗!
作者: 萝莉    时间: 2012-6-25 08:55
把五楼的脚本分歧往上挪点,让hp不小于1就可以。
作者: 1584927450    时间: 2012-6-25 14:17
濒死状态,却还可以战斗对波,5楼的脚本就行喽,不行的话就通过数据库设定,把当做死亡去掉,接着弄一个新的,不要删除老的!接着换个界面打钩,大致这样吧。
作者: kangxi0109    时间: 2012-6-25 22:41
lxzuz 发表于 2012-6-23 17:06
不行,我试过了,就算改成f和a都不行

脚本就是这样改的没错,主要是楼主另外一个“战斗不能”是如何设定的呢?另一个战斗设定应该是不能改为“不行动”的,另外第一个战斗不能对这个状态则要设置为“解除”,就是附加了第一个就不能附加第二个...能否截个图?
作者: lxzuz    时间: 2012-6-26 08:46
kangxi0109 发表于 2012-6-25 22:41
脚本就是这样改的没错,主要是楼主另外一个“战斗不能”是如何设定的呢?另一个战斗设定应该是不能改为“ ...


是不是这样设置?
作者: kangxi0109    时间: 2012-6-26 23:02
本帖最后由 kangxi0109 于 2012-6-27 22:44 编辑
lxzuz 发表于 2012-6-26 08:46
是不是这样设置?


这么说吧,游戏的脚本里面是这么判断的,当HP变为0的时候,游戏就会将其判定为“dead”这个状态(不是单纯的指“战斗不能”),当全员都被判定为“dead”的时候,战斗就结束了。前面我给的脚本有一句:
  1. if self.dead?
复制代码
也就是说,虽然中招“半死”的人还能进行普通攻击,但事实上在游戏内部已经被打上“dead”标记了,所以只要其他人挂了,那游戏同样也会结束了...如果到了这种情况还想继续,那还不如弄个残血(类似DOTA的薄葬,在一定时间内保留1点之类的)的状态给他。
===========================================================
跟新内容:
前面的脚本就不需要了。
关于“残血”状态,需要用“双状态”法来做,这里我将它做成被动技能(反正自己也是这样用的)。
1.数据库设定:
  技能100:“残血”技能,设置为不能使用;
  状态1:“残血”状态,持续时间为X(自设);
  状态2:“残血冷却”状态,持续时间X+M(M为实际的冷却时间)。
2.脚本修改部分:
全部在Game_Battler 3,需要修改普通攻击和技能攻击两个部分。
  普通攻击部分如下,技能部分也在对应位置(“# HP 的伤害减法运算”之前)添加同样的脚本:

  1.     # 命中的情况下
  2.     if hit_result == true
  3.       # 状态冲击解除
  4.       remove_states_shock
  5. #--------------------------------修改部分↓
  6. if self.is_a?(Game_Actor) && skills.include?(100)#当目标为角色且该角色学会了100号技能的场合
  7. if self.damage >= self.hp #出现致死伤害时
  8.   if self.states.include?(2)#冷却中
  9.   else
  10.       self.damage = self.hp-1#设置伤害为目标当前体能量-1的值,即保留1点体能
  11.    self.add_state(1) #附加残血状态
  12.    self.add_state(2) #附加残血冷却状态
  13.   end
  14.   end
  15. end
  16. #-------------------------------------------
  17.       # HP 的伤害计算
  18.       self.hp -= self.damage
复制代码

作者: 晚安世界    时间: 2012-6-28 14:07
LZ可以用将战斗事件设计成这样来达成这种效果。




红色框框起来的部分可以自己定义。



话说,终于研究出来用事件达成这种效果了!

不知道合不合楼主的心意。




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