#include "StdAfx.h"
#include "defineObj.h"
#include "dbmanager.h"
#include "dploginsrvr.h"
#include "dpcoresrvr.h"
#include "dptrans.h"
#include "..\_Network\Objects\Obj.h"
#include "misc.h"
#include "mytrace.h"
#include <sstream>
#include "party.h"
#include "guild.h"
extern CGuildMng g_GuildMng;
#include "guildwar.h"
extern CGuildWarMng g_GuildWarMng;
extern const int MAX_TASKBAR;
extern const int MAX_APPLETTASKBAR;
extern const int MAX_ITEMTASKBAR;
extern const char NullStr[2];
#if __VER >= 13 // __HONORABLE_TITLE // ´ÞÀÎ
#include "honor.h"
#endif // __HONORABLE_TITLE // ´ÞÀÎ
#include "eveschool.h"
#if defined( __VERIFY_PLAYER ) || defined( __PROVIDE ) || defined( __S0707_ITEM_CONV ) || defined(__RECOVER0816)
#define MAX_QUERY_SIZE 1024 * 64
#include "resource.h"
BOOL CALLBACK VerifyPlayerDlgProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
#endif // __VERIFY_PLAYER OR __PROVIDE
extern CDPCoreSrvr g_dpCoreSrvr;
extern CDPLoginSrvr g_dpLoginSrvr;
extern CProject prj;
extern APP_INFO g_appInfo;
extern CMyTrace g_MyTrace;
#define VERIFYSTRING( lpString, lpszPlayer ) \
if( FALSE == VerifyString( lpString, __FILE__, __LINE__, lpszPlayer, lpDbOverlappedPlus ) ) return;
#define VERIFY_GUILD_STRING( lpString, lpszGuild ) \
if( FALSE == VerifyString( lpString, __FILE__, __LINE__, lpszGuild ) ) return;
void CDbManager::SavePlayer(CQuery* qry, CQuery* pQueryLog, CMover* pMover, char* szQuery)
{
szQuery[0] = '\0';
///////// actMover
char cActMover[50] = { 0, };
sprintf(cActMover, "%d,%d", pMover->m_pActMover->m_dwState, pMover->m_pActMover->m_dwStateFlag);
///////// Skill
char JobSkill[1024] = { 0, };
char LicenseSkill[1024] = { 0, };
///////// JobLv
char JobLv[500] = { 0, };
SaveJobLv(pMover, JobLv);
///////// Quest
char QuestCnt[3072] = { 0, };
char m_aCompleteQuest[1024] = { 0, };
#if __VER >= 15 // __IMPROVE_QUEST_INTERFACE
char CheckedQuest[100] = { 0, };
SaveQuest(pMover, QuestCnt, m_aCompleteQuest, CheckedQuest);
#else // __IMPROVE_QUEST_INTERFACE
SaveQuest(pMover, QuestCnt, m_aCompleteQuest);
#endif // __IMPROVE_QUEST_INTERFACE
///////// Inventory
ItemContainerStruct icsInventory, icsBank[3];
SaveInventory(pMover, &icsInventory);
for (int k = 0; k < 3; ++k)
SaveBank(pMover, &pMover->m_Bank[k], &icsBank[k]);
///////// Equipment
char Equipment[500] = { 0, };
SaveEquipment(pMover, Equipment);
///////// CardCube
char Card[2] = "$";
char sCardIndex[2] = "$";
char sCardObjIndex[2] = "$";
char Cube[2] = "$";
char sCubeIndex[2] = "$";
char sCubeObjIndex[2] = "$";
///////// TaskBar
char AppletTaskBar[MAX_APPLETTASKBAR] = { 0, };
char ItemTaskBar[MAX_ITEMTASKBAR] = { 0, };
char SkillTaskBar[1024] = { 0, };
SaveTaskBar(pMover, AppletTaskBar, ItemTaskBar, SkillTaskBar);
///////// SM »ó¿ëÈ ¾ÆÀÌÅÛ
char szSMTime[3072] = { 0, };
SaveSMCode(pMover, szSMTime);
char szSkillInfluence[7500] = { 0, };
SaveSkillInfluence(pMover, szSkillInfluence);
PutExpLog(pQueryLog, pMover, (pMover->m_dwPeriodicTick == 0 ? 'O' : 'P'));
// mulcom 100218 À¯·´ Æä³Ä °ü·Ã CHARACTER_STR U1 º¯°æ ( U1 -> C1 )
sprintf(szQuery, "{call CHARACTER_STR('U1','%07d','%02d','',"
"?,?,?,?,?,?,?,?,?,?,?," // 1
"?,?,?,?,?,?,?,?,?,?,?," // 2
"?,?,?,?,?,?,?,?,?,?,?," // 3
"?,?,?,?,?,?,?,?,?,?,?," // 4
"?,?,?,?,?,?,?,?,?,?,?," // 5
"?,?,?,?,?,?,?,?,?,?,?," // 6
"?,?,?,?,?,?,?,?,?,?,?," // 7
// "?,?,?,?,?,?,?,?,?,?,?," // 8
"?,?,?,?,?,?,?,?,?,%7.0f,%7.0f," // 8
#ifdef __EVENT_1101
// "?,?,?,?,?,?"
"%7.0f,?,?,?,?,?"
#else // __EVENT_1101
"?,?,?"
#endif // __EVENT_1101
#if __VER >= 8 // __S8_PK
",?"
#endif // __VER >= 8 // __S8_PK
#if __VER >= 8 // __CSC_VER8_5
",?,?"
#endif // __CSC_VER8_5
",?,?,?"
#ifdef __EXP_ANGELEXP_LOG
",?,?"
#endif // __EXP_ANGELEXP_LOG
#ifdef __EVENTLUA_COUPON
",?"
#endif // __EVENTLUA_COUPON
#if __VER >= 13 // __HONORABLE_TITLE // ´ÞÀÎ
",?"
#endif // __HONORABLE_TITLE // ´ÞÀÎ
#ifdef __LAYER_1015
",?"
#endif // __LAYER_1015
#if __VER >= 15 // __IMPROVE_QUEST_INTERFACE
",?"
#endif // __IMPROVE_QUEST_INTERFACE
#if __VER >= 15 // __CAMPUS
",?,?"
#endif // __CAMPUS
// ")}", pMover->m_idPlayer, g_appInfo.dwSys ); // +3
")}", pMover->m_idPlayer, g_appInfo.dwSys, pMover->m_vReturnPos.x, pMover->m_vReturnPos.y, pMover->m_vReturnPos.z); // +3
char szAuthority[2] = "F";
int nSlot = 0;
int nSex = pMover->GetSex();
int nExpertLv = 0;
int nRemainLP = 0;
int nTotalPlayTime = 0;
DWORD dwGold = pMover->GetGold();
int i = 0;
int j = -1;
__int64 nExp2 = 0;
__int64 nSkillExp = 0;
DWORD dwSkillPoint = 0;
//////////////////////////////////////////////////////////////////////////////////////
int MAX_SAVEPARAM = 88;
MAX_SAVEPARAM += 3;
#ifdef __EVENT_1101
MAX_SAVEPARAM += 3;
#endif // __EVENT_1101
#if __VER >= 8 // __S8_PK
MAX_SAVEPARAM += 1;
#endif // __VER >= 8 // __S8_PK
#if __VER >= 8 // __CSC_VER8_5
MAX_SAVEPARAM += 2;
#endif // __CSC_VER8_5
MAX_SAVEPARAM += 3;
#ifdef __EXP_ANGELEXP_LOG
MAX_SAVEPARAM += 2;
#endif // __EXP_ANGELEXP_LOG
#ifdef __EVENTLUA_COUPON
MAX_SAVEPARAM += 1;
#endif // __EVENTLUA_COUPON
#if __VER >= 13 // __HONORABLE_TITLE // ´ÞÀÎ
MAX_SAVEPARAM += 1;
#endif // __HONORABLE_TITLE // ´ÞÀÎ
#ifdef __LAYER_1015
MAX_SAVEPARAM += 1; // m_nLayer
#endif // __LAYER_1015
#if __VER >= 15 // __IMPROVE_QUEST_INTERFACE
MAX_SAVEPARAM += 1; // m_aCheckedQuest
#endif // __IMPROVE_QUEST_INTERFACE
#if __VER >= 15 // __CAMPUS
MAX_SAVEPARAM += 2; // m_nCampusPoint, m_idCampus
#endif // __CAMPUS
//////////////////////////////////////////////////////////////////////////////////////
#if __VER >= 8 // __S8_PK
int nNumSkill = 0;
int nSlaughter = 0;
#endif // __VER >= 8 // __S8_PK
SQLINTEGER cbLen = SQL_NTS;
BOOL* bOK = new BOOL[MAX_SAVEPARAM];
// BOOL bOK[MAX_SAVEPARAM];
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 32, 0, pMover->m_szName, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nSlot, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwWorldID, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwIndex, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 0, 0, &pMover->m_vPos.x, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 0, 0, &pMover->m_vPos.y, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 0, 0, &pMover->m_vPos.z, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 32, 0, pMover->m_szCharacterKey, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwSkinSet, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwHairMesh, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwHairColor, 0, 0);
// 1
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwHeadMesh, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nSex, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 0, 0, &pMover->m_vScale.x, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwMotion, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 0, 0, &pMover->m_fAngle, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nHitPoint, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nManaPoint, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nFatiguePoint, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwRideItemIdx, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &dwGold, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nJob, 0, 0);
// 2
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0, cActMover, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nStr, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nSta, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nDex, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nInt, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nLevel, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_SBIGINT, SQL_BIGINT, 0, 0, &pMover->m_nExp1, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_SBIGINT, SQL_BIGINT, 0, 0, &nExp2, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 500, 0, JobSkill, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 500, 0, LicenseSkill, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 500, 0, JobLv, 0, &cbLen);
// 3
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nExpertLv, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_idMarkingWorld, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 0, 0, &pMover->m_vMarkingPos.x, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 0, 0, &pMover->m_vMarkingPos.y, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 0, 0, &pMover->m_vMarkingPos.z, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nRemainGP, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nRemainLP, 0, 0);
#if __VER >= 12 // __MOD_TUTORIAL
int nTutorialState = pMover->GetTutorialState();
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nTutorialState, 0, 0);
#else // __MOD_TUTORIAL
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nFlightLv, 0, 0);
#endif // __MOD_TUTORIAL
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nFxp, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nFxp, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 3072, 0, QuestCnt, 0, &cbLen);
// 4
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 1, 0, szAuthority, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwMode, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_idparty, 0, 0);
#if __VER < 8 // __S8_PK
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nNumKill, 0, 0);
#endif // __VER < 8 // __S8_PK
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_idMurderer, 0, 0);
#if __VER < 8 // __S8_PK
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nSlaughter, 0, 0);
#endif // __VER < 8 // __S8_PK
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nFame, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_SBIGINT, SQL_BIGINT, 0, 0, &pMover->m_nDeathExp, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nDeathLevel, 0, 0);
#ifdef __JEFF_9_20
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwMute, 0, 0);
#else // __JEFF_9_20
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwFlyTime, 0, 0);
#endif // __JEFF_9_20
#ifdef __RT_1025
DWORD dwState = pMover->m_RTMessenger.GetState();
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &dwState, 0, 0);
#else // __RT_1025
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_Messenger.m_dwMyState, 0, 0);
#endif // __RT_1025
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nTotalPlayTime, 0, 0);
#if __VER >= 8 // __S8_PK
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nPKValue, 0, 0);
// 5
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwPKPropensity, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwPKExp, 0, 0);
#endif // __VER >= 8 // __S8_PK
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 1980, 0, Card, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 215, 0, sCardIndex, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 215, 0, sCardObjIndex, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 1980, 0, Cube, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 215, 0, sCubeIndex, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 215, 0, sCubeObjIndex, 0, &cbLen);
#ifdef __INVENTORY_168
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, icsInventory.szItem, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 1000, 0, icsInventory.szIndex, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 135, 0, Equipment, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 1000, 0, icsInventory.szObjIndex, 0, &cbLen);
#else
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 6940, 0, icsInventory.szItem, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 345, 0, icsInventory.szIndex, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 135, 0, Equipment, 0, &cbLen);
// 6
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 345, 0, icsInventory.szObjIndex, 0, &cbLen);
#endif
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 3100, 0, AppletTaskBar, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 6885, 0, ItemTaskBar, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 225, 0, SkillTaskBar, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_SHORT, SQL_SMALLINT, 0, 0, &pMover->m_UserTaskBar.m_nActionPoint, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 4290, 0, icsBank[pMover->m_nSlot].szItem, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 215, 0, icsBank[pMover->m_nSlot].szIndex, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 215, 0, icsBank[pMover->m_nSlot].szObjIndex, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwGoldBank[pMover->m_nSlot], 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nFuel, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_tmAccFuel, 0, 0);
// 7
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2560, 0, szSMTime, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 7500, 0, szSkillInfluence, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &dwSkillPoint, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 1024, 0, m_aCompleteQuest, 0, &cbLen);
#ifdef __INVENTORY_168
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, icsInventory.szExt, 0, &cbLen);
#else
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2000, 0, icsInventory.szExt, 0, &cbLen);
#endif
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2000, 0, icsBank[pMover->m_nSlot].szExt, 0, &cbLen);
#if __VER >= 15 // __PETVIS
#ifdef __INVENTORY_168
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, icsInventory.szPiercing, 0, &cbLen);
#else
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 7800, 0, icsInventory.szPiercing, 0, &cbLen);
#endif
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 7800, 0, icsBank[pMover->m_nSlot].szPiercing, 0, &cbLen);
#else // __PETVIS
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2000, 0, icsInventory.szPiercing, 0, &cbLen);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2000, 0, icsBank[pMover->m_nSlot].szPiercing, 0, &cbLen);
#endif // __PETVIS
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwReturnWorldID, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nSkillPoint, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nSkillLevel, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_SBIGINT, SQL_BIGINT, 0, 0, &nSkillExp, 0, 0);
#ifdef __EVENT_1101
#ifdef __EVENT_1101_2
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_SBIGINT, SQL_BIGINT, 0, 0, &pMover->m_nEventFlag, 0, 0);
#else // __EVENT_1101_2
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwEventFlag, 0, 0);
#endif // __EVENT_1101_2
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwEventTime, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_dwEventElapsed, 0, 0);
#endif // __EVENT_1101
#if __VER >= 8 // __CSC_VER8_5
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_SBIGINT, SQL_BIGINT, 0, 0, &pMover->m_nAngelExp, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nAngelLevel, 0, 0);
#endif // __CSC_VER8_5
#ifdef __INVENTORY_168
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, icsInventory.szPet, 0, &cbLen);
#else
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2000, 0, icsInventory.szPet, 0, &cbLen);
#endif
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2000, 0, icsBank[pMover->m_nSlot].szPet, 0, &cbLen);
DWORD dwPetId = pMover->GetPetId();
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &dwPetId, 0, 0);
#ifdef __EXP_ANGELEXP_LOG
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nExpLog, 0, 0);
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nAngelExpLog, 0, 0);
#endif // __EXP_ANGELEXP_LOG
#ifdef __EVENTLUA_COUPON
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nCoupon, 0, 0);
#endif // __EVENTLUA_COUPON
#if __VER >= 13 // __HONORABLE_TITLE // ´ÞÀÎ
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nHonor, 0, 0);
#endif // __HONORABLE_TITLE // ´ÞÀÎ
#ifdef __LAYER_1015
int nLayer = pMover->GetLayer();
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nLayer, 0, 0);
#endif // __LAYER_1015
#if __VER >= 15 // __IMPROVE_QUEST_INTERFACE
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 100, 0, CheckedQuest, 0, &cbLen);
#endif // __IMPROVE_QUEST_INTERFACE
#if __VER >= 15 // __CAMPUS
int nCampusPoint = pMover->GetCampusPoint();
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nCampusPoint, 0, 0);
u_long idCampus = pMover->GetCampusId();
bOK[++j] = qry->BindParameter(++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &idCampus, 0, 0);
#endif // __CAMPUS
for (i = 0; i < j; ++i)
{
if (bOK[i] == FALSE)
{
char szBuffer[128];
sprintf(szBuffer, "SavePlayer(%s) - %dth bindparam error - %d", pMover->m_szName, i + 1, ::GetCurrentThreadId());
#ifdef _DEBUG
AfxMessageBox(szBuffer);
#endif
WriteLog(szBuffer);
// chipi_¹ÙÀεù ½ÇÆнà DB Reconnect
WriteLog("try DB Reconnect... - ThreadId : %d", ::GetCurrentThreadId());
qry->DisConnect();
if (qry->Connect(3, qry->DBName, qry->DBId, qry->DBPass))
WriteLog("DB Reconnect Success! - ThreadId : %d", ::GetCurrentThreadId());
else
WriteLog("DB Reconnect Failed! - ThreadId : %d", ::GetCurrentThreadId());
qry->Clear();
// chipi_¹ÙÀεù ½ÇÆнà DB Reconnect
SAFE_DELETE_ARRAY(bOK);
return;
}
}
if (qry->Exec(szQuery) == FALSE)
{
WriteLog("SavePlayer(%s) - Exec RETURN FALSE, ThreadID : %d", pMover->m_szName, ::GetCurrentThreadId());
SAFE_DELETE_ARRAY(bOK);
return;
}
if (qry->Fetch())
{
int nError = qry->GetInt("fError");
if (nError != 1)
{
WriteLog("SavePlayer(%s) - fError:%d", pMover->m_szName, nError);
SAFE_DELETE_ARRAY(bOK);
return;
}
}
#ifndef __RT_1025
SaveMessengerFriend(qry, pMover, szQuery);
#endif // __RT_1025
#if __VER >= 13 // __HONORABLE_TITLE // ´ÞÀÎ
SaveHonor(qry, pMover->m_idPlayer, pMover->m_aHonorTitle, szQuery);
#endif // __HONORABLE_TITLE // ´ÞÀÎ
#ifndef __S_NEW_SKILL_2
#ifdef __SKILL_0205
SaveSkill(qry, pMover->m_idPlayer, pMover->m_aJobSkill, pMover->m_abUpdateSkill, szQuery);
#else // __SKILL_0205
SaveSkill(qry, pMover->m_idPlayer, pMover->m_aJobSkill, szQuery);
#endif // __SKILL_0205
#endif // __S_NEW_SKILL_2
// ´Ù¸¥ ij¸¯ÅÍÀÇ bank ÀúÀå
for (i = 0; i < 3; ++i)
{
if (pMover->m_idPlayerBank[i] != 0 && i != pMover->m_nSlot)
{
ADDBANK_QUERYINFO info("U1");
info.idPlayer = pMover->m_idPlayerBank[i];
info.dwGoldBank = pMover->m_dwGoldBank[i];
info.pszBank = icsBank[i].szItem;
info.pszBankIndex = icsBank[i].szIndex;
info.pszObjIndexBank = icsBank[i].szObjIndex;
info.pszExtBank = icsBank[i].szExt;
info.pszPirecingBank = icsBank[i].szPiercing;
info.pszBankPet = icsBank[i].szPet;
DBQryAddBankSave(szQuery, info);
{
SQLINTEGER cbLen = SQL_NTS;
BOOL bOK[7];
bOK[0] = qry->BindParameter(1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 4290, 0, (char*)info.pszBank, 0, &cbLen);
bOK[1] = qry->BindParameter(2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 215, 0, (char*)info.pszBankIndex, 0, &cbLen);
bOK[2] = qry->BindParameter(3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 215, 0, (char*)info.pszObjIndexBank, 0, &cbLen);
bOK[3] = qry->BindParameter(4, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &info.dwGoldBank, 0, 0);
bOK[4] = qry->BindParameter(5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2000, 0, (char*)info.pszExtBank, 0, &cbLen);
#if __VER >= 15 // __PETVIS
bOK[5] = qry->BindParameter(6, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 7800, 0, (char*)info.pszPirecingBank, 0, &cbLen);
#else // __PETVIS
bOK[5] = qry->BindParameter(6, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2000, 0, (char*)info.pszPirecingBank, 0, &cbLen);
#endif // __PETVIS
bOK[6] = qry->BindParameter(7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2689, 0, (char*)info.pszBankPet, 0, &cbLen);
}
if (FALSE == qry->Exec(szQuery))
{
SAFE_DELETE_ARRAY(bOK);
return;
}
}
}
#if __VER >= 11 // __SYS_POCKET
PocketStruct aPocket[3];
SavePocket(pMover, aPocket);
for (i = 0; i < MAX_POCKET; i++)
{
PocketParam p;
p.idPlayer = pMover->m_idPlayer;
p.pszItem = aPocket[i].szItem;
p.pszIndex = aPocket[i].szIndex;
p.pszObjIndex = aPocket[i].szObjIndex;
p.pszExt = aPocket[i].szExt;
p.pszPiercing = aPocket[i].szPiercing;
p.pszPet = aPocket[i].szPet;
p.bExpired = aPocket[i].bExpired;
p.tExpirationDate = aPocket[i].tExpirationDate;
MakeQueryPocket(szQuery, p);
SQLINTEGER cbLen = SQL_NTS;
BOOL bOk[9];
bOk[0] = qry->BindParameter(1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &i, 0, &cbLen);
bOk[1] = qry->BindParameter(2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 4290, 0, (char*)p.pszItem, 0, &cbLen);
bOk[2] = qry->BindParameter(3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 215, 0, (char*)p.pszIndex, 0, &cbLen);
bOk[3] = qry->BindParameter(4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 215, 0, (char*)p.pszObjIndex, 0, &cbLen);
bOk[4] = qry->BindParameter(5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2000, 0, (char*)p.pszExt, 0, &cbLen);
#if __VER >= 15 // __PETVIS
bOk[5] = qry->BindParameter(6, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 7800, 0, (char*)p.pszPiercing, 0, &cbLen);
#else // __PETVIS
bOk[5] = qry->BindParameter(6, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2000, 0, (char*)p.pszPiercing, 0, &cbLen);
#endif // __PETVIS
bOk[6] = qry->BindParameter(7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2689, 0, (char*)p.pszPet, 0, &cbLen);
bOk[7] = qry->BindParameter(8, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &p.bExpired, 0, &cbLen);
bOk[8] = qry->BindParameter(9, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &p.tExpirationDate, 0, &cbLen);
if (!qry->Exec(szQuery))
{
SAFE_DELETE_ARRAY(bOK);
return;
}
}
#endif // __SYS_POCKET
SAFE_DELETE_ARRAY(bOK);
}
#ifdef __S_NEW_SKILL_2
void CDbManager::AllSaveSkill(CQuery* pQuery, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus)
{
CAr arRead(lpDbOverlappedPlus->lpBuf, lpDbOverlappedPlus->uBufSize);
u_long uidPlayer;
EXPINTEGER nSkillExp = 0; // ½ºÅ³°æÇèÄ¡
int nSkillPoint; // SP
int nSkillLevel = 0; // Áö±Ý±îÁö ¿Ã¸° ½ºÅ³·¹º§
SKILL aJobSkill[MAX_SKILL_JOB];
BYTE abUpdateSkill[MAX_SKILL_JOB];
BOOL bSaveSkillState = FALSE;
arRead >> uidPlayer;
arRead >> nSkillLevel;
arRead >> nSkillPoint;
arRead.Read((void*)aJobSkill, sizeof(SKILL) * (MAX_SKILL_JOB));
ACCOUNT_CACHE* pAccount = NULL;
g_DbManager.m_AddRemoveLock.Enter();
pAccount = m_AccountCacheMgr.Find(lpDbOverlappedPlus->AccountInfo.szAccount);
int nRefreshSlot = 100;
if (pAccount)
{
for (int i = 0; i < 3; i++)
{
if (pAccount->pMover[i] && pAccount->pMover[i]->m_idPlayer == uidPlayer)
{
nRefreshSlot = i;
break;
}
}
}
if (nRefreshSlot != 100)
{
if (pAccount->pMover[nRefreshSlot]->m_nSkillLevel != nSkillLevel ||
pAccount->pMover[nRefreshSlot]->m_nSkillPoint != nSkillPoint)
{
bSaveSkillState = TRUE;
pAccount->pMover[nRefreshSlot]->m_nSkillLevel = nSkillLevel;
pAccount->pMover[nRefreshSlot]->m_nSkillPoint = nSkillPoint;
}
#ifdef __SKILL_0205
for (int k = 0; k < MAX_SKILL_JOB; k++)
abUpdateSkill[k] = (BOOL)(memcmp(&pAccount->pMover[nRefreshSlot]->m_aJobSkill[k], &aJobSkill[k], sizeof(SKILL)) != 0);
#endif // __SKILL_0205
memcpy(pAccount->pMover[nRefreshSlot]->m_aJobSkill, &aJobSkill, sizeof(aJobSkill));
}
g_DbManager.m_AddRemoveLock.Leave();
char szQuery[QUERY_SIZE] = { 0, };
if (nRefreshSlot != 100)
{
if (bSaveSkillState)
{
sprintf(szQuery,
"uspLearnSkillCharacter [USER=502185]serveri[/USER]ndex='%02d',@pPlayerID='%07d',@im_SkillExp=%I64d,@im_SkillPoint=%d,@im_SkillLv=%d",
g_appInfo.dwSys, uidPlayer, nSkillExp, nSkillPoint, nSkillLevel);
if (FALSE == pQuery->Exec(szQuery))
{
WriteLog("%s, %d\t%s", __FILE__, __LINE__, szQuery);
FreeRequest(lpDbOverlappedPlus);
return;
}
}
#ifdef __SKILL_0205
SaveSkill(pQuery, uidPlayer, aJobSkill, abUpdateSkill, szQuery);
#else // __SKILL_0205
SaveSkill(pQuery, uidPlayer, aJobSkill, szQuery);
#endif // __SKILL_0205
}
FreeRequest(lpDbOverlappedPlus);
}
#endif // __S_NEW_SKIL_2
#if __VER >= 13 // __HONORABLE_TITLE // ´ÞÀÎ
void CDbManager::SaveHonor(CQuery* qry, u_long uidPlayer, int* aHonor, char* szQuery)
{
int aHonorEtc[50] = { 0, };
int aHonorItem[50] = { 0, };
int aHonorMonster[50] = { 0, };
int nEtc = 0, nItem = 0, nMonster = 0;
int nType = 0;
int nCurrentTitleCount = CTitleManager::Instance()->m_nCurrentTitleCount;
for (int i = 0; i < nCurrentTitleCount; i++)
{
nType = CTitleManager::Instance()->GetIdxType(i);
if (nType == HI_HUNT_MONSTER)
{
aHonorMonster[nMonster] = aHonor[i];
nMonster++;
}
else if (nType == HI_USE_ITEM)
{
aHonorItem[nItem] = aHonor[i];
nItem++;
}
else
{
aHonorEtc[nEtc] = aHonor[i];
nEtc++;
}
}
sprintf(szQuery,
"usp_Master_Update [USER=502185]serveri[/USER]ndex='%02d',@m_idPlayer='%07d',@sec=%d,@c01=%d,@c02=%d,@c03=%d,@c04=%d,@c05=%d,@c06=%d,@c07=%d,@c08=%d,@c09=%d,@c10=%d,@c11=%d,@c12=%d,@c13=%d,@c14=%d,@c15=%d,@c16=%d,@c17=%d,@c18=%d,@c19=%d,@c20=%d,@c21=%d,@c22=%d [USER=2000214816]c23[/USER]=%d,@c24=%d,@c25=%d,@c26=%d,@c27=%d,@c28=%d,@c29=%d,@c30=%d,@c31=%d,@c32=%d,@c33=%d,@c34=%d,@c35=%d,@c36=%d,@c37=%d,@c38=%d,@c39=%d,@c40=%d,@c41=%d [USER=2000177128]c42[/USER]=%d,@c43=%d,@c44=%d,@c45=%d,@c46=%d,@c47=%d,@c48=%d,@c49=%d,@c50=%d",
g_appInfo.dwSys, uidPlayer, 1,
aHonorEtc[0], aHonorEtc[1], aHonorEtc[2], aHonorEtc[3], aHonorEtc[4], aHonorEtc[5], aHonorEtc[6], aHonorEtc[7], aHonorEtc[8], aHonorEtc[9],
aHonorEtc[10], aHonorEtc[11], aHonorEtc[12], aHonorEtc[13], aHonorEtc[14], aHonorEtc[15], aHonorEtc[16], aHonorEtc[17], aHonorEtc[18], aHonorEtc[19],
aHonorEtc[20], aHonorEtc[21], aHonorEtc[22], aHonorEtc[23], aHonorEtc[24], aHonorEtc[25], aHonorEtc[26], aHonorEtc[27], aHonorEtc[28], aHonorEtc[29],
aHonorEtc[30], aHonorEtc[31], aHonorEtc[32], aHonorEtc[33], aHonorEtc[34], aHonorEtc[35], aHonorEtc[36], aHonorEtc[37], aHonorEtc[38], aHonorEtc[39],
aHonorEtc[40], aHonorEtc[41], aHonorEtc[42], aHonorEtc[43], aHonorEtc[44], aHonorEtc[45], aHonorEtc[46], aHonorEtc[47], aHonorEtc[48], aHonorEtc[49]);
if (FALSE == qry->Exec(szQuery))
{
WriteLog("%s, %d\t%s", __FILE__, __LINE__, szQuery);
return;
}
sprintf(szQuery,
"usp_Master_Update [USER=502185]serveri[/USER]ndex='%02d',@m_idPlayer='%07d',@sec=%d,@c01=%d,@c02=%d,@c03=%d,@c04=%d,@c05=%d,@c06=%d,@c07=%d,@c08=%d,@c09=%d,@c10=%d,@c11=%d,@c12=%d,@c13=%d,@c14=%d,@c15=%d,@c16=%d,@c17=%d,@c18=%d,@c19=%d,@c20=%d,@c21=%d,@c22=%d [USER=2000214816]c23[/USER]=%d,@c24=%d,@c25=%d,@c26=%d,@c27=%d,@c28=%d,@c29=%d,@c30=%d,@c31=%d,@c32=%d,@c33=%d,@c34=%d,@c35=%d,@c36=%d,@c37=%d,@c38=%d,@c39=%d,@c40=%d,@c41=%d [USER=2000177128]c42[/USER]=%d,@c43=%d,@c44=%d,@c45=%d,@c46=%d,@c47=%d,@c48=%d,@c49=%d,@c50=%d",
g_appInfo.dwSys, uidPlayer, 2,
aHonorItem[0], aHonorItem[1], aHonorItem[2], aHonorItem[3], aHonorItem[4], aHonorItem[5], aHonorItem[6], aHonorItem[7], aHonorItem[8], aHonorItem[9],
aHonorItem[10], aHonorItem[11], aHonorItem[12], aHonorItem[13], aHonorItem[14], aHonorItem[15], aHonorItem[16], aHonorItem[17], aHonorItem[18], aHonorItem[19],
aHonorItem[20], aHonorItem[21], aHonorItem[22], aHonorItem[23], aHonorItem[24], aHonorItem[25], aHonorItem[26], aHonorItem[27], aHonorItem[28], aHonorItem[29],
aHonorItem[30], aHonorItem[31], aHonorItem[32], aHonorItem[33], aHonorItem[34], aHonorItem[35], aHonorItem[36], aHonorItem[37], aHonorItem[38], aHonorItem[39],
aHonorItem[40], aHonorItem[41], aHonorItem[42], aHonorItem[43], aHonorItem[44], aHonorItem[45], aHonorItem[46], aHonorItem[47], aHonorItem[48], aHonorItem[49]);
if (FALSE == qry->Exec(szQuery))
{
WriteLog("%s, %d\t%s", __FILE__, __LINE__, szQuery);
return;
}
sprintf(szQuery,
"usp_Master_Update [USER=502185]serveri[/USER]ndex='%02d',@m_idPlayer='%07d',@sec=%d,@c01=%d,@c02=%d,@c03=%d,@c04=%d,@c05=%d,@c06=%d,@c07=%d,@c08=%d,@c09=%d,@c10=%d,@c11=%d,@c12=%d,@c13=%d,@c14=%d,@c15=%d,@c16=%d,@c17=%d,@c18=%d,@c19=%d,@c20=%d,@c21=%d,@c22=%d [USER=2000214816]c23[/USER]=%d,@c24=%d,@c25=%d,@c26=%d,@c27=%d,@c28=%d,@c29=%d,@c30=%d,@c31=%d,@c32=%d,@c33=%d,@c34=%d,@c35=%d,@c36=%d,@c37=%d,@c38=%d,@c39=%d,@c40=%d,@c41=%d [USER=2000177128]c42[/USER]=%d,@c43=%d,@c44=%d,@c45=%d,@c46=%d,@c47=%d,@c48=%d,@c49=%d,@c50=%d",
g_appInfo.dwSys, uidPlayer, 3,
aHonorMonster[0], aHonorMonster[1], aHonorMonster[2], aHonorMonster[3], aHonorMonster[4], aHonorMonster[5], aHonorMonster[6], aHonorMonster[7], aHonorMonster[8], aHonorMonster[9],
aHonorMonster[10], aHonorMonster[11], aHonorMonster[12], aHonorMonster[13], aHonorMonster[14], aHonorMonster[15], aHonorMonster[16], aHonorMonster[17], aHonorMonster[18], aHonorMonster[19],
aHonorMonster[20], aHonorMonster[21], aHonorMonster[22], aHonorMonster[23], aHonorMonster[24], aHonorMonster[25], aHonorMonster[26], aHonorMonster[27], aHonorMonster[28], aHonorMonster[29],
aHonorMonster[30], aHonorMonster[31], aHonorMonster[32], aHonorMonster[33], aHonorMonster[34], aHonorMonster[35], aHonorMonster[36], aHonorMonster[37], aHonorMonster[38], aHonorMonster[39],
aHonorMonster[40], aHonorMonster[41], aHonorMonster[42], aHonorMonster[43], aHonorMonster[44], aHonorMonster[45], aHonorMonster[46], aHonorMonster[47], aHonorMonster[48], aHonorMonster[49]);
if (FALSE == qry->Exec(szQuery))
{
WriteLog("%s, %d\t%s", __FILE__, __LINE__, szQuery);
return;
}
}
#endif // __HONORABLE_TITLE // ´ÞÀÎ
#ifdef __SKILL_0205
void CDbManager::SaveSkill(CQuery* qry, u_long uidPlayer, LPSKILL aJobSkill, LPBYTE abUpdateSkill, char* szQuery)
#else // #define __SKILL_0205
void CDbManager::SaveSkill(CQuery* qry, u_long uidPlayer, LPSKILL aJobSkill, char* szQuery)
#endif // #define __SKILL_0205
{
#ifdef __3RD_LEGEND16
for (int i = 0; i < (MAX_JOB_SKILL + MAX_EXPERT_SKILL + MAX_PRO_SKILL + MAX_MASTER_SKILL + MAX_HERO_SKILL + MAX_LEGEND_HERO_SKILL); i++)
#else // __3RD_LEGEND16
#if __VER >= 10 //__LEGEND // 10Â÷ Àü½Â½Ã½ºÅÛ Neuz, World, Trans
for (int i = 0; i < (MAX_JOB_SKILL + MAX_EXPERT_SKILL + MAX_PRO_SKILL + MAX_MASTER_SKILL + MAX_HERO_SKILL); i++)
#else //__LEGEND // 10Â÷ Àü½Â½Ã½ºÅÛ Neuz, World, Trans
for (int i = 0; i < (MAX_JOB_SKILL + MAX_EXPERT_SKILL + MAX_PRO_SKILL); i++)
#endif //__LEGEND // 10Â÷ Àü½Â½Ã½ºÅÛ Neuz, World, Trans
#endif // __3RD_LEGEND16
{
#ifdef __SKILL_0205
if (abUpdateSkill[i] == 0)
continue;
#endif // __SKILL_0205
sprintf(szQuery,
"uspLearnSkill [USER=502185]serveri[/USER]ndex='%02d',@pPlayerID='%07d' [USER=2000049360]PSK[/USER]illID=%d [USER=2000049360]PSK[/USER]illLv=%d [USER=2000049360]PSK[/USER]illPosition=%d",
g_appInfo.dwSys, uidPlayer, aJobSkill[i].dwSkill, aJobSkill[i].dwLevel, i);
if (FALSE == qry->Exec(szQuery))
{
WriteLog("%s, %d\t%s", __FILE__, __LINE__, szQuery);
return;
// continue;
}
}
}
// raiders_todo ÀÇ¹Ì ¾øÀ½
void CDbManager::SaveJobLv(CMover* pMover, char* szJobLv)
{
char OneJobLv[16] = { 0, };
for (int i = 0; i < MAX_JOB; i++)
{
sprintf(OneJobLv, "%d/", 0);
strncat(szJobLv, OneJobLv, sizeof(OneJobLv));
}
strncat(szJobLv, NullStr, sizeof(NullStr));
}
#if __VER >= 15 // __IMPROVE_QUEST_INTERFACE
void CDbManager::SaveQuest(CMover* pMover, char* szQuestCnt, char* szm_aCompleteQuest, char* szCheckedQuest)
#else // __IMPROVE_QUEST_INTERFACE
void CDbManager::SaveQuest(CMover* pMover, char* szQuestCnt, char* szm_aCompleteQuest)
#endif // __IMPROVE_QUEST_INTERFACE
{
char sPerQuest[128];
char OneCompleteQuest[20] = { 0, };
#if __VER >= 15 // __IMPROVE_QUEST_INTERFACE
char OneCheckedQuest[20] = { 0, };
#endif // __IMPROVE_QUEST_INTERFACE
for (int i = 0; i < pMover->m_nQuestSize; i++)
{
sprintf(sPerQuest, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d/",
pMover->m_aQuest[i].m_wId, pMover->m_aQuest[i].m_nState, pMover->m_aQuest[i].m_wTime,
pMover->m_aQuest[i].m_nKillNPCNum[0], pMover->m_aQuest[i].m_nKillNPCNum[1],
pMover->m_aQuest[i].m_bPatrol, pMover->m_aQuest[i].m_bReserve2, pMover->m_aQuest[i].m_bReserve3, pMover->m_aQuest[i].m_bReserve4,
pMover->m_aQuest[i].m_bReserve5, pMover->m_aQuest[i].m_bReserve6, pMover->m_aQuest[i].m_bReserve7, pMover->m_aQuest[i].m_bReserve8
);
strncat(szQuestCnt, sPerQuest, sizeof(sPerQuest));
}
for (int i = 0; i < pMover->m_nCompleteQuestSize; i++)
{
sprintf(OneCompleteQuest, "%d/", pMover->m_aCompleteQuest[i]);
strncat(szm_aCompleteQuest, OneCompleteQuest, sizeof(OneCompleteQuest));
}
strcat(szQuestCnt, NullStr);
strcat(szm_aCompleteQuest, NullStr);
#if __VER >= 15 // __IMPROVE_QUEST_INTERFACE
for (int i = 0; i < pMover->m_nCheckedQuestSize; ++i)
{
sprintf(OneCheckedQuest, "%d/", pMover->m_aCheckedQuest[i]);
strncat(szCheckedQuest, OneCheckedQuest, sizeof(OneCheckedQuest));
}
strcat(szCheckedQuest, NullStr);
#endif // __IMPROVE_QUEST_INTERFACE
}
#if __VER >= 11 // __SYS_POCKET
void CDbManager::SavePocket(CMover* pMover, PPocketStruct pPocketStruct)
{
for (int nPocket = 0; nPocket < MAX_POCKET; nPocket++)
{
ItemStruct is;
BOOL bExt = FALSE;
BOOL bPiercing = FALSE;
BOOL bPet = FALSE;
char sIndex[10] = { 0, };
char sObjIndex[16] = { 0, };
CPocket* pPocket = pMover->m_Pocket.GetPocket(nPocket);
if (pPocket)
{
for (DWORD i = 0; i < pPocket->m_dwItemMax; i++)
{
SaveOneItem(&pPocket->m_apItem[i], &is);
strncat(pPocketStruct[nPocket].szItem, is.szItem, sizeof(is.szItem));
strncat(pPocketStruct[nPocket].szExt, is.szExt, sizeof(is.szExt));
strncat(pPocketStruct[nPocket].szPiercing, is.szPiercing, sizeof(is.szPiercing));
sprintf(sIndex, "%d/", pPocket->m_apIndex[i]);
strncat(pPocketStruct[nPocket].szIndex, sIndex, sizeof(sIndex));
sprintf(sObjIndex, "%d/", pPocket->m_apItem[i].m_dwObjIndex);
strcat(pPocketStruct[nPocket].szObjIndex, sObjIndex);
strncat(pPocketStruct[nPocket].szPet, is.szPet, sizeof(is.szPet));
if (pPocket->m_apItem[i].m_bCharged || 0 < pPocket->m_apItem[i].m_dwKeepTime || 0 != pPocket->m_apItem[i].GetRandomOptItemId())
bExt = TRUE;
if (pPocket->m_apItem[i].IsPiercedItem())
bPiercing = TRUE;
if (pPocket->m_apItem[i].m_pPet)
bPet = TRUE;
}
strncat(pPocketStruct[nPocket].szItem, NullStr, sizeof(NullStr));
strncat(pPocketStruct[nPocket].szIndex, NullStr, sizeof(NullStr));
strcat(pPocketStruct[nPocket].szObjIndex, NullStr);
if (bExt == FALSE)
*pPocketStruct[nPocket].szExt = '\0';
if (bPiercing == FALSE)
*pPocketStruct[nPocket].szPiercing = '\0';
if (bPet == FALSE)
*pPocketStruct[nPocket].szPet = '\0';
strcat(pPocketStruct[nPocket].szExt, NullStr);
strcat(pPocketStruct[nPocket].szPiercing, NullStr);
strcat(pPocketStruct[nPocket].szPet, NullStr);
pPocketStruct[nPocket].bExpired = pPocket->IsExpired();
pPocketStruct[nPocket].tExpirationDate = pPocket->GetExpirationDate();
}
else
{
lstrcpy(pPocketStruct[nPocket].szItem, NullStr);
lstrcpy(pPocketStruct[nPocket].szIndex, NullStr);
lstrcpy(pPocketStruct[nPocket].szObjIndex, NullStr);
lstrcpy(pPocketStruct[nPocket].szExt, NullStr);
lstrcpy(pPocketStruct[nPocket].szPiercing, NullStr);
lstrcpy(pPocketStruct[nPocket].szPet, NullStr);
pPocketStruct[nPocket].bExpired = TRUE;
pPocketStruct[nPocket].tExpirationDate = 0;
}
}
}
#endif // __SYS_POCKET
void CDbManager::SaveInventory(CMover* pMover, PItemContainerStruct pItemContainerStruct)
{
ItemStruct is;
char Onem_apIndex[10] = { 0, };
char sPerObjIndex[16] = { 0, };
BOOL bExtInven = FALSE;
BOOL bPirecingInven = FALSE;
BOOL bPet = FALSE;
for (DWORD ch = 0; ch < pMover->m_Inventory.m_dwItemMax; ch++) // 0-504
{
SaveOneItem(&pMover->m_Inventory.m_apItem[ch], &is);
strncat(pItemContainerStruct->szItem, is.szItem, sizeof(is.szItem));
strncat(pItemContainerStruct->szExt, is.szExt, sizeof(is.szExt));
strncat(pItemContainerStruct->szPiercing, is.szPiercing, sizeof(is.szPiercing));
sprintf(Onem_apIndex, "%d/", pMover->m_Inventory.m_apIndex[ch]);
strncat(pItemContainerStruct->szIndex, Onem_apIndex, sizeof(Onem_apIndex));
sprintf(sPerObjIndex, "%d/", pMover->m_Inventory.m_apItem[ch].m_dwObjIndex);
strcat(pItemContainerStruct->szObjIndex, sPerObjIndex);
strncat(pItemContainerStruct->szPet, is.szPet, sizeof(is.szPet));
if (pMover->m_Inventory.m_apItem[ch].m_bCharged || 0 < pMover->m_Inventory.m_apItem[ch].m_dwKeepTime || 0 != pMover->m_Inventory.m_apItem[ch].GetRandomOptItemId())
bExtInven = TRUE;
if (pMover->m_Inventory.m_apItem[ch].IsPiercedItem())
bPirecingInven = TRUE;
if (pMover->m_Inventory.m_apItem[ch].m_pPet)
bPet = TRUE;
}
strncat(pItemContainerStruct->szItem, NullStr, sizeof(NullStr));
strncat(pItemContainerStruct->szIndex, NullStr, sizeof(NullStr));
strcat(pItemContainerStruct->szObjIndex, NullStr);
if (bExtInven == FALSE)
*pItemContainerStruct->szExt = '\0';
if (bPirecingInven == FALSE)
*pItemContainerStruct->szPiercing = '\0';
if (bPet == FALSE)
*pItemContainerStruct->szPet = '\0';
strcat(pItemContainerStruct->szExt, NullStr);
strcat(pItemContainerStruct->szPiercing, NullStr);
strcat(pItemContainerStruct->szPet, NullStr);
}
void CDbManager::SaveEquipment(CMover* pMover, char* szEquipment)
{
char OneEquipment[16] = { 0, };
for (int i = 0; i < MAX_HUMAN_PARTS; i++)
{
sprintf(OneEquipment, "%d/", pMover->m_aEquipInfo[i].byFlag);
strncat(szEquipment, OneEquipment, sizeof(OneEquipment));
}
strncat(szEquipment, NullStr, sizeof(NullStr));
}
void CDbManager::SaveBank(CMover* pMover, CItemContainer<CItemElem >* pPlayerBank, ItemContainerStruct* pItemContainerStruct)
{
ItemStruct is;
char Onem_apIndex[10] = { 0, };
char sPerObjIndex[16] = { 0, };
BOOL bExtBank = FALSE;
BOOL bPirecingBank = FALSE;
BOOL bPet = FALSE;
for (DWORD ch = 0; ch < pPlayerBank->m_dwItemMax; ch++) // 0-504
{
SaveOneItem(&pPlayerBank->m_apItem[ch], &is);
strncat(pItemContainerStruct->szItem, is.szItem, sizeof(is.szItem));
strncat(pItemContainerStruct->szExt, is.szExt, sizeof(is.szExt));
strncat(pItemContainerStruct->szPiercing, is.szPiercing, sizeof(is.szPiercing));
sprintf(Onem_apIndex, "%d/", pPlayerBank->m_apIndex[ch]);
strncat(pItemContainerStruct->szIndex, Onem_apIndex, sizeof(Onem_apIndex));
sprintf(sPerObjIndex, "%d/", pPlayerBank->m_apItem[ch].m_dwObjIndex);
strcat(pItemContainerStruct->szObjIndex, sPerObjIndex);
strncat(pItemContainerStruct->szPet, is.szPet, sizeof(is.szPet));
if (pPlayerBank->m_apItem[ch].m_bCharged || 0 < pPlayerBank->m_apItem[ch].m_dwKeepTime || 0 != pPlayerBank->m_apItem[ch].GetRandomOptItemId())
bExtBank = TRUE;
if (pPlayerBank->m_apItem[ch].IsPiercedItem())
bPirecingBank = TRUE;
if (pPlayerBank->m_apItem[ch].m_pPet)
bPet = TRUE;
}
strncat(pItemContainerStruct->szItem, NullStr, sizeof(NullStr));
strncat(pItemContainerStruct->szIndex, NullStr, sizeof(NullStr));
strcat(pItemContainerStruct->szObjIndex, NullStr);
if (bExtBank == FALSE)
*pItemContainerStruct->szExt = '\0';
if (bPirecingBank == FALSE)
*pItemContainerStruct->szPiercing = '\0';
if (bPet == FALSE)
*pItemContainerStruct->szPet = '\0';
strcat(pItemContainerStruct->szExt, NullStr);
strcat(pItemContainerStruct->szPiercing, NullStr);
strcat(pItemContainerStruct->szPet, NullStr);
}
void CDbManager::SaveGuildBank(CItemContainer<CItemElem>* pGuildBank, PItemContainerStruct pItemContainerStruct)
{
ItemStruct is;
char Onem_apIndex[10] = { 0, };
char sPerObjIndex[16] = { 0, };
BOOL bExtBank = FALSE;
BOOL bPirecingBank = FALSE;
BOOL bPet = FALSE;
for (DWORD ch = 0; ch < pGuildBank->m_dwItemMax; ch++) // 0-504
{
SaveOneItem(&pGuildBank->m_apItem[ch], &is);
strncat(pItemContainerStruct->szItem, is.szItem, sizeof(is.szItem));
strncat(pItemContainerStruct->szExt, is.szExt, sizeof(is.szExt));
strncat(pItemContainerStruct->szPiercing, is.szPiercing, sizeof(is.szPiercing));
sprintf(Onem_apIndex, "%d/", pGuildBank->m_apIndex[ch]);
strncat(pItemContainerStruct->szIndex, Onem_apIndex, sizeof(Onem_apIndex));
sprintf(sPerObjIndex, "%d/", pGuildBank->m_apItem[ch].m_dwObjIndex);
strcat(pItemContainerStruct->szObjIndex, sPerObjIndex);
strncat(pItemContainerStruct->szPet, is.szPet, sizeof(is.szPet));
if (pGuildBank->m_apItem[ch].m_bCharged || 0 < pGuildBank->m_apItem[ch].m_dwKeepTime || 0 != pGuildBank->m_apItem[ch].GetRandomOptItemId())
bExtBank = TRUE;
if (pGuildBank->m_apItem[ch].IsPiercedItem())
bPirecingBank = TRUE;
if (pGuildBank->m_apItem[ch].m_pPet)
bPet = TRUE;
}
strncat(pItemContainerStruct->szItem, NullStr, sizeof(NullStr));
strncat(pItemContainerStruct->szIndex, NullStr, sizeof(NullStr));
strcat(pItemContainerStruct->szObjIndex, NullStr);
if (bExtBank == FALSE)
*pItemContainerStruct->szExt = '\0';
if (bPirecingBank == FALSE)
*pItemContainerStruct->szPiercing = '\0';
strcat(pItemContainerStruct->szExt, NullStr);
strcat(pItemContainerStruct->szPiercing, NullStr);
strcat(pItemContainerStruct->szPet, NullStr);
}
void CDbManager::SaveCardCube(CMover* pMover, char* szCard, char* szsCardIndex, char* szsCardObjIndex, char* szCube, char* szsCubeIndex, char* szsCubeObjIndex)
{
}
void CDbManager::SaveTaskBar(CMover* pMover, char* szAppletTaskBar, char* szItemTaskBar, char* szSkillTaskBar)
{
char OneAppletTaskBar[MAX_TASKBAR] = { 0, };
char OneItemTaskBar[MAX_TASKBAR] = { 0, };
char OneSkillTaskBar[256] = { 0, };
for (int ch = 0; ch < MAX_SLOT_APPLET; ch++)
{
if (pMover->m_UserTaskBar.m_aSlotApplet[ch].m_dwShortcut != SHORTCUT_NONE)
{
sprintf(OneAppletTaskBar, "%d,%d,%d,%d,%d,%d,%d", ch,
pMover->m_UserTaskBar.m_aSlotApplet[ch].m_dwShortcut, pMover->m_UserTaskBar.m_aSlotApplet[ch].m_dwId, pMover->m_UserTaskBar.m_aSlotApplet[ch].m_dwType,
pMover->m_UserTaskBar.m_aSlotApplet[ch].m_dwIndex, pMover->m_UserTaskBar.m_aSlotApplet[ch].m_dwUserId, pMover->m_UserTaskBar.m_aSlotApplet[ch].m_dwData);
if (pMover->m_UserTaskBar.m_aSlotApplet[ch].m_dwShortcut == SHORTCUT_CHAT)
SetStrDBFormat(OneAppletTaskBar, pMover->m_UserTaskBar.m_aSlotApplet[ch].m_szString);
strncat(szAppletTaskBar, OneAppletTaskBar, sizeof(OneAppletTaskBar));
strcat(szAppletTaskBar, "/");
}
}
strcat(szAppletTaskBar, NullStr);
for (int ch = 0; ch < MAX_SLOT_ITEM_COUNT; ch++)
{
for (int j = 0; j < MAX_SLOT_ITEM; j++)
{
if (pMover->m_UserTaskBar.m_aSlotItem[ch][j].m_dwShortcut != SHORTCUT_NONE)
{
sprintf(OneItemTaskBar, "%d,%d,%d,%d,%d,%d,%d,%d", ch, j,
pMover->m_UserTaskBar.m_aSlotItem[ch][j].m_dwShortcut, pMover->m_UserTaskBar.m_aSlotItem[ch][j].m_dwId, pMover->m_UserTaskBar.m_aSlotItem[ch][j].m_dwType,
pMover->m_UserTaskBar.m_aSlotItem[ch][j].m_dwIndex, pMover->m_UserTaskBar.m_aSlotItem[ch][j].m_dwUserId, pMover->m_UserTaskBar.m_aSlotItem[ch][j].m_dwData);
if (pMover->m_UserTaskBar.m_aSlotItem[ch][j].m_dwShortcut == SHORTCUT_CHAT)
SetStrDBFormat(OneItemTaskBar, pMover->m_UserTaskBar.m_aSlotItem[ch][j].m_szString);
strncat(szItemTaskBar, OneItemTaskBar, sizeof(OneItemTaskBar));
strcat(szItemTaskBar, "/");
}
}
}
strcat(szItemTaskBar, NullStr);
for (int ch = 0; ch < MAX_SLOT_QUEUE; ch++)
{
if (pMover->m_UserTaskBar.m_aSlotQueue[ch].m_dwShortcut != SHORTCUT_NONE) // °ªÀÌ µé¾îÀÖ´ÂÁö °Ë»ç
{
sprintf(OneSkillTaskBar, "%d,%d,%d,%d,%d,%d,%d/", ch,
pMover->m_UserTaskBar.m_aSlotQueue[ch].m_dwShortcut, pMover->m_UserTaskBar.m_aSlotQueue[ch].m_dwId, pMover->m_UserTaskBar.m_aSlotQueue[ch].m_dwType,
pMover->m_UserTaskBar.m_aSlotQueue[ch].m_dwIndex, pMover->m_UserTaskBar.m_aSlotQueue[ch].m_dwUserId, pMover->m_UserTaskBar.m_aSlotQueue[ch].m_dwData);
strncat(szSkillTaskBar, OneSkillTaskBar, sizeof(OneSkillTaskBar));
}
}
strcat(szSkillTaskBar, NullStr);
}
void CDbManager::SaveSMCode(CMover* pMover, char* szszSMTime)
{
BOOL bSMSave = FALSE;
for (int ch = 0; ch < SM_MAX; ++ch)
{
if (0 < pMover->m_dwSMTime[ch])
{
bSMSave = TRUE;
}
char OneSMTime[256] = { 0, };
if (ch == SM_MAX_HP50)
{
sprintf(OneSMTime, "%d,%d,", pMover->m_dwSMTime[ch], pMover->m_nPlusMaxHitPoint);
}
else
if (ch == SM_RESIST_ATTACK_LEFT)
{
sprintf(OneSMTime, "%d,%d,", pMover->m_dwSMTime[ch], pMover->m_nAttackResistLeft);
}
else
if (ch == SM_RESIST_ATTACK_RIGHT)
{
sprintf(OneSMTime, "%d,%d,", pMover->m_dwSMTime[ch], pMover->m_nAttackResistRight);
}
else
if (ch == SM_RESIST_DEFENSE)
{
sprintf(OneSMTime, "%d,%d,", pMover->m_dwSMTime[ch], pMover->m_nDefenseResist);
}
else
{
sprintf(OneSMTime, "%d,", pMover->m_dwSMTime[ch]);
}
strcat(szszSMTime, OneSMTime);
}
strcat(szszSMTime, NullStr);
if (bSMSave == FALSE)
{
memset(szszSMTime, 0, sizeof(szszSMTime));
}
}
void CDbManager::SaveSkillInfluence(CMover* pMover, char* szszSkillInfluence)
{
#ifdef __BUFF_1107
pMover->m_buffs.ToString(szszSkillInfluence);
#else // __BUFF_1107
char OneSkillInfluence[256] = { 0, };
for (int ch = 0; ch < MAX_SKILLINFLUENCE; ++ch)
{
SKILLINFLUENCE* pSkillInfluenece = &pMover->m_SkillState.m_aSkillInfluence[ch];
if (pSkillInfluenece->wType == BUFF_EQUIP)
continue;
#if __VER >= 13 // __HOUSING
if (pSkillInfluenece->wType == 0 && pSkillInfluenece->wID == 0
&& pSkillInfluenece->dwLevel == 0 && pSkillInfluenece->tmCount == 0)
break;
#endif // __HOUSING
sprintf(OneSkillInfluence, "%d,%d,%d,%d/",
pSkillInfluenece->wType, pSkillInfluenece->wID,
pSkillInfluenece->dwLevel, pSkillInfluenece->tmCount);
strcat(szszSkillInfluence, OneSkillInfluence);
}
strcat(szszSkillInfluence, NullStr);
#endif // __BUFF_1107
}
void CDbManager::SavePlayTime(CQuery* qry, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus)
{
CAr arRead(lpDbOverlappedPlus->lpBuf, lpDbOverlappedPlus->uBufSize);
DWORD dwTime;
arRead.ReadString(lpDbOverlappedPlus->AccountInfo.szAccount, MAX_ACCOUNT);
u_long idPlayer;
arRead >> idPlayer;
arRead >> dwTime; // ½Ã°¢
dwTime /= 1000;
char szQuery[QUERY_SIZE] = { 0, };
DBQryCharacter(szQuery, "U3", idPlayer, g_appInfo.dwSys, '\0', "", dwTime);
if (FALSE == qry->Exec(szQuery))
{
WriteLog("%s, %d\t%s\r\n\t%s", __FILE__, __LINE__, szQuery, lpDbOverlappedPlus->AccountInfo.szPlayer);
}
FreeRequest(lpDbOverlappedPlus);
}
void CDbManager::DBQryAddBankSave(char* szSql, const ADDBANK_QUERYINFO& info)
{
sprintf(szSql, "{call ADD_BANK_STR('U1','%07d','%02d', ?, ?, ?, ?, ?, ?, ?)}", info.idPlayer, g_appInfo.dwSys);
}
#if __VER >= 11 // __SYS_POCKET
void CDbManager::MakeQueryPocket(char* szQuery, const PocketParam& p)
{
sprintf(szQuery, "{call uspSavePocket( '%02d', '%07d', ?, ?, ?, ?, ?, ?, ?, ?, ?) }", g_appInfo.dwSys, p.idPlayer);
}
#endif // __SYS_POCKET
void CDbManager::SaveOneItem(CItemElem* pItemElem, PItemStruct pItemStruct)
{
char szPiercing[32] = { 0, };
if (pItemElem->IsEmpty() == FALSE)
{
#if __VER >= 11 // __MA_VER11_05 // Äɸ¯ÅÍ ºÀÀÎ °Å·¡ ±â´É world,database,neuz
if (pItemElem->m_dwItemId == II_SYS_SYS_SCR_SEALCHARACTER)
sprintf(pItemStruct->szItem, "%d,%d,%d,%d,,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d/",
pItemElem->m_dwObjId, pItemElem->m_dwItemId,
0, 0,
pItemElem->m_nItemNum, pItemElem->m_nRepairNumber,
pItemElem->m_nHitPoint, pItemElem->m_nRepair,
0, pItemElem->m_byFlag,
pItemElem->GetSerialNumber(), pItemElem->GetOption(),
pItemElem->m_bItemResist, pItemElem->m_nResistAbilityOption,
pItemElem->m_idGuild,
pItemElem->m_nResistSMItemId
);
else
{
sprintf(pItemStruct->szItem, "%d,%d,%d,%d,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d"
#ifdef __LOOKCHANGE
",%d"
#endif
#ifdef __WEAPON_RARITY
",%d"
#endif // __WEAPON_RARITY
",%d"
"/",
pItemElem->m_dwObjId, pItemElem->m_dwItemId,
0, 0, pItemElem->m_szItemText,
pItemElem->m_nItemNum, pItemElem->m_nRepairNumber,
pItemElem->m_nHitPoint, pItemElem->m_nRepair,
0, pItemElem->m_byFlag,
pItemElem->GetSerialNumber(), pItemElem->GetOption(),
pItemElem->m_bItemResist, pItemElem->m_nResistAbilityOption,
pItemElem->m_idGuild,
pItemElem->m_nResistSMItemId
#ifdef __LOOKCHANGE
, pItemElem->GetLook()
#endif
#ifdef __WEAPON_RARITY
, pItemElem->GetWeaponRarity()
#endif // __WEAPON_RARITY
);
}
#else // __MA_VER11_05 // Äɸ¯ÅÍ ºÀÀÎ °Å·¡ ±â´É world,database,neuz
// item
sprintf(pItemStruct->szItem, "%d,%d,%d,%d,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d/",
pItemElem->m_dwObjId, pItemElem->m_dwItemId,
0, 0, pItemElem->m_szItemText,
pItemElem->m_nItemNum, pItemElem->m_nRepairNumber,
pItemElem->m_nHitPoint, pItemElem->m_nRepair,
0, pItemElem->m_byFlag,
pItemElem->GetSerialNumber(), pItemElem->GetOption(),
pItemElem->m_bItemResist, pItemElem->m_nResistAbilityOption,
pItemElem->m_idGuild,
pItemElem->m_nResistSMItemId
);
#endif // __MA_VER11_05 // Äɸ¯ÅÍ ºÀÀÎ °Å·¡ ±â´É world,database,neuz
// ext
#if __VER >= 11 // __SYS_IDENTIFY
sprintf(pItemStruct->szExt, "%d,%d,%I64d"
#if __VER >= 15 // __PETVIS
",%d"
#endif // __PETVIS
"/", pItemElem->m_bCharged, pItemElem->m_dwKeepTime, pItemElem->GetRandomOptItemId()
#if __VER >= 15 // __PETVIS
, static_cast<int>(pItemElem->m_bTranformVisPet)
#endif // __PETVIS
);
#else // __SYS_IDENTIFY
sprintf(pItemStruct->szExt, "%d,%d,%d/", pItemElem->m_bCharged, pItemElem->m_dwKeepTime, pItemElem->GetRandomOptItemId());
#endif // __SYS_IDENTIFY
// piercing
#if __VER >= 12 // __EXT_PIERCING
ItemProp* itemProp = prj.GetItemProp(pItemElem->m_dwItemId);
if (itemProp && itemProp->IsUltimate())
{
sprintf(pItemStruct->szPiercing, "%d", pItemElem->GetUltimatePiercingSize());
for (int nPirecing = 0; nPirecing < pItemElem->GetUltimatePiercingSize(); ++nPirecing)
{
sprintf(szPiercing, ",%d", pItemElem->GetUltimatePiercingItem(nPirecing));
strncat(pItemStruct->szPiercing, szPiercing, sizeof(szPiercing));
}
if (pItemElem->GetPiercingSize() > 0)
{
sprintf(szPiercing, ",%d", pItemElem->GetPiercingSize());
strncat(pItemStruct->szPiercing, szPiercing, sizeof(szPiercing));
}
}
else
#endif // __EXT_PIERCING
sprintf(pItemStruct->szPiercing, "%d", pItemElem->GetPiercingSize());
for (int nPirecing = 0; nPirecing < pItemElem->GetPiercingSize(); ++nPirecing)
{
sprintf(szPiercing, ",%d", pItemElem->GetPiercingItem(nPirecing));
strncat(pItemStruct->szPiercing, szPiercing, sizeof(szPiercing));
}
#if __VER >= 15 // __PETVIS
if (pItemElem->IsVisPet())
{
for (int nPirecing = 0; nPirecing < pItemElem->GetPiercingSize(); ++nPirecing)
{
sprintf(szPiercing, ",%d", pItemElem->GetVisKeepTime(nPirecing));
strncat(pItemStruct->szPiercing, szPiercing, sizeof(szPiercing));
}
}
#endif // __PETVIS
strcat(pItemStruct->szPiercing, "/");
// pet
if (pItemElem->m_pPet)
{
sprintf(pItemStruct->szPet, "1,%d,%d,%d,%d,%d",
pItemElem->m_pPet->GetKind(), pItemElem->m_pPet->GetLevel(),
pItemElem->m_pPet->GetExp(), pItemElem->m_pPet->GetEnergy(),
pItemElem->m_pPet->GetLife());
for (int i = PL_D; i <= pItemElem->m_pPet->GetLevel(); i++)
{
char szAvailLevel[16] = { 0, };
sprintf(szAvailLevel, ",%d", pItemElem->m_pPet->GetAvailLevel(i));
strcat(pItemStruct->szPet, szAvailLevel);
}
#ifdef __PET_1024
char szTemp[MAX_PET_NAME_FMT + 1] = { 0, };
char szFmt[MAX_PET_NAME_FMT] = { 0, };
SetDBFormatStr(szFmt, MAX_PET_NAME_FMT, pItemElem->m_pPet->GetName());
sprintf(szTemp, ",%s", szFmt);
strcat(pItemStruct->szPet, szTemp);
#endif // __PET_1024
strcat(pItemStruct->szPet, "/");
}
else
{
sprintf(pItemStruct->szPet, "0/");
}
}
else
{
// item
ZeroMemory(pItemStruct->szItem, sizeof(pItemStruct->szItem));
// ext
sprintf(pItemStruct->szExt, "%d,%d,%d/", 0, 0, 0);
// piercing
sprintf(pItemStruct->szPiercing, "%d/", 0);
// pet
sprintf(pItemStruct->szPet, "0/");
}
}