宠物繁殖的后代携带父母的血统信息:同父母的后代同场出战触发亲缘加成。血统关系用谱系表记录:petLineage[宠物ID] = { father = 父ID, mother = 母ID }。判定同源亲缘时比较两只宠物的父 ID 与母 ID 是否匹配(同父同母或同父异母均算同源)。F:\底层文件 的表嵌套确认:谱系表用一张两级嵌套表即可表达完整的血统链。
血统判定与亲缘加成:谱系查询、同源判定、加成计算。示例代码如下:
local lineage = {}
local function recordBirth(petId, fatherId, motherId)
lineage[petId] = { father = fatherId, mother = motherId }
end
local function isSibling(petA, petB)
local a = lineage[petA]
local b = lineage[petB]
if a == nil or b == nil then
return false
end
if a.father == b.father and a.mother == b.mother then
return true
end
return false
end
local function kinBonus(petA, petB)
if isSibling(petA, petB) then
return { atk = 8, def = 5 }
end
return { atk = 0, def = 0 }
end
亲缘加成接线示例代码如下:
local bonus = kinBonus("宠物001", "宠物002")
print("攻击加成 " .. bonus.atk .. "% 防御加成 " .. bonus.def .. "%")
亲缘判定为两次表查询加两次字符串比较约 0.001 毫秒;对比遍历全部繁殖记录查找父母关系(100 条记录约 0.05 毫秒),谱系直查快 50 倍。谱系表的内存代价与宠物数线性,1000 只宠物约 100KB。
三个不适用场景:一是血统链超过两代的祖源追溯(查祖父辈),谱系表只存直系父母,多代追溯需要递归查询;二是非繁殖获得的宠物(任务奖励、商城购买)没有血统记录,亲缘判定永远 false,这类宠物的搭配收益需要其他机制补充;三是跨服获得的宠物血统数据不在本服谱系表中,需要跨服数据同步才能判定。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、抛坑提问:两个属性表直接相加会怎样?attempt to perform arithmetic on a ta…
【游戏】 一、一行代码拆解:POOL = math.min(POOL + mins, 720) —— 挂机收益的全部骨架:离…
【语法】 一、隐蔽陷阱:按定义递归逐格重算杨辉三角,第 30 行中心一格要重复计算数十万次;按行生成、用上一行直接递推当前行…
【游戏】 一、业务场景:副本每日 3 次,队长剩 1 次队员剩 3 次,进本后按各自次数各自领奖,队员多领 2 次;组队共享…
【游戏】 一、业务场景:精英怪 30 只开局一次性全刷,5 分钟被推平,后续 25 分钟空场;改逐波投放——每波 6 只,全…
【语法】 一、抛坑提问:不用 table.sort,手写排序怎么保证正确?冒泡排序每轮比较相邻两项把最大值沉到末尾,n-1 …