真实项目游戏系统实战记录:羁绊派系计数系统(一)
最近正在开发一个PC游戏的羁绊计数系统和《金铲铲之战》的羁绊计数逻辑相似。玩家获得特定派系羁绊达一定数量时对应派系羁绊效果激活反之失效。本文是该系统的第一部分本文谈这些系统的功能需求基础系统骨架系统逻辑流程处理计数变化并将变化通知到业务脚本相关实战代码文章目录1. 基础支持计数的储存和变化检测2. 计数变化状态的更新计数效果的开启和关闭小结这个系统要实现这些功能计数效果的激活、失活计数文本状态的更新激活的为亮色未激活的为暗色计数效果的阈值节点动态更新派系图标的显示实际已获得的计数数量显示鼠标悬浮Tips文本显示以上效果对每个玩家各自独立运行这个系统所处的上下文环境多人游戏单局制实时战斗基于这些条件我们逐步整理思路。1. 基础支持计数的储存和变化检测首先根据已有的需求我们确定这个系统是一个客户端系统只需要全程在客户端进行处理。同时这个系统是每个玩家数据各自独立的因此该系统必须持有玩家状态的引用。计数存到哪里我们要开发一个能对比计数变化并动态反应的系统自然涉及到计数数据的储存。数据变化时要确保系统能识别到变化。我们需要两处数据储存位置玩家状态数据未经过处理的计数状态外部的脚本和游戏内的互动均直接操作玩家状态数据。系统内部状态数据已经经过变化处理的计数状态。计数变化的更新方式我们必须能够在游戏过程中动态检测流派计数的实时状态这天然地有两种方案任意计数变化时立即处理变化周期间隔时间处理变化在我当前负责的这个项目中游戏不需要特别实时的羁绊计数更新频率在这里我可以采用方案2直接给定一个计时器每1秒获取一次羁绊计数对比缓存中的计数后处理变化。综上我们已经确定数据怎样储存怎样检测变化。现在我们可以着手整理系统的基本骨架。骨架流程我们按照系统需求整理出基本的逻辑流程。骨架脚本-- 流派羁绊系统---class FBS : ObjectlocalFBSoop.class()---注册系统functionFBS:__init(plr)self._plrplrend---初始化系统functionFBS:setup()---流派计数缓存---type { [string]: integer }self._bonds{}-- 创建每1秒计时器self._updaterTimer.StartLoop(1,function()self:update()end)end---获取羁绊计数缓存值functionFBS:get_bond(key)returnself._bonds[key]or0end---设置羁绊计数缓存值functionFBS:set_bond(key,value)self._bonds[key]valueend---检测到羁绊计数变化functionFBS:on_bond_change(key,new_val)localold_valself:get_bond(key)localdeltanew_val-old_val--TODO ... 处理变化传播逻辑-- 更新缓存self:set_bond(key,new_val)end---检测一次变化functionFBS:update()localplr_bondsself._plr:get_bonds()-- 假设玩家类存在该方法获取实时计数状态fork,vinpairs(plr_bonds)doifself:get_bond(k)~vthenself:on_bond_change(k,v)endendend---注销系统functionFBS:remove()self._updater:remove()self._updaternilself._bondsnilself._plrnilend2. 计数变化状态的更新计数效果的开启和关闭在上1节中我们已经搭建好了检测变化的系统骨架现在我们的系统已经具备了获取计数变化并更新缓存的能力。为了让系统能真正影响游戏逻辑效果我们还需要这个系统能够和游戏脚本交互。假设我们有这样的游戏脚本逻辑-- 剑修-2每1秒增加1点攻击力GameScript.Bond[剑修-2]{-- 开启效果on_openfunction(plr,ctx)ctx.timerTimer.StartLoop(1,function()plr:setAttr(攻击力,plr:getAttr(攻击力)1)end)end,-- 关闭效果on_closefunction(plr,ctx)ctx.timer:remove()end,}GameScript.Bond[剑修-4]...GameScript.Bond[剑修-6]...GameScript.Bond[剑修-8]...现在我们需要通过我们的羁绊计数系统对其进行管理实现上1节中未完成的部分。我们需要预设各流派的激活节点并在计数变化时进行一次状态更新并调用相关的脚本。FBS.ActivatePoints{[剑修]{2,4,6,8}}functionFBS:setup()-- ... 原有代码---各节点激活状态---type { [string]: { [integer]: boolean? } }self._activate_states{}end---动态为 activate_states 分配必要的子项functionFBS:protect_activate_state(key,point)-- 确保只处理被注册了解锁节点的部分ifnottable.find(FBS.ActivatePoints[key],point)thenreturnfalseendifnotself._activate_states[key]thenself._activate_states[key]{}endreturntrueend---设置羁绊计数节点的解锁状态缓存functionFBS:set_activate_state(key,point,new_state)ifnotself:protect_activate_state(key,point)thenreturnendself._activate_states[key][point]new_stateend---处理羁绊计数节点的解锁状态functionFBS:process_activate_state(key,point,new_state)ifnotself:protect_activate_state(key,point)thenreturnendlocalold_stateself._activate_states[key][point]ifold_statenew_statethenreturnendself._activate_states[key][point]new_state self:call_script(key,point,new_statetrueandon_openoron_close)end---调用羁绊计数效果脚本functionFBS:call_script(key,point,method_name)localscript_keystring.format(%s-%s,key,point)localscript_bodyGameScript.Bond[script_key]ifscript_bodythenlocalmethodscript_body[method_name]ifmethodthen---假设存在一个方法用于通过唯一string KEY获取一个table用于bond脚本储存临时数据---type tablelocalctxself._plr:get_ctx(FBS-..script_key)method(self._plr,ctx)-- 如果调用的是失活逻辑运行完脚本后回收上下文表ifmethod_nameon_closethenself._plr:remove_ctx(FBS-..script_key)endendendend---检测到羁绊计数变化functionFBS:on_bond_change(key,new_val)localold_valself:get_bond(key)localdeltanew_val-old_val-- 处理变化传播逻辑逐节点处理localdire1ifnew_valold_valthendire-1endforiold_val,new_val,diredoself:process_activate_state(key,i,dire1)end-- 更新缓存self:set_bond(key,new_val)end小结数据部分我们是如何处理的我们将玩家的实时数据直接储存到玩家状态本身这个状态属于外部。我们在系统内周期性检测外部状态变化并更新我们系统内部的状态。我们如何处理计数节点状态我们使用self._activate_states以KEY 节点的方式储存每一个流派的每一个计数节点的开启/关闭状态。在发现数据变化时我们通过检查缓存中的节点状态确认某个节点是否产生变化。以此确保我们只响应产生变化的部分无变化的部分则跳过逻辑。我们如何设计业务脚本羁绊效果的业务脚本本质上是一系列开关脚本。我们在对应节点进入开启状态时调用on_open逻辑。而在进入关闭状态时我们调用on_close逻辑。后续谈什么在第二部分中我们会讨论如何让这个系统和UI交互确保能够正确渲染UI文本和Tips相关数据。

相关新闻

基于ddddocr与BurpSuite的验证码自动化识别与绕过实战

基于ddddocr与BurpSuite的验证码自动化识别与绕过实战

1. 项目概述与核心价值 在渗透测试和Web应用安全评估中,登录、注册、找回密码等关键功能点前的验证码,常常是自动化攻击(如暴力破解、撞库)的主要防线。传统的BurpSuite Intruder模块虽然功能强大,但在面对图形验证码时…

2026/8/7 6:46:11 阅读更多 →
Prompt Engineering与Context Engineering:AI后端架构中的核心差异与协同实践

Prompt Engineering与Context Engineering:AI后端架构中的核心差异与协同实践

如果你正在准备2026年的大厂AI后端面试,或者正在设计一个基于大模型的智能应用,那么“Prompt Engineering”和“Context Engineering”这两个词一定高频出现。很多人以为它们只是“写提示词”和“管理上下文”的文字游戏,甚至觉得后者只是前者…

2026/8/7 14:53:37 阅读更多 →
每日财经知识:博格公式选股——一个公式,筛出能长期持有的好公司(基于:TuShare API)

每日财经知识:博格公式选股——一个公式,筛出能长期持有的好公司(基于:TuShare API)

原创 | 来自北方狼 StockStudy园地 | 2026年8月5日 17:41 重庆前置说明:如需要下载本文代码(共有 360M 左右,基础数据),请大家关注微信公众号:“StockStudy园地” 后台回复: 回复:基…

2026/8/7 8:44:04 阅读更多 →

最新新闻

Unity URP渲染管线入门:从核心原理到项目实战配置指南

Unity URP渲染管线入门:从核心原理到项目实战配置指南

1. 项目概述:为什么URP是Unity开发者的新起点如果你最近打开Unity Hub准备新建一个项目,可能会发现一个明显的变化:在渲染管线的选择上,除了经典的“内置渲染管线”,一个名为“通用渲染管线”的选项被放在了更显眼的位…

2026/8/7 18:12:49 阅读更多 →
华硕笔记本终极轻量控制指南:5步掌握G-Helper高效管理

华硕笔记本终极轻量控制指南:5步掌握G-Helper高效管理

华硕笔记本终极轻量控制指南:5步掌握G-Helper高效管理 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Ex…

2026/8/7 18:12:49 阅读更多 →
Solidity By Example项目概览:一站式掌握以太坊智能合约开发核心

Solidity By Example项目概览:一站式掌握以太坊智能合约开发核心

Solidity By Example项目概览:一站式掌握以太坊智能合约开发核心 【免费下载链接】solidity-by-example.github.io Solidity By Example 项目地址: https://gitcode.com/gh_mirrors/so/solidity-by-example.github.io Solidity By Example是一个专注于以太坊…

2026/8/7 18:12:49 阅读更多 →
如何用G-Helper解决华硕笔记本性能管理臃肿问题?轻量级终极方案指南

如何用G-Helper解决华硕笔记本性能管理臃肿问题?轻量级终极方案指南

如何用G-Helper解决华硕笔记本性能管理臃肿问题?轻量级终极方案指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook…

2026/8/7 18:12:49 阅读更多 →
PoeCharm中文版:流放之路终极BD规划器,三步打造完美角色

PoeCharm中文版:流放之路终极BD规划器,三步打造完美角色

PoeCharm中文版:流放之路终极BD规划器,三步打造完美角色 【免费下载链接】PoeCharm Path of Building Chinese version 项目地址: https://gitcode.com/gh_mirrors/po/PoeCharm 还在为《流放之路》复杂的角色构建而烦恼吗?PoeCharm作为…

2026/8/7 18:12:49 阅读更多 →
G-Helper终极指南:如何用10MB轻量工具完全掌控华硕笔记本性能

G-Helper终极指南:如何用10MB轻量工具完全掌控华硕笔记本性能

G-Helper终极指南:如何用10MB轻量工具完全掌控华硕笔记本性能 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenb…

2026/8/7 18:11:48 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →