Files
mir_server/server/LogicServer/config/PkProvider.cpp
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

94 lines
2.1 KiB
C++

#include "StdAfx.h"
#include "PkProvider.h"
using namespace wylib::stream;
CPkProvider::CPkProvider()
: Inherited(), m_DataAllocator(_T("PKDataAlloc"))
{
}
CPkProvider::~CPkProvider()
{
}
bool CPkProvider::LoadPkConfig(LPCTSTR sFilePath)
{
bool Result = false;
CMemoryStream ms;
CCustomLuaPreProcessor pp;
try
{
//从文件加载配置脚本
if ( ms.loadFromFile(sFilePath) <= 0 )
showErrorFormat(_T("unable to load from %s"), sFilePath);
//对配置脚本进行预处理
GetLogicServer()->GetVSPDefine().RegisteToPreprocessor(pp);
LPCTSTR sText = pp.parse((LPCTSTR)ms.getMemory(), sFilePath);
//设置脚本内容
if ( !setScript(sText) )
showError(_T("syntax error on PK config"));
//读取标准物品配置数据
Result = readConfigs();
}
catch (RefString &s)
{
OutputMsg(rmError, _T("load pk config error: %s"), s.rawStr());
}
catch (...)
{
OutputMsg(rmError, _T("unexpected error on load PK config"));
}
//销毁脚本虚拟机
setScript(NULL);
return Result;
}
bool CPkProvider::readConfigs()
{
CDataAllocator dataAllocator;
if ( !openGlobalTable("PkConfig") ) return false;
int nDef_1 = 1;
int nDef_0 = 0;
pkSubTime = getFieldInt("subPk",&nDef_1);//单位是秒
redName = getFieldInt("redName",&nDef_1);//红名
m_pkValue = getFieldInt("pkValue",&nDef_1);
if(!openFieldTable("nEnterRange")) return false;
{
m_nPrisonSceneId = getIndexInt(1,&nDef_0);
m_nPrisonPosX = getIndexInt(2,&nDef_0);
m_nPrisonPosY = getIndexInt(3,&nDef_0);
m_nPrisonWeight = getIndexInt(4,&nDef_0);
m_nPrisonHeight = getIndexInt(5,&nDef_0);
}
closeTable();
m_ClearTime = getFieldInt("nameColorClearTime",&nDef_1);
m_nSubPkValue = getFieldInt("nSubPkValue",&nDef_1);
m_nCountPkValue = getFieldInt("nCountPkValue",&nDef_1);
//关闭全局表
closeTable();
//原来的内存块释放到
m_DataAllocator.~CObjectAllocator();
//将临时的内存块复制到正式的
m_DataAllocator = dataAllocator;
//清空临时的
ZeroMemory(&dataAllocator, sizeof(dataAllocator));
return true;
}
void CPkProvider::showError(LPCTSTR sError)
{
m_sLastErrDesc = sError;
RefString s = _T("[PkProvider]");
s += sError;
throw s;
}