📄 basedata.cpp
字号:
////////////////////////////////////////////////////////////////////////////////////////
// DBData.cpp : implementation file
//
//
//
//
////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "BaseData.h"
#include "MapDBAccess.h" // DATA BASE
#include "Map.h"
#include "QuestEngine.h" // Quest
#include "Param_MapServer.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
////////////////////////////////////////////////////////////////////////////////////////
// Global 函荐
////////////////////////////////////////////////////////////////////////////////////////
extern CQuestEngine *g_pQuestEngine; // Quest Engine
extern CDBConnection g_AccountDB; // AccountDB
extern Map *g_pMap; // MAP 沥焊
////////////////////////////////////////////////////////////////////////////////////////
// DB Data
////////////////////////////////////////////////////////////////////////////////////////
BaseData::BaseData()
{
memset( _RARE_ENCAHTS, 0, sizeof( _RARE_ENCAHTS ) ); // 2004-10-26 by kuma
}
////////////////////////////////////////////////////////////////////////////////////////
// Load等 葛电 沥焊甫 Remove矫糯
////////////////////////////////////////////////////////////////////////////////////////
BaseData::~BaseData()
{
Clean_MapInfor(); // 檬扁 甘沥焊 昏力
Clean_InitStat(); // 檬扁 荐摹 蔼阑 昏力
Clean_LevelUP(); // Level UP Data甫 昏力
Clean_BaseItem(); // Delete Base Item阑 昏力 矫糯
Clean_Setitem(); // SETTIME
Clean_LareEnchantChart(); // Lare Enchant Chart 单捞鸥甫 秦力
Clean_BaseSkill(); // Delete DB俊辑 Skill沥焊
Clean_BaseNPC(); // Delete BASE NPC
Clean_SellItem(); // Delete NPC 魄概 ITEM沥焊
Clean_LinkMap(); // Delete Link Map
Clean_UpgradeChart();
Clean_UpgradePercent(); // Upgrade PecentChart
Clean_QuestChart(); // QUEST CHART
#ifdef DEF_TITLESYSTEM
Clean_TitleChart(); // Jason 2004-05-08
#endif
#ifdef DEF_QUESTITEM
Clean_QuestItemChart(); // Jason 2004-06-08
#endif
Clean_PKChaoChart(); // Duke 2004-06-18
#ifdef DEF_SKILLDROP
Clean_SkillDropChart();
#endif
Clean_GuildSkillChart(); //Jason 2004-06-21
#if defined(DEF_SPEEDHACK) || defined(DEF_KORSPEEDHACK)
Clean_HackingChart(); //Jason 2004-09-20-china
#endif
#ifdef DEF_PRODUCTION_DECOMPOSITON
Clean_HalconChart(); //Jason 2004-10-13
#endif
#if defined(DEF_PRODUCTION_DECOMPOSITON) || defined(DEF_KUMA_GAMBLE)
Clean_ProductionChart();
#endif
#ifdef DEF_KUMA_GAMBLE
Clean_GambleNormalItemChart();
Clean_GambleItemChart();
#endif
}
////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
bool BaseData::bConnectDB()
{
#ifdef CHINESE_VERSION
#ifdef DEF_NEWREGISTRY
if(!g_AccountDB.DirectConnect(_T(_Module.m_szDBIP), _Module.m_szDBID, _Module.m_szDBPWD) )
{
return false;
}
#else
if(!g_AccountDB.DirectConnect(_T(_Module.m_szDBIP), _T("sa"), _T("!234?werDsdfVxcv")) )
{
return false;
}
#endif //DEF_NEWREGISTRY
#else //CHINESE_VERSION
#ifdef DEF_NEWREGISTRY
if(!g_AccountDB.DirectConnect(_T(_Module.m_szDBIP), _Module.m_szDBID, _Module.m_szDBPWD) )
{
return false;
}
#else
if(!g_AccountDB.DirectConnect(_T(_Module.m_szDBIP), _T("MapServer"), _T("1234567+-*/")) )
{
return false;
}
#endif //DEF_NEWREGISTRY
#endif //CHINESE_VERSION
return true;
}
////////////////////////////////////////////////////////////////////////////////////////
// DB俊辑 檬扁沥焊甫 佬绢咳
//
// - Item扁夯 沥焊甫 佬澜
// - 胶懦 沥焊甫 佬澜
// - NPC 魄概 沥焊甫 佬澜
// - NPC/MONSTER狼 扁夯 沥焊甫 佬澜
//
////////////////////////////////////////////////////////////////////////////////////////
bool BaseData::LoadDBData()
{
if( !Load_MapServerInfo() ) return false; // MAP SERVER INFO LOAD
if( !Load_MapServerNetInfo()) return false; // MAP SERVER Net INFO LOAD
if( !LoadInitStat() ) return false; // 某腐 扁檬 单捞鸥 Load
if( !LoadLevelUP() ) return false; // LEVEL UP CHART
if( !LoadQuestChart() ) return false; // QUEST CHART (BASE ITEM焊促 刚历 LAOD)
if( !LoadBaseNPC() ) return false; // BASE MONSTER
if( !LoadBaseItem() ) return false; // BASE ITEM
if( !LoadSetItem() ) return false ; // SETITEM
if( !LoadRareEnchant() ) return false; // RARE ENCHANT ITEM
if( !LoadSkill() ) return false; // SKILL
if( !LoadLinkMap() ) return false; // LINK MAP
if( !LoadUpgradeChart() ) return false; // UPGRADE CHART
if( !LoadUpgradePercent() ) return false ; // UPGRADE PERCENT
#ifdef DEF_TITLESYSTEM
//Jason 2004-05-08
if( !LoadTitleChart() ) return false ; // TITLE CHART
#endif
#ifdef DEF_QUESTITEM
//Jason 2004-06-08
if( !LoadQuestItemChart() ) return false ; // QUEST ITEM CHART
#endif
#ifdef DEF_SKILLDROP
if(!LoadSkillDropChart() ) return false ; // SKILL DROP CHART
#endif
// NPC啊 魄概且 沥焊甫 免仿矫糯
Clean_SellItem();
for( int i=0; i < g_pMap->m_nMaxLayer; i ++ )
{
if( !LoadNPCSellItem( i, g_pMap->GetMapID( i ) ) ) return false;
}
if( !Load_Quest() ) return false; // QUEST SCRIPT LOAD
if( !LoadPKChaoChart() ) return false; // PK CHAO CHART LOAD
//Jason 2004-06-21
if( !LoadGuildSkillChart() ) return false; // GUILD SKILL CHART LOAD
LoadQuestLinkChart(); // 颇萍 涅胶飘 沥焊 LOAD
#if defined(DEF_SPEEDHACK) || defined(DEF_KORSPEEDHACK)
//Jason 2004-09-20-china
if(!LoadHackingChart()) return false;
#endif
#ifdef DEF_PRODUCTION_DECOMPOSITON
//Jason 2004-10-13
if(!LoadHalconChart()) return false;
#endif
#if defined(DEF_PRODUCTION_DECOMPOSITON) || defined(DEF_KUMA_GAMBLE)
if(!LoadProductionChart()) return false;
#endif
#ifdef DEF_KUMA_GAMBLE
if(!LoadGambleNormalItemChart()) return false;
#endif
return true;
}
////////////////////////////////////////////////////////////////////////////////////////
// 秦寸 WORLD狼 MAP SERVER沥焊甫 掘澜
//
////////////////////////////////////////////////////////////////////////////////////////
bool BaseData::Load_MapServerInfo()
{
Table_MapServerInfo tbMapServerInfo;
if( tbMapServerInfo.Open( &g_AccountDB ) )
{
while( tbMapServerInfo.Fetch() )
{
_MAPSERVERINFO_ *pMapServerInfo = new _MAPSERVERINFO_;
memcpy( pMapServerInfo, &tbMapServerInfo.MAPSERVERINFO, sizeof( _MAPSERVERINFO_ ));
m_MapServerInfo.Insert( pMapServerInfo->dwMapSeq, pMapServerInfo );
}
}
return true;
}
////////////////////////////////////////////////////////////////////////////////////////
// 秦寸 WORLD狼 MAP SERVER Net 沥焊甫 掘澜
//
////////////////////////////////////////////////////////////////////////////////////////
bool BaseData::Load_MapServerNetInfo()
{
int nTempCount = 0;
Table_MapNetInfo tbMapServerNetInfo;
if( tbMapServerNetInfo.Open( &g_AccountDB ) )
{
while( tbMapServerNetInfo.Fetch() )
{
// 弥檬 1雀 IP/PORT沥焊甫 掘澜
if( nTempCount == 0 )
{
memcpy(_Module.m_szWorldIP , tbMapServerNetInfo.m_strWorldIP, 20); // WORLD SERVER IP
_Module.m_nWorldPORT = tbMapServerNetInfo.m_nWorldPort; // WORLD SERVER PORT
memcpy(_Module.m_szMapIP , tbMapServerNetInfo.m_cServerIp,20) ; // MAP SERVER PUBLIC IP
memcpy(_Module.m_szUdpIP , tbMapServerNetInfo.m_cPrivateIp,20) ; // MAP SERVER PRIVATE IP
_Module.m_nMapPORT = tbMapServerNetInfo.m_wPort ; // MAP SERVER PORT
_Module.m_nPKMode = tbMapServerNetInfo.m_nPKMode; // PK Mode
memcpy(_Module.m_szLogIP , tbMapServerNetInfo.m_strLogIP, 20); // LOG SERVER IP
_Module.m_nLogPORT = tbMapServerNetInfo.m_nLogPort; // LOG SERVER PORT
}
#ifdef DEF_AZITSIMULATION
g_pMap->SetMapConfig(nTempCount , tbMapServerNetInfo.m_nMapSeq,
tbMapServerNetInfo.m_wMapID ,
tbMapServerNetInfo.m_nPKMode,tbMapServerNetInfo.m_strMapFile,tbMapServerNetInfo.m_i64Tax );
#else // DEF_AZITSIMULATION
g_pMap->SetMapConfig(nTempCount , tbMapServerNetInfo.m_nMapSeq,
tbMapServerNetInfo.m_wMapID ,
tbMapServerNetInfo.m_nPKMode,tbMapServerNetInfo.m_strMapFile );
#endif // DEF_AZITSIMULATION
if( _Module.m_strMapFile[ nTempCount ][0] == NULL )
{
sprintf( _Module.m_strMapFile[ nTempCount ],"%s/%s/Map/%s", _Module.m_szDrv ,
_Module.m_szPath ,
tbMapServerNetInfo.m_strMapFile );
}
#ifdef CHINESE_VERSION // 甘捞抚阑 DB俊辑
if( _Module.m_strMapName[ nTempCount ][0] == NULL )
{
sprintf( _Module.m_strMapName[ nTempCount ],"%s", tbMapServerNetInfo.m_strMapName );
}
#endif
nTempCount ++;
}
}
g_pMap->m_nMaxLayer = nTempCount;
return true;
}
////////////////////////////////////////////////////////////////////////////////////////
// 秦寸 WORLD狼 MAP SERVER Map 沥焊甫 掘澜
//
////////////////////////////////////////////////////////////////////////////////////////
bool BaseData::Load_MapServerMapInfo()
{
int nTempCount = 0;
Table_MapNetInfo tbMapServerNetInfo;
if( tbMapServerNetInfo.Open( &g_AccountDB ) )
{
while( tbMapServerNetInfo.Fetch() )
{
nTempCount ++;
}
}
_Module.m_iMaxMapLayer = nTempCount ;
return true;
}
////////////////////////////////////////////////////////////////////////////////////////
// Base Item沥焊甫 掘澜
//
// - Item Loot 沥焊甫 Array涝仿 矫糯
////////////////////////////////////////////////////////////////////////////////////////
bool BaseData::LoadBaseItem()
{
// --------------------------------------------------------------------------------
// Delete Base Item阑 昏力 矫糯
// --------------------------------------------------------------------------------
Clean_BaseItem();
#ifdef DEF_KUMA_GAMBLE
Clean_GambleItemChart();
#endif
// --------------------------------------------------------------------------------
// Item Loot俊 荤侩瞪 蔼甸阑 涝仿 矫糯
// --------------------------------------------------------------------------------
ZeroMemory( _ITEM_LOOTS, sizeof( _ITEM_LOOTS ) );
// --------------------------------------------------------------------------------
// QUEST DROP ITEM阑 狼窍咯 固府 秦寸 ITEM阑 涝仿矫糯
//
// - 眠饶 包访 肺流阑 荐沥窃
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Base Item阑 DB俊辑 Load矫糯
//
// - MONSTER俊辑 LOOT瞪 ITEM阑 涝仿矫糯
// --------------------------------------------------------------------------------
Table_BaseItem tbBaseItem;
_BASE_NPC_*pBaseNPC = NULL ;
_BASE_ITEM_ *baseitem = NULL ;
if(tbBaseItem.Open( &g_AccountDB ))
{
while(tbBaseItem.Fetch())
{
// ------------------------------------------------------------------------
// Data Base俊辑 秦寸 亲格阑 掘澜
// ------------------------------------------------------------------------
baseitem = new _BASE_ITEM_;
DWORD dwItemIndex = tbBaseItem.BASE_ITEM.dwIndex;
memcpy( baseitem, &tbBaseItem.BASE_ITEM, sizeof( _BASE_ITEM_ ));
m_BaseItem.Insert( dwItemIndex, baseitem );
if (tbBaseItem.BASE_ITEM.nVISUAL == 0 || // Visual 0 积己登瘤 臼绰 酒捞袍
tbBaseItem.BASE_ITEM.nSLOTTYPE == 0 || // 家葛前
tbBaseItem.BASE_ITEM.nTYPE == ITEMTYPE_SCROLL_RETURN || // 蓖券 胶农费
tbBaseItem.BASE_ITEM.nTYPE == ITEMTYPE_SCROLL_SKILL || // 胶懦 胶农费
tbBaseItem.BASE_ITEM.nTYPE == ITEMTYPE_SCROLL_UPGRADE || // 诀弊饭捞靛 胶农费
tbBaseItem.BASE_ITEM.nTYPE == ITEMTYPE_SCROLL_LOST || // 噶阿狼 胶农费
tbBaseItem.BASE_ITEM.nTYPE == ITEMTYPE_EVENT // 捞亥飘 埔带飘
) continue ;
#ifdef DEF_KUMA_GAMBLE
if( baseitem )
{
if ( ( baseitem->nTYPE == ITEMTYPE_WEAPON_ONEHANDSWORD ) ||
( baseitem->nTYPE == ITEMTYPE_WEAPON_TWOHANDSWORD ) ||
( baseitem->nTYPE == ITEMTYPE_WEAPON_ONEHANDAXE ) ||
( baseitem->nTYPE == ITEMTYPE_WEAPON_SPEAR ) ||
( baseitem->nTYPE == ITEMTYPE_WEAPON_WAND ) ||
( baseitem->nTYPE == ITEMTYPE_WEAPON_STAFF ) ||
( baseitem->nTYPE == ITEMTYPE_WEAPON_BOW ) ||
( baseitem->nTYPE == ITEMTYPE_WEAPON_CROSSBOW ) ||
( baseitem->nTYPE == ITEMTYPE_WEAPON_MACE ) ||
( baseitem->nTYPE == ITEMTYPE_WEAPON_MAUL ) ||
( baseitem->nTYPE == ITEMTYPE_DEFENSE_SHIELD ) ||
( baseitem->nTYPE == ITEMTYPE_DEFENSE_HELM ) ||
( baseitem->nTYPE == ITEMTYPE_DEFENSE_ARMOR ) ||
( baseitem->nTYPE == ITEMTYPE_DEFENSE_PANTS ) ||
( baseitem->nTYPE == ITEMTYPE_DEFENSE_GLOVE ) ||
( baseitem->nTYPE == ITEMTYPE_DEFENSE_BOOTS ) ||
( baseitem->nTYPE == ITEMTYPE_DEFENSE_RING ) ||
( baseitem->nTYPE == ITEMTYPE_DEFENSE_AMULET ) )
{
if ( baseitem->nVISUAL != 0 )
m_GambleItemChart.Insert( baseitem );
}
}
#endif
// ------------------------------------------------------------------------
// Item Loot俊 荤侩瞪 函荐甫 涝仿 矫糯
//
// - Level喊肺 秦寸 积己 Item阑 涝仿 矫糯
// ------------------------------------------------------------------------
// if( tbBaseItem.nSEQ >= ITEM_TEMPLATE_START )
if( dwItemIndex >= ITEM_TEMPLATE_START )
{
/*
200俺牢 版快 眠饶 #define巩栏肺 荐沥 矫糯
*/
if(tbBaseItem.BASE_ITEM.nMonsterLoot != 0 || tbBaseItem.BASE_ITEM.nMonsterLoot2 != 0 || tbBaseItem.BASE_ITEM.nMonsterLoot3 != 0)
{
int iMonsterSeq = tbBaseItem.BASE_ITEM.nMonsterLoot ;
if (iMonsterSeq != 0)
{
for( int i=0; i < MAX_ITEMLEVEL; ++i )
{
if( tbBaseItem.BASE_ITEM.nLEVELNEED <= i) // Level 3 捞惑 积己 矫糯
{
_ITEM_LOOTS[iMonsterSeq][ i ].nItemIndex[ _ITEM_LOOTS[iMonsterSeq][ i ].nItemCount ] = dwItemIndex;
_ITEM_LOOTS[iMonsterSeq][ i ].nItemCount ++;
}
}
}
int iMonsterSeq2 = tbBaseItem.BASE_ITEM.nMonsterLoot2 ;
if (iMonsterSeq2 != 0)
{
for( int i=0; i < MAX_ITEMLEVEL; ++i )
{
if( tbBaseItem.BASE_ITEM.nLEVELNEED <= i) // Level 3 捞惑 积己 矫糯
{
_ITEM_LOOTS[iMonsterSeq2][ i ].nItemIndex[ _ITEM_LOOTS[iMonsterSeq2][ i ].nItemCount ] = dwItemIndex;
_ITEM_LOOTS[iMonsterSeq2][ i ].nItemCount ++;
}
}
}
int iMonsterSeq3 = tbBaseItem.BASE_ITEM.nMonsterLoot3 ;
if (iMonsterSeq3 != 0)
{
for( int i=0; i < MAX_ITEMLEVEL; ++i )
{
if( tbBaseItem.BASE_ITEM.nLEVELNEED <= i) // Level 3 捞惑 积己 矫糯
{
_ITEM_LOOTS[iMonsterSeq3][ i ].nItemIndex[ _ITEM_LOOTS[iMonsterSeq3][ i ].nItemCount ] = dwItemIndex;
_ITEM_LOOTS[iMonsterSeq3][ i ].nItemCount ++;
}
}
}
}
else // if(tbBaseItem.BASE_ITEM.nMonsterLoot != 0 || tbBaseItem.BASE_ITEM.nMonsterLoot2 != 0 )
{
for(int iMonsterSeq=0; iMonsterSeq <= m_iMaxNpc; ++iMonsterSeq )
{
// 粮犁窍瘤 臼绰 阁胶磐搁 扒呈 囤促.
if( NULL == (pBaseNPC = (_BASE_NPC_ *)m_BaseNPC.Find( iMonsterSeq )) ) continue;
// 阁胶磐啊 酒囱 NPC搁 公矫茄促.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -