跳转至主要内容
Ctrl+K
新月杀  文档 - Home 新月杀  文档 - Home
  • 关于FreeKill
    • Changelog
    • 向文档做出贡献
  • 写给玩家
    • 快速上手
    • 加入服务器
    • 大厅说明
    • 创建房间
    • 禁将设置
    • 进房游玩
    • 录像相关说明
    • 资源包说明
    • 参与交流
    • 常见疑问
  • 写给拓展主
    • 创建新月杀拓展
    • 创建资源包
    • 新月杀拓展中的一些用语
    • 写给初次接触Lua语言的玩家
      • 1. Lua:开始编程吧
      • 2. Lua:变量与简单的数据类型
      • 3. Lua: if语句
      • 4. Lua:列表
      • 5. Lua:循环
      • 6. Lua:表
      • 7. Lua:函数
    • 新月杀拓展之书
      • 1. 开发环境准备
      • 2. 创建拓展包与新武将
      • 3. 添加技能
      • 4. 武将美化
      • 5. 创建一个新技能
      • 6. 添加音效
      • 7. 发布与更新自己的拓展吧
      • 8. 添加提示信息
      • 9. 修改距离
      • 10. 技能管理
      • 11. 体力变更
      • 12. 游戏进程
      • 13. 新月杀标记/技能名格式整理
      • 14. 技巧:调试您的代码
      • 15. 解析:事件栈
      • 16. 解析:Exppattern
      • 17. 拓展规范文档
    • 新月杀结算说明
      • 1. 技能及其生效事件
      • 2. 技能本体与技能效果
      • 4. 事件与时机
      • 5. 移动牌
      • 6. 游戏流程相关
      • 7. 使用与打出
      • 8. 体力值相关事件
      • 9. 濒死与死亡
      • 10. 判定与拼点
      • 11. 特殊状态改变
      • 12. 常见村规结算一览
    • 未分类的文档
      • AI方案设计
      • 游戏&子模式自定义config
      • 标记与banner的使用
      • 皮肤拓展
      • 关于Task
      • Lua和QML的联动相关
    • API参考
      • Module core
        • Class AbstractRoom
        • Class Card
        • Class Engine
        • Class GameMode
        • Class General
        • Class Package
        • Class Player
        • Class Skill
      • Module server
        • Class Room
        • Class Request
        • Class GameEvent
        • Class GameEventWrappers
        • Class GameLogic
        • Class ServerPlayer
  • 写给新桌游开发者
    • 象棋#1 定义静态数据
    • 象棋#2 定义动态数据
    • 象棋#3 编写游戏逻辑
    • 象棋#4 实现客户端与UI
    • 象棋#5 投子与提和
    • 象棋#6 汇总到一起
    • 速通QML基础知识
  • 写给服主
    • Linux介绍系列
      • Linux简介
      • 操练:使用vmware安装Linux虚拟机
      • 操练:Linux的基本使用
      • 操练:Linux的更多基本使用
      • 操练:启动新月杀服务器
    • 搭建FreeKill服务器
    • 服务器配置文件说明
    • 服务端保存的数据
    • 服务器的管理
    • 关于ipv6开服
    • 操练:见习服主
  • 写给开发者
    • 关于开发组
    • 开发组常见用语
    • 编译FreeKill
      • Windows
      • Linux (桌面版)
      • Linux (服务端)
      • MacOS
      • Android
    • 网络通信协议
    • 关于Task
    • freekill-asio
      • 以静态链接方式编译
      • 内存安全性
      • Room
      • Player
    • FreeKill
      • QML重构
      • 关于创建新类型桌游
  • .rst

标记与banner的使用

目录

  • 概念与基本的读写
  • 标记或Banner的显示
  • 卡牌的标记
  • QML标记
  • 有特殊功能的标记
    • 自动清理类

标记与banner的使用#

这位是FreeKill项目的通用概念,用于为角色、房间附加各种信息。 不过本文将针对三国杀中mark的行为,对此进行叙说。

用好标记功能,可以实现非常非常多的功能,说本游戏靠标记撑起来也不为过。

概念与基本的读写#

标记(Mark)如同三国杀中角色的标记概念,但和技能描述中保存一个数值不同, 在FreeKill中还可以保存字符串、布尔、列表乃至几乎任何值 (严格来说,所有可以被编码为cbor的值,放入不合条件的值的话会产生报错)。

banner(横幅?不知道为什么会如此命名)则是对标记的拓展,可以理解为这是附着在房间上的、 本局游戏的全局标记。

标记和Banner的读取:

player:getMark(key)
room:getBanner(key)

由于历史原因(致敬太阳神三国杀导致的),当读取mark时,如果不存在该mark(即为nil)的话, getMark 会返回0而不是nil。而getBanner在这种情况下会返回nil。

当读取时,player可以是客户端或服务端。room可以是服务端Room或者客户端Client。

标记和banner的修改:

room:setPlayerMark(player, key, value)
room:setBanner(key, value)

修改标记或Banner只能在服务端执行。一样的,由于历史原因,把角色的标记设为0的话会导致标记实际上被设为nil。

标记或Banner的显示#

在三国杀中,标记和Banner在UI上的显示与交互逻辑是完全一致的,所以以下只讨论mark。

受太阳神三国杀影响,标记会根据 key 中是否有一些奇奇怪怪的前缀来决定如何显示。 一个大前提是,如果key是以 @ 字符开头的,那么它是一个UI上可见的标记,否则就是隐藏标记。 @ 这个字符看起来也有点像一个圆圆的标记啊。

在太阳神三国杀中标记必须是一张图片(至少2015版如此)。新月杀中标记则默认是文字标记了, 因为我真的受够了每加一类标记全都要做一张图的感觉。以下是对各种前缀的汇总:

  • 只有一个 @:普通标记。标记的值可以是数字、字符串、列表。若为字符串,则会被翻译。 若为字符串列表,则会被翻译之后再通过空格连接起来。若为其他的类型。。自己试试吧,好像默认走toString了。 我的建议是给这类普通标记就使用这里提到的普通类型。

  • @@:简单标记。以这个前缀开头的标记什么都不显示,只显示标记名。 常见于铁骑之类只需要标记一下状态的技能。

  • @$:卡牌标记。标记的值可以是数字列表(卡牌id列表)或字符串列表(牌名列表)。 它在界面上显示数量(即列表长度),用户点击该标记后弹出一个框,显示具体卡牌。

  • @&:武将牌标记。标记的值是字符串列表(武将name列表)。行为类似卡牌标记。

  • @!:图片标记,适合怀念神杀之人或者单纯想要图片标记时。有点麻烦,一般不建议用。 顺便图片素材的路径在 <package_root>/image/mark 下,图片文件的文件名也要带前缀。

  • @!!:带描述的图片标记,有悬浮窗提示标记功能。请参考已有例子吧。

  • @[xxx]:QML标记。不知道为什么会这样取名,实际上就是可以自定义标记值显示格式, 以及点击后弹出何种对话框的标记。适用于比较复杂的场景,具体创建和使用的方法后文叙述。

banner的相关前缀同上。

卡牌的标记#

在三国杀中由于实践上的需要,卡牌也可以附加标记,所谓cardMark。

待处理

懒得写了,待补

QML标记#

待处理

懒得写了,待补

有特殊功能的标记#

结合实践经验,开发者们为相当常用的功能定义了一些特殊标记,一共有两种:

  • 预定义好的特殊标记

  • 名字中带有特定后缀的标记

下面罗列一下游戏中预定义的后缀类型,至于实际使用例遍地都是~

自动清理类#

下面几个后缀适用于角色标记、卡牌标记、Banner。

  • -phase:阶段结束时清理此标记

  • -turn:回合结束时清理此标记

  • -round:轮次结束时清理此标记

下面几个后缀适用于卡牌标记

  • -inhand:卡牌离开手牌区时清理

待处理

懒得写了,待补

上一页

游戏&子模式自定义config

下一页

皮肤拓展

目录
  • 概念与基本的读写
  • 标记或Banner的显示
  • 卡牌的标记
  • QML标记
  • 有特殊功能的标记
    • 自动清理类

作者: Qsgs-Fans

© Copyright 2025, Qsgs-Fans.

最后更新于 2026-05-18 20:37:01.