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

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

相关推荐
七月.末1 小时前
【Unity】Unity中修改网格的大小和倾斜网格
unity·游戏引擎
weifont1 小时前
https,http1,http2,http3的一些知识
服务器·网络·https
wanhengidc2 小时前
服务器机架的功能和重要性
运维·服务器
学习编程的gas3 小时前
Linux基本指令(一)
linux·运维·服务器
苦学编程的谢3 小时前
计算机是如何工作的
服务器·前端·javascript
风口上的吱吱鼠3 小时前
记录 ubuntu 安装中文语言出现 software database is broken
linux·服务器·前端
知北游天3 小时前
Linux:进程间通信---消息队列&&信号量
linux·服务器
天马37984 小时前
.Net Mqtt协议-MQTTNet(一)简介
服务器·mqttnet·.net mqtt协议·mqttnet简介
cdut_suye5 小时前
【Linux系统】从零开始构建简易 Shell:从输入处理到命令执行的深度剖析
java·linux·服务器·数据结构·c++·人工智能·python
枫super5 小时前
Linux系统基本指令和知识指南
linux·运维·服务器·虚拟机·linux命令