您现在的位置是:时尚 >>正文
天龙八部服务端Lua脚本系统(转)
时尚171人已围观
简介一、Lua脚本功能接口1. LuaInterface.h/.cpp声明和实现LuaInterface。LuaInterface成员如下:2. LuaCFuncRegister.cpp里面对所有导出到L ...
一、天龙统转Lua脚本功能接口
1. LuaInterface.h/.cpp声明和实现LuaInterface。部服本系
LuaInterface成员如下:
2. LuaCFuncRegister.cpp里面对所有导出到Lua的天龙统转C++函数进行注册。
这些C++函数的部服本系实现是在下列头文件中进行的:
这些函数并不是功能的真正实现地方,真正的天龙统转实现代码在Scene、Obj_Human等地方。部服本系这里只是天龙统转集中转调而已。
3. 注册完成后,部服本系在Lua脚本中就可以使用类似AddMission接口调用C++里面功能。天龙统转
二、部服本系Lua脚本位置
所有脚本在BinPublicDataScript子目录中。天龙统转
BinPublicDataScript.dat是部服本系索引,里面保存了ScriptID和对应的天龙统转脚本文件名。如:
888888=scene.lua
888889=mail.lua
888890=player_login.lua
…
脚本ID是部服本系6位的。
三、天龙统转脚本索引的初始化
每个场景都会进行脚本初始化,具体是在Scene::Load里面,在在m_pLuaInterface初始化之后。
m_pScriptFileMgr->Init将”888888=scene.lua”拆开,保存ID和文件名到SFileData里面。所有的SFileData用SFileDataLink串起来。
四、脚本加载和调用
每个脚本的调用都是通过INT LuaFnCallScriptFunction(Lua_State* L);来进行的。该函数是一个C++函数,脚本里面调用名是CallScriptFunction,注册如下:
{ “CallScriptFunction”, FuncProto(LuaFnCallScriptFunction)},
LuaFnCallScriptFunction的实现在文件LuaFnTbl_Misc.h里。
可以看到在,此函数:
l 把SFileData添加到pScene->GetLuaInterface()->m_ScriptTable表里面;
pSFileData = pScene->GetLuaInterface()->GetOwner()->GetScriptFileMgr()->GetFileData(scriptId);
pScene->GetLuaInterface()->m_ScriptTable.Add( scriptId, pSFileData ) ;
l 然后加载脚本;
pScene->GetLuaInterface()->mLua.Load( const_cast(filename) ) ;
l 最后调用脚本。
五、典型脚本的结构
见ScriptDef.h,定义了一些脚本接口函数,如OnDefaultEvent,对于脚本805007,就是:
function x805007_OnDefaultEvent( sceneId, selfId,targetId );
有一些调用没有在这里定义宏,直接写在C++代码里面,如OnScenePlayerLogin。
#define DEF_EVENT_ENTRY_FUNC_NAME (“OnDefaultEvent”) //脚本进入函数
#define DEF_ON_KILL_OBJECT_FUNC_NAME (“OnKillObject”)
#define DEF_ON_ITEM_CHANGED_FUNC_NAME (“OnItemChanged”)
#define DEF_ON_PET_CHANGED_FUNC_NAME (“OnPetChanged”)
#define DEF_ON_ENTER_AREA_FUNC_NAME (“OnEnterArea”)
#define DEF_ON_LEAVE_AREA_FUNC_NAME (“OnLeaveArea”)
#define DEF_EVENT_ON_TIMER (“OnTimer”)
#define DEF_MISSION_ACCEPT (“OnMissionAccept”) //接受任务
#define DEF_MISSION_ABANDON (“OnAbandon”) //放弃任务
#define DEF_MISSION_REFUSE (“OnMissionRefuse”) // 拒绝接受任务
#define DEF_MISSION_SUBMIT (“OnMissionSubmit”) //任务完成后,提交任务
#define DEF_MISSION_CHECK (“OnMissionCheck”) //任务完成条件检查
#define DEF_MISSION_CONTINUE (“OnMissionContinue”) //任务没完成,继续
六、样例分析
大理NPC赵天师脚本分析
脚本名:Scriptobjdaliodali_xinshoutian.lua,汗,居然叫这个名字,找了半天,一般的命名都是拼音。
–赵天师
–脚本号
x002030_g_scriptId = 002030
–所拥有的事件ID列表
x002030_g_eventList={ 210200,210204,210205,210208,210210,210212,210213,210214,210216,210217,210220,210223, 210224, 210225, 210229, 210230, 210232, 210238, 210239, 210237, 210240, 200080, 200083, 200086, 200091, 200094,200095,210241,050022}
一般情况,每个event对于一个任务,也是一段脚本实现的。如210200对于:
;大理城新手指导任务
210200=eventdaliedali_zhidao_0200.lua
–找人任务
–赵天师寻找蒲良
NPC脚本触发接口函数是xxx_OnDefaultEvent,在AI_Human的PushCommand_DefaultEvent里面触发。
ORESULT PushCommand_DefaultEvent( ObjID_t idNPC );
pCharacter->getScene()->GetLuaInterface()->ExeScript_DDD(
idScript,
DEF_EVENT_ENTRY_FUNC_NAME,
(INT)pCharacter->getScene()->SceneID(),
(INT)pCharacter->GetID(),
(INT)pNPC->GetID() ) ;
Tags:
上一篇:攻城掠地新服活动
下一篇:赛尔号玄武巴斯特六大护法击败攻略
相关文章
2023年06月陕西西安市浐灞第三初级中学校聘教师公开招聘上岸笔试2010-2022年高频考点试题带答案详解析.docx
时尚2023年06月陕西西安市浐灞第三初级中学校聘教师公开招聘上岸笔试2010-2022年高频考点试题带答案详解析图片大小可自由调整)第I卷一.历年考点试题荟萃(共390题)1.左图是从圆台中挖出一个截面 ...
【时尚】
阅读更多全新一代林肯航海家混动版1129km超长续航 免除续航焦虑
时尚“这款林肯的航海家是可以给大家做到我们一个双屏设计,整体的话呢他的一个车机系统是8155的一个芯片,可以连接我们的一个5G网络,同时大家可以看到这款车型的话他的一个整体的屏幕可以一直延续到我们的一个副 ...
【时尚】
阅读更多《古代汉语》常用词(一)
时尚言语谓访请召报告谏讨 反复舍次如 驰骤侵袭奔亡逐及执免 享荐 圆虞 克堪有无昭穆 勤乏 乱整 两贰兵车甲介卒乘 君帅姑女 族党雠 河防城池田馆1.【言】一)动词。说话,说。论语乡党:“食不语,寝不~。 ...
【时尚】
阅读更多
热门文章
最新文章
友情链接
- 有关励志的名言警句(有关励志的名言警句十字以内)
- 双十一是什么节日(台湾双十一是什么节日)
- jan是几月(aug是几月)
- 小炒河虾是什么地方的菜(小炒河虾的家常做法)
- pvp是什么意思(pvp是什么材料)
- 关于努力的名人名言(关于努力的名人名言10字)
- 自己人生格言励志(名人名言――短句)
- 鲁迅名言名句(鲁迅名言名句,经典语录愿中国青年)
- 扁鹊本名叫什么(扁鹊本名叫什么人)
- 土司是什么(土司是什么家庭出身)
- 飞了鸡毛(飞了鸡毛是哪个奢侈品)
- 一代枭雄谁是内鬼(一代枭雄谁是内鬼第几集)
- 日环食和日全食的区别(日偏食,日环食,日全食的成因区别是什么)
- 看淡一切八字短句(看淡一切八字短句个性签名)
- 正能量句子励志短文(正能量句子励志短文300)
- 四大时装周最早开幕(国际时装周秀场)
- 拍拖的时候要注意什么(第一次拍拖要注意什么)
- 帝吧是什么(帝吧是什么组织)
- 幽默搞笑句子大全笑死人(幽默口才顺口溜900句)
- 野心勃勃是什么生肖(野心勃勃是什么生肖谢谢)
- 大满贯什么意思(超级大满贯什么意思)
- 骨头汤里白色的是什么(骨头汤的白色主要是什么)
- 什么是私生饭(什么是私生饭TnT)
- 大小周休息是什么意思(大小周休息是什么意思应出勤天数是多少啊)
- 桃李满天下最初
- 粽子可以在微波炉加热吗(冷冻粽子微波炉怎么加热)
- 笑到窒息的笑话(笑到窒息的笑话300字)
- 五色线(五色线绑铜钱的意义)
- 古代名医扁鹊本名叫什么(古代名医扁鹊药方)
- QG被罚100万(qg被罚100万是哪场比赛)
- 日全食和日环食区别(日环食与日全食区别形成示意图)
- dps是什么意思(逆水寒dps是什么意思)
- 藏海花完结了吗(藏海花1和2怎么接不上)
- 双11是什么日子(双11是什么日子说说)
- 人生名言名句经典摘抄(人生名言名句经典摘抄带作者)
- 领悟人生的精辟语句(领悟人生的经典短语)
- 三英战吕布中的三英是谁(三英战吕布中的三英是谁三回三国指的是那三国)
- 经典人生感悟句子(经典人生感悟句子 句句精辟睿智)
- 今年315主题(今年315主题是什么陕西)
- 鸣人的妈妈(鸣人为什么姓漩涡不姓波风)