[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| 配置内的介绍 |
:-: 品质的写法:

<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标识符
```
- 通用配置(使用px之前先看这里)
- 1分钟搭建数据库
- 1分钟搭建Redis环境教程
- 常见问题与报错
- [技能驱动]PxSkilldrive
- 介绍
- config配置
- 所有指令
- 单个技能完整配置
- MythisMobs技能配置
- 自带的技能系统[1.1.4+]
- 打开技能组
- PlaceHolderAPI变量
- 更新日志
- [商会]PxMerchant
- 介绍
- 配置文件
- 更新日志
- [帮派]PxGangs
- 介绍
- 用前必看
- 指令一览
- 职位/权限
- 帮派数据/建筑
- PlaceHolderAPI变量
- 兼容插件
- 更新日志
- [商店]PxShop
- 介绍
- 完整商店配置
- 货币/商品
- 更新日志
- [在线/成就奖励]PxLoginRewards
- 介绍
- 安装使用
- 完整配置
- 要求/奖励
- 更新日志
- [属性]PxRpg
- 介绍
- 安装使用
- 模块文件夹
- 指令
- 属性
- 属性是什么
- 如何创建属性
- 属性组
- 如何利用属性打出伤害(已过时)
- 词条
- 介绍
- 随机词条组列表[4.4.2+]
- 职业
- config[已过时]
- 创建一个职业[已过时]
- 职业[4.3.0+]
- config[4.3.0+]
- 怪物
- 天生属性[4.5.4+]
- 装备
- 装备配置文件
- 让装备获得属性
- 装备变量[已过时]
- 装备类型
- 手持武器[4.5.3+]
- 切换装备[4.5.3+]
- 物品显示模板(lore内容)
- 装备模板的使用
- 物品
- 普通物品
- 消耗品
- 回血道具[旧版]
- 代码回血/回蓝(4.3.0+)
- code代码执行(4.3.0+)
- 介绍
- 例子
- Buff相关
- 传送相关
- 执行3种指令
- 洗炼道具
- 强化类
- 强化道具
- 强化保护券
- 强化券
- 强化转移道具
- 解绑道具
- 宝石相关
- 打孔道具
- 摘除宝石
- 绑定系统
- 绑定类型
- 战斗系统
- 战斗公式变量(已弃用)
- 配置战斗公式[4.3.0+]
- 攻击类型列表
- 自定义伤害类型
- 伤害机制
- 伤害显示
- 掉落
- 掉落类型(已弃用)
- 配置怪物掉落包
- 掉落包[4.3.0+]
- Buff
- 介绍
- buff支持的词条
- 给予buff的方法
- 显示相关
- 萌芽显示
- 龙核相关
- 套装
- 介绍
- 技能[4.5.1+]
- 介绍
- 配置技能
- 技能词条介绍
- 钩子模块[4.5.1+]
- 介绍
- 监听器API
- [自身]Monitor.yml
- [装备容器]Equip Container.yml
- [鉴定]Appraisal.yml
- [绑定]Bind.yml
- [怪物]Mob.yml
- [Buff]Buff.yml
- [分解]Decompose.yml
- [战斗]Fight.yml
- [职业]Occupation.yml
- [玩家]Player Data.yml
- Mythicmobs
- 兼容mm技能(不推荐)
- 如何让MM打出伤害
- MM技能Buff(4.1.1新增)
- MM技能触发Pr伤害(4.2.1+)
- SkillAPI(4.3.0)
- 同步SkillAPI职业
- 战斗公式变量(已弃用)
- 个人变量(已弃用)
- 覆盖技能伤害
- Buff(4.1.1新增)
- 给Mob添加Buff(4.1.1新增)
- 治疗/回蓝组件(4.3.0+)
- PlaceholderAPI变量
- 统计(4.1.0更新)
- [附属]装备经验和升级
- 使用教程
- [附属]物品拓展功能
- 介绍
- [ExtendGui]窗口环境的所有方法
- [ExtendData]拓展数据所有方法
- 类方法
- [工具类]QuickTools
- [拓展数据]ExtendData
- [拓展属性]Attr
- [拓展技能]SkillLv
- 物品生成时添加
- 属性拓展
- 技能拓展[1.0.1+]
- 大量例子
- [福利]提交活动
- 作者发布
- 简单强化
- 界面锁定
- 延迟强化
- 菜单例子
- 吞噬物品永久保存
- 安笙
- 作者介绍
- 词条强化[暂无法使用 等待更新]
- 酒桶
- 作者介绍
- 更新日志
- [附属]萌芽装备容器
- 介绍
- 例子
- 常用工具类
- [数据容器]UMap
- [属性对象]Att
- [对象BUFF]BuffContainer
- [技能对象]USKill
- 接入PxRpg插件(开发者)
- 注册模块入口
- 接入属性
- 模块配置读取
- 接入物品
- 道具生成
- 道具数据获取
- 设置数据并渲染
- 自定义道具组件
- 具有生成参数的组件
- 集成模块介绍
- 更新日志
- 视频预览
- 4.3.0+新版公式教程
- 简介(内含旧版公式转换器)
- 教程(战斗公式篇)(必先学)
- 传递参数和类型的常用方法(重要)
- 单例属性教程(含战斗力变量教程)
- 道具消耗品(含属性加成)
- 装备/宝石/怪物的属性词条
- Buff新版词条(内含属性加成)
- Drop掉落物配置(内含属性掉落加成)
- [副本]PxInstance-Pro
- 介绍
- 世界规则
- 指令详解
- 副本规则(rule)
- 触发器(trigger)
- 触发器参数详解
- 条件(condition)
- 事件(event)
- 副本流程详解
- 根据难度初始化怪物
- 判定通关条件,发放通关奖励
- 副本倒计时/超时处理
- 动态创建倒计时
- 结算奖励
- 副本自带变量
- PlaceholderAPI变量
- 更新日志
- [副本]PxInstace(不再更新)
- 介绍
- 安装使用
- 配置教程
- PlaceholderAPI变量
- 流程配置
- [队伍]PxTeam-Pro
- 介绍
- HUD设置教程
- 变量大全
- 配置文件
- config.yml
- 开发者
- 调用API
- 更新日志
- [任务]BookQuest
- 介绍
- 完整任务配置
- 4种状态显示[4.2.1+]
- 要求/奖励
- 更新日志
- [对话]PxDialogue
- 介绍
- 完整的对话配置
- 一个住酒店的例子
- 更新日志
- [采集]PxCollect
- 介绍
- 作物配置
- 区域生成
- 种植配置
- 条件/事件
- 更新日志
- [技能快捷键]PxQuickSkill
- 介绍
- [仓库]PxWarehouse
- 介绍
- 更新日志
- [拍卖行]PxAuction
- 介绍
- [队伍]PxTeam(不再更新)
- 介绍
- [锻造]PxForging
- 介绍
- 材料/产物
- 完整的锻造配置
- 更新日志
- [邮箱]PxEmail
- 介绍
- PlaceHolderAPI变量
- 编辑邮件模板
- 编辑玩家群
- 编辑系统类型
- 编辑定时邮件
- 权限
- 更新日志
- [MM管理]PxMMSpawner
- 介绍
- 更新日志
- [前置]PxTools(通用部分)
- 介绍
- 掉落物显示[1.12.2+]
- 函数[弃用]
- abs
- ceil
- decimals
- floor
- format
- gradual
- if
- max
- min
- pow
- prd
- random
- randomint
- randomweight
- repeat
- round
- sum
- time
- 要求/奖励(1.9.0+)
- 时间要求(1.9.1+)
- 条件/事件
- 指令
- 事件组
- PlaceholderAPI变量
- 更新日志
- 一些通用的工具类
- 介绍[必看]
- [经济]Vault
- [点券]PlayerPoints
- PxTools相关
- [玩家变量]VarAPI
- [玩家标签]TagAPI
- [玩家计数器]CountAPI
- [时间相关]Date
- [数学函数]Math
- [变量API]PlaceholderAPI
- [自定义冷却]CooldownUtil
- [数字千分化]NumFormat
- [萌芽API]GermAPI
- 消息转发[1.12.3+]
