| 分析脚本 
 8.1 Class view
 
 
 class CScriptEnvironment : public tScriptEnvironment
class CScriptSystem : public tScriptSystem
 This is the complete list of members for CScriptEnvironment, including all inherited members.
 
 
 CScriptEnvironment(LPCTSTR szName, LPCTSTR szFileName)
DoFile(LPCTSTR szScriptFile)
DoFunction(LPCTSTR szFunctionName, LPCTSTR szParam=NULL)
DoString(LPCTSTR szString)
DoString_WithCPPException(LPCTSTR szString)
DoString_WithGenException(LPCTSTR szString)
GetLuaObject(VOID)
GetName(VOID) const 
m_strFileName
m_strName
m_strNameInLua
m_theEnvObj
~CScriptEnvironment()
 
 8.2 脚本表
 
 主要有任务脚本和 ui 脚本
 参考:\天龙八部策划文档\任务-传送-NPC 与怪物摆放\《脚本 ID 编号规则.doc》
 
 
 任务脚本
 
 
 所有任务相关脚本文件 Public\Data\Script.tab,参考《任务脚本.doc》| quest | 任务脚本 \Bin\Public\Data\Script\quest |  | Common | 玩法脚本 |  | Growpoint | 生长点脚本 |  | Item | 物品使用脚本 | 
 
 
 UI 脚本
 所有UI相关脚本列表  resource\config\ui.tab
 参考《UI 组定义.doc》
 
 
 8.3 脚本使用逻辑通道
 8.3.1 脚本加载
 
 
 void CScriptSystem::_loadQuestFile(void)
 
 这里加载了 script.tab,也就是所有的任务相关的脚本
 
 
 8.3.2 C++注册
 
 
 CScriptSystem::Initial(VOID*)
 C++函数注册,参考《C++注册全局函数.doc》
 
 
 C++类注册表,参考《C++注册类.doc》
 
 
 C++                            Lua
 
 | Character | Target |  | PlayerMySelf | Player |  | DataPool | DataPool |  | AbilityTeacher | AbilityTeacher |  | Pet | Pet |  | PetInviteFriend | PetInviteFriend |  | TargetPet | TargetPet |  | Bank | Bank |  | Exchange | Exchange |  | LifeAbility | LifeAbility |  | Guild | Guild |  | Country | Country |  | PlayerPackage | PlayerPackage |  | SuperTooltips | SuperTooltips |  | SuperTooltips | SuperTooltips2 |  | StallSale | StallSale |  | StallBuy | StallBuy |  | StallBbs | StallBbs |  | MissionReply | MissionReply |  | Talk | Talk |  | NpcShop | NpcShop |  | IBShop | IBShop |  | QuickChange | QuickChange |  | PlayerShop | PlayerShop |  | Friend | Friend |  | FriendSearcher | FriendSearcher |  | DaytipsData | DaytipsData |  | QuestLogData | QuestLogData |  | CGameProduce_Login | GameProduceLogin |  | SkillStudy | SkillStudy |  | Mount | Mount |  | SouXiaLu | SouXiaLu | 
 
 8.4 脚本环境
 
 8.4.1 创建脚本运行环境
 
 
 VOID CUIWindowItem::PreLoadWindow(VOID)
{
m_pScriptEnv = g_pScriptSys->NewEnvironment(m_strWindowName.c_str(), 
m_strScriptFileName.c_str());
 所有脚本环境对象的this均指向元表MetaTable_UIWindowItem。
 
 MetaTable_UIWindowItem __index---------------|| RegisterEvent | CUIWindowItem::LUA_RegisterEvent |  | Show | CUIWindowItem::LUA_Show |  | Hide | CUIWindowItem::LUA_Hide |  | TogleShow | CUIWindowItem::LUA_TogleShow |  | IsVisible | CUIWindowItem::LUA_IsVisible |  | TransAllWindowText | CUIWindowItem::LUA_TransAllWindowText |  | CareObject | CUIWindowItem::LUA_CareObject | 
 
   
 
 8.4.2 环境类 CscriptEnvironment
 
 
 CScriptEnvironment::CScriptEnvironment(LPCTSTR szName, LPCTSTR szFileName)
{
//创建环境Table
m_strName = szName;
m_strFileName = szFileName;
m_strNameInLua = m_strName+"_Env";
m_theEnvObj = 
CScriptSystem::GetMe()->GetLuaState()->GetGlobals().CreateTable(m_strNameInLua.c_str());
}
 m_strFileName 脚本文件全路径
m_strName 环境名,脚本文件窗口对应的名字,也就是 tab 数据库中的名字
m_strNameInLua m_strName+"_Env";
m_theEnvObj 以 strNameInLua 为名字创建的 lua 表
窗口名↔脚本环境↔脚本环境名↔脚本环境 lua 对象 均为一一对应
 
 
 8.4.3 脚本系统 CscriptSystem 保存了所有环境对象
 
 
 tScriptEnvironment* CScriptSystem::NewEnvironment(LPCTSTR szName, LPCTSTR szFileName)
{
CScriptEnvironment* pNewEnv = new CScriptEnvironment(szName, szFileName);
m_listScriptEnv.push_back(pNewEnv);
 
 8.4.4 激活脚本环境
 
 
 void CScriptSystem::SetActiveEnvironment(LPCTSTR szEnvName)
{
m_strEnvName = szEnvName;
CHAR szSetEnvScript[MAX_PATH];
_snprintf(szSetEnvScript, MAX_PATH, "setmetatable(_G, {__index = %s});", 
szEnvName);
GetLuaState()->DoString(szSetEnvScript);
 基本环境激活其实就是将_G 的__index 元表重新设置为 CscriptEnvironment 对应的 lua 表对象。
 
 
 
 |