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

Project1

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

[已经解决] 求 一种技能设计思路,根据状态附加属性

[复制链接]

Lv1.梦旅人

梦石
0
星屑
125
在线时间
272 小时
注册时间
2012-11-11
帖子
221
跳转到指定楼层
1
发表于 2015-7-25 07:03:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
RT,我想设计一种技能A,当技能B发动的时候同时角色自身附加状态A,然后当角色以状态A的情况下发动技能A,那么技能A将自动附加属性A,当状态A解除后,该技能附加的属性A也一同消失,请问该如何实现呢

评分

参与人数 1星屑 +35 收起 理由
RyanBern + 35 手动认可奖励

查看全部评分

Lv5.捕梦者

梦石
0
星屑
33079
在线时间
5104 小时
注册时间
2012-11-19
帖子
4878

开拓者

2
发表于 2015-7-25 10:16:30 | 只看该作者
本帖最后由 芯☆淡茹水 于 2015-7-28 20:59 编辑

在战斗之外使用无效。
  1. class Game_Battler
  2. SKILL_A_ID = [58,59] #能状态附加属性的技能ID.
  3. STATE_A_ID = 17      #状态A ID.
  4. ELEMENT_ID = 9       #属性A ID.
  5.   def skill_element_set(skill)
  6.     add = ($scene.is_a?(Scene_Battle) and self.current_action.kind == 1 and
  7.     state?(STATE_A_ID) and SKILL_A_ID.include?(self.current_action.skill_id)) ? [ELEMENT_ID] : []
  8.     return skill.element_set | add
  9.   end
  10.    #--------------------------------------------------------------------------
  11.   def skill_effect(user, skill)
  12.     # 清除会心一击标志
  13.     self.critical = false
  14.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  15.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  16.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  17.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  18.       # 过程结束
  19.       return false
  20.     end
  21.     # 清除有效标志
  22.     effective = false
  23.     # 公共事件 ID 是有效的情况下,设置为有效标志
  24.     effective |= skill.common_event_id > 0
  25.     # 第一命中判定
  26.     hit = skill.hit
  27.     if skill.atk_f > 0
  28.       hit *= user.hit / 100
  29.     end
  30.     hit_result = (rand(100) < hit)
  31.     # 不确定的特技的情况下设置为有效标志
  32.     effective |= hit < 100
  33.     # 命中的情况下
  34.     if hit_result == true
  35.       # 计算威力
  36.       power = skill.power + user.atk * skill.atk_f / 100
  37.       if power > 0
  38.         power -= self.pdef * skill.pdef_f / 200
  39.         power -= self.mdef * skill.mdef_f / 200
  40.         power = [power, 0].max
  41.       end
  42.       # 计算倍率
  43.       rate = 20
  44.       rate += (user.str * skill.str_f / 100)
  45.       rate += (user.dex * skill.dex_f / 100)
  46.       rate += (user.agi * skill.agi_f / 100)
  47.       rate += (user.int * skill.int_f / 100)
  48.       # 计算基本伤害
  49.       self.damage = power * rate / 20
  50.       # 属性修正
  51.       self.damage *= elements_correct(user.skill_element_set(skill))
  52.       self.damage /= 100
  53.       # 伤害符号正确的情况下
  54.       if self.damage > 0
  55.         # 防御修正
  56.         if self.guarding?
  57.           self.damage /= 2
  58.         end
  59.       end
  60.       # 分散
  61.       if skill.variance > 0 and self.damage.abs > 0
  62.         amp = [self.damage.abs * skill.variance / 100, 1].max
  63.         self.damage += rand(amp+1) + rand(amp+1) - amp
  64.       end
  65.       # 第二命中判定
  66.       eva = 8 * self.agi / user.dex + self.eva
  67.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  68.       hit = self.cant_evade? ? 100 : hit
  69.       hit_result = (rand(100) < hit)
  70.       # 不确定的特技的情况下设置为有效标志
  71.       effective |= hit < 100
  72.     end
  73.     # 命中的情况下
  74.     if hit_result == true
  75.       # 威力 0 以外的物理攻击的情况下
  76.       if skill.power != 0 and skill.atk_f > 0
  77.         # 状态冲击解除
  78.         remove_states_shock
  79.         # 设置有效标志
  80.         effective = true
  81.       end
  82.       # HP 的伤害减法运算
  83.       last_hp = self.hp
  84.       self.hp -= self.damage
  85.       effective |= self.hp != last_hp
  86.       # 状态变化
  87.       @state_changed = false
  88.       effective |= states_plus(skill.plus_state_set)
  89.       effective |= states_minus(skill.minus_state_set)
  90.       # 威力为 0 的场合
  91.       if skill.power == 0
  92.         # 伤害设置为空的字串
  93.         self.damage = ""
  94.         # 状态没有变化的情况下
  95.         unless @state_changed
  96.           # 伤害设置为 "Miss"
  97.           self.damage = "Miss"
  98.         end
  99.       end
  100.     # Miss 的情况下
  101.     else
  102.       # 伤害设置为 "Miss"
  103.       self.damage = "Miss"
  104.     end
  105.     # 不在战斗中的情况下
  106.     unless $game_temp.in_battle
  107.       # 伤害设置为 nil
  108.       self.damage = nil
  109.     end
  110.     # 过程结束
  111.     return effective
  112.   end
  113. end
复制代码

点评

那么如果需求另一个技能在另一种状态下发动另一种属性呢?  发表于 2015-7-28 22:57
意思就是复数技能效果直接加后面就行了吧?了解  发表于 2015-7-28 22:54
已改。  发表于 2015-7-28 20:59
再问一下,复数技能需要此设定的话是否直接将2-4条另起一行就行?  发表于 2015-7-28 20:17

评分

参与人数 2星屑 +15 梦石 +1 收起 理由
RyanBern + 1 认可答案
enitsirhc + 15 认可答案

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
125
在线时间
272 小时
注册时间
2012-11-11
帖子
221
3
 楼主| 发表于 2015-7-25 11:21:32 | 只看该作者
芯☆淡茹水 发表于 2015-7-25 10:16
在战斗之外使用无效。

分别用RTAB战斗系统和默认战斗系统测试过了,貌似没什么效果啊……
我的用法就是直接修改您注释的那三个ID数字,作为外挂脚本放在main前,难道我的用法错了吗……

点评

芯大貌似经常犯攻击对象搞反的错误233  发表于 2015-7-25 19:06
攻击对象搞反了,上面已改。  发表于 2015-7-25 12:11
之前测试的时候为了试效果就就调了,没用的说  发表于 2015-7-25 12:06
把属性伤害设置高一点试下。  发表于 2015-7-25 11:56
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
125
在线时间
272 小时
注册时间
2012-11-11
帖子
221
4
 楼主| 发表于 2015-7-25 20:00:02 | 只看该作者
芯☆淡茹水 发表于 2015-7-25 10:16
在战斗之外使用无效。

默认战斗系统测试下来可行,咱回头再自行试试改写进RTAB系统里~谢谢芯大~

点评

然而咱直接作为外挂脚本复制上去会报错OTZ……慢慢捋一下语句  发表于 2015-7-25 22:31
这个只是战斗效果,和战斗流程无关。一般来说复制进去就行了。  发表于 2015-7-25 21:50
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-23 03:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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