mechanism combat defense - Mini-World-Dev-Org/Mini-World-Wiki GitHub Wiki
防御
防御是游戏对象的基本属性之一,任何生物和玩家等都有防御这个属性。
防御包括近战防御 和远程防御 ,它们分别对受到近战伤害和远程伤害有修改(通常是降低,极端情况会增加)的作用。
可以在背包界面中看到简单的角色防御面板。
API
设要获取或设置防御的对象 id 为 objid
。
获取防御:
Player:getAttr(objid, 19)
返回objid
所指玩家的近战防御。Player:getAttr(objid, 20)
返回objid
所指玩家的远程防御。Creature:getAttr(objid, 19)
返回objid
所指生物的近战防御。Creature:getAttr(objid, 20)
返回objid
所指生物的远程防御。Creature:getPunchDefense(objid)
返回objid
所指生物的近战防御。Creature:getRangeDefense(objid)
返回objid
所指生物的远程防御。
设置防御:
设要设置的防御值为 defense
。
Player:setAttr(objid, 19, defense)
设置objid
所指玩家的近战防御为defense
。Player:setAttr(objid, 20, defense)
设置objid
所指玩家的远程防御为defense
。Creature:setAttr(objid, 19, defense)
设置objid
所指生物的近战防御为defense
。Creature:setAttr(objid, 20, defense)
设置objid
所指生物的远程防御为defense
。Creature:setPunchDefense(objid, defense)
设置objid
所指生物的近战防御为defense
。Creature:setRangeDefense(objid, defense)
设置objid
所指生物的远程防御为defense
。
防御与受到伤害的关系
设原始伤害为 base
, 实际伤害为 real
,防御(防御类型与伤害类型对应)为 defense
,那么存在关系:
real = 20/(defense+20)*base (defense >= 0)
也就是说,防御大于等于 0 时(这是正常情况),你的受伤率为 20/(defense+20)
,减伤率为 defense/(defense+20)
。
注意,实际伤害最终会尽可能化为整数,且实际计算过程更复杂,因此存在一定的误差,该算法仅在理论上正确。
防御为负数时,受伤率会变得难以用表达式表示,例如在防御为 -20 时,根据算法和计算机对极端浮点数的处理, 20/(defense+20)
会等于 inf
,但实际不会将实际伤害增大到 inf
。
而且此时受伤率甚至还会和原始伤害有关,例如原始伤害为 10000 点时,受伤率为 1 ,但伤害为 2e9 时,受伤率会大于 1 。
最后更新: 2022/12/20