企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
主要就是对[战斗公式[4.3.0+]](../%E6%88%98%E6%96%97%E7%B3%BB%E7%BB%9F/%E9%85%8D%E7%BD%AE%E6%88%98%E6%96%97%E5%85%AC%E5%BC%8F.md)的改动 储存详细职业的文件在`PxRpg\Modules\Occupation\Occupation` ``` # 显示名 display: 新手 # 加入权限 # pxrpg.occupation.join.* 或者 pxrpg.occupation.join.该权限 permissions: 新手 # 加入此职业的最大等级 # 0 = 无上限 join-max-level: 0 # 加入该职业之后,是否使用父职业的等级和继承其剩余经验 keep-level: true # 职业战斗伤害类型开关 # 如果职业未开启指定伤害类型,不会触发伤害 damage-types: mob: damage: 伤害: true projectile: arrow: 伤害: true player: damage: 伤害: true projectile: arrow: 伤害: true formula: # 战斗公式配置 # 支持数据继承 fight: #攻击怪物时的公式 , 支持的所有类型可查看 战斗系统 mob: #普通攻击 , 支持的所有类型可查看 战斗系统 damage: 伤害: # 伤害机制(优先级 1) 优先级低 = 先计算 damage: hit: true //100%概率命中 value: |- UMap a = data.get("attacker"); Att a_att = a.get("att"); UMap v = data.get("victim"); Att v_att = v.get("att"); double a_攻击 = a_att.get("攻击"); double v_防御 = v_att.get("防御"); return Math.max(a_攻击-v_防御,1); # 暴击机制(优先级 2),并且强依赖伤害机制(伤害机制未执行成功或者MISS,不会处理暴击机制) crit: # 暴击机制 暴击命中公式 hit: Math.random() <= 0.5;//50%概率暴击 # 暴击机制 暴击伤害公式 value: |- UMap fight_data = data.get("fight_data"); //拿到战斗数据 double 伤害 = fight_data.get("this_伤害_damage_value",0); //上面 伤害.damage 的 计算结果 ,可用于附加伤害或者暴击比例结果结果 return 伤害 * 0.5; //最后在结算时会把这个值给加上去, 最终结果为 伤害 + 伤害 * 0.5; #抛物的公式 , 支持的所有类型可查看 战斗系统 projectile: #抛物为箭时 , 支持的所有类型可查看 战斗系统 arrow: 伤害: damage: hit: true value: |- UMap a = data.get("attacker"); Att a_att = a.get("att"); UMap v = data.get("victim"); Att v_att = v.get("att"); double a_攻击 = a_att.get("攻击"); double v_防御 = v_att.get("防御"); return Math.max(a_攻击-v_防御,1); crit: hit: 'true' value: |- UMap fight_data = data.get("fight_data"); double 伤害 = fight_data.get("this_伤害_damage_value",0); return 伤害 * 0.5; #攻击玩家时的公式 , 支持的所有类型可查看 战斗系统 player: damage: 伤害: damage: hit: true value: |- UMap a = data.get("attacker"); Att a_att = a.get("att"); UMap v = data.get("victim"); Att v_att = v.get("att"); double a_攻击 = a_att.get("攻击"); double v_防御 = v_att.get("防御"); return Math.max(a_攻击-v_防御,1); crit: hit: Math.random() <= 0.5; value: |- UMap fight_data = data.get("fight_data"); double 伤害 = fight_data.get("this_伤害_damage_value",0); return 伤害 * 0.5; # 该职业的最大等级 max-level: 10 # 加入此职业的最小等级 join-min-level: 0 #该职业天生属性(会被继承或从继承中取) basic-attribute: 闪避: value: |- int level = data.get("level"); return level*1+5; sign: '0' 攻速: value: '0' sign: '1' 移速: value: '0' sign: '1' 攻击: value: |- int level = data.get("level"); return level*4+20; sign: '0' 魔法恢复: value: |- int level = data.get("level"); return level+60; sign: '0' 生命恢复: value: |- int level = data.get("level"); return level+60; sign: '0' 生命: value: |- int level = data.get("level"); return level*30+50; sign: '0' 魔法: value: |- int level = data.get("level"); return level*3+10; sign: '0' 命中: value: |- int level = data.get("level"); return level*5+50; sign: '0' 防御: value: |- int level = data.get("level"); return level*2+10; skillapi: # 职业是否同步到SkillAPI内 # 需严格按照wiki设置,否则可能会导致无效 syn: false syn: exp: true level: true level-up: # 默认所有等级都会触发的指令列表 default: [] '3': - op:say haha auto-level: 1 #自动升级之前的等级,如果为-1则全等级自动升级 #能否升级(会先判定经验是否足够,是否非满级),java代码,返回boolean (4.3.0+) can-uplevel: true #升级后的java代码,无返回值 参数: UMap data (内含玩家数据) (4.3.0+) level-up-code: '' ``` 如果你需要每个职业的生命公式不相同可以在formula节点下加入single节点,例子如下 ``` formula: fight: ... single: health: |- Att att = data.get("att"); return att.get("生命"); mana: |- Att att = data.get("att"); return att.get("魔法"); speed: |- Att att = data.get("att"); return 0.2*(1+att.s("移速")); exp: |- int level = data.get("level"); return level*400+level*level*3+400; recovery_health: |- Att att = data.get("att"); return att.get("生命恢复"); recovery_mana: |- Att att = data.get("att"); return att.get("法力恢复"); ```