AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
[TOC] <br><br><br> ## 任何支持代码的地方所传递下来的参数名为 `data` ,类型为 `UMap` <br> <br> ### 循环打印UMap的内容 ``` Set set = data.keys(); for(String key : set){ System.out.println(key + " 的内容类型为: " + data.get(key).getClass()); } ``` <br><br><br> ## 与玩家相关的--内容 >[danger] 只要是与玩家相关的,都会具有以下内容: |JAVA类型| key| 介绍| |-|-|-| |Att |att | 属性对象| |PlayerOccupation |occ |当前主职业/需要计算的职业| |PlayerOccupationManager |occs |玩家的职业管理器,存有所有职业的PlayerOccupation对象| |int |level |当前主职业等级| |USkill | skillapi | skillapi的技能对象(需要安装 SkillAPI 才会传递)| |USkill | skill | 技能对象(需要安装一款支持的插件才会传递,如: [`PxSkilldrive`](../../PxSkillDrive/%E4%BB%8B%E7%BB%8D.md))| |BuffContainer| buff | 玩家的buff容器| |AdapterPlayer| entity| 玩家的实体对象(可以做很多事情)| <br><br><br> ## 与BUFF相关的内容 >[danger] 只要是与BUFF相关的,都会具有以下内容: |JAVA类型| key| 介绍| |-|-|-| |UMap |caster | buff投放对象的内容,可能是怪物或者玩家,也有可能为null(指令释放),记得判断一下再使用| |UMap |recipient | buff接受者的内容, 可能是怪物或者玩家| |int| level | buff的等级| <br><br><br> ## 与怪物相关的内容 >[danger] 只要是与怪物(攻击公式等)相关的,都会具有以下内容: > |JAVA类型| key| 介绍| |-|-|-| |Att |att | 属性对象| |int |level | 怪物等级| |AdapterLivingEntity| entity| 怪物实体对象| |String | id| 怪物id(原版就是怪物类型)| |USkill | skillapi | 为了让战斗公式通用不报错,这里传递了一个空的对象| |USkill | skill | 为了让战斗公式通用不报错,这里传递了一个空的对象| |BuffContainer| buff | 怪物的buff容器| |MobData| mob| pr的怪物对象 | <br><br><br> ## 与道具(ItemInter)相关的内容 >[danger] 只要是与道具(如使用消耗品,强化装备,装备洗炼等)相关的,都会具有以下内容: |JAVA类型| key| 介绍| |-|-|-| |ItemInter | inter | 道具对象 | |AdapterItemStack | itemstack| 物品对象 | <br><br><br> ## 与装备(EquipInter)相关的内容 >[danger] 只要是与装备(如强化装备,装备洗炼等)相关的,都会具有以下内容: |JAVA类型| key| 介绍| |-|-|-| |EquipInter | inter | 装备对象 | |AdapterItemStack | itemstack| 物品对象 | <br><br><br> ## 与战利品/掉落物(Drop)相关的内容 >[danger] 只要是与掉落物相关的,都会具有以下内容: |JAVA类型| key| 介绍| |-|-|-| |UMap | killer | 击杀的玩家对象数据<br> 其内容是: **与玩家相关的内容** <br>取伤害最高,非玩家击杀不会传入,所以使用前记得判断一下非null | |UMap | mob | 死亡的怪物数据<br>其内容是: **与怪物相关的内容** | <br><br><br> ## 与宝石(GemInter)相关的内容 >[danger] 只要是与宝石(如宝石镶嵌,拆卸等)相关的,都会具有以下内容: |JAVA类型| key| 介绍| |-|-|-| |GemInter | inter | 宝石对象 | |AdapterItemStack | itemstack| 物品对象 | <br><br><br> ## ItemInter,EquipInter,GemInter 的使用方法 >[danger] 这3个类都实现了 `ItemObject` 类,可以拿这个类型来接收: ``` ItemObject inter = data.get("inter"); //直接用 ItemObject 类型接收 //这里可能不限于 data.get(String); 拿到 //具体会在各项解释内告知如何拿到 ``` <br> 该类写了一个简单的获取各项数据的方法 ``` Object getData(String str); //根据str拿各项数据 ``` <br> ### 可拿到的常用数据: >[danger] 有全路径的类在拿数据之前需先导入一下!!! > 或者直接用全路径类作为类型也可以 > 如: > ItemObject inter = data.get("inter"); > com.pxpmc.pxrpg.api.modules.equipcontainer.EquipType equipType = inter.getData("equip-type"); |JAVA类型 | key| 介绍| |-|-|-| |String | **id** | **物品的文件名** | |int | **level** | **物品的等级(主要用于公式的计算等内容,也是常用的内容)** | |boolean| can-reset | 能否进行洗炼 **(装备专属)**| |boolean | appraisal | 装备是否已经鉴定 **(装备专属)** | |int | streng| 强化等级 **(装备专属)** | |com.pxpmc.pxrpg.api.modules.gem.forequip.piece.EquipGemInfo| gem | 装备的宝石相关对象 **(装备专属)** | |int | need-level| 穿戴等级 **(装备专属)** | |com.pxpmc.pxrpg.api.modules.equipcontainer.EquipType| equip-type| 装备类型 **(装备专属)**| |com.pxpmc.pxrpg.api.modules.occupation.piece.OccupationInfo| need-class | 装备职业要求相关 **(装备专属)**| |com.pxpmc.pxrpg.modules.entrygroup.item.ItemEntryGroup | entry-basic | 基础词条组 **(宝石\|装备专属)** | |com.pxpmc.pxrpg.modules.entrygroup.item.ItemEntryGroup | entry-random | 随机词条组 **(宝石\|装备专属)** | |int | identical | 宝石同ID可镶嵌的数量上限 **(宝石专属)** | |com.pxpmc.pxrpg.api.modules.gem.forequip.GemType| gem-type| 宝石类型 **(宝石专属)** | |boolean| unbreakable | 是否不可破坏(原版的不掉耐久)| |boolean| damage | 耐久值/子ID| |String | type | 原版的道具类型 | |int | hide| 隐藏flag| |String | name| 物品的名字(配置内的name节点内容,非最终显示名字)| |com.pxpmc.pxrpg.api.modules.bind.BindType | bind | 物品的绑定类型对象 | |com.pxpmc.pxrpg.api.item.piece.custom.CustomMap | custom| 配置文件内的自定义节点类对象 | |com.pxpmc.pxrpg.api.modules.quality.Quality | quality | 物品品质 | |com.pxpmc.pxrpg.api.modules.sell.piece.SellInfo | sell| 物品回收价值相关 | |com.pxpmc.pxrpg.api.modules.template.Template| template | 物品显示模板相关 | |List | introduce| 配置内的介绍 | :-: 品质的写法: ![](https://img.kancloud.cn/ba/3f/ba3f19b18d2a2edf0eea14bb016f1786_605x169.png) <br><br><br> ## 战斗公式有2个对象,拿双方数据: >[danger] 此处有2个对象个对象 所以先拿到攻击方,再拿到被攻击方,再拿对应的数据 ``` UMap a = data.get("attacker"); //拿到攻击方的数据 Att a_att = a.get("att"); //拿攻击方属性 UMap v = data.get("victim"); //拿到被攻击方的数据 Att v_att = v.get("att"); //拿被攻击方属性 ``` 此处的数据又是一个 UMap 类型 ,再参照上述玩家/怪物拿数据 <br><br><br> ## 个人公式拿数据: >[danger] 此处只有1个对象 所以可以直接拿数据 ``` Att att = data.get("att"); //直接拿属性 ``` <br><br><br> ## 使用消耗品时拿到玩家和物品对象: >[danger] 此处有2个对象, 一个是使用的玩家, 一个是被使用的消耗品道具 因为玩家相关和道具相关不冲突,就放在一个UMap内了 使用前也可以打印一下UMap里面有什么内容 ``` Att att = data.get("att"); //直接拿玩家相关 ItemObject inter = data.get("inter"); //直接拿到道具对象 int level = inter.getData("level"); //拿道具等级 double 恢复加成_s = att.s("恢复加成"); return level * 50 * (1+恢复加成_s); //这里是使用消耗品后, 恢复 道具等级*50*一个恢复加成的修正 //开发想象可以做属性加成,技能等级加成,帮派技能加成等等 ``` <br><br><br> ## 添加BUFF时拿到投放者/受益者对象: >[danger] 此处有2个对象, 一个是buff投放对象,一个是buff收益对象 > 因为2个对象的内容可能相同,所以使用了2个UMap来区分 ``` entries: 防御: type: attribute data: id: 防御 float: 0.0 sign: false display: - '&b{attribute.name} &f{attribute.value}' min: |- int level = data.get("level"); double value = 10 + level * 5; UMap caster = data.get("caster"); //直接buff投放者的对象,可能为null //判断投放者不是null if(caster != null){ //可以做一些属性加成等属性 Att att = caster.get("att"); //因为不是null, 要么是玩家对象,要么是怪物对象,所有都会有属性对象传递进来 double 状态加成 = att.s("状态加成"); //代码里面可以这样写 value *= 1 + 状态加成; // 等价于 value = value * ( 1 + 状态时长加成 ); } UMap recipient = data.get("recipient"); //拿到收益者的对象 Att att = recipient.get("att"); //因为受益者始终不为null, 要么是玩家对象,要么是怪物对象,可以直接拿属性 double 状态受益加成 = att.s("状态受益加成"); value *= 1 + 状态受益加成; return value; ``` <br><br><br> ## 常用类方法 ### UMap方法: ``` boolean has(String key); //是否有key值 Object get(String key); //获取key的内容,首先知道里面有什么,再用什么类型的变量去接收 Object get(String key, Object def); //获取key的内容, 第二个参数是未找到key的内容时,返回的值 void set(String key, Object obj); //设置key的内容, 不推荐调用 Set keys(); //所有key ``` <br> ### Att方法: ``` //id = 属性ID, 如: 攻击,力量等 double vmin(String id); //最小值 double vmax(String id); //最大值 double v(String id); //最小值~最大值 的随机值 double s(String id); //最小百分比~最大百分比 的随机值 double smin(String id); //最小百分比 double smax(String id); //最大百分比 double min(String id); //最小值*(1+最小百分比) double max(String id); //最大值*(1+最大百分比) double get(String id); //最小值*(1+最小百分比) ~ 最大值*(1+最大百分比) 中的随机值 AttributeList|List vmins(String id); //取属性最小值的词条数值列表,排序从高到低 [4.5.4+] AttributeList|List vmaxs(String id); //取属性最大值的词条数值列表,排序从高到低 [4.5.4+] AttributeList|List smins(String id); //取属性最小百分比的词条数值列表,排序从高到低 [4.5.4+] AttributeList|List smaxs(String id); //取属性最大百分比的词条数值列表,排序从高到低 [4.5.4+] Set allSources();//所有属性的来源集合,可用循环打印,元素类型为:String [4.5.4+] double getSVMin(String source, String id); //属性来源的最小值 [4.5.4+] double getSVMax(String source, String id); //属性来源的最大值 [4.5.4+] double getSSMin(String source, String id); //属性来源的最小百分比 [4.5.4+] double getSSMax(String source, String id); //属性来源的最大百分比 [4.5.4+] double getSV(String source, String id); //属性来源的随机值 [4.5.4+] double getSS(String source, String id); //属性来源的随机百分比 [4.5.4+] double getSMin(String source, String id); //属性来源的最小值含百分比结果 [4.5.4+] double getSMax(String source, String id); //属性来源的最大值含百分比结果 [4.5.4+] double getS(String source, String id); //属性来源的随机值含百分比结果 [4.5.4+] ``` <br> ### USkill方法: ``` //skill = 技能名字 int level(String skill);//技能等级,没有返回0 boolean hasSkill(String skill);//是否具有技能 ``` <br> ### BuffContainer方法: ``` AdapterEntity getOwner(); //获取buff所属的实体 boolean hasBuff(String note); //是否有指定标识符的buff BuffData getBuff(String note); //根据note获取buff BuffData removeBuff(String note); //移除buff /** note: buff标识符 buffId: buff的ID caster: buff投放者(可以为null) level: buff等级 args: 额外参数(可以为null) 如: "time=3600;caster=dapixiong;save=true" 支持的参数: - time: 持续时间(秒) - caster: 投放者玩家名字(优先级大于上面的参数) - save: 是否保存 true/false - name: 覆盖配置内的buff名字 */ boolean addBuff(String note, String buffId, AdapterEntity caster, int level, String args); //添加buff boolean addBuff(String note, String buffId, AdapterEntity caster, int level); //添加buff boolean addBuff(String note, String buffId, int level); //添加buff(常用) boolean addBuff(String note, String buffId, int level, String args); //添加buff Set getNoteKeys();//所有buff标识符 ```