⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serverdlg.cpp

📁 决战帝王1.5武神降临对喜爱决战的玩家共享研究用
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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 + -