166 lines
4.0 KiB
C++
166 lines
4.0 KiB
C++
|
|
|
|||
|
|
#include "stdafx.h"
|
|||
|
|
#include "RobotConfig.h"
|
|||
|
|
|
|||
|
|
void CRobotConfig::showError(LPCTSTR sError)
|
|||
|
|
{
|
|||
|
|
m_sLastErrDesc = sError;
|
|||
|
|
RefString s = _T("[Config Error]");
|
|||
|
|
s += sError;
|
|||
|
|
throw s;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//在这里读取配置
|
|||
|
|
bool CRobotConfig::readConfig(CRobotManager *lpSSManager)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if ( !openGlobalTable("RobotConfig") )
|
|||
|
|
return false;
|
|||
|
|
lpSSManager->m_maxAccountCount = getFieldInt("loginAccountLimit");
|
|||
|
|
lpSSManager->m_nServerIndex = getFieldInt("serverIndex"); //要登陆的服务器的编号
|
|||
|
|
lpSSManager->m_groupLoginInterval = getFieldInt("groupLoginInterval");
|
|||
|
|
getFieldStringBuffer("procName", lpSSManager->m_sConsoleName, sizeof(lpSSManager->m_sConsoleName));
|
|||
|
|
|
|||
|
|
CBaseList<SERVERCONFIG> &configs = lpSSManager->GetServerConfig(); //获取配置列表
|
|||
|
|
configs.clear();
|
|||
|
|
|
|||
|
|
//读取网关的配置
|
|||
|
|
if ( openFieldTable("gates") ==false)
|
|||
|
|
{
|
|||
|
|
OutputMsg(rmError,_T("No table gates found"));
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
SERVERCONFIG oneConfig; //一个配置
|
|||
|
|
INT_PTR j =0;
|
|||
|
|
if (enumTableFirst())
|
|||
|
|
{
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
getFieldStringBuffer("ip",oneConfig.ip,sizeof(oneConfig.ip) );
|
|||
|
|
oneConfig.nPort = getFieldInt("port");
|
|||
|
|
oneConfig.nMaxPort = getFieldInt("maxPort");
|
|||
|
|
configs.add(oneConfig);
|
|||
|
|
} while (enumTableNext());
|
|||
|
|
}
|
|||
|
|
closeTable();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//读取账户的列表
|
|||
|
|
CBaseList<LOGINACCOUNT>& accounts = lpSSManager->GetAccountList();
|
|||
|
|
accounts.clear();
|
|||
|
|
|
|||
|
|
if ( openFieldTable("accounts") ==false)
|
|||
|
|
{
|
|||
|
|
OutputMsg(rmError,_T("No table accounts found"));
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
LOGINACCOUNT oneConfig; //一个配置
|
|||
|
|
char name[32]; //名字
|
|||
|
|
|
|||
|
|
INT_PTR j =0;
|
|||
|
|
if (enumTableFirst())
|
|||
|
|
{
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
getFieldStringBuffer("name",name,sizeof(oneConfig.name) );
|
|||
|
|
getFieldStringBuffer("pass",oneConfig.pass,sizeof(oneConfig.pass) );
|
|||
|
|
int nDef =-1;
|
|||
|
|
char number[16];
|
|||
|
|
//accountStartId 账户开始的ID,如果是-1表示不使用前缀表示法,使用完整账户表示法,比如helloworld
|
|||
|
|
//accountEndId 账户结束的ID, 如果是-1表示不使用前缀表示法
|
|||
|
|
int nStartId = getFieldInt("accountStartId",&nDef);
|
|||
|
|
int nEndId = getFieldInt("accountEndId",&nDef);
|
|||
|
|
oneConfig.bDoWord = (byte)getFieldInt("doWord", &nDef);
|
|||
|
|
if(nStartId >=0 && nEndId >=0 && nEndId >= nStartId)
|
|||
|
|
{
|
|||
|
|
for(int i= nStartId ; i<= nEndId; i++ )
|
|||
|
|
{
|
|||
|
|
strcpy(oneConfig.name,name);
|
|||
|
|
|
|||
|
|
sprintf(number,"%d",i);
|
|||
|
|
strcat(oneConfig.name,number);
|
|||
|
|
accounts.add(oneConfig);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
strcpy(oneConfig.name,name);
|
|||
|
|
accounts.add(oneConfig);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
} while (enumTableNext());
|
|||
|
|
}
|
|||
|
|
closeTable();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 读取地图分布配置
|
|||
|
|
readMapPoints(lpSSManager);
|
|||
|
|
|
|||
|
|
closeTable();
|
|||
|
|
OutputMsg(rmNormal,"Load Config finished");
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CRobotConfig::readMapPoints(CRobotManager *lpSSManager)
|
|||
|
|
{
|
|||
|
|
if (feildTableExists("mappoints") && openFieldTable("mappoints"))
|
|||
|
|
{
|
|||
|
|
INT_PTR nCount = lua_objlen(m_pLua, -1);
|
|||
|
|
if (nCount > 0 && enumTableFirst())
|
|||
|
|
{
|
|||
|
|
CBaseList<MapScenePoint>& mapPoints = lpSSManager->GetMapPointList();
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
MapScenePoint mp;
|
|||
|
|
mp.nSceneId = getFieldInt("sid");
|
|||
|
|
getFieldStringBuffer("sname", mp.szSceneName, ArrayCount(mp.szSceneName));
|
|||
|
|
mp.nX = getFieldInt("x");
|
|||
|
|
mp.nY = getFieldInt("y");
|
|||
|
|
mp.nLevel = getFieldInt("level");
|
|||
|
|
mapPoints.add(mp);
|
|||
|
|
} while (enumTableNext());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
closeTable();
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CRobotConfig::loadConfig(CRobotManager *lpSSManager, const char * sConfigFile)
|
|||
|
|
{
|
|||
|
|
static LPCTSTR szConfigFileName = _T("./data/robot/RobotConfig.txt");
|
|||
|
|
if (NULL == sConfigFile)
|
|||
|
|
{
|
|||
|
|
sConfigFile = szConfigFileName;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool result = false;
|
|||
|
|
|
|||
|
|
wylib::stream::CMemoryStream ms;
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
//加载配置文件
|
|||
|
|
if ( ms.loadFromFile(sConfigFile) <= 0 )
|
|||
|
|
{
|
|||
|
|
showErrorFormat(_T("unabled to load config from %s"), sConfigFile);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
setScript((LPCSTR)ms.getMemory());
|
|||
|
|
//读取配置文件
|
|||
|
|
result = readConfig(lpSSManager);
|
|||
|
|
}
|
|||
|
|
catch (RefString& s)
|
|||
|
|
{
|
|||
|
|
OutputMsg( rmError, (LPCTSTR)s );
|
|||
|
|
}
|
|||
|
|
catch (...)
|
|||
|
|
{
|
|||
|
|
OutputMsg( rmError, _T("unexpected error on load config") );
|
|||
|
|
}
|
|||
|
|
return result;
|
|||
|
|
}
|