你可以:
从函数可以看出:命中占的比率越大,打中的机会就越大。如果回避占了上风,打中的机会就小。 喵~ ![]() |
本帖最后由 亂堂和樹 于 2012-10-30 21:41 编辑 a364774426前輩~感謝你回覆我啊>"<! 前輩~要是我設定改成這樣~他算出來~會跟我想要的理想數值一樣嗎? 這是我自己修改過後的結果↓ #-------------------------------------------------------------------------- # ● 最終命中率の計算 # user : 攻撃者、スキルまたはアイテムの使用者 # obj : スキルまたはアイテム (通常攻撃の場合は nil) #-------------------------------------------------------------------------- def calc_hit(user, obj = nil) if obj == nil # 通常攻撃の場合 hit = user.hit # 命中率を取得 physical = true elsif obj.is_a?(RPG::Skill) # スキルの場合 #hit = obj.donevade? ? 100 : obj.hit # 成功率を取得 #hit = obj.hit+user.hit #physical = obj.physical_attack hit = user.hit # 命中率を取得 <<這段是我自己新增的 physical = true <<這段是我自己新增的 else # アイテムの場合 hit = 100 # 命中率を 100% とする physical = obj.physical_attack end hit = 100 if user.donevade? # 必中状態なら 100% とする if physical # 物理攻撃の場合 hit /= 4 if user.reduce_hit_ratio? # 使用者が暗闇なら 1/4 にする end return hit end #-------------------------------------------------------------------------- # ● 最終回避率の計算 # user : 攻撃者、スキルまたはアイテムの使用者 # obj : スキルまたはアイテム (通常攻撃の場合は nil) #-------------------------------------------------------------------------- def calc_eva(user, obj = nil) eva = self.eva if $game_temp.unit_back_attack # 背後攻撃ボーナス eva = [eva - TSRPG::BACK_ATTACK_BONUS_HIT, 0].max end unless obj == nil # 通常攻撃ではない場合 eva = eva - user.hit <<這段是我自己新增的 eva = 0 unless obj.physical_attack eva = 0 if obj.donevade? end eva = 0 if user.donevade? # 攻撃者が必中状態なら 0% とする eva = 0 unless parriable? # 回避不可能状態なら 0% とする return eva end 另外顯示部分我修改成 def get_hit_rate hit = @attacker.unit.hit - @target.unit.eva <<這段是我自己新增的 #hit = @target.unit.calc_hit(@attacker.unit, @obj) #hit = hit* (100 - @target.unit.calc_eva(@attacker.unit, @obj)) / 100 if @attacker.unit.hit - @target.unit.eva > 100 <<這段是我自己新增的 hit =100 <<這段是我自己新增的 elsif @attacker.unit.hit - @target.unit.eva < 0 <<這段是我自己新增的 hit = 0 <<這段是我自己新增的 end return hit end 這顯示部分~只是單純~超過100就顯示100%命中~低於0就是0% 所以我最終命中跟閃避...只是希望很單純的 HIT-EVA=真HIT |
不知道那个-68%是怎么计算出来的,按照你所给的脚本来看是没有经过修改的。 本身命中与回避之间的关系是很复杂的,首先单单依靠命中减回避来取得最终命中是很片面的,例如攻方命中100和受方闪避100的时候,最终命中就是0, 这本身就是一个自相矛盾的现象。另外在命中小于100的情况下,如95%,那么假设受方闪避为0,有5%的几率是打偏的,即是MISS,一旦受方闪避大于0, 那么就要考虑到在没有打偏的情况下,攻击命中的概率,同理最终闪避几率也是如此。 对于命中超过100的问题,很简单,在定义命中等数值的地方,返回值之前加入一句"n = 100 if n > 100 ########n是命中等值" |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2025-7-18 12:57
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.