📄 agentdbmsgparser.cpp
字号:
#include "stdafx.h"
#include "CommonDBMsgParser.h"
#include "AgentDBMsgParser.h"
#include "DataBase.h"
#include "UserTable.h"
#include "ServerTable.h"
#include "Console.h"
#include "Network.h"
#include "MsgTable.h"
#include "ServerSystem.h"
#include "GMPowerList.h"
//MSG_CHAT g_WisperTemp;
//MSG_CHAT g_MunpaTemp;
//MSG_CHAT g_PartyTemp;
//-----------------------------------------------------------------------
// DBÄõ¸® ¸®ÅÏ ÇÔ¼ö°¡ ´Ã¾î³¯¶§¸¶´Ù Ãß°¡
// enum Query ÀÇ ¼ø¼°¡ ¹Ýµå½Ã!!!! ÀÏÄ¡ÇØ¾ß ÇÑ´Ù.
DBMsgFunc g_DBMsgFunc[MaxQuery] =
{
NULL,
RUserIDXSendAndCharacterBaseInfo, // ij¸¯ÅÍ ¸®½ºÆ® Query
RCreateCharacter,
NULL,
RDeleteCharacter,
RCharacterNameCheck,
NULL,
NULL,
RSearchWhisperUserAndSend, /// ij¸¯¸íÀ¸·Î Á¢¼Ó¿©ºÎ¹× ¸Ê¹øÈ£ ¾ò¾î¿À±â
NULL, //SavePoint
NULL, /// ¸Ê¿¡¼ ³ª°¡¸é ½ÇÇàÇÑ´Ù
NULL, /// ¸Ê¼¹ö Á¾·á½Ã ½ÇÇà
RFriendIsValidTarget, //FriendGetUserIDXbyName
RFriendAddFriend,
RFriendIsValidTarget,
RFriendDelFriend,
RFriendDelFriendID,
NULL, //Ä£±¸¸®½ºÆ® »èÁ¦(ij¸¯ÅÍ »èÁ¦½Ã)
RFriendNotifyLogintoClient,
RFriendGetFriendList,
RFriendGetLoginFriends,
RNoteIsNewNote,
NULL,
RNoteList,
RNoteDelete,
RWantedDelete,
NULL,
//For GM-Tool
RGM_BanCharacter,
RGM_UpdateUserLevel, /// eGM_UpdateUserLevel,
RGM_WhereIsCharacter,
RGM_Login,
RGM_GetGMPowerList,
//
NULL,
NULL,
};
// Ä´¸¯ÅÍ ¸®½ºÆ® °¡Á®¿À´Â DBÄõ¸®
void UserIDXSendAndCharacterBaseInfo(DWORD UserIDX, DWORD AuthKey, DWORD dwConnectionIndex)
{
g_DB.FreeQuery(eCharacterBaseQuery, dwConnectionIndex, "EXEC MP_CHARACTER_SelectByUserIDX %d, %d", UserIDX, AuthKey);
}
void CheatLog(DWORD CharacterIDX,DWORD CheatKind)
{
char txt[256];
sprintf(txt,"INSERT TB_LogHacking (Character_idx,CheatKind,LogDate) values(%d,%d,getdate())",
CharacterIDX,CheatKind);
g_DB.LogQuery(eQueryType_FreeQuery,0,0,txt);
}
void CreateCharacter(CHARACTERMAKEINFO* pMChar, WORD ServerNo, DWORD dwConnectionIndex)
{
CHARACTERMAKEINFO* pMsg = pMChar;
char txt[512];
WORD CheRyuk = 12;
WORD SimMek = 12;
WORD GenGol = 12;
WORD MinChub = 12;
char ip[16];
WORD port;
g_Network.GetUserAddress( dwConnectionIndex, ip, &port );
int LoginPoint = 2018;
sprintf(txt, "EXEC %s %d, %d, %d, %d, %d, \'%s\', %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f, \'%s\'",
"MP_CHARACTER_CreateCharacter", pMsg->UserID,
GenGol, MinChub, CheRyuk, SimMek,
pMsg->Name, pMsg->FaceType, pMsg->HairType, pMsg->StartArea,
pMsg->SexType, pMsg->WearedItemIdx[eWearedItem_Hat], pMsg->WearedItemIdx[eWearedItem_Weapon], pMsg->WearedItemIdx[eWearedItem_Dress],
pMsg->WearedItemIdx[eWearedItem_Shoes], pMsg->WearedItemIdx[eWearedItem_Ring1], pMsg->WearedItemIdx[eWearedItem_Ring2],
pMsg->WearedItemIdx[eWearedItem_Cape], pMsg->WearedItemIdx[eWearedItem_Necklace],pMsg->WearedItemIdx[eWearedItem_Armlet], pMsg->WearedItemIdx[eWearedItem_Belt], LoginPoint, ServerNo,
pMsg->Height, pMsg->Width, ip);
if(g_DB.Query(eQueryType_FreeQuery, eCreateCharacter, dwConnectionIndex, txt) == FALSE)
{
}
/*
CharBasicStats* tmp = g_pListCollect->GetCharBasicStats();
g_DB.FreeQuery(eCreateCharacter, dwConnectionIndex,
"EXEC %s %d, %d, %d, %d, %d, '%s', %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d",
"MP_CHARACTER_CreateCharacter", pMChar->UserID, tmp->wGenGol, tmp->wMinChub, tmp->wCheRyuk,
tmp->wSimMek, pMChar->Name, pMChar->JobType, pMChar->FaceType, pMChar->HairType, pMChar->StartArea,
pMChar->SexType, pMChar->WearedItemIdx[eWearedItem_Weapon], pMChar->WearedItemIdx[eWearedItem_Dress],
pMChar->WearedItemIdx[eWearedItem_Hat], pMChar->WearedItemIdx[eWearedItem_Shoes], pMChar->WearedItemIdx[eWearedItem_Armlet],
pMChar->WearedItemIdx[eWearedItem_Cape], pMChar->WearedItemIdx[eWearedItem_Belt], pMChar->WearedItemIdx[eWearedItem_Necklace],
pMChar->WearedItemIdx[eWearedItem_Ring1], pMChar->WearedItemIdx[eWearedItem_Ring2]);
*/
}
void CharacterNameCheck(char* pName, DWORD dwConnectionIndex)
{
g_DB.FreeQuery(eNewCharacterCheckName, dwConnectionIndex, "EXEC %s \'%s\'", "MP_CHARACTER_NameCheck", pName);
}
void LoginCheckDelete(DWORD UserID)//, DWORD dwConnectionIndex)
{
// g_DB.FreeQuery(eLoginCheckDelete, 0, "EXEC %s %d", "MP_CHARACTER_LoginDelete", UserID);
static char txt[128];
// sprintf(txt, "EXEC %s %d", "Up_Member_CheckOut", UserID);
sprintf(txt, "EXEC %s %d", "Up_GameLogOut", UserID);
g_DB.LoginQuery(101, eLoginCheckDelete, 0, txt);
}
void SetUserCurAndMaxCount(DWORD CurCount, DWORD MaxCount)
{
g_DB.FreeQuery(eSetCurMaxCount, 0, "EXEC %s %d, %d", "SetUserLogCount", CurCount, MaxCount);
}
void DeleteCharacter(DWORD dwPlayerID, WORD ServerNo, DWORD dwConnectionIndex)
{
USERINFO* pinfo = g_pUserTable->FindUser(dwConnectionIndex);
if(!pinfo)
return;
CHARSELECTINFO * SelectInfoArray = (CHARSELECTINFO*)pinfo->SelectInfoArray;
for(int i = 0; i < MAX_CHARACTER_NUM; i++)
{
if(SelectInfoArray[i].dwCharacterID == dwPlayerID)
break;
if(i == MAX_CHARACTER_NUM - 1) // À¯Àú°¡ °¡Áö°í Àִ ij¸¯°ú ´Ù¸¥ ij¸¯ÀÌ ¼±ÅõÊ
{
// ¿¬°áµÈ ij¸¯°ú Áö¿ïij¸¯ÀÌ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù
return;
}
}
char ip[16];
WORD port;
g_Network.GetUserAddress( dwConnectionIndex, ip, &port );
//ÆÄƼ³ª ¹®ÆÄÀåÀÌ¸é ¿¡·¯ÄÚµå ¸®ÅÏ
g_DB.FreeQuery(eDeleteCharacter, dwConnectionIndex, "EXEC %s %d, %d, \'%s\'", "MP_CHARACTER_DeleteCharacter", dwPlayerID, ServerNo, ip );
}
void SearchWhisperUserAndSend( DWORD dwPlayerID, char* CharacterName, DWORD dwKey )
{
g_DB.FreeQuery(eLoginMapInfoSearchForName, dwKey, "EXEC %s \'%s\', %d", "MP_LoginCharacterSearchForName", CharacterName, dwPlayerID );
}
/*
void SearchMunpaChatSendOnPlayer(DWORD dwPlayerID, DWORD dwKey )
{
g_DB.FreeQuery(eMunpaChatSendOnPlayer, dwKey, "EXEC %s %d", "MP_MunpaChat_FindOnPlayer", dwPlayerID);
}
*/
void SaveMapChangePointUpdate(DWORD CharacterIDX, WORD MapChangePoint_Idx)
{
g_DB.FreeQuery(eSavePoint, CharacterIDX, "EXEC %s %d, %d", "MP_CHARACTER_MapchangePointUpdate", CharacterIDX, MapChangePoint_Idx);
}
void UnRegistLoginMapInfo(DWORD CharacterIDX)
{
g_DB.FreeQuery(eUnRegistLoginMapInfo, CharacterIDX, "EXEC %s %d", "MP_LoginMapInfo_UnRegist", CharacterIDX);
}
/*
void MapUserUnRegistLoginMapInfo(WORD MapPort)
{
g_DB.FreeQuery(eMapUserUnRegistMapInfo, 0, "EXEC %s %d", "MP_LoginMapInfo_MapUserUnRegist", MapPort);
}
*/
void FriendGetUserIDXbyName(DWORD CharacterIDX, char* TargetName)
{
g_DB.FreeQuery(eFriendGetTargetMemeberIDX, CharacterIDX, "EXEC %s \'%s\', %u", "MP_FRIEND_GetTargetIDX", TargetName, CharacterIDX);
}
void FriendAddFriend(DWORD CharacterIDX, DWORD TargetID) //CharacterIDX : ½ÅûÀÎ, TargetID : ½Â³«ÀÎ
{
g_DB.FreeQuery(eFriendAdd, CharacterIDX, "EXEC %s %u, %u", "MP_FRIEND_AddFriend", CharacterIDX, TargetID);
}
void FriendIsValidTarget(DWORD CharacterIDX, DWORD TargetID, char* FromName)
{
g_DB.FreeQuery(eFriendIsValidTarget, CharacterIDX, "EXEC %s %d, %d, \'%s\'", "MP_FRIEND_IsValidTarget", CharacterIDX, TargetID, FromName);
}
void FriendDelFriend(DWORD CharacterIDX, char* TargetName)
{
g_DB.FreeQuery(eFriendDel, CharacterIDX, "EXEC %s %u, \'%s\'", "MP_FRIEND_DelFriend", CharacterIDX, TargetName);
}
void FriendDelFriendID(DWORD CharacterIDX, DWORD TargetID, DWORD bLast)
{
g_DB.FreeQuery(eFriendDelID, CharacterIDX, "EXEC %s %u, %u, %d", "MP_FRIEND_DelFriendID", CharacterIDX, TargetID, bLast);
}
void FriendNotifyLogintoClient(DWORD CharacterIDX)
{
g_DB.FreeQuery(eFriendNotifyLogin, CharacterIDX, "EXEC %s %u", "MP_FRIEND_NotifyLogin", CharacterIDX); //³ª¸¦ µî·ÏÇÑ »ç¶÷µé
}
void FriendGetLoginFriends(DWORD CharacterIDX)
{
g_DB.FreeQuery(eFriendGetLoginFriends, CharacterIDX, "EXEC %s %u", "MP_FRIEND_LoginFriend", CharacterIDX);//³»°¡ µî·ÏÇÑ »ç¶÷µé
}
void FriendGetFriendList(DWORD CharacterIDX)
{
g_DB.FreeQuery(eFriendGetFriendList, CharacterIDX, "EXEC %s %u", "MP_FRIEND_GetFriendList", CharacterIDX);
}
void NoteIsNewNote(DWORD PlayerID)
{
g_DB.FreeQuery(eNoteIsNewNote, PlayerID, "EXEC %s %u", "MP_NOTE_IsNewNote", PlayerID);
}
void NoteSendtoPlayer(DWORD FromIDX, char* FromName, char* ToName, char* Note)
{
g_DB.FreeLargeQuery(RNoteSendtoPlayer, FromIDX, "EXEC %s \'%s\', \'%s\', \'%s\'", "MP_NOTE_SendNote", ToName, FromName, Note);
}
void NoteSendtoPlayerID(DWORD FromIDX, char* FromName, DWORD ToIDX, char* Note)
{
g_DB.FreeLargeQuery(RNoteSendtoPlayer, FromIDX, "EXEC %s %u, \'%s\', %u, \'%s\'", "MP_NOTE_SendNoteID", FromIDX, FromName, ToIDX, Note);
}
void NoteDelAll(DWORD CharacterIDX)
{
g_DB.FreeQuery(eNoteDelAll, 0, "EXEC %s %u", "MP_NOTE_DelAllNote", CharacterIDX);
}
void NoteList(DWORD CharacterIDX, WORD Page)
{
g_DB.FreeQuery(eNoteList, CharacterIDX, "EXEC %s %u, %d, %u", "MP_NOTE_GetNoteList", CharacterIDX, 10, Page); //10°³¾¿ ¹Þ¾Æ¿Â´Ù.
}
void NoteRead(DWORD CharacterIDX, DWORD NoteIDX, DWORD IsFront)
{
g_DB.FreeLargeQuery(RNoteRead, CharacterIDX, "EXEC %s %u, %u, %u", "MP_NOTE_ReadNote", CharacterIDX, NoteIDX, IsFront);
}
void NoteDelete(DWORD PlayerID, DWORD NoteID, BOOL bLast)
{
g_DB.FreeQuery(eNoteDelete, PlayerID, "EXEC %s %u, %u, %d", "MP_NOTE_DelNote", PlayerID, NoteID, bLast);
}
void WantedDelete(DWORD CharacterIDX)
{
g_DB.FreeQuery(eWantedDelete, CharacterIDX, "EXEC %s %u", "MP_WANTED_Delete", CharacterIDX);
}
void WantedDelWantInfo(DWORD WantedIDX)
{
g_DB.FreeQuery(eWantedDelWantInfo, 0, "EXEC %s %u", "MP_WANTED_DeleteWantedInfo", WantedIDX);
}
//---for GM_Tool
void GM_WhereIsCharacter(DWORD dwID, char* CharacterName, DWORD dwSeacherID )
{
g_DB.FreeQuery(eGM_WhereIsCharacter, dwID, "EXEC %s \'%s\', %d", "MP_LoginCharacterSearchForName", CharacterName, dwSeacherID );
}
void GM_BanCharacter(DWORD dwID, char* CharacterName, DWORD dwSeacherID )
{
g_DB.FreeQuery(eGM_BanCharacter, dwID, "EXEC %s \'%s\', %d", "MP_LoginCharacterSearchForName", CharacterName, dwSeacherID );
}
void GM_UpdateUserLevel(DWORD dwID, DWORD dwServerGroup, char* Charactername, BYTE UserLevel)
{
char txt[128];
sprintf(txt, "EXEC %s %d, \'%s\', %d", "MP_GMTOOL_UpdateUserLevel", dwServerGroup, Charactername, UserLevel);
g_DB.LoginQuery(eQueryType_FreeQuery, eGM_UpdateUserLevel, dwID, txt);
}
void GM_Login( DWORD dwConnectionIdx, char* strID, char* strPW, char* strIP )
{
char txt[128];
sprintf(txt, "EXEC RP_OperatorLoginCheck \'%s\', \'%s\', \'%s\'", strID, strPW, strIP);
g_DB.LoginQuery(eQueryType_FreeQuery, eGM_Login, dwConnectionIdx, txt);
}
void GM_GetGMPowerList( DWORD dwStartIdx, DWORD dwFlag )
{
char txt[128];
sprintf(txt, "EXEC %s %d, %d", "RP_OperatorInfo", dwStartIdx, dwFlag );
g_DB.LoginQuery(eQueryType_FreeQuery, eGM_GetGMPowerList, 0, txt);
}
/*
void GM_MoveToCharacter( DWORD dwTargetID, char* CharacterName, DWORD dwSeacherID )
{
g_DB.FreeQuery(eGM_MoveToCharacter, dwSeacherID, "EXEC %s \'%s\', %d", "MP_LoginCharacterSearchForName", CharacterName, dwTargetID );
}
*/
//---------
//---------------------------------------------------------------------------------------------------------
//
// Qeury Result Function
//
//---------------------------------------------------------------------------------------------------------
void RUserIDXSendAndCharacterBaseInfo(LPQUERY pData, LPDBMESSAGE pMessage)
{
DWORD count = pMessage->dwResult;
if(atoi((char*)pData[0].Data[0]) == 0)
count = 0;
DWORD AgentAuthKey = atoi((char*)pData[0].Data[eCL_AuthKey]);
USERINFO* pInfo = g_pUserTable->FindUser(pMessage->dwID);
if(pInfo == NULL) // ÀÌ¹Ì ³ª°¬À½
return;
if(pInfo->dwUniqueConnectIdx != AgentAuthKey) // ³ª°¡°í ´Ù¸¥³ÑÀÌ µé¾î¿È
return;
if(count > dMAXCHARACTER) // ij¸¯ÅÍ Á¤º¸¹Þ±â ½ÇÆÐ
{
count = dMAXCHARACTER;
char temp[256];
sprintf(temp,"Äɸ¯ÅͰ¡ 5¸í ÀÌ»óÀ̾úÀ½!!! useridx : %d", pInfo->dwUserID );
ASSERTMSG(0,temp);
}
SEND_CHARSELECT_INFO msg;
msg.Category = MP_USERCONN;
msg.Protocol = MP_USERCONN_CHARACTERLIST_ACK;
//---KES Crypt
#ifdef _CRYPTCHECK_
msg.eninit = *pInfo->crypto.GetEnKey();
msg.deinit = *pInfo->crypto.GetDeKey();
#endif
//--------
if( !count ) /// ¾ÆÁ÷ ¸¸µç ij¸¯ÅͰ¡ ¾ø´Ù.
{
msg.CharNum = 0; // ÀÌ Ä«¿îÆ®°¡ 0À̸é ij¸¯ÀÌ ÇϳªµÎ ¾ø´Â°ÍÀÌ´Ù
g_Network.Send2User(pMessage->dwID, (char*)&msg, sizeof(SEND_CHARSELECT_INFO));
pInfo->crypto.SetInit( TRUE ); // init on
return;
}
msg.CharNum = (BYTE)(count);
/// Á¤º¸¸¦ º¸³¾ ±¸Á¶Ã¼¿¡ °ªµé ¼¼ÆÃ
for( DWORD i=0; i<count; i++)
{
// ij¸¯ÅÍ ±âº»Á¤º¸ ¼ÂÆÃÇϴ°÷
msg.BaseObjectInfo[i].dwObjectID = atoi((char*)pData[i].Data[eCL_ObjectID]);
msg.StandingArrayNum[i] = atoi((char*)pData[i].Data[eCL_StandIndex]);
// strcpy(msg.BaseObjectInfo[i].ObjectName, (char*)pData[i].Data[eCL_ObjectName]);
SafeStrCpy( msg.BaseObjectInfo[i].ObjectName, (char*)pData[i].Data[eCL_ObjectName], MAX_NAME_LENGTH+1 );
msg.BaseObjectInfo[i].ObjectState = 0;
msg.ChrTotalInfo[i].FaceType = atoi((char*)pData[i].Data[eCL_BodyType]);
msg.ChrTotalInfo[i].HairType = atoi((char*)pData[i].Data[eCL_HeadType]);
msg.ChrTotalInfo[i].WearedItemIdx[eWearedItem_Hat] = atoi((char*)pData[i].Data[eCL_Hat]);
msg.ChrTotalInfo[i].WearedItemIdx[eWearedItem_Weapon] = atoi((char*)pData[i].Data[eCL_Weapon]);
msg.ChrTotalInfo[i].WearedItemIdx[eWearedItem_Dress] = atoi((char*)pData[i].Data[eCL_Dress]);
msg.ChrTotalInfo[i].WearedItemIdx[eWearedItem_Shoes] = atoi((char*)pData[i].Data[eCL_shoes]);
msg.ChrTotalInfo[i].WearedItemIdx[eWearedItem_Ring1] = 0;
msg.ChrTotalInfo[i].WearedItemIdx[eWearedItem_Ring2] = 0;
msg.ChrTotalInfo[i].WearedItemIdx[eWearedItem_Cape] = 0;
msg.ChrTotalInfo[i].WearedItemIdx[eWearedItem_Necklace] = 0;
msg.ChrTotalInfo[i].WearedItemIdx[eWearedItem_Armlet] = 0;
msg.ChrTotalInfo[i].WearedItemIdx[eWearedItem_Belt] = 0;
msg.ChrTotalInfo[i].Level = atoi((char*)pData[i].Data[eCL_Grade]);
msg.ChrTotalInfo[i].LoginMapNum = atoi((char*)pData[i].Data[eCL_Map]);
msg.ChrTotalInfo[i].Gender = atoi((char*)pData[i].Data[eCL_Gender]);
msg.ChrTotalInfo[i].Height = atof((char*)pData[i].Data[eCL_Height]);
msg.ChrTotalInfo[i].Width = atof((char*)pData[i].Data[eCL_Width]);
pInfo->SelectInfoArray[i].dwCharacterID = msg.BaseObjectInfo[i].dwObjectID;
pInfo->SelectInfoArray[i].Level = msg.ChrTotalInfo[i].Level;
pInfo->SelectInfoArray[i].MapNum = msg.ChrTotalInfo[i].LoginMapNum;
pInfo->SelectInfoArray[i].Gender = msg.ChrTotalInfo[i].Gender;
}
// ¼ÂÆÃÇÑ Ä³¸¯ Á¤º¸¸¦ º¸³½´Ù.
g_Network.Send2User(pMessage->dwID, (char*)&msg, sizeof(SEND_CHARSELECT_INFO));
pInfo->crypto.SetInit( TRUE ); // init on
}
void RCreateCharacter(LPQUERY pData, LPDBMESSAGE pMessage)
{
int result = atoi((char*)pData->Data[0]);
DWORD dwConnectionIndex = pMessage->dwID;
switch(result)
{
case 0:
{
USERINFO* pInfo = g_pUserTable->FindUser(dwConnectionIndex);
if(!pInfo)
{
MSGBASE msg;
msg.Category = MP_USERCONN;
msg.Protocol = MP_USERCONN_CHARACTER_MAKE_NACK;
g_Network.Send2User(dwConnectionIndex, (char*)&msg, sizeof(msg));
return;
}
ASSERT(pInfo->dwUserID);
if(pInfo->dwUserID == 0)
{
ASSERTMSG(0, "UserID°¡ 0ÀÌ´Ù.");
MSGBASE msg;
msg.Category = MP_USERCONN;
msg.Protocol = MP_USERCONN_CHARACTER_MAKE_NACK;
g_Network.Send2User(dwConnectionIndex, (char*)&msg, sizeof(msg));
return;
}
UserIDXSendAndCharacterBaseInfo(pInfo->dwUserID,pInfo->dwUniqueConnectIdx,dwConnectionIndex);
}
break;
case 1:
{
// ij¸¯ÅͰ¡ ²Ëá´Ù.
MSGBASE msg;
msg.Category = MP_USERCONN;
msg.Protocol = MP_USERCONN_CHARACTER_MAKE_NACK;
g_Network.Send2User(dwConnectionIndex, (char*)&msg, sizeof(msg));
}
break;
case 2:
{
// À̸§ÀÌ Áߺ¹µÊ ¿À·ù
MSG_WORD msg;
msg.Category = MP_USERCONN;
msg.Protocol = MP_USERCONN_CHARACTER_NAMECHECK_NACK;
msg.wData = result;
g_Network.Send2User(dwConnectionIndex, (char*)&msg, sizeof(msg));
}
break;
case 3:
{
// À̸§ÀÌ NULLÀ϶§
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -