项目中lua(基础)
关于项目中lua任务(某些没弄懂,但lua上耗费时间有点长了不看了) 这段时间看了lua语法和项目中lua应用
.在lua中注册c库,在lua5.2中好像都是注册c库,相当于在lua中定义一个table,key是函数名字,value是函数指针
m_spLuaState->RegLib("game", funcs); .加载项目中所有lua并执行
刚开始不知道那个dofile具有执行lua的功能,结果是返回0表示成功,执行lua就是执行其中定义的一些函数和全局变量(普通变量,表等)
这个过程后就可以使用lua中的变量了 .然后上线发送玩家人物信息,这个地方不得不提任务存储方法,跟天龙差不多
//有一些技巧 /**
* @brief 任务项
* @note
* 自定义参数 m_uParam可保存当前任务的执行条件的进度:
* e.g. 怪物A的杀敌数
* 怪物B的杀敌数...
* 物品A的收集量
* 物品B的收集量...
*
*/
struct RcvMissonItem
{
short m_nIsOccupy; ///< 此数组位是否已被占用 返回 0 -- 表示为空 可以用 ,1 -- 表示 已被占用
short m_nIsOnTrack; ///< 是否正在追踪
int m_nMissionID; ///< 任务Id( 0 ~ MAX_MISSION_COUNT)
int m_ScriptId; ///< 脚本Id
short m_nMissionType; ///< 任务类型
short m_nMissionState; ///< 任务执行状态 //这个主要是根据id去决定uParam的具体含义,在脚本中定义,如杀怪的个数和杀怪的bodyid
unsigned int m_uParam[MAX_MISSION_PARAM_NUM]; ///< 自定义参数
/*
m_SriptId用处:
、比如本任务是杀怪任务,当怪物被杀后,判断本任务类型是否是杀怪任务
如果是,并且此怪物携带的被杀任务标记中任务Id是当前任务Id,则需执行奖励脚本;
、可有由脚本Id去决定m_uParam的具体参数实意;
*/
bool IsInvaild()
{
return m_nIsOccupy == ;
}
}; struct MissionInfo_New
{
int m_nMissionCount; ///< 已接受的任务数量
int m_nCurMainThreadId; ///< 正在执行的主线任务Id
int m_nCurBtanchThreadId; ///< 正在执行的支线任务Id
RcvMissonItem m_aMissionItem[MAX_MISSION_RCV_NUM]; ///< 任务背包中的任务项
unsigned int m_aMissionDoneFlag[MAX_MISSION_TYPE_NUM]; ///< 某项任务是否执行的标记 //这个自定义数据没搞懂什么意思
int m_aMissionData[MAX_MISSION_DATA_NUM]; ///< 玩家自定义任务数据 /*
m_aMissionDoneFlag用法:
nMissionId 取值范围(0 ~ MAX_MISSION_COUNT)
0xFFF
1111111 11111
type count
(0~127) (0~31)
==> 128 * 32 = 4096
*/ //主要理解这个其实和脏标记差不多,只是脏标记拿char存,而这个拿int存
inline bool IsMissionDone(int nMissionId)
{
int nMissionIndex = nMissionId >> ;
return !!(m_aMissionDoneFlag[nMissionIndex] & ( << (nMissionId & 0x1F)));
}
inline void SetMissionDoneFlag(int nMissionId, bool bDone)
{
int nMissionIndex = nMissionId >> ;
if (bDone)
m_aMissionDoneFlag[nMissionIndex] |= ( << (nMissionId & 0x1F));
else
m_aMissionDoneFlag[nMissionIndex] &= ~( << (nMissionId & 0x1F));
} /*
m_aMissionData的用法:[索引值由任务配置表决定]
玩家自定义任务数据,可常用于一些频繁的直线任务
e.g. 某种任务
①需判断一共执行多少次
②上次执行时间
③当天执行了多少次 至于主线任务往往有前置任务需执行完方可领取的条件(就需前置任务标记/Id),这可由
任务配表中指定完成,用时只需按配表前置任务标记查询IsMissionDone判断是否Done过即可作判断。
配表应该指定的都是任务固有条件,如:完成和接收需要条件指标。
*/ }; .接下来就是lua执行和c库函数互调的过程,因lua要获得实时信息所有要调c函数
至于为什么用lua,对于那些比较复杂的逻辑比如任务,活动记录的东西较多,用c++实现起来可以,但容易出错每次修改代码需要编译
用lua不用编译写代码大大提高效率 还有那个lua虚拟机到底是什么,我知道一个lua_state就可以是一个虚拟机,可以通过和lua传参交互,解释器又是什么意思
项目中lua(基础)的更多相关文章
- Jquery和Javascript 实际项目中写法基础-弹出窗和弹出层 (4)
一.实际项目中有很多如下界面效果. 二.该效果可以归结为弹出窗或者弹出层来实现的,为什么这么说?看如下代码: <!DOCTYPE html> <html> & ...
- Jquery和Javascript 实际项目中写法基础-ajax和json (3)
一.什么是JSON数据? 一种轻量级的数据交换格式.实际中知道如何使用即可. 软件开发我认为就是一个会用,然后知其原理的过程. 例子如下: <!DOCTYPE html> <html ...
- Jquery和Javascript 实际项目中写法基础-闭包 (2)
一.什么是闭包? 概念性的我就不去百度了,感兴趣的可以自己去搜下,我自己的理解,闭包就是一个封装的包,相当于类的概念,把乱七八糟的的东西封装到一起,然后统一使用一个对象来调用,实现代码部分对外开放,部 ...
- Jquery和Javascript 实际项目中写法基础 (1)
一.JS 是什么,jquery 是什么 就不说明了,直接说一般使用是怎么样的 <!DOCTYPE html> <html> <head> <meta cha ...
- NopCommerce开源项目中很基础但是很实用的C# Helper方法
刚过了个五一,在杭州到处看房子,不知道杭州最近怎么了,杭州买房的人这么多,房价涨得太厉害,这几年翻倍翻倍地涨,刚过G20,又要亚运会,让我这样的刚需用户买不起,也买不到房子,搞得人心惶惶,太恐怖了,心 ...
- redux在react项目中的应用
今天想跟大家分享一下redux在react项目中的简单使用 1 1.redux使用相关的安装 yarn add redux yarn add react-redux(连接react和redux) 2. ...
- 快速将wax配置到项目中进行lua开发
通过Finder浏览到你保存该项目的文件夹.创建三个新的文件夹:wax.scripts和Classes. 第一:首先,下载源代码的压缩包.Wax放在GitHub上(https://github.com ...
- iOS基础教程:在建好的项目中加入CoreData[转]
这几天在做一个ios的小项目,项目中需要对数据进行基本的增删改查操作.于是就想用一把CoreData.但在创建项目初期,没有包含进CoreData.于是就在已建好的项目中加入CoreData.由于第一 ...
- vue-cli项目中使用mockjs(基础使用和全局配置使用)
参考:vue+mockjs 模拟数据,实现前后端分离开发 (Github-Demo可查看全部代码),Mockjs ,Axios 很多时候前后端分离的项目在开发过程中前端所需数据和后端接口并不会同步开发 ...
随机推荐
- POJ Cow Exhibition
题目链接:Click Here~ 题目意思自己看吧. 算法分析: 对我来想是没有想到,最后看别人的博客才知道的.要把当中的一个条件当作体积.由于两个条件都存在负数,所以还要先保证最后不会再体积中出现负 ...
- Windows利用命令行快速清除以及建立密码
我们Win10一般是没有管理员权限的!这就要求我们获取管理员权限了,一般有两种方法获取,我就介绍下面一种最简单的 老操作:WIn+R打开本窗口,输入:taskmgr 建立密码(administrato ...
- Log4j介绍,log4j.properties配置详解
http://www.cnblogs.com/simle/archive/2011/09/29/2195341.html本文主要解释log4j的配置文件各个配置项的含义,内容是从网上转载的 1.Log ...
- Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)(转)
转自:http://blog.s135.com/nginx_php_v6/] 前言:本文是我撰写的关于搭建“Nginx + PHP(FastCGI)”Web服务器的第6篇文章.本系列文章作为国内最早详 ...
- linux 使用fdisk分区扩容,看介绍命令(未完)
https://www.cnblogs.com/chenmh/p/5096592.html LVM 逻辑磁盘的一些命令 http://man.linuxde.net/vgcreate
- JAVA方法传递参数:传值?传引用?
先来看下面这三段代码: //Example1: public class Example1 { static void check(int a) { a++; } public static void ...
- atitit.groovy 语法特性
atitit.groovy 语法特性 1. Groovy 1.6概览1 1.1. 多路赋值2 2. 新发布的Groovy2.0为这门语言带来了关键的静态特性:静态类型检查和静态编译:2 3. 参考3 ...
- is char signed or unsigned?
工作这么多年,一直认为char是有符号的,而事实上gcc和vs默认也是有符号,但是c规范里实际并没有指明char是有符号还是无符号,所以char比较特殊, char signed char unsig ...
- [转]成员函数指针与高性能的C++委托
原文(作者:Don Clugston):Member Function Pointers and the Fastest Possible C++ Delegates 译文(作者:周翔): 成员函数指 ...
- implode 把数组 组成一个字符串
$data=array(1,2,3,4,5); implode(",",$data);