当前位置: 首页 > news >正文

【副本向】Lua副本逻辑

副本生命周期

image.png

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

--副本心跳
function x3323_OnCopySceneTick(elapse)if x3323_g_IsPlayerEnter == 0 thenreturn; -- 如果没人进入,则函数直接返回endif x3323_g_GameOver == 1 thenif x3323_g_EndTick > 0 thenx3323_CountDown(x3323_g_EndTick);x3323_g_EndTick = x3323_g_EndTick - 1;return;elseC_LeveCopySceneAllPlayer();x3323_g_Gameover = 2;end;return;end;if x3323_g_GameOver == 2 thenreturn;endx3323_g_CopyTime = x3323_g_CopyTime + elapse; --时间累加if x3323_g_CopyTime >= x3323_g_EndTime thenx3323_CountDown(x3323_g_EndTick) x3323_g_EndTick = x3323_g_EndTick -1;elsex3323_InActiveness(); --活动奖励发放C_LeaveCopySceneAllPlayer();x3323_g_GameOver = 2;endreturn;
endif x3323_g_CurrentEnemyCount == 0 thenx3323_CreateNextEnemy();
end
end

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

function x3323_OnCopySceneClientPlayerEnterOk(objId)table.insert(x3323_g_Players,objid);if x3323_g_IsPlayerEnter == 0 then--更新endlocal bLeader = C_IsTeamLeader(objId)if bLeader == 1 thenlocal id1,id2,id3,id4 = C_CreateMercenary(objId,0,1)--清空if id1 ~= -1 thenx3323_g_LeaderObjId = objId;endend
end

创建怪物

小怪【不带技能】

即x3323_g_CreateNextEnemy() 方法

--核心
local nGroupID = x3323_g_CurrentEnemyData[x3323_g_CurrentGroupIndex];
if nGroupID ~= nil thenlocal nNpcCreateNumber = C_CreateCopySceneNpcByGroup(nGroupID);//核心if nNpcCreateNumber > 0 thenx3323_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)returnend
endfunction x3323_Create_WudiMonster(posX,posY,posZ)for i = 1,6 dolocal 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死亡时,就是怪物死亡时调用。
第二种方法就是读取配置表

相关文章:

【副本向】Lua副本逻辑

副本生命周期 OnCopySceneTick() 子线程每次心跳调用 --副本心跳 function x3323_OnCopySceneTick(elapse)if x3323_g_IsPlayerEnter 0 thenreturn; -- 如果没人进入,则函数直接返回endif x3323_g_GameOver 1 thenif x3323_g_EndTick > 0 thenx3323_CountDown…...

ROS机器人实用技术与常见问题解决

问题速查手册(时实更新)更加全面丰富的问题手册记录 1.机器人使用GPARTED挂载未分配空间 需要在图型界面下操作,建议使用no machine连接 安装gparted磁盘分区工具, sudo apt-get install gparted -y 启动软件 sudo gparted 点击磁盘/内存…...

Linux学习之IP协议

前言: 在学习IP协议i前,我们其实知道网络协议栈是一层层的,上层封装好之后就传给下层,对于我们正要学习到的TCP协议,在对数据进行封装之后,并不是直接就将数据进行传输,而是交给下一层网络层进…...

Python Dash库:一个Web应用只需几行代码

大家好,在数据科学领域,数据可视化是将数据以图形化形式展示出来,帮助我们更直观地理解数据。Python中有一个非常流行的数据可视化库叫做Dash,Dash以其简洁、高效和强大的功能而闻名,它允许开发者快速构建交互式Web应用…...

用Docker 创建并运行一个MySQL容器

可以在DockerHub官网上荡:mysql - Official Image | Docker Hub 指令是:docker pull mysql; 因为文件比较大可能时间比较长,我是跟着黑马的课走的 课程提供的有文件,我就用已有的资源了。 在tmp目录里放入mysql.tar包 然后cd进去 输入指令:docker lo…...

在Java中如何有效地处理内存泄露

在Java中,处理内存泄露有多种方法,以下是其中三种常见的方法及其原理和适用场景: ## 1. 合理使用垃圾回收机制 Java中的垃圾回收机制(Garbage Collection,GC)是一种自动化的内存管理技术,它可以…...

值得收藏!修复Windows 10/11中找不到输出或输入设备的五种方法

序言 这篇文章主要关注处理声音输出/输入设备未发现的问题。它提供了许多可行的方法,帮助了许多Windows用户。阅读以下内容以找到你的解决方案。 最近,我将Windows 10更新到21H2,发现我的音频无法工作。当我把鼠标放在任务栏上的声音图标(上面有一个十字图标)上时,它会…...

Slurm运行pytorch深度学习模型(小白版)

Slurm背景: Slurm 是一种开源的作业调度系统,它用于管理大型计算集群中的计算资源和作业。你可以把它想象成一个“交通管制员”,负责管理计算集群中的各种任务,确保它们按照用户设定的规则有序地执行。 Slurm 的主要功能包括&…...

SQL如何利用Bitmap思想优化array_contains()函数

目录 0 问题描述 1 位图思想 2 案例实战 3 小结 0 问题描述 在工作中,我们往往使用array_contains()函数来进行存在性问题分析,如判断某个数是否在某个数组中,但是当表数据量过多,存在大量array_contains()函数时,…...

面试官:打开了一个新窗口,怎么知道这个窗口已经被打开过?

前言 我们现在来想这么一个场景,在掘金的文章管理页打开了一篇文章草稿,然后点击编辑,这个时候打开新标签页 A ,再点击一次编辑,打开了标签页 B 。 此时如果你在 A 编辑, B 是感知不到 A 的内容变动的&am…...

机器学习项目实践-基础知识部分

环境建立 我们做项目第一步就是单独创建一个python环境,Python新的隔离环境 创建:python -m venv ml 使用:.\Scripts\activate python -m venv ml 是在创建一个名为 ml 的虚拟环境,这样系统会自动创建一个文件夹ml,…...

CNN卷积神经网络,TensorFlow面试题

目录 CNN卷积神经网络 什么是TensorFlow? 张量是什么 TensorFlow有什么优势?...

Android 官网Ota介绍

构建 OTA 软件包 | Android 开源项目 | Android Open Source Project...

Redis(持久化)

文章目录 1.RDB1.介绍2.RDB执行流程3.持久化配置1.Redis持久化的文件是dbfilename指定的文件2.配置基本介绍1.进入redis配置文件2.搜索dbfilename,此时的dump.rdb就是redis持久化的文件3.搜索dir,每次持久化文件,都会在启动redis的当前目录下…...

基于Flask的岗位就业可视化系统(一)

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 前言 本项目综合了基本数据分析的流程,包括数据采集(爬虫)、数据清洗、数据存储、数据前后端可视化等 推荐…...

嵌入式学习68-C++(运算符重载和虚函数)

知识零碎: cin >> n 相当于scanf C系统提供的6种基本函数 …...

UVA1048/LA3561 Low Cost Air Travel

UVA1048/LA3561 Low Cost Air Travel 题目链接题意输入格式输出格式 分析AC 代码 题目链接 本题是2006年ICPC世界总决赛的A题 题意 很多航空公司都会出售一种联票,要求从头坐,上飞机时上缴机票,可以在中途任何一站下飞机。比如,假…...

学习和分析各种数据结构所要掌握的一个重要知识——CPU的缓存利用率(命中率)

什么是CPU缓存利用率(命中率),我们首先要把内存搞清楚。 硬盘是什么,内存是什么,高速缓存是什么,寄存器又是什么? 我们要储存数据就要运用到上面的东西。首先里面的硬盘是可以无电存储的&#…...

IOS自动化—将WDA打包ipa批量安装驱动

前言 CSDN: ios自动化-Xcode、WebDriverAgent环境部署 ios获取原生系统应用的包 如果Mac电脑没有配置好Xcode相关环境,可以参考以上文章。 必要条件 Mac电脑,OS版本在12.4及以上(低于这个版本无法安装Xcode14,装不了Xcode14就…...

SAP PP学习笔记12 - 评估MRP的运行结果

上一章讲了MRP的概念,参数,配置等内容。 SAP PP学习笔记11 - PP中的MRP相关概念,参数,配置-CSDN博客 本章来讲 MRP跑完之后呢,要怎么评估这个MRP的运行结果。 1,Stock/Requirements List and MRP List 在…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

安卓基础(aar)

重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...