常见问题
击杀怪物没有触发掉落
按以下顺序检查:
- 确认掉落组 ID 已在
monster-drop-allocation或drop-monster-allocation中分配。 - 确认分配表中的掉落组 ID 与掉落文件顶层节点完全一致。
- 确认填写的是插件实际识别到的怪物 ID 或名称。MythicMobs 使用怪物内部 ID,普通实体或 CustomNPC 使用实体名称。
- 如果不知道实际 ID,可临时开启
kill-entity-send-name,然后由 OP 击杀怪物查看提示。 - 确认掉落组存在有效的
group-select,并且玩家能够匹配其中至少一个分组。 - 检查掉落组的
condition,玩家不满足任意一条条件时,整个掉落组都会停止执行。 - 执行
/ldr reload重载配置后再次测试。
monster-drop-allocation 支持使用 '*' 匹配任意怪物。使用通配符时仍需保证对应掉落组已经成功加载。
同一只怪物触发了多个掉落组
插件会合并以下两种分配方式匹配到的掉落组:
monster-drop-allocation:为掉落组填写怪物。drop-monster-allocation:为怪物填写掉落组。
如果同一怪物同时匹配多个不同掉落组,这些掉落组都会执行。插件会对相同掉落组 ID 去重,不会因为两种分配方式重复填写而执行两次同一个掉落组。
普通生物无法通过原版实体类型触发
普通实体监听读取的是实体自定义名称;没有自定义名称的非玩家实体不会继续触发掉落判断。
如果目标来自 MythicMobs,应填写 MythicMobs 的内部 ID。CustomNPC 的名称读取方式会根据服务端环境处理。
MythicMobs 怪物没有直接击杀者时还能触发吗
可以,但处理方式与 MythicMobs 版本有关:
- MythicMobs 4:会先尝试怪物目标,再查找怪物附近 32 格内最近的玩家。
- MythicMobs 5:会查找怪物附近 32 格内最近的玩家。
- 如果最终仍找不到玩家,则不会执行掉落组。
MythicMobs 4 还支持将驯服狼的主人作为击杀者处理。
掉落组存在但玩家拿不到物品
先检查 drop-type 是否会选中该玩家。
| 写法 | 接收者 |
|---|---|
killer | 击杀者 |
participant#30 | 最后一次造成伤害距当前不超过 30 秒的在线玩家 |
nearby#8 | 死亡实体附近 8 格范围内的玩家 |
nearby_random#8 | 死亡实体附近 8 格范围内随机一名玩家 |
world | 击杀者所在世界的玩家 |
server | 全服在线玩家 |
还需要检查:
viewer-mode-can-get-drop为false时,观察者模式玩家不会被participant、nearby、nearby_random、world或server选中。nearby可通过add-killer-to-the-nearby强制加入击杀者。nearby_random不会额外强制加入击杀者;范围内没有符合条件的玩家时不会发放。- 玩家仍需通过
condition和group-select判断。 - 标记对应的全服限制或个人限制不足时,该条目不会掉落。
管理员可使用 /ldr drop 玩家 掉落组 直接对指定在线玩家触发掉落。该指令会跳过 drop-type 的接收者筛选,但仍会执行掉落组内部的条件、分组、概率、标记限制和发放逻辑。
participant 没有包含预期玩家
participant#秒数 依赖插件记录的玩家直接攻击行为。只有玩家直接对目标实体造成伤害时才会刷新记录,并且玩家必须在线、最后一次伤害时间仍在配置秒数内。
如果玩家没有直接造成伤害、已经离线,或最后一次伤害超过限定时间,就不会被选中。
某些分组不触发
group-select 是必须节点。插件必须先为玩家匹配分组,后续 exp、currency 和 drop 才会按该分组读取。
常见原因:
group-select缺失或为空。- 分组条件列表为空。
- PAPI 条件解析后的值不符合表达式。
permission:{权限}要求玩家拥有权限,但玩家没有该权限。nopermission:{权限}要求玩家没有权限,但玩家实际拥有该权限。group-select匹配到了分组,但drop中没有同名分组节点。exp、currency或drop使用的分组名与group-select不一致。
出现这些情况时,插件会在控制台输出掉落组、玩家和缺失节点相关提示。
玩家同时满足多个分组时使用哪个分组
插件会按配置读取顺序继续检查全部分组,后匹配到的分组会覆盖前面已经匹配的分组。因此,应尽量让各分组条件互斥,避免同一玩家同时满足多个分组。
例如等级区间应避免重叠:
yaml
group-select:
低等级:
- 'papi:{%player_level% >= 0 && %player_level% <= 10}'
高等级:
- 'papi:{%player_level% > 10}'PAPI 条件没有按预期判断
papi:{表达式} 会先解析 PlaceholderAPI 变量,再执行逻辑比较。
可使用的判断包括:
| 类型 | 支持内容 |
|---|---|
| 数值比较 | >、<、>=、<=、==、!= |
| 逻辑组合 | &&、|| |
| 数学计算 | +、-、*、/ |
| 字符串比较 | 使用单引号或双引号包裹字符串后进行 ==、!= 比较 |
| 布尔值 | true |
排查时先确认 PlaceholderAPI 已安装,并确认变量解析结果是条件表达式能够处理的数字、字符串或布尔值。
default 掉落和 weight 掉落有什么区别
default中每一条配置都会独立执行概率判断,因此一次触发可能获得多条掉落。weight会统计当前可用条目的权重,并从中选择一条执行。- 被全服标记限制或个人标记限制拦截的条目不会参与权重统计。
- 掉宝率加成产生额外触发时,
default和weight都会再次执行。
配置了物品但控制台提示物品 ID 无效
插件在读取掉落配置时会检查已安装物品插件中的静态物品 ID。支持检查的前缀包括:
| 前缀 | 对应来源 |
|---|---|
mm | MythicMobs 物品 |
lis | MythicMobs 4 物品 |
ni | NeigeItems |
si | SX-Item 或 SXItem |
nf | NeonFlash |
af | AzureFlow |
检查以下内容:
- 对应物品插件是否已安装并正常启用。
- 物品 ID 是否完全一致。
- 条目是否符合
前缀{物品ID#数量} 概率或权重格式。 - 数量部分是否存在且能够解析。
- 动态包含
%变量%的物品 ID 不会进行静态存在性检查,需要实际触发验证。
控制台告警会包含文件、掉落组、分组、节点、前缀、物品 ID 和原始条目,按提示定位即可。
物品插件未安装时会怎样
使用某个物品前缀时,必须保证对应物品插件已安装并可正常提供物品。否则实际触发时可能无法生成物品,并在控制台输出玩家和物品 ID 相关异常。
plugin.yml 中声明的软依赖包括 PlaceholderAPI、MythicMobs、NeigeItems、SX-Item、Vault、PlayerPoint 和 LyShopReload。代码中还包含 NeonFlash、AzureFlow 及多个仓库插件的兼容逻辑;只有实际使用对应功能时才需要相关插件。
掉落概率如何填写
default 条目的概率会与 Math.random() 的结果比较,常用写法为 0 到 1 之间的小数,例如 0.5 表示约 50% 概率。
概率支持由数字和 +、-、*、/、括号组成的计算表达式。物品数量支持固定整数、最小值-最大值 随机范围或四则运算表达式。
权重掉落没有结果
检查以下内容:
weight列表是否为空。- 权重是否为可解析的整数。
- 所有条目是否都被标记限制拦截。
- 对应物品 ID 是否有效。
drop下是否存在当前group-select最终匹配到的分组。
掉宝率加成没有生效
按以下顺序检查:
- 掉落组的
use-drop-add-attribute是否为true。 - 掉落组专属的
drop-add-placeholder是否填写正确。 - 如果专属变量为空,检查全局
drop-add-attribute-placeholder。 - 确认 PlaceholderAPI 能为玩家解析出有效数字。
- 经验不会受到掉宝率加成影响。
- 货币默认不受掉宝率影响,只有
drop-add-attribute-compatible-with-currency为true时才会增加货币掉落次数。
掉宝率每 100 点固定增加一次额外掉落,不足 100 的部分按百分比概率再增加一次。例如 250 点会固定增加两次,并有 50% 概率再增加一次。
掉宝率提示次数看起来不对
基础掉落不会显示加成提示。只有额外触发时才读取 drop-add-message,其中 {count} 表示当前第几次额外触发。
确认以下配置:
drop-add-message-enable为true。drop-add-message是 YAML 列表。- 掉宝率变量解析结果大于
0。
MythicMobs 原生 Drops 没有受到掉宝率影响
该兼容功能需要开启:
yaml
drop-add-attribute-mythicmob: true此功能只处理 MythicMobs 原生 Drops 中的物品,不处理其中的经验、金币等效果。额外开启 drop-add-attribute-mythicmob-event 后,每次额外触发还会再次调用 MythicMobs 掉落事件,供其他监听该事件的插件处理。
如果兼容效果不符合预期,可关闭这两个选项,不影响 LyDropReload 自己的掉落组。
货币加成变量没有生效
货币加成按货币 ID 配置在 currency-add-attribute-placeholder 下,例如 eco、point 或自定义货币 ID。变量解析结果按百分比增加本次货币数量。
检查:
- PlaceholderAPI 是否正常解析该变量。
- 配置键是否与
currency中的货币 ID 完全一致。 - 解析结果是否为有效数字。
- 该次基础货币数量是否大于
0。
货币加成变量与 drop-add-attribute-compatible-with-currency 是两套机制:前者增加单次货币数量,后者决定货币是否随掉宝率进行多轮发放。
金币、点券或自定义货币没有到账
不同货币 ID 使用不同接口:
| 货币 ID | 处理方式 |
|---|---|
eco | 通过 Vault 经济接口发放 |
point | 通过 PlayerPoints 发放 |
CX_变量ID | 通过 CraftX 变量接口增加数值 |
| 其他 ID | LyShopReload 启用时作为其货币 ID 发放 |
请确认对应插件已安装并正常启用。CX_变量ID 对应的原值必须是有效数字,否则插件会在控制台输出变量值不合法的提示。
金币掉落提示已达上限
金币 eco 会受到 eco-daily-limit 限制。玩家没有匹配权限规则时使用 default;同时匹配多条规则时取更高的非负上限,任意匹配规则值为 -1 时表示不限制。
达到上限后:
- 超出部分不会通过 Vault 发放。
- 如果本次只能发放一部分,插件会发放剩余额度并提示已达到上限。
- 每日日期变化后,在线玩家的当日金币记录会自动清零。
- 管理员可使用
/ldr ecoreload清空当前已加载玩家的今日金币记录并保存数据。
重启后今日金币记录丢失
玩家金币记录会保存到玩家数据中。未启用 MySQL 时,数据保存在插件目录下的 playerdata YAML 文件中;MySQL 成功连接后改用数据库保存。
如果数据异常,检查:
- 控制台是否出现玩家 YAML 或 MySQL 读取、保存失败。
auto-save-interval是否设置为合理的正数。- 插件目录是否具有写入权限。
- YAML 主文件损坏时,插件会尝试从
.bak备份恢复。 - 是否在未正常停服的情况下频繁强制关闭服务器。
启用 MySQL 后玩家无法进入服务器
LyDropReload 的 MySQL 模式依赖 LyMySQLCore 提供安全加载和保存事件。必须安装 LyMySQLCore,并确保 LyDropReload 已成功连接数据库,相关玩家数据功能才会生效。
启用 mysql.enable 后,如果数据库连接尚未完成或连接失败,玩家登录会被阻止:
- 普通玩家收到“服务器尚未初始化完毕”。
- OP 还会看到 LyDropReload 数据库未连接完毕的说明。
检查数据库地址、端口、数据库名、用户名和密码,并确认控制台已经出现数据库连接成功及玩家数据表初始化成功的消息。切换 MySQL 开关后需要重启服务器。
不启用 MySQL,个人标记限制能否生效
可以。当前实现支持两种玩家数据存储方式:
- MySQL 已启用并成功连接:保存到数据库。
- MySQL 未启用或未连接:保存到插件目录下的玩家 YAML 文件。
因此,个人标记限制并非必须依赖 MySQL。无论使用哪种方式,都应保证玩家数据能够正常读取和保存。
个人标记限制不生效
检查以下内容:
- 掉落条目末尾是否填写了标记名。
player-tag-limit中的标记名是否与条目完全一致。count和update-time是否大于0。- 玩家数据是否成功加载。
- 控制台是否出现 YAML 或 MySQL 保存失败。
- 如果启用了 MySQL,确认已经安装 LyMySQLCore 且数据库连接成功。
- 开启
tag-limit-debug-message后,观察控制台中的个人限制扣减前后数值。
个人限制按实际掉落数量扣减。一次掉落数量大于剩余次数时,该条物品不会掉落。
全服标记限制重启后是否保留
会保留当前剩余次数。全服标记限制会写入插件目录下的 taglimit.yml,并使用安全写入和备份机制保存。
加载时,保存值会被限制在 0 到当前配置上限之间。配置的定时刷新任务仍会按 update-time 周期把剩余次数恢复到最大值。
/ldr tagreload 的含义是重新读取掉落配置,并把所有全服标记限制直接重置为当前配置上限,同时立即保存。
标记物品不再掉落
同一个标记可能同时受到两类限制:
| 节点 | 限制范围 | 重置指令 |
|---|---|---|
tag-limit | 全服共享 | /ldr tagreload |
player-tag-limit | 每名玩家单独计算 | /ldr playertagreload |
只要其中一个限制的剩余次数不足,该条掉落就不会执行。物品条目按物品数量扣减;cmd 条目每次按 1 次扣减。掉宝率产生的额外掉落也会计入限制。
可以临时开启 tag-limit-debug-message,在控制台查看每次扣减的玩家、标记、数量、个人剩余值和全服剩余值。
/ldr tagreload 与 /ldr reload 有什么区别
| 指令 | 作用 |
|---|---|
/ldr reload | 重载插件配置与掉落组 |
/ldr tagreload | 重读掉落配置,重新注册公告和全服标记限制,并把计数重置到上限 |
/ldr playertagreload | 重读掉落配置,清空当前已加载玩家的个人标记限制并保存 |
/ldr ecoreload | 清空当前已加载玩家的今日金币记录并保存 |
不要使用 /ldr tagreload 代替普通配置重载,因为它会主动重置全服标记剩余次数。
标记公告没有发送
标记公告只有在带标记的掉落实际成功后才会执行。检查:
- 掉落条目末尾是否填写了标记名。
notice中是否存在完全相同的标记节点。- 条目是否通过概率或权重选择。
- 全服限制与个人限制是否仍有足够次数。
- 公告列表是否为空。
普通公告会发送给全服在线玩家,并按触发玩家解析 PlaceholderAPI 变量。以 cmd{...} 编写的公告项会作为指令执行,不会作为聊天消息广播。
tag-refresh-messgae 只控制标记公告和限制在注册、刷新时的控制台提示,不决定公告本身是否发送。该配置键的实际拼写就是 messgae。
掉落指令没有执行
检查掉落配置中的 command 或 cmd{...} 条目:
drop.分组.command支持直接写指令,也支持cmd{指令}格式。default、weight和notice中的指令条目需要使用cmd{指令}。- 指令开头的
/会被自动移除。 - 默认由控制台执行。
- 以
[op]开头时,会临时以玩家 OP 身份执行后面的指令,执行结束后恢复原 OP 状态。 - PlaceholderAPI 变量会在执行前解析。
- 空指令和执行失败会在控制台输出提示。
开启 run-command-message 后,控制台会显示玩家、执行者类型和最终执行的指令,便于排查。
指令中的坐标变量没有替换
default、weight 和 notice 中的 cmd{...} 支持以下内部替换:
| 内容 | 含义 |
|---|---|
{t_world} | 死亡实体所在世界 |
{t_x} | 死亡实体 X 坐标 |
{t_y} | 死亡实体 Y 坐标 |
{t_z} | 死亡实体 Z 坐标 |
{p_world} | 接收玩家所在世界 |
{p_x} | 接收玩家 X 坐标 |
{p_y} | 接收玩家 Y 坐标 |
{p_z} | 接收玩家 Z 坐标 |
这些替换用于带 cmd{...} 的掉落条目和标记公告指令。坐标会格式化为一位小数。
玩家没有收到物品或经验提示
玩家可执行 /ldr hide 切换掉落消息显示状态。隐藏后,插件不会向该玩家发送物品和经验获得提示,但掉落本身仍会执行。
当前隐藏状态保存在运行时内存中,没有玩家数据持久化逻辑。服务器重启后需要重新切换。
货币提示不受 /ldr hide 控制,仍按 message.eco、message.eco-limit-reached、message.point 或自定义货币消息配置发送。
经验没有发放
exp 节点只负责计算经验数量,实际发放依赖 exp-command。如果 exp-command 为空,即使掉落组计算出了经验,也不会执行经验发放和经验提示。
确认:
- 当前分组在
exp中存在配置。 - 数量是固定值或
最小值-最大值。 exp-command已填写真实可用的控制台指令。- 指令中使用
{exp}接收经验数量。 - 玩家满足对应
group-select。
经验不会受到掉宝率加成影响。
玩家想改成背包优先
需要同时满足:
drop-to-inv为true。drop-to-warehouse-command-enable为true。- 玩家执行
/ldr switch切换状态。
玩家上线时会按 default-drop-to-warehouse 重置状态:
true:仓库优先。false:背包优先。
该状态不会跨登录保留。玩家每次上线后都会重新使用默认值。
/ldr switch 无法完全关闭仓库优先
/ldr switch 只切换玩家当前运行期状态。玩家重新登录后,状态会被 default-drop-to-warehouse 覆盖。
另外,drop-to-warehouse-command-enable 为 false 时,最终发放逻辑会直接使用 default-drop-to-warehouse,此时玩家执行 /ldr switch 虽然会收到切换消息,但实际投递顺序仍以默认配置为准。
物品没有进入仓库
仓库只会按 custom-drop-index 的顺序尝试已安装且可用的兼容插件。
| 索引 | 仓库 |
|---|---|
llwh | LyLootsWareHouse |
lyck | LyWarehouse |
srp | 清守灵魂空间,需要 YeeCore |
ds | StarStorage |
检查:
- 玩家当前是否为仓库优先。
- 仓库插件是否已启用。
custom-drop-index是否包含对应索引。- 索引拼写是否正确。
- 仓库是否接受该物品。
- StarStorage 玩家仓库资料是否已进入缓存。
仓库发放失败后,如果 drop-to-inv 为 true,物品会尝试进入背包;背包装不下的部分掉在实体死亡位置。drop-to-inv 为 false 时,物品直接掉在地上。
背包已满时物品会消失吗
不会。启用 drop-to-inv 后,插件会先尝试加入玩家背包,无法放入的剩余物品会掉落在死亡实体位置。
如果玩家处于仓库优先模式,则先尝试仓库;仓库未接收后再按 drop-to-inv 决定进入背包或掉地。
强制掉落指令怎么使用
| 指令 | 作用 | 使用条件 |
|---|---|---|
/ldr drop 玩家 掉落组 | 对指定在线玩家执行一次掉落组 | 发送者必须是 OP |
/ldr drop 玩家 掉落组 次数 | 对指定在线玩家重复执行指定次数 | 发送者必须是 OP,次数必须为整数 |
目标玩家必须在线,掉落组必须已经加载。该指令直接把目标玩家作为接收者,不读取掉落组的 drop-type,但不会绕过条件、分组、概率、标记限制或金币上限。
为什么普通玩家看不到管理指令帮助
插件的管理操作使用 OP 判断,没有在 plugin.yml 中声明对应权限节点。只有 OP 在不带参数执行 /ldr 时才会看到完整帮助,也只有 OP 能执行重载、限制重置和强制掉落等管理操作。
/ldr hide 和 /ldr switch 只要求发送者是玩家,不要求 OP。
/ldr reload 后出现掉落组缺失或物品告警
重载时插件会重新读取掉落配置,并检查分组与物品条目。根据控制台提示检查:
- 掉落文件是否为有效 YAML。
- 顶层掉落组 ID 是否正确。
group-select是否存在。drop中是否存在对应分组。- 物品前缀与物品 ID 是否有效。
- 分配配置是否引用了不存在的掉落组。
重载进行期间,掉落执行会暂时停止,避免读取到未完成加载的数据。
玩家数据文件损坏怎么办
玩家 YAML 和全服标记限制文件使用临时文件、主文件和 .bak 备份进行安全写入。读取主文件失败时,插件会删除损坏的主文件并尝试从备份恢复;主文件与备份都损坏时,会返回空数据并输出控制台告警。
不要在服务器运行时手动修改玩家数据文件。需要修改配置时,应编辑正常配置文件并使用对应重载指令。
哪些问题需要重启服务器
以下情况应重启服务器,而不是只执行 /ldr reload:
- 开启或关闭
mysql.enable。 - 修改 MySQL 连接信息。
- 新增、删除或更换依赖插件。
- 调整会影响插件初始化监听器或外部兼容加载的环境。
普通消息、掉落组、分配、掉率变量和大多数运行配置可先尝试使用 /ldr reload。