ich hab da eine frage ich versuche gerade das model change zu fixen das es abspeichert
nach restart ist das model von der waffe verschwunden
dann habe ich versucht es zu fixen ich kann mich dann einloggen komme aber nur bis zur server auswahl
das original sieht so aus
#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 "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' ) );
#ifdef __CONSIGNMENT_OLD
char szAuction[128] = { 0, };
char szOneAuction[20] = { 0, };
for( DWORD z = 0; z < pMover->m_vecAuction.size(); z++ )
{
sprintf( szOneAuction, "%d/", pMover->m_vecAuction[z]);
strncat( szAuction, szOneAuction, sizeof( szOneAuction ) );
}
strcat( szAuction, NullStr );
#endif
// 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
#ifdef __PVP_SYSTEM
",?,?"
#endif
#ifdef __GLOW_PANEL
",?,?,?,?,?,?,?"
#endif
#ifdef __REBIRTH
",?"
#endif // __REBIRTH
#ifdef __VIP
",?"
#endif
#ifdef __USER_OWN_TITLE
",?"
#endif
#ifdef __MADRIGAL_GIFT_POINT
",?,?"
#endif
#ifdef __CONSIGNMENT_OLD
",?"
#endif
#ifdef __SYS_280514
",?"
#endif // __SYS_280514
#ifdef __PVP_MATCH
",?,?"
#endif
#ifdef __SYS_LOTTERY
",?"
#endif
// ")}", 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
#ifdef __PVP_SYSTEM
MAX_SAVEPARAM += 2;
#endif
#ifdef __GLOW_PANEL
MAX_SAVEPARAM += 7;
#endif
#ifdef __REBIRTH
MAX_SAVEPARAM += 1;
#endif // __REBIRTH
#ifdef __VIP
MAX_SAVEPARAM += 1;
#endif
#ifdef __USER_OWN_TITLE
MAX_SAVEPARAM += 1;
#endif
#ifdef __MADIGAL_GIFT_POINT
MAX_SAVEPARAM += 2;
#endif
#ifdef __CONSIGNMENT_OLD
MAX_SAVEPARAM ++;
#endif
#ifdef __SYS_280514
MAX_SAVEPARAM += 1;
#endif // __SYS_280514
#ifdef __PVP_MATCH
MAX_SAVEPARAM += 2;
#endif
#ifdef __SYS_LOTTERY
MAX_SAVEPARAM += 1;
#endif
//////////////////////////////////////////////////////////////////////////////////////
#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 );
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 );
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 );
#ifndef __NEW_TASKBAR_V19
//Virtuos
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_SHORT, SQL_SMALLINT, 0, 0, &pMover->m_UserTaskBar.m_nActionPoint, 0, 0 );
#else
int nAP = 0;
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_SHORT, SQL_SMALLINT, 0, 0, &nAP, 0, 0 );
#endif
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 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2000, 0, icsInventory.szExt, 0, &cbLen );
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
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 7800, 0, icsInventory.szPiercing, 0, &cbLen );
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
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2000, 0, icsInventory.szPet, 0, &cbLen );
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
#ifdef __PVP_SYSTEM
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nPvpKills, 0, 0 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nPvpDeaths, 0, 0 );
#endif
#ifdef __GLOW_PANEL
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_iGlowArmLeft , 0, 0 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_iGlowArmRight, 0, 0 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_iGlowLegLeft, 0, 0 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_iGlowLegRight, 0, 0 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_iGlowBody, 0, 0);
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_iGlowHandLeft, 0, 0);
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_iGlowHandRight, 0, 0);
#endif
#ifdef __REBIRTH
// FILEOUT( "REBIRTH.txt"," NAME: %s, PLATIN %d", pMover->m_szName, pMover->m_nReb );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nReb, 0, 0 );
#endif // __REBIRTH
#ifdef __VIP
char szEndVIP[13];
CTime time( pMover->m_tEndVipTime );
CTime currentTime = CTime::GetCurrentTime();
if( time.GetYear() < 2010 )
time = CTime::GetCurrentTime() -CTimeSpan( 28, 0, 0, 0 );
sprintf( szEndVIP, "%s", time.Format( "%Y%m%d" ) );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 13, 0, szEndVIP, 0, &cbLen );
#endif // __VIP
#ifdef __USER_OWN_TITLE
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, MAX_CUSTOM_TITLE, 0, pMover->m_szOwnTitle, 0, &cbLen );
#endif
#ifdef __MADRIGAL_GIFT_POINT
DWORD dwMadrigalGiftExp = pMover->GetMadrigalGiftExp();
CTime tm = CTime::GetCurrentTime();
__time64_t tm64 = tm.GetTime();
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &dwMadrigalGiftExp, 0, 0 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &tm64, 0, 0 );
#endif
#ifdef __CONSIGNMENT_OLD
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 128, 0, szAuction, 0, &cbLen );
#endif // __CONSIGNMENT_OLD
#ifdef __SYS_280514
int nHideCoat = 0;
for( int z = 0; z < 5; ++z )
{
int c = (pMover->m_abHideCoat[z] ? 1 : 0);
nHideCoat |= (c << z);
}
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nHideCoat, 0, 0 );
#endif // __SYS_280514
#ifdef __PVP_MATCH
int nKills = pMover->GetKillCount();
int nDeads = pMover->GetDeadCount();
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nKills, 0, 0 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nDeads, 0, 0 );
#endif
#ifdef __SYS_LOTTERY
__time64_t tmNextRoulette = pMover->GetNextRouletteUseTime().GetTime();
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &tmNextRoulette, 0, 0 );
#endif
/*#ifdef __BURNOUT_SYSTEM
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nBurnoutExp, 0, 0 );
#endif*/
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 @
dex='%02d' @
ID='%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 @
dex='%02d',@m_idPlayer='%07d' @
=%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,@c 19=%d,@c20=%d,@c21=%d,@c22=%d,@c23=%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,@c42=%d,@c43=%d,@c 44=%d,@c45=%d,@c46=%d @
=%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 @
dex='%02d',@m_idPlayer='%07d' @
=%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,@c 19=%d,@c20=%d,@c21=%d,@c22=%d,@c23=%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,@c42=%d,@c43=%d,@c 44=%d,@c45=%d,@c46=%d @
=%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 @
dex='%02d',@m_idPlayer='%07d' @
=%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,@c 19=%d,@c20=%d,@c21=%d,@c22=%d,@c23=%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,@c42=%d,@c43=%d,@c 44=%d,@c45=%d,@c46=%d @
=%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
{
#if __VER >= 10 //__LEGEND // 10Â÷ Àü½Â½Ã½ºÅÛ Neuz, World, Trans
#ifdef __VIRTUOS_4TH_CLASS
for( int i = 0 ; i < (MAX_JOB_SKILL + MAX_EXPERT_SKILL + MAX_PRO_SKILL + MAX_MASTER_SKILL + MAX_HERO_SKILL + MAX_LEGEND_HERO_SKILL + MAX_ULTIME_LEGEND_SKILL) ; i++)
#else __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++)
#endif // __3RD_LEGEND16
#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
{
#ifdef __SKILL_0205
if( abUpdateSkill[i] == 0 )
continue;
#endif // __SKILL_0205
sprintf( szQuery,
"uspLearnSkill @
dex='%02d' @
ID='%07d' @
ID=%d @
Lv=%d @
Position=%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( 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( 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( 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( 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:
BQryAddBankSave( 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 __WEAPON_LEVELING
"%d,%d,"
#endif // __WEAPON_LEVELING
#ifdef __MODEL_CHANGE
"%d,"
#endif // __MODEL_CHANGE
#ifdef __OLD_NEW_GLOW_V2
"%d,"
#endif // __OLD_NEW_GLOW_V2
"%d/",
//sprintf( pItemStruct->szItem, "%d,%d,%d,%d,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,% d/",// Standard
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 __WEAPON_LEVELING
, pItemElem->m_nWeaponLevel
, pItemElem->m_nWeaponExp
#endif // __WEAPON_LEVELING
#ifdef __WEAPON_DST_CHANGE
, pItemElem->m_dwChangeDST
#endif
#ifdef __OLD_NEW_GLOW_V2
, pItemElem->m_nNewGlow
#endif // __OLD_NEW_GLOW_V2
#ifdef __MODEL_CHANGE
, pItemElem->m_dwnewID
#endif // __MODEL_CHANGE
#ifdef __MONSTER_WEAPON
, pItemElem->m_dwMonsterID
, pItemElem->m_bMonster
#endif
);
#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( 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/" );
}
}
#ifdef __COUNTRY_ICON
void CDbManager::SetCountry( CQuery *qry, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus )
{
CAr arRead( lpDbOverlappedPlus->lpBuf, lpDbOverlappedPlus->uBufSize );
char szQuery[QUERY_SIZE] = {0, };
u_long idPlayer;
int nCountry;
arRead >> idPlayer;
arRead >> nCountry;
Error("nCountry %d, idPlayer %d", nCountry, idPlayer );
sprintf( szQuery, "UPDATE CHARACTER_01_DBF.dbo.CHARACTER_TBL SET m_nCountry = '%d' where m_idPlayer = '%07d' AND serverindex ='%02d' ", nCountry, idPlayer, g_appInfo.dwSys );
if( FALSE == qry->Exec( szQuery ) )
{
WriteLog( "%s, %d\t%s", __FILE__, __LINE__, szQuery );
FreeRequest( lpDbOverlappedPlus );
return;
}
FreeRequest( lpDbOverlappedPlus );
}
#endif
#ifdef __RGUARD
void CDbManager::BanUser( CQuery *qry, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus )
{
CAr arRead( lpDbOverlappedPlus->lpBuf, lpDbOverlappedPlus->uBufSize );
char szAcc[MAX_ACCOUNT] = {0, };
char szQuery[QUERY_SIZE] = {0, };
int nDays;
arRead.ReadString( szAcc, MAX_ACCOUNT );
arRead >> nDays;
CTime time = CTime::GetCurrentTime();
sprintf(szQuery, "UPDATE ACCOUNT_DBF.dbo.ACCOUNT_TBL_DETAIL SET BlockTime = '%s' where account = '%s' " , time.Format("%Y%m%d"), szAcc);
if( FALSE == qry->Exec( szQuery ) )
{
WriteLog( "%s, %d\t%s", __FILE__, __LINE__, szQuery );
FreeRequest( lpDbOverlappedPlus );
return;
}
time += CTimeSpan( nDays , 0, 0, 0);
sprintf(szQuery, "UPDATE ACCOUNT_DBF.dbo.ACCOUNT_TBL_DETAIL SET EndTime = '%s' where account = '%s' " , time.Format("%Y%m%d"), szAcc);
if( FALSE == qry->Exec( szQuery ) )
{
WriteLog( "%s, %d\t%s", __FILE__, __LINE__, szQuery );
FreeRequest( lpDbOverlappedPlus );
return;
}
FreeRequest( lpDbOverlappedPlus );
}
#endif
#ifdef __PLAYER_WAR
void CDbManager::SaveWarPlayers( CQuery *qry, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus )
{
CAr arRead( lpDbOverlappedPlus->lpBuf, lpDbOverlappedPlus->uBufSize );
TCHAR szName[MAX_PLAYER];
char szQuery[QUERY_SIZE] = {0, };
u_long idPlayer;
u_int nCount;
int nKills, nDeaths, nPoints, nJob;
arRead >> nCount;
for( u_int i= 0; i<nCount; i++)
{
arRead.ReadString( szName );
arRead >> idPlayer;
arRead >> nJob;
arRead >> nKills;
arRead >> nDeaths;
arRead >> nPoints;
if( idPlayer > 0 )
{
sprintf( szQuery, "{ call CHARACTER_01_DBF.dbo.uspSaveSiegeUser('%02d','%s', '%07d','%d','%d','%d','%d') }", g_appInfo.dwSys, szName, idPlayer, nJob, nPoints, nKills, nDeaths );
if( FALSE == qry->Exec( szQuery ) )
{
Error("[Player Siege] Cannot save User details id = %d", idPlayer );
WriteLog( "%s, %d\t%s", __FILE__, __LINE__, szQuery );
FreeRequest( lpDbOverlappedPlus );
return;
}
}
else
Error("invalid player id return - CDbManager::SaveWarPlayers");
}
FreeRequest( lpDbOverlappedPlus );
}
#endif
#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 "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' ) );
#ifdef __CONSIGNMENT_OLD
char szAuction[128] = { 0, };
char szOneAuction[20] = { 0, };
for( DWORD z = 0; z < pMover->m_vecAuction.size(); z++ )
{
sprintf( szOneAuction, "%d/", pMover->m_vecAuction[z]);
strncat( szAuction, szOneAuction, sizeof( szOneAuction ) );
}
strcat( szAuction, NullStr );
#endif
// 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
#ifdef __PVP_SYSTEM
",?,?"
#endif
#ifdef __GLOW_PANEL
",?,?,?,?,?,?,?"
#endif
#ifdef __REBIRTH
",?"
#endif // __REBIRTH
#ifdef __VIP
",?"
#endif
#ifdef __USER_OWN_TITLE
",?"
#endif
#ifdef __MADRIGAL_GIFT_POINT
",?,?"
#endif
#ifdef __CONSIGNMENT_OLD
",?"
#endif
#ifdef __SYS_280514
",?"
#endif // __SYS_280514
#ifdef __PVP_MATCH
",?,?"
#endif
#ifdef __SYS_LOTTERY
",?"
#endif
// ")}", 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
#ifdef __PVP_SYSTEM
MAX_SAVEPARAM += 2;
#endif
#ifdef __GLOW_PANEL
MAX_SAVEPARAM += 7;
#endif
#ifdef __REBIRTH
MAX_SAVEPARAM += 1;
#endif // __REBIRTH
#ifdef __VIP
MAX_SAVEPARAM += 1;
#endif
#ifdef __USER_OWN_TITLE
MAX_SAVEPARAM += 1;
#endif
#ifdef __MADIGAL_GIFT_POINT
MAX_SAVEPARAM += 2;
#endif
#ifdef __CONSIGNMENT_OLD
MAX_SAVEPARAM ++;
#endif
#ifdef __SYS_280514
MAX_SAVEPARAM += 1;
#endif // __SYS_280514
#ifdef __PVP_MATCH
MAX_SAVEPARAM += 2;
#endif
#ifdef __SYS_LOTTERY
MAX_SAVEPARAM += 1;
#endif
//////////////////////////////////////////////////////////////////////////////////////
#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 );
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 );
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 );
#ifndef __NEW_TASKBAR_V19
//Virtuos
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_SHORT, SQL_SMALLINT, 0, 0, &pMover->m_UserTaskBar.m_nActionPoint, 0, 0 );
#else
int nAP = 0;
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_SHORT, SQL_SMALLINT, 0, 0, &nAP, 0, 0 );
#endif
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 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2000, 0, icsInventory.szExt, 0, &cbLen );
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
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 7800, 0, icsInventory.szPiercing, 0, &cbLen );
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
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 2000, 0, icsInventory.szPet, 0, &cbLen );
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
#ifdef __PVP_SYSTEM
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nPvpKills, 0, 0 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nPvpDeaths, 0, 0 );
#endif
#ifdef __GLOW_PANEL
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_iGlowArmLeft , 0, 0 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_iGlowArmRight, 0, 0 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_iGlowLegLeft, 0, 0 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_iGlowLegRight, 0, 0 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_iGlowBody, 0, 0);
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_iGlowHandLeft, 0, 0);
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_iGlowHandRight, 0, 0);
#endif
#ifdef __REBIRTH
// FILEOUT( "REBIRTH.txt"," NAME: %s, PLATIN %d", pMover->m_szName, pMover->m_nReb );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nReb, 0, 0 );
#endif // __REBIRTH
#ifdef __VIP
char szEndVIP[13];
CTime time( pMover->m_tEndVipTime );
CTime currentTime = CTime::GetCurrentTime();
if( time.GetYear() < 2010 )
time = CTime::GetCurrentTime() -CTimeSpan( 28, 0, 0, 0 );
sprintf( szEndVIP, "%s", time.Format( "%Y%m%d" ) );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 13, 0, szEndVIP, 0, &cbLen );
#endif // __VIP
#ifdef __USER_OWN_TITLE
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, MAX_CUSTOM_TITLE, 0, pMover->m_szOwnTitle, 0, &cbLen );
#endif
#ifdef __MADRIGAL_GIFT_POINT
DWORD dwMadrigalGiftExp = pMover->GetMadrigalGiftExp();
CTime tm = CTime::GetCurrentTime();
__time64_t tm64 = tm.GetTime();
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &dwMadrigalGiftExp, 0, 0 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &tm64, 0, 0 );
#endif
#ifdef __CONSIGNMENT_OLD
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 128, 0, szAuction, 0, &cbLen );
#endif // __CONSIGNMENT_OLD
#ifdef __SYS_280514
int nHideCoat = 0;
for( int z = 0; z < 5; ++z )
{
int c = (pMover->m_abHideCoat[z] ? 1 : 0);
nHideCoat |= (c << z);
}
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nHideCoat, 0, 0 );
#endif // __SYS_280514
#ifdef __PVP_MATCH
int nKills = pMover->GetKillCount();
int nDeads = pMover->GetDeadCount();
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nKills, 0, 0 );
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &nDeads, 0, 0 );
#endif
#ifdef __SYS_LOTTERY
__time64_t tmNextRoulette = pMover->GetNextRouletteUseTime().GetTime();
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &tmNextRoulette, 0, 0 );
#endif
/*#ifdef __BURNOUT_SYSTEM
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nBurnoutExp, 0, 0 );
#endif*/
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 @
dex='%02d' @
ID='%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 @
dex='%02d',@m_idPlayer='%07d' @
=%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,@c 19=%d,@c20=%d,@c21=%d,@c22=%d,@c23=%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,@c42=%d,@c43=%d,@c 44=%d,@c45=%d,@c46=%d @
=%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 @
dex='%02d',@m_idPlayer='%07d' @
=%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,@c 19=%d,@c20=%d,@c21=%d,@c22=%d,@c23=%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,@c42=%d,@c43=%d,@c 44=%d,@c45=%d,@c46=%d @
=%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 @
dex='%02d',@m_idPlayer='%07d' @
=%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,@c 19=%d,@c20=%d,@c21=%d,@c22=%d,@c23=%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,@c42=%d,@c43=%d,@c 44=%d,@c45=%d,@c46=%d @
=%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
{
#if __VER >= 10 //__LEGEND // 10Â÷ Àü½Â½Ã½ºÅÛ Neuz, World, Trans
#ifdef __VIRTUOS_4TH_CLASS
for( int i = 0 ; i < (MAX_JOB_SKILL + MAX_EXPERT_SKILL + MAX_PRO_SKILL + MAX_MASTER_SKILL + MAX_HERO_SKILL + MAX_LEGEND_HERO_SKILL + MAX_ULTIME_LEGEND_SKILL) ; i++)
#else __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++)
#endif // __3RD_LEGEND16
#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
{
#ifdef __SKILL_0205
if( abUpdateSkill[i] == 0 )
continue;
#endif // __SKILL_0205
sprintf( szQuery,
"uspLearnSkill @
dex='%02d' @
ID='%07d' @
ID=%d @
Lv=%d @
Position=%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( 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( 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( 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( 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:
{
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 __WEAPON_LEVELING
"%d,%d,"
#endif // __WEAPON_LEVELING
#ifdef __MODEL_CHANGE
"%d,"
#endif // __MODEL_CHANGE
#ifdef __OLD_NEW_GLOW_V2
"%d,"
#endif // __OLD_NEW_GLOW_V2
"%d/",
//sprintf( pItemStruct->szItem, "%d,%d,%d,%d,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,% d/",// Standard
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 __WEAPON_LEVELING
, pItemElem->m_nWeaponLevel
, pItemElem->m_nWeaponExp
#endif // __WEAPON_LEVELING
#ifdef __WEAPON_DST_CHANGE
, pItemElem->m_dwChangeDST
#endif
#ifdef __OLD_NEW_GLOW_V2
, pItemElem->m_nNewGlow
#endif // __OLD_NEW_GLOW_V2
#ifdef __MODEL_CHANGE
, pItemElem->m_dwnewID
#endif // __MODEL_CHANGE
#ifdef __MONSTER_WEAPON
, pItemElem->m_dwMonsterID
, pItemElem->m_bMonster
#endif
);
#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( 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/" );
}
}
#ifdef __COUNTRY_ICON
void CDbManager::SetCountry( CQuery *qry, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus )
{
CAr arRead( lpDbOverlappedPlus->lpBuf, lpDbOverlappedPlus->uBufSize );
char szQuery[QUERY_SIZE] = {0, };
u_long idPlayer;
int nCountry;
arRead >> idPlayer;
arRead >> nCountry;
Error("nCountry %d, idPlayer %d", nCountry, idPlayer );
sprintf( szQuery, "UPDATE CHARACTER_01_DBF.dbo.CHARACTER_TBL SET m_nCountry = '%d' where m_idPlayer = '%07d' AND serverindex ='%02d' ", nCountry, idPlayer, g_appInfo.dwSys );
if( FALSE == qry->Exec( szQuery ) )
{
WriteLog( "%s, %d\t%s", __FILE__, __LINE__, szQuery );
FreeRequest( lpDbOverlappedPlus );
return;
}
FreeRequest( lpDbOverlappedPlus );
}
#endif
#ifdef __RGUARD
void CDbManager::BanUser( CQuery *qry, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus )
{
CAr arRead( lpDbOverlappedPlus->lpBuf, lpDbOverlappedPlus->uBufSize );
char szAcc[MAX_ACCOUNT] = {0, };
char szQuery[QUERY_SIZE] = {0, };
int nDays;
arRead.ReadString( szAcc, MAX_ACCOUNT );
arRead >> nDays;
CTime time = CTime::GetCurrentTime();
sprintf(szQuery, "UPDATE ACCOUNT_DBF.dbo.ACCOUNT_TBL_DETAIL SET BlockTime = '%s' where account = '%s' " , time.Format("%Y%m%d"), szAcc);
if( FALSE == qry->Exec( szQuery ) )
{
WriteLog( "%s, %d\t%s", __FILE__, __LINE__, szQuery );
FreeRequest( lpDbOverlappedPlus );
return;
}
time += CTimeSpan( nDays , 0, 0, 0);
sprintf(szQuery, "UPDATE ACCOUNT_DBF.dbo.ACCOUNT_TBL_DETAIL SET EndTime = '%s' where account = '%s' " , time.Format("%Y%m%d"), szAcc);
if( FALSE == qry->Exec( szQuery ) )
{
WriteLog( "%s, %d\t%s", __FILE__, __LINE__, szQuery );
FreeRequest( lpDbOverlappedPlus );
return;
}
FreeRequest( lpDbOverlappedPlus );
}
#endif
#ifdef __PLAYER_WAR
void CDbManager::SaveWarPlayers( CQuery *qry, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus )
{
CAr arRead( lpDbOverlappedPlus->lpBuf, lpDbOverlappedPlus->uBufSize );
TCHAR szName[MAX_PLAYER];
char szQuery[QUERY_SIZE] = {0, };
u_long idPlayer;
u_int nCount;
int nKills, nDeaths, nPoints, nJob;
arRead >> nCount;
for( u_int i= 0; i<nCount; i++)
{
arRead.ReadString( szName );
arRead >> idPlayer;
arRead >> nJob;
arRead >> nKills;
arRead >> nDeaths;
arRead >> nPoints;
if( idPlayer > 0 )
{
sprintf( szQuery, "{ call CHARACTER_01_DBF.dbo.uspSaveSiegeUser('%02d','%s', '%07d','%d','%d','%d','%d') }", g_appInfo.dwSys, szName, idPlayer, nJob, nPoints, nKills, nDeaths );
if( FALSE == qry->Exec( szQuery ) )
{
Error("[Player Siege] Cannot save User details id = %d", idPlayer );
WriteLog( "%s, %d\t%s", __FILE__, __LINE__, szQuery );
FreeRequest( lpDbOverlappedPlus );
return;
}
}
else
Error("invalid player id return - CDbManager::SaveWarPlayers");
}
FreeRequest( lpDbOverlappedPlus );
}
#endif
aber wo muss ich dieses %d, weiterführen damit der das model change auch speichert ?
ich habe es versucht aber komme nur bis zur server auswahl und nicht weiter er erstellt mir einen error log
2016/ 9/15 10:03:50 SendPlayerList::Inventory : << IndexItem Spinat, 5430792
2016/ 9/15 10:03:50 Inventory = 5430792,0,504,0,(null),592127848,1,0,9000000,0,0,0 ,-1219125403,0,0,0,0,0/5430792,1,60990,0,(null),592128032,100,0,-1,0,0,2,2023957122,0,0,0,0,0/5430792,2,4805,0,(null),592128216,5,0,0,0,0,0,-272156437,0,0,0,0,0/5430792,3,10270,0,(null),592128400,1,0,-1,0,0,2,-782215254,0,0,0,0,0/5430792,4,60994,0,(null),592128584,4,0,-1,0,0,2,-146154674,0,0,0,0,0/5430792,5,60990,0,(null),592128768,25,0,-1,0,0,2,932729967,0,0,0,0,0/5430792,6,60989,0,(null),592128952,1,0,-1,0,0,2,-1838156420,0,0,0,0,0/5430792,7,60987,0,(null),592129136,5,0,-1,0,0,2,-799048187,0,0,0,0,0/5430792,8,60985,0,(null),592129320,4,0,-1,0,0,2,-1913889190,0,0,0,0,0/5430792,9,26765,0,(null),592129504,2,0,-1,0,0,2,-1968023642,0,0,0,0,0/5430792,10,21068,0,(null),592129688,1,0,-1,0,0,2,595914088,0,0,0,0,0/5430792,11,20125,0,(null),592129872,1,0,-1,0,0,0,1285732640,0,0,0,0,0/5430792,12,26557,0,(null),592130056,1,0,-1,0,0,2,2016890779,0,0,0,0,0/5430792,13,26331,0,(null),592130240,3,0,-1,0,0,2,-156217544,0,0,0,0,0/5430792,14,20038,0,(null),592130424,10,0,-1,0,0,2,-1265556687,0,0,0,0,0/5430792,15,20149,0,(null),592130608,1,0,7200000,0, 0,2,-1112425089,0,0,0,0,0/5430792,16,60982,0,(null),592130792,101,0,-1,0,0,0,426158180,0,0,0,0,0/5430792,22,26456,0,(null),592131896,9979,0,-1,0,0,0,-861843651,0,0,0,0,0/5430792,38,26528,0,(null),592134840,9999,0,-1,0,0,0,169206225,0,0,0,0,0/5430792,39,26528,0,(null),592135024,9999,0,-1,0,0,0,-1327333806,0,0,0,0,0/5430792,40,26528,0,(null),592135208,9999,0,-1,0,0,0,376806988,0,0,0,0,0/5430792,41,26528,0,(null),592135392,9999,0,-1,0,0,0,-1652824498,0,0,0,0,0/5430792,42,508,0,(null),592135576,1,0,5850000,0,0, 0,2079131208,0,0,0,0,0/5430792,43,512,0,(null),592135760,1,0,4500000,0,0, 0,528862433,0,0,0,0,0/5430792,44,21,0,(null),592135944,1,0,7200000,0,0,0 ,-949290490,0,0,0,0,0/5430792,45,26681,0,(null),592136128,1,0,-1,0,0,3,-317034674,0,0,0,0,0/$
2016/ 9/15 10:03:50 Inventory = 5430792,0,504,0,(null),592127848,1,0,9000000,0,0,0 ,-1219125403,0,0,0,0,0/5430792,1,60990,0,(null),592128032,100,0,-1,0,0,2,2023957122,0,0,0,0,0/5430792,2,4805,0,(null),592128216,5,0,0,0,0,0,-272156437,0,0,0,0,0/5430792,3,10270,0,(null),592128400,1,0,-1,0,0,2,-782215254,0,0,0,0,0/5430792,4,60994,0,(null),592128584,4,0,-1,0,0,2,-146154674,0,0,0,0,0/5430792,5,60990,0,(null),592128768,25,0,-1,0,0,2,932729967,0,0,0,0,0/5430792,6,60989,0,(null),592128952,1,0,-1,0,0,2,-1838156420,0,0,0,0,0/5430792,7,60987,0,(null),592129136,5,0,-1,0,0,2,-799048187,0,0,0,0,0/5430792,8,60985,0,(null),592129320,4,0,-1,0,0,2,-1913889190,0,0,0,0,0/5430792,9,26765,0,(null),592129504,2,0,-1,0,0,2,-1968023642,0,0,0,0,0/5430792,10,21068,0,(null),592129688,1,0,-1,0,0,2,595914088,0,0,0,0,0/5430792,11,20125,0,(null),592129872,1,0,-1,0,0,0,1285732640,0,0,0,0,0/5430792,12,26557,0,(null),592130056,1,0,-1,0,0,2,2016890779,0,0,0,0,0/5430792,13,26331,0,(null),592130240,3,0,-1,0,0,2,-156217544,0,0,0,0,0/5430792,14,20038,0,(null),592130424,10,0,-1,0,0,2,-1265556687,0,0,0,0,0/5430792,15,20149,0,(null),592130608,1,0,7200000,0, 0,2,-1112425089,0,0,0,0,0/5430792,16,60982,0,(null),592130792,101,0,-1,0,0,0,426158180,0,0,0,0,0/5430792,22,26456,0,(null),592131896,9979,0,-1,0,0,0,-861843651,0,0,0,0,0/5430792,38,26528,0,(null),592134840,9999,0,-1,0,0,0,169206225,0,0,0,0,0/5430792,39,26528,0,(null),592135024,9999,0,-1,0,0,0,-1327333806,0,0,0,0,0/5430792,40,26528,0,(null),592135208,9999,0,-1,0,0,0,376806988,0,0,0,0,0/5430792,41,26528,0,(null),592135392,9999,0,-1,0,0,0,-1652824498,0,0,0,0,0/5430792,42,508,0,(null),592135576,1,0,5850000,0,0, 0,2079131208,0,0,0,0,0/5430792,43,512,0,(null),592135760,1,0,4500000,0,0, 0,528862433,0,0,0,0,0/5430792,44,21,0,(null),592135944,1,0,7200000,0,0,0 ,-949290490,0,0,0,0,0/5430792,45,26681,0,(null),592136128,1,0,-1,0,0,3,-317034674,0,0,0,0,0/$
leider komme ich nicht weiter und hoffe ihr könntet mir dabei weiterhelfen danke im vorraus






