企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
>[danger] 现在掉落物格式跟之前的不一样 可下载 **[[旧版战斗公式转换器,密码:5lb5](https://wwjt.lanzouw.com/b02ka8aef)]** 以便一键转换 但是对于drop内的String类型转换的不是很正确, 转换后请自己检查一下 [TOC] <br><br><br><br> # 格式转换 ## 装备 <br><br><br> ### 以前的格式 ``` 掉落包ID: - 'type=equip;id=侠客木剑;prob=0.2;bind=未绑定;streng=random(1,15);hole=random(1,15)' #这是单项掉落物 ``` <br><br><br> ### 现在的完整格式 >[danger] 将旧版的格式拆分成节点 > pr传过来的参数可以查看: [传递参数和类型的常用方法(重要)](%E4%BC%A0%E9%80%92%E7%9A%84%E5%90%84%E9%A1%B9%E5%8F%82%E6%95%B0.md) ``` 掉落包ID: 掉落物ID_自己看得懂就行_同层级下不能重复: type: equip #固定写法,不支持java解译器,就是type后面跟的类型 #------------------------------------------------------------------------------- #写法1 #注意这里: 如果是常量字符串,就需要用双引号包裹起来, id: '"侠客木剑"' #这里是支持java解译器的,返回String(字符串)类型 #写法2 # id: 'return "侠客木剑";' #写法3 ,只有一行代码时,可以这样写 # id: |- # "侠客木剑" #写法4 # id: |- # return "侠客木剑"; #写法5 # id: |- # String 返回值 = "侠客木剑"; //这是字符串变量的写法 # return 返回值; //也可以返回String类型的变量 #------------------------------------------------------------------------------- #掉落概率,也支持java解译器,返回boolean(逻辑型)类型 #没有此节点会100%概率掉落 prob: |- double value = 0.2;//设定基础的掉落概率为 0.2 UMap killer = data.get("killer"); //可以拿到击杀的玩家 if(killer != null){ //这里判定一下玩家是否为null, 如果怪物非玩家击杀(如卡在方块里面死亡的)就不会传入玩家数据 Att att = killer.get("att");//拿到玩家的属性对象 double 掉落概率加成 = att.s("掉落概率加成"); //拿到属性百分比: 掉落概率加成 value = value + 掉落概率加成; //将属性加到基础掉落概率上面 USkill skillapi = killer.get("skillapi");//拿到技能相关数据 int skillLevel = skillapi.level("掉落概率加成技能");//拿到技能等级 value = value + skillLevel*0.05; //这里的作用每级提升5%的掉落概率 } //这一行是打印在控制台的, 用于调试 //正式环境可以删除掉 System.out.println("最终掉落概率: " + value); return Math.random() <= value; //计算是否掉落 #是否缓存(有随机属性的不推荐,amount结果>1才会生效) ,不支持java解译器 #不写的话, equip和gem默认false, item默认true cache: false #是否启用掉落物保护,不支持java解译器 #不写的话, 默认 true protect: true #保护时长, 毫秒,不支持java解译器 #不写或者0的话 会使用pxtools配置的时长 protect-time: 60000 amount: |- /** 这是注释块,里面的任何内容都不会解析 */ //数量也支持java解译器,同上方一样可以做属性加成 //如果返回int错误,可以强转成 double return (double) 1; #这里写物品生成时的参数 #有哪些参数,可以打开物品大全看最下面一排的物品 #内部所有节点都支持java解译器 args: #物品的等级 level: "1" #数字可以直接返回 #绑定类型,返回String类型 bind: '"未绑定"' #如果是常量字符串,就需要用双引号包裹起来,也可以返回String类型的变量 #品质类型,返回String类型 quality: |- //这是新版的RandomWeight方法,需要安装转换器提供的 java.lang.Math 工具类 return Math.RandomWeight(new int[]{2,1,3,4},new String[]{"劣质","稀有","普通","完美"}); //有想法的话也可以根据玩家相关数据进行品质质量加成 #=======以下是 equip 时才会生效的======= #强化等级 streng: "Math.random(1,15);" #孔数 hole: "Math.random(1,15);" #是否鉴定,返回boolean型 appraisal: "true" #是否绑定于玩家,返回boolean型[4.5.0+] bind-player: "true" ``` <br><br><br> ## 游戏币等数值战利品 <br><br><br> ### 以前的格式 ``` 掉落包ID: - 'type=money;amount=15;prob=0.2' ``` <br><br><br> ### 现在的格式 >[danger] 将旧版的格式拆分成节点 > pr传过来的参数可以查看: [传递参数和类型的常用方法(重要)](%E4%BC%A0%E9%80%92%E7%9A%84%E5%90%84%E9%A1%B9%E5%8F%82%E6%95%B0.md) ``` 掉落包ID: 掉落物ID_自己看得懂就行_同层级下不能重复: #money, point, pxrpgexp写法一样 type: money #固定写法,不支持java解译器,就是type后面跟的类型 #是否分享 share: false #启用平摊 flat: false #平摊阈值,超过总伤害(或总血量)的20%即可参与平摊(所有攻击过的都可以进行平摊) flat-threshold: 0.2 #掉落概率,也支持java解译器,返回boolean(逻辑型)类型 prob: |- double value = 0.2;//设定基础的掉落概率为 0.2 UMap killer = data.get("killer"); //可以拿到击杀的玩家 if(killer != null){ //这里判定一下玩家是否为null, 如果怪物非玩家击杀(如卡在方块里面死亡的)就不会传入玩家数据 Att att = killer.get("att");//拿到玩家的属性对象 double 掉落概率加成 = att.s("掉落概率加成"); //拿到属性百分比: 掉落概率加成 value = value + 掉落概率加成; //将属性加到基础掉落概率上面 USkill skillapi = killer.get("skillapi");//拿到技能相关数据 int skillLevel = skillapi.level("掉落概率加成技能");//拿到技能等级 value = value + skillLevel*0.05; //这里的作用每级提升5%的掉落概率 } //这一行是打印在控制台的, 用于调试 //正式环境可以删除掉 System.out.println("最终掉落概率: " + value); return Math.random() <= value; //计算是否掉落 #数量公式,也支持java解译器,返回double(小数型)类型 amount: "15" ``` <br><br><br> ## 掉落包 <br><br><br> ### 以前的格式 ``` 掉落包ID: - 'type=drops;name=掉落包2' 掉落包2: ... ``` <br><br><br> ### 现在的格式 ``` 掉落包ID: 掉落包掉落哦: type: drops name: "掉落包2" ``` <br><br><br> # 有保底的的掉落概率方法 >[danger] 例如野外BOSS, 多少只必出什么东西 ``` prob: |- //这里假设已经计算好了概率为 0.2; double value = 0.2; double 每次掉落所增加的概率 = 0.05; //这样的话 (1-0.2)/0.05 = 16 次内必出, 出了后, 累加的概率会清空 System.out.println("1. 当前累加的概率为: " + Gradual.getPro("某某BOSS掉落","掉落某某某道具")); System.out.println("2. 当前累加的总概率: " + (Gradual.getPro("某某BOSS掉落","掉落某某某道具") + value)); //注意这个重启会清空,不可做长期保存的数据(玩家UUID做第一个参数的话 玩家下线也会消失) boolean ret = Gradual.next("某某BOSS掉落","掉落某某某道具",value,每次掉落所增加的概率); System.out.println("4. 是否成功掉落: " + ret); System.out.println("5. 触发后的累加概率: " + Gradual.getPro("某某BOSS掉落","掉落某某某道具")); return ret; ``` ## 效果图片 ![](https://img.kancloud.cn/8f/1f/8f1ff4c9dfeee3d0e7b3227169ed3ea8_1525x663.png) <br><br><br> # 实测效果图片 ![](https://img.kancloud.cn/4e/c5/4ec5ada0e489ce4e87a5a1f694e05dac_1667x786.png)