?? 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 + -