通过Cpp + Lua 解析副本与服务器的逻辑1

进入副本流程

  1. 读publicTables,image.png
  2. OnOpenCopySceneOK()发包
private void OnOpenCopySceneOK(){GameManager.PlayerDataPool.CurSelectTier = m_curSelTier;CG_OPEN_COPYSCENE_PAK pak = new CG_OPEN_COPYSCENE_PAK();pak.data.SceneID = (int)SCENE_DEFINE.SCENE_TDBK;pak.data.Grade = (int)COPYSCENE_GRADE.GRADE1;pak.data.Mode = (int)COPYSCENE_MODE.SOLO;pak.data.EnterTier = m_curSelTier;pak.SendPacket();}

传入副本名称、难度等级、挑战模式(单人、组队形式)、当前副本层数(如果有)

  1. 服务器Obj_Player_CopyScene.cpp收包
uint_t Obj_Player::HandlePacket(const ProtbufPacket::CG_OPEN_COPYSCENE &rPacket)
{int32_t nSceneID = rPacket.sceneID();int32_t nMode = rPacket.mode();int32_t nGrade = CopySceneGrade::Grade1;//---非法包检测---//特殊副本判断--if(nSceneClassID == SCENECLASS_ID::SCENECLASS_ID_TDBK){OpenTdbkCopyScene(csi,nEnter,nEnterTier);}
}
                                                                                                                                                                    <br />4.打开副本逻辑(服务器)
void Obj_Player::OpenTdbkCopyScene(const CopySceneInfo& rInfo,int32_t nEnterType,int32_t nEnterTier)
{//客户端请求层级错误判断if(nEnterTier <= 0 || nEnterTier >= TDBK_SCENE_OVER){//---    }//Return情况://玩家跳过当前关卡、玩家已经全部通关、玩家重复挑战以前的关卡//确定请求挑战层SetTDBKEnterTier(nEnterTier);OpenCopyScene(rInfo);}
                 <br />打开副本
void Obj_Player::OpenCopyScene(const CopySceneInfo& rInfo,bool bAutoAgree)
{//单人模式//货币扣除流程成功SyncCopySceneData(rInfo.m_nSceneID);CreateCopyScene();return ;
}

服务器GameServer::Routine线程在心跳中检测
发现ROUTINEMSG_IMPL(PlayerEnterSceneMsg)
会走void CopyScene::HandleMsg(const PlayerEnterSceneMsg& Msg)

void CopyScene::HandleMsg(const PlayerEnterSceneMsg& Msg) 
{if(Obj_Player->curPlayer != nullptr){CopySceneInfo Info = curPlayer->GetCopySceneInfo();if(info.CheckValid(GetLocalTime() == CopySceneErrorInfo::INFO_OK)){//单人模式数据添加//组队模式数据添加}//断线重连保存现场RefixLevelWhenAccident(Info,curPlayer->GetLevel.m_nLevel);//Open(Info,ptr);}
}
                   <br />打开副本
void CopyScene::Open(const CopySceneInfo& rInfo)
{//缓存是否首次掉落//副本共战信息//加载Lua脚本Script_OnCopySceneOpen();
}

调用Lua脚本

void CopyScene::Script_OnCopySceneOpen()
{__SOL_TRACEScriptParamList oParamList;LuaCall(m_data.GetScriptID(),"OnCopySceneOpen",oParamList);SOL_TRACE__
}

Lua脚本

OnCopySceneOpen是玩家刚进入副本时调用,在镇魔古洞中

--npc 
x3323_g_JuBaoPenNpc_ObjId = -1;--副本难度
_,x3323_g_CopyGrade, _, x3323_g_CopyLevel = C_GetCopySceneInfo() ; --副本心跳
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;x3323_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

可以看出对于游戏目前的状态,是否结束会进行不同的判断。 由于OnCopySceneTick是在服务器的Tick 过程中调用的,类似客户端的Update。
在其中进行游戏终止判定 和 生成敌人的操作(此副本中,定义一波敌人全部消灭后,生成下一波)

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

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

相关文章

[Java、Android面试]_02_HashMap的原理

本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料&#xff0c;感兴趣的朋友可收藏关注。由于时间有限&#xff0c;只能每天整理一点&#xff0c;分享一点儿&#xff01; 现分享如下&#xf…

【系统架构设计师】系统工程与信息系统基础 01

系统架构设计师 - 系列文章目录 01 系统工程与信息系统基础 文章目录 系列文章目录 前言 一、系统工程 ★ 二、信息系统生命周期 ★ 信息系统建设原则 三、信息系统开发方法 ★★ 四、信息系统的分类 ★★★ 1.业务处理系统【TPS】 2.管理信息系统【MIS】 3.决策支持系统…

VMware安装Ubuntu虚拟机

1. 安装VMware VMware中国官网&#xff1a;VMware - Delivering a Digital Foundation For Businesses VMware Workstation Player&#xff08;官方个人免费版&#xff09;&#xff1a;VMware Workstation Player | VMware VMware Workstation Pro&#xff08;商用收费版&am…

Glusterfs 常用命令

1. 启动/关闭/查看glusterd服务 #启动&#xff1a; systemctl daemon-reload systemctl start glusterd#开机自动启动glusterd服务&#xff1a; systemctl enable glusterd#关闭&#xff1a; systemctl stop glusterd#查看状态&#xff1a; systemctl status glusterd 2. 为存…

CTP-API开发系列之九:行情登录及订阅代码

CTP-API开发系列之九&#xff1a;行情登录及订阅代码 前情回顾全局配置参数行情初始化代码行情登录行情订阅行情接收注意事项 前情回顾 CTP-API开发系列之一&#xff1a;各版本更新说明&#xff08;持续更新&#xff09; CTP-API开发系列之二&#xff1a;问题汇总&#xff08;…

tigramite教程(六)使用TIGRAMITE 进行因果发现

使用TIGRAMITE 进行因果发现 基本用法简单玩玩万年不变的第一步:画出来调查数据依赖性和滞后函数PCMCI 因果发现错误发现率控制进一步相关的方法学教程 画图整合专家对链条的假设基准测试和验证因果效应估计数据集挑战滑动窗口分析 TIGRAMITE 是一个时间序列数据分析的python包…

【Python】新手进阶学习:os.sep---跨平台路径分隔符

【Python】新手进阶学习&#xff1a;os.sep—跨平台路径分隔符 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您…

挑战杯 多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉

文章目录 0 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习多目标跟踪 …

MPP数据架构设计的缺点

目录 一、MPP架构 二、批处理架构和MPP架构 三、MPP架构的OLAP引擎 一、MPP架构 随着分布式、并行化技术成熟应用&#xff0c;MPP引擎逐渐表现出强大的高吞吐、低延时计算能力&#xff0c;有很多采用MPP架构的引擎都能达到“亿级秒开”。例如Impala、ClickHouse、Druid、Dor…

基于SpringBoot+MYSQL的旅游网站

目录 1、前言介绍 2、主要技术 3、系统流程分析 1、登录流程图如下&#xff1a; 2、管理员后台管理流程图如下&#xff1a; 3. 修改密码流程图如下&#xff1a; 4、系统设计 4.1、系统结构设计 4.2 数据库概述 4.2.1 数据库概念设计 4.2.2 数据库逻辑设计 5、运行截…

多线程多进程处理服务器并发(多进程处理如何解决僵死进程)

目录 1.可循环发送数据的代码 2.改成循环之后每次发现只能处理一个客户端 3.服务器端处理并发问题 3.1 思路 3.2 利用多线程实现并发 ​编辑 3.3 利用多进程实现并发 3.3.1 多进程并发产生的僵死进程问题 ​3.3.2 解决僵死进程问题 1.可循环发送数据的代码 服务器代…

unity中实现场景跳转

1&#xff0c;第一步创建2个场景&#xff08;右键资源窗口&#xff0c;名字这里我取的1111和2222&#xff09; 2.添加跳转按钮&#xff08;双击其中一个场景并添加按钮&#xff09; 3.编辑按钮的文字&#xff08;将原本的按钮打开点击里面的text&#xff0c;就可以在右边编辑文…

MySQL8.0安装教程+使用Navicat远程连接

MySQL8.0安装教程使用Navicat远程连接 版本&#xff1a;MySQL8.0.28 环境&#xff1a;Windows11 1.MySQL下载 进入官网https://www.mysql.com/进行下载&#xff1a; 2.安装MySQL 下载好后&#xff0c;点击运行程序开始安装&#xff0c;安装步骤如下&#xff1a; 以下步骤验…

学习Java的第九天

本章将学习什么是类的无参、带参方法又是什么 一、什么是类的无参方法 类是由一组具有相同属性和共同行为的实体抽象而来。对象执行的操作是通过编写类的方法实现的。显而易见&#xff0c;类的方法是一个功能模块&#xff0c;其作用是“做一件事情”。 1、类的方法必须包括以…

【海贼王的数据航海】排序——概念|直接插入排序|希尔排序

目录 1 -> 排序的概念及其运用 1.1 -> 排序的概念 1.2 -> 常见的排序算法 2 -> 插入排序 2.1 -> 基本思想 2.2 -> 直接插入排序 2.2.1 -> 代码实现 2.3 -> 希尔排序(缩小增量排序) 2.3.1 -> 代码实现 1 -> 排序的概念及其运用 1.1 -&g…

React改变数据【案例】

State传统方式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>React Demo</title> <!--…

linuxOPS基础_vmware虚拟机安装及介绍

虚拟机概念 什么是虚拟机&#xff1f; 虚拟机&#xff0c;有些时候想模拟出一个真实的电脑环境&#xff0c;碍于使用真机安装代价太大&#xff0c;因此而诞生的一款可以模拟操作系统运行的软件。 虚拟机目前有2 个比较有名的产品&#xff1a;vmware 出品的vmware workstatio…

Jmeter(五) - 从入门到精通 - 创建网络计划实战和创建高级Web测试计划(详解教程)

1.简介 上一篇中已经将其的理论知识介绍了一下&#xff0c;这一篇就带着大家一步一步的把上一篇介绍的理论知识实践一下&#xff0c;然后再说一下如何创建高级web测试计划。 2.网络计划实战 通过上一篇的学习&#xff0c;将其分类为&#xff1a; &#xff08;1&#xff09;不需…

蓝桥杯真题讲解:三国游戏(贪心)

蓝桥杯真题讲解&#xff1a;三国游戏&#xff08;贪心&#xff09; 一、视频讲解二、正解代码 一、视频讲解 蓝桥杯真题讲解&#xff1a;三国游戏&#xff08;贪心&#xff09; 二、正解代码 //三国游戏&#xff1a;贪心 #include<bits/stdc.h> #define int long lon…

Springboot applicaton.yml logging output

debug model will show the SQL running process