【副本向】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死亡时,就是怪物死亡时调用。

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

相关推荐
韩楚风3 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学3 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Pythonliu74 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
我是哈哈hh4 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
郭二哈4 小时前
C++——模板进阶、继承
java·服务器·c++
挥剑决浮云 -4 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
立秋67895 小时前
Python的defaultdict详解
服务器·windows·python
Lansonli5 小时前
云原生(四十一) | 阿里云ECS服务器介绍
服务器·阿里云·云原生
john_hjy6 小时前
11. 异步编程
运维·服务器·javascript
x晕x6 小时前
Linux dlsym符号查找疑惑分析
linux·运维·服务器