- 累计送礼:
- 0 个
- 累计收礼:
- 0 个
TA的每日心情 | 开心 6 天前 |
---|
签到天数: 127 天 连续签到: 11 天 [LV.7]常住居民III

管理员
  
- VIP
- 6
- 卡币
- 11285
- OK点
- 16
- 推广点
- 0
- 同能卷
- 0
- 积分
- 14071


|
其实就是想做做看..... 感觉有不少童鞋不理解默认的技能伤害公式设置, 如果不会设置默认, 干脆用自定义吧XD
功能就是能像VA一样 单独设置技能的公式, 没设置的话就按XP默认的来, 设置了自定义伤害计算后, 技能的属性克制, 分散度一样会影响最终结果, 如果需要固定伤害, 就去掉属性, 把分散度设置为0
另外增加了一些参数, 像金钱,时间, 步数, 队伍活着的人数, 死掉的人数之类的, 可以用来做些奇葩技能......=.=
同时也加入了限制最大最小伤害的设置
设置方法 技能引用公共事件, 并在公共事件第一行用注释, 内容:[公式]XXXXX, 可以换行
不影响原本的公共事件调用,如果技能无需用到公共事件,就只注释写公式就可以了,具体公式写法看说明
冲突, 经芯大指点, 使用公共事件应该没冲突了
有覆盖了 def skill_effect(user, skill) , 其实就只加一句, 如果有改动过, 就把(菜刀到此一游的那句)复制到自己的脚本里就可以了
RUBY 代码 - #------------------------------------------------------
- # 自定义技能公式 by 灯笼菜刀君
- #
- # 用途, 和VA一样,可以对技能单独设置伤害计算公式
- #
- # 设置方法 技能引用公共事件, 并在公共事件第一行用注释, 内容:[公式]XXXXX,可以换行
- # 不影响原本的公共事件调用,如果技能无需用到公共事件,就注释写完公式后放空
- #
- # 写法:
- # [公式](a攻-b防)*a力
- # 表示, 伤害值等于 攻方的攻击 - 受方的防御的差 乘上 攻方的力量
- #
- # [公式](a攻-b防)*a力 最大9999
- # 公式后面加上 最大9999, 表示公式结果如果超过9999就只取值9999
- #
- # [公式](a攻-b防)*a力 最小1
- # 公式后面加上 最小1, 表示公式结果如果低于1就取值1
- #
- # [公式](a攻-b防)*a力 最小1最大9999
- # 最小和最大可以同时写,结果会在 1-9999 之间
- #
- #[公式] 100
- # 固定伤害 100点(会受属性,分散度, 防御的修正)
- #--------------------------------------------------------
- # 公式里可使用的参数 注意符号都要用半角
- #--------------------------------------------------------
- # 备注: 最大N 写在公式最后,表示结果取值不超过N
- # 最小N 写在公式最后,表示结果取值不低于N
- # ※以上两个可以同时写,但是之间不能有空格或者其他符号
- #
- # 运算符号: 加+ ; 减- ; 乘* ; 除/ ; 除余%
- #
- # 能力对应写法,a表示攻方,b表示受方(注意都要用小写字母)两者都可以使用以下参数
- # 攻击力: a攻 力量: a力 灵活: a灵 最大HP : aM血 ※M是大写
- # 防御: a防 智力: a智 HP: a血 最大SP : aM蓝
- # 特防: a特 速度: a速 SP: a蓝 等级 : a级 (敌人的话, 这个数值为
- # 队伍里的最高等级)
- # 特殊参数:
- # v : v[1] 表示 1号变量的值
- # 钱: 持有的金钱
- # 步: 走过的步数
- # 时: 游戏时间(秒)
- # lv : 队伍总等级
- # 人 : 队伍里存活的人数
- # 尸 : 队伍里死掉的人数
- # 怪 : 场上剩余的怪物数量
- #------------------------------------------------------
- module RPG
- class Skill
- def formula
- returnnilif@common_event_id == 0
- returnnilif$data_common_events[@common_event_id].list[0].code != 108
- returnnilif !$data_common_events[@common_event_id].list[0
- ].parameters[0].include?("[公式]")
- f = $data_common_events[@common_event_id].list[0
- ].parameters[0].gsub("[公式]","")
- for i in1..5
- if$data_common_events[@common_event_id].list[i] != niland
- $data_common_events[@common_event_id].list[i].code == 408
- f += $data_common_events[@common_event_id].list[i].parameters[0]
- end
- end
- return f
- end
- end
- end
- class Game_Battler
- def diy_formula(user,skill_for)
- if skill_for.nil?
- return
- end
- a攻 = user.atk.to_f
- a防 = user.pdef.to_f
- a特 = user.mdef.to_f
- a力 = user.str.to_f
- a速 = user.agi.to_f
- a灵 = user.dex.to_f
- a智 = user.int.to_f
- a血 = user.hp.to_f
- aM血 = user.maxhp.to_f
- a蓝 = user.sp.to_f
- aM蓝 = user.maxsp.to_f
- a级 = user.is_a?(Game_Actors) ? user.level.to_f : $game_party.max_level.to_f
- b攻 = self.atk.to_f
- b防 = self.pdef.to_f
- b特 = self.mdef.to_f
- b力 = self.str.to_f
- b速 = self.agi.to_f
- b灵 = self.dex.to_f
- b智 = self.int.to_f
- b血 = self.hp.to_f
- bM血 = self.maxhp.to_f
- b蓝 = self.sp.to_f
- bM蓝 = self.maxsp.to_f
- b级 = self.is_a?(Game_Actors) ? self.level.to_f : $game_party.max_level.to_f
- v = $game_variables
- 钱 = $game_party.gold
- 步 = $game_party.steps
- 时 = Graphics.frame_count / Graphics.frame_rate
- lv = 0
- 人 = 0
- 尸 = 0
- for i in$game_party.actors
- 尸 += 1if i.dead?
- 人 += 1if i.exist?
- lv += i.level
- end
- 怪 = 0
- for i in$game_troop.enemies
- 怪 += 1if i.exist?
- end
- f = skill_for.split(/最大/)
- f1 = f[0].split(/最小/)
- f2 = f[1].nil? ? [] : f[1].split(/最小/)
- if f1[1] != nil
- big,small,fr = f[1],f1[1],f1[0]
- elsif f2[1] != nil
- big,small,fr = f2[0],f2[1],f[0]
- elsif f[1] != nil
- big,small,fr = f[1],nil,f[0]
- else
- big,small,fr = nil,nil,f[0]
- end
- eval("damage = (#{fr}).to_i")
- damage = [damage,big.to_i].minif big != nil
- damage = [damage,small.to_i].maxif small != nil
- self.damage = damage
- end
- def skill_effect(user, skill)
- # 清除会心一击标志
- self.critical = false
- # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
- # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
- if((skill.scope == 3or skill.scope == 4)andself.hp == 0)or
- ((skill.scope == 5or skill.scope == 6)andself.hp >= 1)
- # 过程结束
- returnfalse
- end
- # 清除有效标志
- effective = false
- # 公共事件 ID 是有效的情况下,设置为有效标志
- effective |= skill.common_event_id > 0
- # 第一命中判定
- hit = skill.hit
- if skill.atk_f > 0
- hit *= user.hit / 100
- end
- hit_result = (rand(100) < hit)
- # 不确定的特技的情况下设置为有效标志
- effective |= hit < 100
- # 命中的情况下
- if hit_result == true
- # 计算威力
- power = skill.power + user.atk * skill.atk_f / 100
- if power > 0
- power -= self.pdef * skill.pdef_f / 200
- power -= self.mdef * skill.mdef_f / 200
- power = [power, 0].max
- end
- # 计算倍率
- rate = 20
- rate += (user.str * skill.str_f / 100)
- rate += (user.dex * skill.dex_f / 100)
- rate += (user.agi * skill.agi_f / 100)
- rate += (user.int * skill.int_f / 100)
- # 计算基本伤害
- self.damage = power * rate / 20
- #####菜刀到此一游####################################################
- diy_formula(user,skill.formula)
- #####################################################################
- # 属性修正
- self.damage *= elements_correct(skill.element_set)
- self.damage /= 100
- # 伤害符号正确的情况下
- ifself.damage > 0
- # 防御修正
- ifself.guarding?
- self.damage /= 2
- end
- end
- # 分散
- if skill.variance > 0andself.damage.abs > 0
- amp = [self.damage.abs * skill.variance / 100, 1].max
- self.damage += rand(amp+1) + rand(amp+1) - amp
- end
- # 第二命中判定
- eva = 8 * self.agi / user.dex + self.eva
- hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
- hit = self.cant_evade? ? 100 : hit
- hit_result = (rand(100) < hit)
- # 不确定的特技的情况下设置为有效标志
- effective |= hit < 100
- end
- # 命中的情况下
- if hit_result == true
- # 威力 0 以外的物理攻击的情况下
- if skill.power != 0and skill.atk_f > 0
- # 状态冲击解除
- remove_states_shock
- # 设置有效标志
- effective = true
- end
- # HP 的伤害减法运算
- last_hp = self.hp
- self.hp -= self.damage
- effective |= self.hp != last_hp
- # 状态变化
- @state_changed = false
- effective |= states_plus(skill.plus_state_set)
- effective |= states_minus(skill.minus_state_set)
- # 威力为 0 的场合
- if skill.power == 0
- # 伤害设置为空的字串
- self.damage = ""
- # 状态没有变化的情况下
- unless@state_changed
- # 伤害设置为 "Miss"
- self.damage = "Miss"
- end
- end
- # Miss 的情况下
- else
- # 伤害设置为 "Miss"
- self.damage = "Miss"
- end
- # 不在战斗中的情况下
- unless$game_temp.in_battle
- # 伤害设置为 nil
- self.damage = nil
- end
- # 过程结束
- return effective
- end
- end
复制代码
本帖来自P1论坛作者灯笼菜刀王,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=477244 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|