Skip to main content

领地、物资搬运与掠夺

本页于 2026-10-15 整合现有功能稿、飞书内容及客户端 origin/develop@7f0636c9 的功能资料。原 draft/unknown 不因整理自动变为批准;设计规则、源配置与运行结果分别说明。本次只做文档及源码审阅,没有执行游戏功能测试。

入口、前提与状态​

从家园领地建筑进入自己的领地,达到主角等级或主线条件后开放。玩家用载具搬运物资、访问他人领地掠夺,设计要求按主角攻击力判定驱逐;当前后端未执行这个比较。领地、载具和主角攻击力是三个不同数值,不能互相替代。

完整规则、配置与界面​

玩法规则设计​

领地偷菜玩法​

领地主体功能​

  • 归属于玩家的个人领地,可升级,不同等级有对应效果,可被其他玩家访问

功能解锁​

  • 主线关通关x关,或主角等级x级,任选其一(配),达到后,玩家可打开领地界面,进入领地

领地等级​

  • 默认1级,消耗领地材料(配)升级,升级后,解锁新的等级效果(配)

领地等级效果如下(配)​

  • 刷出的物资不同

  • 可用的载具数量

  • 每个载具的攻击

  • 主角属性加成

领地等级效果示例​

等级载具数量载具攻击主角属性加成
lv13100攻击+5、生命+50
lv23200攻击+10、生命+100
lv34300攻击+6、生命+60
lv44400攻击+12、生命+120
lv55500攻击+18、生命+180
lv65600攻击+24、生命+240
lv76700攻击+30、生命+300
lv86800攻击+30、生命+300
lv97900攻击+30、生命+300

领地访问​

  • 玩家可前往其他玩家的领地进行访问,自己领地也可被其他玩家访问

  • 玩家可对自己领地进行领地升级,科技升级,设置留言,搬运等操作,在他人领地,仅可进行搬运(掠夺)操作

  • 1、邻近玩家访问

  • 由系统推荐可访问的领地,优先推荐领地等级在-1~+1的,不足时扩大,如最高-4~+4(配),优先真实玩家,无真实时再推机器人

  • 按条件寻找推荐的领地,满3个即停(配),可手动刷新,刷新后立即重新推荐,每次刷新间隔5分钟(配)

推荐范围示例(与正文不同)​

推荐范围优先级
-5~+5玩家>机器人
  • 具体推荐范围,数值自定

  • 2、仇人玩家访问

  • 系统记录成功掠夺过自己的玩家信息,并将其放入仇人访问列表进行推荐

  • 最多推荐10人,按掠夺发生时间排,近的在前

  • 访问仅以打开领地界面的形式即可,获取对方的玩家信息,领地等级,留言,只可浏览不可操作

  • 机器人需求后续补

领地物资​

  • 物资数量上限:5个

  • 1、物资刷新

  • 物资刷出后一直存在,玩家可对自己领地的物资进行搬运获取,可访问其他玩家领地掠夺,也可被其他访问的玩家掠夺

  • 当物资数量不足上限时,立即开始自动计时刷新

  • 自动刷新时间:1小时刷出1个(配),物资需一个个按顺序计时刷,直到数量达到上限后,停止自动刷新

  • 主动刷新

  • 玩家可通过,免费刷新(每日3次,配),消耗道具刷新(配),看广告刷新(配)等方式进行物资刷新

  • 先免费>广告,消耗道具(花费钻石,每次消耗递增,无限)

  • 主动刷新是立即刷满上限数量的物资,已刷出的也要重新刷

  • 注意:搬运中(含被其他玩家搬运中)的物资不消失不被刷新

  • 2、物资细节设计

  • 物资以包裹形式,刷出在领地中,获取后打开可得到多个道具奖励

  • 需先根据领地等级决定可刷出的物资类型,再根据权重概率单次随机刷出

  • 如主动刷新要刷5个物资,也是连随5次,允许随出相同的物资

  • 领地等级限制(配)

领地物资开放示例​

领地等级金币养成材料领地材料抽奖券装备符文
lv1金币包lv1养成材料包lv1领地材料包lv1抽奖券包lv1
lv2金币包lv2养成材料包lv1领地材料包lv1抽奖券包lv1装备包lv1符文包lv1
lv3金币包lv2养成材料包lv2领地材料包lv2抽奖券包lv1装备包lv1符文包lv1
  • 物资类型、奖励和刷出权重示例(配)

物资权重、奖励与载具上限示例​

道具类型等级权重奖励可用载具上限品质搬运效率
金币包lv11100金币 1000-15001绿
金币包lv22120金币 2000-30001蓝
金币包lv33130金币 4000-60002紫
养成材料包lv11100英雄材料 10-152绿
养成材料包lv22120英雄材料 20-252蓝
养成材料包lv33130英雄材料 30-352紫
领地材料包lv11100等级材料 10-151绿
领地材料包lv22120等级材料 20-252蓝
领地材料包lv33130等级材料 30-352紫
抽奖券包lv11100抽奖券 10-152绿
抽奖券包lv22120抽奖券 20-252蓝
抽奖券包lv33130抽奖券 30-353紫
装备包lv11130图纸 10-151绿
装备包lv22130图纸 20-252蓝
装备包lv33130图纸 30-353紫
符文包lv11130随机符文 10-151绿
符文包lv22130随机符文 20-252蓝
符文包lv33130随机符文 30-353紫
  • 每个物资刷出点要在预设的范围中取(非固定点),界面中划定刷出的范围

  • 因为起始点到搬运终点的距离,会决定搬运时间,该距离需标记为1个系数a

载具​

  • 不管掠夺或搬运,获取物资都需使用载具

  • 载具数量

  • 默认:3,领地等级增加可增加数量(配)

  • 使用中的(搬运/掠夺中)标记为,占用状态

  • 未被使用的载具标记为,空闲状态

  • 载具攻击力

  • 按领地等级增加,搬运或掠夺时取值用

  • 载具管理

  • 需记录使用中的车辆状态信息,用于玩家进行统一管理

  • 1、记录车辆在哪个领地使用,搬运的物资信息,车辆的总攻击力,搬运的时长,对手的信息

  • 2、可对其立即使用放弃操作,前往所在地操作

搬运/掠夺流程​

搬运/掠夺定义​

  • 物资需使用空闲的载具,通过搬运或掠夺的流程进行获取

  • 物资仅可被两名玩家(自己与其他1名玩家)发起搬运操作,第3名玩家再发起时无效

  • 在自己领地获取物资,定义为搬运,其他玩家的领地获取物资,定义为掠夺

  • 均需手动选择物资,发起操作,自动搬运则是特权卡额外功能,暂不考虑

流程细节​

  • 1、搬运条件:

  • 有空闲状态的载具

  • 2、掠夺条件:

  • 有空闲状态的载具

  • 玩家未处于被驱逐后的5分钟保护时间内

  • 物资非两人争夺状态

  • 争夺状态:物资被除自己外的两名玩家争夺搬运中,视为争夺状态

  • 争夺状态下的物资,无法再进行掠夺

  • 物资非保护状态

  • 保护状态:当该物资是领地内最后一个物资时,且未被搬运中时,自动将该物资置为保护状态

  • 保护状态下的物资,不可被掠夺

  • 当领地内物资数量>1时,保护状态自动取消

  • 每日掠夺次数:100次,0点重置(配)

  • 次数扣除方式

  • 对他人物资获得搬运权一次,即消耗一次掠夺次数,没次数时不可掠夺

  • 符合条件者,发起搬运/掠夺成功,可进入下一阶段——载具选择步骤,发起失败者,返回提示

  • 3、选择载具步骤

  • 物资根据属性配置,可使用多个载具一起搬运

  • 玩家自行选择载具数量

  • 载具总攻击力=所有载具累加,标记为系数b

  • 最小选择:0,最多选择:上限数

  • 可随时更改,更改则重新计算战力和时间

  • 选择0时,视为不搬运或放弃搬运

  • 放弃搬运:物资如在搬运中,则立即中断,物资停留在原地

  • 物资在搬运的过程中,当载具数量发生变化时,需重新计算搬运双方的攻击力,重新再走一次搬运/掠夺流程

  • 以下情况均会导致数值发生变化:

  • 载具攻击变化

  • 玩家自己重选载具数量

  • 其他玩家重选载具数量

  • 一旦发生变化,都需重新计算攻击力,重新判定搬运权的归属

  • 4、搬运权归属判定规则

  • 当有两名玩家对同一个物资发起搬运时,则需对比载具总攻击力,总攻击力数值高者获得搬运权

  • 夺得搬运权者开始搬运,失去搬运权的玩家中断搬运,但载具不会自动取消

  • 暂不做两名以上玩家的搬运争夺

  • 5、计算搬运时长

  • 获得搬运权的一方,开始计算物资从起点到终点的搬运时间

  • 注意,起点是物资当前所在位置的点(617)

  • 由物资起点到终点的距离系数a与总攻击力系数b一起决定,公式待定

  • 己方领地与他人领地的搬运终点相反,计算时,记得区分

  • 总攻击力越高,时间越短

  • 距离终点越近,时间越短

  • 搬运时间,可控制在1-30分钟以内,不宜超过30分钟,不宜低于1分钟,当然,物质距离终点很近时除外

  • 6、进入搬运持续时间,此时物资状态切换为搬运中

  • 物资到终点,搬运成功,有搬运权者自动结算该物资并获取对应的道具奖励

  • 物资未到达终点,失去搬运权即为搬运失败,均为搬运失败,无法获取道具奖励

  • 如物资在搬运期间,玩家离开了界面,后台应根据结果,自动进行结算记录,玩家下一次打开界面时,可合并一起展示再获取

  • 物资在搬运期间,玩家停留在界面,时间结束后,需展示并获取道具

  • 注意,搬运跟掠夺的结果展示是一致的(617)

防守和驱逐​

主角即为领地防守者,无需设置​

  • 主角总攻击力即为防守战力

  • 当有其他玩家进入己方领地,且已经掠夺物资时,可对其进行驱逐,对比双方的主角总攻击力,高者,驱逐成功,低者,驱逐失败

  • 驱逐成功,对方立即失去所有的搬运权(对方掠夺多个物资时有效),其5分钟内不可再对本方任意物资进行掠夺

  • 同理,掠夺他人时,被驱逐成功,立即失去所有的搬运权(对方掠夺多个物资时有效),5分钟内不可再对任意物资进行掠夺

  • 注意,驱逐不会自动发生,需要玩家手动操作,且需在物资在搬运中状态时操作

次留版本,前端判断​

留言​

玩家可设置留言,拜访领地的玩家可见​

留言最多30个字符,需有屏蔽字库​

日志​

  • 当符合以下条件时,触发日志记录,所有记录均需记录日志产生时间

1、当领地任意物资被他人掠夺成功时​

  • 标题:物资被抢走啦

  • 日志内容:XXX(掠夺人名) 明目张胆从你领地抢走了 YYY(物资名)

  • 需快捷前往,快速访问对方的领地

2、玩家在他人领地掠夺成功时​

  • 标题:掠夺成功

  • 日志内容:你从 XXX(被抢人名) 领地抢走了 YYY(物资名)

3、玩家在他人领地被驱逐成功时​

  • 标题:你被驱逐了

  • 日志内容:你被 XXX 赶出了领地,掠夺失败

  • 需快捷前往,可快速访问对方的领地

  • 记录规则,总数量上限100条(后台可以只记100条,界面会要求显示前30条),按触发时间记录,且每条信息仅保留3天

领地科技​

暂不做​

领地商店​

暂不做​

辅助卡牌​

暂不做​

自动托管​

暂不做​

界面需求​

界面总览​

分界面说明​

  • 领地主体界面

  • 1、领地主体部分

  • 包含留言展示,领地升级,领地科技三个功能入口和图标展示

  • 领地科技图标,显示锁定图标,不开放。点击文本提示:暂未开放

  • 领地升级图标,显示当前等级。点击打开领地详情界面

  • 留言区,显示当前留言内容。点击留言按钮,打开设置留言界面

  • 2、领地物资区域部分

  • 界面划分3个区域,分别是我方终点,他人终点,物资刷出区3个部分

  • 我方终点线:玩家自己搬运物资时,成功到达终点即可获得道具奖励

  • 他人终点线:玩家/他人掠夺时,成功到达他人终点即可获得道具奖励

  • 物资刷出区:界面中划出5个刷出区给物资刷出用,每个区可刷1个物资,位置在区域内随机

  • 3、物资部分

  • 物资刷出后,需显示以下内容:物资图标,等级,品质底框-绿蓝紫金红。点击物资可打开物资详情界面

  • 物资状态:分为未搬运,搬运中,保护中,3个

  • 未搬运状态:默认状态,显示预设内容即可

  • 保护中状态:物资是领地内最后一个,且未搬运中时,自动置为保护中状态。额外显示一个护罩特效。此时物资无法被掠夺,掠夺玩家点击物资不打开详情,而是文本提示:物资被保护中

  • 搬运中状态:物资被任意玩家选择并开始搬运后,进入搬运中状态。物资会往有搬运权的一方终点移动(持续播放搬运中动效)。掠夺同理。

  • 此时物资需显示剩余搬运时长,搬运双方玩家的信息

  • 剩余搬运时长:倒计时形式,我方有搬运权时显示为绿色字,对方有搬运权时显示为红色字

  • 搬运的玩家信息:显示载具动画,载具数量,搬运者头像,我方标识,搬运权箭头(有搬运权一方显示)

  • 以上信息,有变化时,尽量同步更新显示。

  • 如只有一方在搬运/掠夺,则只显示单方的即可

  • 如有两方在搬运/掠夺,则需显示两方的信息

  • 物资搬运/掠夺成功后,播放一次搬运完成动效(美术提供,玩家停留在界面中搬完时播放,如在离开界面时搬完,不播也可),再弹出一次获得道具奖励界面

  • 4、操作入口区域

  • 包含刷新操作入口,载具详情入口,掠夺入口

  • 刷新操作入口:点击打开刷新提示界面

  • 载具详情入口:显示当前载具的状态总览—空闲状态数量/总数量,点击打开载具详情界面

  • 掠夺入口:点击打开掠夺界面

领地详情界面,升级入口打开​

  • 领地详情界面

  • 1、领地等级

  • 显示当前等级——>下一等级

  • 2、物资等级变化

  • 显示领地当前等级可刷出的所有物资,显示物资名,图标,等级。取配置,做成列表,最多显示4个,上下划动查看

  • 等级需要显示变化

  • 当前值——>下一级值

  • 下一级物资类型增加或减少,无需显示或提示

  • 3、载具变化

  • 显示数量变化,攻击力变化

  • 当前值——>下一级值

  • 4、主角属性变化

  • 显示各项属性名,取配置,做成列表,最多显示2项,上下划动查看

  • 当前值——>下一级值

  • 5、升级操作按钮

  • 显示升级所需道具图标,数量,取配置

  • 数量显示:当前有的数量/所需数量

  • 升级成功后,弹出升级成功界面(可通用角色升级成功的动画),如有攻击力增加需播放一次攻击力提升动画

物资详情界面,点物资打开​

  • 物资详情界面

  • 1、物资显示区域

  • 区分状态进行显示

  • 无人搬运状态:

  • 仅中间默认显示当前选中的物资详情,需显示物资图标,等级,奖励描述。

  • 搬运中/掠夺中状态:

  • 获取物资所有搬运者的信息。在物资图标左右两侧,分别显示搬运方的信息,需显示搬运者的名字,头像,载具数量,载具总攻击力

  • 有搬运权一方多显示归属箭头图标,搬运时间(倒计时)

  • 注意几个显示区分:

  • 如在我方领地打开时,我方信息总是出现在左侧,并有我方小标识图标,且对方名字下有驱逐按钮,点击可对其发起驱逐。

  • 如在他人领地打开时,我方信息总是出现在右侧,并有我方小标识图标,无驱逐按钮

  • 驱逐操作:

  • 点击驱逐按钮,发起驱逐。显示比拼界面,并播放一次动效,设计要求主角攻击力更高成功、更低失败;当前后端只核验正在掠夺就驱逐,没有战力比较,详见实现差异

  • 成功后即可让对方立即放弃所有掠夺中的物资

  • 2、选择载具区域(玩家自己的载具情况)

  • 显示载具数量:当前选择数/最大数

  • 显示载具总攻击力:当前攻击力/最大攻击力

  • 都取配置

  • 显示我方载具的状态:闲置数,总数

  • 数量操作栏

  • 默认1——最大数

  • 注意:玩家在操作选择时,需在物资显示区域显示对应的信息预览变化。

  • 3、确认按钮区域

  • 如在我方领地打开,按钮名显示为搬运

  • 如在他人领地打开,按钮名显示为掠夺,且多显示今日剩余的掠夺次数

刷新物资界面,点击刷新按钮打开​

  • 刷新弹窗界面

  • 1、文本区域,显示固定文本即可

  • 2、按钮区域

  • 免费按钮,按钮上显示文本:免费(剩余次数/今日总次数),广告的次数多显示广告图标

  • 今日免费>广告免费,都用完后,按钮置灰,点击显示文本:今日免费次数已用完。

  • 道具刷新按钮,按钮上显示文本和当前刷新所需费用,费用形式:已有道具/本次所需

载具详情界面,点击载具入口打开​

  • 载具详情界面

  • 1、取当前领地内的载具状态和数量,闲置状态的数量,总数量

  • 2、取今日剩余的掠夺次数

  • 3、载具使用管理区域

  • 获取使用中状态的载具信息,并以列表显示,最多显示3条信息,上下划动查看。

  • 无使用中信息时,显示暂无记录或空状态图标

  • 有使用中信息时,获取载具如图需要显示的内容:使用中的领地,搬运/抢夺中的物资,物资等级,该物资的搬运时长,搬运双方的信息—需显示搬运者的头像,载具数量

  • 有搬运权一方多显示归属箭头图标,搬运时间(倒计时,己方有权为绿字,对方有权为红字)

  • 注意几个显示区分:

  • 如在我方领地使用中,我方信息总是出现在左侧,并有我方小标识图标,且信息栏中的按钮,显示为召回载具,驱逐访客

  • 如在他人领地使用中,我方信息总是出现在右侧,并有我方小标识图标,且信息栏中的按钮,显示为召回载具,前往领地

  • 4、信息栏中按钮

  • 召回载具:相当于取消载具选择操作,将会立即中断搬运/掠夺

  • 驱逐访客:相当于对对方发起驱逐操作,并走一次驱逐流程

  • 前往:立即访问车辆所在的领地

日志界面,点击日志按钮打开​

  • 日志界面

  • 1、显示最近的30条日志信息

  • 按时间排序,显示前30条日志信息

  • 显示内容:根据日志类别,显示标题,文本,对方头像

  • 头像要取,掠夺你的玩家头像,驱逐你的玩家头像,你掠夺的对方头像

  • 2、信息只有3大类

  • 物资被他人掠夺成功的信息,标题用红字,有前往按钮

  • 在他人领地掠夺成功的信息,标题用绿字,无按钮

  • 在他人领地被驱逐的信息,标题用红字,有前往按钮

  • 3、最底处固定显示文本:仅保留最近30条信息且只保留3天

掠夺界面,点击掠夺按钮打开​

  • 掠夺详情界面

  • 1、相邻领地推荐区域

  • 由系统筛选出的可访问的领地,需取得以下信息并显示,打开页面请求的即可,过程有变化也无需跟着变化。固定3人。

  • 显示内容:领地玩家名,领地等级,玩家头像,领地内的物资信息—物资图标,等级,品质

  • 刷新按钮:主动请求再次推荐,点击后系统重新推荐3个领地,cd5分钟,按钮置灰,倒计时5分钟。5分钟后可再次刷新

  • 前往按钮:点击都进入该玩家领地

  • 2、仇人领地区域

  • 有系统筛出的前10个掠夺过自己的玩家领地。做成列表,上下划动查看,按掠夺时间排序。

  • 显示内容:领地玩家名,领地等级,玩家头像,领地内的物资信息—物资图标,等级,品质

  • 前往按钮:点击都进入该玩家领地

设置留言界面,点击留言入口按钮打开​

  • 设置留言界面

  • 1、留言文本显示,右下角显示已用字符/总字符

  • 2、文本输入框,点击后可自行输入留言文本,点击发布后,显示到文本框显示区域内

  • 3、在领地主界面也要显示留言文本内容。可被访问的其他玩家看见

红点需求​

红点需求​

红点路径​

功能触发条件路径备注
领地升级领地升下一级级材料全部足够时领地升级按钮(红点)-主界面领地图标(红点)--家园界面领地建筑名称(红点)升级后消失
刷新有免费刷新次数时刷新按钮(红点)-主界面领地图标(红点)--家园界面领地建筑名称(红点)次数用完后消失
日志有任意新日志产生时日志按钮(红点)-主界面领地图标(红点)--家园界面领地建筑名称(红点)点击日志按钮后消失
搬运成功有任意物资搬运成功时(非在领地界面内)主界面领地图标(红点)--家园界面领地建筑名称(红点)点击主界面领地图标后消失
掠夺成功有任意物资掠夺成功时(非在领地界面内)主界面领地图标(红点)--家园界面领地建筑名称(红点)点击主界面领地图标后消失

埋点需求​

机器人需求​

机器人基础规则​

存在不同的领地等级机器人​

机器人会抢夺玩家、被玩家抢夺物资​

机器人之间不会互相抢夺和被抢夺​

  • 若玩家随机到机器人,可进入机器人的领地进行查看

  • 领地中的物资信息,也是根据对应的领地等级随机出来

  • 机器人的领地信息展示和正常玩家一致

  • 当有其他玩家在抢该机器人的奖励时,也会展示出来

机器人抢夺​

  • 机器人只会抢夺介于自身等级【-1,1】级的玩家的领地

  • 每个玩家最多每天被机器人抢夺X次(配置)

  • 达到次数上限后,不会再被机器人抢夺物资

  • 不管机器人最终是否抢夺成功,都计算抢夺次数

  • 抢夺次数每天重置

  • PS:可每隔一段时间执行一次脚本批量抢夺玩家(别同一时间把服务器的所有玩家都抢,要分开几个批次)

机器人被抢夺​

  • 当刷新随机出来的玩家数量不足3个时,把机器人补满到3个

  • 机器人补满的领地等级范围在【-1,1】

每个机器人每天最多被抢Y次(配置)​

  • 达到次数上限后,该机器人不会再出现在玩家的列表中

发起搬运操作
选择载具数
计算载具总攻击力
开始搬运
持续到时长结束
计算搬运时长
判断搬运权
归属
中断搬运
有载具
有搬运权
无搬运权
获得道具奖励
己方重选/
他人重选/
他人加入抢夺/
他人被驱逐
判断是否
符合条件
符合
发起失败
不符合
不搬运/放弃搬运
无载具

实现证据、差异与未知​

当前客户端接入​

Fief模块具备访问/掠夺/召回、护盾保护、本地运输快照、离线PendingItems奖励汇总;服务端数据由VO转为ViewModel,调用成功后再合并奖励。乐观本地展示不是奖励权威。领地科技、领地商店和代理入口在EntryModel仍为FeatureNotImplemented,不因设计表出现就标为已开放。

具体未知​

双方载具攻击相等时搬运权归属、设计中的主角攻击相等判定、距离系数到1–30分钟的公式未明确。邻居等级扩大规则正文±4、表格±5不同;机器人只在±1范围补满3个。推荐中的真实玩家优先与机器人补位各自边界待确认。物资权利变化时失去权利载具仍占用,不能视为自动召回。留言30字符与共享敏感词服务接线仍需分别核实。

4. 数据流​

4.1 访问他人领地并掠夺物资​

1. OpenFiefVisitCommand.Execute
├─ FiefVisitTerritoryReq → Server → FiefVisitTerritoryResp
│ └─ model.ApplyVisitTerritory(resp)
│ ├─ Mode=Visit, 填充 VisitMaterials / VisitMyTransport
│ └─ MergeCarTasks 合并到 CarTasks
└─ FiefSettleVisitRewardsReq → Server → FiefSettleVisitRewardsResp
└─ ApplyCallbackItems(resp.CallbackItems) → 道具入包 + 通用奖励弹窗

2. ViewFiefMainLogic.OnOpen → RefreshAll()
└─ model.BuildMaterialItemVM(i) → item.SetData(vm)

3. 用户点击物资 → OpenFiefMaterialPanelCommand(slotIndex)
└─ PanelFiefHaulerDispatchLogic.OnOpen → BuildHaulerDispatchVM(slotIndex, 0)

4. 用户确认 → FiefStartRobCommand(slot, carNum, strength) → CloseSelf

5. FiefStartRobResp
└─ model.DeductVisitFreeCar + ApplyStartRobOptimistically (hasRight=true 时写入 Speed/EndTime/RobRoleId)
└─ RequestRefreshFiefData → FiefVisitTerritoryReq → 服务端权威数据覆盖

6. FiefDataChangedEvent → ViewFiefMainLogic.RefreshAll()

4.2 召回载具​

1. ComFiefHaulerStatusItem.OnClickRecall
└─ FiefRecallResolveCommand(targetRoleId, materialSlot, strength)

2. FiefAdjustCarReq(carNum=0) → SCFiefHandler → ApplyRecallAdjustCar
→ 按 targetRoleId 清理 CarTask / VisitMaterial / SelfMaterial

4.3 离线登录后补发搬运奖励​

1. 玩家登录 → FiefGetInfoReq
└─ 服务端在 FiefGetInfo 内结算离线期间完成的搬运,将奖励物品放入 CallbackItems

2. SCFiefHandler.HandleSuccess(FiefGetInfoResp)
├─ model.ApplyGetInfo(resp) → 检测 CallbackItems 非空 → 设置 HasPendingTransportReward / HasPendingRobReward
└─ ApplyCallbackItems(resp.CallbackItems) → 道具入包(增量累加) + 弹出通用奖励界面

3. FiefDataChangedEvent → FiefRedDotHandler.Refresh() → 红点可见

5. 核心数据模型​

5.1 状态容器 FiefModelVO​

FiefModelVO
├── Mode: Self | Visit
├── [Self] FiefLevel, RefreshCount, RobCount, Message
│ NextRefreshTime, IdleCarCount, DiamondRefreshCount
│ Materials, CarTasks, EvictProtects
├── [Visit] VisitPlayerInfo, VisitFiefLevel, VisitMessage
│ VisitMyRobRemain, VisitMyDeportProtect, VisitMyDeportProtectEndTime
│ VisitMyFreeCar, VisitMaterials, VisitMyTransport
├── [Recommend] RecommendList, EnemyList, RecommendCdRemain
├── [Logs] Logs, LogTotal, LastLogTotalOnView
└── [RedDot] HasPendingTransportReward, HasPendingRobReward, IsViewingSelfTerritory

5.2 运输状态快照 FiefSlotTransportSnapshot​

FiefSlotTransportSnapshot (静态工厂 Build)
├── SlotIndex
├── IsTransporting: bool (hasOwner || hasRobber) && EffectiveEndTime > 0
├── EffectiveEndTime: long 取 CarTask.EndTime 和 MaterialInfo.EndTime 中较大值
├── EffectiveStartTime: long 同上逻辑取 StartTime
├── Speed: float 来自 MaterialInfo.Speed
├── [领主方] HasOwnerTransport, OwnerCarNum, OwnerStrength
├── [掠夺方] HasRobberTransport, RobRoleId, RobCarNum, RobStrength
│ RobNickName, RobAvatar, RobFiefLevel
└── IsOwnerLeading => Speed <= 0f

不依赖 MaterialInfo.EndTime 作为运输判定的唯一依据。运输身份(谁在搬)由 MaterialInfo 判定,时效(多久)优先取 CarTask,MaterialInfo.EndTime 作为乐观更新后的兜底。

5.3 ViewModel 类​

类对应 UI构建方法
FiefMaterialItemVMComFiefMaterialMainItemFiefModel.BuildMaterialItemVM(slotIndex)
FiefHaulerDispatchVMPanelFiefHaulerDispatchLogicFiefModel.BuildHaulerDispatchVM(slot, selectedNum, override?)
FiefHaulerStatusItemVMComFiefHaulerStatusItemFiefModel.BuildHaulerStatusItemVM(taskView)
FiefHaulerShowInfoVMFiefHaulerShowInfoFiefModel.BuildHaulerVM(...) (内部收口)

5.4 MaterialInfo 关键字段​

字段说明
MaterialId物资配置 ID
Level物资等级
StartPos起始位置 (0=领主侧, 1=原点, 2=掠夺者侧)
Speed速度 (≤0=向领主, >0=向掠夺者, =0=静止)
StartTime / EndTime运输时间戳
OwnerCarNum / OwnerStrength领主方载具数 / 战力
RobRoleId / RobCarNum / RobStrength掠夺者 ID / 载具数 / 战力
RobFiefLevel / RobNickName / RobAvatar掠夺者领地等级 / 昵称 / 头像
IsProtected服务端维护的保护状态(粘性,由 reevaluateProtectedStatus 维护)。客户端直接读取,不做本地推测。

6. 网络协议清单​

协议请求/响应客户端处理
FiefGetInfoReq{} → Respmodel.ApplyGetInfo + 离线奖励补发(CallbackItems 入包 + 红点标记)
FiefUpgradeReq{} → Respmodel.ApplyUpgrade + SyncCallbackItems + 刷新
FiefRefreshMaterialReq{refreshType} → Resp{materials}model.ApplyRefreshMaterial + SyncCallbackItems
FiefStartTransportReq{slot,carNum,strength} → Resp{currentSpeed}乐观扣车 + ApplyStartTransportOptimistically + 刷新
FiefStartRobReq{targetId,slot,carNum,strength} → Resp{hasRight,currentSpeed,transporter}乐观扣车 + ApplyStartRobOptimistically (hasRight=false 跳过) + 刷新
FiefAdjustCarReq{targetId,slot,carNum,strength} → Resp{}ApplyRecallAdjustCar (carNum=0 时清理本地) + 刷新
FiefAbandonTransportReq{targetId,slot} → Resp{}刷新
FiefVisitTerritoryReq{targetId} → Resp{playerInfo,materials,myTransport,...}model.ApplyVisitTerritory + MergeCarTasks
FiefDeportReq{targetId} → Resp{}刷新
FiefSettleVisitRewardsReq{targetRoleId} → Resp{callbackItems}ApplyCallbackItems (道具入包 + 弹窗)
FiefSetMessageReq{message} → Resp{}model.ApplySetMessage
FiefGetRecommendReq{} → Resp{recommendList,enemyList,cd}model.ApplyRecommend
FiefRefreshRecommendReq{} → Resp{recommendList,cd}model.ApplyRefreshRecommend
FiefGetLogsReq{page,pageSize} → Resp{logs,total}model.ApplyLogs
NoticeFiefTransportRight推送 → Msg{targetId,materialId,hasRight,speed,transporter,ownerId}更新 Speed/RobRoleId + 刷新
NoticeFiefTransportComplete推送 → Msg{winnerId,materialId,slot,ownerId,rewards}胜/败/旁观三种分支处理 + 红点 + 刷新
NoticeFiefEvicted推送 → Msg{evictorId,protectEndTime,ownerId}驱逐保护标记 + 刷新

8. 设计说明与注意事项​

8.1 数据整理收口​

所有展示数据由 FiefModel 的 ViewModel 构建方法统一预计算,UI 组件仅做 SetData(vm) 纯绑定:

  • BuildHaulerVM() — 搬运者展示数据唯一入口,haulerA / haulerB 均通过此方法构建
  • BuildMaterialItemVM(slotIndex) — 主界面物资项完整数据(含倒计时、护盾、动画参数),通过 BuildSlotTransportSnapshot 取运输状态
  • BuildHaulerDispatchVM(slotIndex, selectedCarNum) — 派遣面板完整数据(含预览时间估算、攻击力预览)
  • BuildHaulerStatusItemVM(taskView) — 载具状态项完整数据(跨自身/他人列表查找 MaterialInfo)

8.2 护盾保护机制​

MaterialInfo.IsProtected 是服务端维护的粘性状态字段(由 reevaluateProtectedStatus 维护),在 FiefGetInfo / FiefVisitTerritory / FiefRefreshMaterial 等回包中下发。客户端直接读取 material.IsProtected 驱动 FiefMaterialItemVM.ShowShield 和 UI 护盾显隐,不再做本地推测计算。

调用链:material.IsProtected → IsMaterialProtected(material) → GetMaterialState(slotIndex, material) → FiefMaterialItemVM.ShowShield → ComFiefMaterialMainItem.objShield.SetActive()

8.3 乐观本地更新​

FiefStartRobResp / FiefStartTransportResp 的响应字段被充分利用:

  • has_right:只有获得搬运权时才乐观写入 RobRoleId
  • current_speed:写入 Speed,确保 IsTransporting 立即生效
  • EndTime:按 now + configTime/carNum 估算,让倒计时立即可见
  • 后续 RequestRefreshFiefData 会用服务端权威数据覆盖

8.4 运输状态快照​

FiefSlotTransportSnapshot.Build() 将运输身份(MaterialInfo 的 OwnerCarNum / RobRoleId)和时效(CarTask 优先,MaterialInfo 兜底)合并为统一快照,解决了"CarTask 已完成但 MaterialInfo.EndTime 还在未来"导致误判为搬运中的问题。

8.5 CallbackItems 处理​

SCFiefHandler 中两种处理模式:

  • ApplyCallbackItems:增量累加到 ItemModel + 弹出通用奖励界面(用于离线补发、访问结算)
  • SyncCallbackItems:仅增量累加,不弹窗(用于升级、刷新等操作的消耗/产出同步)

两者都是增量累加(itemModel.AddItem),不覆盖背包数据。

8.6 客户端界面行为与服务端差异​

客户端README记录以下接入边界。驱逐的客户端展示判定与本页后端不比较战力的事实不同;界面显示不等于服务端执行对应比较:

项说明
Expel 判定驱逐胜负仍使用客户端预判(ExpelSuccess 属性),最终结果由 FiefExpelCommand 按客户端结果打开对应结算界面
PositionAnimator位置动画参数在 VM 中预计算但 ComFiefMaterialMainItem 仍直接操作 transform
CloseSelf 行为ViewFiefMainLogic.CloseSelf 在 Visit 模式下不关闭而是切回 Self
红点双模切换FiefRedDotHandler 在 HasServerData 前使用服务端推送值,之后切换为 Model 驱动;日志红点完全由服务端推送驱动

原型与图示​

xl/media/image10.jpeg

xl/media/image2.jpeg

xl/media/image3.jpeg

xl/media/image4.jpeg

xl/media/image5.jpeg

xl/media/image6.jpeg

xl/media/image7.jpeg

xl/media/image8.jpeg

xl/media/image9.jpeg

完整Visio页 0

完整EMF媒体

来源​

旧territory-steal;飞书WyNNbu9UvodkTlxzZqBc8uu6nGg的正文、表格、图示与UI标注;客户端HomeMain/frontend-brief.md及Features/Fief/README.md。当前源码边界不等同运行验收。

后端当前差异(88b24abe)​

model/fief/recommend.go推荐等级范围依次±5、±10、±15,不足全服随机,排除自己最多3人,与设计的±1起步、±4/±5扩大不同。handler/fief/visit_handler.go的FiefDeport/deportRobotRobber仅核验对方正在掠夺就执行DeportRobber,没有比较主角战力。这是当前明确实现缺口,不能写成仅“相等如何判定”未知;前端动画或预判不能代替服务端比较。