Skip to content

About

兑换、购买、余额查询、NPC掉落、盲盒、职业、任务

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

黑市 (Black Market)

一个功能完善的 TShock/Terraria 服务器经济插件,集成商店、货币、职业、任务、NPC掉落五大系统。


📋 目录


✨ 功能特性

系统 功能说明
🛒 黑市商店 支持多列分页展示、盲盒抽奖、购买冷却、进度/职业限制、执行指令
💰 货币系统 多货币支持、余额查询、玩家间转账、手持物品兑换货币
⚔️ 职业系统 可配置多职业、转职奖励物品/指令、聊天前缀染色、一次转职锁定
📜 任务系统 击杀/收集双类型任务、进度追踪、职业限制、货币+物品+指令奖励
👾 NPC掉落 击杀指定NPC奖励货币、伤害参与判定、Boss高亮提示
🎯 进度检查 支持Boss进度、事件进度、NPC拯救状态的中文别名与逻辑运算

📦 安装方法

  1. 将编译后的 黑市.dll 放入服务器的 ServerPlugins 文件夹
  2. 启动服务器,插件会自动在 tshock/黑市/ 目录生成默认配置文件
  3. 按需修改配置后执行 /reload 或重启服务器

文件结构

tshock/
└── 黑市/
    ├── 黑市.json          # 商店与兑换配置
    ├── 职业.json          # 职业定义
    ├── 任务.json          # 任务模板与列表
    ├── NPC掉落.json       # NPC击杀奖励
    └── 黑市.sqlite        # SQLite 数据库

🔧 配置文件

黑市.json

{
  "购买浮动文本": true,
  "购买聊天栏文本": false,
  "兑换浮动文本": true,
  "兑换聊天栏文本": false,
  "每页显示行数": 10,
  "显示列数": 1,
  "兑换规则": [
    {
      "来源物品ID": 74,
      "来源物品名称": "铂金币",
      "目标货币": "元宝",
      "兑换比例(1个来源物品换多少目标货币)": 1
    }
  ],
  "商品模板": {
    "货币": "元宝",
    "价格": 1,
    "数量": 1,
    "前缀": 0,
    "进度": [],
    "职业": [],
    "指令": [],
    "盲盒": [],
    "冷却": 0
  },
  "商品列表": [
    {
      "名称": "生命水晶",
      "价格": 10,
      "物品": 29,
      "进度": ["肉山"]
    },
    {
      "名称": "墓碑*7",
      "价格": 10,
      "物品": 1175,
      "数量": 7
    }
  ]
}

盲盒奖励格式

{
  "盲盒": [
    { "物品": 29, "数量": 1, "权重": 50 },
    { "物品": 74, "数量": 10, "权重": 30 },
    { "物品": 58, "数量": 5, "权重": 20 }
  ]
}

⚠️ 带指令的商品每次限购 1 个。


职业.json

{
  "默认职业名称": "入门",
  "职业列表": [
    {
      "名称": "入门",
      "描述": "初始职业,可转职为其他职业。",
      "颜色": "AAAAAA",
      "可转职": true,
      "转职奖励物品": [],
      "转职执行指令": []
    },
    {
      "名称": "战士",
      "描述": "擅长近战攻击。",
      "颜色": "FF5555",
      "可转职": false,
      "转职奖励物品": [],
      "转职执行指令": []
    },
    {
      "名称": "法师",
      "描述": "擅长魔法攻击。",
      "颜色": "AA66FF",
      "可转职": false,
      "转职奖励物品": [
        { "物品ID": 3069, "数量": 1, "前缀": 0 }
      ],
      "转职执行指令": []
    }
  ]
}
字段 说明
颜色 6 位十六进制颜色码,影响聊天前缀颜色
可转职 true 表示可从该职业转出;false 表示锁定
转职奖励物品 转职时自动给予的物品列表
转职执行指令 转职时以服务器身份执行的指令

💡 玩家聊天时会自动显示 [职业名] 玩家名: 内容 的格式,并应用职业颜色。


任务.json

{
  "任务完成浮动文本": true,
  "任务完成聊天栏文本": true,
  "最大接取数量": 5,
  "任务模板": {
    "任务类型(0=击杀,1=获取物品)": 0,
    "目标数量": 1,
    "进度条件": "",
    "允许职业": [],
    "货币奖励": [],
    "物品奖励": [],
    "执行指令": []
  },
  "任务列表": [
    {
      "序号": 1,
      "名称": "击杀史莱姆",
      "描述": "击杀任意史莱姆累计10只",
      "目标ID": 1,
      "目标数量": 10,
      "货币奖励": [
        { "货币名": "元宝", "数量": 100 }
      ]
    },
    {
      "序号": 2,
      "名称": "获取木材",
      "描述": "收集50个木材",
      "目标ID": 9,
      "任务类型(0=击杀,1=获取物品)": 1,
      "目标数量": 50,
      "物品奖励": [
        { "物品ID": 29, "数量": 1, "前缀": 0 }
      ]
    }
  ]
}

任务字段说明

字段 类型 说明
任务类型 enum 0=击杀, 1=获取物品
目标ID int 击杀填 NPC ID,收集填物品 ID
目标数量 int 完成所需数量
进度条件 string 接取前置进度要求(如 "肉山")
允许职业 string[] 可接取该任务的职业白名单
货币奖励 object[] { "货币名": "", "数量": 0 }
物品奖励 object[] { "物品ID": 0, "数量": 1, "前缀": 0 }
执行指令 string[] 提交时执行,支持 {0} / {} 占位符

📝 获取物品任务会实时检测背包数量;击杀任务在 NPC 死亡时结算(需造成伤害)。

🔢 序号在保存时会自动按列表顺序重新编排为连续整数,服主只需排列顺序即可。


NPC掉落.json

{
  "击杀浮动文本": true,
  "击杀聊天栏文本": true,
  "掉落规则": [
    {
      "NPCID": 4,
      "NPC名称": "克苏鲁之眼",
      "货币名称": "功勋",
      "掉落数量": 10
    },
    {
      "NPCID": 1,
      "NPC名称": "史莱姆",
      "货币名称": "声望",
      "掉落数量": 3
    }
  ]
}
字段 说明
NPCID NPC 的 netID
NPC名称 显示名称,支持自定义
货币名称 奖励的货币类型
掉落数量 每个参与击杀的玩家获得的数量

💡 只有对 NPC 造成过伤害的玩家才会获得奖励。掉落数 ≥ 5 或是 Boss 时会在聊天栏提示。


⌨️ 指令列表

玩家指令

指令 参数 说明
/黑市 [页码] 查看商品列表
/购买 <序号> [数量] 购买指定商品
/兑换 [数量] 将手持物品兑换为货币
/余额 - 查看所有货币余额
/转账 <玩家名> <货币名> <数量> 向其他玩家转账
/转职 [职业名] 查看职业列表或转职
/任务 - 查看任务列表与状态
/接取 <序号> 接取指定任务
/提交 <序号> 提交已完成任务领取奖励
/放弃 <序号> 放弃已接取的任务

管理指令

指令 参数 说明
/添加货币 <玩家名> <货币名> <数量> 给玩家增加货币
/扣除货币 <玩家名> <货币名> <数量> 扣除玩家货币
/设置货币 <玩家名> <货币名> <数量> 设置玩家货币为指定值
/查询余额 <玩家名> 查询指定玩家所有货币
/重置职业 <玩家名> 将玩家职业重置为默认
/任务重置 <玩家名> <序号> 重置玩家指定任务进度

🔐 权限节点

黑市.使用          → /黑市
黑市.购买          → /购买
黑市.兑换          → /兑换
黑市.余额          → /余额
黑市.转账          → /转账
黑市.转职          → /转职
黑市.任务          → /任务
黑市.接取任务      → /接取
黑市.提交任务      → /提交
黑市.放弃任务      → /放弃
黑市.管理.添加货币  → /添加货币
黑市.管理.扣除货币  → /扣除货币
黑市.管理.设置货币  → /设置货币
黑市.管理.查询余额  → /查询余额
黑市.管理.重置职业  → /重置职业
黑市.管理.重置任务  → /任务重置

🎯 进度条件

进度条件用于限制商品购买、任务接取等场景,支持以下中文别名:

别名 对应游戏进度
克眼 / 克苏鲁之眼 downedBoss1
克脑 / 世吞 / 世界吞噬者 downedBoss2
骷髅王 downedBoss3
肉山 / 肉后 / 困难模式 hardMode
蜂王 / 蜂后 downedQueenBee
史莱姆王 / 史王 downedSlimeKing
一王后 / 任意机械Boss downedMechBossAny
毁灭者 downedMechBoss1
双子魔眼 downedMechBoss2
机械骷髅王 downedMechBoss3
世纪之花 / 花后 / 世花 downedPlantBoss
石巨人 / 石后 downedGolemBoss
邪教徒 / 拜月教邪教徒 downedAncientCultist
月亮领主 / 月总 downedMoonlord
哥布林入侵 downedGoblins
雪人军团 downedFrost
海盗入侵 downedPirates
火星入侵 downedMartians
专家模式 expertMode
税收官 savedTaxCollector
哥布林工匠 savedGoblin
巫师 savedWizard
机械师 savedMech
渔夫 savedAngler
发型师 savedStylist
酒馆老板 savedBartender

逻辑运算符

  • & — 逻辑与(肉山&花后)
  • | — 逻辑或(克眼|克脑)
  • ! — 逻辑非(!肉山)

也支持直接使用英文字段名,如 downedMoonlord。


🗄️ 数据库结构

SQLite 数据库位于 tshock/黑市/黑市.sqlite,包含以下表:

黑市货币

字段 类型 说明
玩家名 TEXT 主键1
货币名 TEXT 主键2
数量 INTEGER 默认 0

黑市冷却

字段 类型 说明
玩家名 TEXT 主键1
商品序号 INTEGER 主键2
结束时间 TEXT yyyy-MM-dd HH:mm:ss

黑市职业

字段 类型 说明
玩家名 TEXT 主键
当前职业 TEXT 默认 "入门"

黑市任务

字段 类型 说明
玩家名 TEXT 主键1
任务序号 INTEGER 主键2
状态 INTEGER 0=未接取, 1=进行中, 2=已完成, 3=已提交
进度 INTEGER 默认 0

🏗️ 代码架构

黑市/
├── 黑市.cs              # 插件入口,命令路由,聊天染色
├── 配置类.cs            # 黑市配置、商品、兑换规则定义
├── 货币数据.cs          # SQLite 数据库访问层(线程安全)
├── 职业系统.cs          # 职业切换、奖励发放、权限检查
├── 职业配置.cs          # 职业 JSON 配置加载与验证
├── 任务系统.cs          # 任务进度追踪、提交、奖励发放
├── 任务配置.cs          # 任务 JSON 配置加载、验证、自动序号编排
├── 掉落处理器.cs        # NPC 伤害记录、击杀结算、任务联动
├── NPC掉落配置.cs       # NPC 掉落 JSON 配置加载与验证
└── 进度映射器.cs        # Terraria 进度字段的中文别名映射与表达式解析

关键设计

  • 线程安全:数据库操作使用 lock 保证并发安全;配置读取使用 ReaderWriterLockSlim。
  • 配置热重载:支持 /reload 实时重载所有子配置,错误会汇总报告。
  • 指令执行:商品/任务/职业中的指令支持 {0} 和 {} 占位符替换玩家名;购买指令会临时提升为超级管理员权限执行,绕过权限检查。
  • 伤害参与判定:NPC 掉落奖励仅发放给实际造成过伤害的玩家,通过 NpcStrike 钩子记录。
  • 自动序号:任务列表保存时自动重排为连续序号,降低服主维护成本。

📄 License

MIT License © Mni Shark

About

兑换、购买、余额查询、NPC掉落、盲盒、职业、任务

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages