297 lines
7.7 KiB
C++
297 lines
7.7 KiB
C++
#include "StdAfx.h"
|
||
#include "GameSettingCfg.h"
|
||
#include "../base/Container.hpp"
|
||
CGameSetting::CGameSetting()
|
||
:Inherited(),m_NewDataAllocator(_T("GameSettingDataAlloc"))
|
||
{
|
||
memset(&m_DefaultGameSetting, 0, sizeof(m_DefaultGameSetting));
|
||
}
|
||
|
||
CGameSetting::~CGameSetting()
|
||
{
|
||
}
|
||
|
||
bool CGameSetting::LoadConfig(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 RideGame config"));
|
||
//读取标准物品配置数据
|
||
Result = readConfigs();
|
||
}
|
||
catch (RefString &s)
|
||
{
|
||
OutputMsg(rmError, _T("load CAchieve config error: %s"), s.rawStr());
|
||
}
|
||
catch (...)
|
||
{
|
||
OutputMsg(rmError, _T("unexpected error on load CAchieve config"));
|
||
}
|
||
//销毁脚本虚拟机
|
||
setScript(NULL);
|
||
return Result;
|
||
}
|
||
|
||
bool CGameSetting::readConfigs()
|
||
{
|
||
if ( !openGlobalTable("SettingConfig") )
|
||
return FALSE;
|
||
|
||
int nDefNumber_1 = 1;
|
||
int nDefNumber_0 = 0;
|
||
int nTabCount = (int)lua_objlen(m_pLua,-1);;
|
||
int nMaxIdx = 1;
|
||
|
||
int nValue = 0;
|
||
|
||
// 基础设置
|
||
if (openFieldTable("BasicsSettingmConfig"))
|
||
{
|
||
int nCount = (int)lua_objlen(m_pLua,-1);
|
||
int nPos = 0;
|
||
for (size_t i = 1; i <= nCount; i++)
|
||
{
|
||
if (!getFieldIndexTable(i))
|
||
{
|
||
//OutputMsg(rmError, "open job attr failed. l:%d, j:%d", lv, i);
|
||
return false;
|
||
}
|
||
nPos = i - 1;
|
||
|
||
nValue = getFieldInt("value", &nDefNumber_0);
|
||
if (nValue) (m_DefaultGameSetting.m_nBase) |= (1 << nPos);
|
||
|
||
closeTable();
|
||
}
|
||
|
||
const char* skills[] = {"skills1","skills2","skills3"};
|
||
for (size_t i = 0; i < ArrayCount(skills); i++)
|
||
{
|
||
if (openFieldTable(skills[i]))
|
||
{
|
||
int nSkillCount = (int)lua_objlen(m_pLua,-1);
|
||
for (size_t j = 1; j <= nSkillCount; j++)
|
||
{
|
||
if (!getFieldIndexTable(j))
|
||
{
|
||
return false;
|
||
}
|
||
|
||
nPos++;
|
||
nValue = getFieldInt("value", &nDefNumber_0);
|
||
if (nValue) (m_DefaultGameSetting.m_nBase) |= (1 << nPos);
|
||
|
||
closeTable();
|
||
}
|
||
closeTable();
|
||
}
|
||
}
|
||
|
||
if (openFieldTable("showPet"))
|
||
{
|
||
nPos++;
|
||
nValue = getFieldInt("value", &nDefNumber_0);
|
||
if (nValue) (m_DefaultGameSetting.m_nBase) |= (1 << nPos);
|
||
closeTable();
|
||
}
|
||
|
||
closeTable();
|
||
}
|
||
|
||
// 系统设置
|
||
if (openFieldTable("SystemSettingmConfig"))
|
||
{
|
||
int nCount = (int)lua_objlen(m_pLua,-1);
|
||
int nPos = 0;
|
||
for (size_t i = 1; i <= nCount; i++)
|
||
{
|
||
if (!getFieldIndexTable(i))
|
||
{
|
||
//OutputMsg(rmError, "open job attr failed. l:%d, j:%d", lv, i);
|
||
return false;
|
||
}
|
||
nPos = i - 1;
|
||
nValue = getFieldInt("value", &nDefNumber_0);
|
||
if (nValue) (m_DefaultGameSetting.m_nSystem) |= (1 << nPos);
|
||
|
||
closeTable();
|
||
}
|
||
|
||
closeTable();
|
||
}
|
||
|
||
// 药品设置
|
||
if (openFieldTable("MedicineSettingConfig"))
|
||
{
|
||
m_DefaultGameSetting.m_NmHp = getFieldInt("NmHp", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_NmMp = getFieldInt("NmMp", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_ImHp = getFieldInt("ImHp", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_ImMp = getFieldInt("ImMp", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_PerAdd1 = getFieldInt("PerAdd1", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_NmHpVal = getFieldInt("NmHpVal", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_NmHpTime = getFieldInt("NmHpTime", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_NmMpVal = getFieldInt("NmMpVal", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_NmMpTime = getFieldInt("NmMpTime", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_ImHpVal = getFieldInt("ImHpVal", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_ImHpTime = getFieldInt("ImHpTime", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_ImMpVal = getFieldInt("ImMpVal", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_ImMpTime = getFieldInt("ImMpTime", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_ValAdd1 = getFieldInt("ValAdd1", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_TimeAdd1 = getFieldInt("TimeAdd1", &nDefNumber_0);
|
||
closeTable();
|
||
}
|
||
|
||
// 保护设置
|
||
if (openFieldTable("ProtectSettingConfig"))
|
||
{
|
||
m_DefaultGameSetting.m_nHp1Val = getFieldInt("Hp1Val", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_nHp1Item = getFieldInt("Hp1Item", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_nHp2Val = getFieldInt("Hp2Val", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_nHp2Item = getFieldInt("Hp2Item", &nDefNumber_0);
|
||
closeTable();
|
||
}
|
||
|
||
// 挂机设置
|
||
if (openFieldTable("HookSettingConfig"))
|
||
{
|
||
int idx = 0;
|
||
if (getFieldInt("MaxHpMonster", &nDefNumber_1) > 0)
|
||
{
|
||
m_DefaultGameSetting.m_nHook |= (1 << idx);
|
||
}
|
||
++idx;
|
||
if (getFieldInt("DotPickItem", &nDefNumber_1) > 0)
|
||
{
|
||
m_DefaultGameSetting.m_nHook |= (1 << idx);
|
||
}
|
||
++idx;
|
||
if (getFieldInt("PickItem", &nDefNumber_1) > 0)
|
||
{
|
||
m_DefaultGameSetting.m_nHook |= (1 << idx);
|
||
}
|
||
++idx;
|
||
if (getFieldInt("Huofu", &nDefNumber_1) > 0)
|
||
{
|
||
m_DefaultGameSetting.m_nHook |= (1 << idx);
|
||
}
|
||
++idx;
|
||
if (getFieldInt("CallPet", &nDefNumber_1) > 0)
|
||
{
|
||
m_DefaultGameSetting.m_nHook |= (1 << idx);
|
||
}
|
||
++idx;
|
||
if (getFieldInt("HpMin", &nDefNumber_1) > 0)
|
||
{
|
||
m_DefaultGameSetting.m_nHook |= (1 << idx);
|
||
}
|
||
++idx;
|
||
if (getFieldInt("Hemophagy", &nDefNumber_1) > 0)
|
||
{
|
||
m_DefaultGameSetting.m_nHook |= (1 << idx);
|
||
}
|
||
++idx;
|
||
if (getFieldInt("Thunderbolt", &nDefNumber_1) > 0)
|
||
{
|
||
m_DefaultGameSetting.m_nHook |= (1 << idx);
|
||
}
|
||
++idx;
|
||
if (getFieldInt("Poisoning", &nDefNumber_1) > 0)
|
||
{
|
||
m_DefaultGameSetting.m_nHook |= (1 << idx);
|
||
}
|
||
++idx;
|
||
if (getFieldInt("Hailstorm", &nDefNumber_1) > 0)
|
||
{
|
||
m_DefaultGameSetting.m_nHook |= (1 << idx);
|
||
}
|
||
++idx;
|
||
if (getFieldInt("RoFstorm", &nDefNumber_1) > 0)
|
||
{
|
||
m_DefaultGameSetting.m_nHook |= (1 << idx);
|
||
}
|
||
++idx;
|
||
if (getFieldInt("ThunderClap1", &nDefNumber_1) > 0)
|
||
{
|
||
m_DefaultGameSetting.m_nHook |= (1 << idx);
|
||
}
|
||
++idx;
|
||
if (getFieldInt("ThunderClap2", &nDefNumber_1) > 0)
|
||
{
|
||
m_DefaultGameSetting.m_nHook |= (1 << idx);
|
||
}
|
||
++idx;
|
||
if (getFieldInt("ThunderClap3", &nDefNumber_1) > 0)
|
||
{
|
||
m_DefaultGameSetting.m_nHook |= (1 << idx);
|
||
}
|
||
|
||
m_DefaultGameSetting.m_nAutoSkillID = getFieldInt("AutoSkillID", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_nPet = getFieldInt("Pet", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_nHpLess = getFieldInt("HpLess", &nDefNumber_0);
|
||
m_DefaultGameSetting.m_nHpLessSkill = getFieldInt("HpLessSkill", &nDefNumber_0);
|
||
closeTable();
|
||
}
|
||
|
||
// 物品设置
|
||
if (openFieldTable("ItemSettingConfig"))
|
||
{
|
||
const INT_PTR nCount = lua_objlen(m_pLua, -1) + 1;
|
||
if (nCount > GAMESET_ITEMS_COUNT)
|
||
{
|
||
showErrorFormat(_T("物品设置超过预定最大Size,最大:%d, 配置数:%d"), GAMESET_ITEMS_COUNT, nCount);
|
||
return false;
|
||
}
|
||
|
||
memset(m_DefaultGameSetting.m_nItems,0x55555555,sizeof(m_DefaultGameSetting.m_nItems));
|
||
m_DefaultGameSetting.m_nItems[0] = 0x55555554;
|
||
|
||
if (enumTableFirst())
|
||
{
|
||
do
|
||
{
|
||
bool nDef_false = false;
|
||
int nIndex = getFieldInt("idx");
|
||
int nValue1 = getFieldBoolean("value1",&nDef_false);
|
||
int nValue2 = getFieldBoolean("value2",&nDef_false);
|
||
|
||
int nPos = (nIndex) * 2;
|
||
|
||
// 自动捡取
|
||
int nIntOffs = nPos / 32;
|
||
int nBitOffs = nPos % 32;
|
||
int* pStart = m_DefaultGameSetting.m_nItems + nIntOffs;
|
||
if (nValue1) (*pStart) |= (1 << nBitOffs);
|
||
else (*pStart) &= ~(1 << nBitOffs);
|
||
|
||
// 物品标红
|
||
nPos++;
|
||
nIntOffs = nPos / 32;
|
||
nBitOffs = nPos % 32;
|
||
pStart = m_DefaultGameSetting.m_nItems + nIntOffs;
|
||
if (nValue2) (*pStart) |= (1 << nBitOffs);
|
||
else (*pStart) &= ~(1 << nBitOffs);
|
||
|
||
}while (enumTableNext());
|
||
|
||
}
|
||
closeTable();//ItemSettingConfig
|
||
}
|
||
|
||
//m_DefaultGameSetting.m_nRecycle = 0;
|
||
memset(m_DefaultGameSetting.m_nRecycle,0,sizeof(m_DefaultGameSetting.m_nRecycle));
|
||
|
||
closeTable();
|
||
return true;
|
||
}
|