734 lines
17 KiB
C++
734 lines
17 KiB
C++
|
|
//保存玩家的物品信息
|
|||
|
|
#include "StdAfx.h"
|
|||
|
|
#include<iostream>
|
|||
|
|
|
|||
|
|
void CLogicDBReqestHandler::SaveItems(CDataPacketReader &inPacket, bool bResp)
|
|||
|
|
{
|
|||
|
|
DECLARE_FUN_TIME_PROF()
|
|||
|
|
int nRawServerId = 0, nLoginServerId = 0;
|
|||
|
|
unsigned int nActorID = 0;
|
|||
|
|
BYTE bItemStoreType = 0;
|
|||
|
|
inPacket >> nRawServerId >> nLoginServerId >> nActorID >> bItemStoreType; //这里插入状态
|
|||
|
|
char *sTableName ="";
|
|||
|
|
int nRetID =0;
|
|||
|
|
|
|||
|
|
switch (bItemStoreType)
|
|||
|
|
{
|
|||
|
|
case itItemBag: //背包物品
|
|||
|
|
sTableName= "actorbagitem";
|
|||
|
|
nRetID = dcSaveBagItem;
|
|||
|
|
break;
|
|||
|
|
case itItemEquip: //装备物品
|
|||
|
|
sTableName= "actorequipitem";
|
|||
|
|
nRetID = dcSaveEquipItem;
|
|||
|
|
break;
|
|||
|
|
case itItemDepot: //仓库物品
|
|||
|
|
sTableName= "actordepotitem";
|
|||
|
|
nRetID = dcSaveDepotItem;
|
|||
|
|
break;
|
|||
|
|
case itItemHero: //宠物物品
|
|||
|
|
sTableName= "actorpetitem";
|
|||
|
|
nRetID = dcSaveHeroItem;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
//OutputMsg(rmNormal,"SaveItem [%d][%s]Item",nActorID,sTableName);
|
|||
|
|
int nErrorCode = reSucc;
|
|||
|
|
if (!m_pSQLConnection->Connected())
|
|||
|
|
{
|
|||
|
|
nErrorCode = reDbNotConnected; //db没有连接上
|
|||
|
|
}
|
|||
|
|
else if(sTableName ==NULL || nRetID == 0)
|
|||
|
|
{
|
|||
|
|
nErrorCode = reParamError ; //参数错误
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
nErrorCode = m_pSQLConnection->Exec(szSQLSP_CleanCharItems, nActorID,bItemStoreType);
|
|||
|
|
if(!nErrorCode)
|
|||
|
|
{
|
|||
|
|
m_pSQLConnection->ResetQuery(); //函数调用里没有重置数据的
|
|||
|
|
}
|
|||
|
|
if(nErrorCode == reSucc)
|
|||
|
|
{
|
|||
|
|
int nCount = 0;
|
|||
|
|
CUserItem data;
|
|||
|
|
inPacket >> nCount; //取物品的数量
|
|||
|
|
|
|||
|
|
if(nCount >0 ) //如果有物品的话
|
|||
|
|
{
|
|||
|
|
sprintf(m_pHugeSQLBuffer,szSQLSP_AddCharItems,sTableName); //表头放这里
|
|||
|
|
|
|||
|
|
char buff[1024];
|
|||
|
|
int nValue =0;
|
|||
|
|
WORD bValue=0;
|
|||
|
|
for(INT_PTR i =0;i < nCount ; i++)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
memset(&data,0,sizeof(data));
|
|||
|
|
strcat(m_pHugeSQLBuffer," (");
|
|||
|
|
inPacket >> data; //装载入物品的数据
|
|||
|
|
|
|||
|
|
sprintf(buff,"%u,%lld,",nActorID,data.series.llId); //actotID,guid
|
|||
|
|
strcat(m_pHugeSQLBuffer,buff);
|
|||
|
|
|
|||
|
|
//ItemId,QUALITY,strong
|
|||
|
|
nValue = MAKELONG( data.wItemId, MAKEWORD( data.btQuality, data.btStrong));
|
|||
|
|
|
|||
|
|
sprintf(buff,"%d,%d,",nValue, 0);//MAKELONG(data.wDura,data.wDuraMax));
|
|||
|
|
strcat(m_pHugeSQLBuffer,buff);
|
|||
|
|
|
|||
|
|
//wPackageType,btFlag,wHoles
|
|||
|
|
nValue = MAKELONG( MAKEWORD( data.wPackageType, data.btFlag), data.wCount);
|
|||
|
|
sprintf(buff," %d,",nValue);
|
|||
|
|
strcat(m_pHugeSQLBuffer,buff);
|
|||
|
|
|
|||
|
|
//BYTE bCurbLostStarStrongMax;BYTE bInSourceType;//铭刻等级WORD bStrongResereLevel;//保留(可使用)
|
|||
|
|
nValue = MAKELONG( MAKEWORD( data.bLostStar, data.bInSourceType), data.wIdentifySlotNum); //bStrongResereLevel->wIdentifySlotNum
|
|||
|
|
|
|||
|
|
sprintf(buff,"%d,",nValue);
|
|||
|
|
strcat(m_pHugeSQLBuffer,buff);
|
|||
|
|
|
|||
|
|
//data reserver
|
|||
|
|
//MAKELONG(A,B) 这里A是低字节,B是高字节,类似 MAKEWORD
|
|||
|
|
nValue = MAKELONG( data.nDropMonsterId, data.wStar ); //btSmithCount -> nDropMonsterId
|
|||
|
|
|
|||
|
|
sprintf(buff,"%d,%d,",data.nCreatetime.tv,nValue);
|
|||
|
|
|
|||
|
|
strcat(m_pHugeSQLBuffer,buff);
|
|||
|
|
nValue= MAKELONG( MAKEWORD(data.btSharp, data.btDeportId), MAKEWORD(data.btHandPos, data.btLuck));
|
|||
|
|
|
|||
|
|
sprintf(buff,"%d,%d,%d,%d,%d,%d,%d,",data.smithAttrs[0],data.smithAttrs[1],data.smithAttrs[2],data.smithAttrs[3],data.smithAttrs[4],nValue,data.nAreaId);
|
|||
|
|
strcat(m_pHugeSQLBuffer,buff);
|
|||
|
|
sprintf(buff,"\"%s\"",data.cBestAttr);
|
|||
|
|
strcat(m_pHugeSQLBuffer,buff);
|
|||
|
|
strcat(m_pHugeSQLBuffer,",");
|
|||
|
|
sprintf(buff,"\"%s\", \"%s\"",data.Refining,data.cSourceName);
|
|||
|
|
strcat(m_pHugeSQLBuffer,buff);
|
|||
|
|
strcat(m_pHugeSQLBuffer," )");
|
|||
|
|
// if(i < nCount -1)
|
|||
|
|
// {
|
|||
|
|
// strcat(m_pHugeSQLBuffer,",");
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
|
|||
|
|
if ((i>0 && i%50 == 0) || i == nCount-1)
|
|||
|
|
{
|
|||
|
|
// printf("m_pHugeSQLBuffer sizeof:%d\n",strlen(m_pHugeSQLBuffer));
|
|||
|
|
nErrorCode = m_pSQLConnection->Exec(m_pHugeSQLBuffer);
|
|||
|
|
if(!nErrorCode)
|
|||
|
|
{
|
|||
|
|
m_pSQLConnection->ResetQuery();
|
|||
|
|
sprintf(m_pHugeSQLBuffer,szSQLSP_AddCharItems,sTableName); //表头放这里
|
|||
|
|
// strcpy(m_pHugeSQLBuffer,szSQLSP_SaveMailAttach);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
OutputMsg(rmError,"saveitem Error,errorCode=%d,sql=%s", nErrorCode,m_pHugeSQLBuffer);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if(i < nCount -1)
|
|||
|
|
{
|
|||
|
|
strcat(m_pHugeSQLBuffer,",");
|
|||
|
|
}
|
|||
|
|
// if(i/)
|
|||
|
|
}
|
|||
|
|
// printf("m_pHugeSQLBuffer sizeof:%d\n",strlen(m_pHugeSQLBuffer));
|
|||
|
|
// nErrorCode = m_pSQLConnection->Exec(m_pHugeSQLBuffer);
|
|||
|
|
// if(!nErrorCode)
|
|||
|
|
// m_pSQLConnection->ResetQuery();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (nErrorCode)
|
|||
|
|
{
|
|||
|
|
CDataPacket& retPack = allocProtoPacket(nRetID);
|
|||
|
|
retPack << nRawServerId << nLoginServerId;
|
|||
|
|
retPack << nActorID << (BYTE) nErrorCode;
|
|||
|
|
flushProtoPacket(retPack);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CLogicDBReqestHandler::QueryItemsImpl(MYSQL_ROW pRow, CUserItem& data)
|
|||
|
|
{
|
|||
|
|
int nValue = 0;
|
|||
|
|
WORD wValue = 0;
|
|||
|
|
memset(&data,0,sizeof(data));
|
|||
|
|
data.series.llId= StrToInt64(pRow[0]);
|
|||
|
|
//itemID,Quality,strong
|
|||
|
|
sscanf(pRow[1], "%d",&nValue);//itemIdQuaStrong
|
|||
|
|
data.wItemId = LOWORD(nValue);
|
|||
|
|
wValue = HIWORD(nValue);
|
|||
|
|
data.btQuality = LOBYTE(wValue);
|
|||
|
|
data.btStrong = HIBYTE(wValue);
|
|||
|
|
|
|||
|
|
// //耐久度
|
|||
|
|
// sscanf(pRow[2], "%d",&nValue);
|
|||
|
|
// data.wDura = LOWORD(nValue);
|
|||
|
|
// data.wDuraMax = HIWORD(nValue);
|
|||
|
|
|
|||
|
|
//背包类型与flag,镶嵌的的第1字节
|
|||
|
|
sscanf(pRow[3], "%d",&nValue);
|
|||
|
|
wValue = LOWORD(nValue);
|
|||
|
|
data.wPackageType = LOBYTE(wValue);
|
|||
|
|
data.btFlag = HIBYTE(wValue);
|
|||
|
|
data.wCount = HIWORD(nValue);
|
|||
|
|
|
|||
|
|
//镶嵌的2,3个word
|
|||
|
|
sscanf(pRow[4], "%d",&nValue);
|
|||
|
|
wValue = LOWORD(nValue);
|
|||
|
|
data.wIdentifySlotNum = HIWORD(nValue); //bStrongResereLevel->wIdentifySlotNum
|
|||
|
|
data.bLostStar = LOBYTE(wValue);
|
|||
|
|
data.bInSourceType = HIBYTE(wValue);
|
|||
|
|
|
|||
|
|
//时间
|
|||
|
|
sscanf(pRow[5], "%d",&data.nCreatetime.tv);
|
|||
|
|
|
|||
|
|
//reserverd
|
|||
|
|
sscanf(pRow[6], "%d",&nValue);
|
|||
|
|
|
|||
|
|
data.nDropMonsterId = LOWORD(nValue); //btSmithCount -> nDropMonsterId
|
|||
|
|
wValue = HIWORD(nValue);
|
|||
|
|
data.wStar= wValue;
|
|||
|
|
|
|||
|
|
//smith1
|
|||
|
|
sscanf(pRow[7], "%d",&data.smithAttrs[0]);
|
|||
|
|
//smith2
|
|||
|
|
sscanf(pRow[8], "%d",&data.smithAttrs[1]);
|
|||
|
|
//smith3
|
|||
|
|
sscanf(pRow[9], "%d",&data.smithAttrs[2]);
|
|||
|
|
sscanf(pRow[10], "%d",&data.smithAttrs[3]);
|
|||
|
|
//smith3
|
|||
|
|
sscanf(pRow[11], "%d",&data.smithAttrs[4]);
|
|||
|
|
sscanf(pRow[12], "%d",&nValue);
|
|||
|
|
wValue = HIWORD(nValue);
|
|||
|
|
data.btLuck = HIBYTE(wValue);
|
|||
|
|
data.btHandPos = LOBYTE(wValue);
|
|||
|
|
wValue = LOWORD(nValue);
|
|||
|
|
data.btDeportId = HIBYTE(wValue);
|
|||
|
|
data.btSharp = LOBYTE(wValue);
|
|||
|
|
|
|||
|
|
if(pRow[13])
|
|||
|
|
{
|
|||
|
|
sscanf(pRow[13], "%d",&data.nAreaId);
|
|||
|
|
}
|
|||
|
|
memset(&data.cBestAttr, 0 ,sizeof(data.cBestAttr));
|
|||
|
|
int pos = 0;
|
|||
|
|
|
|||
|
|
std::string str = "";
|
|||
|
|
if(pRow[14])
|
|||
|
|
{
|
|||
|
|
str = pRow[14];
|
|||
|
|
//memcpy(&data.cBestAttr,pRow[14],sizeof(data.cBestAttr));
|
|||
|
|
}
|
|||
|
|
if(str != "")
|
|||
|
|
{
|
|||
|
|
//memcpy(&data.cBestAttr,str.c_str(),sizeof(str));
|
|||
|
|
strcpy(data.cBestAttr, str.c_str());
|
|||
|
|
}
|
|||
|
|
data.cBestAttr[sizeof(data.cBestAttr)-1] = '0';
|
|||
|
|
|
|||
|
|
memset(&data.Refining, 0 ,sizeof(data.Refining));
|
|||
|
|
str = "";
|
|||
|
|
if(pRow[15])
|
|||
|
|
{
|
|||
|
|
str = pRow[15];
|
|||
|
|
}
|
|||
|
|
if(str != "")
|
|||
|
|
{
|
|||
|
|
strcpy(data.Refining, str.c_str());
|
|||
|
|
}
|
|||
|
|
data.Refining[sizeof(data.Refining)-1] = '0';
|
|||
|
|
str = "";
|
|||
|
|
if(pRow[16])
|
|||
|
|
{
|
|||
|
|
str = pRow[16];
|
|||
|
|
}
|
|||
|
|
if(str != "")
|
|||
|
|
{
|
|||
|
|
strcpy(data.cSourceName, str.c_str());
|
|||
|
|
}
|
|||
|
|
data.cSourceName[sizeof(data.cSourceName)-1] = '0';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CLogicDBReqestHandler::QueryItems( unsigned int nActorID,unsigned int nItemStoreType, int nRawServerId, int nLoginServerId)
|
|||
|
|
{
|
|||
|
|
DECLARE_FUN_TIME_PROF()
|
|||
|
|
INT_PTR nErroID = reSucc;
|
|||
|
|
INT_PTR nRetID = 0;
|
|||
|
|
char *sTableName ="";
|
|||
|
|
switch (nItemStoreType)
|
|||
|
|
{
|
|||
|
|
case itItemBag:
|
|||
|
|
nRetID= dcLoadBagItem;
|
|||
|
|
sTableName= "actorbagitem";
|
|||
|
|
break;
|
|||
|
|
case itItemEquip:
|
|||
|
|
nRetID= dcLoadEquipItem;
|
|||
|
|
sTableName= "actorequipitem";
|
|||
|
|
break;
|
|||
|
|
case itItemDepot:
|
|||
|
|
sTableName= "actordepotitem";
|
|||
|
|
nRetID= dcLoadDepotItem;
|
|||
|
|
break;
|
|||
|
|
case itItemHero:
|
|||
|
|
sTableName= "actorpetitem";
|
|||
|
|
nRetID = dcLoadHeroItem;
|
|||
|
|
break;
|
|||
|
|
// case itItemOfflineEquip:
|
|||
|
|
// sTableName = "OfflineEquip";
|
|||
|
|
// nItemStoreType= itItemEquip; //这里还是装载装备的
|
|||
|
|
// nRetID = dcLoadOfflineUserOther;
|
|||
|
|
// break;
|
|||
|
|
}
|
|||
|
|
if (0 == nRetID)
|
|||
|
|
return; //参数错误
|
|||
|
|
//OutputMsg(rmNormal,"QueryItems [%d][%s]Item",nActorID,sTableName);
|
|||
|
|
|
|||
|
|
if (!m_pSQLConnection->Connected())
|
|||
|
|
{
|
|||
|
|
nErroID = reDbErr;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//查询这种物品
|
|||
|
|
nErroID = m_pSQLConnection->Query(szSQLSP_LoadCharItems, nActorID, nItemStoreType);
|
|||
|
|
if ( !nErroID )
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
CDataPacket& retPack = allocProtoPacket((WORD)nRetID);
|
|||
|
|
retPack << nRawServerId << nLoginServerId;
|
|||
|
|
retPack << nActorID << (BYTE) nErroID;
|
|||
|
|
CUserItem data;
|
|||
|
|
|
|||
|
|
|
|||
|
|
MYSQL_ROW pRow = m_pSQLConnection->CurrentRow();
|
|||
|
|
int nCount = m_pSQLConnection->GetRowCount();
|
|||
|
|
retPack << (int)nCount;
|
|||
|
|
// OutputMsg(rmTip,_T("玩家actorid:%u 装载%s数据nCount = %d"),nActorID, sTableName,nCount);
|
|||
|
|
while (pRow)
|
|||
|
|
{
|
|||
|
|
QueryItemsImpl(pRow, data);
|
|||
|
|
// retPack << data;
|
|||
|
|
data >> retPack;
|
|||
|
|
pRow = m_pSQLConnection->NextRow();
|
|||
|
|
}
|
|||
|
|
flushProtoPacket(retPack);
|
|||
|
|
m_pSQLConnection->ResetQuery(); //函数调用里没有重置数据的
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
OutputMsg(rmError,
|
|||
|
|
_T("%s装载玩家的item数据失败%u,nItemStoreType=%d"),
|
|||
|
|
__FUNCTION__,
|
|||
|
|
nActorID,
|
|||
|
|
nItemStoreType);
|
|||
|
|
nErroID= reDbErr;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//出现了错误,要返回一个错误码
|
|||
|
|
CDataPacket& retPack = allocProtoPacket((WORD)nRetID);
|
|||
|
|
retPack << nRawServerId << nLoginServerId;
|
|||
|
|
retPack << nActorID << (BYTE)nErroID;
|
|||
|
|
flushProtoPacket(retPack);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CLogicDBReqestHandler::LoadUserActiveItem(CDataPacketReader &inPacket)
|
|||
|
|
{
|
|||
|
|
DECLARE_FUN_TIME_PROF()
|
|||
|
|
int nRawServerId, nLoginServerId;
|
|||
|
|
unsigned int nAccountId = 0;
|
|||
|
|
unsigned int nActorId = 0;
|
|||
|
|
inPacket >> nRawServerId >> nLoginServerId >> nAccountId;
|
|||
|
|
inPacket >> nActorId;
|
|||
|
|
|
|||
|
|
CDataPacket& out = allocProtoPacket(dcLoadActiveBag);
|
|||
|
|
out << nRawServerId << nLoginServerId;
|
|||
|
|
out << nActorId;
|
|||
|
|
if (!m_pSQLConnection->Connected())
|
|||
|
|
{
|
|||
|
|
out << (BYTE)reDbErr;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int nError = m_pSQLConnection->Query(szLoadUserItem,nAccountId,nActorId, nRawServerId);
|
|||
|
|
if ( !nError )
|
|||
|
|
{
|
|||
|
|
out << (BYTE)reSucc;
|
|||
|
|
MYSQL_ROW pRow = m_pSQLConnection->CurrentRow();
|
|||
|
|
int nCount = m_pSQLConnection->GetRowCount();
|
|||
|
|
out << (int)nCount;
|
|||
|
|
while ( pRow)
|
|||
|
|
{
|
|||
|
|
INT64 id;
|
|||
|
|
id = StrToInt64(pRow[0]);
|
|||
|
|
int nItemId = _StrToInt(pRow[1]);
|
|||
|
|
out << (INT64)id;
|
|||
|
|
out << (int)nItemId;
|
|||
|
|
int value = _StrToInt(pRow[2]);
|
|||
|
|
out << (BYTE)value; //bind
|
|||
|
|
value = _StrToInt(pRow[3]);
|
|||
|
|
out << (BYTE)value; //strong
|
|||
|
|
value = _StrToInt(pRow[4]);
|
|||
|
|
out << (BYTE)value; //quality
|
|||
|
|
value = _StrToInt(pRow[5]);
|
|||
|
|
out << (int)value; //itemcount
|
|||
|
|
value = 0;
|
|||
|
|
if(pRow[6])
|
|||
|
|
value = _StrToInt(pRow[6]); //smith1
|
|||
|
|
out << value;
|
|||
|
|
|
|||
|
|
value = 0;
|
|||
|
|
if(pRow[7])
|
|||
|
|
value = _StrToInt(pRow[7]); //smith2
|
|||
|
|
out << value;
|
|||
|
|
|
|||
|
|
value = 0;
|
|||
|
|
if(pRow[8])
|
|||
|
|
value = _StrToInt(pRow[8]); //smith3
|
|||
|
|
out << value;
|
|||
|
|
|
|||
|
|
value = 0;
|
|||
|
|
if(pRow[9])
|
|||
|
|
value = _StrToInt(pRow[9]); //smith4
|
|||
|
|
out << value;
|
|||
|
|
|
|||
|
|
value = 0;
|
|||
|
|
if(pRow[10])
|
|||
|
|
value = _StrToInt(pRow[10]); //smith5
|
|||
|
|
out << value;
|
|||
|
|
|
|||
|
|
value = 0;
|
|||
|
|
if(pRow[11])
|
|||
|
|
value = _StrToInt(pRow[11]); //initsmith
|
|||
|
|
out << value;
|
|||
|
|
|
|||
|
|
value = 0;
|
|||
|
|
if(pRow[12])
|
|||
|
|
value = _StrToInt(pRow[12]); //rever1
|
|||
|
|
out << value;
|
|||
|
|
|
|||
|
|
value = 0;
|
|||
|
|
if(pRow[13])
|
|||
|
|
value = _StrToInt(pRow[13]); //rever2
|
|||
|
|
out << value;
|
|||
|
|
|
|||
|
|
pRow = m_pSQLConnection->NextRow();
|
|||
|
|
}
|
|||
|
|
m_pSQLConnection->ResetQuery();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
out << (BYTE)reDbErr;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
flushProtoPacket(out);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CLogicDBReqestHandler::GetUserActiveItem(CDataPacketReader &inPacket)
|
|||
|
|
{
|
|||
|
|
DECLARE_FUN_TIME_PROF()
|
|||
|
|
int nRawServerId, nLoginServerId;
|
|||
|
|
unsigned int nAccountId = 0;
|
|||
|
|
unsigned int nActorId = 0;
|
|||
|
|
INT64 nId = 0;
|
|||
|
|
inPacket >> nRawServerId >> nLoginServerId >> nAccountId;
|
|||
|
|
inPacket >> nActorId;
|
|||
|
|
inPacket >> nId;
|
|||
|
|
|
|||
|
|
CDataPacket& out = allocProtoPacket(dcGetActiveItem);
|
|||
|
|
out << nRawServerId << nLoginServerId;
|
|||
|
|
out << nActorId;
|
|||
|
|
if (!m_pSQLConnection->Connected())
|
|||
|
|
{
|
|||
|
|
out << (BYTE)reDbErr;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int nError = m_pSQLConnection->Query(szGetUserItem,nAccountId,nActorId,nId, nRawServerId);
|
|||
|
|
if ( !nError )
|
|||
|
|
{
|
|||
|
|
out << (BYTE)reSucc;
|
|||
|
|
out << (INT64)nId;
|
|||
|
|
MYSQL_ROW pRow = m_pSQLConnection->CurrentRow();
|
|||
|
|
if ( pRow)
|
|||
|
|
{
|
|||
|
|
int nItemId = 0;
|
|||
|
|
if(pRow[0])
|
|||
|
|
{
|
|||
|
|
nItemId = _StrToInt(pRow[0]);
|
|||
|
|
}
|
|||
|
|
out << (int)nItemId;
|
|||
|
|
int value = 0;
|
|||
|
|
if(pRow[1])
|
|||
|
|
{
|
|||
|
|
value = _StrToInt(pRow[1]);
|
|||
|
|
}
|
|||
|
|
out << (BYTE)value; //bind
|
|||
|
|
value = 0;
|
|||
|
|
if(pRow[2])
|
|||
|
|
{
|
|||
|
|
value = _StrToInt(pRow[2]);
|
|||
|
|
}
|
|||
|
|
out << (BYTE)value; //nstrong
|
|||
|
|
value = 0;
|
|||
|
|
if(pRow[3])
|
|||
|
|
{
|
|||
|
|
value = _StrToInt(pRow[3]);
|
|||
|
|
}
|
|||
|
|
out << (BYTE)value; //nquality
|
|||
|
|
value = 0;
|
|||
|
|
if(pRow[4])
|
|||
|
|
{
|
|||
|
|
value = _StrToInt(pRow[4]);
|
|||
|
|
}
|
|||
|
|
out << (int)value; //ncount
|
|||
|
|
value = 0;
|
|||
|
|
bool flag =true;
|
|||
|
|
|
|||
|
|
if(flag)
|
|||
|
|
{
|
|||
|
|
if(pRow[5] )
|
|||
|
|
{
|
|||
|
|
value = _StrToInt(pRow[5]);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
flag =false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
out << (int)value; //smith1
|
|||
|
|
value = 0;
|
|||
|
|
|
|||
|
|
if(flag )
|
|||
|
|
{
|
|||
|
|
if(pRow[6] )
|
|||
|
|
{
|
|||
|
|
value = _StrToInt(pRow[6]);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
flag =false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
out << (int)value; //smith2
|
|||
|
|
value = 0;
|
|||
|
|
|
|||
|
|
if(flag )
|
|||
|
|
{
|
|||
|
|
if(pRow[7] )
|
|||
|
|
{
|
|||
|
|
value = _StrToInt(pRow[7]);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
flag =false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
out << (int)value; //smith3
|
|||
|
|
value = 0;
|
|||
|
|
|
|||
|
|
if(flag )
|
|||
|
|
{
|
|||
|
|
if(pRow[8] )
|
|||
|
|
{
|
|||
|
|
value = _StrToInt(pRow[8]);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
flag =false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
out << (int)value; //smith4
|
|||
|
|
value = 0;
|
|||
|
|
|
|||
|
|
if(flag )
|
|||
|
|
{
|
|||
|
|
if(pRow[9] )
|
|||
|
|
{
|
|||
|
|
value = _StrToInt(pRow[9]);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
flag =false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
out << (int)value; //smith5
|
|||
|
|
value = 0;
|
|||
|
|
if(flag )
|
|||
|
|
{
|
|||
|
|
if(pRow[10] )
|
|||
|
|
{
|
|||
|
|
value = _StrToInt(pRow[10]);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
flag =false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
out << (int)value; //initsmith
|
|||
|
|
|
|||
|
|
if(flag )
|
|||
|
|
{
|
|||
|
|
if (pRow[11])
|
|||
|
|
{
|
|||
|
|
out.writeString(pRow[11]);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
out.writeString("");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
out.writeString("");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
m_pSQLConnection->ResetQuery();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
out << (BYTE)reDbErr;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
flushProtoPacket(out);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CLogicDBReqestHandler::RemoveUserActiveItem( CDataPacketReader &inPacket )
|
|||
|
|
{
|
|||
|
|
DECLARE_FUN_TIME_PROF()
|
|||
|
|
int nRawServerId, nLoginServerId;
|
|||
|
|
int nAccountId = 0;
|
|||
|
|
unsigned int nActorId = 0;
|
|||
|
|
INT64 nId = 0;
|
|||
|
|
inPacket >> nRawServerId >> nLoginServerId;
|
|||
|
|
inPacket >> nActorId;
|
|||
|
|
inPacket >> nId;
|
|||
|
|
|
|||
|
|
CDataPacket& out = allocProtoPacket(dcDeleteActiveItem);
|
|||
|
|
out << nRawServerId << nLoginServerId;
|
|||
|
|
out << nActorId;
|
|||
|
|
if (!m_pSQLConnection->Connected())
|
|||
|
|
{
|
|||
|
|
out << (BYTE)reDbErr;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int nError = m_pSQLConnection->Exec(szDelUserItem,nId);
|
|||
|
|
if ( !nError )
|
|||
|
|
{
|
|||
|
|
out << (BYTE)reSucc;
|
|||
|
|
m_pSQLConnection->ResetQuery();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
out << (BYTE)reDbErr;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
flushProtoPacket(out);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CLogicDBReqestHandler::SaveAlmirahItem(CDataPacketReader &inPacket, bool bResp)
|
|||
|
|
{
|
|||
|
|
int nRawServerId = 0, nLoginServerId = 0;
|
|||
|
|
unsigned int nActorID = 0;
|
|||
|
|
BYTE bItemStoreType = 0;
|
|||
|
|
WORD nCount = 0;
|
|||
|
|
inPacket >> nRawServerId >> nLoginServerId >> nActorID >> nCount;
|
|||
|
|
// CDataPacket & outPack = allocProtoPacket(dcSaveAlmirahItem);
|
|||
|
|
// outPack << nRawServerId << nLoginServerId << nActorID;
|
|||
|
|
if (!m_pSQLConnection->Connected())
|
|||
|
|
{
|
|||
|
|
// outPack << (byte)reDbErr;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int nErrId = m_pSQLConnection->Exec(szSQLSP_DeleteAlmirah, nActorID);
|
|||
|
|
if (!nErrId)
|
|||
|
|
{
|
|||
|
|
m_pSQLConnection->ResetQuery();
|
|||
|
|
}
|
|||
|
|
if (nErrId == reSucc && nCount > 0)
|
|||
|
|
{
|
|||
|
|
sprintf(m_pHugeSQLBuffer, szSQLSP_InsertAlmirah);
|
|||
|
|
strcat(m_pHugeSQLBuffer, "(");
|
|||
|
|
for (WORD i = 0; i < nCount; i++)
|
|||
|
|
{
|
|||
|
|
char sBuff[1000];
|
|||
|
|
CAlmirahItem oneItem;
|
|||
|
|
inPacket >> oneItem.nModelId >> oneItem.btTakeOn>>oneItem.nLv;
|
|||
|
|
sprintf_s(sBuff, ArrayCount(sBuff), "%u,%d,%d,%d)", nActorID, oneItem.nModelId, oneItem.nLv, oneItem.btTakeOn);
|
|||
|
|
strcat(m_pHugeSQLBuffer, sBuff);
|
|||
|
|
if (i + 1 != nCount)
|
|||
|
|
{
|
|||
|
|
strcat(m_pHugeSQLBuffer, ",(");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
nErrId = m_pSQLConnection->Exec(m_pHugeSQLBuffer);
|
|||
|
|
if (!nErrId)
|
|||
|
|
{
|
|||
|
|
m_pSQLConnection->ResetQuery();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// outPack << (byte)reSucc;
|
|||
|
|
}
|
|||
|
|
// flushProtoPacket(outPack);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CLogicDBReqestHandler::LoadAlmirahItem(unsigned int nActorId, int nRawServerId, int nLoginServerId)
|
|||
|
|
{
|
|||
|
|
CDataPacket & outPack = allocProtoPacket(dcLoadAlmirahItem);
|
|||
|
|
outPack << nRawServerId << nLoginServerId << nActorId;
|
|||
|
|
|
|||
|
|
if (!m_pSQLConnection->Connected())
|
|||
|
|
{
|
|||
|
|
outPack << (BYTE)reDbErr;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int nError = m_pSQLConnection->Query(szSQLSP_LoadAlmirah, nActorId);
|
|||
|
|
if ( !nError )
|
|||
|
|
{
|
|||
|
|
outPack << (BYTE)reSucc;
|
|||
|
|
MYSQL_ROW pRow = m_pSQLConnection->CurrentRow();
|
|||
|
|
int nCount = m_pSQLConnection->GetRowCount();
|
|||
|
|
outPack << (WORD)nCount;
|
|||
|
|
while ( pRow)
|
|||
|
|
{
|
|||
|
|
int nTempInt = 0;
|
|||
|
|
if (pRow[0])
|
|||
|
|
{
|
|||
|
|
sscanf(pRow[0], "%d", &nTempInt);
|
|||
|
|
}
|
|||
|
|
outPack <<(WORD)nTempInt;
|
|||
|
|
|
|||
|
|
nTempInt = 0;
|
|||
|
|
if (pRow[1])
|
|||
|
|
{
|
|||
|
|
sscanf(pRow[1], "%d", &nTempInt);
|
|||
|
|
}
|
|||
|
|
outPack <<(int)nTempInt;
|
|||
|
|
|
|||
|
|
nTempInt = 0;
|
|||
|
|
if (pRow[2])
|
|||
|
|
{
|
|||
|
|
sscanf(pRow[2], "%d", &nTempInt);
|
|||
|
|
}
|
|||
|
|
outPack <<(byte)nTempInt;
|
|||
|
|
|
|||
|
|
pRow = m_pSQLConnection->NextRow();
|
|||
|
|
}
|
|||
|
|
m_pSQLConnection->ResetQuery();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
flushProtoPacket(outPack);
|
|||
|
|
}
|