475 lines
12 KiB
C++
475 lines
12 KiB
C++
#include "StdAfx.h"
|
|
|
|
//读取玩家的英雄的数据
|
|
void CLogicDBReqestHandler::QueryPetData(unsigned int nActorID, int nRawServerId, int nLoginServerId)
|
|
{
|
|
DECLARE_FUN_TIME_PROF()
|
|
|
|
INT_PTR nErroID = reSucc;
|
|
//数据库连接是否就绪
|
|
if ( !m_pSQLConnection->Connected() )
|
|
{
|
|
nErroID= reDbErr;
|
|
}
|
|
else
|
|
{
|
|
//SELECT EXP,hp, mp,NAME,circle,LEVEL,ids,modelid,weaponappear,score,vocation,sex,swingappear,reserver1, reserver2,stage,bodyforce,bless FROM actorpets WHERE `actorid` = nactorid;
|
|
//查询玩家的的英雄的数据
|
|
nErroID = m_pSQLConnection->Query(szSQLSP_LoadPetData, nActorID);
|
|
if ( !nErroID )
|
|
{
|
|
CDataPacket& retPack = allocProtoPacket(dcLoadHeroData);
|
|
retPack << nRawServerId << nLoginServerId;
|
|
retPack << nActorID << (BYTE) nErroID;
|
|
HERODBDATA data;
|
|
MYSQL_ROW pRow = m_pSQLConnection->CurrentRow();
|
|
int nCount = m_pSQLConnection->GetRowCount();
|
|
retPack << (int)nCount;
|
|
int nValue =0;
|
|
unsigned long long lValue =0;
|
|
|
|
WORD wValue =0;
|
|
while ( pRow)
|
|
{
|
|
|
|
sscanf(pRow[0], "%lld", &lValue);
|
|
data.nExp = lValue;
|
|
|
|
sscanf(pRow[1], "%d", &nValue);
|
|
data.nHp = nValue;
|
|
|
|
sscanf(pRow[2], "%d", &nValue);
|
|
data.nMp = nValue;
|
|
|
|
strncpy(data.name,pRow[3],sizeof(data.name));
|
|
|
|
sscanf(pRow[4], "%d", &nValue);
|
|
data.bCircle = nValue;
|
|
|
|
|
|
sscanf(pRow[5], "%d", &nValue);
|
|
data.bLevel = nValue;
|
|
|
|
|
|
//IDs
|
|
sscanf(pRow[6], "%d", &nValue);
|
|
data.wIconId = LOWORD(nValue);
|
|
wValue = HIWORD(nValue);
|
|
data.bID = LOBYTE(wValue);
|
|
data.bState = HIBYTE(wValue);
|
|
|
|
|
|
sscanf(pRow[7], "%d", &nValue);
|
|
data.nModel = nValue;
|
|
|
|
sscanf(pRow[8], "%d", &nValue);
|
|
data.nWeaponAppear = nValue;
|
|
|
|
sscanf(pRow[9], "%d", &nValue);
|
|
data.nScore = nValue;
|
|
|
|
sscanf(pRow[10], "%d", &nValue);
|
|
data.bVocation = (BYTE)nValue;
|
|
|
|
|
|
|
|
sscanf(pRow[11], "%d", &nValue);
|
|
data.bSex = (BYTE)nValue;
|
|
|
|
sscanf(pRow[12], "%d", &nValue);
|
|
data.nSwingAppear = nValue;
|
|
|
|
|
|
sscanf(pRow[13], "%d", &nValue);
|
|
data.nReserver1 = nValue;
|
|
|
|
sscanf(pRow[14], "%d", &nValue);
|
|
data.nReserver2 = nValue;
|
|
|
|
sscanf(pRow[15], "%d", &nValue);
|
|
data.bStage= (BYTE)nValue;
|
|
|
|
sscanf(pRow[16], "%d", &nValue);
|
|
data.nBodyforce = nValue;
|
|
|
|
sscanf(pRow[17], "%d", &nValue);
|
|
data.nBless = nValue;
|
|
|
|
retPack << data;
|
|
pRow = m_pSQLConnection->NextRow();
|
|
}
|
|
flushProtoPacket(retPack);
|
|
m_pSQLConnection->ResetQuery(); //函数调用里没有重置数据的
|
|
return;
|
|
}
|
|
|
|
}
|
|
if( nErroID != reSucc)
|
|
{
|
|
OutputMsg(rmError,_T("%s装载玩家的英雄数据失败%u"),__FUNCTION__,nActorID);
|
|
CDataPacket& retPack = allocProtoPacket(dcLoadHeroData);
|
|
retPack << nRawServerId << nLoginServerId << nActorID << (BYTE) nErroID;
|
|
flushProtoPacket(retPack);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
void CLogicDBReqestHandler::QueryPetDetailData(CDataPacketReader &inPacket)
|
|
{
|
|
//unsigned int nActorId = 0;
|
|
//inPacket >> nActorId ;
|
|
//QueryItems(nActorId,itItemPet); //查询英雄物品
|
|
//QueryPetSkillData(nActorId);
|
|
}
|
|
|
|
//保存技能的数据
|
|
void CLogicDBReqestHandler::SavePetToDB(CDataPacketReader &inPacket, bool bResp)
|
|
{
|
|
DECLARE_FUN_TIME_PROF()
|
|
int nRawServerId, nLoginServerId;
|
|
unsigned int nActorId = 0;
|
|
int nPetCount =0;
|
|
inPacket >> nRawServerId >> nLoginServerId >> nActorId >> nPetCount;
|
|
|
|
int nErrorCode =0;
|
|
if (nActorId == 0 )
|
|
{
|
|
nErrorCode = reNoActor;
|
|
}
|
|
else
|
|
{
|
|
//先删除玩家的技能列表
|
|
//nErrorCode =ExecuteSimplyProcedure(szSQLSP_CleanCharSkills,nActorId) ;
|
|
int nErrorCode = m_pSQLConnection->Exec(szSQLSP_CleanPetData, nActorId);
|
|
if(! nErrorCode)
|
|
{
|
|
m_pSQLConnection->ResetQuery();
|
|
}
|
|
else
|
|
{
|
|
OutputMsg(rmWaning,_T("clean pet error,actorID=%u"),nActorId);
|
|
}
|
|
|
|
if( nErrorCode == reSucc)
|
|
{
|
|
|
|
strcpy(m_pHugeSQLBuffer,szSQLSP_AddPets); //表头放这里
|
|
char buff[2048];
|
|
HERODBDATA data;
|
|
|
|
// "insert into skill(attack,defence,agility,physique,exp,hp,mp,name,quality,strong,circle,level,ids,loyalty) values";//添加角色技能(EXEC)
|
|
if(nPetCount >0)
|
|
{
|
|
for(INT_PTR i=0; i< nPetCount; i++)
|
|
{
|
|
inPacket >> data; //每次读一个的数据
|
|
|
|
strcat(m_pHugeSQLBuffer," (");
|
|
|
|
int nId =MAKELONG(data.wIconId,MAKEWORD(data.bID,data.bState));
|
|
|
|
|
|
sprintf(buff,"%lld,%lld,%d,%d,\"%s\",%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",nActorId,data.nExp,data.nHp,
|
|
data.nMp,data.name,data.bCircle,data.bLevel,nId,data.nModel,
|
|
data.nWeaponAppear,data.nScore,data.bVocation,data.bSex,data.nSwingAppear,data.nReserver1,data.nReserver2,data.bStage,data.nBodyforce,data.nBless); //actotID,guid
|
|
strcat(m_pHugeSQLBuffer,buff);
|
|
|
|
strcat(m_pHugeSQLBuffer," )");
|
|
if(i < nPetCount -1)
|
|
{
|
|
strcat(m_pHugeSQLBuffer,",");
|
|
}
|
|
|
|
}
|
|
nErrorCode= m_pSQLConnection->Exec(m_pHugeSQLBuffer);
|
|
if(!nErrorCode)
|
|
{
|
|
m_pSQLConnection->ResetQuery();
|
|
}
|
|
else
|
|
{
|
|
OutputMsg(rmError,"save pet data error,actorid=%u",nActorId);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (bResp)
|
|
{
|
|
CDataPacket& retPack = allocProtoPacket(dcSaveHeroData);
|
|
retPack << nRawServerId << nLoginServerId;
|
|
retPack << nActorId << char(nErrorCode);
|
|
flushProtoPacket(retPack);
|
|
}
|
|
}
|
|
|
|
/*
|
|
dcLoadPetSkillData, //装载英雄的技能的数据
|
|
dcSavePetData, //保存英雄的数据
|
|
dcSaveSkillData, //保存英雄的技能数据/
|
|
*/
|
|
|
|
void CLogicDBReqestHandler::QueryPetSkillData(unsigned int nActorID, int nRawServerId, int nLoginServerId)
|
|
{
|
|
DECLARE_FUN_TIME_PROF()
|
|
INT_PTR nErroID = reSucc;
|
|
//数据库连接是否就绪
|
|
if ( !m_pSQLConnection->Connected() )
|
|
{
|
|
nErroID= reDbErr;
|
|
}
|
|
else
|
|
{
|
|
//SELECT petid,skillid,skilllevel,reserver,skillexp FROM petskills WHERE `actorid` = nactorid;
|
|
//查询玩家的的英雄的数据
|
|
nErroID = m_pSQLConnection->Query(szSQLSP_LoadPetSkillData, nActorID);
|
|
if ( !nErroID )
|
|
{
|
|
CDataPacket& retPack = allocProtoPacket(dcLoadHeroSkillData);
|
|
retPack << nRawServerId << nLoginServerId;
|
|
retPack << nActorID << (BYTE) nErroID;
|
|
HEROSKILLDATA data;
|
|
MYSQL_ROW pRow = m_pSQLConnection->CurrentRow();
|
|
int nCount = m_pSQLConnection->GetRowCount();
|
|
retPack << (int)nCount;
|
|
int nValue =0;
|
|
while ( pRow)
|
|
{
|
|
sscanf(pRow[0], "%d", &nValue);
|
|
data.nHeroID = nValue;
|
|
|
|
sscanf(pRow[1], "%d", &nValue);
|
|
data.nSkillID = nValue;
|
|
|
|
sscanf(pRow[2], "%d", &nValue);
|
|
data.nLevel = nValue;
|
|
|
|
sscanf(pRow[3], "%d", &nValue);
|
|
data.nSlotId = HIWORD(nValue);
|
|
data.bIsClose =(BYTE)(LOWORD (nValue));
|
|
|
|
sscanf(pRow[4], "%d", &nValue);
|
|
data.nExp = nValue;
|
|
|
|
retPack << data;
|
|
pRow = m_pSQLConnection->NextRow();
|
|
}
|
|
flushProtoPacket(retPack);
|
|
m_pSQLConnection->ResetQuery(); //函数调用里没有重置数据的
|
|
return;
|
|
}
|
|
}
|
|
if( nErroID != reSucc)
|
|
{
|
|
OutputMsg(rmError,_T("%s装载玩家的英雄技能数据失败%u"),__FUNCTION__,nActorID);
|
|
CDataPacket& retPack = allocProtoPacket(dcLoadHeroSkillData);
|
|
retPack << nRawServerId << nLoginServerId;
|
|
retPack << nActorID << (BYTE) nErroID;
|
|
flushProtoPacket(retPack);
|
|
}
|
|
|
|
}
|
|
|
|
void CLogicDBReqestHandler::SavePetSkillData(CDataPacketReader &inPacket, bool bResp)
|
|
{
|
|
DECLARE_FUN_TIME_PROF()
|
|
int nRawServerId, nLoginServerId;
|
|
unsigned int nActorId = 0;
|
|
int nCount =0;
|
|
inPacket >> nRawServerId >> nLoginServerId >> nActorId >> nCount;
|
|
|
|
int nErrorCode =0;
|
|
if (nActorId == 0 )
|
|
{
|
|
nErrorCode = reNoActor;
|
|
}
|
|
else
|
|
{
|
|
//先删除玩家的技能列表
|
|
//nErrorCode =ExecuteSimplyProcedure(szSQLSP_CleanCharSkills,nActorId) ;
|
|
int nErrorCode = m_pSQLConnection->Exec(szSQLSP_cleanPetSkillData, nActorId);
|
|
if(! nErrorCode)
|
|
{
|
|
m_pSQLConnection->ResetQuery();
|
|
}
|
|
if( nErrorCode == reSucc)
|
|
{
|
|
|
|
if(nCount >0)
|
|
{
|
|
strcpy(m_pHugeSQLBuffer,szSQLSP_addPetSkillData); //表头放这里
|
|
char buff[1024];
|
|
HEROSKILLDATA data;
|
|
|
|
// "insert into skill(attack,defence,agility,physique,exp,hp,mp,name,quality,strong,circle,level,ids,loyalty) values";//添加角色技能(EXEC)
|
|
for(INT_PTR i=0; i< nCount; i++)
|
|
{
|
|
memset(&data,0,sizeof(data));
|
|
inPacket >> data; //每次读一个的数据
|
|
|
|
strcat(m_pHugeSQLBuffer," (");
|
|
|
|
int nValue =MAKELONG(data.bIsClose,data.nSlotId);
|
|
|
|
sprintf(buff,"%lld,%d,%d,%d,%d,%d",nActorId,data.nHeroID,data.nSkillID,data.nLevel,nValue,data.nExp); //actotID,guid
|
|
strcat(m_pHugeSQLBuffer,buff);
|
|
|
|
strcat(m_pHugeSQLBuffer," )");
|
|
if(i < nCount -1)
|
|
{
|
|
strcat(m_pHugeSQLBuffer,",");
|
|
}
|
|
|
|
}
|
|
nErrorCode= m_pSQLConnection->Exec(m_pHugeSQLBuffer);
|
|
if(!nErrorCode) m_pSQLConnection->ResetQuery();
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
OutputMsg(rmWaning,_T("clean pet error,actorID=%u"),nActorId);
|
|
}
|
|
}
|
|
|
|
if (bResp)
|
|
{
|
|
CDataPacket& retPack = allocProtoPacket(dcSaveHeroSkillData);
|
|
retPack << nRawServerId << nLoginServerId;
|
|
retPack << nActorId << char(nErrorCode);
|
|
flushProtoPacket(retPack);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
//读取玩家的英雄的数据
|
|
void CLogicDBReqestHandler::QueryLootPetData(unsigned int nActorID, unsigned int nRawServerId, unsigned int nLoginServerId)
|
|
{
|
|
DECLARE_FUN_TIME_PROF()
|
|
|
|
INT_PTR nErroID = reSucc;
|
|
//数据库连接是否就绪
|
|
if ( !m_pSQLConnection->Connected() )
|
|
{
|
|
nErroID= reDbErr;
|
|
}
|
|
else
|
|
{
|
|
nErroID = m_pSQLConnection->Query(szSQLSP_LoadLootPetData, nActorID);
|
|
if ( !nErroID )
|
|
{
|
|
CDataPacket& retPack = allocProtoPacket(dcLoadLootPetData);
|
|
retPack << nRawServerId << nLoginServerId;
|
|
retPack << nActorID << (BYTE) nErroID;
|
|
MYSQL_ROW pRow = m_pSQLConnection->CurrentRow();
|
|
int nCount = m_pSQLConnection->GetRowCount();
|
|
retPack << (int)nCount;
|
|
WORD wValue =0;
|
|
int nValue = 0;
|
|
while ( pRow)
|
|
{
|
|
sscanf(pRow[0], "%d", &wValue);
|
|
retPack << wValue;
|
|
|
|
sscanf(pRow[1], "%d", &wValue);
|
|
retPack << wValue;
|
|
sscanf(pRow[2], "%d", &nValue);
|
|
retPack << nValue;
|
|
pRow = m_pSQLConnection->NextRow();
|
|
}
|
|
flushProtoPacket(retPack);
|
|
m_pSQLConnection->ResetQuery(); //函数调用里没有重置数据的
|
|
return;
|
|
}
|
|
|
|
}
|
|
if( nErroID != reSucc)
|
|
{
|
|
OutputMsg(rmError,_T("%s装载玩家的宠物数据失败%u"),__FUNCTION__,nActorID);
|
|
CDataPacket& retPack = allocProtoPacket(dcLoadLootPetData);
|
|
retPack << nRawServerId << nLoginServerId << nActorID << (BYTE) nErroID;
|
|
flushProtoPacket(retPack);
|
|
}
|
|
}
|
|
|
|
void CLogicDBReqestHandler::SaveLootPetToDB(CDataPacketReader &inPacket, bool bResp)
|
|
{
|
|
DECLARE_FUN_TIME_PROF()
|
|
int nRawServerId, nLoginServerId;
|
|
unsigned int nActorId = 0;
|
|
int nPetCount =0;
|
|
inPacket >> nRawServerId >> nLoginServerId >> nActorId >> nPetCount;
|
|
|
|
int nErrorCode =0;
|
|
if ( !m_pSQLConnection->Connected() ) {
|
|
nErrorCode= reDbErr;
|
|
}
|
|
else {
|
|
if (nActorId == 0 )
|
|
{
|
|
nErrorCode = reNoActor;
|
|
}
|
|
else
|
|
{
|
|
int nErrorCode = m_pSQLConnection->Exec(szSQLSP_DelLootPetData, nActorId);
|
|
if(! nErrorCode)
|
|
{
|
|
m_pSQLConnection->ResetQuery();
|
|
}
|
|
else
|
|
{
|
|
OutputMsg(rmWaning,_T("clean pet error,actorID=%u"),nActorId);
|
|
}
|
|
|
|
if( nErrorCode == reSucc)
|
|
{
|
|
strcpy(m_pHugeSQLBuffer,szSQLSP_InsertLootPetData); //表头放这里
|
|
char buff[2048];
|
|
if(nPetCount >0)
|
|
{
|
|
for(INT_PTR i=0; i< nPetCount; i++)
|
|
{
|
|
WORD wType = 0;
|
|
WORD wId = 0;
|
|
int nTime = 0;
|
|
inPacket >> wId >> wType >> nTime; //每次读一个的数据
|
|
|
|
strcat(m_pHugeSQLBuffer," (");
|
|
sprintf(buff,"%d, %d,%d,%d",nActorId,wType,wId,nTime);
|
|
strcat(m_pHugeSQLBuffer,buff);
|
|
|
|
strcat(m_pHugeSQLBuffer," )");
|
|
if(i < nPetCount -1)
|
|
{
|
|
strcat(m_pHugeSQLBuffer,",");
|
|
}
|
|
|
|
}
|
|
nErrorCode= m_pSQLConnection->Exec(m_pHugeSQLBuffer);
|
|
if(!nErrorCode)
|
|
{
|
|
m_pSQLConnection->ResetQuery();
|
|
}
|
|
else
|
|
{
|
|
OutputMsg(rmError,"save pet data error,actorid=%u",nActorId);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (bResp)
|
|
{
|
|
CDataPacket& retPack = allocProtoPacket(dcSaveLootPetData);
|
|
retPack << nRawServerId << nLoginServerId;
|
|
retPack << nActorId << char(nErrorCode);
|
|
flushProtoPacket(retPack);
|
|
}
|
|
} |