1. 关于项目中lua任务(某些没弄懂,但lua上耗费时间有点长了不看了)
  2.  
  3. 这段时间看了lua语法和项目中lua应用
  4. .在lua中注册c库,在lua5.2中好像都是注册c库,相当于在lua中定义一个tablekey是函数名字,value是函数指针
  5. m_spLuaState->RegLib("game", funcs);
  6.  
  7. .加载项目中所有lua并执行
  8. 刚开始不知道那个dofile具有执行lua的功能,结果是返回0表示成功,执行lua就是执行其中定义的一些函数和全局变量(普通变量,表等)
  9. 这个过程后就可以使用lua中的变量了
  10.  
  11. .然后上线发送玩家人物信息,这个地方不得不提任务存储方法,跟天龙差不多
  12. //有一些技巧
  13.  
  14. /**
  15. * @brief 任务项
  16. * @note
  17. * 自定义参数 m_uParam可保存当前任务的执行条件的进度:
  18. * e.g. 怪物A的杀敌数
  19. * 怪物B的杀敌数...
  20. * 物品A的收集量
  21. * 物品B的收集量...
  22. *
  23. */
  24. struct RcvMissonItem
  25. {
  26. short m_nIsOccupy; ///< 此数组位是否已被占用 返回 0 -- 表示为空 可以用 ,1 -- 表示 已被占用
  27. short m_nIsOnTrack; ///< 是否正在追踪
  28. int m_nMissionID; ///< 任务Id( 0 ~ MAX_MISSION_COUNT)
  29. int m_ScriptId; ///< 脚本Id
  30. short m_nMissionType; ///< 任务类型
  31. short m_nMissionState; ///< 任务执行状态
  32.  
  33. //这个主要是根据id去决定uParam的具体含义,在脚本中定义,如杀怪的个数和杀怪的bodyid
  34. unsigned int m_uParam[MAX_MISSION_PARAM_NUM]; ///< 自定义参数
  35. /*
  36. m_SriptId用处:
  37. 、比如本任务是杀怪任务,当怪物被杀后,判断本任务类型是否是杀怪任务
  38. 如果是,并且此怪物携带的被杀任务标记中任务Id是当前任务Id,则需执行奖励脚本;
  39. 、可有由脚本Id去决定m_uParam的具体参数实意;
  40. */
  41. bool IsInvaild()
  42. {
  43. return m_nIsOccupy == ;
  44. }
  45. };
  46.  
  47. struct MissionInfo_New
  48. {
  49. int m_nMissionCount; ///< 已接受的任务数量
  50. int m_nCurMainThreadId; ///< 正在执行的主线任务Id
  51. int m_nCurBtanchThreadId; ///< 正在执行的支线任务Id
  52. RcvMissonItem m_aMissionItem[MAX_MISSION_RCV_NUM]; ///< 任务背包中的任务项
  53. unsigned int m_aMissionDoneFlag[MAX_MISSION_TYPE_NUM]; ///< 某项任务是否执行的标记
  54.  
  55. //这个自定义数据没搞懂什么意思
  56. int m_aMissionData[MAX_MISSION_DATA_NUM]; ///< 玩家自定义任务数据
  57.  
  58. /*
  59. m_aMissionDoneFlag用法:
  60. nMissionId 取值范围(0 ~ MAX_MISSION_COUNT)
  61. 0xFFF
  62. 1111111 11111
  63. type count
  64. (0~127) (0~31)
  65. ==> 128 * 32 = 4096
  66. */
  67.  
  68. //主要理解这个其实和脏标记差不多,只是脏标记拿char存,而这个拿int存
  69. inline bool IsMissionDone(int nMissionId)
  70. {
  71. int nMissionIndex = nMissionId >> ;
  72. return !!(m_aMissionDoneFlag[nMissionIndex] & ( << (nMissionId & 0x1F)));
  73. }
  74. inline void SetMissionDoneFlag(int nMissionId, bool bDone)
  75. {
  76. int nMissionIndex = nMissionId >> ;
  77. if (bDone)
  78. m_aMissionDoneFlag[nMissionIndex] |= ( << (nMissionId & 0x1F));
  79. else
  80. m_aMissionDoneFlag[nMissionIndex] &= ~( << (nMissionId & 0x1F));
  81. }
  82.  
  83. /*
  84. m_aMissionData的用法:[索引值由任务配置表决定]
  85. 玩家自定义任务数据,可常用于一些频繁的直线任务
  86. e.g. 某种任务
  87. ①需判断一共执行多少次
  88. ②上次执行时间
  89. ③当天执行了多少次
  90.  
  91. 至于主线任务往往有前置任务需执行完方可领取的条件(就需前置任务标记/Id),这可由
  92. 任务配表中指定完成,用时只需按配表前置任务标记查询IsMissionDone判断是否Done过即可作判断。
  93. 配表应该指定的都是任务固有条件,如:完成和接收需要条件指标。
  94. */
  95.  
  96. };
  97.  
  98. .接下来就是lua执行和c库函数互调的过程,因lua要获得实时信息所有要调c函数
  99. 至于为什么用lua,对于那些比较复杂的逻辑比如任务,活动记录的东西较多,用c++实现起来可以,但容易出错每次修改代码需要编译
  100. lua不用编译写代码大大提高效率
  101.  
  102. 还有那个lua虚拟机到底是什么,我知道一个lua_state就可以是一个虚拟机,可以通过和lua传参交互,解释器又是什么意思

项目中lua(基础)的更多相关文章

  1. Jquery和Javascript 实际项目中写法基础-弹出窗和弹出层 (4)

     一.实际项目中有很多如下界面效果.    二.该效果可以归结为弹出窗或者弹出层来实现的,为什么这么说?看如下代码:      <!DOCTYPE html> <html> & ...

  2. Jquery和Javascript 实际项目中写法基础-ajax和json (3)

    一.什么是JSON数据? 一种轻量级的数据交换格式.实际中知道如何使用即可. 软件开发我认为就是一个会用,然后知其原理的过程. 例子如下: <!DOCTYPE html> <html ...

  3. Jquery和Javascript 实际项目中写法基础-闭包 (2)

    一.什么是闭包? 概念性的我就不去百度了,感兴趣的可以自己去搜下,我自己的理解,闭包就是一个封装的包,相当于类的概念,把乱七八糟的的东西封装到一起,然后统一使用一个对象来调用,实现代码部分对外开放,部 ...

  4. Jquery和Javascript 实际项目中写法基础 (1)

    一.JS 是什么,jquery 是什么  就不说明了,直接说一般使用是怎么样的 <!DOCTYPE html> <html> <head> <meta cha ...

  5. NopCommerce开源项目中很基础但是很实用的C# Helper方法

    刚过了个五一,在杭州到处看房子,不知道杭州最近怎么了,杭州买房的人这么多,房价涨得太厉害,这几年翻倍翻倍地涨,刚过G20,又要亚运会,让我这样的刚需用户买不起,也买不到房子,搞得人心惶惶,太恐怖了,心 ...

  6. redux在react项目中的应用

    今天想跟大家分享一下redux在react项目中的简单使用 1 1.redux使用相关的安装 yarn add redux yarn add react-redux(连接react和redux) 2. ...

  7. 快速将wax配置到项目中进行lua开发

    通过Finder浏览到你保存该项目的文件夹.创建三个新的文件夹:wax.scripts和Classes. 第一:首先,下载源代码的压缩包.Wax放在GitHub上(https://github.com ...

  8. iOS基础教程:在建好的项目中加入CoreData[转]

    这几天在做一个ios的小项目,项目中需要对数据进行基本的增删改查操作.于是就想用一把CoreData.但在创建项目初期,没有包含进CoreData.于是就在已建好的项目中加入CoreData.由于第一 ...

  9. vue-cli项目中使用mockjs(基础使用和全局配置使用)

    参考:vue+mockjs 模拟数据,实现前后端分离开发 (Github-Demo可查看全部代码),Mockjs ,Axios 很多时候前后端分离的项目在开发过程中前端所需数据和后端接口并不会同步开发 ...

随机推荐

  1. 【React Native开发】React Native控件之Image组件解说与美团首页顶部效果实例(10)

    ),React Native技术交流4群(458982758),欢迎各位大牛,React Native技术爱好者增加交流!同一时候博客左側欢迎微信扫描关注订阅号,移动技术干货,精彩文章技术推送! Im ...

  2. Unity3D教程宝典之Web服务器篇:(第二讲)从服务器下载图片

    转载自风宇冲Unity3D教程学院                                    从Web服务器下载图片 上一讲风宇冲介绍了wamp服务器及安装.这回介绍如何从服务器下载内容至 ...

  3. Linux——配置使用github

    前一段时间在windows下配置了github的环境,参考“TortoiseGit连接github.com”一文,现在学习在linux下编程,在网上找了点资料,配置在linux下使用github,将过 ...

  4. c++ 银行管理系统及报告

    1.题目描写叙述: 本代码为银行管理系统,总体分为管理员模式和普通用户模式: (1)在管理员模式中能完毕 ①用户信息录入 ②改动管理员password ③改动指定账户信息 ④信息管理业务 (2)在普通 ...

  5. LoadRunner监控tomcat

    LoadRunner监控tomcat (2012-10-25 14:01:42)转载▼ double atof (const char * string);Action(){    // 保存JVM内 ...

  6. iOS-贝塞尔曲线之自定义饼图

    代码地址如下:http://www.demodashi.com/demo/11981.html 项目中需要统计数据展现, 采用了饼图形式展现. 第一步: 了解下贝塞尔曲线相关概念 贝塞尔曲线相关概念: ...

  7. 了解机器学习框架CoreML

    代码地址如下:http://www.demodashi.com/demo/11972.html CoreML是iOS 11新推出的机器学习框架,是人工智能的核心内容,他可以在训练好的机器学习模型应用到 ...

  8. java之static关键字

    介绍: 1.在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份. 2.用static声明的方法为静态方 ...

  9. HTTP协议--cookie、session、缓存与代理

    1 Cookie和 Session Cookie和 Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决 HTTP无状态的问题而所做的努力. Session可以用 Cook ...

  10. 转:winform_webApiSelfHost及 OWIN WebAPI Service

    winform_webApiSelfHost 窗本构造函数中添加以下代码: var baseAddress = ConfigurationManager.AppSettings["baseA ...