【副本向】Lua副本逻辑

副本生命周期

OnCopySceneTick() 子线程每次心跳调用

lua 复制代码
--副本心跳
function x3323_OnCopySceneTick(elapse)
    if x3323_g_IsPlayerEnter == 0 then
        return; -- 如果没人进入,则函数直接返回
  end

  if x3323_g_GameOver == 1 then
    if x3323_g_EndTick > 0 then
       x3323_CountDown(x3323_g_EndTick);
       x3323_g_EndTick = x3323_g_EndTick - 1;
      return;
    else
      C_LeveCopySceneAllPlayer();
      x3323_g_Gameover = 2;
    end;
    return;
  end;
  
    if x3323_g_GameOver == 2 then
      return;
    end

  x3323_g_CopyTime = x3323_g_CopyTime + elapse; --时间累加

  if x3323_g_CopyTime >= x3323_g_EndTime then
     x3323_CountDown(x3323_g_EndTick) 
     x3323_g_EndTick = x3323_g_EndTick -1;
  else
     x3323_InActiveness(); --活动奖励发放
     C_LeaveCopySceneAllPlayer();
     x3323_g_GameOver = 2;
  end
  return;
end

if x3323_g_CurrentEnemyCount == 0 then
   x3323_CreateNextEnemy();
end
end

OnCopySceneClientPlayerEnterOk() 玩家进入处理雇佣robot共战逻辑

lua 复制代码
function x3323_OnCopySceneClientPlayerEnterOk(objId)
  table.insert(x3323_g_Players,objid);
  if x3323_g_IsPlayerEnter == 0 then
    --更新
  end

  local bLeader = C_IsTeamLeader(objId)
  if bLeader == 1 then
    local id1,id2,id3,id4 = C_CreateMercenary(objId,0,1)
    --清空
    if id1 ~= -1 then
      x3323_g_LeaderObjId = objId;
    end
  end
end

创建怪物

小怪【不带技能】

即x3323_g_CreateNextEnemy() 方法

lua 复制代码
--核心
local nGroupID = x3323_g_CurrentEnemyData[x3323_g_CurrentGroupIndex];
if nGroupID ~= nil then
  local nNpcCreateNumber = C_CreateCopySceneNpcByGroup(nGroupID);//核心
  if nNpcCreateNumber > 0 then
    x3323_g_CurrentEnemyCount = x3323_g_CurrentEnemyCount + nNPCCreateNumber;
  end
else
  --说明上一波已经是最后一拨的怪物了

C_CreateCopySceneNpcByGroup

可以根据组号创建一组怪物

那么可以在脚本初始化时创建一组怪物Id

比如,参考服务器配置表CopySceneNpc.txt

lua 复制代码
local x3323_g_CurrentEnemyData =
{
  [1] = {770,771,772,773.......791}
  [2] = {792,793,.......}
}

然后C_CreateCopySceneNpcByGroup 就会通过访问服务器根据组号查找CopySceneNpc.txt表,

通过dataID列找到对应的Npc 模型表,这是一张客户端访问的表

可以看到882 883 是45级的【巫族怨灵】 战斗逻辑是 1 (没有技能)

若查找成功像客户端广播GC_CreateCopySceneNpcByGroup 消息,客户端拿到一组位置 和 index, 走创建AssetsGroupManager,创建fbx实例。

精英怪 & BOSS 【带技能】

需要强调的是,本游戏里的 技能skillLogic 逻辑依赖于impact 表,严格意义上来说,普通攻击方式也算一种逻辑,都是一种skillLogic的方式,但impact表的参数表个字段走默认值是-1,可能没有派发BUFF(持续的增益/减益效果) 、可能没有附带粒子特效。

这种怪物一般有自己的战斗策略

这里以镇魔古洞的第二个精英怪物【888:饕餮为例】

查找npcAttr表

战斗策略是104,查看一下NpcSkillStrategy.txt

这只怪物有4个技能,编号【100005,160706,160707,160101】默认是100001 技能 ,且四种技能权重对默认技能的权重比是1:1 ,表示在这只怪物在进入攻击状态时,有50%几率先使用非默认技能

查找一下skillEx技能逻辑表

可以看到饕餮有毒雾 、 猛击 两套AOE 还有召唤 蛇妖的召唤类技能

按照策划需求,在召唤蛇妖时有对话框气泡、

在指定难度等级下 蛇妖本体【无敌】 在指定结束后,自爆。范围性伤害

需要在Lua脚本中单独处理一下这部分逻辑

lua 复制代码
function x3323_OnCopySceneSkillStart(objID,SkillID,targetObjId)
  if X3323_g_TaoTieSnare_SkillID[x3323_g_CopyGrade] == skillId then
    --提示字
    C_NPCChat(objId,"#{5284}");
    --
    local posX,posY,posZ = C_GetPos(objId)
    x3323_Create_WudiMonster(posX,posY,posZ)
    return
  end
end

function x3323_Create_WudiMonster(posX,posY,posZ)
  for i = 1,6 do
    local x3323_g_monsterId = C_CreateNpc(x3323_g_TaotieXiaoBin_DataId[x3323_g_CopyGrade],posx,posZ,0,x3323_g_CopyLevel);
    table.insert(x3323_g_CacheSheYaoObjId,x3323_g_monsterId);
    C_AddBuff(x3323_g_monsterId,x3323_g_monster,x3323_g_TaotieMonster_ZiBaoBuff)
    C_AddBuff(x3323_g_monsterId,x3323_g_monster,x3323_g_TaotieMonster_WudiBuff)
  end
end

C_AddBuff(lua_State * L)方法是服务器

从Lua接受第一个参数是派发者Id ,第二个参数是接受此Buff 角色id,第三个是读impact 表(buff 效果表)关于Buff效果逻辑内容见【技能文章】,不是本文重点。
饕餮开启对话、释放蛇妖【技能编号:160101】

奖励信息

副本中的奖励有【掉落奖励】 和 【结算奖励】两种

这里讨论掉落奖励,因为结算奖励属于OnCopySceneEnd 流程里的内容

lua 复制代码
function x3323_CreateLimitDropItem(npcId,playerObjId,posx,posy,posz,lismitDropPackageId)
  C_CreateDropItem(npcId,lismitDropPackageId,playerObjId,posx,posy,posz)
end

此方法在指定Npc死亡时,就是怪物死亡时调用。

第二种方法就是读取配置表

相关推荐
宸津-代码粉碎机12 分钟前
FastUtil+AI多Agent实战:Java AI项目性能终极加速方案
java·服务器·开发语言·python·安全·php
潘正翔27 分钟前
jenkins构建cicd流水线
运维·服务器·ci/cd·容器·自动化·jenkins·cicd
型者无疆2 小时前
关于Fcitx5在ubuntu26.04中的位置问题
运维·服务器
mengge.cloud2 小时前
Linux三剑客 grep sed awk 小白基础教程
linux·运维·服务器·网络
国际云,接待2 小时前
df 显示磁盘还有空间却无法写文件:Linux inode 耗尽排查与治理
linux·运维·服务器
zhchyun20084 小时前
【Unity UI 进阶】仿 Element UI 打造企业级 Unity UI 组件库(05)
ui·unity·游戏引擎
杨云龙UP4 小时前
Toad for Oracle 调整表空间 Datafile 大小:Usage、Used Pct of Max 与 RESIZE 实战
linux·运维·服务器·数据库·oracle·dba·数据库运维
Csxyzj6 小时前
Nginx:企业高性能web服务器(一)
运维·服务器·nginx
旗开得胜马到成功6 小时前
工控系统备份的底层技术解析:老旧协议、零停机窗口与中科热备的专项破局
运维·服务器·vr
AC赳赳老秦6 小时前
企业标签体系搭建:基于 OpenClaw 采集的多维度公开数据,构建企业画像标签库
java·运维·服务器·python·信息可视化·deepseek·openclaw