📄 serverdlg.cpp
字号:
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
TCHAR szSQL[1024]; memset(szSQL, 0x00, sizeof(szSQL));
SQLCHAR strContent[5001]; memset( strContent, NULL, sizeof(strContent));
SQLSMALLINT sIndex, sSize;
SQLINTEGER sInd;
int db_index = -1;
CDatabase* pDB = g_DB[AUTOMATA_THREAD].GetDB( db_index );
if( !pDB ) return FALSE;
sIndex = sSize = 0;
sInd = 0;
CNpcChat* pNewChat = NULL;
_sntprintf(szSQL, sizeof(szSQL), TEXT( "{ call EVENT_CHAT_LOAD }" ));
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, pDB->m_hdbc, &hstmt );
if( retcode != SQL_SUCCESS )
{
TRACE("Fail To Read NPC_CHAT!!\n");
//g_DB[AUTOMATA_THREAD].ReleaseDB(db_index);
return FALSE;
}
retcode = SQLExecDirect( hstmt, (unsigned char*)szSQL, sizeof(szSQL));
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
{
while(1)
{
retcode = SQLFetch( hstmt );
if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
{
bQuerySuccess = TRUE;
i = 1;
SQLGetData( hstmt, i++, SQL_C_USHORT, &sIndex, sizeof(SQLSMALLINT), &sInd );
SQLGetData( hstmt, i++, SQL_C_USHORT, &sSize, sizeof(SQLSMALLINT), &sInd );
SQLGetData( hstmt, i++, SQL_C_BINARY, strContent, sizeof(strContent), &sInd );
ASSERT(sSize>0);
pNewChat = new CNpcChat;
pNewChat->m_sCid = sIndex;
pNewChat->m_sSize = sSize;
pNewChat->m_strTalk = new TCHAR[sSize+1];
memcpy(pNewChat->m_strTalk, strContent, sSize);
pNewChat->m_strTalk[sSize] = NULL;
g_arNpcChat.Add(pNewChat);
memset( strContent, NULL, sizeof(strContent));
}
else if(retcode == SQL_NO_DATA)
{
bQuerySuccess = TRUE;
break;
}
else break;
}
}
retcode = SQLFreeHandle( (SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
if( !bQuerySuccess )
{
g_DB[AUTOMATA_THREAD].ReleaseDB(db_index);
return FALSE;
}
g_DB[AUTOMATA_THREAD].ReleaseDB(db_index);
return TRUE;
}
//////////////////////////////////////////////////////////////////////////
// Monster Table Data 甫 佬绰促.
//
BOOL CServerDlg::GetNpcTableData()
{
CNpcTableSet NpcTableSet;
g_arSummonTable.RemoveAll();
try
{
if(g_arNpcTable.GetSize()) return FALSE;
if(NpcTableSet.IsOpen()) NpcTableSet.Close();
if(!NpcTableSet.Open())
{
AfxMessageBox(_T("MONSTER DB Open Fail!"));
return FALSE;
}
if(NpcTableSet.IsBOF())
{
AfxMessageBox(_T("MONSTER DB Empty!"));
return FALSE;
}
while(!NpcTableSet.IsEOF())
{
CNpcTable* Npc = new CNpcTable;
Npc->m_sSid = NpcTableSet.m_sSid; // MONSTER(NPC) Serial ID
Npc->m_sPid = NpcTableSet.m_sPid; // MONSTER(NPC) Picture ID
_tcscpy(Npc->m_strName, NpcTableSet.m_strName); // MONSTER(NPC) Name
Npc->m_sSTR = NpcTableSet.m_sSTR; // 塞
Npc->m_sDEX = NpcTableSet.m_sDEX; // 刮酶
Npc->m_sVOL = NpcTableSet.m_sVOL; // 狼瘤
Npc->m_sWIS = NpcTableSet.m_sWIS; // 瘤驱
Npc->m_sMaxHP = NpcTableSet.m_sMaxHP; // 弥措 HP
Npc->m_sMaxPP = NpcTableSet.m_sMaxPP; // 弥措 PP
Npc->m_byClass = NpcTableSet.m_byClass; // 公扁拌凯
Npc->m_byClassLevel = NpcTableSet.m_byClassLevel; // 公扁拌凯 饭骇
Npc->m_sExp = NpcTableSet.m_sExp; // 版氰摹
Npc->m_byAX = NpcTableSet.m_byAX; // 傍拜蔼 X
Npc->m_byAY = NpcTableSet.m_byAY; // 傍拜蔼 Y
Npc->m_byAZ = NpcTableSet.m_byAZ; // 傍拜蔼 Z
Npc->m_iDefense = NpcTableSet.m_byDefense; // 规绢蔼
Npc->m_byRange = NpcTableSet.m_byRange; // 荤沥芭府
Npc->m_sAI = NpcTableSet.m_sAI; // 牢傍瘤瓷 牢郸胶
Npc->m_sAttackDelay = NpcTableSet.m_sAttackDelay; // 傍拜掉饭捞
Npc->m_byVitalC = NpcTableSet.m_byVitalC; // 脚眉单固瘤 农府萍拿
Npc->m_byWildShot = NpcTableSet.m_byWildShot; // 抄荤 饭骇
Npc->m_byExcitedRate= NpcTableSet.m_byExcitedRate; // 蕊盒 饭骇
Npc->m_byIronSkin = NpcTableSet.m_byIronSkin;
Npc->m_byReAttack = NpcTableSet.m_byReAttack;
Npc->m_bySubAttack = NpcTableSet.m_bySubAttack;// 惑怕捞惑 惯积(何啊傍拜)
Npc->m_byState = NpcTableSet.m_byState; // 阁胶磐 (NPC) 惑怕捞惑
Npc->m_byPsi = NpcTableSet.m_byPsi; // 荤捞坷葱 利侩
Npc->m_byPsiLevel = NpcTableSet.m_byPsiLevel; // 荤捞坷葱饭骇
Npc->m_bySearchRange= NpcTableSet.m_bySearchRange; // 利 沤瘤 裹困
Npc->m_sSpeed = NpcTableSet.m_sSpeed; // 捞悼加档
Npc->m_sInclination = NpcTableSet.m_sInclination;
Npc->m_byColor = NpcTableSet.m_byColor;
Npc->m_sStandTime = NpcTableSet.m_sStandTime;
Npc->m_tNpcType = NpcTableSet.m_tNpcType; // NPC Type
Npc->m_sFamilyType = NpcTableSet.m_sFamilyType;// 各甸埃狼 啊练 痹沥
Npc->m_tItemPer = NpcTableSet.m_tItemPer; // 酒捞袍捞 冻绢龙犬伏
Npc->m_tDnPer = NpcTableSet.m_tDnPer; // 捣捞 冻绢龙犬伏
g_arNpcTable.Add(Npc);
if(!CheckSummonException(Npc->m_sSid))
{
CSummonTable* pSummon = new CSummonTable;
pSummon->m_sSid = Npc->m_sSid;
pSummon->m_strName = Npc->m_strName;
g_arSummonTable.Add(pSummon);
}
NpcTableSet.MoveNext();
}
NpcTableSet.Close();
}
catch(CMemoryException * e)
{
e->ReportError();
e->Delete();
return FALSE;
}
catch(CDBException* e)
{
e->ReportError();
e->Delete();
return FALSE;
}
return TRUE;
}
//////////////////////////////////////////////////////////////////////////
// NPC Table Data 甫 佬绰促.
//
BOOL CServerDlg::GetCityNpcTableData()
{
CCityNpcTableSet NpcTableSet;
try
{
if(g_arCityNpcTable.GetSize()) return FALSE;
if(NpcTableSet.IsOpen()) NpcTableSet.Close();
if(!NpcTableSet.Open())
{
AfxMessageBox(_T("City NPC DB Open Fail!"));
return FALSE;
}
if(NpcTableSet.IsBOF())
{
AfxMessageBox(_T("City NPC DB Empty!"));
return FALSE;
}
while(!NpcTableSet.IsEOF())
{
CNpcTable* Npc = new CNpcTable;
Npc->m_sSid = NpcTableSet.m_sSid; // (NPC) Serial ID
Npc->m_sPid = NpcTableSet.m_sPid; // (NPC) Picture ID
_tcscpy(Npc->m_strName, NpcTableSet.m_strName); // (NPC) Name
Npc->m_sSTR = NpcTableSet.m_sSTR; // 塞
Npc->m_sDEX = NpcTableSet.m_sDEX; // 刮酶
Npc->m_sVOL = NpcTableSet.m_sVOL; // 狼瘤
Npc->m_sWIS = NpcTableSet.m_sWIS; // 瘤驱
Npc->m_sMaxHP = NpcTableSet.m_sMaxHP; // 弥措 HP
Npc->m_sMaxPP = NpcTableSet.m_sMaxPP; // 弥措 PP
Npc->m_byClass = NpcTableSet.m_byClass; // 公扁拌凯
Npc->m_byClassLevel = NpcTableSet.m_byClassLevel; // 公扁拌凯 饭骇
Npc->m_sExp = NpcTableSet.m_sExp; // 版氰摹
Npc->m_byAX = NpcTableSet.m_byAX; // 傍拜蔼 X
Npc->m_byAY = NpcTableSet.m_byAY; // 傍拜蔼 Y
Npc->m_byAZ = NpcTableSet.m_byAZ; // 傍拜蔼 Z
Npc->m_iDefense = NpcTableSet.m_byDefense; // 规绢蔼
Npc->m_byRange = NpcTableSet.m_byRange; // 荤沥芭府
Npc->m_sAI = NpcTableSet.m_sAI; // 牢傍瘤瓷 牢郸胶
Npc->m_sAttackDelay = NpcTableSet.m_sAttackDelay; // 傍拜掉饭捞
Npc->m_byVitalC = NpcTableSet.m_byVitalC; // 脚眉单固瘤 农府萍拿
Npc->m_byWildShot = NpcTableSet.m_byWildShot; // 抄荤 饭骇
Npc->m_byExcitedRate= NpcTableSet.m_byExciteRate; // 蕊盒 饭骇
Npc->m_byIronSkin = NpcTableSet.m_byIronSkin;
Npc->m_byReAttack = NpcTableSet.m_byReAttack;
Npc->m_bySubAttack = NpcTableSet.m_bySubAttack;// 惑怕捞惑 惯积(何啊傍拜)
Npc->m_byState = NpcTableSet.m_byState; // 阁胶磐 (NPC) 惑怕捞惑
Npc->m_byPsi = NpcTableSet.m_byPsi; // 荤捞坷葱 利侩
Npc->m_byPsiLevel = NpcTableSet.m_byPsiLevel; // 荤捞坷葱饭骇
Npc->m_bySearchRange= NpcTableSet.m_bySearchRange; // 利 沤瘤 裹困
Npc->m_sSpeed = NpcTableSet.m_sSpeed; // 捞悼加档
Npc->m_sInclination = NpcTableSet.m_sInclination;
Npc->m_byColor = NpcTableSet.m_byColor;
Npc->m_sStandTime = NpcTableSet.m_sStandTime;
Npc->m_tNpcType = NpcTableSet.m_tNpcType; // NPC Type
Npc->m_sFamilyType = NpcTableSet.m_sFamilyType;// 各甸埃狼 啊练 痹沥
Npc->m_tItemPer = NpcTableSet.m_tItemPer; // 酒捞袍捞 冻绢龙犬伏
Npc->m_tDnPer = NpcTableSet.m_tDnPer; // 捣捞 冻绢龙犬伏
g_arCityNpcTable.Add(Npc);
NpcTableSet.MoveNext();
}
NpcTableSet.Close();
}
catch(CMemoryException * e)
{
e->ReportError();
e->Delete();
return FALSE;
}
catch(CDBException* e)
{
e->ReportError();
e->Delete();
return FALSE;
}
return TRUE;
}
////////////////////////////////////////////////////////////////////////////////////
// Npc Thread 甫 父电促.
//
BOOL CServerDlg::CreateNpcThread()
{
BOOL bMoveNext = TRUE;
int nSerial = 0;
int nNpcCount = 0;
int i = 0;
g_TotalNPC = 0; // DB俊 乐绰 荐
g_CurrentNPC = 0;
g_CurrentNPCError = 0;
CNpcPosSet NpcPosSet;
CNpcTable* pNpcTable = NULL;
g_arNpc.RemoveAll();
try
{
if(NpcPosSet.IsOpen()) NpcPosSet.Close();
if(!NpcPosSet.Open())
{
AfxMessageBox(_T("MONSTER_POS DB Open Fail!"));
return FALSE;
}
if(NpcPosSet.IsBOF())
{
AfxMessageBox(_T("MONSTER_POS DB Empty!"));
return FALSE;
}
while(!NpcPosSet.IsEOF())
{
// CNpcThread* pNpcThread = new CNpcThread;
if(NpcPosSet.m_byType == 1)
{
CNpc* pNpc = new CNpc;
pNpc->m_sNid = nSerial++; // 辑滚 郴俊辑狼 绊蜡 锅龋
pNpc->m_sSid = NpcPosSet.m_sSid; // MONSTER(NPC) Serial ID
pNpcTable = NULL;
for( i = 0; i < g_arCityNpcTable.GetSize(); i++)
{
if(pNpc->m_sSid == g_arCityNpcTable[i]->m_sSid )
{
pNpcTable = g_arCityNpcTable[i];
break;
}
}
if(!pNpcTable)
{
if(pNpc) delete pNpc;
AfxMessageBox("Not NPC Data!!");
return FALSE;
}
if( bMoveNext )
{
bMoveNext = FALSE;
nNpcCount = NpcPosSet.m_sCount;
}
pNpc->m_sPid = pNpcTable->m_sPid; // MONSTER(NPC) Picture ID
_tcscpy(pNpc->m_strName, pNpcTable->m_strName); // MONSTER(NPC) Name
pNpc->m_sSTR = pNpcTable->m_sSTR; // 塞
pNpc->m_sDEX = pNpcTable->m_sDEX; // 刮酶
pNpc->m_sVOL = pNpcTable->m_sVOL; // 狼瘤
pNpc->m_sWIS = pNpcTable->m_sWIS; // 瘤驱
pNpc->m_sHP = pNpcTable->m_sMaxHP; // 弥措 HP
pNpc->m_sMaxHP = pNpcTable->m_sMaxHP; // 泅犁 HP
pNpc->m_sPP = pNpcTable->m_sMaxPP; // 弥措 PP
pNpc->m_sMaxPP = pNpcTable->m_sMaxPP; // 泅犁 PP
pNpc->m_byClass = pNpcTable->m_byClass; // 公扁拌凯
pNpc->m_byClassLevel = pNpcTable->m_byClassLevel;// 公扁拌凯 饭骇
pNpc->m_sExp = pNpcTable->m_sExp; // 版氰摹
pNpc->m_byAX = pNpcTable->m_byAX; // 傍拜蔼 X
pNpc->m_byAY = pNpcTable->m_byAY; // 傍拜蔼 Y
pNpc->m_byAZ = pNpcTable->m_byAZ; // 傍拜蔼 Z
pNpc->m_iDefense = pNpcTable->m_iDefense; // 规绢蔼
pNpc->m_byRange = pNpcTable->m_byRange; // 荤沥芭府
pNpc->m_sAI = pNpcTable->m_sAI; // 牢傍瘤瓷 牢郸胶
pNpc->m_sAttackDelay = pNpcTable->m_sAttackDelay;// 傍拜掉饭捞
pNpc->m_byVitalC = pNpcTable->m_byVitalC; // 脚眉单固瘤 农府萍拿
pNpc->m_byWildShot = pNpcTable->m_byWildShot; // 抄荤 饭骇
pNpc->m_byExcitedRate = pNpcTable->m_byExcitedRate; // 蕊盒 饭骇
pNpc->m_byIronSkin = pNpcTable->m_byIronSkin;
pNpc->m_byReAttack = pNpcTable->m_byReAttack;
pNpc->m_bySubAttack = pNpcTable->m_bySubAttack; // 惑怕捞惑 惯积(何啊傍拜)
pNpc->m_byState = pNpcTable->m_byState; // 阁胶磐 (NPC) 惑怕捞惑
pNpc->m_byPsi = pNpcTable->m_byPsi; // 荤捞坷葱 利侩
pNpc->m_byPsiLevel = pNpcTable->m_byPsiLevel; // 荤捞坷葱饭骇
pNpc->m_bySearchRange = pNpcTable->m_bySearchRange; // 利 沤瘤 裹困
pNpc->m_sSpeed = pNpcTable->m_sSpeed; // 捞悼加档
pNpc->m_sInclination = pNpcTable->m_sInclination;
pNpc->m_byColor = pNpcTable->m_byColor;
pNpc->m_sStandTime = pNpcTable->m_sStandTime;
//////// MONSTER POS ////////////////////////////////////////
pNpc->m_sCurZ = pNpc->m_sOrgZ = NpcPosSet.m_sZone;
pNpc->m_sCurX = pNpc->m_sOrgX = NpcPosSet.m_sX;
pNpc->m_sCurY = pNpc->m_sOrgY = NpcPosSet.m_sY;
pNpc->m_sMinX = NpcPosSet.m_sMinX;
pNpc->m_sMinY = NpcPosSet.m_sMinY;
pNpc->m_sMaxX = NpcPosSet.m_sMaxX;
pNpc->m_sMaxY = NpcPosSet.m_sMaxY;
// pNpc->m_sRegenTime = NpcPosSet.m_sRegenTime * 1000; // 檬(DB)窜困-> 剐府技牧靛肺
pNpc->m_sRegenTime = NpcPosSet.m_sRegenTime * 2000; // 檬(DB)窜困-> 剐府技牧靛肺
pNpc->m_sEvent = NpcPosSet.m_sEvent; // 捞亥飘 锅龋
pNpc->m_sEZone = NpcPosSet.m_sEZone;
pNpc->m_sGuild = NpcPosSet.m_sGuild; // 辨靛俊 加茄 惑痢狼 NPC烙
pNpc->m_sHaveItem = NpcPosSet.m_sHaveItem;
pNpc->m_sQuestSay = NpcPosSet.m_sSay;
pNpc->m_byType = NpcPosSet.m_byType;
pNpc->m_sDimension = NpcPosSet.m_sDimension; // 泅犁 割伎甫 瞒瘤窍绰瘤 魄窜
pNpc->m_tNpcType = pNpcTable->m_tNpcType; // NPC Type
pNpc->m_sFamilyType = pNpcTable->m_sFamilyType; // NPC Type
pNpc->m_tItemPer = pNpcTable->m_tItemPer; // NPC Type
pNpc->m_tDnPer = pNpcTable->m_tDnPer; // NPC Type
pNpc->m_ZoneIndex = -1;
// 扁霖 加档 : 500甫 100 %肺 窍搁 50篮 刘啊啦 10 % 啊 等促.
// 侥篮 (pNpc->m_sSpeed - 500) * 10/50 烙 --> 50:10 = () : x
pNpc->m_sClientSpeed = 100 - (pNpc->m_sSpeed - 500) * 10/50;
pNpc->m_dwStepDelay = GetTickCount();
if(pNpc->m_sClientSpeed <= 20) pNpc->m_sClientSpeed = 20; // 规绢 内靛;
for(i = 0; i < g_zone.GetSize(); i++)
{
MAP* pAddMap = g_zone[i];
if(g_zone[i]->m_Zone == pNpc->m_sCurZ)
{
pNpc->m_ZoneIndex = i;
break;
}
}
if(pNpc->m_ZoneIndex == -1)
{
if(pNpc) delete pNpc;
AfxMessageBox("Invalid zone Index!!");
return FALSE;
}
pNpc->Init();
/*
CString msg;
msg = "磊捞攫飘 候遣";
if(msg.Compare(pNpc->m_strName) == 0 && pNpc->m_sCurX == 160 && pNpc->m_sCurY == 480)
{
pNpc->m_sNid = nSerial++;
g_arNpc.Add(pNpc);
g_TotalNPC = nSerial;
}
else
{
if(pNpc) delete pNpc;
}
*/
g_arNpc.Add(pNpc);
g_TotalNPC = nSerial;
if(--nNpcCount > 0) continue;
}
//if(g_arNpc.GetSize() >= 100) break; //yskang Test Code
bMoveNext = TRUE;
nNpcCount = 0;
NpcPosSet.MoveNext();
}
}
catch(CMemoryException * e)
{
e->ReportError();
e->Delete();
return FALSE;
}
catch(CDBException* e)
{
e->ReportError();
e->Delete();
return FALSE;
}
try
{
if(NpcPosSet.IsOpen()) NpcPosSet.Close();
if(!NpcPosSet.Open())
{
AfxMessageBox(_T("MONSTER_POS DB Open Fail!"));
return FALSE;
}
if(NpcPosSet.IsBOF())
{
// NpcPosSet.MoveFirst();
AfxMessageBox(_T("MONSTER_POS DB Empty!"));
return FALSE;
}
while(!NpcPosSet.IsEOF())
{
// CNpcThread* pNpcThread = new CNpcThread;
if(NpcPosSet.m_byType != 1)
{
CNpc* pNpc = new CNpc;
pNpc->m_sNid = nSerial++; // 辑滚 郴俊辑狼 绊蜡 锅龋
pNpc->m_sSid = NpcPosSet.m_sSid; // MONSTER(NPC) Serial ID
pNpcTable = NULL;
for( i = 0; i < g_arNpcTable.GetSize(); i++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -