【副本向】Lua副本逻辑

news2025/1/15 6:32:52

副本生命周期

image.png

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

--副本心跳
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共战逻辑

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() 方法

--核心
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
image.png

local x3323_g_CurrentEnemyData =
{
  [1] = {770,771,772,773.......791}
  [2] = {792,793,.......}
}

然后C_CreateCopySceneNpcByGroup 就会通过访问服务器根据组号查找CopySceneNpc.txt表,
image.png
通过dataID列找到对应的Npc 模型表,这是一张客户端访问的表
image.png
可以看到882 883 是45级的【巫族怨灵】 战斗逻辑是 1 (没有技能)
若查找成功像客户端广播GC_CreateCopySceneNpcByGroup 消息,客户端拿到一组位置 和 index, 走创建AssetsGroupManager,创建fbx实例。

zm01.gif

精英怪 & BOSS 【带技能】

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

image.png
这里以镇魔古洞的第二个精英怪物【888:饕餮为例】
查找npcAttr表
image.png

战斗策略是104,查看一下NpcSkillStrategy.txt
image.png
这只怪物有4个技能,编号【100005,160706,160707,160101】默认是100001 技能 ,且四种技能权重对默认技能的权重比是1:1 ,表示在这只怪物在进入攻击状态时,有50%几率先使用非默认技能
查找一下skillEx技能逻辑表
image.png
可以看到饕餮有毒雾 、 猛击 两套AOE 还有召唤 蛇妖的召唤类技能
按照策划需求,在召唤蛇妖时有对话框气泡、
在指定难度等级下 蛇妖本体【无敌】 在指定结束后,自爆。范围性伤害
需要在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】
zm02.gif

奖励信息

副本中的奖励有【掉落奖励】 和 【结算奖励】两种
这里讨论掉落奖励,因为结算奖励属于OnCopySceneEnd 流程里的内容

function x3323_CreateLimitDropItem(npcId,playerObjId,posx,posy,posz,lismitDropPackageId)
  C_CreateDropItem(npcId,lismitDropPackageId,playerObjId,posx,posy,posz)
end

此方法在指定Npc死亡时,就是怪物死亡时调用。
第二种方法就是读取配置表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1641285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue进阶之Vue项目实战(一)

Vue项目实战 项目搭建初始化eslint版本约束版本约束eslint配置 stylelintcspellcz-githusky给拦截举个例子 zx 项目搭建 node版本:20.11.1 pnpm版本:9.0.4 初始化 vue3最新的脚手架 pnpm create vite byelide-demo --template vue-ts pnpm i pnpm dev…

020、Python+fastapi,第一个Python项目走向第20步:ubuntu 24.04 docker 安装mysql8、redis(一)

系列文章 pythonvue3fastapiai 学习_浪淘沙jkp的博客-CSDN博客https://blog.csdn.net/jiangkp/category_12623996.html 前言 docker安装起来比较方便,不影响系统整体,和前面虚拟环境有异曲同工之妙,今天把老笔记本T400拿出来装了个ubuntu24…

【分布式系统】FLP、CAP、BASE、ACID理论简介

分布式系统一致性模型 在说FLP,CAP,BASE,ACID理论前,必须先说说分布式系统的一致性模型,它是其他理论的基础知识。 依次介绍几个相关的概念: 分布式系统是由多个不同的服务节点组成,节点与节…

VMware虚拟机安装Linux(CentOS)【超详细】

参考大佬文章:VMware虚拟机安装Linux教程(超详细)_vmware安装linux虚拟机-CSDN博客 目录 一、获取映射文件 二、新建虚拟机 三、安装操作系统 四、切换系统用户 一、获取映射文件 参考大佬文章获取映射文件,以及对应修改后缀名的方法 二、新建虚拟…

电阻 电容 电感

电阻理论基础 电阻定义 电阻决定式 温度对电阻的影响 一般电阻都是在-200-500ppm这个范围内 电阻选型 贴片电阻的标值 数字位数 3位和4位 字母R 除了数字和字母R的其他标注 需要查表 电阻精度 电阻功率和温度的关系 电阻的额定电压 零欧姆电阻 零欧姆电阻又称为跨…

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(三)

本系列课程,将重点讲解Phpsploit-Framework框架软件的基础使用! 本文章仅提供学习,切勿将其用于不法手段! 继续接上一篇文章内容,讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 当我们点击 submit 提…

【云原生】Docker 实践(四):使用 Dockerfile 文件的综合案例

【Docker 实践】系列共包含以下几篇文章: Docker 实践(一):在 Docker 中部署第一个应用Docker 实践(二):什么是 Docker 的镜像Docker 实践(三):使用 Dockerf…

【多数组合 数学 字符串】2514. 统计同位异构字符串数目

本文涉及知识点 多数组合 数学 字符串 LeetCode2514. 统计同位异构字符串数目 给你一个字符串 s ,它包含一个或者多个单词。单词之间用单个空格 ’ ’ 隔开。 如果字符串 t 中第 i 个单词是 s 中第 i 个单词的一个 排列 ,那么我们称字符串 t 是字符串…

Web Storage 笔记12 操作购物车

相关内容:购物车实例 WebStorage存储空间足够大,访问都在客户端(Client)完成。有些客户端先处理或检查数据,就可以直接使用WebStorage进行存储,不仅可以提高访问速度,还可以降低服务器的练习。负担。例如,购…

如何访问公司内网?

访问公司内网是现代企业中的一个重要需求。无论是员工在外办公,还是远程技术支持,都需要能够安全、稳定地访问公司内部的网络资源。为了解决这一问题,北京金万维科技有限公司自主研发了一款名为【天联】的组网产品。 【天联】组网是一款异地组…

Linux下Palabos源码编译安装及使用

目录 软件介绍 基本依赖 其它可选依赖 一、源码下载 二、解压缩(通过方式1下载源码.zip格式) 三、编译安装 3.1 自带算例 ​编辑3.2 自行开发算例 四、简单使用 4.1 串行运行 4.2 并行运行 4.3 查看结果 软件介绍 Palabos是一款基于LBM&…

平平科技工作室-Python-步步惊心

一.准备图片 放在文件夹取名为imgs,分为两种boys和girls 二.编写程序 首先创建一个文件名为index.py 其次编写程序 # coding:utf-8 import sys, time, easygui, os, pygame from pygame.locals import * pygame.init() # 设置窗口显示位置、大小、颜色、标题 os.environ[ S…

【基于MAX98357的Minimax(百度)长文本语音合成TTS 接入教程】

【基于MAX98357的Minimax(百度)长文本语音合成TTS 接入教程】 1. 前言2. 先决条件2.1 硬件准备2.2 软件准备2.3 接线 3. 核心代码3.1 驱动实现3.2 代码解析 4. 播放文本5. 结论 视频地址: SeeedXIAO ESP32S3 Sense【基于MAX98357的Minimax&am…

【Mac】Lightroom Classic 2024 v13.1安装教程

软件介绍 Lightroom Classic 2024是Adobe公司推出的一款专业的数字图像处理软件,旨在为摄影师提供强大的工具和功能,以管理、编辑和分享他们的照片作品。以下是Lightroom Classic 2024的主要特点和功能: 数字照片管理: 提供直观…

YOLOv5手势物体识别(附代码)

之前是做的yolov3手势物体识别,最近几天我将该项目进行了重新的整理和升级,实现了yolov5手势物体识别,同时为了方便更多的人直接拿来应用,我生成了支持windows系统的应用小程序,即便你电脑上没有安装pytorch,没有安装c…

【题解】NC109 岛屿数量(BFS / DFS)

https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e?tpId196&tqId37167&ru/exam/oj dfs #include <vector> class Solution { public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可…

电脑数据怎么拷贝到u盘?操作指南与数据丢失防范

在数字时代&#xff0c;数据的传输与备份已成为我们日常生活和工作中不可或缺的一部分。U盘作为一种便捷、高效的移动存储设备&#xff0c;广泛应用于各种数据拷贝场景。无论是个人文件的备份&#xff0c;还是工作资料的传输&#xff0c;U盘都发挥着举足轻重的作用。那么&#…

HTML_CSS学习:背景、鼠标相关属性

一、背景相关属性 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>背景相关属性</title><style>body{background-color: greenyellow;}div{width: 400px;height: …

光头强:IBM收购HashCorp (Terraform)有多大意义?

StrongBear公司在光头强强总以及合伙人熊大熊二的艰苦努力下&#xff0c;最近公司进了一次扩容。甚至将原来一些甲方的研发人员也拉入旗下&#xff0c;其中就包括与熊二共事多年的小玲子以及小强同学。 光头强也注意到最近在IT软件领域&#xff0c;频频发生一些并购事件。比如…

nodejs实战——搭建websocket服务器

本博客主要介绍websocket服务器库安装&#xff0c;并举了一个简单服务器例子。 服务器端使用websocket需要安装nodejs websocket。 cd 工程目录 # 此刻我们需要执行命令&#xff1a; sudo npm init上述命令创建package.json文件&#xff0c;系统会提示相关配置。 我们也可以使…