关于项目中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传参交互,解释器又是什么意思

最新文章

  1. 【No.5 Ionic】修改 应用名,icon,启动界面
  2. ajax分页
  3. 18. 4Sum -- 找到数组中和为target的4个数
  4. 通过HTTP访问网络资源
  5. Steam即将正式加入人民币支付(转)
  6. C#微信公众号开发 -- (二)验证成为开发者
  7. 交叉编译安装ARM平台上的Qt
  8. Constructing Roads In JGShining&#39;s Kingdom(HDU 1025 LIS nlogn方法)
  9. Android实现应用下载并自动安装apk包
  10. UVALive 6469 Deranged Exams (排列:力绝对是无辜的高中知识啊)
  11. Cocos2d-x--Box2D使用GLES-Render.h渲染查看刚体
  12. 【转载】Java 内存分配全面浅析
  13. Autowired注解
  14. AMQP close-reason, initiated by Peer, code=406
  15. python基础 ---time,datetime,collections)--时间模块&amp;collections 模块
  16. 出现xml错误的时候都是配置文件的名字没有改造成的
  17. google Kickstart Round G 2017 三道题题解
  18. 微信支付的JAVA SDK存在漏洞,可导致商家服务器被入侵(绕过支付)XML外部实体注入防护
  19. Vue.js之生命周期
  20. SPA (单页应用程序)

热门文章

  1. [Functional Programming] Pull Many Random Numbers in a Single State ADT Transaction
  2. opencv提取surf特征点出现的错误
  3. grid 布局 设置行列间距
  4. Srping AOP xml方式
  5. 监控应用服务器使用JMX监控Tomcat (推荐)
  6. Apache Nifi在Windows环境下搭建伪群集及证书登录
  7. Python MySQLdb 使用utf-8 编码插入中文数据
  8. mongoDB group命令详解
  9. RabbitMQ快速入门python教程
  10. delphi中检测局域网ip能够ping通模块