季楠
本帖最后由 季楠 于 2023-1-15 11:07 编辑

本帖使用排版来自PCD小组

目录

  • 0.了解各类属性及其原理
    • 序言
      • 关于属性插件
    • 认识属性标签
      • 攻击类属性
      • 防御类属性
      • 其他类属性
  • 1.构思你的第一个RPG策划
    • 设定基础数值
      • 初始生命的设定
      • 初始武器/装备的设定
  • 2.敌人数据的策划
    • 制作你的第一个敌人
      • 敌人的基础数据
      • 敌人的技能设计
    • 新人友好的原创技能编写流程
  • 3.玩家及敌人属性的成长


0.了解各类属性及其原理

序言
关于属性插件
本文档配套使用的属性插件为源属性OriginAttribute ( MCBBS | Gitee | 插件文档 )

认识属性标签
属性标签列表来自插件文档

攻击类属性
  1. //单次攻击对敌人造成的伤害,类型为物理
  2. 物理攻击  <范围值> 或 <固定值>
  3. //单次攻击对敌人造成的伤害,类型为魔法
  4. 魔法攻击  <范围值> 或 <固定值>
  5. //单次攻击对敌人造成的伤害,对象为玩家
  6. PVP攻击  <范围值> 或 <固定值>  
  7. //单次攻击对敌人造成的伤害,对象为怪物
  8. PVE攻击  <范围值> 或 <固定值>  
  9. //使单次攻击造成伤害额外增加 攻击力 * 攻击力加成
  10. 攻击力加成  <百分比>
  11. //单次攻击触发暴击的概率
  12. 暴击几率  <百分比>  
  13. //触发暴击时,使单次攻击造成伤害额外增加 加成后攻击力 * 暴击几率 * 暴击伤害
  14. 暴击伤害  <百分比>  
  15. //单次攻击触发吸血的概率
  16. 吸血几率  <百分比>  
  17. //触发吸血时,使单次攻击造成伤害的同时额外为玩家回复 实际伤害 * 吸血几率 * 吸血倍率
  18. 吸血倍率  <百分比>  
  19. //敌人触发闪避时,无视敌人闪避强制对敌人造成伤害的概率
  20. 抓取  <百分比>
复制代码

防御类属性
  1. //单次受到伤害直接减少的数值,类型为物理
  2. 物理防御  <范围值> 或 <固定值>
  3. //单次受到伤害直接减少的数值,类型为魔法
  4. 魔法防御  <范围值> 或 <固定值>
  5. //单次受到伤害直接减少的数值,对象为玩家
  6. PVP防御  <范围值> 或 <固定值>
  7. //单次受到伤害直接减少的数值,对象为怪物
  8. PVE防御  <范围值> 或 <固定值>
  9. //使单次受到伤害直接额外减少 防御力 * 防御力加成
  10. 防御力加成  <百分比>
  11. //单次受到攻击触发免疫全额伤害的概率
  12. 闪避  <百分比>
  13. //使敌人对自己造成的吸血数额直接减少 吸血抗性
  14. 吸血抗性  <固定值>
  15. //单次受到攻击触发格挡的概率
  16. 格挡几率  <百分比>
  17. //触发格挡时,使单次受到伤害直接减少 敌人总攻击力 * 格挡倍率
  18. 格挡倍率  <百分比>
  19. //触发格挡时,使单次受到伤害直接减少 格挡伤害
复制代码

其他类属性
  1. //使生命值额外增加 生命上限
  2. 生命上限  <固定值>
  3. //使生命值额外增加 实际生命上限 * 生命提升
  4. 生命提升  <百分比>
  5. //使获得的经验值额外增加 获得经验 * 经验加成
  6. 经验加成  <百分比>
  7. //使移动速度额外增加 移动速度 * 移速加成
  8. 移速加成  <百分比>
复制代码



1.构思你的第一个RPG策划

设定基础数值
初始生命的设定
以OriginAttribute为例,玩家的初始生命需要在Health.yml中设定。
plugins\OriginAttribute\attribute\Health.yml
  1. health:
  2.     default: 20
复制代码

理论上我们可以设定玩家的初始生命为任意值。  

但值得注意的是,在本篇教程所提供的方法下,如果玩家的初始血量小于40,则会造成"武器伤害比空手低"的情况。  

如果你的服务器出现了血量大于2048.0则不会生效的情况,请前往spigot.yml修改最大血量限制为2.1E9。
spigot.yml
  1. settings:
  2.       attribute:
  3.             maxHealth:
  4.               max: 2.1E9
  5.             movementSpeed:
  6.               max: 2.1E9
  7.             attackDamage:
  8.               max: 2.1E9
复制代码

本篇教程设置的默认血量为912。  

初始武器/装备的设定

我们将默认血量除以20,便可以得到初始武器的伤害为 912 / 20 = 45.6 。  

如果我们想要的是一个伤害范围,则可以将最小值设定为 45.6 * 0.618 = 28.1808 保留小数点后两位 28.18 。  

同理将最大值设定为 45.6 * 1.618 = 73.7808 保留小数点后两位 73.78 。   

由于是初始武器所以选择造成物理伤害,最终词条为 "物理攻击: 28.18 - 73.78" 。

    0.618与1.618是黄金分割比的两个比值,它们近似互为倒数。
    选用它们可以使我们的属性数值处于较为合理的范围之中。
    如果您认为这不是一个合适的范围的话,可以对其另加改动。

同时我们仍然使用 912 / 20 = 45.6 作为初始装备的防御力。  

在我们的思路中,头盔/胸甲/护腿/靴子 四件装备实际上共同使用一个数值。  

我们把计算得的数值按照 1/4/3/2 的权重分配给它们,例如:

  1. 头盔的防御力 = 45.6 / 10 * 1 = 4.56
  2. 胸甲的防御力 = 45.6 / 10 * 4 = 18.24
  3. 护腿的防御力 = 45.6 / 10 * 3 = 13.68
  4. 靴子的防御力 = 45.6 / 10 * 2 = 9.12
复制代码

同理我们也可以选择将其"范围化",这里省略计算步骤。

最终得到的属性词条为:

  1. 头盔 "物理防御: 4.56"
  2. 胸甲 "物理防御: 18.24"
  3. 护腿 "物理防御: 13.68"
  4. 鞋子 "物理防御: 9.12"
复制代码

"范围化"后得到的属性词条为:

  1. 头盔 "物理防御: 2.81 - 7.37"
  2. 胸甲 "物理防御: 11.27 - 29.51"
  3. 护腿 "物理防御: 8.45 - 22.13"
  4. 鞋子 "物理防御: 5.63 - 14.75"
复制代码


2.敌人数据的策划


制作你的第一个敌人
前篇回顾

通过上一章的学习,我们已经得到了如下数据:

  1. 武器 "物理攻击: 45.6"
  2. 头盔 "物理防御: 4.56"
  3. 胸甲 "物理防御: 18.24"
  4. 护腿 "物理防御: 13.68"
  5. 鞋子 "物理防御: 9.12"
复制代码

敌人的基础数据

我们将玩家攻击乘以12.5得到敌人的血量 45.6 * 12.5 = 570 ,  

同时将玩家血量除以20得到敌人的普通攻击伤害 912 / 20 = 45.6 。

事实上,玩家的基础攻击力与当前敌人的普通攻击伤害完全一致。

这意味着在"范围化"的前提下,玩家每攻击大约12.5次可以击杀一名该敌人。  

而与此同时,敌人则需要对玩家造成20次普通攻击伤害才能杀死玩家。  

对应的,我们需要保证副本内的大部分位置都能够让玩家吸引到2~3个敌人。  

敌人的技能设计
技能写法详见MythicMobs中文文档

新人友好的原创技能编写流程

首先我们打开MythicMobs技能语句列表,从中选择自己想要的词条。  

这里以想要制作敌人的自愈技能为例,选择heal词条。  

查找到heal词条的页面下存在以下内容:

  1. Skills:
  2. - heal{amount=1,oh=false} @self ~onDamaged 0.2
复制代码

| 修改项名     | 别称  | 描述                                                              | 默认值 |
|----------------|--------|------------------------------------------------------------|----------|
| amount       | a      | 所恢复的生命数值                                            | 1        |
| overheal      | oh    | 超过最大生命的部分是否转为生命提升状态效果  | false    |


对照表格得知示例技能语句意为:  

有20%的几率在自身受伤时对自身进行一次治愈,回复的血量为1点,如果已经达到血量上限则不继续回复

我们想让它的效果变为:

有10%的几率在自身受伤时对自身进行一次治愈,回复的血量为50点,如果已经达到血量上限则不继续回复

则做出如下修改:

  1. Skills:
  2. - heal{amount=50,oh=false} @self ~onDamaged 0.1
复制代码

如果我们想要改变技能的作用对象,则需将 @self 改为MythicMobs中文文档中的其他目标选择器 。  
同理如果我们想要改变技能的触发条件,则需将 ~onDamaged 改为MythicMobs中文文档中的其他触发器。  


3.玩家及敌人属性的成长

强度数值的引入
DPS
DPS是“Damage Per Second”的缩写,即单位“每秒所能造成的伤害值”,也可称之为“秒伤”。

在RPG服务器中,通常情况下玩家每次打出伤害所需要的时间是10Tick(即0.5秒)。

  1. 物理攻击: 28.18 - 73.78
复制代码

通过第一章的学习,我们已经得到了玩家的初始武器数据。  

以初始武器为例,我们来计算该练度下玩家的DPS。

  1. 武器的最大伤害和最小伤害:
  2. 45.6 * 0.618 = 28.1808
  3. 45.6 * 1.618 = 73.7808

  4. 每次攻击造成的平均伤害:
  5. ( 28.18 + 73.78 ) / 2 = 50.98

  6. 玩家每秒所能造成的伤害:
  7. 50.98 / 0.5 = 101.86
复制代码

化简后得到DPS公式:

  1. DPS = 玩家攻击力 * 2.236
复制代码

TTK
TTK是“Time To Kill”的缩写,即单位“击杀敌人所需要的时间”。

TTK的计算公式:

  1. TTK = 敌人血量 / DPS
复制代码

例如敌人的血量为570,按照"物理攻击: 28.18 - 73.78"的标准。  

我们可以计算击杀其所需要的时间:

  1. TTK = 570 / 101.86 = 5.59
复制代码

同等级的玩家与敌人,对应TTK需控制在5秒左右。

本篇教程将同一副本中的普通敌人、精英敌人、领主敌人、BOSS视为不同等级。

属性成长
玩家与敌人的等级

升到下一级所需经验值的计算公式如下:  
升级所需 =  
2×[当前等级] + 7(0-15级时)  
5×[当前等级] - 38(16-30级时)  
9×[当前等级] - 158(在31级以上)  

升到某一级所需经验值总量的计算公式如下:  
经验总量 =  
[等级]2 + 6×[等级](0-16级时)  
2.5×[等级]2 - 40.5×[等级] + 360(17-31级时)  
4.5×[等级]2 - 162.5×[等级] + 2220(在32级以上)  

值得注意的是,Minecraft中的玩家的等级上限为21863。

在本系列教程中,同等级的玩家与敌人,对应TTK需控制在5秒左右。  

换言之,如果玩家击杀单个敌人的时间控制在5秒上下,即可判断二者等级相近。

这里,我们需要保证材料和经验的掉落是相对协调的。  
即武器装备和玩家达到与敌人相同的等级,所需要击杀的敌人数量相同。

玩家与敌人的属性成长

在RPG服务器中,属性的成长一般呈现一个稳定的趋势。
这种趋势通常是固定的,他在本篇教程中的计算公式为:

  1. 本级属性 = 基础属性 * ( 1 + 0.15 * 等级 )
复制代码

例如我们想要计算玩家10级时的装备属性,只需要按照公式得出属性的总和。
然后把计算得的数值按照 1/4/3/2 的权重分配给 头盔/胸甲/护腿/靴子 ,  
这样玩家在10级时的装备数值就完成了。

本篇教程介绍的公式对于任意等级的玩家或怪物都同样适用。



未完待续

前面的区域,以后再来探索吧!
给帖子排版好累的说,感觉不如Markdown......有时间再继续更新吧。
本篇教程在知识星球、Github均有同步更新。
知识星球[免费|最先更新]: https://t.zsxq.com/093xDcsj9
Github: https://github.com/CPJiNan/RPG-Numerical-Planning-Course
QQ交流群: 704109949



秋风赋
教程很好,我萌新都学废了。

2000000
教程很好 顶一下

GodXF
好耶!!!终于有新手教程了!

satan2401

教程很好 太顶了

k854053320
教程很详细

haieo
大佬的贴子帮助很大,感谢

预告ub
那个,我想问一下这个插件要怎么下载。可能问题有点白痴,但我确实不知道gitee要怎么用,如有打扰非常抱歉。

季楠
预告ub 发表于 2022-12-23 22:13
那个,我想问一下这个插件要怎么下载。可能问题有点白痴,但我确实不知道gitee要怎么用,如有打扰非常抱歉 ...

OriginAttribute插件是开源的,需要自行构建。
但它的作者提供了打包后的Jar工件,
用得上的话咱可以发你~
加咱QQ2759278070

742577106
MCBBS有你更精彩~

我是i坤
那个,我想问一下这个插件要怎么下载。可能问题有点白痴,但我确实不知道gitee要怎么用,如有打扰非常抱歉。

第一页 上一页 下一页 最后一页