帮助:生物设计/计算实力
出自Meshal Lite
第2行: | 第2行: | ||
<!--基本参数定义--> | <!--基本参数定义--> | ||
− | <!-- | + | <!--属性起算阈值--> |
{{#vardefine: attributeThreshold| | {{#vardefine: attributeThreshold| | ||
3 | 3 | ||
}} | }} | ||
− | <!-- | + | <!--属性分系数--> |
{{#vardefine:attributeMultiplier| | {{#vardefine:attributeMultiplier| | ||
3 | 3 | ||
}} | }} | ||
− | <!-- | + | <!--防护分系数--> |
{{#vardefine:protectionMultiplier| | {{#vardefine:protectionMultiplier| | ||
2 | 2 | ||
}} | }} | ||
− | <!-- | + | <!--免疫分系数--> |
{{#vardefine:immunityMultiplier| | {{#vardefine:immunityMultiplier| | ||
30 | 30 | ||
}} | }} | ||
− | <!-- | + | <!--机动起算阈值--> |
{{#vardefine:executionThreshold| | {{#vardefine:executionThreshold| | ||
3 | 3 | ||
}} | }} | ||
− | <!-- | + | <!--机动分系数--> |
{{#vardefine:executionMultiplier| | {{#vardefine:executionMultiplier| | ||
5 | 5 | ||
}} | }} | ||
− | <!-- | + | <!--防御分倍率--> |
{{#vardefine:defenseMultiplier| | {{#vardefine:defenseMultiplier| | ||
1 | 1 | ||
}} | }} | ||
− | <!-- | + | <!--能力分倍率--> |
{{#vardefine:abilityMultiplier| | {{#vardefine:abilityMultiplier| | ||
3 | 3 | ||
第43行: | 第43行: | ||
</div> | </div> | ||
==计算[[生物]]的[[实力]]== | ==计算[[生物]]的[[实力]]== | ||
− | 在设计一个生物时,你需要计算出这个生物的[[实力]]水平,用以将之归入恰当的挑战难度中。一个生物的实力水平由[[#属性分|属性分]]、[[#防护分|防护分]] | + | 在设计一个生物时,你需要计算出这个生物的[[实力]]水平,用以将之归入恰当的挑战难度中。一个生物的实力水平由[[#属性分|属性分]]、[[#防护分|防护分]](和[[#免疫分|免疫分]])、[[#机动分|机动分]]、[[#防御分|防御分]]、[[#能力分|能力分]]等构成(tbd:之后还将包括[[#感知分|感知分]]、[[#移速分|移速分]]和[[#物品分|物品分]])。 |
*你可以直接使用 [http://www.necroz.com/project/smithy/widgets/meshalUtil/u_creatureStr.php 生物实力在线计算器] 来快速计算出生物的实力。 | *你可以直接使用 [http://www.necroz.com/project/smithy/widgets/meshalUtil/u_creatureStr.php 生物实力在线计算器] 来快速计算出生物的实力。 | ||
===算法=== | ===算法=== | ||
− | {{block|计算{{anchor|属性分}}| | + | {{block|计算{{anchor|属性分|$strength['attr']}}| |
− | + | 分别计算每项属性的累积潜能花费并将结果相加。可使用等差数列求和的算法:∑属性<sub>n</sub><nowiki>=</nowiki>1+2+3+……+(n-1)-[[#属性起算阈值|属性起算阈值]]。将三项属性的结果相加,然后×[[#属性分系数|属性分系数]]得到实力。 | |
+ | *对于低于属性起算阈值的属性,则反过来扣除实力(属性不可能低于1,如果低于1则视作1)。 | ||
+ | *可参考[[受训属性]]的提升规则,但在计算生物实力时,应当将所有基础属性都用于计算(包括天生、特征、受训的属性部分) | ||
+ | ---- | ||
+ | 计算因子 | ||
+ | *{{anchor|属性起算阈值|$attrTH}}:{{#var:attributeThreshold}} | ||
+ | *{{anchor|属性分系数|$attrM}}:{{#var:attributeMultiplier}} | ||
+ | ---- | ||
+ | 经过优化的PHP算法如下: | ||
+ | <source lang="php"> | ||
+ | /*计算属性分*/ | ||
+ | $strength += (array_sum(range(0, $attr['强壮'] - 1)) - $attrTH) * $attrM | ||
+ | + (array_sum(range(0, $attr['活力'] - 1)) - $attrTH) * $attrM | ||
+ | + (array_sum(range(0, $attr['精神'] - 1)) - $attrTH) * $attrM; | ||
+ | </source> | ||
}} | }} | ||
− | {{block| | + | {{block|计算{{anchor|防护分|$strength['prot']}}和{{anchor|免疫分|$strength['immunity']}}| |
− | + | 计算防护分时,需要注意分为两个步骤:分别计算防护分和免疫分。 | |
− | + | ||
+ | 先计算每项防护分,使用等差数列求和算法:∑防护<sub>n</sub><nowiki>=</nowiki>1+2+……+n。将三项防护分结果相加,然后×[[#防护分系数|防护分系数]]。 | ||
+ | *如果防护<0,可同样用等差数列求和:∑防护<sub>-n</sub><nowiki>=</nowiki>-1-2-……-n。 | ||
+ | *如果该生物[[免疫]]某种[[攻击类型]],那么对应的防护就无需计算(而是交由免疫分计算)。 | ||
---- | ---- | ||
− | + | 然后计算免疫分,如果该生物免疫1种攻击类型,那么视作1;免疫2种攻击类型视作2;免疫3种攻击类型视作3。接着用等差数列求和:∑免疫<sub>n</sub><nowiki>=</nowiki>0+1+……+n。然后将求和结果×[[#免疫分系数|免疫分系数]]。 | |
− | + | ||
---- | ---- | ||
− | *{{anchor| | + | 计算因子 |
− | *{{anchor| | + | *{{anchor|防护分系数|$protM}}:{{#var:protectionMultiplier}} |
+ | *{{anchor|免疫分系数|$immunityM}}:{{#var:immunityMultiplier}} | ||
+ | ---- | ||
+ | 经过优化的PHP算法如下: | ||
+ | <source lang="php"> | ||
+ | /*计算防护和免疫分*/ | ||
+ | $strength += ($immunity['物理'] == 0 ? array_sum(range(0, $prot['物理'])) * $protM : 0) | ||
+ | + ($immunity['侵蚀'] == 0 ? array_sum(range(0, $prot['侵蚀'])) * $protM : 0) | ||
+ | + ($immunity['灵异'] == 0 ? array_sum(range(0, $prot['灵异'])) * $protM : 0) | ||
+ | + array_sum(range(0, $immunity['物理'] + $immunity['侵蚀'] + $immunity['灵异'])) * $immunityM; | ||
+ | </source> | ||
+ | }} | ||
+ | |||
+ | {{block|计算{{anchor|机动分|$strength['exec']}}| | ||
+ | 将机动做等差数列求和:∑机动<sub>n</sub><nowiki>=</nowiki>1+2+3+……+(n-1)-[[#机动起算阈值|机动起算阈值]]。然后将结果×[[#机动分系数|机动分系数]]。 | ||
+ | *对于低于机动起算阈值的,则反过来扣除实力(机动不可能低于0,如果低于0则视作0)。 | ||
+ | ---- | ||
+ | 计算因子 | ||
+ | *{{anchor|机动起算阈值|$execTH}}:{{#var:executionThreshold}} | ||
+ | *{{anchor|机动分系数|$execM}}:{{#var:executionMultiplier}} | ||
+ | ---- | ||
+ | 经过优化的PHP算法如下: | ||
+ | <source lang="php"> | ||
+ | /*计算机动分*/ | ||
+ | $strength += (array_sum(range(0, $exec - 1)) - $execTH) * $execM; | ||
+ | </source> | ||
+ | }} | ||
+ | |||
+ | {{block|计算{{anchor|防御分|$strength['def']}}| | ||
+ | 将所有防御优劣势相加求和:∑防御<nowiki>=</nowiki>格挡优势+闪避优势+抵抗优势。然后将结果×[[#防御分系数|防御分系数]]。 | ||
+ | *劣势被视作负数的优势。 | ||
+ | ---- | ||
+ | 计算因子 | ||
+ | *{{anchor|防御分系数|$defM}}:{{#var:defenseMultiplier}} | ||
+ | ---- | ||
+ | 经过优化的PHP算法如下: | ||
+ | <source lang="php"> | ||
+ | /*计算防御分*/ | ||
+ | $strength += ($def['格挡'] + $def['闪避'] + $def['抵抗']) * $defM; | ||
+ | </source> | ||
+ | }} | ||
+ | |||
+ | {{block|计算{{anchor|能力分|$strength['ability']}}| | ||
+ | 将所有能力等级相加求和,然后将结果×[[#能力分系数|能力分系数]]。 | ||
+ | *在计算能力时,包括天赋能力在内的能力等级也应当计算在内。 | ||
---- | ---- | ||
− | *{{anchor| | + | 计算因子 |
+ | *{{anchor|能力分系数|$abilityM}}:{{#var: abilityMultiplier}} | ||
---- | ---- | ||
− | * | + | 经过优化的PHP算法如下: |
− | + | <source lang="php"> | |
+ | /*计算能力分*/ | ||
+ | $strength += $abilityLevels * $abilityM; | ||
+ | </source> | ||
}} | }} |