我重构了表单
- 支持关闭粒子效果
- 全新的入服和退服提示
- 对接 IKDungeon [vip兑换]
- 删除了玩家自定义称号(我觉得没必要)
- 新增积分添加功能和查询
前置组件
必选
LL2
LL3
LeviLaminaLegacyScriptEngine- 此插件需要LL3的LSE-quickjs加载器下运行,使用前请确保您已安装了该加载器
可选
安装
LL2
- 首次安装,将文件
PVip.js或PVip.llse.js解压到此路径下:BDS/plugins/ - 更新直接替换原来的文件,若旧插件的名称与新插件的名称不一致,请删除旧插件再解压
LL3
- LL3 将文件夹
PVip解压到此路径下:BDS/plugins/ - 更新插件请将原来的文件夹删除
注册指令说明
/vip - 会员中心 /myvip - 我的会员 游戏内执行/vipshop - 会员商城 游戏内执行/vipset - 会员管理 游戏内执行/vipmod - VIP模块中心 游戏内执行/vip add (玩家ID/QQ号) [天数] - 控制台添加VIP 控制台操作,"[]"内为选填/vip del (玩家ID/QQ号) 控制台删除VIP 控制台操作,当玩家是VIP时输入会关掉VIP,当玩家不是VIP时会删除VIP数据 /vip addint (玩家ID/QQ号) (经验) 控制台增加玩家会员积分,所有参数为必填/vip reduceint (玩家ID/QQ号) (经验) 控制台减少玩家会员积分,所有参数为必填/vip addtime (玩家ID/QQ号) (时长) 控制台增加玩家时长 控制台操作,所有参数为必填/vip reducetime (玩家ID/QQ号) (时长) 控制台减少玩家时长 控制台操作,所有参数为必填,当减少时长大于剩余时长会自动取消玩家的VIP/vip query (玩家ID/QQ号) [输出类型] 控制台查询玩家VIP数据 控制台操作,所有参数为必填指令示范
[th]
指令模板
[/th][th]
模板说明
[/th][th]
指令模板
[/th][th]
[td]模板说明
[/th]vip add 114514[/td][td]将114514绑定的玩家添加为会员,时间为默认[/td][td]vip add Steve 6[/td][td]将Steve玩家添加为会员,时间为6天[/td]
[td]vip del 114514[/td][td]移除114514绑定的玩家的会员[/td][td]vip del Steve[/td][td]移除Steve玩家的会员[/td]
[td]vip addint 114514 100[/td][td]给114514绑定的玩家增加100会员积分[/td][td]vip addint Steve 100[/td][td]给Steve玩家增加100会员积分[/td]
[td]vip reduceint 114514 100[/td][td]减少114514绑定的玩家100会员积分[/td][td]vip reduceint Steve 100[/td][td]减少Steve玩家100会员积分[/td]
[td]vip addtime 114514 10[/td][td]给114514绑定的玩家增加10天会员时间[/td][td]vip addtime Steve 100[/td][td]给Steve玩家增加10天会员时间[/td]
[td]vip reducetime 114514 100[/td][td]减少114514绑定的玩家10天会员时间[/td][td]vip reducetime Steve 100[/td][td]减少Steve玩家10天会员时间[/td]
[td]vip query 114514[/td][td]查询114514绑定的玩家的会员信息(默认为英文输出格式)[/td][td]vip query Steve chn[/td][td]查询Steve玩家的会员信息(输出格式为中文)[/td]
配置文件说明
config文件
- 插件基础配置文件
- 路径: BDS/plugins/Planet/PVip/config.json
代码:
[COLOR=rgb(36, 41, 46)]{
[COLOR=rgb(3, 47, 98)] "version"[/COLOR]: [COLOR=rgb(3, 47, 98)]"v3.0.0"[/COLOR], [COLOR=rgb(106, 115, 125)]//插件版本[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "money"[/COLOR]: [COLOR=rgb(0, 92, 197)]0[/COLOR], [COLOR=rgb(106, 115, 125)]//经济模式(0为计分板,1为LLMoney)[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "score"[/COLOR]: [COLOR=rgb(3, 47, 98)]"money"[/COLOR],[/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "buy_switch"[/COLOR]: [COLOR=rgb(0, 92, 197)]1[/COLOR], [COLOR=rgb(106, 115, 125)]//购买/续费VIP开关(0为关闭,1为开启)[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "title"[/COLOR]: [ [COLOR=rgb(106, 115, 125)]//注册PAPI的变量返回值[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "至尊VIP"[/COLOR], [COLOR=rgb(106, 115, 125)]//玩家是VIP时的返回文本[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "非VIP"[/COLOR][COLOR=rgb(106, 115, 125)] //玩家不是VIP时的返回完本[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)] ],
[COLOR=rgb(3, 47, 98)] "default_time"[/COLOR]: [COLOR=rgb(0, 92, 197)]7[/COLOR], [COLOR=rgb(106, 115, 125)]//VIP默认时长(管理员手动添加的时长(单位:天))[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "default_lizi"[/COLOR]: [COLOR=rgb(3, 47, 98)]"minecraft:arrow_spell_emitter"[/COLOR], [COLOR=rgb(106, 115, 125)]//vip默认粒子(根据MC原版的type来填写,可在PLib的lizi配置文件中复制type的配置项粘贴到这里)[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "level"[/COLOR]: { [COLOR=rgb(106, 115, 125)]// VIP等级[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "up"[/COLOR]: [COLOR=rgb(0, 92, 197)]10[/COLOR], [COLOR=rgb(106, 115, 125)]// 每日首次登陆服务器所获得的当日经验[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "down"[/COLOR]: [COLOR=rgb(0, 92, 197)]20[/COLOR], [COLOR=rgb(106, 115, 125)]//当玩家失去VIP后起,每日首次登陆服务器将会扣除所积累的经验[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(106, 115, 125)] // 每级经验与等级数量 数组内的数量表示了VIP最高等级,例如下面有5给数值表示了VIP等级最高为5级[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(106, 115, 125)] // 每个数值表示升级所需的经验,例如从1级升到2级需要300经验、2级升3级需要600经验以此类推[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(106, 115, 125)] // 1级必须为0,否则会报错[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "exp"[/COLOR]: [[/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(0, 92, 197)] 0[/COLOR],[/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(0, 92, 197)] 100[/COLOR],[/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(0, 92, 197)] 300[/COLOR],[/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(0, 92, 197)] 600[/COLOR],[/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(0, 92, 197)] 1000[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)] ]
},
[COLOR=rgb(3, 47, 98)] "daily_points"[/COLOR]: [COLOR=rgb(0, 92, 197)]10[/COLOR], [COLOR=rgb(106, 115, 125)]//每日会员玩家进入服务器增长的积分[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "custom_title_buff"[/COLOR]: [[COLOR=rgb(106, 115, 125)]//会员玩家自定义称号允许使用的BUFF(后续可在会员配置中修改)[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "absorption"[/COLOR],[/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "conduit_power"[/COLOR],[/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "haste"[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)] ]
}[/COLOR]
storedata文件
- 会员商店
- 路径: BDS/plugins/Planet/PVip/data/storedata.json
代码:
[COLOR=rgb(36, 41, 46)]{
[COLOR=rgb(3, 47, 98)] "vip"[/COLOR]: [ [COLOR=rgb(106, 115, 125)]// VIP商品[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)] {
[COLOR=rgb(3, 47, 98)] "name"[/COLOR]: [COLOR=rgb(3, 47, 98)]"1天"[/COLOR], [COLOR=rgb(106, 115, 125)]// 商品名称[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "money"[/COLOR]: [COLOR=rgb(0, 92, 197)]195[/COLOR], [COLOR=rgb(106, 115, 125)]// 商品价格[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "time"[/COLOR]: [COLOR=rgb(0, 92, 197)]1[/COLOR][COLOR=rgb(106, 115, 125)] // VIP时长[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)] }
],
[COLOR=rgb(3, 47, 98)] "lizi"[/COLOR]: [ [COLOR=rgb(106, 115, 125)]// 粒子商品[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)] {
[COLOR=rgb(3, 47, 98)] "type"[/COLOR]: [COLOR=rgb(3, 47, 98)]"minecraft:heart_particle"[/COLOR], [COLOR=rgb(106, 115, 125)]// 粒子type参数[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "money"[/COLOR]: [COLOR=rgb(0, 92, 197)]195[/COLOR][COLOR=rgb(106, 115, 125)] // 粒子价格[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "time"[/COLOR]: [COLOR=rgb(0, 92, 197)]7[/COLOR][COLOR=rgb(106, 115, 125)] // 粒子时长[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)] }
]
}[/COLOR]
vip文件
- 会员玩家数据
- 路径: BDS/plugins/Planet/PVip/data/vip.json
代码:
[COLOR=rgb(36, 41, 46)]{
[COLOR=rgb(3, 47, 98)] "SUNSServer"[/COLOR]: { [COLOR=rgb(106, 115, 125)]// 玩家名称[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "vip"[/COLOR]: [COLOR=rgb(0, 92, 197)]false[/COLOR], [COLOR=rgb(106, 115, 125)]// 玩家的VIP身份[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "lizi_switch"[/COLOR]: [COLOR=rgb(0, 92, 197)]false[/COLOR], [COLOR=rgb(106, 115, 125)]//玩家粒子开关[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "lizi_type"[/COLOR]: [COLOR=rgb(3, 47, 98)]"minecraft:heart_particle"[/COLOR], [COLOR=rgb(106, 115, 125)]// 当前使用的粒子type参数[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "level"[/COLOR]: [COLOR=rgb(0, 92, 197)]2[/COLOR], [COLOR=rgb(106, 115, 125)]// 玩家VIP等级[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "exp"[/COLOR]: [COLOR=rgb(3, 47, 98)]"29/300"[/COLOR], [COLOR=rgb(106, 115, 125)]// 玩家VIP等级经验(当前/下次升级所需)[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "integral"[/COLOR]: [COLOR=rgb(0, 92, 197)]1800[/COLOR], [COLOR=rgb(106, 115, 125)]// VIP积分(目前是购买VIP获取)[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "title"[/COLOR]: [COLOR=rgb(3, 47, 98)]"至尊VIP"[/COLOR], [COLOR=rgb(106, 115, 125)]// VIP称号[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "time"[/COLOR]: [COLOR=rgb(0, 92, 197)]null[/COLOR], [COLOR=rgb(106, 115, 125)]// VIP总时长(null为玩家不是VIP,0为永久,大于0为实际天数)[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "get_time"[/COLOR]: [COLOR=rgb(3, 47, 98)]"---"[/COLOR], [COLOR=rgb(106, 115, 125)]// 玩家获取VIP的最初时间("---"为玩家不是VIP或永久)[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "join_time"[/COLOR]: [COLOR=rgb(3, 47, 98)]"2023-3-21"[/COLOR], [COLOR=rgb(106, 115, 125)]// 玩家上次加入的日期(以每日0点为重置点,用于增加VIP等级经验)[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "black_list"[/COLOR]: [COLOR=rgb(0, 92, 197)]false[/COLOR][COLOR=rgb(106, 115, 125)] // 是否存在VIP黑名单中[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)] }
[COLOR=rgb(106, 115, 125)] //注:玩家VIP倒计时计算方式是("当前时间与玩家上次获取VIP时间的时间差"-"玩家VIP拥有的总时长")[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)]}[/COLOR]
lizi文件
- 会员玩家购买的粒子
- 路径: BDS/plugins/Planet/PVip/data/lizi.json
代码:
[COLOR=rgb(36, 41, 46)]{
[COLOR=rgb(3, 47, 98)]"SUNSServer"[/COLOR]: [[/COLOR]
[COLOR=rgb(36, 41, 46)] {
[COLOR=rgb(3, 47, 98)] "type"[/COLOR]: [COLOR=rgb(3, 47, 98)]"minecraft:heart_particle"[/COLOR], [COLOR=rgb(106, 115, 125)]// 粒子的标准名[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "time"[/COLOR]: [COLOR=rgb(0, 92, 197)]172[/COLOR], [COLOR=rgb(106, 115, 125)]// 粒子有效时间[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "get_time"[/COLOR]: [COLOR=rgb(3, 47, 98)]"2023-05-08 23:43:04"[/COLOR][COLOR=rgb(106, 115, 125)] // 首次获取粒子的时间[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)] },
{
[COLOR=rgb(3, 47, 98)] "type"[/COLOR]: [COLOR=rgb(3, 47, 98)]"minecraft:arrow_spell_emitter"[/COLOR],[/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "time"[/COLOR]: [COLOR=rgb(0, 92, 197)]18[/COLOR],[/COLOR]
[COLOR=rgb(36, 41, 46)][COLOR=rgb(3, 47, 98)] "get_time"[/COLOR]: [COLOR=rgb(3, 47, 98)]"2023-07-05 20:59:23"[/COLOR][/COLOR]
[COLOR=rgb(36, 41, 46)] }
]
}[/COLOR]
模块化
- 注意:模块是
JavaScript语言,可使用LiteLoaderBDS-LLSE或LeviLamina的LegacyScriptEngine所有的API,理论上它也可以是一个插件加载器(但不建议在PVip的模块中安装LiteLoaderBDS-LLSE或LegacyScriptEngine的插件,会导致部分功能无法使用,例如PAPI变量和接口) - 路径: BDS/plugins/Planet/PVip/module/ 下载非表单示例模块
下载表单示例模块 - 模块类型说明
[th]类型[/th][th]含义[/th][th][td]备注[/th]auxiliary[/td][td]自动运行(辅助模块)[/td][td]可以在插件加载时自动运行的模块,在此类型后面加上特殊类型参数(如:auxiliary_jl即可变更进服与离开服务器的文本)[/td] [td]main_form[/td][td]注册主表单按钮[/td][td]在插件的指令vip的表单中注册一个用于打开模块的按钮,可通过该指令的表单进入模块的表单或调用模块的逻辑[/td] [td]vip_form[/td][td]注册我的VIP表单按钮[/td][td]在插件的指令myvip的表单中注册一个用于打开模块的按钮,可通过该指令的表单进入模块的表单或调用模块的逻辑[/td] [td]store_form[/td][td]注册VIP商城按钮[/td][td]在插件的指令vipshop的表单中注册一个用于打开模块的按钮,可通过该指令的表单进入模块的表单或调用模块的逻辑[/td] [td]set_form[/td][td]注册我的VIP表单按钮[/td][td]在插件的指令vipset的表单中注册一个用于打开模块的按钮,可通过该指令的表单进入模块的表单或调用模块的逻辑[/td]
API
获取PVip插件版本
ll.import("PVip", "version")() 1- 返回值:
PVip插件版本 - 返回值类型:
String - 该接口仅在
PVip发布后开放,若使用之前的旧版本请使用ll.hasExported("PVip","version")检查函数是否被导出,否则会报错
获取指定玩家VIP数据
ll.import("PVip", "get_vip")(.[player])- 参数
- player:
Player或String或null(可选参数)玩家对象 或 玩家名称
- player:
- 返回值: 玩家VIP数据 或 VIP所有数据
- 返回值类型:
Array<VIP,VIP,...>或Object - 若获取指定玩家的VIP返回
Null则表示没有数据 - VIP数据对象属性
[th]属性[/th][th]含义[/th][th]类型[/th][th][td]vip[/td][td]VIP身份[/td][td]示范[/th]Boolean[/td][td]true[/td] [td]lizi_switch[/td][td]随身粒子开关[/td][td]Boolean[/td][td]true[/td] [td]lizi_type[/td][td]当前使用的粒子type参数[/td][td]String[/td][td]"minecraft:heart_particle"[/td] [td]level[/td][td]VIP等级[/td][td]Number[/td][td]2[/td] [td]exp[/td][td]VIP经验[/td][td]String[/td][td]"29/300"[/td] [td]integral[/td][td]VIP积分[/td][td]Number[/td][td]1800[/td] [td]title[/td][td]VIP称号[/td][td]String[/td][td]"至尊VIP"[/td] [td]time[/td][td]VIP时长[/td][td]Number或null[/td][td]1或null[/td] [td]get_time[/td][td]获取VIP时间[/td][td]String[/td][td]"2024-05-18 15:53:08"或"---"[/td] [td]join_time[/td][td]进服日期[/td][td]String[/td][td]"2024-3-17"[/td] [td]black_list[/td][td]是否存在于
VIP黑名单中[/td][td]Boolean[/td][td]false[/td]
获取指定玩家VIP身份
ll.import("PVip", "get_status")(player)- 参数
- player:
Player或String玩家对象 或 玩家名称
- player:
- 返回值: 玩家VIP身份 或 VIP所有数据
- 返回值类型:
Boolean
获取VIP玩家剩余时长
ll.import("PVip", "vip_time_left")(player)- 参数
- player:
Player或String玩家对象 或 玩家名称 - 返回值: 剩余时长(单位: 天)
- 返回值类型:
Number - 返回值为
0时表示无数据、时长为永久、不是会员
添加一个VIP
ll.import("PVip", "add_vip")(player, .[time, integral])- 参数
- player:
Player或String玩家对象 或 玩家名称 - time:
Number(可选参数)VIP时长 - integral:
Number(可选参数)VIP积分 - 返回值: 是否添加成功
- 返回值类型:
Boolean
删除一个VIP
ll.import("PVip", "del_vip")(player)- 参数
- player:
Player或String玩家对象 或 玩家名称 - 返回值: 是否删除成功
- 返回值类型:
Boolean - 执行的玩家是VIP会关闭VIP
- 执行的玩家不是VIP会删除VIP数据
添加指定玩家VIP时长
ll.import("PVip", "add_time")(player, time)- 参数
- player:
Player或String玩家对象 或 玩家名称 - time:
NumberVIP时长 - 返回值: 是否添加成功
- 返回值类型:
Boolean - 被执行时长的玩家必须是获得过VIP的玩家
- 执行后玩家当前不是VIP身份会自动开通VIP身份,类似
ll.import("PVip", "add_vip")(player)API
减少指定玩家VIP时长
ll.import("PVip", "reduce_time")(player, time)- 参数
- player:
Player或String玩家对象 或 玩家名称 - time:
NumberVIP时长 - 返回值: 是否减少成功
- 返回值类型:
Boolean - 被执行的玩家必须是获得过VIP的玩家
- 执行后玩家当前剩余时长小于被减少的时长会自动关闭VIP,类似执行一次
ll.import("PVip", "del_vip")(player)
增加指定玩家增加VIP经验
ll.import("PVip", "add_exp")(player, exp)- 参数
- player:
Player或String玩家对象 或 玩家名称 - exp:
NumberVIP经验 - 返回值: 是否添加成功
- 返回值类型:
Boolean - 被执行的玩家必须是获得过VIP的玩家
减少指定玩家VIP经验
ll.import("PVip", "reduce_exp")(player, exp)- 参数
- player:
Player或String玩家对象 或 玩家名称 - exp:
NumberVIP经验 - 返回值: 是否减少成功
- 返回值类型:
Boolean - 被执行的玩家必须是获得过VIP的玩家
增加指定玩家VIP积分
ll.import("PVip", "add_integral")(player, integral)- 参数
- player:
Player或String玩家对象 或 玩家名称 - integral:
NumberVIP积分 - 返回值: 是否添加成功
- 返回值类型:
Boolean - 被执行的玩家必须是获得过VIP的玩家
减少指定玩家VIP积分
ll.import("PVip", "reduce_integral")(player, integral)- 参数
- player:
Player或String玩家对象 或 玩家名称 - integral:
NumberVIP积分 - 返回值: 是否减少成功
- 返回值类型:
Boolean - 被执行的玩家必须是获得过VIP的玩家