- 支持核心
- Paper
- 原创/转载
- 原创
- 作者
- 秋华
- 前置
- 可选: NeigeItems、ItemSpace、Vault、PlayerPoints、KetherFactory
- 支持版本
- 1.20.1
SimpleShop
简单商店
一款商店插件 可以实现购买或兑换功能
功能列表
- ItemSpace兼容 能够实现检查空间物品扣除
- 每种商店支持不同的ui
- 定期刷新
- 购买上限
- 随机商品
指令
[]为必填 <>为可选- /SimpleShop reload [权限: SimpleShop.reload] 重新加载全部配置文件
- /SimpleShop open [商店id] <玩家名字> [权限: SimpleShop.open.商店id] 打开一个指定商店
配置文件
YAML:
Debug: true
#每次发包时发送的物品数量 也可以理解成一页中显示的数量
DisplayItemAmount: 6
#ItemSpace兼容
ItemSpace:
#是否启用
enable: false
#需要这个权限才扣除仓库物品 否则扣除背包的
permissions: RoleSystem.ItemSpace
#检查的仓库 留空则在全部仓库查询
ItemSpaceId: "普通仓库"
#在ui内相应的操作会触发 SimpleShopMessage 这个包 包的内容是返回相应的文本 支持papi解析
#<amount>是购买数量
#<item> 商品名称
#<permission> 权限名称
#<money> 需要的钱
#<points> 需要的点券
Message:
switchShop: "你无权切换到此商店" #当使用切换商店包时
moneyLack: "购买 <item> X <amount> 失败,缺少经济<money>"
pointsLack: "购买 <item> X <amount> 失败,缺少点券<points>"
itemLack: "购买 <item> X <amount> 失败,缺少所需材料"
permissionLack: "购买 <item> X <amount> 失败,缺少所需权限<permission>"
successBuy: "成功购买 <item> X <amount>"
playerBuyAmountMax: "购买次数达到上限"
#数据库
Database:
type: sqlite #sqlite或者mysql mysql才需要配置下面的部分
dataBaseName: SimpleShop #数据库名称
username: root #账户名称
password: root #密码
port: 3306 #端口
ip: 127.0.0.1 #ip
autoSave: 15 #自动保存间隔 分钟
loadDelay: 40 #加载延迟tick
Shop为商店文件夹商店名字是配置名称
YAML:
#这个商店使用的Ui主题
UiTheme: "示例商店ui"
#自定义的信息传递 ax那边使用该节点名称即可获取 支持papi解析 解析对象为查看者
# 内置的参数名称
# pages 当前页数
# pagesMax 最大页数
Packet:
title: "示例商店"
# 商店类型
# Player 以玩家为单位存储的商店 即为商品和购买次数玩家独立
# World 以世界为单位存储的商店 即为商品和购买次数世界独立
ShopType: "Player"
# 这个商店的刷新周期 DAILY每天刷新(过午夜) WEEKLY每周刷新(周日到周一) MONTHLY每月刷新(跨月)
# World类型的商店 是没有持久化存储的 他的数据在世界卸载或者关服时就删除了 刷新周期也是无效
RefreshCycle: "DAILY"
#商品列表
Shelves:
示例商品1:
#自定义的信息传递 支持papi解析 解析对象为查看者
# 内置的参数名称
# isBuy 是否满足购买需求
# goodsId 商品的id
# buyAmount 玩家剩余可购买次数
# buyAmountMax 可以购买的次数
packet:
title: "这是一个示例商品1 100%刷新"
# 允许购买的次数 -1是无限
buyAmountMax: 2
# 这个物品出现的概率 1=100%
probability: 1
#展示物品 均不支持papi解析
displayItem:
name: 展示品1 #物品名称
material: PAPER #物品材质 如果填写 NeigeItems 则使用物品名称对应的ni物品库物品 并且下面的一些物品参数均可移除
model: -1 #模型数据 -1不使用
lore: #描述列表
amount: #显示的数量
textura: #如果物品材质为 PLAYER_HEAD 这里则指定头颅材质
#这个条件支持原版的物品材质类型 需要全大写 优先检查材质 其次才是名字
#money为经济
#points为点券
#permission为权限
condition:
- "&f测试掉落物1::2"
- "&f测试掉落物2::10"
- "money::1000"
#展示需要的物品
displayNeedItem:
经济:
name: 需要经济X1000
material: PAPER
model: -1
lore:
amount: 1
测试掉落物1:
name: 测试掉落物1
material: PAPER
model: -1
lore:
amount: 5
测试掉落物2:
name: 测试掉落物2
material: PAPER
model: -1
lore:
amount: 10
#购买成功后执行的动作列表 安装KetherFactory后则是执行ke动作列表 否则执行控制台命令 支持papi解析 解析对象为购买者 <value>会解析成数量
actions:
- tell "%player_name% 成功购买<amount>个示例商品1"
#失败时执行的
deny:
- tell "%player_name% 购买<amount>个示例商品1失败"
示例商品2:
packet:
title: "这是一个示例商品2 50%刷新"
buyAmountMax: 10
probability: 0.5
displayItem:
name: 展示品2
material: PAPER
model: -1
lore:
amount:
textura:
condition:
- "&f测试掉落物1::2"
- "&f测试掉落物2::10"
- "money::1000"
displayNeedItem:
经济:
name: 需要经济X1000
material: PAPER
model: -1
lore:
amount: 1
测试掉落物1:
name: 测试掉落物1
material: PAPER
model: -1
lore:
amount: 5
测试掉落物2:
name: 测试掉落物2
material: PAPER
model: -1
lore:
amount: 10
actions:
deny:
示例商品3:
packet:
title: "这是一个示例商品3 20%刷新"
buyAmountMax: 10
probability: 0.5
displayItem:
name: 展示品3
material: PAPER
model: -1
lore:
amount:
textura:
condition:
- "&f测试掉落物1::2"
- "&f测试掉落物2::10"
- "money::1000"
displayNeedItem:
经济:
name: 需要经济X1000
material: PAPER
model: -1
lore:
amount: 1
测试掉落物1:
name: 测试掉落物1
material: PAPER
model: -1
lore:
amount: 5
测试掉落物2:
name: 测试掉落物2
material: PAPER
model: -1
lore:
amount: 10
actions:
deny:
图片中的配置下载地址
通过网盘分享的文件:插件示例配置.zip
链接: https://pan.baidu.com/s/1ZDBTU8FEhgZjB-qs8qdY-A?pwd=856h 提取码: 856h
UI收发包说明
SimpleShopMessagePacket是当前界面获取的消息
里面一般只有一个参数 meg 即为消息内容
SimpleShopPacket在商店打开或者刷新时的包
内置参数 pages 当前页数 pagesMax 最大页数
同时包含商店配置内的Packet内容
SimpleShopGoodsItemPacket在商店打开或者刷新时的包
key是商品名称 value是这个物品显示的槽位id
实际上这个包并不是必须使用的 你可以手动设置槽位 槽位id是 SimpleShopGoodsItemSlot_0 开始 每有一个商品 结尾数字+1 你可以直接提前配置好相应数量的槽位来展示物品
SimpleShopGoodsNeedPacket当你发送了商品包后会收到的包
内置参数 isBuy 是否满足购买需求 goodsId 商品的id buyAmount 玩家剩余可购买次数 buyAmountMax 可以购买的次数 同时包含商品配置内的Packet内容
SimpleShopGoodsNeedItemPacket当你发送了商品包后会收到的包
他的内容是需求物品 key是显示物品的槽位id value是数量
实际上这个包并不是必须使用的 你可以手动设置槽位 槽位id是 SimpleShopGoodsNeedItemSlot_0 开始 每有一个需求物品 结尾数字+1 你可以直接提前配置好相应数量的槽位来展示物品
里面一般只有一个参数 meg 即为消息内容
SimpleShopPacket在商店打开或者刷新时的包
内置参数 pages 当前页数 pagesMax 最大页数
同时包含商店配置内的Packet内容
SimpleShopGoodsItemPacket在商店打开或者刷新时的包
key是商品名称 value是这个物品显示的槽位id
实际上这个包并不是必须使用的 你可以手动设置槽位 槽位id是 SimpleShopGoodsItemSlot_0 开始 每有一个商品 结尾数字+1 你可以直接提前配置好相应数量的槽位来展示物品
SimpleShopGoodsNeedPacket当你发送了商品包后会收到的包
内置参数 isBuy 是否满足购买需求 goodsId 商品的id buyAmount 玩家剩余可购买次数 buyAmountMax 可以购买的次数 同时包含商品配置内的Packet内容
SimpleShopGoodsNeedItemPacket当你发送了商品包后会收到的包
他的内容是需求物品 key是显示物品的槽位id value是数量
实际上这个包并不是必须使用的 你可以手动设置槽位 槽位id是 SimpleShopGoodsNeedItemSlot_0 开始 每有一个需求物品 结尾数字+1 你可以直接提前配置好相应数量的槽位来展示物品
Packet.send('SimpleShop', 'switchShop', '商店名称')
切换商店包 会切换到指定商店
Packet.send('SimpleShop', 'prevPage')
prevPage是翻页包 是上一页
Packet.send('SimpleShop', 'nextPage')
nextPage是翻页包 是下一页
Packet.send('SimpleShop', 'giveGoodsInfo', 商品id)
获取一个商品信息
Packet.send('SimpleShop', 'buyGoods', var.当前选中商品id, "数量")
购买商品包
切换商店包 会切换到指定商店
Packet.send('SimpleShop', 'prevPage')
prevPage是翻页包 是上一页
Packet.send('SimpleShop', 'nextPage')
nextPage是翻页包 是下一页
Packet.send('SimpleShop', 'giveGoodsInfo', 商品id)
获取一个商品信息
Packet.send('SimpleShop', 'buyGoods', var.当前选中商品id, "数量")
购买商品包