DragonNest/Server/ServerCommon/DNUserSendManager.cpp
2024-12-19 09:48:26 +08:00

10735 lines
No EOL
365 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "StdAfx.h"
#include "DNUserSendManager.h"
#include "DNGameDataManager.h"
#include "Log.h"
#include "Util.h"
#include "DNWorldUserState.h"
#include "DNDBConnectionManager.h"
#include "DNLogConnection.h"
#include "DNUserSession.h"
#include "DNGuildSystem.h"
#include "DNDBConnection.h"
#include <bitset>
#include "DNEvent.h"
#if defined(_VILLAGESERVER)
#include "DNFieldDataManager.h"
#include "DNPvPRoom.h"
#include "DNLadderRoom.h"
#include "DNLadderSystemManager.h"
extern TVillageConfig g_Config;
#include "DNGuildWarManager.h"
#include "DNGuildVillage.h"
#if defined(PRE_ADD_DWC)
#include "DNDWCSystem.h"
#include "DNDWCTeam.h"
#endif
#elif defined(_GAMESERVER) // #if defined(_VILLAGESERVER)
#include "DnGameRoom.h"
#include "DNUserTcpConnection.h"
extern TGameConfig g_Config;
#include "DNMasterConnectionManager.h"
#endif // #if defined(_VILLAGESERVER)
#include "MasterSystemCacheRepository.h"
#if defined( PRE_ADD_SECONDARY_SKILL )
#include "SecondarySkillRecipe.h"
#endif // #if defined( PRE_ADD_SECONDARY_SKILL )
#include "DNGesture.h"
#include "DNPeriodQuestSystem.h"
#include "TimeSet.h"
#include "DNGuildRecruitCacheRepository.h"
#if defined (PRE_ADD_BESTFRIEND)
#include "DNBestFriend.h"
#endif
CDNUserSendManager::CDNUserSendManager(CDNUserSession *pUserSession)
{
m_pSession = pUserSession;
}
CDNUserSendManager::~CDNUserSendManager(void)
{
}
// System
#if defined(_CH)
void CDNUserSendManager::SendFCMState(int nOnlineMin)
{
SCFCMState State = { 0, };
State.nOnlineMin = nOnlineMin;
m_pSession->AddSendData(SC_SYSTEM, eSystem::SC_CHN_FCM, (char*)&State, sizeof(SCFCMState));
}
#endif // _CH
#if defined(_GPK)
void CDNUserSendManager::SendGPKCode()
{
#if defined( _GAMESERVER )
if( m_pSession->GetTcpConnection() && m_pSession->GetTcpConnection()->GetActive() )
#elif defined( _VILLAGESERVER )
if( m_pSession && m_pSession->GetActive() )
#endif
{
if(m_pSession->m_pCode == NULL || m_pSession->m_nCodeLen < 0 || m_pSession->m_nCodeLen > GPKCODELENMAX)
{
m_pSession->DetachConnection(L"GPKCode LoadFail\n");
g_Log.Log(LogType::_GPKERROR, m_pSession, L"SendGPKCode() m_pSession->m_nCodeLen\n");
return;
}
SCGPKCode GPKCode;
memset(&GPKCode, 0, sizeof(SCGPKCode));
if(m_pSession->m_pCode == NULL)
g_Log.Log(LogType::_GPKERROR, m_pSession, L"SendGPKCode() m_pSession->m_pCode\n");
GPKCode.nCodeLen = m_pSession->m_nCodeLen;
memcpy(GPKCode.Code, m_pSession->m_pCode, m_pSession->m_nCodeLen);
m_pSession->AddSendData(SC_SYSTEM, eSystem::SC_CHN_GPKCODE, (char*)&GPKCode, sizeof(int) +(sizeof(BYTE) * m_pSession->m_nCodeLen));
m_pSession->SetCheckGPKTick(timeGetTime());
}
else
{
//<2F>뷫 code<64><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<>̹<EFBFBD><CCB9><EFBFBD> <20><>Ÿ<EFBFBD>̹<EFBFBD><CCB9>Դϴ<D4B4>. <20>ٵ<EFBFBD> <20><><EFBFBD><20>Ⱥ<EFBFBD><C8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̰<EFBFBD><CCB0><EFBFBD><EFBFBD><EFBFBD>? Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20>α׸<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
//<2F><><EFBFBD><EFBFBD><E2BFA1> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ȴٸ<C8B4> <20><><EFBFBD><EFBFBD> SendGPKData<74><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
m_pSession->DetachConnection(L"GPKCode SendError\n");
g_Log.Log(LogType::_FILELOG, L"SendGPKCode() SendError\n");
}
}
void CDNUserSendManager::SendGPKData()
{
#if defined( PRE_ADD_SECURITY_UPDATEFLAG )
if( m_pSession->GetSecurityUpdateFlag() == false )
return;
#endif
#if defined( _GAMESERVER )
if( m_pSession->GetTcpConnection() && m_pSession->GetTcpConnection()->GetActive() )
#elif defined( _VILLAGESERVER )
if( m_pSession && m_pSession->GetActive() )
#endif
{
SCGPKData packet;
memset(&packet, 0, sizeof(SCGPKData));
bool bCheck = true;
if(m_pSession->GetGPKRecvTick() > 0)
{
if(m_pSession->GetGPKRespondErr())
{
return;
}
else
{
m_pSession->SetGPKRespondErr(true);
bCheck = false;
}
}
_strcpy(packet.Data, _countof(packet.Data), "ServerCheck!!", (int)strlen("ServerCheck!!"));
if(!g_Config.pDynCode->Encode((unsigned char*)&packet.Data, GPKDATALENMAX, m_pSession->m_nCodeIndex)){
m_pSession->DetachConnection(L"GetAuthData GetData NULL\n");
g_Log.Log(LogType::_GPKERROR, m_pSession, L"SendGPKData Encode Error!!\r\n", m_pSession->GetAccountDBID(), m_pSession->GetCharacterDBID(), m_pSession->GetSessionID());
return;
}
m_pSession->AddSendData(SC_SYSTEM, eSystem::SC_CHN_GPKDATA, (char*)&packet, sizeof(packet));
}
}
void CDNUserSendManager::SendGPKAuthData()
{
#if defined( _GAMESERVER )
if( m_pSession->GetTcpConnection() && m_pSession->GetTcpConnection()->GetActive() )
#elif defined( _VILLAGESERVER )
if( m_pSession && m_pSession->GetActive() )
#endif
{
if(!g_Config.pGpkCmd)
{
g_Log.Log(LogType::_ERROR, L"pGPK Data Null\n");
return;
}
SCGPKAuthData GPKData;
memset(&GPKData, 0, sizeof(SCGPKAuthData));
const unsigned char *p = NULL;
int nLen = g_Config.pGpkCmd->GetAuthData(&p, NULL, NULL);
if(p == NULL)
{
#if defined( _GAMESERVER )
m_pSession->DetachConnection(L"GetAuthData GetData NULL\n");
#elif defined( _VILLAGESERVER )
m_pSession->DetachConnection(L"GetAuthData GetData NULL\n");
#endif
g_Log.Log(LogType::_ERROR, L"GetAuthData GetData Null\n");
return;
}
memcpy(GPKData.Data, p, sizeof(GPKData.Data));
GPKData.nLen = nLen;
m_pSession->AddSendData(SC_SYSTEM, eSystem::SC_CHN_GPKAUTHDATA, (char*)&GPKData, sizeof(SCGPKAuthData));
}
}
#endif // _HSHIELD
void CDNUserSendManager::Send( int iMainCmd, int iSubCmd, char* pData, int iLen )
{
if( !m_pSession )
return;
m_pSession->AddSendData( iMainCmd, iSubCmd, pData, iLen );
}
#if defined(PRE_MOD_DUPLICATION_LOGIN_MES)
void CDNUserSendManager::SendCompleteDetachMsg(int nRetCode, const WCHAR * pwszDetachReason, bool IsDisConnectByClient)
#else // #if defined(PRE_MOD_DUPLICATION_LOGIN_MES)
void CDNUserSendManager::SendCompleteDetachMsg(int nRetCode, const WCHAR * pwszDetachReason)
#endif // #if defined(PRE_MOD_DUPLICATION_LOGIN_MES)
{
SCDetachMessage packet;
memset(&packet, 0, sizeof(SCDetachMessage));
packet.nRetCode = nRetCode;
#if defined(PRE_MOD_DUPLICATION_LOGIN_MES)
packet.bDisConnectByClient = IsDisConnectByClient;
#endif // #if defined(PRE_MOD_DUPLICATION_LOGIN_MES)
if (!m_pSession)
return;
m_pSession->AddSendData(SC_SYSTEM, eSystem::SC_DETACHCONNECTION_MSG, (char*)&packet, sizeof(packet));
#ifdef _GAMESERVER
if( m_pSession->GetTcpConnection() )
m_pSession->GetTcpConnection()->DelayDetachConnection(const_cast<wchar_t*>(pwszDetachReason));
#else
m_pSession->DelayDetachConnection(const_cast<wchar_t*>(pwszDetachReason));
#endif
}
void CDNUserSendManager::SendConnectVillage(int nRet, int nAttr, bool bWithOutLoading )
{
SCConnectVillage ConnectVillage;
memset(&ConnectVillage, 0, sizeof(SCConnectVillage));
ConnectVillage.nRet = nRet;
_strcpy(ConnectVillage.szServerVersion, _countof(ConnectVillage.szServerVersion), g_Config.szVersion, (int)strlen(g_Config.szVersion));
ConnectVillage.nChannelAttr = nAttr;
ConnectVillage.cWithoutLoading = bWithOutLoading == true ? 1 : 0;
m_pSession->AddSendData(SC_SYSTEM, eSystem::SC_CONNECTVILLAGE, (char*)&ConnectVillage, sizeof(ConnectVillage));
}
void CDNUserSendManager::SendGameInfo( GameTaskType::eType GameTaskType, BYTE cReqGameIDType, ULONG nIP, USHORT nPort, USHORT nTcpPort, UINT nAccountDBID, INT64 biCertifyingKey)
{
SCGameInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.GameTaskType = GameTaskType;
TxPacket.cReqGameIDType = cReqGameIDType;
TxPacket.nGameServerIP = nIP;
TxPacket.nGameServerPort = nPort;
TxPacket.nGameServerTcpPort = nTcpPort;
TxPacket.nAccountDBID = nAccountDBID;
TxPacket.biCertifyingKey = biCertifyingKey;
m_pSession->AddSendData( SC_SYSTEM, eSystem::SC_GAMEINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
void CDNUserSendManager::SendReConnectReq()
{
m_pSession->AddSendData(SC_SYSTEM, eSystem::SC_RECONNECT_REQ, NULL, 0);
}
void CDNUserSendManager::SendReconnectLogin(int nRet, UINT nAccountDBID, INT64 biCertifyingKey)
{
SCReconnectLogin Reconnect = { 0, };
Reconnect.nRet = nRet;
Reconnect.nAccountDBID = nAccountDBID;
Reconnect.biCertifyingKey = biCertifyingKey;
m_pSession->AddSendData(SC_SYSTEM, eSystem::SC_RECONNECTLOGIN, (char*)&Reconnect, sizeof(SCReconnectLogin));
}
void CDNUserSendManager::SendCountDownMsg(bool bIsStart, int nCountTime, UINT nCode, BYTE msgboxType)
{
SCCountDownMsg packet;
memset(&packet, 0, sizeof(packet));
packet.cIsStart = bIsStart == true ? 1 : 0;
packet.nCountTime = nCountTime;
packet.nCode = nCode;
packet.msgboxType = msgboxType;
m_pSession->AddSendData(SC_SYSTEM, eSystem::SC_COUNTDOWNMSG, (char*)&packet, sizeof(packet));
}
#if defined(PRE_ADD_VIP)
void CDNUserSendManager::SendVIPAutomaticPay(bool bAuto)
{
SCVIPAutomaticPay System;
System.bAutomaticPay = bAuto;
m_pSession->AddSendData(SC_SYSTEM, eSystem::SC_VIPAUTOMATICPAY, (char*)&System, sizeof(System));
}
#endif // #if defined(PRE_ADD_VIP)
// Char
void CDNUserSendManager::SendMapInfo(UINT nMapIndex, BYTE cMapArrayIndex, BYTE cEnviIndex, BYTE cEnviArrayIndex, int nChannelID, int nChannelIdx, int nMeritID )
{
SCMapInfo MapInfo;
memset(&MapInfo, 0, sizeof(SCMapInfo));
MapInfo.nMapIndex = nMapIndex;
MapInfo.cMapArrayIndex = cMapArrayIndex;
MapInfo.cEnviIndex = cEnviIndex;
MapInfo.cEnviArrayIndex = cEnviArrayIndex;
MapInfo.nChannelID = nChannelID;
MapInfo.wChannelIdx = nChannelIdx;
if(nMeritID > 0)
{
const TMeritInfo * pMerit = g_pDataManager->GetMeritInfo(nMeritID);
if(pMerit)
memcpy(&MapInfo.MeritInfo, pMerit, sizeof(TMeritInfo));
}
m_pSession->AddSendData(SC_CHAR, eChar::SC_MAPINFO, (char*)&MapInfo, sizeof(MapInfo));
}
void CDNUserSendManager::SendEnter(CDNUserSession *pSession)
{
SCEnter Enter;
memset(&Enter, 0, sizeof(SCEnter));
#if defined(_VILLAGESERVER)
Enter.Position.x = (float)(pSession->GetCurrentPos().nX / 1000.f);
Enter.Position.y = (float)(pSession->GetCurrentPos().nY / 1000.f);
Enter.Position.z = (float)(pSession->GetCurrentPos().nZ / 1000.f);
Enter.fRotate = pSession->GetRotate();
if( !pSession->m_bFirst )
g_pFieldDataManager->GetStartPositionAngle( pSession->GetMapIndex(), pSession->GetLastVillageGateNo(), Enter.fRotate );
#elif defined(_GAMESERVER)
Enter.Position.x = (float)(pSession->GetPosX() / 1000.f);
Enter.Position.y = (float)(pSession->GetPosY() / 1000.f);
Enter.Position.z = (float)(pSession->GetPosZ() / 1000.f);
Enter.fRotate = 0;
#endif
Enter.nVehicleObjectID = pSession->m_nVehicleObjectID;
memcpy(Enter.wszCharacterName, pSession->GetCharacterName(), sizeof(Enter.wszCharacterName));
Enter.cClassID = pSession->GetClassID();
Enter.cAccountLevel = pSession->GetAccountLevel(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(&Enter.cJobArray, pSession->GetStatusData()->cJobArray, sizeof(Enter.cJobArray));
Enter.cLevel = pSession->GetLevel();
Enter.nExp = pSession->GetExp();
Enter.nCoin = pSession->GetCoin();
Enter.cRebirthCoin = pSession->GetRebirthCoin();
Enter.cPCBangRebirthCoin = pSession->GetPCBangRebirthCoin();
Enter.cPartyState = 1;
Enter.wSkillPoint[DualSkill::Type::Primary] = pSession->GetSkillPoint(DualSkill::Type::Primary);
Enter.wSkillPoint[DualSkill::Type::Secondary] = pSession->GetSkillPoint(DualSkill::Type::Secondary);
Enter.nDefaultBody = pSession->GetDefaultBody();
Enter.nDefaultLeg = pSession->GetDefaultLeg();
Enter.nDefaultHand = pSession->GetDefaultHand();
Enter.nDefaultFoot = pSession->GetDefaultFoot();
Enter.dwHairColor = pSession->GetHairColor();
Enter.dwEyeColor = pSession->GetEyeColor();
Enter.dwSkinColor = pSession->GetSkinColor();
Enter.nAppellation = pSession->GetSelectAppellation();
Enter.nCoverAppellation = pSession->GetCoverAppellation();
Enter.wFatigue = pSession->GetFatigue();
Enter.wWeekFatigue = pSession->GetWeeklyFatigue();
Enter.wPCBangFatigue = pSession->GetPCBangFatigue();
Enter.wEventFatigue = pSession->GetEventFatigue();
Enter.wMaxEventFatigue = pSession->GetMaxEventFatigue();
Enter.wRebirthCashCoin = pSession->GetRebirthCashCoin();
#if defined(PRE_ADD_VIP)
Enter.bVIP = pSession->IsVIP();
Enter.cVIPRebirthCoin = pSession->GetVIPRebirthCoin();
Enter.nVIPPoint = pSession->m_nVIPTotalPoint;
Enter.wVIPFatigue = pSession->GetVIPFatigue();
Enter.tVIPExpirationDate = pSession->m_tVIPEndDate;
Enter.bVIPAutomaticPay = pSession->IsVIPAutoPay();
#endif // #if defined(PRE_ADD_VIP)
memcpy(Enter.cViewCashEquipBitmap, pSession->GetViewCashEquipBitmap(), sizeof(Enter.cViewCashEquipBitmap));
// TPvPGroup
memcpy( &Enter.sPvPInfo, pSession->GetPvPData(), sizeof(TPvPGroup) );
// Guild
Enter.GuildSelfView = pSession->GetGuildSelfView();
#if defined(_VILLAGESERVER)
if(g_pGuildWarManager)
{
Enter.cCurrentGuildWarEventStep = g_pGuildWarManager->GetStepIndex();
Enter.wCurrentGuldWarScheduleID = g_pGuildWarManager->GetScheduleID();
}
else
_DANGER_POINT();
#endif // #if defined(_VILLAGESERVER)
Enter.cSkillPage = pSession->GetSkillPage();
Enter.cAge = pSession->GetAge();
#if defined( PRE_ADD_NAMEDITEM_SYSTEM )
TItem* NameItem = pSession->GetItem()->GetItemRank(ITEMRANK_SSS);
if(NameItem)
Enter.nNamedItemID = NameItem->nItemID;
#endif
m_pSession->AddSendData( SC_CHAR, eChar::SC_ENTER, (char*)&Enter, sizeof(SCEnter) );
}
void CDNUserSendManager::SendEnterUser(CDNUserSession *pSession)
{
#if defined(_VILLAGESERVER)
SCEnterUser EnterUser;
memset(&EnterUser, 0, sizeof(SCEnterUser));
EnterUser.nSessionID = pSession->GetSessionID();
EnterUser.nVehicleObjectID = pSession->m_nVehicleObjectID;
memcpy(EnterUser.wszCharacterName, pSession->GetCharacterName(), sizeof(EnterUser.wszCharacterName));
EnterUser.bHide = pSession->GetHide();
EnterUser.cAccountLevel = pSession->GetAccountLevel();
EnterUser.cClassID = pSession->GetClassID();
EnterUser.cLevel = pSession->GetLevel();
EnterUser.cPvPLevel = pSession->GetPvPData()->cLevel;
EnterUser.cJob = pSession->GetUserJob();
EnterUser.cPartyState = 1;
EnterUser.Position.x = (float)(pSession->GetCurrentPos().nX / 1000.f);
EnterUser.Position.y = (float)(pSession->GetCurrentPos().nY / 1000.f);
EnterUser.Position.z = (float)(pSession->GetCurrentPos().nZ / 1000.f);
EnterUser.fRotate = pSession->GetRotate();
EnterUser.bBattleMode = pSession->IsBattleMode();
EnterUser.nDefaultBody = pSession->GetDefaultBody();
EnterUser.nDefaultLeg = pSession->GetDefaultLeg();
EnterUser.nDefaultHand = pSession->GetDefaultHand();
EnterUser.nDefaultFoot = pSession->GetDefaultFoot();
EnterUser.dwHairColor = pSession->GetHairColor();
EnterUser.dwEyeColor = pSession->GetEyeColor();
EnterUser.dwSkinColor = pSession->GetSkinColor();
EnterUser.nAppellation = pSession->GetSelectAppellation();
EnterUser.nCoverAppellation = pSession->GetCoverAppellation();
EnterUser.GuildSelfView = pSession->GetGuildSelfView();
memcpy(EnterUser.cViewCashEquipBitmap, pSession->GetViewCashEquipBitmap(), sizeof(EnterUser.cViewCashEquipBitmap));
#if defined(PRE_ADD_VIP)
EnterUser.bVIP = pSession->IsVIP();
#endif // #if defined(PRE_ADD_VIP)
if( pSession->GetItem()->GetVehicleEquip() )
EnterUser.VehicleEquip = *(pSession->GetItem()->GetVehicleEquip());
if( pSession->GetItem()->GetPetEquip() )
EnterUser.PetEquip = *(pSession->GetItem()->GetPetEquip());
EnterUser.bIsPartyLeader = (pSession->GetPartyID() > 0 && pSession->m_boPartyLeader) ? true : false;
#if defined( PRE_ADD_NAMEDITEM_SYSTEM )
// Ŭ<>󿡼<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD> <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>ϸ鼭 <20><><EFBFBD><EFBFBD><EFBFBD>ֱ⵵ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϱ<CFB1><E2B6A7><EFBFBD><EFBFBD> <20>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><20>ƴ<EFBFBD> <20>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̱<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD>
TEffectSkillData* EffectSkill = pSession->GetItem()->GetEffectSkillItem( EffectSkillNameSpace::SearchType::ItemType, ITEMTYPE_SOURCE);
if( EffectSkill )
EnterUser.nSourceItemID = EffectSkill->nItemID;
TItem* NameItem = pSession->GetItem()->GetItemRank(ITEMRANK_SSS);
if(NameItem)
EnterUser.nNamedItemID = NameItem->nItemID;
#else
EnterUser.nSourceItemID = pSession->GetItem()->GetSource().nItemID;
#endif
#if defined (PRE_ADD_BESTFRIEND)
EnterUser.biBestFriendItemSerial = pSession->GetBestFriend()->GetInfo().biItemSerial;
WCHAR* pwszBFName = pSession->GetBestFriend()->GetInfo().wszName;
if (pwszBFName)
_wcscpy(EnterUser.wszBestFriendName, _countof(EnterUser.wszBestFriendName), pwszBFName, (int)wcslen(pwszBFName));
#endif
#if defined(PRE_ADD_TRANSFORM_POTION)
EnterUser.nTransformID = pSession->GetTransformID();
#endif //#if defined(PRE_ADD_TRANSFORM_POTION)
#if defined(PRE_ADD_DWC)
if(pSession->IsDWCCharacter() && pSession->GetDWCTeamID() > 0 && g_pDWCTeamManager->bIsIncludeDWCVillage())
{
const WCHAR * pDWCTeamName = g_pDWCTeamManager->GetDWCTeamName(pSession->GetDWCTeamID());
if(pDWCTeamName)
_wcscpy( EnterUser.wszDWCTeamName, _countof(EnterUser.wszDWCTeamName), pDWCTeamName, (int)wcslen(pDWCTeamName) );
}
#endif
#if defined(PRE_ADD_TALISMAN_SYSTEM)
pSession->GetItem()->GetEquipList(EnterUser.cCount, EnterUser.cCashCount, EnterUser.cGlyphCount, EnterUser.cTalismanCount, EnterUser.EquipArray);
m_pSession->AddSendData(SC_CHAR, eChar::SC_ENTERUSER, (char*)&EnterUser, (sizeof(SCEnterUser) - sizeof(EnterUser.EquipArray) +(sizeof(TItemInfo) *( EnterUser.cCount + EnterUser.cCashCount + EnterUser.cGlyphCount + EnterUser.cTalismanCount ) )));
#else
pSession->GetItem()->GetEquipList(EnterUser.cCount, EnterUser.cCashCount, EnterUser.cGlyphCount, EnterUser.EquipArray);
m_pSession->AddSendData(SC_CHAR, eChar::SC_ENTERUSER, (char*)&EnterUser, (sizeof(SCEnterUser) - sizeof(EnterUser.EquipArray) +(sizeof(TItemInfo) *( EnterUser.cCount + EnterUser.cCashCount + EnterUser.cGlyphCount ) )));
#endif
#endif // #if defined(_VILLAGESERVER)
}
void CDNUserSendManager::SendLeaveUser(UINT nSessionID, char cType, int nAccountLevel)
{
SCLeaveUser Leave;
memset(&Leave, 0, sizeof(SCLeaveUser));
Leave.nSessionID = nSessionID;
Leave.cLeaveType = cType;
Leave.cAccountLevel = nAccountLevel;
m_pSession->AddSendData(SC_CHAR, eChar::SC_LEAVEUSER, (char*)&Leave, sizeof(SCLeaveUser));
}
void CDNUserSendManager::SendEnterNpc(UINT nNpcObjectID, int nNpcID, float x, float y, float z, float fRotate)
{
SCEnterNpc EnterNpc;
memset(&EnterNpc, 0, sizeof(SCEnterNpc));
EnterNpc.nNpcObjectID = nNpcObjectID;
EnterNpc.nNpcID = nNpcID;
EnterNpc.Position.x = x;
EnterNpc.Position.y = y;
EnterNpc.Position.z = z;
EnterNpc.fRotate = fRotate;
m_pSession->AddSendData(SC_CHAR, eChar::SC_ENTERNPC, (char*)&EnterNpc, sizeof(SCEnterNpc));
}
void CDNUserSendManager::SendLeaveNpc(UINT nObjectID)
{
SCLeaveNpc Leave;
memset(&Leave, 0, sizeof(SCLeaveNpc));
Leave.nObjectID = nObjectID;
m_pSession->AddSendData(SC_CHAR, eChar::SC_LEAVENPC, (char*)&Leave, sizeof(SCLeaveNpc));
}
void CDNUserSendManager::SendEnterPropNpc(UINT nNpcObjectID, int nPropUniqueID)
{
SCEnterPropNpc EnterNpc;
memset(&EnterNpc, 0, sizeof(SCEnterPropNpc));
EnterNpc.nNpcObjectID = nNpcObjectID;
EnterNpc.nPropUniqueID = nPropUniqueID;
m_pSession->AddSendData(SC_CHAR, eChar::SC_ENTERPROPNPC, (char*)&EnterNpc, sizeof(SCEnterPropNpc));
}
void CDNUserSendManager::SendLeavePropNpc(int nPropUniqueID)
{
SCLeavePropNpc Leave;
memset(&Leave, 0, sizeof(SCLeavePropNpc));
Leave.nPropUniqueID = nPropUniqueID;
m_pSession->AddSendData(SC_CHAR, eChar::SC_LEAVEPROPNPC, (char*)&Leave, sizeof(SCLeavePropNpc));
}
void CDNUserSendManager::SendQuickSlotList(TQuickSlot *QuickSlotArray)
{
SCQuickSlotList Slot;
memset(&Slot, 0, sizeof(SCQuickSlotList));
int nCount = 0;
for (int i = 0; i < QUICKSLOTMAX; i++){
if(QuickSlotArray[i].nID <= 0) continue;
Slot.QuickSlot[nCount].cIndex = i;
Slot.QuickSlot[nCount].cType = QuickSlotArray[i].cType;
Slot.QuickSlot[nCount].nID = QuickSlotArray[i].nID;
nCount++;
}
Slot.cSlotCount = nCount;
int nSize = sizeof(BYTE) +( sizeof(TQuickSlotEx) * nCount );
m_pSession->AddSendData(SC_CHAR, eChar::SC_QUICKSLOTLIST, (char*)&Slot, nSize);
}
void CDNUserSendManager::SendFatigueResult(UINT nSessionID, int iResult)
{
SCFatigue Fatigue = { 0, };
Fatigue.nSessionID = nSessionID;
Fatigue.iResult = iResult;
m_pSession->AddSendData(SC_CHAR, eChar::SC_FATIGUE, (char*)&Fatigue, sizeof(SCFatigue));
}
void CDNUserSendManager::SendFatigue(UINT nSessionID, short wFatigue, short wWeekFatigue, short wPCBangFatigue, short wEventFatigue, short wVIPFatigue)
{
SCFatigue Fatigue = { 0, };
Fatigue.nSessionID = nSessionID;
Fatigue.wFatigue = wFatigue;
Fatigue.wWeekFatigue = wWeekFatigue;
Fatigue.wPCBangFatigue = wPCBangFatigue;
Fatigue.wEventFatigue = wEventFatigue;
#if defined(PRE_ADD_VIP)
Fatigue.wVIPFatigue = wVIPFatigue;
#endif // #if defined(PRE_ADD_VIP)
m_pSession->AddSendData(SC_CHAR, eChar::SC_FATIGUE, (char*)&Fatigue, sizeof(SCFatigue));
}
void CDNUserSendManager::SendHide(UINT nSessionID, bool bHide)
{
SCHide Hide = { 0, };
Hide.nSessionID = nSessionID;
Hide.bHide = bHide;
m_pSession->AddSendData(SC_CHAR, eChar::SC_HIDE, (char*)&Hide, sizeof(SCHide));
}
void CDNUserSendManager::SendPCBang(char cPCBangGrade, MAPCBangResult *pPacket)
{
SCPCBang PCBang = { 0, };
PCBang.cPCBangGrade = cPCBangGrade;
if (pPacket){
#if defined(_KR)
PCBang.cAuthorizeType = pPacket->cAuthorizeType;
PCBang.nArgument = pPacket->nArgument;
PCBang.nShutdownTime = pPacket->nShutdownTime;
#endif // #if defined(_KR)
#if defined(_KRAZ)
PCBang.Shutdown = pPacket->ShutdownData;
#endif // #if defined(_KRAZ)
}
m_pSession->AddSendData(SC_CHAR, eChar::SC_PCBANG, (char*)&PCBang, sizeof(SCPCBang));
}
void CDNUserSendManager::SendNestClear(TNestClearData *NestClearList)
{
SCNestClear Nest = { 0, };
Nest.cCount = 0;
for (int i = 0; i < NESTCLEARMAX; i++){
if (NestClearList[i].nMapIndex <= 0) continue;
Nest.NestClear[Nest.cCount] = NestClearList[i];
Nest.cCount++;
}
int nSize = sizeof(SCNestClear) - sizeof(Nest.NestClear) +(sizeof(TNestClearData) * Nest.cCount);
m_pSession->AddSendData(SC_CHAR, eChar::SC_NESTCLEAR, (char*)&Nest, nSize);
}
void CDNUserSendManager::SendUpdateNestClear(TNestClearData *pNestData)
{
SCUpdateNestClear Nest = { 0, };
if (pNestData)
Nest.Update = *pNestData;
m_pSession->AddSendData(SC_CHAR, eChar::SC_UPDATENESTCLEAR, (char*)&Nest, sizeof(SCUpdateNestClear));
}
void CDNUserSendManager::SendKeySetting( TKeySetting* pKeySetting )
{
SCGameOptionSelectKeySetting TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.bIsDefault = true;
for( UINT i=0 ;i<sizeof(TKeySetting) ; ++i )
{
char* pBuf = reinterpret_cast<char*>(pKeySetting)+i;
if( *pBuf != 0 )
{
TxPacket.bIsDefault = false;
break;
}
}
int iSize = sizeof(TxPacket);
if( !TxPacket.bIsDefault )
memcpy( &TxPacket.sKeySetting, pKeySetting, sizeof(TKeySetting) );
else
iSize = sizeof(TxPacket)-sizeof(TxPacket.sKeySetting);
m_pSession->AddSendData( SC_GAMEOPTION, eGameOption::SC_GAMEOPTION_SELECT_KEYSETTING, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNUserSendManager::SendPadSetting( TPadSetting* pPadSetting )
{
SCGameOptionSelectPadSetting TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.bIsDefault = true;
for( UINT i=0 ;i<sizeof(TPadSetting) ; ++i )
{
char* pBuf = reinterpret_cast<char*>(pPadSetting)+i;
if( *pBuf != 0 )
{
TxPacket.bIsDefault = false;
break;
}
}
int iSize = sizeof(TxPacket);
if( !TxPacket.bIsDefault )
memcpy( &TxPacket.sPadSetting, pPadSetting, sizeof(TPadSetting) );
else
iSize = sizeof(TxPacket)-sizeof(TxPacket.sPadSetting);
m_pSession->AddSendData( SC_GAMEOPTION, eGameOption::SC_GAMEOPTION_SELECT_PADSETTING, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNUserSendManager::SendPvPFatigueReward( int nGainExp, int nGainMedal )
{
SCPVP_FATIGUE_REWARD TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nGainExp = nGainExp;
TxPacket.nGainMedal = nGainMedal;
m_pSession->AddSendData( SC_PVP, ePvP::SC_FATIGUE_REWARD, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendPvPLadderScoreInfo( const TPvPLadderScoreInfo* pLadderScoreInfo )
{
LadderSystem::SC_SCOREINFO TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = sizeof(TxPacket)-sizeof(TxPacket.Data.LadderScore)+pLadderScoreInfo->cLadderTypeCount*sizeof(TxPacket.Data.LadderScore[0]);
if( iSize > sizeof(TxPacket) )
return;
memcpy( &TxPacket, pLadderScoreInfo, iSize );
m_pSession->AddSendData( SC_PVP, ePvP::SC_LADDER_SCOREINFO, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] SendPvPLadderScoreInfo <20><><EFBFBD><EFBFBD>" );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendPvPLadderScoreInfoByJob( TAGetListPvPLadderScoreByJob* pA )
{
LadderSystem::SC_SCOREINFO_BYJOB TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = sizeof(TxPacket)-sizeof(TxPacket.Data);
TxPacket.iRet = pA->nRetCode;
if( TxPacket.iRet == ERROR_NONE )
{
int iAddSize = sizeof(pA->Data)-sizeof(pA->Data.LadderScoreByJob)+pA->Data.cJobCount*sizeof(pA->Data.LadderScoreByJob[0]);
iSize += iAddSize;
TxPacket.Data.cJobCount = pA->Data.cJobCount;
for( int i=0 ; i<TxPacket.Data.cJobCount ; ++i )
TxPacket.Data.LadderScoreByJob[i] = pA->Data.LadderScoreByJob[i];
}
m_pSession->AddSendData( SC_PVP, ePvP::SC_LADDER_SCOREINFO_BYJOB, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] SendPvPLadderScoreInfoByJob Ret:%d", TxPacket.iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendPvPLadderPointRefresh( int iPoint )
{
LadderSystem::SC_LADDERPOINT_REFRESH TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iPoint= iPoint;
m_pSession->AddSendData( SC_PVP, ePvP::SC_LADDER_POINT_REFRESH, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] SendPvPLadderPointRefresh Point:%d", iPoint );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendPvPLadderInviteUser( int iRet, const WCHAR* pwszCharName )
{
LadderSystem::SC_INVITE TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
_wcscpy( TxPacket.wszCharName, _countof(TxPacket.wszCharName), pwszCharName, (int)wcslen(pwszCharName) );
m_pSession->AddSendData( SC_PVP, ePvP::SC_LADDER_INVITE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] SendPvPLadderInviteUser Ret:%d CharName:%s", iRet, pwszCharName );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendPvPLadderInviteConfirmReq( const WCHAR* pwszCharName, LadderSystem::MatchType::eCode MatchType, int iCurUserCount, int iAvgGradePoint )
{
LadderSystem::SC_INVITE_CONFIRM_REQ TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
_wcscpy( TxPacket.wszCharName, _countof(TxPacket.wszCharName), pwszCharName, (int)wcslen(pwszCharName) );
TxPacket.MatchType = MatchType;
TxPacket.iCurUserCount = iCurUserCount;
TxPacket.iAvgGradePoint = iAvgGradePoint;
m_pSession->AddSendData( SC_PVP, ePvP::SC_LADDER_INVITE_CONFIRM_REQ, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] SendPvPLadderInviteConfirmReq CharName:%s MatchType:%d CurUserCount:%d AvgGradePoint:%d", pwszCharName, MatchType, iCurUserCount, iAvgGradePoint );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendPvPLadderInviteConfirm( int iRet, const WCHAR* pwszCharName )
{
LadderSystem::SC_INVITE_CONFIRM TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
_wcscpy( TxPacket.wszCharName, _countof(TxPacket.wszCharName), pwszCharName, (int)wcslen(pwszCharName) );
m_pSession->AddSendData( SC_PVP, ePvP::SC_LADDER_INVITE_CONFIRM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] SendPvPLadderInviteConfirm Ret:%d CharName:%s", iRet, TxPacket.wszCharName );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendPvPLadderKickOut( int iRet )
{
LadderSystem::SC_KICKOUT TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
m_pSession->AddSendData( SC_PVP, ePvP::SC_LADDER_KICKOUT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] SendPvPLadderKickOut Ret:%d", iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendPvPGhoulScores( const TPvPGhoulScores* pGhoulSocres)
{
SCPVP_GHOUL_SCORES TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
memcpy( &TxPacket, pGhoulSocres, sizeof(SCPVP_GHOUL_SCORES));
m_pSession->AddSendData( SC_PVP, ePvP::SC_PVP_GHOULSCORES, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendPvPHolyWaterKillCount(UINT nSessionID , UINT nKillerSessionID )
{
SCPVP_HOLYWATER_KILLCOUNT TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket));
TxPacket.nSessionID = nSessionID;
TxPacket.nKillerSessionID = nKillerSessionID;
m_pSession->AddSendData( SC_PVP, ePvP::SC_PVP_HOLYWATER_KILLCOUNT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
};
#ifdef PRE_ADD_COLOSSEUM_BEGINNER
void CDNUserSendManager::SendPvPChangeChannelResult(BYTE cType, int nRetCode)
{
SCPVP_CHANGE_CHANNEL packet;
memset(&packet, 0, sizeof(SCPVP_CHANGE_CHANNEL));
packet.cType = cType;
packet.nRetCode = nRetCode;
m_pSession->AddSendData( SC_PVP, ePvP::SC_PVP_CHANGE_CHANNEL, reinterpret_cast<char*>(&packet), sizeof(packet) );
}
#endif //#ifdef PRE_ADD_COLOSSEUM_BEGINNER
// Actor
#if defined(_VILLAGESERVER)
void CDNUserSendManager::SendActorMsg(UINT nSessionID, USHORT wActorProtocol, int nSize, char *pData, TParamData* pParamData )
{
SCActorMessage ActorMsg;
memset(&ActorMsg, 0, sizeof(SCActorMessage));
ActorMsg.nSessionID = nSessionID;
if(nSize > 128) nSize = 128;
memcpy(ActorMsg.cBuf, pData, nSize);
m_pSession->AddSendData(SC_ACTOR, wActorProtocol, (char*)&ActorMsg, sizeof(UINT) + nSize, pParamData );
}
void CDNUserSendManager::SendAddExp(UINT nSessionID, int nExp, int nAddExp, int nEventBonusExp, int nPcBangExp)
{
SCActorMessage ActorMsg;
memset(&ActorMsg, 0, sizeof(SCActorMessage));
CPacketCompressStream Stream( ActorMsg.cBuf, 128 );
Stream.Write( &nExp, sizeof(int) );
Stream.Write( &nAddExp, sizeof(int) );
Stream.Write( &nEventBonusExp, sizeof(int) );
Stream.Write( &nPcBangExp, sizeof(int) );
#if defined(PRE_ADD_VIP)
int nVIPExp = 0;
Stream.Write( &nVIPExp, sizeof(int) );
#endif // #if defined(PRE_ADD_VIP)
int nPromoExp = 0;
Stream.Write( &nPromoExp, sizeof(int) );
#if defined( PRE_USA_FATIGUE )
int iPwrExp = 0;
Stream.Write( &iPwrExp, sizeof(int) );
#endif // #if defined( PRE_USA_FATIGUE )
ActorMsg.nSessionID = nSessionID;
int nSize = (USHORT)Stream.Tell();
m_pSession->AddSendData(SC_ACTOR, SC_ADDEXP, (char*)&ActorMsg, sizeof(SCActorMessage) -(USHORT)(128 - nSize));
}
void CDNUserSendManager::SendLevelUp(UINT nSessionID, int nLevel, int nExp)
{
SCActorMessage ActorMsg;
memset(&ActorMsg, 0, sizeof(SCActorMessage));
CPacketCompressStream Stream( ActorMsg.cBuf, 128 );
Stream.Write( &nLevel, sizeof(int), CPacketCompressStream::INTEGER_CHAR );
Stream.Write( &nExp, sizeof(int) );
ActorMsg.nSessionID = nSessionID;
int nSize = (USHORT)Stream.Tell();
m_pSession->AddSendData(SC_ACTOR, SC_LEVELUP, (char*)&ActorMsg, sizeof(SCActorMessage) -(USHORT)(128 - nSize));
}
#endif
void CDNUserSendManager::SendChangeJob(UINT nSessionID, int nJobID)
{
SCActorMessage ActorMsg;
memset(&ActorMsg, 0, sizeof(SCActorMessage));
CPacketCompressStream Stream( ActorMsg.cBuf, 128 );
Stream.Write( &nJobID, sizeof(int) );
ActorMsg.nSessionID = nSessionID;
int nSize = (USHORT)Stream.Tell();
m_pSession->AddSendData(SC_ACTOR, eActor::SC_CHANGEJOB, (char*)&ActorMsg, sizeof(SCActorMessage) -(USHORT)(128 - nSize));
}
void CDNUserSendManager::SendAddCoin(UINT nSessionID, INT64 nTotalCoin, INT64 nAddCoin)
{
SCActorMessage ActorMsg;
memset(&ActorMsg, 0, sizeof(SCActorMessage));
CPacketCompressStream Stream( ActorMsg.cBuf, 128 );
Stream.Write( &nTotalCoin, sizeof(INT64) );
Stream.Write( &nAddCoin, sizeof(INT64) );
ActorMsg.nSessionID = nSessionID;
int nSize = (USHORT)Stream.Tell();
m_pSession->AddSendData(SC_ACTOR, eActor::SC_ADDCOIN, (char*)&ActorMsg, sizeof(SCActorMessage) -(USHORT)(128 - nSize));
}
void CDNUserSendManager::SendGhostType( UINT nSessionID, Ghost::Type::eCode Type )
{
SCActorMessage ActorMsg;
memset(&ActorMsg, 0, sizeof(SCActorMessage));
CPacketCompressStream Stream( ActorMsg.cBuf, 128 );
Stream.Write( &Type, sizeof(Type) );
ActorMsg.nSessionID = nSessionID;
int nSize = (USHORT)Stream.Tell();
m_pSession->AddSendData( SC_ACTOR, eActor::SC_GHOST_TYPE, reinterpret_cast<char*>(&ActorMsg), sizeof(SCActorMessage) -(USHORT)(128 - nSize));
}
void CDNUserSendManager::SendUdpPing( UINT nSessionID, DWORD dwTick )
{
SCActorMessage ActorMsg;
memset(&ActorMsg, 0, sizeof(SCActorMessage));
CPacketCompressStream Stream( ActorMsg.cBuf, 128 );
Stream.Write( &dwTick, sizeof(dwTick) );
ActorMsg.nSessionID = nSessionID;
int nSize = (USHORT)Stream.Tell();
m_pSession->AddSendData( SC_ACTOR, eActor::SC_UDP_PING, reinterpret_cast<char*>(&ActorMsg), sizeof(SCActorMessage) -(USHORT)(128 - nSize));
}
// Party
void CDNUserSendManager::SendCreateParty(int nRetCode, TPARTYID PartyID, bool bIsAutoCreate, ePartyType PartyType)
{
SCCreateParty CreateParty;
memset(&CreateParty, 0, sizeof(SCCreateParty));
CreateParty.nRetCode = nRetCode;
CreateParty.PartyID = PartyID;
CreateParty.cIsAutoCreate = bIsAutoCreate == true ? 1 : 0;
CreateParty.PartyType = PartyType;
m_pSession->AddSendData(SC_PARTY, eParty::SC_CREATEPARTY, (char*)&CreateParty, sizeof(SCCreateParty));
}
void CDNUserSendManager::SendJoinParty(int nRetCode, TPARTYID PartyID, const WCHAR *pwszPartyName)
{
SCJoinParty Join;
memset(&Join, 0, sizeof(SCJoinParty));
Join.nRetCode = nRetCode;
Join.PartyID = PartyID;
if( pwszPartyName )
{
if( wcslen(pwszPartyName) >= PARTYNAMELENMAX )
{
_DANGER_POINT();
return;
}
_wcscpy(Join.wszPartyName, _countof(Join.wszPartyName), pwszPartyName, (int)wcslen(pwszPartyName));
}
m_pSession->AddSendData(SC_PARTY, eParty::SC_JOINPARTY, (char*)&Join, sizeof(SCJoinParty));
}
#if defined( PRE_WORLDCOMBINE_PARTY )
void CDNUserSendManager::SendRefreshParty(UINT nLeaderSessionID, int nCount, bool bHasVoiceChat, SPartyMemberInfo *pMemberInfo, short nRetCode, Party::Data *PartyData, int nWorldCombinePartyTableIndex)
{
SCRefreshParty packet;
memset(&packet, 0, sizeof(SCRefreshParty));
packet.nLeaderSessionID = nLeaderSessionID;
packet.cCurrentUserCount = (BYTE)nCount;
packet.cPartyMemberMax = (BYTE)PartyData->nPartyMaxCount;
packet.cUserLvLimitMin = PartyData->cMinLevel;
packet.ItemLootRule = PartyData->LootRule;
packet.ItemLootRank = PartyData->LootItemRank;
packet.cVoiceChatAvailable = bHasVoiceChat == true ? 1 : 0;
packet.nTargetMapIdx = PartyData->iTargetMapIndex;
packet.Difficulty = PartyData->TargetMapDifficulty;
packet.cPartyRefreshSubJect = (BYTE)nRetCode;
_wcscpy(packet.wszName, _countof(packet.wszName), PartyData->wszPartyName, (int)wcslen(PartyData->wszPartyName));
packet.iBitFlag = PartyData->iBitFlag;
packet.PartyType = PartyData->Type;
packet.iPassword = PartyData->iPassword;
packet.nWorldCombinePartyTableIndex = nWorldCombinePartyTableIndex;
if(nCount > 0)
memcpy(packet.Member, pMemberInfo, sizeof(SPartyMemberInfo) * nCount);
int nLen = sizeof(SCRefreshParty) - sizeof(packet.Member) +(sizeof(SPartyMemberInfo) * nCount);
m_pSession->AddSendData(SC_PARTY, eParty::SC_REFRESHPARTY, (char*)&packet, nLen);
}
#else // #if defined( PRE_WORLDCOMBINE_PARTY )
#if defined( PRE_PARTY_DB )
void CDNUserSendManager::SendRefreshParty(UINT nLeaderSessionID, const WCHAR * pName, BYTE cPartyMemberMax, BYTE cUserLvLimitMin, int nCount, TPARTYITEMLOOTRULE ItemLootRule, TITEMRANK ItemLootRank, bool bHasVoiceChat, int nTargetMapIdx, TDUNGEONDIFFICULTY Difficulty, SPartyMemberInfo *pMemberInfo, short nRetCode, ePartyType PartyType, int iBitFlag, int iPassword )
#else
void CDNUserSendManager::SendRefreshParty(UINT nLeaderSessionID, const WCHAR * pName, const WCHAR * pPass, BYTE cPartyMemberMax, BYTE cUserLvLimitMin, BYTE cUserLvLimitMax, int nCount, TPARTYITEMLOOTRULE ItemLootRule, TITEMRANK ItemLootRank, bool bHasVoiceChat, int nTargetMapIdx, TDUNGEONDIFFICULTY Difficulty, SPartyMemberInfo *pMemberInfo, short nRetCode, BYTE cIsJobDice, BYTE cPartyType)
#endif // #if defined( PRE_PARTY_DB )
{
SCRefreshParty packet;
memset(&packet, 0, sizeof(SCRefreshParty));
packet.nLeaderSessionID = nLeaderSessionID;
packet.cCurrentUserCount = (BYTE)nCount;
packet.cPartyMemberMax = cPartyMemberMax;
packet.cUserLvLimitMin = cUserLvLimitMin;
packet.ItemLootRule = ItemLootRule;
packet.ItemLootRank = ItemLootRank;
packet.cVoiceChatAvailable = bHasVoiceChat == true ? 1 : 0;
packet.nTargetMapIdx = nTargetMapIdx;
packet.Difficulty = Difficulty;
packet.cPartyRefreshSubJect = (BYTE)nRetCode;
_wcscpy(packet.wszName, _countof(packet.wszName), pName, (int)wcslen(pName));
#if defined( PRE_PARTY_DB )
packet.iBitFlag = iBitFlag;
packet.PartyType = PartyType;
packet.iPassword =iPassword;
#else
packet.cUserLvLimitMax = cUserLvLimitMax;
packet.cIsJobDice = cIsJobDice;
packet.cPartyType = cPartyType;
_wcscpy(packet.wszPass, _countof(packet.wszPass), pPass, (int)wcslen(pPass));
#endif // #if defined( PRE_PARTY_DB )
if(nCount > 0)
memcpy(packet.Member, pMemberInfo, sizeof(SPartyMemberInfo) * nCount);
int nLen = sizeof(SCRefreshParty) - sizeof(packet.Member) +(sizeof(SPartyMemberInfo) * nCount);
m_pSession->AddSendData(SC_PARTY, eParty::SC_REFRESHPARTY, (char*)&packet, nLen);
}
#endif // #if defined( PRE_WORLDCOMBINE_PARTY )
void CDNUserSendManager::SendPartyOut(int nRetCode, char cKickKind, UINT nSessionID)
{
SCPartyOut Out;
memset(&Out, 0, sizeof(SCPartyOut));
Out.nSessionID = nSessionID;
Out.nRetCode = nRetCode;
Out.cKickKind = cKickKind;
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYOUT, (char*)&Out, sizeof(SCPartyOut));
}
void CDNUserSendManager::SendKickPartymember(UINT nSessionID, int nRet)
{
SCPartyKickedMember packet;
packet.nSessionID = nSessionID;
packet.nRetCode = nRet;
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYMEMBERKICKED, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendSwapPartyLeader(UINT nSessionID, int nRetCode)
{
SCSwapPartyLeader packet;
packet.nSessionID = nSessionID;
packet.nRetCode = nRetCode;
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYLEADERSWAP, (char*)&packet, sizeof(packet));
}
#if defined( PRE_PARTY_DB )
#if defined( _VILLAGESERVER )
void CDNUserSendManager::SendPartyList( int iRet, const CSPartyListInfo* pPacket, std::list<CDNParty*>& PartyList )
{
SCPartyListInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nRetCode = iRet;
TxPacket.unReqPage = pPacket->unReqPage;
TxPacket.iTotalCount = static_cast<int>(PartyList.size());
if( iRet == ERROR_NONE )
{
if( (int)(PartyList.size()) >= pPacket->unReqPage*PARTYLISTOFFSET )
{
std::list<CDNParty*>::iterator itor = PartyList.begin();
std::advance( itor, pPacket->unReqPage*PARTYLISTOFFSET );
for( ; itor!=PartyList.end() ; ++itor )
{
if( (*itor)->GetPartyInfo( &TxPacket.PartyListInfo[TxPacket.iListCount] ) != ERROR_NONE )
continue;
++TxPacket.iListCount;
if( TxPacket.iListCount >= _countof(TxPacket.PartyListInfo) )
break;
}
}
}
int iSize = sizeof(TxPacket)-sizeof(TxPacket.PartyListInfo)+(sizeof(TxPacket.PartyListInfo[0])*TxPacket.iListCount);
m_pSession->AddSendData( SC_PARTY, eParty::SC_PARTYLISTINFO, reinterpret_cast<char*>(&TxPacket), iSize );
}
#else
void CDNUserSendManager::SendPartyList( int iRet, const CSPartyListInfo* pPacket, std::list<CDNParty*>& PartyList )
{
#pragma message( "<22><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SendPartyList() <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF>ϸ<EFBFBD> <20>ش<EFBFBD> <20>Լ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD>")
}
#endif // #if defined( _VILLAGESERVER )
#else
void CDNUserSendManager::SendPartyList(std::list <SPartyListInfo> * pList, int nWholeCnt, int nRet)
{
SCPartyListInfo packet;
memset(&packet, 0, sizeof(SCPartyListInfo));
packet.cCount = (BYTE)pList->size();
packet.nWholeCount = nWholeCnt;
packet.nRetCode = nRet;
if(packet.cCount > PARTYLISTOFFSET * 2)
{
_DANGER_POINT();
return;
}
int nCnt;
std::list <SPartyListInfo>::iterator ii;
for(ii = pList->begin(), nCnt = 0; ii != pList->end(); ii++, nCnt++)
memcpy(&packet.PartyListInfo[nCnt], &(*ii), sizeof(SPartyListInfo));
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYLISTINFO, (char*)&packet, sizeof(packet) - sizeof(packet.PartyListInfo) + \
(sizeof(SPartyListInfo) * packet.cCount));
}
#endif // #if defined( PRE_PARTY_DB )
void CDNUserSendManager::SendRefreshGateInfo(char *pGateNo, int nCount, int nRet)
{
SCRefreshGateInfo Enter;
memset(&Enter, 0, sizeof(SCRefreshGateInfo));
Enter.nRet = nRet;
if(nCount > PARTYMAX) nCount = PARTYMAX;
for (int i = 0; i < nCount; i++){
Enter.GateNo[i] = pGateNo[i];
}
Enter.cCount = nCount;
m_pSession->AddSendData(SC_PARTY, eParty::SC_REFRESHGATEINFO, (char*)&Enter, (int)(sizeof(SCRefreshGateInfo) - sizeof(Enter.GateNo) +(sizeof(char) * nCount)));
}
void CDNUserSendManager::SendGateInfo(UINT nLeaderUID, char cGateNo, char cMapCount, char *cCanEnter, char *cPermitFlag)
{
SCGateInfo Info;
memset(&Info, 0, sizeof(SCGateInfo));
Info.nLeaderUID = nLeaderUID;
Info.cGateNo = cGateNo;
Info.cMapCount = cMapCount;
int nSize = sizeof(char) * 5;
for( int i=0; i<cMapCount; i++ ) {
memcpy( Info.cCanEnter[i], cCanEnter +( i * nSize ), nSize );
Info.cPermitFlag[i] = cPermitFlag[i];
}
nSize = sizeof(SCGateInfo) - sizeof(Info.cCanEnter) +( nSize * cMapCount );
m_pSession->AddSendData(SC_PARTY, eParty::SC_GATEINFO, (char*)&Info, nSize);
}
#if defined( PRE_ADD_VIP_FARM )
void CDNUserSendManager::SendFarmStart( int iRet )
{
SCFarmStart TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
m_pSession->AddSendData(SC_FARM, eFarm::SC_START, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendEffectItemInfo( int iItemID, __time64_t tExpireDate )
{
SCEffectItemInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iItemID = iItemID;
TxPacket.tExpireDate = tExpireDate;
m_pSession->AddSendData(SC_ITEM, eItem::SC_EFFECTITEM_INFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#endif // #if defined( PRE_ADD_VIP_FARM )
void CDNUserSendManager::SendFarmOpenList()
{
m_pSession->AddSendData(SC_FARM, eFarm::SC_OPEN_FARMLIST, NULL, 0);
}
void CDNUserSendManager::SendFarmInfo(TFarmItem * pFarmItems, BYTE cFarmCount, TFarmFieldPartial * pFieldPartial, BYTE cFieldCount, bool bRefreshGate)
{
if(pFarmItems == NULL || pFieldPartial == NULL)
{
_DANGER_POINT();
return;
}
if(cFarmCount >= Farm::Max::FARMCOUNT || cFieldCount >= Farm::Max::FIELDCOUNT )
{
_DANGER_POINT();
return;
}
SCFarmInfo Farm;
memset(&Farm, 0, sizeof(SCFarmInfo));
Farm.bRefreshGate = bRefreshGate;
Farm.cCount = cFarmCount;
memcpy(Farm.Farms, pFarmItems, sizeof(TFarmItem) * cFarmCount);
m_pSession->AddSendData(SC_FARM, eFarm::SC_FARMINFO, (char*)&Farm, sizeof(SCFarmInfo) - sizeof(Farm.Farms) +(sizeof(TFarmItem) * Farm.cCount));
//
SendFarmFieldList( pFieldPartial, cFieldCount );
}
void CDNUserSendManager::SendFarmFieldList( const TFarmFieldPartial * pFieldPartial, BYTE cFieldCount )
{
SCFarmPlantedInfo Planted;
memset(&Planted, 0, sizeof(SCFarmPlantedInfo));
Planted.cCount = cFieldCount;
memcpy(Planted.FarmFields, pFieldPartial, sizeof(TFarmFieldPartial) * cFieldCount);
m_pSession->AddSendData(SC_FARM, eFarm::SC_FARMPLANTEDINFO, (char*)&Planted, sizeof(SCFarmPlantedInfo) - sizeof(Planted.FarmFields) +(sizeof(TFarmFieldPartial) * Planted.cCount));
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD>] SC_FARMPLANTEDINFO Count:%d", static_cast<int>(cFieldCount) );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendDefaultPartsData( const std::vector<TPartyMemberDefaultParts>& vDefaultParts )
{
SCDefaultPartsData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
UINT uiSendCount = 0;
for( UINT i=0 ; i<vDefaultParts.size() ; ++i )
{
TxPacket.DefaultParts[TxPacket.cCount] = vDefaultParts[i];
++TxPacket.cCount;
// Page<67>ϼ<EFBFBD>
if( TxPacket.cCount%_countof(TxPacket.DefaultParts) == 0 )
{
#ifdef PRE_MOD_SYNCPACKET
#else //#ifdef PRE_MOD_SYNCPACKET
TxPacket.unStartIndex = uiSendCount;
#endif //#ifdef PRE_MOD_SYNCPACKET
m_pSession->AddSendData( SC_PARTY, eParty::SC_DEFAULTPARTSDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.DefaultParts);
TxPacket.cCount = 0;
}
}
if( TxPacket.cCount > 0 )
{
#ifdef PRE_MOD_SYNCPACKET
int iSize = sizeof(TxPacket)-sizeof(TxPacket.DefaultParts)+TxPacket.cCount*sizeof(TPartyMemberDefaultParts);
#else //#ifdef PRE_MOD_SYNCPACKET
TxPacket.unStartIndex = uiSendCount;
int iSize = sizeof(TxPacket)-sizeof(TxPacket.DefaultParts)+TxPacket.cCount*sizeof(TxPacket.DefaultParts[0]);
#endif //#ifdef PRE_MOD_SYNCPACKET
m_pSession->AddSendData( SC_PARTY, eParty::SC_DEFAULTPARTSDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
}
void CDNUserSendManager::SendWeaponOrderData( const std::vector<TPartyMemberWeaponOrder>& vWeaponOrder )
{
SCWeaponOrderData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
UINT uiSendCount = 0;
for( UINT i=0 ; i<vWeaponOrder.size() ; ++i )
{
TxPacket.WeaponOrder[i-uiSendCount] = vWeaponOrder[i];
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.WeaponOrder) == 0 )
{
TxPacket.cCount = _countof(TxPacket.WeaponOrder);
#ifdef PRE_MOD_SYNCPACKET
#else //#ifdef PRE_MOD_SYNCPACKET
TxPacket.unStartIndex = uiSendCount;
#endif //#ifdef PRE_MOD_SYNCPACKET
m_pSession->AddSendData( SC_PARTY, eParty::SC_WEAPONORDERDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.WeaponOrder);
}
}
if( uiSendCount < vWeaponOrder.size() )
{
TxPacket.cCount = static_cast<BYTE>(vWeaponOrder.size()-uiSendCount);
#ifdef PRE_MOD_SYNCPACKET
int iSize = sizeof(TxPacket)-sizeof(TxPacket.WeaponOrder)+TxPacket.cCount*sizeof(TPartyMemberWeaponOrder);
#else //#ifdef PRE_MOD_SYNCPACKET
TxPacket.unStartIndex = uiSendCount;
int iSize = sizeof(TxPacket)-sizeof(TxPacket.WeaponOrder)+TxPacket.cCount*sizeof(TxPacket.WeaponOrder[0]);
#endif //#ifdef PRE_MOD_SYNCPACKET
m_pSession->AddSendData( SC_PARTY, eParty::SC_WEAPONORDERDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
}
void CDNUserSendManager::SendEquipData( const std::vector<TPartyMemberEquip>& vEquip )
{
SCEquipData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
#ifdef PRE_MOD_SYNCPACKET
UINT uiSendCount = 0;
for( UINT i=0 ; i<vEquip.size() ; ++i )
{
TxPacket.MemberEquip[i - uiSendCount] = vEquip[i];
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.MemberEquip) == 0 )
{
TxPacket.cCount = _countof(TxPacket.MemberEquip);
m_pSession->AddSendData( SC_PARTY, eParty::SC_EQUIPDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.MemberEquip);
}
}
if( uiSendCount < vEquip.size() )
{
TxPacket.cCount = static_cast<BYTE>(vEquip.size()-uiSendCount);
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip)+TxPacket.cCount*sizeof(TPartyMemberEquip);
m_pSession->AddSendData( SC_PARTY, eParty::SC_EQUIPDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
#else //#ifdef PRE_MOD_SYNCPACKET
UINT uiSendCount = 0;
int iOffset = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip);
for( UINT i=0 ; i<vEquip.size() ; ++i )
{
int iSize = ( vEquip[i].cCount * sizeof(TItemInfo) ) + sizeof(char);
memcpy( reinterpret_cast<char*>(&TxPacket) + iOffset, &vEquip[i], iSize );
iOffset += iSize;
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.MemberEquip) == 0 )
{
TxPacket.cCount = _countof(TxPacket.MemberEquip);
TxPacket.unStartIndex = uiSendCount;
m_pSession->AddSendData( SC_PARTY, eParty::SC_EQUIPDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.MemberEquip);
iOffset = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip);
}
}
if( uiSendCount < vEquip.size() )
{
TxPacket.cCount = static_cast<BYTE>(vEquip.size()-uiSendCount);
TxPacket.unStartIndex = uiSendCount;
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip)+TxPacket.cCount*sizeof(TxPacket.MemberEquip[0]);
m_pSession->AddSendData( SC_PARTY, eParty::SC_EQUIPDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
#endif //#ifdef PRE_MOD_SYNCPACKET
}
void CDNUserSendManager::SendCashEquipData( const std::vector<TPartyMemberCashEquip>& vEquip )
{
SCCashEquipData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
#ifdef PRE_MOD_SYNCPACKET
UINT uiSendCount = 0;
for( UINT i=0 ; i<vEquip.size() ; ++i )
{
TxPacket.MemberEquip[i - uiSendCount] = vEquip[i];
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.MemberEquip) == 0 )
{
TxPacket.cCount = _countof(TxPacket.MemberEquip);
m_pSession->AddSendData( SC_PARTY, eParty::SC_EQUIPCASHDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.MemberEquip);
}
}
if( uiSendCount < vEquip.size() )
{
TxPacket.cCount = static_cast<BYTE>(vEquip.size()-uiSendCount);
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip)+TxPacket.cCount*sizeof(TPartyMemberCashEquip);
m_pSession->AddSendData( SC_PARTY, eParty::SC_EQUIPCASHDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
#else //#ifdef PRE_MOD_SYNCPACKET
UINT uiSendCount = 0;
int iOffset = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip);
for( UINT i=0 ; i<vEquip.size() ; ++i )
{
int iSize = ( vEquip[i].cCount * sizeof(TItemInfo) ) + sizeof(char);
memcpy( reinterpret_cast<char*>(&TxPacket) + iOffset, &vEquip[i], iSize );
iOffset += iSize;
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.MemberEquip) == 0 )
{
TxPacket.cCount = _countof(TxPacket.MemberEquip);
TxPacket.unStartIndex = uiSendCount;
m_pSession->AddSendData( SC_PARTY, eParty::SC_EQUIPCASHDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.MemberEquip);
iOffset = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip);
}
}
if( uiSendCount < vEquip.size() )
{
TxPacket.cCount = static_cast<BYTE>(vEquip.size()-uiSendCount);
TxPacket.unStartIndex = uiSendCount;
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip)+TxPacket.cCount*sizeof(TxPacket.MemberEquip[0]);
m_pSession->AddSendData( SC_PARTY, eParty::SC_EQUIPCASHDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
#endif //#ifdef PRE_MOD_SYNCPACKET
}
void CDNUserSendManager::SendGlyphEquipData( const std::vector<TPartyMemberGlyphEquip>& vGlyphEquip )
{
SCGlyphEquipData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
#ifdef PRE_MOD_SYNCPACKET
UINT uiSendCount = 0;
for( UINT i=0 ; i<vGlyphEquip.size() ; ++i )
{
TxPacket.MemberEquip[i - uiSendCount] = vGlyphEquip[i];
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.MemberEquip) == 0 )
{
TxPacket.cCount = _countof(TxPacket.MemberEquip);
m_pSession->AddSendData( SC_PARTY, eParty::SC_GLYPHDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.MemberEquip);
}
}
if( uiSendCount < vGlyphEquip.size() )
{
TxPacket.cCount = static_cast<BYTE>(vGlyphEquip.size()-uiSendCount);
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip)+TxPacket.cCount*sizeof(TPartyMemberGlyphEquip);
m_pSession->AddSendData( SC_PARTY, eParty::SC_GLYPHDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
#else //#ifdef PRE_MOD_SYNCPACKET
UINT uiSendCount = 0;
int iOffset = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip);
for( UINT i=0 ; i<vGlyphEquip.size() ; ++i )
{
int iSize = ( vGlyphEquip[i].cCount * sizeof(TItemInfo) ) + sizeof(char);
memcpy( reinterpret_cast<char*>(&TxPacket) + iOffset, &vGlyphEquip[i], iSize );
iOffset += iSize;
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.MemberEquip) == 0 )
{
TxPacket.cCount = _countof(TxPacket.MemberEquip);
TxPacket.unStartIndex = uiSendCount;
m_pSession->AddSendData( SC_PARTY, eParty::SC_GLYPHDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.MemberEquip);
iOffset = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip);
}
}
if( uiSendCount < vGlyphEquip.size() )
{
TxPacket.cCount = static_cast<BYTE>(vGlyphEquip.size()-uiSendCount);
TxPacket.unStartIndex = uiSendCount;
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip)+TxPacket.cCount*sizeof(TxPacket.MemberEquip[0]);
m_pSession->AddSendData( SC_PARTY, eParty::SC_GLYPHDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
#endif //#ifdef PRE_MOD_SYNCPACKET
}
#if defined(PRE_ADD_TALISMAN_SYSTEM)
void CDNUserSendManager::SendTalismanEquipData( const std::vector<TPartyMemberTalismanEquip>& vTalismanEquip )
{
SCTalismanEquipData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
#ifdef PRE_MOD_SYNCPACKET
UINT uiSendCount = 0;
for( UINT i=0 ; i<vTalismanEquip.size() ; ++i )
{
TxPacket.MemberEquip[i - uiSendCount] = vTalismanEquip[i];
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.MemberEquip) == 0 )
{
TxPacket.cCount = _countof(TxPacket.MemberEquip);
m_pSession->AddSendData( SC_PARTY, eParty::SC_TALISMANDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.MemberEquip);
}
}
if( uiSendCount < vTalismanEquip.size() )
{
TxPacket.cCount = static_cast<BYTE>(vTalismanEquip.size()-uiSendCount);
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip)+TxPacket.cCount*sizeof(TPartyMemberTalismanEquip);
m_pSession->AddSendData( SC_PARTY, eParty::SC_TALISMANDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
#else //#ifdef PRE_MOD_SYNCPACKET
UINT uiSendCount = 0;
int iOffset = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip);
for( UINT i=0 ; i<vTalismanEquip.size() ; ++i )
{
int iSize = ( vTalismanEquip[i].cCount * sizeof(TItemInfo) ) + sizeof(char);
memcpy( reinterpret_cast<char*>(&TxPacket) + iOffset, &vTalismanEquip[i], iSize );
iOffset += iSize;
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.MemberEquip) == 0 )
{
TxPacket.cCount = _countof(TxPacket.MemberEquip);
TxPacket.unStartIndex = uiSendCount;
m_pSession->AddSendData( SC_PARTY, eParty::SC_TALISMANDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.MemberEquip);
iOffset = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip);
}
}
if( uiSendCount < vTalismanEquip.size() )
{
TxPacket.cCount = static_cast<BYTE>(vTalismanEquip.size()-uiSendCount);
TxPacket.unStartIndex = uiSendCount;
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MemberEquip)+TxPacket.cCount*sizeof(TxPacket.MemberEquip[0]);
m_pSession->AddSendData( SC_PARTY, eParty::SC_TALISMANDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
#endif //#ifdef PRE_MOD_SYNCPACKET
}
#endif
#ifdef PRE_MOD_SYNCPACKET
void CDNUserSendManager::SendVehicleEquipData( const std::vector<TPartyVehicle>& vVehicle )
{
SCVehicleEquipData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
UINT uiSendCount = 0;
for( UINT i=0 ; i<vVehicle.size() ; ++i )
{
TVehicleCompact VehicleCompact;
memset(&VehicleCompact, 0, sizeof(VehicleCompact));
VehicleCompact.SetCompact( vVehicle[i].tVehicle );
VehicleCompact.nSessionID = vVehicle[i].nSessionID;
TxPacket.MemberVehicle[i - uiSendCount] = VehicleCompact;
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.MemberVehicle) == 0 )
{
TxPacket.cCount = _countof(TxPacket.MemberVehicle);
m_pSession->AddSendData( SC_PARTY, eParty::SC_VEHICLEEQUIPDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.MemberVehicle);
}
}
if( uiSendCount < vVehicle.size() )
{
TxPacket.cCount = static_cast<BYTE>(vVehicle.size()-uiSendCount);
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MemberVehicle)+TxPacket.cCount*sizeof(TVehicleCompact);
m_pSession->AddSendData( SC_PARTY, eParty::SC_VEHICLEEQUIPDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
}
#else //#ifdef PRE_MOD_SYNCPACKET
void CDNUserSendManager::SendVehicleEquipData( const std::vector<TVehicle>& vVehicle )
{
SCVehicleEquipData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
UINT uiSendCount = 0;
int iOffset = sizeof(TxPacket)-sizeof(TxPacket.MemberVehicle);
for( UINT i=0 ; i<vVehicle.size() ; ++i )
{
int iSize = sizeof(TVehicleCompact);
TVehicleCompact VehicleCompact;
memset(&VehicleCompact, 0, sizeof(VehicleCompact));
VehicleCompact.SetCompact( vVehicle[i] );
memcpy( reinterpret_cast<char*>(&TxPacket) + iOffset, &VehicleCompact, iSize );
iOffset += iSize;
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.MemberVehicle) == 0 )
{
TxPacket.cCount = _countof(TxPacket.MemberVehicle);
TxPacket.unStartIndex = uiSendCount;
m_pSession->AddSendData( SC_PARTY, eParty::SC_VEHICLEEQUIPDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.MemberVehicle);
iOffset = sizeof(TxPacket)-sizeof(TxPacket.MemberVehicle);
}
}
if( uiSendCount < vVehicle.size() )
{
TxPacket.cCount = static_cast<BYTE>(vVehicle.size()-uiSendCount);
TxPacket.unStartIndex = uiSendCount;
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MemberVehicle)+TxPacket.cCount*sizeof(TxPacket.MemberVehicle[0]);
m_pSession->AddSendData( SC_PARTY, eParty::SC_VEHICLEEQUIPDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
}
#endif //#ifdef PRE_MOD_SYNCPACKET
#ifdef PRE_MOD_SYNCPACKET
void CDNUserSendManager::SendPetEquipData( const std::vector<TPartyVehicle>& vPet )
{
SCVehicleEquipData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
UINT uiSendCount = 0;
for( UINT i=0 ; i<vPet.size() ; ++i )
{
TVehicleCompact VehicleCompact;
memset(&VehicleCompact, 0, sizeof(TVehicleCompact));
VehicleCompact.SetCompact( vPet[i].tVehicle );
VehicleCompact.nSessionID = vPet[i].nSessionID;
TxPacket.MemberVehicle[i - uiSendCount] = VehicleCompact;
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.MemberVehicle) == 0 )
{
TxPacket.cCount = _countof(TxPacket.MemberVehicle);
m_pSession->AddSendData( SC_PARTY, eParty::SC_PETEQUIPDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.MemberVehicle);
}
}
if( uiSendCount < vPet.size() )
{
TxPacket.cCount = static_cast<BYTE>(vPet.size()-uiSendCount);
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MemberVehicle)+TxPacket.cCount*sizeof(TVehicleCompact);
m_pSession->AddSendData( SC_PARTY, eParty::SC_PETEQUIPDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
}
#else //#ifdef PRE_MOD_SYNCPACKET
void CDNUserSendManager::SendPetEquipData( const std::vector<TVehicle>& vPet )
{
SCVehicleEquipData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
UINT uiSendCount = 0;
int iOffset = sizeof(TxPacket)-sizeof(TxPacket.MemberVehicle);
for( UINT i=0 ; i<vPet.size() ; ++i )
{
int iSize = sizeof(TVehicleCompact);
TVehicleCompact VehicleCompact;
memset(&VehicleCompact, 0, sizeof(TVehicleCompact));
VehicleCompact.SetCompact( vPet[i] );
memcpy( reinterpret_cast<char*>(&TxPacket) + iOffset, &VehicleCompact, iSize );
iOffset += iSize;
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.MemberVehicle) == 0 )
{
TxPacket.cCount = _countof(TxPacket.MemberVehicle);
TxPacket.unStartIndex = uiSendCount;
m_pSession->AddSendData( SC_PARTY, eParty::SC_PETEQUIPDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.MemberVehicle);
iOffset = sizeof(TxPacket)-sizeof(TxPacket.MemberVehicle);
}
}
if( uiSendCount < vPet.size() )
{
TxPacket.cCount = static_cast<BYTE>(vPet.size()-uiSendCount);
TxPacket.unStartIndex = uiSendCount;
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MemberVehicle)+TxPacket.cCount*sizeof(TxPacket.MemberVehicle[0]);
m_pSession->AddSendData( SC_PARTY, eParty::SC_PETEQUIPDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
}
#endif //#ifdef PRE_MOD_SYNCPACKET
void CDNUserSendManager::SendSkillData( const std::vector<TPartyMemberSkill>& vSkill )
{
SCSkillData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
#ifdef PRE_MOD_SYNCPACKET
UINT uiSendCount = 0;
for( UINT i=0 ; i<vSkill.size() ; ++i )
{
TxPacket.MemberSkill[i - uiSendCount] = vSkill[i];
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.MemberSkill) == 0 )
{
TxPacket.cCount = _countof(TxPacket.MemberSkill);
m_pSession->AddSendData( SC_PARTY, eParty::SC_SKILLDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.MemberSkill);
}
}
if( uiSendCount < vSkill.size() )
{
TxPacket.cCount = static_cast<BYTE>(vSkill.size()-uiSendCount);
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MemberSkill)+TxPacket.cCount*sizeof(TPartyMemberSkill);
m_pSession->AddSendData( SC_PARTY, eParty::SC_SKILLDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
#else //#ifdef PRE_MOD_SYNCPACKET
UINT uiSendCount = 0;
int iOffset = sizeof(TxPacket)-sizeof(TxPacket.MemberSkill);
for( UINT i=0 ; i<vSkill.size() ; ++i )
{
int iSize = ( vSkill[i].cCount * sizeof(TSkill) ) + sizeof(char);
memcpy( reinterpret_cast<char*>(&TxPacket) + iOffset, &vSkill[i], iSize );
iOffset += iSize;
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.MemberSkill) == 0 )
{
TxPacket.cCount = _countof(TxPacket.MemberSkill);
TxPacket.unStartIndex = uiSendCount;
m_pSession->AddSendData( SC_PARTY, eParty::SC_SKILLDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.MemberSkill);
iOffset = sizeof(TxPacket)-sizeof(TxPacket.MemberSkill);
}
}
if( uiSendCount < vSkill.size() )
{
TxPacket.cCount = static_cast<BYTE>(vSkill.size()-uiSendCount);
TxPacket.unStartIndex = uiSendCount;
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MemberSkill)+TxPacket.cCount*sizeof(TxPacket.MemberSkill[0]);
m_pSession->AddSendData( SC_PARTY, eParty::SC_SKILLDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
#endif //#ifdef PRE_MOD_SYNCPACKET
}
void CDNUserSendManager::SendPartyEtcData( const std::vector<TPartyEtcData>& vEtcData )
{
SCEtcData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
#ifdef PRE_MOD_SYNCPACKET
UINT uiSendCount = 0;
for( UINT i=0 ; i<vEtcData.size() ; ++i )
{
TxPacket.EtcData[i - uiSendCount] = vEtcData[i];
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.EtcData) == 0 )
{
TxPacket.cCount = _countof(TxPacket.EtcData);
m_pSession->AddSendData( SC_PARTY, eParty::SC_ETCDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.EtcData);
}
}
if( uiSendCount < vEtcData.size() )
{
TxPacket.cCount = static_cast<BYTE>(vEtcData.size()-uiSendCount);
int iSize = sizeof(TxPacket)-sizeof(TxPacket.EtcData)+TxPacket.cCount*sizeof(TPartyEtcData);
m_pSession->AddSendData( SC_PARTY, eParty::SC_ETCDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
#else //#ifdef PRE_MOD_SYNCPACKET
UINT uiSendCount = 0;
for( UINT i=0 ; i<vEtcData.size() ; ++i )
{
TxPacket.EtcData[i-uiSendCount] = vEtcData[i];
// Page<67>ϼ<EFBFBD>
if((i+1)%_countof(TxPacket.EtcData) == 0 )
{
TxPacket.cCount = _countof(TxPacket.EtcData);
TxPacket.unStartIndex = uiSendCount;
m_pSession->AddSendData( SC_PARTY, eParty::SC_ETCDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.EtcData);
}
}
if( uiSendCount < vEtcData.size() )
{
TxPacket.cCount = static_cast<BYTE>(vEtcData.size()-uiSendCount);
TxPacket.unStartIndex = uiSendCount;
int iSize = sizeof(TxPacket)-sizeof(TxPacket.EtcData)+TxPacket.cCount*sizeof(TxPacket.EtcData[0]);
m_pSession->AddSendData( SC_PARTY, eParty::SC_ETCDATA, reinterpret_cast<char*>(&TxPacket), iSize );
}
#endif //#ifdef PRE_MOD_SYNCPACKET
}
void CDNUserSendManager::SendPartyGuildData( const std::vector<TPartyMemberGuild::TPartyMemberGuildView>& vMemberGuildView )
{
TPartyMemberGuild TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
UINT uiSendCount = 0;
for( UINT i=0 ; i<vMemberGuildView.size() ; ++i )
{
TxPacket.List[TxPacket.nCount] = vMemberGuildView[i];
++TxPacket.nCount;
// Page<67>ϼ<EFBFBD>
if( TxPacket.nCount%_countof(TxPacket.List) == 0 )
{
TxPacket.unStartIndex = uiSendCount;
m_pSession->AddSendData( SC_PARTY, eParty::SC_GUILDDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
uiSendCount += _countof(TxPacket.List);
TxPacket.nCount = 0;
}
}
if( TxPacket.nCount > 0 )
{
TxPacket.unStartIndex = uiSendCount;
int iSize = sizeof(TxPacket)-sizeof(TxPacket.List)+TxPacket.nCount*sizeof(TxPacket.List[0]);
m_pSession->AddSendData( SC_PARTY, eParty::SC_GUILDDATA, reinterpret_cast<char*>(&TxPacket),iSize );
}
}
#if defined (PRE_ADD_BESTFRIEND)
void CDNUserSendManager::SendPartyBestFriend( const std::vector<TPartyBestFriend>& vMemberBestFriend )
{
SCPartyBestFriend TxPacket;
memset (&TxPacket, 0, sizeof(TxPacket));
for( UINT i=0 ; i<vMemberBestFriend.size() ; ++i )
{
TxPacket.List[TxPacket.nCount] = vMemberBestFriend[i];
++TxPacket.nCount;
}
if (TxPacket.nCount > 0)
{
int iSize = sizeof(TxPacket) - sizeof(TxPacket.List) + (TxPacket.nCount * sizeof(TxPacket.List[0]));
m_pSession->AddSendData( SC_PARTY, eParty::SC_BESTFRIENDDATA, reinterpret_cast<char*>(&TxPacket),iSize );
}
}
#endif // #if defined (PRE_ADD_BESTFRIEND)
void CDNUserSendManager::SendSyncEquipData( TPartyMemberEquip* EquipArray, int iCount )
{
SCROOM_SYNC_MEMBEREQUIP TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nCount = iCount;
#ifdef PRE_MOD_SYNCPACKET
#else //#ifdef PRE_MOD_SYNCPACKET
int iSize = 0;
int iOffset = sizeof(short);
#endif //#ifdef PRE_MOD_SYNCPACKET
if( iCount > 0 )
{
for( int i=0 ; i<iCount ; ++i )
{
#ifdef PRE_MOD_SYNCPACKET
TxPacket.MemberEquip[i] = EquipArray[i];
#else //#ifdef PRE_MOD_SYNCPACKET
iSize = ( EquipArray[i].cCount * sizeof(TItemInfo) ) + sizeof(char);
memcpy(((char*)&TxPacket)+iOffset, &EquipArray[i], iSize );
iOffset += iSize;
#endif //#ifdef PRE_MOD_SYNCPACKET
}
}
#ifdef PRE_MOD_SYNCPACKET
m_pSession->AddSendData( SC_ROOM, eRoom::SC_SYNC_MEMBEREQUIP, (char*)&TxPacket, sizeof(SCROOM_SYNC_MEMBEREQUIP) - sizeof(TxPacket.MemberEquip) + (sizeof(TPartyMemberEquip) * iCount) );
#else //#ifdef PRE_MOD_SYNCPACKET
m_pSession->AddSendData( SC_ROOM, eRoom::SC_SYNC_MEMBEREQUIP, (char*)&TxPacket, iOffset );
#endif //#ifdef PRE_MOD_SYNCPACKET
}
void CDNUserSendManager::SendSyncSkillData(TPartyMemberSkill *pSkillArray, int iCount)
{
SCROOM_SYNC_MEMBERSKILL TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nCount = iCount;
int iSize = 0;
int iOffset = sizeof(short);
if( iCount > 0 )
{
for( int i=0; i<iCount; ++i )
{
iSize = ( pSkillArray[i].cCount * sizeof(TSkill) ) + sizeof(char);
memcpy(((char*)&TxPacket)+iOffset, &pSkillArray[i], iSize );
iOffset += iSize;
}
}
m_pSession->AddSendData( SC_ROOM, eRoom::SC_SYNC_MEMBERSKILL, (char*)&TxPacket, iOffset );
}
void CDNUserSendManager::SendStartStage( bool bDirectConnect, int nMapIndex, char cGateNo, int nRandomSeed, TDUNGEONDIFFICULTY Difficulty, int nExtendDropRate )
{
if( bDirectConnect ) {
SCStartStageDirect Dungeon;
memset(&Dungeon, 0, sizeof(SCStartStageDirect));
Dungeon.nMapIndex = nMapIndex;
Dungeon.cGateNo = cGateNo;
Dungeon.nRandomSeed = nRandomSeed;
Dungeon.Difficulty = Difficulty;
Dungeon.nExtendDropRate = nExtendDropRate;
m_pSession->AddSendData(SC_PARTY, eParty::SC_STARTSTAGEDIRECT, (char*)&Dungeon, sizeof(SCStartStageDirect));
}
else {
SCStartStage Stage;
memset(&Stage, 0, sizeof(SCStartStage));
Stage.nRandomSeed = nRandomSeed;
Stage.Difficulty = Difficulty;
Stage.nExtendDropRate = nExtendDropRate;
m_pSession->AddSendData(SC_PARTY, eParty::SC_STARTSTAGE, (char*)&Stage, sizeof(SCStartStage));
}
#ifdef _DEBUG
g_Log.Log(LogType::_NORMAL, m_pSession, L"[ADBID:%u, CDBID:%I64d, SID:%u] SendStartStage\r\n", m_pSession->GetAccountDBID(), m_pSession->GetCharacterDBID(), m_pSession->GetSessionID());
#endif
}
void CDNUserSendManager::SendSelectStage( char cSelectIndex )
{
SCSelectStage Stage;
memset(&Stage, 0, sizeof(SCSelectStage));
Stage.cSelectMapIndex = cSelectIndex;
m_pSession->AddSendData(SC_PARTY, eParty::SC_SELECTSTAGE, (char*)&Stage, sizeof(SCSelectStage));
}
void CDNUserSendManager::SendVillageInfo(const char * pIP, USHORT nPort, short nRet, UINT nAccountDBID, INT64 biCertifyingKey)
{
SCVillageInfo packet;
memset( &packet, 0, sizeof(packet) );
packet.nSessionID = m_pSession->GetSessionID();
if( pIP )
_strcpy(packet.szVillageIp, _countof(packet.szVillageIp), pIP, (int)strlen(pIP));
packet.wVillagePort = nPort;
packet.nRet = nRet;
packet.nAccountDBID = nAccountDBID;
packet.biCertifyingKey = biCertifyingKey;
m_pSession->AddSendData(SC_SYSTEM, eSystem::SC_VILLAGEINFO, (char*)&packet, sizeof(SCVillageInfo));
}
void CDNUserSendManager::SendStartVillage()
{
m_pSession->AddSendData(SC_PARTY, eParty::SC_STARTVILLAGE, NULL, 0);
}
void CDNUserSendManager::SendCancelStage( int nRetCode )
{
SCCancelStage CancelStage;
memset(&CancelStage, 0, sizeof(SCCancelStage));
CancelStage.nRetCode = nRetCode;
m_pSession->AddSendData(SC_PARTY, eParty::SC_CANCELSTAGE, (char*)&CancelStage, sizeof(SCCancelStage));
}
void CDNUserSendManager::SendChangeLeader(UINT nSessionID)
{
SCPartyChangeLeader packet;
packet.nNewLeaderSessionID = nSessionID;
m_pSession->AddSendData(SC_PARTY, eParty::SC_CHANGEPARTYLEADER, (char*)&packet, sizeof(packet));
}
#if defined( PRE_PARTY_DB )
void CDNUserSendManager::SendPartyInviteMsg(TPARTYID PartyID, const WCHAR * pPartyName, int iPassword, const WCHAR * pSrcName, BYTE cMaxUserCount, BYTE cCurUserCount, USHORT nAvrLevel, int nGameServerID, int nGameMapIdx)
#else
void CDNUserSendManager::SendPartyInviteMsg(TPARTYID PartyID, const WCHAR * pPartyName, const WCHAR * pPass, const WCHAR * pSrcName, BYTE cMaxUserCount, BYTE cCurUserCount, USHORT nAvrLevel, int nGameServerID, int nGameMapIdx)
#endif // #if defined( PRE_PARTY_DB )
{
SCPartyInvite packet;
memset(&packet, 0, sizeof(packet));
packet.PartyID = PartyID;
packet.cMaxUserCount = cMaxUserCount;
packet.cCurUserCount = cCurUserCount;
packet.nAvrLevel = nAvrLevel;
packet.nGameServerID = nGameServerID;
packet.nGameMapIdx = nGameMapIdx;
if( pPartyName )
{
packet.nPartyNameLen = (USHORT)wcslen(pPartyName);
if( packet.nPartyNameLen >= PARTYNAMELENMAX )
{
_DANGER_POINT();
return;
}
_wcscpy(packet.wszBuf, _countof(packet.wszBuf), pPartyName, (int)wcslen(pPartyName));
}
#if defined( PRE_PARTY_DB )
packet.iPassword = iPassword;
#else
if(pPass != NULL && pPass[0] != '\0')
{
packet.cPartyPassLen = (BYTE)wcslen(pPass);
if( packet.cPartyPassLen > PARTYPASSWORDMAX )
{
_DANGER_POINT();
return;
}
_wcscpy(packet.wszBuf + packet.nPartyNameLen, _countof(packet.wszBuf)-packet.nPartyNameLen , pPass, (int)wcslen(pPass));
}
#endif // #if defined( PRE_PARTY_DB )
if( pSrcName )
{
packet.cPartyInviterNameLen = (BYTE)wcslen(pSrcName);
if( packet.cPartyInviterNameLen > NAMELENMAX )
{
_DANGER_POINT();
return;
}
#if defined( PRE_PARTY_DB )
_wcscpy(packet.wszBuf + packet.nPartyNameLen, _countof(packet.wszBuf) - packet.nPartyNameLen , pSrcName, (int)wcslen(pSrcName));
#else
_wcscpy(packet.wszBuf + packet.nPartyNameLen + packet.cPartyPassLen, _countof(packet.wszBuf) - packet.nPartyNameLen - packet.cPartyPassLen , pSrcName, (int)wcslen(pSrcName));
#endif // #if defined( PRE_PARTY_DB )
}
#if defined( PRE_PARTY_DB )
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYINVITE, (char*)&packet, sizeof(packet) - sizeof(packet.wszBuf) + \
((packet.nPartyNameLen + packet.cPartyInviterNameLen ) * sizeof(WCHAR)));
#else
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYINVITE, (char*)&packet, sizeof(packet) - sizeof(packet.wszBuf) + \
((packet.nPartyNameLen + packet.cPartyInviterNameLen + packet.cPartyPassLen) * sizeof(WCHAR)));
#endif // #if defined( PRE_PARTY_DB )
}
void CDNUserSendManager::SendPartyIniviteNotice(const WCHAR * pwszInvitedName, int nRetCode)
{
SCPartyInviteNotice packet;
memset(&packet, 0, sizeof(SCPartyInviteNotice));
packet.nRetCode = nRetCode;
_wcscpy(packet.wszInvitedCharacterName, _countof(packet.wszInvitedCharacterName), pwszInvitedName, (int)wcslen(pwszInvitedName));
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYINVITENOTICE, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendPartyInviteFail(int nRet)
{
SCPartyInviteFail packet;
packet.nRetCode = nRet;
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYINVITEFAIL, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendPartyInviteDenied(const WCHAR * pDest, int nRet)
{
SCPartyInviteDenied packet;
memset(&packet, 0, sizeof(packet));
packet.nRetCode = nRet;
_wcscpy(packet.wszCharName, _countof(packet.wszCharName), pDest, (int)wcslen(pDest));
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYINVITEDENIED, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendPartyMemberInfo(SCPartyMemberInfo * pPacket)
{
#if defined( PRE_PARTY_DB )
int iSize = sizeof(SCPartyMemberInfo)-sizeof(pPacket->MemberData)+(pPacket->nCount*sizeof(pPacket->MemberData[0]));
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYMEMBER_INFO, (char*)pPacket, iSize );
#else
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYMEMBER_INFO, (char*)pPacket, sizeof(SCPartyMemberInfo) - sizeof(pPacket->Info) +(sizeof(TPartyMemberInfo) * pPacket->cCount));
#endif // #if defined( PRE_PARTY_DB )
}
void CDNUserSendManager::SendChannelInfo(SCChannelList * pPacket)
{
int iSize = sizeof(SCChannelList)-sizeof(pPacket->Info)+pPacket->cCount*sizeof(pPacket->Info[0]);
m_pSession->AddSendData( SC_PARTY, eParty::SC_CHANNELLIST, (char*)pPacket, iSize );
}
void CDNUserSendManager::SendMoveChannelFail(int nRet)
{
SCMoveChannelFail packet;
packet.nRetCode = nRet;
m_pSession->AddSendData(SC_PARTY, eParty::SC_MOVECHANNELFAIL, NULL, 0);
}
void CDNUserSendManager::SendPartyInfoErr(short nRetCode)
{
SCPartyInfoErr packet;
memset(&packet, 0, sizeof(packet));
packet.nRetCode = nRetCode;
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYINFO_ERROR, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendSelectDungeonInfo(int nMapIndex, BYTE cDiffyculty)
{
SCSelectDunGeon packet;
memset(&packet, 0, sizeof(packet));
packet.cDiffyculty = cDiffyculty;
packet.nMapIndex = nMapIndex;
m_pSession->AddSendData(SC_PARTY, eParty::SC_SELECTDUNGEON, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendPartyModify(short nRetCode)
{
SCPartyInfoModify packet;
memset(&packet, 0, sizeof(packet));
packet.nRet = nRetCode;
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYMODIFY, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendVerifyJoinParty(int nPartyIdx, int nChannelID, short nRetCode)
{
SCVerifyJoinParty packet;
memset(&packet, 0, sizeof(packet));
packet.nPartyIdx = nPartyIdx;
packet.nChannelID = nChannelID;
packet.nRet = nRetCode;
m_pSession->AddSendData(SC_PARTY, eParty::SC_VERIFYJOINPARTY, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendPartyMemberMove(UINT nSessionID, EtVector3 vPos)
{
SCPartyMemberMove Move;
memset(&Move, 0, sizeof(SCPartyMemberMove));
Move.nSessionID = nSessionID;
Move.Position = vPos;
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYMEMBER_MOVE, (char*)&Move, sizeof(SCPartyMemberMove));
}
void CDNUserSendManager::SendPartyMemberPart(CDNUserSession *pSession)
{
SCPartyMemberPart Part;
memset(&Part, 0, sizeof(SCPartyMemberPart));
Part.nSessionID = pSession->GetSessionID();
Part.nExp = pSession->GetExp();
Part.cLevel = pSession->GetLevel();
memcpy( Part.cJobArray, pSession->GetStatusData()->cJobArray, sizeof(Part.cJobArray) );
Part.nHairID = (pSession->GetItem()->GetEquip(EQUIP_HAIR) == NULL) ? 0 : pSession->GetItem()->GetEquip(EQUIP_HAIR)->nItemID;
Part.nFaceID = (pSession->GetItem()->GetEquip(EQUIP_FACE) == NULL) ? 0 : pSession->GetItem()->GetEquip(EQUIP_FACE)->nItemID;
Part.dwHairColor = pSession->GetHairColor();
Part.dwEyeColor = pSession->GetEyeColor();
Part.dwSkinColor = pSession->GetSkinColor();
Part.wFatigue = pSession->GetFatigue() + pSession->GetWeeklyFatigue() + pSession->GetPCBangFatigue() + pSession->GetEventFatigue();
int nEquipID = 0;
CDNUserItem* pUserItem = pSession->GetItem();
if (pUserItem == NULL)
return;
const TItem* pHelmetEquipItemData = pUserItem->GetEquip(EQUIP_HELMET);
if (pHelmetEquipItemData != NULL)
nEquipID = (pHelmetEquipItemData->nLookItemID != 0) ? pHelmetEquipItemData->nLookItemID : pHelmetEquipItemData->nItemID;
int nCashEquipID = 0;
const TItem* pCashHelmetEquipItemData = pUserItem->GetCashEquip(CASHEQUIP_HELMET);
if (pCashHelmetEquipItemData != NULL)
nCashEquipID = (pCashHelmetEquipItemData->nLookItemID != 0) ? pCashHelmetEquipItemData->nLookItemID : pCashHelmetEquipItemData->nItemID;
Part.nHelmetID = ( pSession->IsExistViewCashEquipBitmap(CASHEQUIP_HELMET) ) ? nCashEquipID : nEquipID;
if( pSession->IsExistViewCashEquipBitmap(HIDEHELMET_BITINDEX) ) Part.nHelmetID = 0;
nEquipID = (pSession->GetItem()->GetEquip(EQUIP_EARRING) == NULL) ? 0 : pSession->GetItem()->GetEquip(EQUIP_EARRING)->nItemID;
nCashEquipID = (pSession->GetItem()->GetCashEquip(CASHEQUIP_EARRING) == NULL) ? 0 : pSession->GetItem()->GetCashEquip(CASHEQUIP_EARRING)->nItemID;
Part.nEarringID = ( pSession->IsExistViewCashEquipBitmap(CASHEQUIP_EARRING) ) ? nCashEquipID : nEquipID;
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYMEMBER_PART, (char*)&Part, sizeof(SCPartyMemberPart));
}
void CDNUserSendManager::SendRequestJoinGetReversionItem(const TItem& reversionItem, const DWORD& dropUniqueID)
{
SCPartyJoinGetReversionItemInfo info;
memset(&info, 0, sizeof(SCPartyJoinGetReversionItemInfo));
info.itemInfo = reversionItem;
info.dropItemUniqueId = dropUniqueID;
m_pSession->AddSendData(SC_PARTY, eParty::SC_REQUEST_JOINGETREVERSIONITEM, (char*)&info, sizeof(SCPartyJoinGetReversionItemInfo));
}
void CDNUserSendManager::SendAskJoinResult(int nRet)
{
SCPartyAskJoinResult packet;
memset(&packet, 0, sizeof(SCPartyAskJoinResult));
packet.nRet = nRet;
m_pSession->AddSendData(SC_PARTY, eParty::SC_ASKJOINPARTYRESULT, (char*)&packet, sizeof(SCPartyAskJoinResult));
}
void CDNUserSendManager::SendAskJoinToLeader(const WCHAR * pwszCharacterName, char cJob, BYTE cLevel)
{
SCPartyAskJoinToLeader packet;
memset(&packet, 0, sizeof(SCPartyAskJoinToLeader));
packet.cJob = cJob;
packet.cLevel = cLevel;
_wcscpy(packet.wszAskChracterName, _countof(packet.wszAskChracterName), pwszCharacterName, (int)wcslen(pwszCharacterName));
m_pSession->AddSendData(SC_PARTY, eParty::SC_ASKJOINPARTYTOLEADER, (char*)&packet, sizeof(SCPartyAskJoinToLeader));
}
#if defined( PRE_PARTY_DB )
void CDNUserSendManager::SendAskJoinAgreeInfo(TPARTYID PartyID, int iPassword )
#else
void CDNUserSendManager::SendAskJoinAgreeInfo(TPARTYID PartyID, const WCHAR * pwszPassword)
#endif // #if defined( PRE_PARTY_DB )
{
SCPartyAskJoinDecisionInfo packet;
memset(&packet, 0, sizeof(SCPartyAskJoinDecisionInfo));
packet.PartyID = PartyID;
#if defined( PRE_PARTY_DB )
packet.iPassword = iPassword;
#else
_wcscpy(packet.wszPartyPassword, _countof(packet.wszPartyPassword), pwszPassword, (int)wcslen(pwszPassword));
#endif // #if defined( PRE_PARTY_DB )
m_pSession->AddSendData(SC_PARTY, eParty::SC_ASKJOINPARTYDECISIONINFO, (char*)&packet, sizeof(SCPartyAskJoinDecisionInfo));
}
void CDNUserSendManager::SendUpdatePartyUI(UINT nSessionID, bool bLeader)
{
SCPartyUpdateFieldUI packet;
memset(&packet, 0, sizeof(SCPartyUpdateFieldUI));
packet.nSessionID = nSessionID;
packet.cLeader = bLeader == true ? 1 : 0;
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYUPDATEFIELDUI, (char*)&packet, sizeof(SCPartyUpdateFieldUI));
}
void CDNUserSendManager::SendPartySwapMemberIndex(CSPartySwapMemberIndex * pPacket, int nRetCode)
{
SCPartySwapMemberIndex packet;
memset(&packet, 0, sizeof(SCPartySwapMemberIndex));
packet.nRetCode = nRetCode;
if(nRetCode == ERROR_NONE && pPacket)
{
packet.cCount = pPacket->cCount;
memcpy(packet.Index, pPacket->Index, sizeof(packet.Index));
if(packet.cCount <= 0)
packet.nRetCode = ERROR_PARTY_SWAPINDEX_FAIL; //<2F>̷<EFBFBD><CCB7><EFBFBD> <20>ƴϵ<C6B4><CFB5>ɴϴ<C9B4>.
}
m_pSession->AddSendData(SC_PARTY, eParty::SC_SWAPMEMBERINDEX, (char*)&packet, sizeof(SCPartySwapMemberIndex) - sizeof(packet.Index) +(sizeof(TSwapMemberIndex) * packet.cCount));
}
void CDNUserSendManager::SendRollDiceForGetReversionItem(UINT nSessionID, bool bRoll, int diceValue)
{
SCRollDiceForGetReverseItem rollInfo;
memset(&rollInfo, 0, sizeof(SCRollDiceForGetReverseItem));
rollInfo.nSessionID = nSessionID;
rollInfo.bRoll = bRoll;
rollInfo.nDiceValue = diceValue;
m_pSession->AddSendData(SC_PARTY, eParty::SC_NOTIFY_ROLLGETREVERSIONITEM, (char*)&rollInfo, sizeof(SCRollDiceForGetReverseItem));
}
void CDNUserSendManager::SendResultGetReversionItem(UINT nSessionID, const TItem& itemInfo, DWORD dropItemUniqueId)
{
SCResultGetReverseItem resultInfo;
memset(&resultInfo, 0, sizeof(SCResultGetReverseItem));
resultInfo.nSessionID = nSessionID;
resultInfo.itemInfo = itemInfo;
resultInfo.dropItemUniqueId = dropItemUniqueId;
m_pSession->AddSendData(SC_PARTY, eParty::SC_NOTIFY_RESULTGETREVERSIONITEM, (char*)&resultInfo, sizeof(SCResultGetReverseItem));
}
void CDNUserSendManager::SendReadyRequest()
{
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYREQUEST, NULL, 0);
}
void CDNUserSendManager::SendMemberAbsent(UINT nSessionID, BYTE cAbsentFlag)
{
SCMemberAbsent packet;
memset(&packet, 0, sizeof(SCMemberAbsent));
packet.nSessionID = nSessionID;
packet.cAbsentFlag = cAbsentFlag;
m_pSession->AddSendData(SC_PARTY, eParty::SC_ABSENT, (char*)&packet, sizeof(SCMemberAbsent));
}
void CDNUserSendManager::SendVerifyDungeonAlloed(int nMapIdx, BYTE cDifficulty, bool * pAllowed)
{
SCVerifyDungeon packet;
memset(&packet, 0, sizeof(SCVerifyDungeon));
for (int i = 0 ; i < sizeof(packet.cVerifyFlag)/sizeof(*packet.cVerifyFlag); i++)
packet.cVerifyFlag[i] = (pAllowed[i] == true) ? 1 : 0;
m_pSession->AddSendData(SC_PARTY, eParty::SC_VERIFYTARGETDUNGEON, (char*)&packet, sizeof(SCMemberAbsent));
}
void CDNUserSendManager::SendPartyBonusValue(int nUpkeepBonusRate, int nFriendBonus, bool bUpkeepMax, int nBeginnerGuildBonus)
{
SCPartyBonusValue packet;
memset(&packet, 0, sizeof(SCPartyBonusValue));
packet.cUpKeepBonusLimit = bUpkeepMax == true ? 1 : 0;
packet.cUpkeepBonus = (BYTE)nUpkeepBonusRate;
if(m_pSession->GetFriendBonus())
packet.cFriendBonus = (BYTE)nFriendBonus;
#ifdef PRE_ADD_BEGINNERGUILD
if (nBeginnerGuildBonus > 0 && m_pSession->CheckBegginerGuild())
packet.cBeginnerGuildBonus = (BYTE)nBeginnerGuildBonus;
#endif //#ifdef PRE_ADD_BEGINNERGUILD
m_pSession->AddSendData(SC_PARTY, eParty::SC_PARTYBONUSVALUE, (char*)&packet, sizeof(SCPartyBonusValue));
}
#if defined(PRE_MOD_REQ_JOIN_PARTY_ANSWER_MSG_APP) && defined(_VILLAGESERVER)
void CDNUserSendManager::SendPartyInfo( int nRetCode, CDNParty* pParty )
{
SCPartyInfo packet;
memset(&packet, 0, sizeof(SCPartyInfo));
packet.nRetCode = ERROR_NONE;
if(nRetCode == ERROR_NONE)
{
if( !pParty || pParty->GetPartyInfo(&packet.PartyInfo) != ERROR_NONE )
packet.nRetCode = ERROR_PARTY_ASKJOIN_PARTY_NOTFOUND;
}
else
packet.nRetCode = nRetCode;
m_pSession->AddSendData( SC_PARTY, eParty::SC_PARTYINFO, reinterpret_cast<char*>(&packet), sizeof(packet) );
}
#endif
// Item
void CDNUserSendManager::SendEquipList(CDNUserItem *pItem)
{
SCEquipList Equip;
memset(&Equip, 0, sizeof(SCEquipList));
#if defined(PRE_ADD_TALISMAN_SYSTEM)
Equip.nTalismanSlotOpenFlag = pItem->GetTalismanSlotOpenFlag();
pItem->GetEquipList(Equip.cCount, Equip.cCashCount, Equip.cGlyphCount, Equip.cTalismanCount, Equip.EquipArray);
m_pSession->AddSendData( SC_ITEM, eItem::SC_EQUIPLIST, (char*)&Equip, sizeof(SCEquipList) - sizeof(Equip.EquipArray) +(sizeof(TItemInfo) *(Equip.cCount+Equip.cCashCount+Equip.cGlyphCount+Equip.cTalismanCount)) );
#else
pItem->GetEquipList(Equip.cCount, Equip.cCashCount, Equip.cGlyphCount, Equip.EquipArray);
m_pSession->AddSendData( SC_ITEM, eItem::SC_EQUIPLIST, (char*)&Equip, sizeof(SCEquipList) - sizeof(Equip.EquipArray) +(sizeof(TItemInfo) *(Equip.cCount+Equip.cCashCount+Equip.cGlyphCount)) );
#endif
}
void CDNUserSendManager::SendInvenList(CDNUserItem *pItem)
{
SCInvenList Inven;
memset(&Inven, 0, sizeof(SCInvenList));
Inven.cInvenMaxCount = pItem->GetInventoryCount();
pItem->GetInventoryList(Inven.Inven, Inven.cInvenCount);
int nSize = sizeof(SCInvenList) - sizeof(Inven.Inven) + (sizeof(TItemInfo) * Inven.cInvenCount);
m_pSession->AddSendData(SC_ITEM, eItem::SC_INVENLIST, (char*)&Inven, nSize);
}
void CDNUserSendManager::SendCashInvenList(int nTotalCount, int nCount, TItem *CashItemList)
{
if(nTotalCount == 0) return;
SCCashInvenList Inven;
memset(&Inven, 0, sizeof(SCCashInvenList));
Inven.nTotalCashInventoryCount = nTotalCount;
if(CashItemList){
Inven.cInvenCount = nCount;
memcpy(Inven.Inven, CashItemList, sizeof(TItem) * Inven.cInvenCount);
}
int nSize = sizeof(SCCashInvenList) - sizeof(Inven.Inven) + (sizeof(TItem) * Inven.cInvenCount);
m_pSession->AddSendData( SC_ITEM, eItem::SC_CASHINVENLIST, (char*)&Inven, nSize );
}
#if defined(_VILLAGESERVER) && defined(PRE_ADD_CASH_REFUND)
void CDNUserSendManager::SendPaymentItemList(CDNUserItem *pItem)
{
if( pItem->IsPaymentItemEmpty() )
return;
int nTotalSize = pItem->GetPaymentItemCount();
int nTotalPage = nTotalSize/CASHINVENTORYMAX;
if( nTotalSize%CASHINVENTORYMAX > 0 )
++nTotalPage;
SCPaymentList PaymentList;
for( int i=0; i<nTotalPage; ++ i)
{
memset(&PaymentList, 0, sizeof(SCPaymentList));
pItem->MakeSendPaymentItem(&PaymentList, i);
int nSize = sizeof(int) + sizeof(BYTE) +(sizeof(TPaymentItemInfo)*PaymentList.cInvenCount);
m_pSession->AddSendData( SC_CASHSHOP, eCashShop::SC_PAYMENT_LIST, (char*)&PaymentList, nSize);
}
}
void CDNUserSendManager::SendPaymentPackageItemList(CDNUserItem *pItem)
{
if( pItem->IsPaymentPackageItemEmpty() )
return;
int nTotalSize = pItem->GetPaymentPackageItemCount();
int nTotalPage = nTotalSize/CASHINVENTORYMAX;
if( nTotalSize%CASHINVENTORYMAX > 0 )
++nTotalPage;
SCPaymentPackageList PaymentPackageList;
for( int i=0; i<nTotalPage; ++ i)
{
memset(&PaymentPackageList, 0, sizeof(SCPaymentPackageList));
pItem->MakeSendPaymentPackageItem(&PaymentPackageList, i);
int nSize = sizeof(int) + sizeof(BYTE) +(sizeof(TPaymentPackageItemInfo)*PaymentPackageList.cInvenCount);
m_pSession->AddSendData( SC_CASHSHOP, eCashShop::SC_PAYMENT_PACKAGELIST, (char*)&PaymentPackageList, nSize);
}
}
#endif
void CDNUserSendManager::SendMoveItem(char cType, BYTE cSrcIndex, BYTE cDestIndex, const TItem *pSrcItem, const TItem *pDestItem, int nRetCode)
{
SCMoveItem Move;
memset(&Move, 0, sizeof(SCMoveItem));
Move.cMoveType = cType;
Move.nRetCode = nRetCode;
if(nRetCode == ERROR_NONE){
Move.SrcItem.cSlotIndex = cSrcIndex;
if(pSrcItem) Move.SrcItem.Item = *pSrcItem;
Move.DestItem.cSlotIndex = cDestIndex;
if(pDestItem) Move.DestItem.Item = *pDestItem;
m_pSession->AddSendData(SC_ITEM, eItem::SC_MOVEITEM, (char*)&Move, sizeof(SCMoveItem));
}
else
m_pSession->AddSendData(SC_ITEM, eItem::SC_MOVEITEM, (char*)&Move, (int)(sizeof(Move) -(sizeof(Move.DestItem) + sizeof(Move.SrcItem))));
}
void CDNUserSendManager::SendMoveCashItem(char cType, BYTE cEquipIndex, const TItem *pEquipItem, INT64 biInvenSerial, const TItem *pInvenItem, int nRetCode)
{
SCMoveCashItem Move;
memset(&Move, 0, sizeof(SCMoveCashItem));
Move.cMoveType = cType;
Move.nRetCode = nRetCode;
if(nRetCode == ERROR_NONE){
Move.CashEquipItem.cSlotIndex = cEquipIndex;
if(pEquipItem)
Move.CashEquipItem.Item = *pEquipItem;
if(pInvenItem)
Move.CashInvenItem = *pInvenItem;
else
Move.CashInvenItem.nSerial = biInvenSerial;
m_pSession->AddSendData(SC_ITEM, eItem::SC_MOVECASHITEM, (char*)&Move, sizeof(SCMoveCashItem));
}
else
m_pSession->AddSendData(SC_ITEM, eItem::SC_MOVECASHITEM, (char*)&Move, (int)(sizeof(SCMoveCashItem) -(sizeof(Move.CashEquipItem) + sizeof(Move.CashInvenItem))));
}
#if defined(PRE_ADD_SERVER_WAREHOUSE)
void CDNUserSendManager::SendServerWareHouseList(CDNUserItem* pItem)
{
SCServerWareList Ware;
memset(&Ware, 0, sizeof(SCServerWareList));
Ware.cWareCount = pItem->CopySendServerWare(&Ware.WareItems[0]);
int nSize = sizeof(SCServerWareList) - sizeof(Ware.WareItems) +(sizeof(TItem) * Ware.cWareCount);
m_pSession->AddSendData( SC_ITEM, eItem::SC_SERVERWARE_LIST, (char*)&Ware, nSize );
}
void CDNUserSendManager::SendServerWareHouseCashList(CDNUserItem* pItem)
{
SCCashServerWareList Ware;
memset(&Ware, 0, sizeof(SCCashServerWareList));
Ware.cWareCount = pItem->CopySendServerWareCash(&Ware.WareCashItems[0]);
int nSize = sizeof(SCCashServerWareList) - sizeof(Ware.WareCashItems) +(sizeof(TItem) * Ware.cWareCount);
m_pSession->AddSendData( SC_ITEM, eItem::SC_CASHSERVERWARE_LIST, (char*)&Ware, nSize );
}
void CDNUserSendManager::SendMoveServerWareItem(char cType, BYTE cInvenIndex, INT64 biWareSerial, const TItem *pInvenItem, const TItem *pServerWareItem, int nRetCode)
{
SCMoveServerWare Move;
memset(&Move, 0, sizeof(SCMoveServerWare));
Move.cMoveType = cType;
Move.nRetCode = nRetCode;
if(nRetCode == ERROR_NONE)
{
Move.InvenItem.cSlotIndex = cInvenIndex;
if(pInvenItem) Move.InvenItem.Item = *pInvenItem;
if(pServerWareItem) Move.ServerWareItem = *pServerWareItem;
else
Move.ServerWareItem.nSerial = biWareSerial;
m_pSession->AddSendData(SC_ITEM, eItem::SC_MOVE_SERVERWARE, (char*)&Move, sizeof(SCMoveServerWare));
}
else
m_pSession->AddSendData(SC_ITEM, eItem::SC_MOVE_SERVERWARE, (char*)&Move, (int)(sizeof(Move) -(sizeof(Move.InvenItem) + sizeof(Move.ServerWareItem))));
}
void CDNUserSendManager::SendMoveServerWareCashItem(char cType, INT64 biSrcItemSerial, const TItem *pSrcItem, const TItem *pDstItem, int nRetCode)
{
SCMoveCashServerWare Move;
memset(&Move, 0, sizeof(SCMoveCashServerWare));
Move.cMoveType = cType;
Move.nRetCode = nRetCode;
if(nRetCode == ERROR_NONE){
if(pSrcItem)
Move.SrcItem = *pSrcItem;
else
Move.biSrcItemSerial = biSrcItemSerial;
if(pDstItem)
Move.DestItem = *pDstItem;
m_pSession->AddSendData(SC_ITEM, eItem::SC_MOVE_CASHSERVERWARE, (char*)&Move, sizeof(SCMoveCashServerWare));
}
else
m_pSession->AddSendData(SC_ITEM, eItem::SC_MOVE_CASHSERVERWARE, (char*)&Move, (int)(sizeof(SCMoveCashServerWare) -(sizeof(Move.SrcItem) + sizeof(Move.DestItem))));
}
#endif //#if defined(PRE_ADD_SERVER_WAREHOUSE)
void CDNUserSendManager::SendRefreshInvenPickUpByType(char cType, int nRetCode, BYTE cInvenIndex, TItem *pPickUpItem, short wCount)
{
switch(cType) {
case CREATEINVEN_PICKUP:
case CREATEINVEN_PICKUP_DICE:
{
SendPickUp(nRetCode, cInvenIndex, pPickUpItem, wCount);
}
break;
case CREATEINVEN_QUEST:
case CREATEINVEN_ETC:
default:
{
SendRefreshInven(cInvenIndex, pPickUpItem, true);
}
break;
}
}
void CDNUserSendManager::SendPickUp(int nRetCode, BYTE cInvenIndex, TItem *pPickUpItem, short wCount )
{
SCPickUp PickUp;
memset(&PickUp, 0, sizeof(SCPickUp));
PickUp.nRetCode = nRetCode;
PickUp.wCount = wCount;
if(pPickUpItem){
PickUp.PickUpItem.cSlotIndex = cInvenIndex;
PickUp.PickUpItem.Item = *pPickUpItem;
m_pSession->AddSendData(SC_ITEM, eItem::SC_PICKUP, (char*)&PickUp, sizeof(SCPickUp));
#if defined(_GAMESERVER)
m_pSession->GetGameRoom()->OnDispatchMessage( m_pSession, SC_ITEM, eItem::SC_PICKUP, (char*)&PickUp, sizeof(SCPickUp), 0 );
#endif
}
else{
m_pSession->AddSendData(SC_ITEM, eItem::SC_PICKUP, (char*)&PickUp, (int)(sizeof(short)));
#if defined(_GAMESERVER)
m_pSession->GetGameRoom()->OnDispatchMessage( m_pSession, SC_ITEM, eItem::SC_PICKUP, (char*)&PickUp, (int)(sizeof(short)), 0 );
#endif
}
}
void CDNUserSendManager::SendRemoveItem(char cType, BYTE cSrcIndex, TItem *pRemoveItemItem, int nRetCode)
{
SCRemoveItem RemoveItem;
memset(&RemoveItem, 0, sizeof(SCRemoveItem));
RemoveItem.cType = cType;
RemoveItem.nRetCode = nRetCode;
if(nRetCode == ERROR_NONE){
RemoveItem.ItemInfo.cSlotIndex = cSrcIndex;
RemoveItem.ItemInfo.Item = *pRemoveItemItem;
m_pSession->AddSendData(SC_ITEM, eItem::SC_REMOVEITEM, (char*)&RemoveItem, sizeof(SCRemoveItem));
#if defined(_GAMESERVER)
if(cType == ITEMPOSITION_QUESTINVEN) // <20><><EFBFBD><EFBFBD>Ʈ <20>κ<EFBFBD><CEBA>϶<EFBFBD><CFB6><EFBFBD>
{
m_pSession->GetGameRoom()->OnDispatchMessage( m_pSession, SC_ITEM, eItem::SC_REMOVEQUESTITEM, (char*)&RemoveItem, sizeof(SCRemoveItem), 0 );
}
#endif
}
else
m_pSession->AddSendData(SC_ITEM, eItem::SC_REMOVEITEM, (char*)&RemoveItem, (int)(sizeof(short)+sizeof(char)));
}
void CDNUserSendManager::SendChangeEquip(UINT nSessionID, TItemInfo &ItemInfo)
{
SCChangeEquip ChangeEquip;
memset(&ChangeEquip, 0, sizeof(SCChangeEquip));
ChangeEquip.nSessionID = nSessionID;
ChangeEquip.ItemInfo = ItemInfo;
m_pSession->AddSendData(SC_ITEM, eItem::SC_CHANGEEQUIP, (char*)&ChangeEquip, sizeof(SCChangeEquip));
}
void CDNUserSendManager::SendChangeCashEquip(UINT nSessionID, TItemInfo &ItemInfo)
{
SCChangeCashEquip ChangeEquip;
memset(&ChangeEquip, 0, sizeof(SCChangeCashEquip));
ChangeEquip.nSessionID = nSessionID;
ChangeEquip.ItemInfo = ItemInfo;
m_pSession->AddSendData(SC_ITEM, eItem::SC_CHANGECASHEQUIP, (char*)&ChangeEquip, sizeof(SCChangeCashEquip));
}
void CDNUserSendManager::SendRefreshInven(BYTE cInvenIndex, const TItem *pInvenItem, bool bNewSign)
{
SCRefreshInven RefreshInven;
memset(&RefreshInven, 0, sizeof(SCRefreshInven));
RefreshInven.bNewSign = bNewSign;
RefreshInven.ItemInfo.cSlotIndex = cInvenIndex;
if(pInvenItem) RefreshInven.ItemInfo.Item = *pInvenItem;
int nLen = sizeof(SCRefreshInven);
m_pSession->AddSendData(SC_ITEM, eItem::SC_REFRESHINVEN, (char*)&RefreshInven, nLen);
#if defined(_GAMESERVER)
m_pSession->GetGameRoom()->OnDispatchMessage( m_pSession, SC_ITEM, eItem::SC_REFRESHINVEN, (char*)&RefreshInven, nLen, 0 );
#endif
}
void CDNUserSendManager::SendRefreshCashInven(const TItem &InvenItem, bool bNewSign/* = true*/)
{
SCRefreshCashInven RefreshInven;
memset(&RefreshInven, 0, sizeof(SCRefreshCashInven));
RefreshInven.bNewSign = bNewSign;
RefreshInven.nCount = 1;
RefreshInven.ItemList[0] = InvenItem;
int nLen = sizeof(SCRefreshCashInven) - sizeof(RefreshInven.ItemList) +(sizeof(TItem) * RefreshInven.nCount);
m_pSession->AddSendData(SC_ITEM, eItem::SC_REFRESHCASHINVEN, (char*)&RefreshInven, nLen);
#if defined(_GAMESERVER)
m_pSession->GetGameRoom()->OnDispatchMessage( m_pSession, SC_ITEM, eItem::SC_REFRESHCASHINVEN, (char*)&RefreshInven, nLen, 0 );
#endif
}
void CDNUserSendManager::SendRefreshCashInven(std::vector<TItem> VecItemList, bool bNewSign/* = true*/)
{
SCRefreshCashInven RefreshInven;
memset(&RefreshInven, 0, sizeof(SCRefreshCashInven));
RefreshInven.bNewSign = bNewSign;
RefreshInven.nCount = (int)VecItemList.size();
for (int i = 0; i < RefreshInven.nCount; i++){
RefreshInven.ItemList[i] = VecItemList[i];
}
int nLen = sizeof(SCRefreshCashInven) - sizeof(RefreshInven.ItemList) +(sizeof(TItem) * RefreshInven.nCount);
m_pSession->AddSendData(SC_ITEM, eItem::SC_REFRESHCASHINVEN, (char*)&RefreshInven, nLen);
#if defined(_GAMESERVER)
m_pSession->GetGameRoom()->OnDispatchMessage( m_pSession, SC_ITEM, eItem::SC_REFRESHCASHINVEN, (char*)&RefreshInven, nLen, 0 );
#endif
}
#if defined(PRE_ADD_EQUIPED_ITEM_ENCHANT)
void CDNUserSendManager::SendRefreshEquip(char cEquipIndex, const TItem *pEquipItem, bool bRefreshtate/*=false*/)
#else
void CDNUserSendManager::SendRefreshEquip(char cEquipIndex, const TItem *pEquipItem)
#endif
{
SCRefreshEquip RefreshEquip;
memset( &RefreshEquip, 0, sizeof(SCRefreshEquip) );
RefreshEquip.ItemInfo.cSlotIndex = cEquipIndex;
if(pEquipItem) RefreshEquip.ItemInfo.Item = *pEquipItem;
#if defined(PRE_ADD_EQUIPED_ITEM_ENCHANT)
RefreshEquip.bRefreshState = bRefreshtate;
#endif
m_pSession->AddSendData(SC_ITEM, eItem::SC_REFRESHEQUIP, (char*)&RefreshEquip, sizeof(SCRefreshEquip));
#if defined(_GAMESERVER)
m_pSession->GetGameRoom()->OnDispatchMessage( m_pSession, SC_ITEM, eItem::SC_REFRESHEQUIP, (char*)&RefreshEquip, sizeof(SCRefreshEquip), 0 );
#endif
}
void CDNUserSendManager::SendRefreshWarehouse(BYTE cWarehouseIndex, const TItem *pWarehouseItem)
{
SCRefreshWarehouse Refreshwarehouse;
memset(&Refreshwarehouse, 0, sizeof(SCRefreshWarehouse));
Refreshwarehouse.ItemInfo.cSlotIndex = cWarehouseIndex;
if(pWarehouseItem) Refreshwarehouse.ItemInfo.Item = *pWarehouseItem;
int nLen = sizeof(SCRefreshWarehouse);
m_pSession->AddSendData(SC_ITEM, eItem::SC_REFRESHWAREHOUSE, (char*)&Refreshwarehouse, nLen);
}
void CDNUserSendManager::SendWarehouseList(INT64 nWarehouseCoin, CDNUserItem *pItem)
{
SCWarehouseList Ware;
memset(&Ware, 0, sizeof(SCWarehouseList));
Ware.nWarehouseCoin = nWarehouseCoin;
Ware.cWareMaxCount = pItem->GetWarehouseCount();
pItem->GetWarehouseList(Ware.Warehouse, Ware.cWareCount);
int nSize = sizeof(SCWarehouseList) - sizeof(Ware.Warehouse) + (sizeof(TItemInfo) * Ware.cWareMaxCount);
m_pSession->AddSendData(SC_ITEM, eItem::SC_WAREHOUSELIST, (char*)&Ware, nSize);
}
void CDNUserSendManager::SendUseItem(int nInvenType, BYTE cInvenIndex, INT64 biItemSerial)
{
SCUseItem UseItem = { 0, };
UseItem.cInvenType = nInvenType;
UseItem.cInvenIndex = cInvenIndex;
UseItem.biInvenSerial = biItemSerial;
m_pSession->AddSendData( SC_ITEM, eItem::SC_USEITEM, (char*)&UseItem, sizeof(SCUseItem) );
}
void CDNUserSendManager::SendEmblemCompoundOpen( int nRet )
{
SCEmblemCompundOpenRes Result;
Result.nResult = nRet;
m_pSession->AddSendData( SC_ITEM, eItem::SC_EMBLEM_COMPOUND_OPEN_RES, (char*)&Result, sizeof(SCEmblemCompundOpenRes) );
}
void CDNUserSendManager::SendItemCompoundOpen( int nRet )
{
SCItemCompoundOpenRes Result;
Result.nResult = nRet;
m_pSession->AddSendData( SC_ITEM, eItem::SC_ITEM_COMPOUND_OPEN_RES, (char*)&Result, sizeof(SCItemCompoundOpenRes) );
}
void CDNUserSendManager::SendEmblemCompoundRes( int nSuccess, int nResultItemID )
{
SCCompoundEmblemRes packet;
packet.sResult = (short)nSuccess;
packet.nResultItemID = nResultItemID;
m_pSession->AddSendData( SC_ITEM, eItem::SC_EMBLEM_COMPOUND_RES, (char*)&packet, sizeof(SCCompoundEmblemRes) );
}
void CDNUserSendManager::SendItemCompoundRes( int nSuccess, int nResultItemID, char cLevel, char cOption )
{
SCCompoundItemRes packet;
packet.sResult = (short)nSuccess;
packet.nResultItemID = nResultItemID;
packet.cLevel = cLevel;
packet.cOption = cOption;
m_pSession->AddSendData( SC_ITEM, eItem::SC_ITEM_COMPOUND_RES, (char*)&packet, sizeof(SCCompoundItemRes) );
}
void CDNUserSendManager::SendEmblemCompoundCancel( int nRet )
{
SCEmblemCompoundCancelRes Result;
Result.nResult = nRet;
m_pSession->AddSendData( SC_ITEM, eItem::SC_EMBLEM_COMPOUND_CANCEL_RES, (char*)&Result, sizeof(SCEmblemCompoundCancelRes) );
}
void CDNUserSendManager::SendItemCompoundCancel( int nRet )
{
SCItemCompoundCancelRes Result;
Result.nResult = nRet;
m_pSession->AddSendData( SC_ITEM, eItem::SC_ITEM_COMPOUND_CANCEL_RES, (char*)&Result, sizeof(SCItemCompoundCancelRes) );
}
void CDNUserSendManager::SendInventoryMaxCount(BYTE cInvenMaxCount)
{
SCInventoryMaxCount MaxCount = { 0, };
MaxCount.cInvenMaxCount = cInvenMaxCount;
m_pSession->AddSendData(SC_ITEM, eItem::SC_INVENTORYMAXCOUNT, (char*)&MaxCount, sizeof(SCInventoryMaxCount));
}
void CDNUserSendManager::SendGlyphExtendCount( int iCount )
{
SCGlyphExtendCount TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cCount = static_cast<BYTE>(iCount);
m_pSession->AddSendData(SC_ITEM, eItem::SC_GLYPHEXTENDCOUNT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendGlyphExpireData( TCashGlyphData *GlyphExpireData )
{
SCGlyphExpireData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
BYTE count = 0;
for (int i=0;i<CASHGLYPHSLOTMAX;i++)
{
if(GlyphExpireData[i].cActiveGlyph)
{
TxPacket.TGlyphData[count].cActiveGlyph = GlyphExpireData[i].cActiveGlyph;
TxPacket.TGlyphData[count].tGlyphExpireDate = GlyphExpireData[i].tGlyphExpireDate;
count++;
}
}
TxPacket.cCount = count;
int nSize = sizeof(SCGlyphExpireData) - sizeof(TxPacket.TGlyphData) +(sizeof(TCashGlyphData) * TxPacket.cCount);
m_pSession->AddSendData(SC_ITEM, eItem::SC_GLYPHEXPIREDATA, reinterpret_cast<char*>(&TxPacket), nSize );
}
void CDNUserSendManager::SendWarehouseMaxCount(BYTE cWareMaxCount)
{
SCWarehouseMaxCount MaxCount = { 0, };
MaxCount.cWareMaxCount = cWareMaxCount;
m_pSession->AddSendData(SC_ITEM, eItem::SC_WAREHOUSEMAXCOUNT, (char*)&MaxCount, sizeof(SCWarehouseMaxCount));
}
void CDNUserSendManager::SendRebirthCoin(int nRet, int nUsableRebirthCoin, eRebirthType type, UINT nSessionID)
{
SCRebirthCoin Coin = { 0, };
Coin.nRet = nRet;
Coin.nUsableRebirthCoin = nUsableRebirthCoin;
Coin.cRebirthCoin = m_pSession->GetRebirthCoin();
Coin.cPCBangRebirthCoin = m_pSession->GetPCBangRebirthCoin();
Coin.wRebirthCashCoin = m_pSession->GetRebirthCashCoin();
Coin.nRebirthType = type;
Coin.nSessionID = nSessionID;
#if defined(PRE_ADD_VIP)
Coin.cVIPRebirthCoin = m_pSession->GetVIPRebirthCoin();
#endif // #if defined(PRE_ADD_VIP)
m_pSession->AddSendData(SC_ITEM, eItem::SC_REBIRTH_COIN, (char*)&Coin, sizeof(SCRebirthCoin));
#ifdef _GAMESERVER
if(nRet == ERROR_NONE && m_pSession->GetGameRoom())
m_pSession->GetGameRoom()->SendRefreshRebirthCoin(m_pSession->GetSessionID(), m_pSession->GetRebirthCoin(), m_pSession->GetPCBangRebirthCoin(), m_pSession->GetRebirthCashCoin(), m_pSession->GetVIPRebirthCoin());
#endif // _GAMESERVER
}
void CDNUserSendManager::SendRefreshRebirthCoin(UINT nSessionID, BYTE cRebirthCoin, BYTE cPCBangRebirthCoin, short nCashRebirthCoin, BYTE cVIPRebirthCoin)
{
SCRefreshRebirthCoin packet;
memset(&packet, 0, sizeof(packet));
packet.nSessionID = nSessionID;
packet.cRebirthCoin = cRebirthCoin;
packet.cPCBangRebirthCoin = cPCBangRebirthCoin;
packet.nCashRebirthCoin = nCashRebirthCoin;
#if defined(PRE_ADD_VIP)
packet.cVIPRebirthCoin = cVIPRebirthCoin;
#endif // #if defined(PRE_ADD_VIP)
m_pSession->AddSendData(SC_PARTY, eParty::SC_REFRESHREBIRTHCOIN, (char*)&packet, sizeof(packet));
}
#if defined(PRE_ADD_REBIRTH_EVENT)
void CDNUserSendManager::SendRebirthMaxCoin(int nRebirthMaxCoin)
{
SCRebirthMaxCoin packet;
memset(&packet, 0, sizeof(packet));
packet.nRebirthMaxCoin = nRebirthMaxCoin;
m_pSession->AddSendData(SC_CHAR, eChar::SC_REBIRTH_MAXCOIN, (char*)&packet, sizeof(packet));
}
#endif
void CDNUserSendManager::SendQuestInvenList(CDNUserItem *pItem)
{
SCQuestInvenList QuestInvenList = { 0, };
int nCount = 0;
for (int i = 0; i < QUESTINVENTORYMAX; i++){
if(!pItem->GetQuestInventory(i)) continue;
QuestInvenList.QuestInventory[nCount].cSlotIndex = i;
QuestInvenList.QuestInventory[nCount].Item.nItemID = pItem->GetQuestInventory(i)->nItemID;
QuestInvenList.QuestInventory[nCount].Item.nSerial = pItem->GetQuestInventory(i)->nSerial;
QuestInvenList.QuestInventory[nCount].Item.wCount = pItem->GetQuestInventory(i)->wCount;
nCount++;
}
QuestInvenList.cQuestInvenCount = nCount;
int nSize = sizeof(char) +(sizeof(TItemInfo) * nCount);
m_pSession->AddSendData(SC_ITEM, eItem::SC_QUESTINVENLIST, (char*)&QuestInvenList, nSize);
}
void CDNUserSendManager::SendRefreshQuestInven(BYTE cIndex, TQuestItem &QuestItem)
{
SCRefreshQuestInven RefreshInven;
memset(&RefreshInven, 0, sizeof(SCRefreshQuestInven));
RefreshInven.ItemInfo.cSlotIndex = cIndex;
RefreshInven.ItemInfo.Item.nItemID = QuestItem.nItemID;
RefreshInven.ItemInfo.Item.nSerial = QuestItem.nSerial;
RefreshInven.ItemInfo.Item.wCount = QuestItem.wCount;
int nLen = sizeof(SCRefreshQuestInven);
m_pSession->AddSendData(SC_ITEM, eItem::SC_REFRESHQUESTINVEN, (char*)&RefreshInven, nLen);
#if defined(_GAMESERVER)
m_pSession->GetGameRoom()->OnDispatchMessage( m_pSession, SC_ITEM, eItem::SC_REFRESHQUESTINVEN, (char*)&RefreshInven, nLen, 0 );
#endif
}
void CDNUserSendManager::SendRepairEquip(int nRet)
{
SCRepairResult Result;
memset(&Result, 0, sizeof(SCRepairResult));
Result.nRet = nRet;
m_pSession->AddSendData(SC_ITEM, eItem::SC_REPAIR_EQUIP, (char*)&Result, sizeof(SCRepairResult));
}
void CDNUserSendManager::SendRepairAll(int nRet)
{
SCRepairResult Result;
memset(&Result, 0, sizeof(SCRepairResult));
Result.nRet = nRet;
m_pSession->AddSendData(SC_ITEM, eItem::SC_REPAIR_ALL, (char*)&Result, sizeof(SCRepairResult));
}
void CDNUserSendManager::SendMoveCoin(char cType, INT64 nAddCoin, INT64 nInventoryCoin, INT64 nWarehouseCoin, int nRet)
{
SCMoveCoin Coin;
memset(&Coin, 0, sizeof(SCMoveCoin));
Coin.cMoveType = cType;
Coin.nMoveCoin = nAddCoin;
Coin.nInventoryCoin = nInventoryCoin;
Coin.nWarehouseCoin = nWarehouseCoin;
Coin.nRet = nRet;
m_pSession->AddSendData(SC_ITEM, eItem::SC_MOVECOIN, (char*)&Coin, sizeof(SCMoveCoin));
}
void CDNUserSendManager::SendRequestRandomItem(int nInvenType, BYTE cInvenIndex, INT64 biItemSerial, short nRetCode)
{
SCRequestRandomItem RandomItem;
memset( &RandomItem, 0, sizeof(SCRequestRandomItem) );
RandomItem.cInvenType = nInvenType;
RandomItem.cInvenIndex = cInvenIndex;
RandomItem.biInvenSerial = biItemSerial;
RandomItem.nRet = nRetCode;
m_pSession->AddSendData( SC_ITEM, eItem::SC_REQUEST_RANDOMITEM, (char*)&RandomItem, sizeof(SCRequestRandomItem) );
}
void CDNUserSendManager::SendCompleteRandomItem( int nInvenType, char cLevel, int nResultItemID, int nItemCount, short nRetCode )
{
SCCompleteRandomItem RandomItem;
memset( &RandomItem, 0, sizeof(SCCompleteRandomItem) );
RandomItem.cInvenType = nInvenType;
RandomItem.cLevel = cLevel;
RandomItem.nResultItemID = nResultItemID;
RandomItem.nItemCount = nItemCount;
RandomItem.nRet = nRetCode;
m_pSession->AddSendData( SC_ITEM, eItem::SC_COMPLETE_RANDOMITEM, (char*)&RandomItem, sizeof(SCCompleteRandomItem) );
}
// <20><>ȭ
#if defined(PRE_ADD_EQUIPED_ITEM_ENCHANT)
void CDNUserSendManager::SendEnchant(int nItemIndex, bool bEnchantEquipedItem, int nRet, bool bCashItem)
#else
void CDNUserSendManager::SendEnchant(int nInvenIndex, int nRet)
#endif
{
SCEnchantItem Result;
memset(&Result, 0, sizeof(SCEnchantItem));
#if defined(PRE_ADD_EQUIPED_ITEM_ENCHANT)
Result.cItemIndex = nItemIndex;
Result.bEnchantEquipedItem = bEnchantEquipedItem;
#else
Result.cInvenIndex = nInvenIndex;
#endif
Result.bCashItem = bCashItem;
Result.nRet = nRet;
m_pSession->AddSendData(SC_ITEM, eItem::SC_ENCHANT, (char*)&Result, sizeof(SCEnchantItem));
}
void CDNUserSendManager::SendEnchantComplete(int nItemID, char cLevel, char cOption, int nRet, bool bCashItem)
{
SCEnchantComplete Result;
memset(&Result, 0, sizeof(SCEnchantComplete));
Result.nItemID = nItemID;
Result.cLevel = cLevel;
Result.cOption = cOption;
Result.bIsCashItem = bCashItem;
Result.nRet = nRet;
m_pSession->AddSendData(SC_ITEM, eItem::SC_ENCHANTCOMPLETE, (char*)&Result, sizeof(SCEnchantComplete));
}
void CDNUserSendManager::SendEnchantCancel(int nRet)
{
SCEnchantCancel Result;
memset(&Result, 0, sizeof(SCEnchantCancel));
Result.nRet = nRet;
m_pSession->AddSendData(SC_ITEM, eItem::SC_ENCHANTCANCEL, (char*)&Result, sizeof(SCEnchantCancel));
}
void CDNUserSendManager::SendCosMixOpen(int nRet)
{
SCCosMixOpen Result;
memset(&Result, 0, sizeof(SCCosMixOpen));
Result.nRet = nRet;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_COSMIXOPEN, (char*)&Result, sizeof(SCCosMixOpen));
}
void CDNUserSendManager::SendCosMixClose(int nRet, int nSubCmd)
{
SCCosMixClose Result;
memset(&Result, 0, sizeof(SCCosMixClose));
Result.nRet = nRet;
eItemGoods::eSCItemGoods prtcl = (nSubCmd == eItemGoods::CS_COSMIXCOMPLETECLOSE) ? eItemGoods::SC_COSMIXCOMPLETECLOSE : eItemGoods::SC_COSMIXCLOSE;
m_pSession->AddSendData(SC_ITEMGOODS, prtcl, (char*)&Result, sizeof(SCCosMixClose));
}
void CDNUserSendManager::SendCosMixComplete(int nRet, int nItemId, char cOption)
{
SCCosMix result;
memset(&result, 0, sizeof(SCCosMix));
result.nRet = nRet;
result.nResultItemID = nItemId;
result.cOption = cOption;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_COSMIXCOMPLETE, (char*)&result, sizeof(SCCosMix));
}
void CDNUserSendManager::SendCosDesignMixOpen(int nRet)
{
SCCosDesignMixOpen Result;
memset(&Result, 0, sizeof(SCCosDesignMixOpen));
Result.nRet = nRet;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_DESIGNMIXOPEN, (char*)&Result, sizeof(SCCosDesignMixOpen));
}
void CDNUserSendManager::SendCosDesignMixClose(int nRet, int nSubCmd)
{
SCCosDesignMixClose Result;
memset(&Result, 0, sizeof(SCCosDesignMixClose));
Result.nRet = nRet;
eItemGoods::eSCItemGoods prtcl = (nSubCmd == eItemGoods::CS_DESIGNMIXCOMPLETECLOSE) ? eItemGoods::SC_DESIGNMIXCOMPLETECLOSE : eItemGoods::SC_DESIGNMIXCLOSE;
m_pSession->AddSendData(SC_ITEMGOODS, prtcl, (char*)&Result, sizeof(SCCosDesignMixClose));
}
void CDNUserSendManager::SendCosDesignMixComplete(int nRet, INT64 biItemSertial, int nLookItemID)
{
SCCosDesignMix result;
memset(&result, 0, sizeof(SCCosDesignMix));
result.nRet = nRet;
result.biItemSertial = biItemSertial;
result.nLookItemID = nLookItemID;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_DESIGNMIXCOMPLETE, (char*)&result, sizeof(SCCosDesignMix));
}
#ifdef PRE_ADD_COSRANDMIX
#ifdef PRE_ADD_COSRANDMIX_ACCESSORY
void CDNUserSendManager::SendCosRandomMixOpen(int nRet, CostumeMix::RandomMix::eOpenType type)
#else
void CDNUserSendManager::SendCosRandomMixOpen(int nRet)
#endif
{
SCCosRandomMixOpen Result;
memset(&Result, 0, sizeof(SCCosRandomMixOpen));
Result.nRet = nRet;
#ifdef PRE_ADD_COSRANDMIX_ACCESSORY
Result.nOpenType = (int)type;
#endif
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_RANDOMMIXOPEN, (char*)&Result, sizeof(SCCosRandomMixOpen));
}
void CDNUserSendManager::SendCosRandomMixClose(int nRet, int nSubCmd)
{
SCCosRandomMixClose Result;
memset(&Result, 0, sizeof(SCCosRandomMixClose));
Result.nRet = nRet;
eItemGoods::eSCItemGoods prtcl = (nSubCmd == eItemGoods::CS_RANDOMMIXCOMPLETECLOSE) ? eItemGoods::SC_RANDOMMIXCOMPLETECLOSE : eItemGoods::SC_RANDOMMIXCLOSE;
m_pSession->AddSendData(SC_ITEMGOODS, prtcl, (char*)&Result, sizeof(SCCosRandomMixClose));
}
void CDNUserSendManager::SendCosRandomMixComplete(int nRet, int nResultItemId)
{
SCCosRandomMix result;
memset(&result, 0, sizeof(SCCosRandomMix));
result.nRet = nRet;
result.nResultItemID = nResultItemId;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_RANDOMMIXCOMPLETE, (char*)&result, sizeof(SCCosRandomMix));
}
#endif // PRE_ADD_COSRANDMIX
void CDNUserSendManager::SendPotentialItemResult( int nRet, int nSlotIndex )
{
SCPotentialItem result;
result.nRet = nRet;
result.cInvenIndex = nSlotIndex;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_POTENTIALJEWEL, (char*)&result, sizeof(SCPotentialItem));
}
#if defined(PRE_MOD_POTENTIAL_JEWEL_RENEWAL)
void CDNUserSendManager::SendPotentialItemRollbackResult(int nRet)
{
SCPotentialItemRollback result;
result.nRet = nRet;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_POTENTIALJEWEL_ROLLBACK, (char*)&result, sizeof(SCPotentialItemRollback));
}
#endif // #if defined(PRE_MOD_POTENTIAL_JEWEL_RENEWAL
void CDNUserSendManager::SendCharmItemRequest(int nInvenType, short sInvenIndex, INT64 biItemSerial, short nRetCode, std::vector<TCharmItem> * pvRandomGiveItemList)
{
SCCharmItemRequest Item = {0,};
Item.biInvenSerial = biItemSerial;
Item.sInvenIndex = sInvenIndex;
Item.cInvenType = nInvenType;
Item.nRet = nRetCode;
#ifdef PRE_ADD_GETITEM_WITH_RANDOMVALUE
if (pvRandomGiveItemList && (!pvRandomGiveItemList->empty()))
{
std::vector<TCharmItem>::iterator ii;
for (ii = pvRandomGiveItemList->begin(); ii != pvRandomGiveItemList->end(); ii++)
{
Item.RandomGiveItems[Item.cRandomGiveCount].nItemID = (*ii).nItemID;
Item.RandomGiveItems[Item.cRandomGiveCount].nCount = (*ii).nCount;
Item.RandomGiveItems[Item.cRandomGiveCount].nPeriod = (*ii).nPeriod;
Item.RandomGiveItems[Item.cRandomGiveCount].nGold = (*ii).nGold;
Item.cRandomGiveCount++;
if (Item.cRandomGiveCount >= RANDOMGIVE_CHARMITEM_MAX)
break;
}
}
#endif //#ifdef PRE_ADD_GETITEM_WITH_RANDOMVALUE
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_CHARMITEMREQUEST, (char*)&Item, sizeof(SCCharmItemRequest));
}
void CDNUserSendManager::SendCharmItemComplete(int nInvenType, int nResultItemID, int nResultItemCount, int nResultPeriod, short nRetCode)
{
SCCharmItemComplete Item = {0,};
Item.cInvenType = nInvenType;
Item.nResultItemID = nResultItemID;
Item.nItemCount = nResultItemCount; // ItemCount or Gold
Item.nPeriod = nResultPeriod;
Item.nRet = nRetCode;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_CHARMITEMCOMPLETE, (char*)&Item, sizeof(SCCharmItemComplete));
}
#if defined (PRE_ADD_BESTFRIEND)
void CDNUserSendManager::SendBestFriendItemRequest(INT64 biItemSerial, short nRetCode)
{
SCBestFriendItemRequest Item = {0,};
Item.biGiftSerial = biItemSerial;
Item.nRet = nRetCode;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_BESTFRIENDREQUEST, (char*)&Item, sizeof(SCBestFriendItemRequest));
}
void CDNUserSendManager::SendBestFriendItemComplete(int nResultItemID, int nResultItemCount, int nResultPeriod, short nRetCode)
{
SCBestFriendItemComplete Item = {0,};
Item.nResultItemID = nResultItemID;
Item.nItemCount = nResultItemCount;
Item.nPeriod = nResultPeriod;
Item.nRet = nRetCode;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_BESTFRIENDCOMPLETE, (char*)&Item, sizeof(SCBestFriendItemComplete));
}
#endif
#if defined (PRE_ADD_CHAOSCUBE)
void CDNUserSendManager::SendChaosCubeRequest(char cInvenType, int nCount, TChaosItem ChaosItem[MAX_CHAOSCUBE_STUFF], short nRetCode)
{
SCChaosCubeRequest Item = {0,};
Item.nRet = nRetCode;
Item.cInvenType = cInvenType;
Item.nCount = nCount;
if (ChaosItem)
memcpy (Item.ChaosItem, ChaosItem, sizeof(TChaosItem)*nCount);
int nSize = sizeof(SCChaosCubeRequest) - sizeof (Item.ChaosItem) + (sizeof(TChaosItem)*nCount);
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_CHAOSCUBEREQUEST, (char*)&Item, nSize);
}
void CDNUserSendManager::SendChaosCubeComplete(char cInvenType, int nResultItemID, int nResultItemCount, int nResultPeriod, short nRetCode)
{
SCChaosCubeComplete Item = {0,};
Item.cInvenType = cInvenType;
Item.nResultItemID = nResultItemID;
Item.nItemCount = nResultItemCount; // ItemCount or Gold
Item.nPeriod = nResultPeriod;
Item.nRet = nRetCode;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_CHAOSCUBECOMPLETE, (char*)&Item, sizeof(SCChaosCubeComplete));
}
#endif
void CDNUserSendManager::SendPetalTokenResult(int nUseItemID, int nTotalPetal)
{
SCPetalTokenResult Item = { 0, };
Item.nUseItemID = nUseItemID;
Item.nTotalPetal = nTotalPetal;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_PETALTOKENRESULT, (char*)&Item, sizeof(SCPetalTokenResult));
}
void CDNUserSendManager::SendAppellationGainResult(int nAppellationArrayIndex, int nRet)
{
SCAppellationGainResult Item = { 0, };
Item.nArrayIndex = nAppellationArrayIndex;
Item.nRet = nRet;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_APPELLATIONGAINRESULT, (char*)&Item, sizeof(SCAppellationGainResult));
}
void CDNUserSendManager::SendEnchantJewelItemResult( int nRet, int nSlotIndex )
{
SCEnchantJewelItem result;
result.nRet = nRet;
result.cInvenIndex = nSlotIndex;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_ENCHANTJEWEL, (char*)&result, sizeof(SCEnchantJewelItem));
}
void CDNUserSendManager::SendExpandSkillPageResult( int nRet )
{
SCExpandSkillPageItem result;
result.nRet = nRet;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_EXPANDSKILLPAGERESULT, (char*)&result, sizeof(SCExpandSkillPageItem));
}
void CDNUserSendManager::SendGlyphTimeInfo(int nDelayArray, int nRemainArray)
{
SCGlyphTimeInfo Glyph;
memset(&Glyph, 0, sizeof(SCGlyphTimeInfo));
Glyph.nDelayTime = nDelayArray;
Glyph.nRemainTime = nRemainArray;
m_pSession->AddSendData(SC_ITEM, eItem::SC_GLYPHTIMEINFO, (char*)&Glyph, sizeof(SCGlyphTimeInfo));
}
void CDNUserSendManager::SendSortInventory(int nRet)
{
SCSortInventory Sort = { 0, };
Sort.nRet = nRet;
m_pSession->AddSendData(SC_ITEM, eItem::SC_SORTINVENTORY, (char*)&Sort, sizeof(SCSortInventory));
}
void CDNUserSendManager::SendDecreaseDurabilityInventory( char cType, void *pValue )
{
SCDecreaseDurabilityInventory Durability;
memset( &Durability, 0, sizeof(SCDecreaseDurabilityInventory) );
Durability.cType = cType;
switch( cType ) {
case 0: Durability.nAbsolute = *(int*)pValue; break;
case 1: Durability.fRatio = *(float*)pValue; break;
}
m_pSession->AddSendData(SC_ITEM, eItem::SC_DECREASE_DURABILITY_INVENTORY, (char*)&Durability, sizeof(SCDecreaseDurabilityInventory));
}
void CDNUserSendManager::SendBroadcastingEffect(UINT nSessionID, char cType, char cState)
{
SCBroadcastingEffect Effect;
memset(&Effect, 0, sizeof(SCBroadcastingEffect));
Effect.nSessionID = nSessionID;
Effect.cType = cType;
Effect.cState = cState;
m_pSession->AddSendData(SC_ITEM, eItem::SC_BROADCASTINGEFFECT, (char*)&Effect, sizeof(SCBroadcastingEffect));
}
void CDNUserSendManager::SendChangeGlyph(UINT nSessionID, TItemInfo &ItemInfo)
{
SCChangeGlyph ChangeGlyph;
memset(&ChangeGlyph, 0, sizeof(SCChangeGlyph));
ChangeGlyph.nSessionID = nSessionID;
ChangeGlyph.ItemInfo = ItemInfo;
m_pSession->AddSendData(SC_ITEM, eItem::SC_CHANGEGLYPH, (char*)&ChangeGlyph, sizeof(SCChangeGlyph));
}
#if defined(PRE_ADD_TALISMAN_SYSTEM)
void CDNUserSendManager::SendChangeTalisman(UINT nSessionID, TItemInfo &ItemInfo)
{
SCChangeTalisman ChangeTalisman;
memset(&ChangeTalisman, 0, sizeof(SCChangeTalisman));
ChangeTalisman.nSessionID = nSessionID;
ChangeTalisman.ItemInfo = ItemInfo;
m_pSession->AddSendData(SC_ITEM, eItem::SC_CHANGETALISMAN, (char*)&ChangeTalisman, sizeof(SCChangeTalisman));
}
void CDNUserSendManager::SendTalismanExpireData( bool bActivate, __time64_t tTalismanExpireData )
{
SCTalismanExpireData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.bActivate = bActivate;
TxPacket.tTalismanExpireDate = tTalismanExpireData;
m_pSession->AddSendData(SC_ITEM, eItem::SC_TALISMANEXPIREDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#endif
// Ż<><C5BB>
void CDNUserSendManager::SendVehicleEquipList(TVehicle *pVehicleEquip)
{
if(!pVehicleEquip) return;
SCVehicleEquipList Vehicle;
memset(&Vehicle, 0, sizeof(Vehicle));
Vehicle.VehicleEquip.SetCompact(*pVehicleEquip);
m_pSession->AddSendData(SC_ITEM, eItem::SC_VEHICLEEQUIPLIST, reinterpret_cast<char*>(&Vehicle), sizeof(Vehicle) );
}
void CDNUserSendManager::SendVehicleInvenList(int nTotalCount, int nCount, TVehicleCompact *VehicleList)
{
if(nTotalCount == 0) return;
SCVehicleInvenList Vehicle;
memset(&Vehicle, 0, sizeof(Vehicle));
Vehicle.nTotalInventoryCount = nTotalCount;
Vehicle.cInvenCount = nCount;
for (int i = 0; i < Vehicle.cInvenCount; i++)
{
if( m_pSession->GetItem()->GetVehicleInventory( VehicleList[i].Vehicle[Vehicle::Slot::Body].nSerial ) == NULL )
{
if( Vehicle.cInvenCount > 0 )
--Vehicle.cInvenCount;
else
_ASSERT(0);
continue;
}
Vehicle.VehicleInven[i] = VehicleList[i];
}
int nSize = sizeof(SCVehicleInvenList) - sizeof(Vehicle.VehicleInven) +(sizeof(TVehicleCompact) * Vehicle.cInvenCount);
m_pSession->AddSendData(SC_ITEM, eItem::SC_VEHICLEINVENLIST, (char*)&Vehicle, nSize);
}
void CDNUserSendManager::SendChangeVehicleParts(UINT nSessionID, int nIndex, const TItem &Item)
{
SCChangeVehicleParts Vehicle;
memset(&Vehicle, 0, sizeof(Vehicle));
Vehicle.nSessionID = nSessionID;
Vehicle.cSlotIndex = nIndex;
Vehicle.Equip.SetItem(Item);
m_pSession->AddSendData(SC_ITEM, eItem::SC_CHANGEVEHICLEPARTS, reinterpret_cast<char*>(&Vehicle), sizeof(Vehicle) );
}
void CDNUserSendManager::SendChangeVehicleColor(UINT nSessionID, INT64 biSerial, DWORD dwColor, char cPetPartsColor)
{
SCChangeVehicleColor Vehicle;
memset(&Vehicle, 0, sizeof(Vehicle));
Vehicle.nSessionID = nSessionID;
Vehicle.dwColor = dwColor;
Vehicle.cSlotIndex = cPetPartsColor;
Vehicle.biSerial = biSerial;
m_pSession->AddSendData(SC_ITEM, eItem::SC_CHANGEVEHICLECOLOR, reinterpret_cast<char*>(&Vehicle), sizeof(Vehicle) );
}
void CDNUserSendManager::SendRefreshVehicleInven(TVehicle &InvenItem, bool bNewSign/* = true*/)
{
SCRefreshVehicleInven Vehicle;
memset(&Vehicle, 0, sizeof(Vehicle));
Vehicle.bNewSign = bNewSign;
Vehicle.nCount = 1;
Vehicle.ItemList[0].SetCompact(InvenItem);
int nLen = sizeof(SCRefreshVehicleInven) - sizeof(Vehicle.ItemList) +(sizeof(TVehicleCompact) * Vehicle.nCount);
m_pSession->AddSendData(SC_ITEM, eItem::SC_REFRESHVEHICLEINVEN, (char*)&Vehicle, nLen);
#if defined(_GAMESERVER)
m_pSession->GetGameRoom()->OnDispatchMessage( m_pSession, SC_ITEM, eItem::SC_REFRESHVEHICLEINVEN, (char*)&Vehicle, nLen, 0 );
#endif
}
void CDNUserSendManager::SendSortWarehouse(int nRet)
{
SCSortWarehouse packet;
memset(&packet, 0, sizeof(SCSortWarehouse));
packet.nRet = nRet;
m_pSession->AddSendData(SC_ITEM, eItem::SC_SORTWAREHOUSE, (char*)&packet, sizeof(SCSortWarehouse));
}
void CDNUserSendManager::SendRefreshVehicleInven(std::vector<TVehicle> VecItemList, bool bNewSign/* = true*/)
{
SCRefreshVehicleInven Vehicle;
memset(&Vehicle, 0, sizeof(Vehicle));
Vehicle.bNewSign = bNewSign;
Vehicle.nCount = (int)VecItemList.size();
for (int i = 0; i < Vehicle.nCount; i++){
Vehicle.ItemList[i].SetCompact(VecItemList[i]);
}
int nLen = sizeof(SCRefreshVehicleInven) - sizeof(Vehicle.ItemList) +(sizeof(TVehicleCompact) * Vehicle.nCount);
m_pSession->AddSendData(SC_ITEM, eItem::SC_REFRESHVEHICLEINVEN, (char*)&Vehicle, nLen);
#if defined(_GAMESERVER)
m_pSession->GetGameRoom()->OnDispatchMessage( m_pSession, SC_ITEM, eItem::SC_REFRESHVEHICLEINVEN, (char*)&Vehicle, nLen, 0 );
#endif
}
void CDNUserSendManager::SendPetEquipList(const TVehicle *pPetEquip)
{
if(!pPetEquip) return;
SCVehicleEquipList Pet;
memset(&Pet, 0, sizeof(Pet));
Pet.VehicleEquip.SetCompact(*pPetEquip);
m_pSession->AddSendData(SC_ITEM, eItem::SC_PETEQUIPLIST, reinterpret_cast<char*>(&Pet), sizeof(Pet) );
}
// Change Pet
void CDNUserSendManager::SendChangePetParts(UINT nSessionID, int nIndex, TItem &Item)
{
SCChangeVehicleParts Pet;
memset(&Pet, 0, sizeof(Pet));
Pet.nSessionID = nSessionID;
Pet.cSlotIndex = nIndex;
Pet.Equip.SetItem(Item);
m_pSession->AddSendData(SC_ITEM, eItem::SC_CHANGEPETPARTS, reinterpret_cast<char*>(&Pet), sizeof(Pet) );
}
void CDNUserSendManager::SendChangePetBody(UINT nSessionID, TVehicleCompact &Pet)
{
SCChangePetBody Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nSessionID = nSessionID;
Packet.PetInfo = Pet;
m_pSession->AddSendData(SC_ITEM, eItem::SC_CHANGEPETBODY, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendAddPetExp(UINT nSessionID, INT64 biPetSerial, int nExp)
{
SCAddPetExp Packet = {0,};
Packet.nSessionID = nSessionID;
Packet.biPetSerial = biPetSerial;
Packet.nExp = nExp;
m_pSession->AddSendData(SC_ITEM, eItem::SC_ADDPETEXP, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendPetCurrentSatiety(INT64 biPetSerial, int nCurrentSatiety)
{
SCPetCurrentSatiety Packet = {0,};
Packet.biPetSerial = biPetSerial;
Packet.nCurrentSatiety = nCurrentSatiety;
m_pSession->AddSendData(SC_ITEM, eItem::SC_PET_CURRENT_SATIETY, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendPetFoodEat(int nResult, int nIncSatiety )
{
SCPetFoodEat Packet = {0,};
Packet.nResult = nResult;
Packet.nIncSatiety = nIncSatiety;
m_pSession->AddSendData(SC_ITEM, eItem::SC_PET_FOOD_EAT, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
#if defined(PRE_ADD_EXPUP_ITEM)
void CDNUserSendManager::SendDailyLimitItemErr(int nWeightTableIndex)
{
SCDailyLimitItemError Packet = {0,};
Packet.nWeightTableIndex = nWeightTableIndex;
m_pSession->AddSendData(SC_ITEM, eItem::SC_DAILY_LIMIT_ITEM, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
#endif
void CDNUserSendManager::SendRemoveCash(const TItem *pItem, int nRet)
{
SCRemoveCash Packet = {0,};
if (pItem){
Packet.biItemSerial = pItem->nSerial;
Packet.bEternity = pItem->bEternity;
Packet.bExpireComplete = pItem->bExpireComplete;
Packet.tExpireDate = pItem->tExpireDate;
}
Packet.nRet = nRet;
m_pSession->AddSendData(SC_ITEM, eItem::SC_REMOVECASH, (char*)&Packet, sizeof(SCRemoveCash));
}
#if defined( PRE_ADD_LIMITED_SHOP )
#if defined( PRE_FIX_74404 )
void CDNUserSendManager::SendLimitedShopItemData(std::list<LimitedShop::LimitedItemData> &listLimitedShop, bool bAllClear/*=false*/)
{
if (listLimitedShop.empty() && !bAllClear)
return;
SCLimitedShopItemData packet;
memset(&packet, 0, sizeof(packet));
packet.count = static_cast<short>(listLimitedShop.size());
packet.bAllClear = bAllClear;
int i = 0;
for( std::list<LimitedShop::LimitedItemData>::iterator itor = listLimitedShop.begin();itor!=listLimitedShop.end();itor++ )
{
packet.items[i] = *itor;
++i;
}
int length = sizeof(packet) - sizeof(packet.items) + (sizeof(packet.items[0]) * packet.count);
m_pSession->AddSendData(SC_ITEM, eItem::SC_LIMITEDSHOPITEMDATA, reinterpret_cast<char*>(&packet), length);
}
void CDNUserSendManager::SendLimitedShopItemData(int nShopID, int nItemID, int nBuyCount, int nResetCycle)
{
SCLimitedShopItemData packet;
memset(&packet, 0, sizeof(packet));
packet.count = 1;
packet.items[0].nShopID = nShopID;
packet.items[0].nItemID = nItemID;
packet.items[0].nBuyCount = nBuyCount;
packet.items[0].nResetCycle = nResetCycle;
int length = sizeof(packet) - sizeof(packet.items) + (sizeof(packet.items[0]) * packet.count);
m_pSession->AddSendData(SC_ITEM, eItem::SC_LIMITEDSHOPITEMDATA, reinterpret_cast<char*>(&packet), length);
}
#else // #if defined( PRE_FIX_74404 )
void CDNUserSendManager::SendLimitedShopItemData(std::map<int, LimitedShop::LimitedItemData> &mapLimitedShop, bool bAllClear/*=false*/)
{
if (mapLimitedShop.empty() && !bAllClear)
return;
SCLimitedShopItemData packet;
memset(&packet, 0, sizeof(packet));
packet.count = static_cast<short>(mapLimitedShop.size());
packet.bAllClear = bAllClear;
size_t i = 0;
for each (std::map<int, LimitedShop::LimitedItemData>::value_type v in mapLimitedShop)
{
packet.items[i] = v.second;
++i;
}
int length = sizeof(packet) - sizeof(packet.items) + (sizeof(packet.items[0]) * packet.count);
m_pSession->AddSendData(SC_ITEM, eItem::SC_LIMITEDSHOPITEMDATA, reinterpret_cast<char*>(&packet), length);
}
void CDNUserSendManager::SendLimitedShopItemData(int nItemID, int nBuyCount, int nResetCycle)
{
SCLimitedShopItemData packet;
memset(&packet, 0, sizeof(packet));
packet.count = 1;
packet.items[0].nItemID = nItemID;
packet.items[0].nBuyCount = nBuyCount;
packet.items[0].nResetCycle = nResetCycle;
int length = sizeof(packet) - sizeof(packet.items) + (sizeof(packet.items[0]) * packet.count);
m_pSession->AddSendData(SC_ITEM, eItem::SC_LIMITEDSHOPITEMDATA, reinterpret_cast<char*>(&packet), length);
}
#endif // #if defined( PRE_FIX_74404 )
#endif // #if defined( PRE_ADD_LIMITED_SHOP )
#if defined(PRE_PERIOD_INVENTORY)
void CDNUserSendManager::SendPeriodInventory(bool bEnable, __time64_t tExpireDate)
{
SCPeriodInventory Packet = {0,};
Packet.bEnable = bEnable;
Packet.tExpireDate = tExpireDate;
m_pSession->AddSendData(SC_ITEM, eItem::SC_PERIODINVENTORY, (char*)&Packet, sizeof(SCPeriodInventory));
}
void CDNUserSendManager::SendPeriodWarehouse(bool bEnable, __time64_t tExpireDate)
{
SCPeriodWarehouse Packet = {0,};
Packet.bEnable = bEnable;
Packet.tExpireDate = tExpireDate;
m_pSession->AddSendData(SC_ITEM, eItem::SC_PERIODWAREHOUSE, (char*)&Packet, sizeof(SCPeriodWarehouse));
}
void CDNUserSendManager::SendSortPeriodInventory(int nRet)
{
SCSortInventory Packet = {0,};
Packet.nRet = nRet;
m_pSession->AddSendData(SC_ITEM, eItem::SC_SORTPERIODINVENTORY, (char*)&Packet, sizeof(SCSortInventory));
}
void CDNUserSendManager::SendSortPeriodWarehouse(int nRet)
{
SCSortWarehouse Packet = {0,};
Packet.nRet = nRet;
m_pSession->AddSendData(SC_ITEM, eItem::SC_SORTPERIODWAREHOUSE, (char*)&Packet, sizeof(SCSortWarehouse));
}
#endif // #if defined(PRE_PERIOD_INVENTORY)
#if defined( PRE_ADD_STAGE_USECOUNT_ITEM )
void CDNUserSendManager::SendStageUseLimitItem( int nItemID, int nUseCount )
{
SCStageUseLimitItem Packet;
Packet.nItemID = nItemID;
Packet.nUseCount = nUseCount;
m_pSession->AddSendData(SC_ITEM, eItem::SC_STAGE_USELIMITITEM, (char*)&Packet, sizeof(SCStageUseLimitItem));
}
#endif
// Item Goods
void CDNUserSendManager::SendChangePetNameResult(int nRet, UINT nUserSessionID, INT64 biItemSerial, const WCHAR* wszName)
{
SCChangePetName result = {0, };
result.nRet = nRet;
result.nUserSessionID = nUserSessionID;
result.biItemSerial = biItemSerial;
if(wszName)
_wcscpy(result.wszPetName, _countof(result.wszPetName), wszName, (int)wcslen(wszName));
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_CHANGEPETNAME, (char*)&result, sizeof(SCChangePetName));
}
void CDNUserSendManager::SendRequestCashWorldMsg(INT64 biItemSerial, char cType)
{
SCRequestCashWorldMsg WorldMsg;
memset( &WorldMsg, 0, sizeof(SCRequestCashWorldMsg) );
WorldMsg.biItemSerial = biItemSerial;
WorldMsg.cType = cType;
m_pSession->AddSendData( SC_ITEMGOODS, eItemGoods::SC_REQUEST_CASHWORLDMSG, (char*)&WorldMsg, sizeof(SCRequestCashWorldMsg) );
}
void CDNUserSendManager::SendChangeColor(UINT nSessionID, int nItemType, DWORD dwColor)
{
SCChangeColor Color;
memset(&Color, 0, sizeof(SCChangeColor));
Color.nSessionID = nSessionID;
Color.cItemType = nItemType;
Color.dwColor = dwColor;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_CHANGECOLOR, (char*)&Color, sizeof(SCChangeColor));
}
void CDNUserSendManager::SendUnsealItemResult(int nRet, int nSlotCount)
{
SCUnSealItem result;
result.nRet = nRet;
result.cInvenIndex = nSlotCount;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_UNSEAL, (char*)&result, sizeof(SCUnSealItem));
}
void CDNUserSendManager::SendSealItemResult(int nRet, int nSlotCount)
{
SCSealItem result;
result.nRet = nRet;
result.cInvenIndex = nSlotCount;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_SEAL, (char*)&result, sizeof(SCSealItem));
}
void CDNUserSendManager::SendGuildRenameResult(int nRet)
{
SCGuildRename result;
result.nRet = nRet;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_GUILDRENAME, (char*)&result, sizeof(SCGuildRename));
}
void CDNUserSendManager::SendGuildMarkResult(int nRet, short wGuildMark, short wGuildMarkBG, short wGuildMarkBorder)
{
SCGuildMark result;
result.nRet = nRet;
result.wGuildMark = wGuildMark;
result.wGuildMarkBG = wGuildMarkBG;
result.wGuildMarkBorder = wGuildMarkBorder;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_GUILDMARK, (char*)&result, sizeof(SCGuildMark));
}
void CDNUserSendManager::SendCharacterRenameResult(int nRet, UINT nUserSessionID, const WCHAR* wszName, __time64_t tNextChangeDate /*= 0*/)
{
SCCharacterRename result;
result.nRet = nRet;
result.nUserSessionID = nUserSessionID;
result.tNextChangeDate = tNextChangeDate;
if(wszName)
_wcscpy(result.wszCharacterName, _countof(result.wszCharacterName), wszName, (int)wcslen(wszName));
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_CHARACTERRENAME, (char*)&result, sizeof(SCCharacterRename));
}
#ifdef PRE_ADD_GACHA_JAPAN
void CDNUserSendManager::SendGachaShopOpen_JP( int nGachaShopIndex )
{
SCGachaShopOpen_JP GachaOpen;
GachaOpen.nGachaShopIndex = nGachaShopIndex;
m_pSession->AddSendData( SC_ITEMGOODS, eItemGoods::SC_JP_GACHAPON_OPEN_SHOP_RES, (char*)&GachaOpen, sizeof(SCGachaShopOpen_JP) );
}
void CDNUserSendManager::SendGachaResult_JP( int nResult, int nResultItemID )
{
SCGachaRes_JP GachaResult;
GachaResult.nRet = nResult;
GachaResult.nResultItemID = nResultItemID;
m_pSession->AddSendData( SC_ITEMGOODS, eItemGoods::SC_JP_GACHAPON_RES, (char*)&GachaResult, sizeof(GachaResult) );
}
#endif // PRE_ADD_GACHA_JAPAN
// Reputation
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
void CDNUserSendManager::SendOpenGiveNpcPresent( UINT nNpcID )
{
SCOpenGiveNpcPresent GiveNpcPresent;
GiveNpcPresent.nNpcID = nNpcID;
m_pSession->AddSendData( SC_REPUTATION, eReputation::SC_OPENGIVENPCPRESENT, (char*)&GiveNpcPresent, sizeof(GiveNpcPresent) );
}
void CDNUserSendManager::SendRequestSendSelectedPresent( UINT nNpcID )
{
SCRequestSendSelectedPresent RequestSendSelectedPresent;
RequestSendSelectedPresent.nNpcID = nNpcID;
m_pSession->AddSendData( SC_REPUTATION, eReputation::SC_REQUESTSENDSELECTEDPRESENT, (char*)&RequestSendSelectedPresent, sizeof(RequestSendSelectedPresent) );
}
void CDNUserSendManager::SendShowNpcEffect( UINT nNpcID, int nEffectIndex )
{
SCShowNpcEffect ShowNpcEffect;
ShowNpcEffect.nNpcID = nNpcID;
ShowNpcEffect.nEffectIndex = nEffectIndex;
m_pSession->AddSendData( SC_REPUTATION, eReputation::SC_SHOWNPCEFFECT, (char*)&ShowNpcEffect, sizeof(ShowNpcEffect) );
}
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
#if defined( PRE_ADD_NEW_MONEY_SEED )
void CDNUserSendManager::SendSeedPoint(bool bInc/*=false*/)
{
SCSendSeedPoint packet;
memset( &packet, 0, sizeof(packet) );
packet.nSeedPoint = m_pSession->GetSeedPoint();
packet.bInc = bInc;
m_pSession->AddSendData( SC_REPUTATION, eReputation::SC_SEEDPOINT, reinterpret_cast<char*>(&packet), sizeof(packet) );
}
#endif
void CDNUserSendManager::SendOpenDarkLairRankBoard( UINT uiNpcID, int iMapIndex, int iPlayerCount )
{
SCOpenDarkLairRankBoard TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.uiNpcID = uiNpcID;
TxPacket.iMapIndex = iMapIndex;
TxPacket.cPlayerCount = static_cast<BYTE>(iPlayerCount);
m_pSession->AddSendData( SC_NPC, eNpc::SC_OPEN_DARKLAIRRANKBOARD, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendDarkLairRankBoard( TAGetDarkLairRankBoard* pPacket )
{
SCDarkLairRankBoard TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = (pPacket->nRetCode == ERROR_NONE) ? sizeof(TxPacket) : sizeof(TxPacket.iRet);
TxPacket.iRet = pPacket->nRetCode;
#if defined(PRE_ADD_CHALLENGE_DARKLAIR)
TxPacket.iMapIndex = pPacket->iMapIndex;
#endif
if( TxPacket.iRet == ERROR_NONE )
{
// Best
TxPacket.sBestHistory.nRank = pPacket->sBestHistory.iRank;
TxPacket.sBestHistory.nPlayRound = pPacket->sBestHistory.unPlayRound;
TxPacket.sBestHistory.nPlaySec = pPacket->sBestHistory.uiPlaySec;
TxPacket.sBestHistory.cPartyUserCount = pPacket->sBestHistory.cPartyUserCount;
_wcscpy( TxPacket.sBestHistory.wszPartyName, _countof(TxPacket.sBestHistory.wszPartyName), pPacket->sBestHistory.wszPartyName, (int)wcslen(pPacket->sBestHistory.wszPartyName) );
if( TxPacket.sBestHistory.cPartyUserCount == 0 )
TxPacket.sBestHistory.cPartyUserCount = pPacket->cPartyUserCount;
for( int i=0 ; i<TxPacket.sBestHistory.cPartyUserCount ; ++i )
{
TxPacket.sBestHistory.Info[i].nLevel = pPacket->sBestHistory.sUserData[i].unLevel;
TxPacket.sBestHistory.Info[i].nJobIndex = pPacket->sBestHistory.sUserData[i].iJobIndex;
_wcscpy( TxPacket.sBestHistory.Info[i].wszCharacterName, _countof(TxPacket.sBestHistory.Info[i].wszCharacterName),
pPacket->sBestHistory.sUserData[i].wszCharacterName, (int)wcslen(pPacket->sBestHistory.sUserData[i].wszCharacterName) );
}
// Select-Top
for( int i=0 ; i<_countof(TxPacket.sHistoryTop) ; ++i )
{
TxPacket.sHistoryTop[i].nRank = i+1;
TxPacket.sHistoryTop[i].nPlayRound = pPacket->sHistoryTop[i].unPlayRound;
TxPacket.sHistoryTop[i].nPlaySec = pPacket->sHistoryTop[i].uiPlaySec;
TxPacket.sHistoryTop[i].cPartyUserCount = pPacket->sHistoryTop[i].cPartyUserCount;
_wcscpy( TxPacket.sHistoryTop[i].wszPartyName, _countof(TxPacket.sHistoryTop[i].wszPartyName), pPacket->sHistoryTop[i].wszPartyName, (int)wcslen(pPacket->sHistoryTop[i].wszPartyName) );
for( int j=0 ; j<TxPacket.sHistoryTop[i].cPartyUserCount ; ++j )
{
TxPacket.sHistoryTop[i].Info[j].nLevel = pPacket->sHistoryTop[i].sUserData[j].unLevel;
TxPacket.sHistoryTop[i].Info[j].nJobIndex = pPacket->sHistoryTop[i].sUserData[j].iJobIndex;
_wcscpy( TxPacket.sHistoryTop[i].Info[j].wszCharacterName, _countof(TxPacket.sHistoryTop[i].Info[j].wszCharacterName),
pPacket->sHistoryTop[i].sUserData[j].wszCharacterName, (int)wcslen(pPacket->sHistoryTop[i].sUserData[j].wszCharacterName) );
}
}
}
m_pSession->AddSendData( SC_ETC, eEtc::SC_DARKLAIR_RANK_BOARD, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNUserSendManager::SendOpenPvPLadderRankBoard( UINT uiNpcID, LadderSystem::MatchType::eCode MatchType )
{
SCOpenPvPLadderRankBoard TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.uiNpcID = uiNpcID;
TxPacket.MatchType = MatchType;
m_pSession->AddSendData( SC_NPC, eNpc::SC_OPEN_PVPLADDERRANKBOARD, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendPvPLadderRankBoard( TAGetListPvPLadderRanking* pPacket )
{
SCPvPLadderRankBoard TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = (pPacket->nRetCode == ERROR_NONE) ? sizeof(TxPacket) : sizeof(TxPacket.iRet);
TxPacket.iRet = pPacket->nRetCode;
if( TxPacket.iRet == ERROR_NONE )
{
memcpy( &TxPacket.MyRanking, &pPacket->MyRanking, sizeof(TxPacket.MyRanking) );
memcpy( TxPacket.Top, &pPacket->Top, sizeof(TxPacket.Top) );
}
m_pSession->AddSendData( SC_ETC, eEtc::SC_PVPLADDER_RANK_BOARD, reinterpret_cast<char*>(&TxPacket), iSize );
}
#if defined(PRE_ADD_PVP_RANKING)
void CDNUserSendManager::SendPvPRankBoard(TAGetPvPRankBoard* pPacket)
{
SCPvPRankBoard TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = (pPacket->nRetCode == ERROR_NONE) ? sizeof(TxPacket) : sizeof(TxPacket.iRet);
TxPacket.iRet = pPacket->nRetCode;
if( TxPacket.iRet == ERROR_NONE )
{
memcpy( &TxPacket.MyRanking, &pPacket->MyRanking, sizeof(TxPacket.MyRanking) );
}
m_pSession->AddSendData( SC_ETC, eEtc::SC_PVP_RANK_BOARD, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNUserSendManager::SendPvPRankList( TAGetPvPRankList* pPacket )
{
SCPvPRankList TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = (pPacket->nRetCode == ERROR_NONE) ? sizeof(TxPacket) : sizeof(TxPacket.iRet);
TxPacket.iRet = pPacket->nRetCode;
if( TxPacket.iRet == ERROR_NONE )
{
TxPacket.cRankingCount = pPacket->cRankingCount;
TxPacket.nRankingTotalCount = pPacket->biRankingTotalCount;
if(pPacket->cRankingCount > 0 )
memcpy(&TxPacket.RankingInfo, &pPacket->RankingInfo, sizeof(TPvPRanking) * pPacket->cRankingCount);
}
int nLen = sizeof(SCPvPRankList) - sizeof(TxPacket.RankingInfo) +(sizeof(TPvPRanking) * pPacket->cRankingCount);
m_pSession->AddSendData(SC_ETC, eEtc::SC_PVP_RANK_LIST, reinterpret_cast<char*>(&TxPacket), nLen);
}
void CDNUserSendManager::SendPvPRankInfo(TAGetPvPRankInfo* pPacket)
{
SCPvPRankInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = (pPacket->nRetCode == ERROR_NONE) ? sizeof(TxPacket) : sizeof(TxPacket.iRet);
TxPacket.iRet = pPacket->nRetCode;
if( TxPacket.iRet == ERROR_NONE )
{
memcpy( &TxPacket.RankingInfo, &pPacket->RankingInfo, sizeof(TxPacket.RankingInfo) );
}
m_pSession->AddSendData( SC_ETC, eEtc::SC_PVP_RANK_INFO, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNUserSendManager::SendPvPLadderRankBoard(TAGetPvPLadderRankBoard* pPacket)
{
SCPvPLadderRankBoard2 TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = (pPacket->nRetCode == ERROR_NONE) ? sizeof(TxPacket) : sizeof(TxPacket.iRet);
TxPacket.iRet = pPacket->nRetCode;
TxPacket.MatchType = (LadderSystem::MatchType::eCode)pPacket->cPvPLadderCode;
if( TxPacket.iRet == ERROR_NONE )
memcpy( &TxPacket.MyRanking, &pPacket->MyRanking, sizeof(TxPacket.MyRanking) );
m_pSession->AddSendData( SC_ETC, eEtc::SC_PVP_LADDER_RANK_BOARD, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNUserSendManager::SendPvPLadderRankList( TAGetPvPLadderRankList* pPacket )
{
SCPvPLadderRankList TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = (pPacket->nRetCode == ERROR_NONE) ? sizeof(TxPacket) : sizeof(TxPacket.iRet);
TxPacket.iRet = pPacket->nRetCode;
if( TxPacket.iRet == ERROR_NONE )
{
TxPacket.cRankingCount = pPacket->cRankingCount;
TxPacket.nRankingTotalCount = pPacket->biRankingTotalCount;
TxPacket.MatchType = (LadderSystem::MatchType::eCode)pPacket->cPvPLadderCode;
if(pPacket->cRankingCount > 0 )
memcpy(&TxPacket.RankingInfo, &pPacket->RankingInfo, sizeof(TPvPLadderRanking2) * pPacket->cRankingCount);
}
int nLen = sizeof(SCPvPLadderRankList) - sizeof(TxPacket.RankingInfo) +(sizeof(TPvPLadderRanking2) * pPacket->cRankingCount);
m_pSession->AddSendData(SC_ETC, eEtc::SC_PVP_LADDER_RANK_LIST, reinterpret_cast<char*>(&TxPacket), nLen);
}
void CDNUserSendManager::SendPvPLadderRankInfo(TAGetPvPLadderRankInfo* pPacket)
{
SCPvPLadderRankInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = (pPacket->nRetCode == ERROR_NONE) ? sizeof(TxPacket) : sizeof(TxPacket.iRet);
TxPacket.iRet = pPacket->nRetCode;
TxPacket.MatchType = (LadderSystem::MatchType::eCode)pPacket->cPvPLadderCode;
if( TxPacket.iRet == ERROR_NONE )
memcpy( &TxPacket.RankingInfo, &pPacket->RankingInfo, sizeof(TxPacket.RankingInfo) );
m_pSession->AddSendData( SC_ETC, eEtc::SC_PVP_LADDER_RANK_INFO, reinterpret_cast<char*>(&TxPacket), iSize );
}
#endif
// Npc
void CDNUserSendManager::SendTalkEnd(UINT nNpcObjectID)
{
SCNpcTalk NpcTalk;
memset(&NpcTalk, 0, sizeof(SCNpcTalk));
NpcTalk.nNpcUniqueID = nNpcObjectID;
NpcTalk.bIsEnd = true;
NpcTalk.nCount = 0;
m_pSession->AddSendData(SC_NPC, eNpc::SC_NPCTALK, (char*)&NpcTalk, sizeof(SCNpcTalk) -(sizeof(TalkParam) *(TALK_PARAM_MAX-NpcTalk.nCount)));
}
void CDNUserSendManager::SendNextTalk(UINT nNpcObjectID, WCHAR* wszIndex, WCHAR* wszTarget, std::vector<TalkParam>& talkParam )
{
SCNpcTalk NpcTalk;
memset(&NpcTalk, 0, sizeof(SCNpcTalk));
NpcTalk.nNpcUniqueID = nNpcObjectID;
NpcTalk.dwIndexHashCode = g_pDataManager->GetStringHashCode(wszIndex);
NpcTalk.dwTargetHashCode = g_pDataManager->GetStringHashCode(wszTarget);
NpcTalk.bIsEnd = false;
if( talkParam.size() <= TALK_PARAM_MAX )
{
for (int i = 0; i <(int)talkParam.size(); i++)
{
memcpy(&(NpcTalk.TalkParamArray[i]), &(talkParam[i]), sizeof(TalkParam));
}
NpcTalk.nCount = (int)talkParam.size();
}
m_pSession->AddSendData(SC_NPC, eNpc::SC_NPCTALK, (char*)&NpcTalk, sizeof(SCNpcTalk) -(sizeof(TalkParam) *(TALK_PARAM_MAX-NpcTalk.nCount)));
}
void CDNUserSendManager::SendNextTalkError()
{
SCNpcTalk NpcTalk;
memset(&NpcTalk, 0, sizeof(SCNpcTalk));
NpcTalk.nNpcUniqueID = 0xffffffff;
NpcTalk.bIsEnd = true;
NpcTalk.nCount = 0;
m_pSession->AddSendData(SC_NPC, eNpc::SC_NPCTALK, (char*)&NpcTalk, sizeof(SCNpcTalk) -(sizeof(TalkParam) *(TALK_PARAM_MAX-NpcTalk.nCount)));
}
void CDNUserSendManager::SendShowWarehouse( int iItemID/*=0*/ )
{
SCShowWareHouse TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iItemID = iItemID;
m_pSession->AddSendData(SC_NPC, eNpc::SC_SHOWWAREHOUSE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendOpenQuestReward(int nTableIndex, bool bActivate)
{
// SC_QUEST / SC_QUEST_REWARD
SCQuestReward packet;
memset(&packet, 0, sizeof(SCQuestReward));
packet.nRewardTableIndex = nTableIndex;
packet.bActivate = bActivate;
m_pSession->AddSendData(SC_QUEST, eQuest::SC_QUEST_REWARD, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendOpenCompoundEmblem()
{
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPENCOMPOUND_EMBLEM, NULL, 0);
}
void CDNUserSendManager::SendOpenUpdagrageJewel()
{
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPENUPGRADE_JEWEL, NULL, 0);
}
void CDNUserSendManager::SendOpenMailBox()
{
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPENMAILBOX, NULL, 0);
}
void CDNUserSendManager::SendOpenGlyphLift()
{
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPEN_GLYPH_LIFT, NULL, 0);
}
void CDNUserSendManager::SendOpenFarmWareHouse()
{
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPEN_FARMWAREHOUSE, NULL, 0);
}
void CDNUserSendManager::SendOpenDisjointItem()
{
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPENDISJOINT_ITEM, NULL, 0);
}
void CDNUserSendManager::SendOpenUpgradeItem( int iItemID/*=0*/ )
{
SCOpenUpgradeItem TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iItemID = iItemID;
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPENUPGRADE_ITEM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#ifdef PRE_ADD_EXCHANGE_ENCHANT
void CDNUserSendManager::SendOpenExchangeEnchant()
{
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPEN_EXCHANGE_ENCHANT, NULL, 0);
}
#endif
void CDNUserSendManager::SendOpenCompoundItem(int nCompoundShopID)
{
SCOpenCompoundItem packet;
memset(&packet, 0, sizeof(packet));
packet.nCompoundShopID = nCompoundShopID;
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPENCOMPOUND_ITEM, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendOpenCompound2Item(int nCompoundGroupID, int iItemID )
{
SCOpenCompound2Item packet;
memset(&packet, 0, sizeof(packet));
packet.nCompoundGroupID = nCompoundGroupID;
packet.iItemID = iItemID;
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPENCOMPOUND2_ITEM, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendOpenCashShop()
{
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPENCASHSHOP, NULL, 0);
}
void CDNUserSendManager::SendOpenGuildMgrBox(int nGuildMgrNo)
{
SCOpenGuildMgrBox packet;
memset(&packet, 0, sizeof(packet));
packet.nGuildMgrNo = nGuildMgrNo;
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPENGUILDMGRBOX, (char*)&packet, sizeof(packet));
}
#ifdef PRE_ADD_DWC
void CDNUserSendManager::SendOpenDwcTeamDialog()
{
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPEN_DWCTEAMCREATE, NULL, 0);
}
#endif
void CDNUserSendManager::SendOpenInventory()
{
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPEN_INVENTORY, NULL, 0);
}
#ifdef PRE_ADD_OPEN_QUEST_TEXTURE_DIALOG
void CDNUserSendManager::SendOpenTextureDialog(SCOpenTextureDialog sDialogData)
{
SCOpenTextureDialog packet;
memset(&packet, 0, sizeof(SCOpenTextureDialog));
memcpy(&packet, &sDialogData, sizeof(SCOpenTextureDialog));
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPEN_TEXTURE_DIALOG, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendCloseTextureDialog(int nDlgID)
{
SCCloseTextureDialog packet;
memset(&packet, 0, sizeof(SCCloseTextureDialog));
packet.nDialogID = nDlgID;
m_pSession->AddSendData(SC_NPC, eNpc::SC_CLOSE_TEXTURE_DIALOG, (char*)&packet, sizeof(packet));
}
#endif
// Quest
void CDNUserSendManager::SendQuestInfo(TUserData &UserData)
{
SendQuestInfo(&UserData.Quest);
}
void CDNUserSendManager::SendQuestInfo(TQuestGroup* pQuestGroup)
{
DN_ASSERT(NULL != pQuestGroup, "Invalid!");
SCQuestInfo Info;
memset( &Info, 0, sizeof(Info) );
int nCount = 0;
for( UINT i=0 ; i<DNNotifier::RegisterCount::Total ; ++i )
Info.NotifierData[i] = m_pSession->m_NotifierRepository.GetData( i );
for (int i = 0; i < MAX_PLAY_QUEST; i++){
if(pQuestGroup->Quest[i].nQuestID <= 0) continue;
Info.Quest[nCount] = pQuestGroup->Quest[i];
nCount++;
}
Info.cCount = nCount;
m_pSession->AddSendData(SC_QUEST, eQuest::SC_QUESTINFO, (char*)&Info, sizeof(SCQuestInfo) - sizeof(Info.Quest) +(sizeof(TQuest) * Info.cCount));
}
void CDNUserSendManager::SendQuestCompleteInfo(TQuestGroup &Quest)
{
SCQuestCompleteInfo Info = { 0, };
memcpy(Info.CompleteQuest, Quest.CompleteQuest, sizeof(Info.CompleteQuest));
m_pSession->AddSendData(SC_QUEST, eQuest::SC_QUESTCOMPLETEINFO, (char*)&Info, sizeof(SCQuestCompleteInfo));
}
void CDNUserSendManager::SendQuestResult(int nRet)
{
SCQuestResult packet;
packet.nRetCode = nRet;
m_pSession->AddSendData(SC_QUEST, eQuest::SC_QUESTRESULT, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendQuestRefresh(char cSlot, int nRefreshType, int nQuestID, TQuest& Quest)
{
SCRefreshQuest refreshQuest;
memset(&refreshQuest, 0, sizeof(SCRefreshQuest));
refreshQuest.nRefreshType = (short)nRefreshType;
refreshQuest.cQuestSlot = cSlot;
refreshQuest.nQuestID = nQuestID;
CopyMemory(&(refreshQuest.Quest), &Quest, sizeof(TQuest));
m_pSession->AddSendData(SC_QUEST, eQuest::SC_REFRESH_QUEST, (char*)&refreshQuest, sizeof(SCRefreshQuest));
}
void CDNUserSendManager::SendCompleteQuest(bool bDeletePlayList, char cSlot, UINT nQuestID, bool bNeedMarking)
{
SCCompleteQuest completeQuest;
memset(&completeQuest, 0, sizeof(SCCompleteQuest));
completeQuest.bDeletePlayList = bDeletePlayList;
completeQuest.cQuestSlot = cSlot;
completeQuest.nQuestID = nQuestID;
completeQuest.bNeedMarking = bNeedMarking;
m_pSession->AddSendData(SC_QUEST, eQuest::SC_COMPLETE_QUEST, (char*)&completeQuest, sizeof(SCCompleteQuest));
}
void CDNUserSendManager::SendAssginPeriodQuest(UINT nQuestID, bool bFlag)
{
SCAssignPeriodQuest periodQuest;
memset(&periodQuest, 0, sizeof(periodQuest));
periodQuest.nQuestID = nQuestID;
periodQuest.bFlag = bFlag;
m_pSession->AddSendData(SC_QUEST, eQuest::SC_ASSIGN_PERIODQUEST, (char*)&periodQuest, sizeof(SCAssignPeriodQuest));
}
void CDNUserSendManager::SendPeriodQuestNotice(int nItemID, int nNoticeCount)
{
SCPeriodQuestNotice periodQuest;
memset(&periodQuest, 0, sizeof(periodQuest));
periodQuest.nItemID = nItemID;
periodQuest.nNoticeCount = nNoticeCount;
m_pSession->AddSendData(SC_QUEST, eQuest::SC_NOTICE_PERIODQUEST, (char*)&periodQuest, sizeof(SCPeriodQuestNotice));
}
void CDNUserSendManager::SendScorePeriodQuest(int nCurrentCount, int nMaxCount)
{
SCScorePeriodQuest periodQuest;
memset(&periodQuest, 0, sizeof(periodQuest));
periodQuest.nCurrentCount = nCurrentCount;
periodQuest.nMaxCount = nMaxCount;
m_pSession->AddSendData(SC_QUEST, eQuest::SC_SCORE_PERIODQUEST, (char*)&periodQuest, sizeof(SCScorePeriodQuest));
}
void CDNUserSendManager::SendMarkingCompleteQuest(UINT nQuestID)
{
SCMarkingCompleteQuest completeQuest;
memset(&completeQuest, 0, sizeof(SCMarkingCompleteQuest));
completeQuest.nQuestID = nQuestID;
m_pSession->AddSendData(SC_QUEST, eQuest::SC_MARKING_COMPLETE_QUEST, (char*)&completeQuest, sizeof(SCMarkingCompleteQuest));
}
void CDNUserSendManager::SendRemoveQuest(char cSlot, UINT nQuestID, short nRet)
{
SCRemoveQuest removeQuest;
memset(&removeQuest, 0, sizeof(SCRemoveQuest));
removeQuest.cQuestSlot = cSlot;
removeQuest.nQuestID = nQuestID;
removeQuest.nRetCode = nRet;
m_pSession->AddSendData(SC_QUEST, eQuest::SC_REMOVE_QUEST, (char*)&removeQuest, sizeof(SCRemoveQuest));
}
void CDNUserSendManager::SendPlayCutScene( int nCutSceneTableID, int nQuestIndex, int nQuestStep, UINT nNpcObjectID, bool bQuestAutoFadeIn, DWORD dwQuestPlayerUniqueID )
{
SCPlayCutScene packet;
memset(&packet, 0, sizeof(SCPlayCutScene));
packet.nCutSceneTableID = nCutSceneTableID;
packet.nQuestIndex = nQuestIndex;
packet.nQuestStep = nQuestStep;
packet.nNpcObjectID = nNpcObjectID;
packet.bQuestAutoFadeIn = bQuestAutoFadeIn;
packet.dwQuestPlayerUniqueID = dwQuestPlayerUniqueID;
m_pSession->AddSendData(SC_QUEST, eQuest::SC_PLAYCUTSCENE, (char*)&packet, sizeof(SCPlayCutScene));
m_pSession->m_nCutSceneID = nCutSceneTableID;
//g_pLogConnection->QueryLogCutScene(m_pSession->GetWorldSetID(), m_pSession->GetAccountDBID(), m_pSession->GetCharacterDBID(), m_pSession->GetSessionID(), nCutSceneTableID, CUTSCENELOG_START);
}
void CDNUserSendManager::SendCompleteCutScene( bool bFadeIn )
{
SCCompleteCutScene packet;
memset( &packet, 0, sizeof(SCCompleteCutScene) );
packet.bFadeIn = bFadeIn;
m_pSession->AddSendData( SC_QUEST, eQuest::SC_COMPLETE_CUTSCENE, (char*)&packet, sizeof(SCCompleteCutScene) );
if(m_pSession->m_nCutSceneID > 0){
//g_pLogConnection->QueryLogCutScene(m_pSession->GetWorldSetID(), m_pSession->GetAccountDBID(), m_pSession->GetCharacterDBID(), m_pSession->GetSessionID(), m_pSession->m_nCutSceneID, CUTSCENELOG_COMPLETE);
m_pSession->m_nCutSceneID = 0;
}
}
void CDNUserSendManager::SendSkipCutScene( UINT nSessionID )
{
SCSkipCutScene packet;
memset( &packet, 0, sizeof(SCSkipCutScene) );
packet.nSessionID = nSessionID;
m_pSession->AddSendData( SC_QUEST, eQuest::SC_SKIP_CUTSCENE, (char*)&packet, sizeof(SCSkipCutScene) );
if(m_pSession->m_nCutSceneID > 0){
//g_pLogConnection->QueryLogCutScene(m_pSession->GetWorldSetID(), m_pSession->GetAccountDBID(), m_pSession->GetCharacterDBID(), m_pSession->GetSessionID(), m_pSession->m_nCutSceneID, CUTSCENELOG_SKIP);
m_pSession->m_nCutSceneID = 0;
}
}
void CDNUserSendManager::SendSkipAllCutScene()
{
m_pSession->AddSendData( SC_QUEST, eQuest::SC_SKIPALL_CUTSCENE, NULL, 0 );
if(m_pSession->m_nCutSceneID > 0){
//g_pLogConnection->QueryLogCutScene(m_pSession->GetWorldSetID(), m_pSession->GetAccountDBID(), m_pSession->GetCharacterDBID(), m_pSession->GetSessionID(), m_pSession->m_nCutSceneID, CUTSCENELOG_SKIP);
m_pSession->m_nCutSceneID = 0;
}
}
#if defined(PRE_ADD_REMOTE_QUEST)
void CDNUserSendManager::SendGainRemoteQuest( int nQuestID)
{
SCGainRemoteQuest packet;
memset(&packet, 0, sizeof(packet));
packet.nQuestID = nQuestID;
m_pSession->AddSendData(SC_QUEST, eQuest::SC_GAIN_REMOTE_QUEST, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendRemoveRemoteQuest( int nQuestID)
{
SCRemoveRemoteQuest packet;
memset(&packet, 0, sizeof(packet));
packet.nQuestID = nQuestID;
m_pSession->AddSendData(SC_QUEST, eQuest::SC_REMOVE_REMOTE_QEUST, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendCompleteRemoteQuest( int nQuestID)
{
SCCompleteRemoteQuest packet;
memset(&packet, 0, sizeof(packet));
packet.nQuestID = nQuestID;
m_pSession->AddSendData(SC_QUEST, eQuest::SC_COMPLETE_REMOTE_QEUST, (char*)&packet, sizeof(packet));
}
#endif
// Chat
void CDNUserSendManager::SendChat(char cType, int cLen, const WCHAR *pwszCharacterName, const WCHAR *pwszChatMsg, TParamData* pParamData, int nRet )
{
if( pwszCharacterName == NULL || pwszChatMsg == NULL || wcslen( pwszCharacterName ) >= NAMELENMAX || cLen > CHATLENMAX )
return;
#if defined(PRE_ADD_DWC) // <20><><EFBFBD><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD> : DWC <20>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD> <20>Ⱥ<EFBFBD><C8BA><EFBFBD><EFBFBD><EFBFBD>
if( cType == CHATTYPE_WORLD && m_pSession->IsDWCCharacter() )
return;
#endif
SCChat Chat;
memset(&Chat, 0, sizeof(SCChat));
Chat.eType = (eChatType)cType;
_wcscpy(Chat.wszFromCharacterName, _countof(Chat.wszFromCharacterName), pwszCharacterName, (int)wcslen(pwszCharacterName));
Chat.nRet = nRet;
if(nRet == ERROR_NONE){
_wcscpy(Chat.wszChatMsg, _countof(Chat.wszChatMsg), pwszChatMsg, (int)wcslen(pwszChatMsg));
Chat.nLen = cLen;
#if defined( _VILLAGESERVER )
m_pSession->AddSendData(SC_CHAT, eChat::SC_CHATMSG, (char*)&Chat, (int)(sizeof(SCChat) - sizeof(Chat.wszChatMsg) +(cLen * 2)), pParamData );
#else
m_pSession->AddSendData(SC_CHAT, eChat::SC_CHATMSG, (char*)&Chat, (int)(sizeof(SCChat) - sizeof(Chat.wszChatMsg) +(cLen * 2)) );
#endif
}
else {
m_pSession->AddSendData(SC_CHAT, eChat::SC_CHATMSG, (char*)&Chat, (int)(sizeof(SCChat) - sizeof(Chat.wszChatMsg)));
}
}
void CDNUserSendManager::SendNotice(const WCHAR * pMsg, int nLen, int nSlideShowSec)
{
if(pMsg == NULL) return;
SCNotice packet;
memset(&packet, 0, sizeof(packet));
packet.nShowSec = nSlideShowSec;
packet.nLen = nLen;
_wcscpy(packet.wszNoticeMsg, _countof(packet.wszNoticeMsg), pMsg, (int)wcslen(pMsg));
m_pSession->AddSendData(SC_CHAT, eChat::SC_NOTICE, (char*)&packet, sizeof(SCNotice));
}
void CDNUserSendManager::SendWorldSystemMsg(char cType, int nID, const WCHAR *pwszCharacterName, int nValue, const WCHAR* pwszToCharacterName)
{
if( pwszCharacterName == NULL || wcslen( pwszCharacterName ) >= NAMELENMAX ) return;
#if defined(PRE_ADD_DWC)
if(m_pSession->IsDWCCharacter()) //<2F>ý<EFBFBD><C3BD><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD> : DWC <20>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD> <20>Ⱥ<EFBFBD><C8BA><EFBFBD><EFBFBD><EFBFBD>
return;
#endif
SCWorldSystemMsg Msg;
memset(&Msg, 0, sizeof(SCWorldSystemMsg));
_wcscpy(Msg.wszFromCharacterName, _countof(Msg.wszFromCharacterName), pwszCharacterName, (int)wcslen(pwszCharacterName));
Msg.cType = cType;
Msg.nID = nID;
Msg.nValue = nValue;
if (pwszToCharacterName)
_wcscpy(Msg.wszToCharacterName, _countof(Msg.wszToCharacterName), pwszToCharacterName, (int)wcslen(pwszToCharacterName));
m_pSession->AddSendData(SC_CHAT, eChat::SC_WORLDSYSTEMMSG, (char*)&Msg, sizeof(SCWorldSystemMsg));
}
void CDNUserSendManager::SendDebugChat(const WCHAR* szMsg, eChatType eType/*=CHATTYPE_NORMAL*/)
{
std::wstring wszString;
wszString = szMsg;
SendChat(eType, (int)wszString.size()*sizeof(WCHAR), L"", (WCHAR*)wszString.c_str());
}
void CDNUserSendManager::SendNoticeCancel()
{
m_pSession->AddSendData(SC_CHAT, eChat::SC_CANCELNOTICE, NULL, 0);
}
void CDNUserSendManager::SendServerMsg( char cType, char cStringType, int nMsgIndex, char cCaptionType, BYTE cFadeTime )
{
SCChatServerMsg packet;
memset(&packet, 0, sizeof(SCChatServerMsg));
packet.cType = cType;
packet.cStringType = cStringType;
packet.nMsgIndex = nMsgIndex;
packet.cCaption = cCaptionType;
m_pSession->AddSendData(SC_CHAT, eChat::SC_SERVERMSG, (char*)&packet, sizeof(SCChatServerMsg));
}
void CDNUserSendManager::SendCloseService(__time64_t _tNow, __time64_t _tOderedTime, __time64_t _tCloseTime)
{
SCServiceClose packet;
memset(&packet, 0, sizeof(SCServiceClose));
packet._tNow = _tNow;
packet._tOderedTime = _tOderedTime;
packet._tCloseTime = _tCloseTime;
m_pSession->AddSendData(SC_SYSTEM, eSystem::SC_SERVICECLOSE, (char*)&packet, sizeof(SCServiceClose));
}
void CDNUserSendManager::SendTcpPing( DWORD dwTick )
{
SCTCPPing TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.dwTick = dwTick;
m_pSession->AddSendData( SC_SYSTEM, eSystem::SC_TCP_PING, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
// RadioMessage
void CDNUserSendManager::SendUseRadio(UINT nSessionID, USHORT nRadioID)
{
SCUseRadio packet;
memset(&packet, 0, sizeof(packet));
packet.nSessionID = nSessionID;
packet.nID = nRadioID;
m_pSession->AddSendData(SC_RADIO, eRadio::SC_USERADIO, (char*)&packet, sizeof(packet));
}
//Gesture
void CDNUserSendManager::SendCashGestureList()
{
TGesture GestureArr[GESTUREMAX];
memset(&GestureArr, 0, sizeof(GestureArr));
if( m_pSession->GetGesture() == NULL ) return;
m_pSession->GetGesture()->GetCashGestureList( GestureArr );
SCGestureList packet;
memset(&packet, 0, sizeof(packet));
for (int i = 0; i < GESTUREMAX; i++)
{
if(GestureArr[i].nGestureID <= 0) continue;
packet.nGestureID[packet.cGestureCount] = GestureArr[i].nGestureID;
packet.cGestureCount++;
}
m_pSession->AddSendData(SC_GESTURE, eGesture::SC_CASHGESTURELIST, (char*)&packet, sizeof(packet) - sizeof(packet.nGestureID) +(sizeof(USHORT) * packet.cGestureCount));
}
void CDNUserSendManager::SendCashGestureAdd( USHORT nGestureID )
{
if (nGestureID <= 0) return;
SCGestureAdd GestureAdd;
GestureAdd.nGestureID = nGestureID;
m_pSession->AddSendData( SC_GESTURE, eGesture::SC_CASHGESTUREADD, (char*)&GestureAdd, sizeof(GestureAdd) );
}
void CDNUserSendManager::SendUseGesture( USHORT nGestureID )
{
SCUseGesture UseGesture;
UseGesture.nGestureID = nGestureID;
m_pSession->AddSendData( SC_GESTURE, eGesture::SC_USEGESTURE, (char*)&UseGesture, sizeof(UseGesture) );
}
void CDNUserSendManager::SendEffectItemGestureList()
{
TGesture GestureArr[GESTUREMAX];
memset(&GestureArr, 0, sizeof(GestureArr));
if( m_pSession->GetGesture() == NULL ) return;
m_pSession->GetGesture()->GetEffectItemGestureList( GestureArr );
SCGestureList packet;
memset(&packet, 0, sizeof(packet));
for (int i = 0; i < GESTUREMAX; i++)
{
if(GestureArr[i].nGestureID <= 0) continue;
packet.nGestureID[packet.cGestureCount] = GestureArr[i].nGestureID;
packet.cGestureCount++;
}
m_pSession->AddSendData(SC_GESTURE, eGesture::SC_EFFECTITEMGESTURELIST, (char*)&packet, sizeof(packet) - sizeof(packet.nGestureID) +(sizeof(USHORT) * packet.cGestureCount));
}
void CDNUserSendManager::SendEffectItemGestureAdd( USHORT nGestureID )
{
if (nGestureID <= 0) return;
SCGestureAdd GestureAdd;
GestureAdd.nGestureID = nGestureID;
m_pSession->AddSendData( SC_GESTURE, eGesture::SC_EFFECTITEMGESTUREADD, (char*)&GestureAdd, sizeof(GestureAdd) );
}
// Skill
void CDNUserSendManager::SendSkill(TSkill *SkillArray, char cSkillPage)
{
SCSkillList SkillList;
memset(&SkillList, 0, sizeof(SCSkillList));
int nCount = 0;
for (int i = 0; i < SKILLMAX; i++){
if(SkillArray[i].nSkillID <= 0) continue;
SkillList.Skill[i] = SkillArray[i];
nCount++;
}
SkillList.cSkillCount = nCount;
SkillList.cSkillPage = cSkillPage;
int nSize = (sizeof(SkillList) - sizeof(SkillList.Skill)) +(sizeof(TSkill) * nCount);
m_pSession->AddSendData(SC_SKILL, eSkill::SC_SKILLLIST, (char*)&SkillList, nSize);
}
void CDNUserSendManager::SendAddSkill(int nSkillID, int nRet)
{
SCAddSkill AddSkill;
memset(&AddSkill, 0, sizeof(SCAddSkill));
AddSkill.nSkillID = nSkillID;
AddSkill.nRet = nRet;
m_pSession->AddSendData(SC_SKILL, eSkill::SC_ADDSKILL, (char*)&AddSkill, sizeof(SCAddSkill));
}
void CDNUserSendManager::SendDelSkill(int nSkillID, int nRet)
{
SCDelSkill DelSkill;
memset(&DelSkill, 0, sizeof(SCDelSkill));
DelSkill.nSkillID = nSkillID;
DelSkill.nRet = nRet;
m_pSession->AddSendData(SC_SKILL, eSkill::SC_DELSKILL, (char*)&DelSkill, sizeof(SCDelSkill));
}
void CDNUserSendManager::SendSkillLevelUp(int nSkillID, BYTE cLevel, int nRet)
{
SCSkillLevelUp LevelUp;
memset(&LevelUp, 0, sizeof(SCSkillLevelUp));
LevelUp.nSkillID = nSkillID;
LevelUp.cLevel = cLevel;
LevelUp.nRetCode = nRet;
m_pSession->AddSendData(SC_SKILL, eSkill::SC_SKILLLEVELUP, (char*)&LevelUp, sizeof(SCSkillLevelUp));
}
void CDNUserSendManager::SendOtherPlayerSkillLevelUp( int nOtherPlayerIndex, int nSkillID, char cLevel )
{
SCOtherPlayerSkillLevelUp LevelUp;
memset( &LevelUp, 0, sizeof(SCOtherPlayerSkillLevelUp) );
LevelUp.nPartyIndex = nOtherPlayerIndex;
LevelUp.nSkillID = nSkillID;
LevelUp.cLevel = cLevel;
m_pSession->AddSendData( SC_SKILL, eSkill::SC_OTHERPLAYERSKILLLEVELUP, (char*)&LevelUp, sizeof(SCOtherPlayerSkillLevelUp) );
}
void CDNUserSendManager::SendPushSkillPoint( unsigned short usSkillPoint )
{
SCPushSkillPoint PushSkillPoint;
memset( &PushSkillPoint, 0, sizeof(SCPushSkillPoint) );
PushSkillPoint.usSkillPoint = usSkillPoint;
m_pSession->AddSendData( SC_SKILL, eSkill::SC_PUSHSKILLPOINT, (char*)&PushSkillPoint, sizeof(SCPushSkillPoint) );
}
void CDNUserSendManager::SendUnlockSkill( int nSkillID, int nRetCode )
{
SCUnlockSkill UnlockSkill;
UnlockSkill.nSkillID = nSkillID;
UnlockSkill.nRetCode = (short)nRetCode;
m_pSession->AddSendData( SC_SKILL, eSkill::SC_UNLOCKSKILL, (char*)&UnlockSkill, sizeof(SCUnlockSkill) );
}
void CDNUserSendManager::SendAcquireSkill( int nSkillID, int nRetCode )
{
SCAcquireSkill AcquireSkill;
AcquireSkill.nSkillID = nSkillID;
AcquireSkill.nRetCode = (short)nRetCode;
m_pSession->AddSendData( SC_SKILL, eSkill::SC_ACQUIRESKILL, (char*)&AcquireSkill, sizeof(SCAcquireSkill) );
}
void CDNUserSendManager::SendSkillReset( int nResultSkillPoint, char cSkillPage )
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>µ<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
SCSkillReset SkillReset;
SkillReset.nResultSkillPoint = nResultSkillPoint;
SkillReset.cSkillPage = cSkillPage;
m_pSession->AddSendData( SC_SKILL, eSkill::SC_SKILL_RESET, (char*)&SkillReset, sizeof(SCSkillReset) );
}
void CDNUserSendManager::SendCanUseSkillResetCashItem( INT64 biSerial, int nRewardSP, int nRetCode )
{
// <20><>û<EFBFBD><C3BB> <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
SCCanUseSkillResetCashItem CanUse;
memset( &CanUse, 0, sizeof(CanUse) );
CanUse.biItemSerial = biSerial;
CanUse.nRewardSP = nRewardSP;
CanUse.nRet = nRetCode;
m_pSession->AddSendData( SC_SKILL, eSkill::SC_CANUSE_SKILLRESET_CASH_ITEM, (char*)&CanUse, sizeof(SCCanUseSkillResetCashItem) );
}
void CDNUserSendManager::SendUseSkillResetCashItemRes( int nRetCode, int nResultSP, char cSkillPage )
{
SCUseSkillResetCashItemRes Res;
Res.nRet = nRetCode;
Res.nResultSP = nResultSP;
Res.cSkillPage = cSkillPage;
m_pSession->AddSendData( SC_SKILL, eSkill::SC_USE_SKILLRESET_CASHITEM_RES, (char*)&Res, sizeof(SCUseSkillResetCashItemRes) );
}
void CDNUserSendManager::SendSkillPageCount( char cSkillPageCount )
{
SCSkillPageCount Res;
Res.cSkillPageCount = cSkillPageCount;
m_pSession->AddSendData( SC_SKILL, eSkill::SC_SKILLPAGE_COUNT, (char*)&Res, sizeof(SCSkillPageCount) );
}
void CDNUserSendManager::SendChangeSkillPage( char cSkillPage )
{
SCChangeSkillPage Res;
Res.cSkillPage = cSkillPage;
m_pSession->AddSendData( SC_SKILL, eSkill::SC_CHANGE_SKILLPAGE_RES, (char*)&Res, sizeof(SCChangeSkillPage) );
}
// Trade - Shop
void CDNUserSendManager::SendShopOpen(int nShopID, Shop::Type::eCode Type/*=Shop::Type::Normal*/ )
{
SCShopOpen ShopOpen;
memset(&ShopOpen, 0, sizeof(SCShopOpen));
ShopOpen.nShopID = nShopID;
ShopOpen.Type = Type;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_SHOP_OPEN, (char*)&ShopOpen, sizeof(SCShopOpen));
}
void CDNUserSendManager::SendShopBuyResult(int nRet)
{
SCShopBuyResult Result;
memset(&Result, 0, sizeof(SCShopBuyResult));
Result.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_SHOP_BUY, (char*)&Result, sizeof(SCShopBuyResult));
}
void CDNUserSendManager::SendShopSellResult(int nRet)
{
SCShopSellResult Result;
memset(&Result, 0, sizeof(SCShopSellResult));
Result.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_SHOP_SELL, (char*)&Result, sizeof(SCShopSellResult));
}
void CDNUserSendManager::SendShopRepurchaseList( int nRet, BYTE cCount/*=0*/, const TRepurchaseItemInfo* pList/*=NULL*/ )
{
SCShopRepurchaseList TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nRet = nRet;
if( nRet == ERROR_NONE && cCount > 0 && pList )
{
for( int i=0 ; i<cCount ; ++i )
{
TxPacket.List[i] = *pList;
++pList;
++TxPacket.cCount;
}
}
int iSize = sizeof(TxPacket)-sizeof(TxPacket.List)+(sizeof(TxPacket.List[0])*TxPacket.cCount);
m_pSession->AddSendData(SC_TRADE, eTrade::SC_SHOP_GETLIST_REPURCHASE,reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNUserSendManager::SendShopRepurchase( int iRet, int iRepurchaseID/*=-1*/ )
{
SCShopRepurchase TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet =iRet;
TxPacket.iRepurchaseID =iRepurchaseID;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_SHOP_REPURCHASE,reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
// Trade - SkillShop
void CDNUserSendManager::SendSkillShopOpen( void )
{
SCSkillShopOpen SkillShopOpen;
memset( &SkillShopOpen, 0, sizeof(SCSkillShopOpen) );
SkillShopOpen.nRet = ERROR_NONE;
m_pSession->AddSendData( SC_TRADE, eTrade::SC_SKILLSHOP_OPEN, (char*)&SkillShopOpen, sizeof(SCSkillShopOpen) );
}
// Trade - Mail
void CDNUserSendManager::SendMailBox(const TMailBoxInfo *MailArray, short wTotalCount, short wUnreadCount, char cMailCount, char cDailyMailCount, int nRet)
{
SCMailBox MailBox;
memset(&MailBox, 0, sizeof(SCMailBox));
MailBox.nRetCode = nRet;
int nCount = (int)(CGlobalWeightTable::GetInstance().GetValue(CGlobalWeightTable::DailyMailCount));
MailBox.cDailyMailCount = nCount - cDailyMailCount;
if(MailBox.cDailyMailCount < 0) MailBox.cDailyMailCount = 0;
MailBox.wTotalCount = wTotalCount;
MailBox.wUnreadCount = wUnreadCount;
MailBox.cMailBoxCount = cMailCount;
if(cMailCount > 0 && MailArray){
memcpy(MailBox.MailBox, MailArray, sizeof(TMailBoxInfo) * cMailCount);
}
int nLen = sizeof(SCMailBox) - sizeof(MailBox.MailBox) +(sizeof(TMailBoxInfo) * cMailCount);
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MAILBOX, (char*)&MailBox, nLen);
}
void CDNUserSendManager::SendMailSendResult(int nRet, int nDailyMailCount)
{
SCSendMail Result;
memset(&Result, 0, sizeof(SCSendMail));
int nCount = (int)(CGlobalWeightTable::GetInstance().GetValue(CGlobalWeightTable::DailyMailCount));
Result.cDailyMailCount = nCount - nDailyMailCount;
if(Result.cDailyMailCount < 0) Result.cDailyMailCount = 0;
Result.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MAIL_SEND, (char*)&Result, sizeof(SCSendMail));
}
void CDNUserSendManager::SendReadMailResult(const TAReadMail *pRead, int nAttachCoin)
{
SCReadMail ReadMail;
memset(&ReadMail, 0, sizeof(SCReadMail));
if (pRead){
ReadMail.nRet = pRead->nRetCode;
ReadMail.wNotReadMailCount = pRead->iNotReadMailCount;
ReadMail.nMailDBID = pRead->nMailDBID;
ReadMail.bNewFlag = pRead->bNewFlag;
if (ReadMail.nRet == ERROR_NONE)
{
_wcscpy(ReadMail.wszText, MAILTEXTLENMAX, pRead->wszContent, MAILTEXTLENMAX);
ReadMail.tSendDate = pRead->SendDate;
ReadMail.nAttachCoin = nAttachCoin;
ReadMail.cDeliveryType = pRead->cDeliveryType;
int nCount = 0;
for (int i = 0; i < MAILATTACHITEMMAX; i++){
if (pRead->sAttachItem[i].nItemID <= 0) continue;
ReadMail.AttachItem[nCount].cSlotIndex = i;
ReadMail.AttachItem[nCount].Item = pRead->sAttachItem[i];
nCount++;
}
ReadMail.cAttachCount = nCount;
}
}
else
ReadMail.nRet = ERROR_GENERIC_INVALIDREQUEST;
int nLen = sizeof(SCReadMail) - sizeof(ReadMail.AttachItem) + (sizeof(TItemInfo) * ReadMail.cAttachCount);
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MAIL_READ, (char*)&ReadMail, nLen);
}
#if defined(PRE_ADD_CADGE_CASH)
void CDNUserSendManager::SendReadCadgeMailResult(const TAReadWishMail *pRead)
{
SCReadCadgeMail ReadMail;
memset(&ReadMail, 0, sizeof(SCReadCadgeMail));
if (pRead){
ReadMail.nRet = pRead->nRetCode;
ReadMail.bNewFlag = pRead->bNewFlag;
ReadMail.wNotReadMailCount = pRead->nNotReadMailCount;
ReadMail.nMailDBID = pRead->nMailDBID;
if (ReadMail.nRet == ERROR_NONE)
{
_wcscpy(ReadMail.wszText, MAILTEXTLENMAX, pRead->wszContent, MAILTEXTLENMAX);
ReadMail.tSendDate = pRead->SendDate;
if (pRead->biPurchaseOrderID > 0)
ReadMail.bCadgeComplete = true;
ReadMail.nPackageSN = pRead->nPackageSN;
ReadMail.cWishListCount = pRead->cWishListCount;
for (int i = 0; i < pRead->cWishListCount; i++){
ReadMail.WishList[i].nItemSN = pRead->WishList[i].nItemSN;
ReadMail.WishList[i].nItemID = pRead->WishList[i].nItemID;
ReadMail.WishList[i].nOptionIndex = pRead->WishList[i].cOption;
}
}
}
else
ReadMail.nRet = ERROR_GENERIC_INVALIDREQUEST;
int nLen = sizeof(SCReadCadgeMail) - sizeof(ReadMail.WishList) + (sizeof(TWishItemInfo) * ReadMail.cWishListCount);
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MAIL_READCADGE, (char*)&ReadMail, nLen);
}
#endif // #if defined(PRE_ADD_CADGE_CASH)
void CDNUserSendManager::SendDeleteMailResult(int nRet)
{
SCMailResult Result;
memset(&Result, 0, sizeof(SCMailResult));
Result.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MAIL_DELETE, (char*)&Result, sizeof(SCMailResult));
}
void CDNUserSendManager::SendAttachAllMailResult(int *nMailDBIDArray, int nRet)
{
SCAttachAllMailResult Result;
memset(&Result, 0, sizeof(SCAttachAllMailResult));
Result.nRet = nRet;
if(nMailDBIDArray) memcpy(Result.nMailDBID, nMailDBIDArray, sizeof(Result.nMailDBID));
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MAIL_ATTACHALL, (char*)&Result, sizeof(SCAttachAllMailResult));
}
void CDNUserSendManager::SendAttachMailResult(int nRet)
{
SCMailResult Result;
memset(&Result, 0, sizeof(SCMailResult));
Result.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MAIL_ATTACH, (char*)&Result, sizeof(SCMailResult));
}
void CDNUserSendManager::SendNotifyMail(int nTotalMailCount, int nNotReadMailCount, int wExpirationCount, bool bNewMail)
{
SCNotifyMail Mail = { 0, };
Mail.wTotalMailCount = nTotalMailCount;
Mail.wNotReadMailCount = nNotReadMailCount;
if(wExpirationCount > 0) Mail.bExpiration = true;
Mail.bNewMail = bNewMail;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MAIL_NOTIFY, (char*)&Mail, sizeof(SCNotifyMail));
}
// Trade - Exchange(<28><><EFBFBD>ΰŷ<CEB0>)
void CDNUserSendManager::SendExchangeRequest(UINT nSenderSessionID, int nRet)
{
SCExchangeRequest Request;
memset(&Request, 0, sizeof(SCExchangeRequest));
Request.nSenderSessionID = nSenderSessionID;
Request.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_EXCHANGE_REQUEST, (char*)&Request, sizeof(SCExchangeRequest));
}
void CDNUserSendManager::SendExchangeReject(UINT nSessionID, short nRetCode)
{
SCExchangeReject Reject;
memset(&Reject, 0, sizeof(SCExchangeReject));
Reject.nSessionID = nSessionID;
Reject.nRetCode = nRetCode;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_EXCHANGE_REJECT, (char*)&Reject, sizeof(SCExchangeReject));
}
void CDNUserSendManager::SendExchangeStart(UINT nTargetSessionID, int nRet)
{
SCExchangeStart Start;
memset(&Start, 0, sizeof(SCExchangeStart));
Start.nTargetSessionID = nTargetSessionID;
Start.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_EXCHANGE_START, (char*)&Start, sizeof(SCExchangeStart));
}
void CDNUserSendManager::SendExchangeAddItem(UINT nSessionID, char cExchangeIndex, BYTE cInvenIndex, TItem &InvenItem, int nRet)
{
SCExchangeAddItem AddItem;
memset(&AddItem, 0, sizeof(SCExchangeAddItem));
AddItem.nSessionID = nSessionID;
AddItem.cExchangeIndex = cExchangeIndex;
AddItem.ItemInfo.cSlotIndex = cInvenIndex;
AddItem.ItemInfo.Item = InvenItem;
AddItem.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_EXCHANGE_ADDITEM, (char*)&AddItem, sizeof(SCExchangeAddItem));
}
void CDNUserSendManager::SendExchangeDeleteItem(UINT nSessionID, char cExchangeIndex, int nRet)
{
SCExchangeDeleteItem DeleteItem;
memset(&DeleteItem, 0, sizeof(SCExchangeDeleteItem));
DeleteItem.nSessionID = nSessionID;
DeleteItem.cExchangeIndex = cExchangeIndex;
DeleteItem.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_EXCHANGE_DELETEITEM, (char*)&DeleteItem, sizeof(SCExchangeDeleteItem));
}
void CDNUserSendManager::SendExchangeAddCoin(UINT nSessionID, INT64 nCoin, int nRet)
{
SCExchangeAddCoin AddCoin;
memset(&AddCoin, 0, sizeof(SCExchangeAddCoin));
AddCoin.nSessionID = nSessionID;
AddCoin.nCoin = nCoin;
AddCoin.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_EXCHANGE_ADDCOIN, (char*)&AddCoin, sizeof(SCExchangeAddCoin));
}
void CDNUserSendManager::SendExchangeConfirm(UINT nSessionID, char cType)
{
SCExchangeConfirm Confirm;
memset(&Confirm, 0, sizeof(SCExchangeConfirm));
Confirm.cType = cType;
Confirm.nSessionID = nSessionID;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_EXCHANGE_CONFIRM, (char*)&Confirm, sizeof(SCExchangeConfirm));
}
void CDNUserSendManager::SendExchangeCancel()
{
m_pSession->AddSendData(SC_TRADE, eTrade::SC_EXCHANGE_CANCEL, NULL, 0);
}
void CDNUserSendManager::SendExchangeComplete(int nRet)
{
SCExchangeComplete Complete;
memset(&Complete, 0, sizeof(SCExchangeComplete));
Complete.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_EXCHANGE_COMPLETE, (char*)&Complete, sizeof(SCExchangeComplete));
}
// Trade - Market
void CDNUserSendManager::SendMarketList(TMarketInfo *MarketArray, char cMarketCount, int nMarketTotalCount, int nRet)
{
SCMarketList MarketList;
memset(&MarketList, 0, sizeof(SCMarketList));
MarketList.nRetCode = nRet;
MarketList.nMarketTotalCount = nMarketTotalCount;
MarketList.cMarketCount = cMarketCount;
if(MarketList.cMarketCount < 0) MarketList.cMarketCount = 0;
if(MarketList.cMarketCount > MARKETMAX) MarketList.cMarketCount = MARKETMAX;
if(cMarketCount > 0 && MarketArray != NULL)
memcpy(MarketList.MarketInfo, MarketArray, sizeof(TMarketInfo) * cMarketCount);
int nLen = sizeof(SCMarketList) - sizeof(MarketList.MarketInfo) +(sizeof(TMarketInfo) * cMarketCount);
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MARKETLIST, (char*)&MarketList, nLen);
}
void CDNUserSendManager::SendMyMarketList(TMyMarketInfo *MarketArray, char cMarketCount, int nSellingCount, int nClosingCount, int nWeeklyRegisterCount, int nRegisterItemCount, int nRet, bool bPremiumTrade )
{
SCMyMarketList MarketList;
memset(&MarketList, 0, sizeof(SCMyMarketList));
MarketList.nRetCode = nRet;
MarketList.wSellingCount = nSellingCount;
MarketList.wClosingCount = nClosingCount;
MarketList.wWeeklyRegisterCount = nWeeklyRegisterCount;
MarketList.wRegisterItemCount = nRegisterItemCount;
MarketList.bPremiumTrade = bPremiumTrade;
MarketList.cMarketCount = cMarketCount;
if(MarketList.cMarketCount < 0) MarketList.cMarketCount = 0;
if(MarketList.cMarketCount > MYMARKETMAX) MarketList.cMarketCount = MYMARKETMAX;
if(cMarketCount > 0 && MarketArray)
memcpy(MarketList.MarketInfo, MarketArray, sizeof(TMyMarketInfo) * cMarketCount);
int nLen = sizeof(SCMyMarketList) - sizeof(MarketList.MarketInfo) +(sizeof(TMyMarketInfo) * cMarketCount);
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MYMARKETLIST, (char*)&MarketList, nLen);
}
void CDNUserSendManager::SendMarketRegister(int nMarketDBID, int nRet)
{
SCMarketResult Result;
memset(&Result, 0, sizeof(SCMarketResult));
Result.nMarketDBID = nMarketDBID;
Result.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MARKET_REGISTER, (char*)&Result, sizeof(SCMarketResult));
}
void CDNUserSendManager::SendMarketInterrupt(int nMarketDBID, int nRegisterCount, int nRet)
{
SCMarketInterrupt Result;
memset(&Result, 0, sizeof(SCMarketInterrupt));
Result.nMarketDBID = nMarketDBID;
Result.wRegisterItemCount = nRegisterCount;
Result.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MARKET_INTERRUPT, (char*)&Result, sizeof(SCMarketInterrupt));
}
void CDNUserSendManager::SendMarketBuy(int nMarketDBID, int nRet, bool bMini)
{
SCMarketBuyResult Result;
memset(&Result, 0, sizeof(SCMarketBuyResult));
Result.nMarketDBID = nMarketDBID;
Result.nRet = nRet;
#if defined(PRE_ADD_DIRECT_BUY_UPGRADEITEM)
Result.bMini = bMini;
#endif // #if defined(PRE_ADD_DIRECT_BUY_UPGRADEITEM)
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MARKET_BUY, (char*)&Result, sizeof(SCMarketBuyResult));
}
void CDNUserSendManager::SendMarketCalculationList(TMarketCalculationInfo *MarketArray, char cMarketCount, int nRet)
{
SCMarketCalculationList MarketList;
memset(&MarketList, 0, sizeof(SCMarketCalculationList));
MarketList.nRetCode = nRet;
MarketList.cMarketCount = cMarketCount;
if(MarketList.cMarketCount < 0) MarketList.cMarketCount = 0;
if(MarketList.cMarketCount > MYMARKETMAX) MarketList.cMarketCount = MYMARKETMAX;
if(cMarketCount > 0 && MarketArray)
memcpy(MarketList.MarketInfo, MarketArray, sizeof(TMarketCalculationInfo) * cMarketCount);
int nLen = sizeof(SCMarketCalculationList) - sizeof(MarketList.MarketInfo) +(sizeof(TMarketCalculationInfo) * cMarketCount);
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MARKET_CALCULATIONLIST, (char*)&MarketList, nLen);
}
void CDNUserSendManager::SendMarketCalculation(int nMarketDBID, int nRet)
{
SCMarketResult Result;
memset(&Result, 0, sizeof(SCMarketResult));
Result.nMarketDBID = nMarketDBID;
Result.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MARKET_CALCULATION, (char*)&Result, sizeof(SCMarketResult));
}
void CDNUserSendManager::SendMarketCalculationAll(int nRet)
{
SCMarketCalculationAll Market;
memset(&Market, 0, sizeof(SCMarketCalculationAll));
Market.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MARKET_CALCULATIONALL, (char*)&Market, sizeof(SCMarketCalculationAll));
}
void CDNUserSendManager::SendNotifyMarket(int nItemID, short wCalculationCount)
{
SCNotifyMarket Market;
memset(&Market, 0, sizeof(SCNotifyMarket));
Market.nItemID = nItemID;
Market.wCalculationCount = wCalculationCount;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MARKET_NOTIFY, (char*)&Market, sizeof(SCNotifyMarket));
}
void CDNUserSendManager::SendMarketPetalBalance(int nPetalBalance, int nRet)
{
SCMarketPetalBalance Market;
memset(&Market, 0, sizeof(SCMarketPetalBalance));
Market.nPetalBalance = nPetalBalance;
Market.nRetCode = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MARKET_PETALBALANCE, (char*)&Market, sizeof(SCMarketPetalBalance));
}
void CDNUserSendManager::SendMarketPrice(int nRet, int nMarketDBID, TMarketPrice * pPrice)
{
SCMarketPrice Market;
memset(&Market, 0, sizeof(SCMarketPrice));
Market.nRetCode = nRet;
Market.nMarketDBID = nMarketDBID;
memcpy(Market.ItemPrices, pPrice, sizeof(Market.ItemPrices));
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MARKET_PRICE, (char*)&Market, sizeof(SCMarketPrice));
}
void CDNUserSendManager::SendMarketMiniList(TMarketInfo *MarketArray, char cMarketCount, int nMarketTotalCount, int nRet)
{
SCMarketMiniList MarketList;
memset(&MarketList, 0, sizeof(SCMarketMiniList));
MarketList.nRetCode = nRet;
MarketList.nMarketTotalCount = nMarketTotalCount;
MarketList.cMarketCount = cMarketCount;
if (MarketList.cMarketCount < 0) MarketList.cMarketCount = 0;
if (MarketList.cMarketCount > MARKETMAX) MarketList.cMarketCount = MARKETMAX;
if (cMarketCount > 0 && MarketArray != NULL)
memcpy(MarketList.MarketInfo, MarketArray, sizeof(TMarketInfo) * cMarketCount);
int nLen = sizeof(SCMarketMiniList) - sizeof(MarketList.MarketInfo) + (sizeof(TMarketInfo) * cMarketCount);
m_pSession->AddSendData(SC_TRADE, eTrade::SC_MARKETMINILIST, (char*)&MarketList, nLen);
}
#if defined(PRE_SPECIALBOX)
// Trade - SpecialBox
void CDNUserSendManager::SendSpecialBoxList(int nRet, char cCount, TSpecialBoxInfo *InfoList)
{
SCSpecialBoxList Packet;
memset(&Packet, 0, sizeof(SCSpecialBoxList));
Packet.nRet = nRet;
Packet.cCount = cCount;
if (Packet.cCount < 0) Packet.cCount = 0;
if (Packet.cCount > SpecialBox::Common::ListMax) Packet.cCount = SpecialBox::Common::ListMax;
if (InfoList)
memcpy(Packet.BoxInfo, InfoList, sizeof(TSpecialBoxInfo) * Packet.cCount);
int nLen = sizeof(SCSpecialBoxList) - sizeof(Packet.BoxInfo) + (sizeof(TSpecialBoxInfo) * Packet.cCount);
m_pSession->AddSendData(SC_TRADE, eTrade::SC_SPECIALBOX_LIST, (char*)&Packet, nLen);
}
void CDNUserSendManager::SendSpecialBoxItemList(int nRet, char cCount, TSpecialBoxItemInfo *ItemList, INT64 biRewardCoin)
{
SCSpecialBoxItemList Packet;
memset(&Packet, 0, sizeof(SCSpecialBoxItemList));
Packet.nRet = nRet;
Packet.biRewardCoin = biRewardCoin;
Packet.cCount = cCount;
if (Packet.cCount < 0) Packet.cCount = 0;
if (Packet.cCount > SpecialBox::Common::RewardSelectMax) Packet.cCount = SpecialBox::Common::RewardSelectMax;
if (ItemList)
memcpy(Packet.BoxItem, ItemList, sizeof(TSpecialBoxItemInfo) * Packet.cCount);
int nLen = sizeof(SCSpecialBoxItemList) - sizeof(Packet.BoxItem) + (sizeof(TSpecialBoxItemInfo) * Packet.cCount);
m_pSession->AddSendData(SC_TRADE, eTrade::SC_SPECIALBOX_ITEMLIST, (char*)&Packet, nLen);
}
void CDNUserSendManager::SendReceiveSpecialBoxItem(int nRet)
{
SCReceiveSpecialBoxItem Packet = {0,};
Packet.nRet = nRet;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_SPECIALBOX_RECEIVEITEM, (char*)&Packet, sizeof(SCReceiveSpecialBoxItem));
}
void CDNUserSendManager::SendNotifySpecialBoxCount(int nNotifyCount, bool bNew)
{
SCNotifySpecialBox Packet = {0,};
Packet.nNotifyCount = nNotifyCount;
Packet.bNew = bNew;
m_pSession->AddSendData(SC_TRADE, eTrade::SC_SPECIALBOX_NOTIFY, (char*)&Packet, sizeof(SCNotifySpecialBox));
}
#endif // #if defined(PRE_SPECIALBOX)
//friend
void CDNUserSendManager::SendFriendGroupList(SCFriendGroupList * pPacket, int nSize)
{
if(pPacket == NULL)
return;
m_pSession->AddSendData(SC_FRIEND, eFriend::SC_FRIEND_GROUP_LIST, (char*)pPacket, sizeof(*pPacket) - sizeof(pPacket->wszBuf) +(nSize * sizeof(WCHAR)));
}
void CDNUserSendManager::SendFriendList(SCFriendList * pPacket)
{
if(pPacket == NULL)
return;
m_pSession->AddSendData(SC_FRIEND, eFriend::SC_FRIEND_LIST, (char*)pPacket, sizeof(*pPacket) - sizeof(pPacket->Info) +(pPacket->cCount * sizeof(TFriendInfo)));
}
void CDNUserSendManager::SendFriendLocationList(SCFriendLocationList * pPacket)
{
if(pPacket == NULL)
return;
m_pSession->AddSendData(SC_FRIEND, eFriend::SC_FRIEND_LOCATIONLIST, (char*)pPacket, sizeof(*pPacket) - sizeof(pPacket->FriendLocation) +(pPacket->cCount * sizeof(TFriendLocation)));
}
void CDNUserSendManager::SendFriendGroupAdded(UINT nGroupDBID, const WCHAR * pName, int nRet)
{
SCFriendGroupAdded packet; //SC_FRIEND / SC_FRIEND_GROUP_ADDED
memset(&packet, 0, sizeof(packet));
packet.nRetCode = nRet;
packet.nGroupDBID = nGroupDBID;
if( pName )
{
packet.cNameLen = (BYTE)wcslen(pName);
if( packet.cNameLen > FRIEND_GROUP_NAMELENMAX )
{
_DANGER_POINT();
return;
}
_wcscpy(packet.wszBuf, _countof(packet.wszBuf), pName, (int)wcslen(pName));
}
int nSize = packet.cNameLen * sizeof(WCHAR);
m_pSession->AddSendData(SC_FRIEND, eFriend::SC_FRIEND_GROUP_ADDED, (char*)&packet, sizeof(packet) - sizeof(packet.wszBuf) + nSize);
}
void CDNUserSendManager::SendFriendAdded(INT64 biFriendCharDBID, UINT nGroupDBID, const WCHAR * pName, const sWorldUserState * pState, int nRet)
{
SCFriendAdded packet;
memset(&packet, 0, sizeof(packet));
packet.nRetCode = nRet;
packet.Info.biFriendCharacterDBID = biFriendCharDBID;
packet.Info.nGroupDBID = nGroupDBID;
if(packet.nRetCode == ERROR_NONE)
{
if(pState)
{
packet.Info.Location.cServerLocation = pState->nLocationState;
packet.Info.Location.nChannelID = pState->nLocationState == _LOCATION_VILLAGE ? pState->nChannelID : -1;
packet.Info.Location.nMapIdx = pState->nMapIdx;
}
else
packet.Info.Location.cServerLocation = _LOCATION_NONE;
}
if(pName)
_wcscpy(packet.Info.wszFriendName, _countof(packet.Info.wszFriendName), pName, (int)wcslen(pName));
m_pSession->AddSendData(SC_FRIEND, eFriend::SC_FRIEND_ADDED, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendFriendGroupDeleted(UINT nGroupDBID, int nRet)
{
SCFriendGroupDeleted packet; //SC_FRIEND / SC_FRIEND_GROUP_DELETED
memset(&packet, 0, sizeof(packet));
packet.nGroupDBID = nGroupDBID;
packet.nRetCode = nRet;
m_pSession->AddSendData(SC_FRIEND, eFriend::SC_FRIEND_GROUP_DELETED, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendFriendGroupUpdated(UINT nGroupDBID, const WCHAR * pName, int nRet)
{
SCFriendGroupUpdated packet; //SC_FRIEND / SC_FRIEND_GROUP_UPDATED
memset(&packet, 0, sizeof(packet));
packet.nRetCode = nRet;
packet.nGroupDBID = nGroupDBID;
if(pName)
{
packet.cNameLen = (BYTE)wcslen(pName);
if( packet.cNameLen > FRIEND_GROUP_NAMELENMAX )
{
_DANGER_POINT();
return;
}
_wcscpy(packet.wszBuf, _countof(packet.wszBuf), pName, (int)wcslen(pName));
}
int nSize = packet.cNameLen * sizeof(WCHAR);
m_pSession->AddSendData(SC_FRIEND, eFriend::SC_FRIEND_GROUP_UPDATED, (char*)&packet, sizeof(packet) - sizeof(packet.wszBuf) + nSize);
}
void CDNUserSendManager::SendFriendDeleted(BYTE cCount, const INT64 * biFriendCharacterDBID, int nRet)
{
SCFriendDeleted packet;
memset(&packet, 0, sizeof(SCFriendDeleted));
packet.nRetCode = nRet;
if(cCount > 0 && biFriendCharacterDBID != NULL)
{
if(cCount >= FRIEND_MAXCOUNT)
{
_DANGER_POINT();
return;
}
packet.cCount = cCount;
memcpy(packet.biFriendCharacterDBID, biFriendCharacterDBID, sizeof(INT64) * packet.cCount);
}
m_pSession->AddSendData(SC_FRIEND, eFriend::SC_FRIEND_ADDED_DELETED, (char*)&packet, sizeof(packet) - sizeof(packet.biFriendCharacterDBID) +(sizeof(INT64) * packet.cCount));
}
void CDNUserSendManager::SendFriendUpdated(BYTE cCount, INT64 * biFriendDBID, UINT nGroupDBID, int nRet)
{
if(biFriendDBID == NULL) return;
SCFriendUpdated packet; //SC_FRIEND / SC_FRIEND_UPDATED
memset(&packet, 0, sizeof(packet));
packet.nRetCode = nRet;
packet.nGroupDBID = nGroupDBID;
if(cCount > 0)
{
if(cCount >= FRIEND_MAXCOUNT)
{
_DANGER_POINT();
return;
}
packet.cCount = cCount;
memcpy(packet.biFriendCharacterDBID, biFriendDBID, sizeof(INT64) * packet.cCount);
}
m_pSession->AddSendData(SC_FRIEND, eFriend::SC_FRIEND_UPDATED, (char*)&packet, sizeof(packet) - sizeof(packet.biFriendCharacterDBID) +(sizeof(INT64) * packet.cCount));
}
void CDNUserSendManager::SendFriendDetailInfo(INT64 biFriendCharacterDBID, UINT nBelongGroupDBID, int nClass, int nLevel, int nJob, \
const sWorldUserState * pState, const WCHAR * pGuildName, const WCHAR * pMemo)
{
int nSize = 0;
SCFriendDetailInfo packet;
memset(&packet, 0, sizeof(packet));
packet.biFriendCharacterDBID = biFriendCharacterDBID;
packet.nGroupDBID = nBelongGroupDBID;
packet.nClass = nClass;
packet.nJob = nJob;
packet.cCharacterLevel = (BYTE)nLevel;
if(pState)
{
packet.Location.cServerLocation = pState->nLocationState;
packet.Location.nChannelID = pState->nChannelID;
packet.Location.nMapIdx = pState->nMapIdx;
}
m_pSession->AddSendData(SC_FRIEND, eFriend::SC_FRIEND_INFO, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendFriendResult(int nRet)
{
SCFriendResult packet;
packet.nRet = nRet;
m_pSession->AddSendData(SC_FRIEND, eFriend::SC_FRIEND_RESULT, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendFriendAddNotice(const WCHAR * pName)
{
SCFriendAddNotice packet;
memset(&packet, 0, sizeof(packet));
_wcscpy(packet.wszName, _countof(packet.wszName), pName, (int)wcslen(pName));
m_pSession->AddSendData(SC_FRIEND, eFriend::SC_FRIEND_ADDNOTICE, (char*)&packet, sizeof(packet));
}
//Guild
void CDNUserSendManager::SendCreateGuild(UINT nSessionID, LPCWSTR lpwszGuildName, int iErrNo, const TGuildUID* pGuildUID, const TGuild* pInfo, UINT nAccountDBID, INT64 nCharacterDBID, TP_JOB nJob, CHAR cLevel, TCommunityLocation* pLocation)
{
SCCreateGuild Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nSessionID = nSessionID;
_wcscpy(Packet.wszGuildName, _countof(Packet.wszGuildName), lpwszGuildName, (int)wcslen(lpwszGuildName));
Packet.nAccountDBID = nAccountDBID;
Packet.nCharacterDBID = nCharacterDBID;
Packet.nJob = nJob;
Packet.cLevel = cLevel;
Packet.iErrNo = iErrNo;
if(pGuildUID) {
Packet.GuildUID = (*pGuildUID);
}
if(pInfo) {
Packet.Info = (*pInfo);
}
if(pLocation) {
Packet.Location = (*pLocation);
}
m_pSession->AddSendData(SC_GUILD, eGuild::SC_CREATEGUILD, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendDismissGuild(UINT nSessionID, int iErrNo, const TGuildUID* pGuildUID)
{
SCDismissGuild Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nSessionID = nSessionID;
Packet.iErrNo = iErrNo;
if(pGuildUID) {
Packet.GuildUID = (*pGuildUID);
}
m_pSession->AddSendData(SC_GUILD, eGuild::SC_DISMISSGUILD, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendInviteGuildMemberReq(const TGuildUID pGuildUID, UINT nFromAccountDBID, UINT nFromSessionID, LPCWSTR lpwszFromCharacterName, int iErrNo, UINT nToAccountDBID, UINT nToSessionID, LPCWSTR lpwszGuildName)
{
SCInviteGuildMemberReq Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.GuildUID = pGuildUID;
Packet.nFromAccountDBID = nFromAccountDBID;
Packet.nFromSessionID = nFromSessionID;
Packet.nToAccountDBID = nToAccountDBID;
Packet.nToSessionID = nToSessionID;
Packet.iErrNo = iErrNo;
_wcscpy(Packet.wszFromCharacterName, _countof(Packet.wszFromCharacterName), lpwszFromCharacterName, (int)wcslen(lpwszFromCharacterName));
if(lpwszGuildName)
_wcscpy(Packet.wszGuildName, _countof(Packet.wszGuildName), lpwszGuildName, (int)wcslen(lpwszGuildName));
m_pSession->AddSendData(SC_GUILD, eGuild::SC_INVITEGUILDMEMBREQ, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendInviteGuildMemberAck(UINT nToAccountDBID, INT64 nToCharacterDBID, LPCWSTR lpwszToCharacterName, int iErrNo, UINT nFromAccountDBID, UINT nFromSessionID, TP_JOB nJob, CHAR cLevel, TCommunityLocation* pLocation, const TGuildUID* pGuildUID)
{
SCInviteGuildMemberAck Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nToAccountDBID = nToAccountDBID;
Packet.nToCharacterDBID = nToCharacterDBID;
Packet.nFromAccountDBID = nFromAccountDBID;
Packet.nFromCharacterDBID = nFromSessionID;
Packet.nJob = nJob;
Packet.cLevel = cLevel;
Packet.iErrNo = iErrNo;
_wcscpy(Packet.wszToCharacterName, _countof(Packet.wszToCharacterName), lpwszToCharacterName, (int)wcslen(lpwszToCharacterName));
if(pLocation) {
Packet.Location = (*pLocation);
}
if(pGuildUID) {
Packet.GuildUID = (*pGuildUID);
}
m_pSession->AddSendData(SC_GUILD, eGuild::SC_INVITEGUILDMEMBACK, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendLeaveGuildMember(UINT nAccountDBID, INT64 nCharacterDBID, int iErrNo, const TGuildUID* pGuildUID, bool bGraduateBeginnerGuild)
{
SCLeaveGuildMember Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nAccountDBID = nAccountDBID;
Packet.nCharacterDBID = nCharacterDBID;
Packet.iErrNo = iErrNo;
if(pGuildUID) {
Packet.GuildUID = (*pGuildUID);
}
#ifdef PRE_ADD_BEGINNERGUILD
Packet.bGraduateBeginnerGuild = bGraduateBeginnerGuild;
#endif //#ifdef PRE_ADD_BEGINNERGUILD
m_pSession->AddSendData(SC_GUILD, eGuild::SC_LEAVEGUILDMEMB, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendExileGuildMember(UINT nAccountDBID, INT64 nCharacterDBID, int iErrNo, const TGuildUID* pGuildUID)
{
SCExileGuildMember Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nAccountDBID = nAccountDBID;
Packet.nCharacterDBID = nCharacterDBID;
Packet.iErrNo = iErrNo;
if(pGuildUID) {
Packet.GuildUID = (*pGuildUID);
}
m_pSession->AddSendData(SC_GUILD, eGuild::SC_EXILEGUILDMEMB, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendChangeGuildInfo(UINT nAccountDBID, INT64 nCharacterDBID, BYTE btGuildUpdate, int iErrNo, int iInt1, int iInt2, INT64 biInt64, LPCWSTR pTextL, const TGuildUID *pGuildUID)
{
SCChangeGuildInfo Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nAccountDBID = nAccountDBID;
Packet.nCharacterDBID = nCharacterDBID;
Packet.btGuildUpdate = btGuildUpdate;
Packet.Int1 = iInt1;
Packet.Int2 = iInt2;
Packet.Int64 = biInt64;
Packet.iErrNo = iErrNo;
if(pTextL) {
_wcscpy(Packet.Text, _countof(Packet.Text), pTextL, (int)wcslen(pTextL));
}
if(pGuildUID) {
Packet.GuildUID = (*pGuildUID);
}
m_pSession->AddSendData(SC_GUILD, eGuild::SC_CHANGEGUILDINFO, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendChangeGuildInfoEx(UINT nAccountDBID, INT64 nCharacterDBID, BYTE btGuildUpdate, int iErrNo, int iInt1, int iInt2, int iInt3, int iInt4, INT64 biInt64, LPCWSTR pTextL, const TGuildUID *pGuildUID)
{
SCChangeGuildInfo Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nAccountDBID = nAccountDBID;
Packet.nCharacterDBID = nCharacterDBID;
Packet.btGuildUpdate = btGuildUpdate;
Packet.Int1 = iInt1;
Packet.Int2 = iInt2;
Packet.Int64 = biInt64;
Packet.iErrNo = iErrNo;
if(pTextL) {
_wcscpy(Packet.Text, _countof(Packet.Text), pTextL, (int)wcslen(pTextL));
}
if(pGuildUID) {
Packet.GuildUID = (*pGuildUID);
}
Packet.Int3 = iInt3;
Packet.Int4 = iInt4;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_CHANGEGUILDINFO, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendMoveGuildItem(char cType, INT64 biSrcSerial, INT64 biDestSerial, const TItemInfo *pSrcInfo, const TItemInfo *pDestInfo, int nRetCode, int nTakeItemCount)
{
SCMoveGuildItem Move;
memset(&Move, 0, sizeof(SCMoveGuildItem));
Move.cMoveType = cType;
Move.nRetCode = nRetCode;
Move.biSrcSerial = biSrcSerial;
Move.biDestSerial = biDestSerial;
Move.nTakeItemCount = nTakeItemCount;
if(nRetCode == ERROR_NONE)
{
if(pSrcInfo){
Move.SrcItem = *pSrcInfo;
if(pSrcInfo->Item.wCount <= 0)
Move.SrcItem.Item.nItemID = 0;
}
if(pDestInfo){
Move.DestItem = *pDestInfo;
if(pDestInfo->Item.wCount <= 0)
Move.DestItem.Item.nItemID = 0;
}
m_pSession->AddSendData(SC_ITEM, eItem::SC_MOVEGUILDITEM, (char*)&Move, sizeof(SCMoveGuildItem));
}
else
m_pSession->AddSendData(SC_ITEM, eItem::SC_MOVEGUILDITEM, (char*)&Move, (int)(sizeof(Move) -(sizeof(Move.SrcItem) + sizeof(Move.DestItem))));
}
void CDNUserSendManager::SendRefreshGuildItem(char cType, INT64 biSrcSerial, INT64 biDestSerial, const TItemInfo *pSrcInfo, const TItemInfo *pDestInfo)
{
SCRefreshGuildItem Refresh;
memset(&Refresh, 0, sizeof(Refresh));
Refresh.cMoveType = cType;
Refresh.biSrcSerial = biSrcSerial;
Refresh.biDestSerial = biDestSerial;
if(pSrcInfo){
Refresh.SrcItem = *pSrcInfo;
if(pSrcInfo->Item.wCount <= 0)
Refresh.SrcItem.Item.nItemID = 0;
}
if(pDestInfo){
Refresh.DestItem = *pDestInfo;
if(pDestInfo->Item.wCount <= 0)
Refresh.DestItem.Item.nItemID = 0;
}
m_pSession->AddSendData(SC_ITEM, eItem::SC_REFRESH_GUILDITEM, (char*)&Refresh, sizeof(SCRefreshGuildItem));
}
void CDNUserSendManager::SendRefreshGuildCoin(INT64 biTotalCoin)
{
SCRefreshGuildCoin Refresh;
Refresh.biTotalCoin = biTotalCoin;
m_pSession->AddSendData(SC_ITEM, eItem::SC_REFRESH_GUILDCOIN, (char*)&Refresh, sizeof(SCRefreshGuildCoin));
}
void CDNUserSendManager::SendMoveGuildCoin(char cType, INT64 nAddCoin, INT64 nInventoryCoin, INT64 nWarehouseCoin, INT64 nWithdrawCoin, int nRet)
{
SCMoveGuildCoin Coin;
Coin.cMoveType = cType;
Coin.nMoveCoin = nAddCoin;
Coin.nInventoryCoin = nInventoryCoin;
Coin.nWarehouseCoin = nWarehouseCoin;
Coin.nWithdrawCoin = nWithdrawCoin;
Coin.nRet = nRet;
m_pSession->AddSendData(SC_ITEM, eItem::SC_MOVEGUILDCOIN, (char*)&Coin, sizeof(SCMoveGuildCoin));
}
void CDNUserSendManager::SendGetGuildWareHistoryList(const TGuildUID pGuildUID, bool bDirection, int nCurCount, int nTotCount, int iErrNo, const TGuildWareHistory* pHistoryList, int nCount)
{
SCGetGuildWareHistory Packet;
memset(&Packet, NULL, sizeof(Packet));
int nSize = 0;
Packet.nErrNo = iErrNo;
Packet.nCurrCount = nCurCount;
Packet.nTotalCount = nTotCount;
nSize = sizeof(SCGetGuildWareHistory) - sizeof(Packet.HistoryList);
if(nCount > 0)
{
Packet.nCount = nCount;
memcpy(Packet.HistoryList, pHistoryList, sizeof(TGuildWareHistory)*nCount);
nSize += sizeof(TGuildWareHistory)*nCount;
}
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GET_GUILDWARE_HISTORY, reinterpret_cast<char*>(&Packet), nSize);
}
void CDNUserSendManager::SendGetGuildInfo(CDNGuildBase *pGuild, int nRet)
{
SCGetGuildInfo Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.iErrNo = nRet;
if(pGuild){
if(pGuild->GetInfo()) Packet.Info = (*(pGuild->GetInfo()));
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB> <20><>Ȳ<EFBFBD>̰<EFBFBD> <20><><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>Ҽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ȳ<EFBFBD≯<EFBFBD> Ʈ<><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#if defined( _VILLAGESERVER )
if( pGuild->IsEnrollGuildWar() && g_pGuildWarManager->GetRestriction(eGuild::CS_INVITEGUILDMEMBREQ, pGuild->GetUID()) )
Packet.bNotRecruitMember = true;
#endif // #if defined( _VILLAGESERVER )
#if defined (_VILLAGESERVER)
if (pGuild->IsEnrollGuildWar() && g_pGuildWarManager->GetStepIndex() == GUILDWAR_STEP_REWARD)
Packet.Info.iWarPoint = g_pGuildWarManager->GetGuildWarPoint(m_pSession->GetGuildUID().nDBID);
else
Packet.Info.iWarPoint = 0;
#endif // #if defined (_VILLAGESERVER)
// <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GETGUILDINFO, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendGetGuildMember(CDNGuildBase *pGuild, int nRet)
{
TGuildMember MemberList[GUILDSIZE_MAX];
memset(&MemberList, 0, sizeof(MemberList));
SCGetGuildMember Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.iErrNo = nRet;
if(pGuild){
pGuild->SetMemberList(MemberList);
}
int nPacketSize = (sizeof(SCGetGuildMember) - sizeof(Packet.MemberList));
int nMaxSendMember = ((SERVERDETACHPACKETSIZE)-nPacketSize) / sizeof(Packet.MemberList[0]);
if(nMaxSendMember > SENDGUILDMEMBER_MAX)
nMaxSendMember = SENDGUILDMEMBER_MAX;
for(int i=0;i<GUILDSIZE_MAX;i++)
{
if(MemberList[i].nCharacterDBID == 0)
break;
Packet.MemberList[Packet.nCount++] = MemberList[i];
if(Packet.nCount >= nMaxSendMember)
{
if( i+1 >= GUILDSIZE_MAX || (i+1 < GUILDSIZE_MAX && MemberList[i+1].nCharacterDBID == 0) )
Packet.bEndMember = true;
int iSize = static_cast<int>(sizeof(Packet) - sizeof(Packet.MemberList) + sizeof(Packet.MemberList[0]) * Packet.nCount);
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GET_GUILDMEMBER, reinterpret_cast<char*>(&Packet), iSize);
Packet.nCount = 0;
Packet.nPage++;
memset(Packet.MemberList, 0, sizeof(Packet.MemberList));
}
}
// <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if(Packet.nCount > 0)
{
Packet.bEndMember = true;
int iSize = static_cast<int>(sizeof(Packet) - sizeof(Packet.MemberList) + sizeof(Packet.MemberList[0]) * Packet.nCount);
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GET_GUILDMEMBER, reinterpret_cast<char*>(&Packet), iSize);
}
}
void CDNUserSendManager::SendEnrollGuildWar(int iErrNo, short wScheduleID, BYTE cTeamColorCode)
{
SCEnrollGuildWar Packet;
Packet.iErrorNo = iErrNo;
Packet.wScheduleID = wScheduleID;
Packet.cTeamColorCode = cTeamColorCode;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_ENROLL_GUILDWAR, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendGuildWarEvent(short wScheduleID, char cEventStep, char cEventType)
{
SCGuildWarEvent TxPacket;
TxPacket.wScheduleID = wScheduleID;
TxPacket.cEventStep = cEventStep;
TxPacket.cEventType = cEventType;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_CHANGE_WAREVENT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
void CDNUserSendManager::SendGuildWarFestivalPoint()
{
SCGuildWarFestivalPoint GuildWarFestivalPoint;
memset( &GuildWarFestivalPoint, 0, sizeof(GuildWarFestivalPoint) );
GuildWarFestivalPoint.biGuildWarFestivalPoint = m_pSession->GetGuildWarFestivalPoint();
m_pSession->AddSendData( SC_GUILD, eGuild::SC_GUILDWAR_FESTIVAL_POINT, reinterpret_cast<char*>(&GuildWarFestivalPoint), sizeof(GuildWarFestivalPoint) );
}
void CDNUserSendManager::SendGuildWarPreWinGuild(bool bPreWin)
{
SCGuildWarPreWin GuildWarPreWin;
memset( &GuildWarPreWin, 0, sizeof(GuildWarPreWin) );
GuildWarPreWin.bPreWin = bPreWin;
m_pSession->AddSendData( SC_GUILD, eGuild::SC_GUILDWAR_PRE_WIN, reinterpret_cast<char*>(&GuildWarPreWin), sizeof(GuildWarPreWin) );
}
void CDNUserSendManager::SendGuildWarTournamentWin(SCGuildWarTournamentWin* pPacket)
{
m_pSession->AddSendData( SC_GUILD, eGuild::SC_GUILDWAR_TOURNAMENT_WIN, reinterpret_cast<char*>(pPacket), sizeof(SCGuildWarTournamentWin) );
}
#if defined(_VILLAGESERVER)
void CDNUserSendManager::SendGuildWarEventTime(TGuildWarEventInfo* pGuildWarTime, TGuildWarEventInfo* pFinalPartTime, bool bFinalProgress)
{
SCGuildWarEventTime GuildWarEventTime;
memset( &GuildWarEventTime, 0, sizeof(GuildWarEventTime));
memcpy(GuildWarEventTime.tFinalPartTime, pFinalPartTime, sizeof(GuildWarEventTime.tFinalPartTime));
memcpy(GuildWarEventTime.tGuildWarTime, pGuildWarTime, sizeof(GuildWarEventTime.tGuildWarTime));
GuildWarEventTime.bFinalProgress = bFinalProgress;
m_pSession->AddSendData( SC_GUILD, eGuild::SC_GUILDWAR_EVENT_TIME, reinterpret_cast<char*>(&GuildWarEventTime), sizeof(GuildWarEventTime) );
}
void CDNUserSendManager::SendGuildWarStatusOpen(int nBluePoint, int nRedPoint, int nMyPoint, int nMyGuildPoint)
{
SCGuildWarStatus GuildWarStatus;
memset(&GuildWarStatus, 0, sizeof(SCGuildWarStatus));
GuildWarStatus.nBluePoint = nBluePoint;
GuildWarStatus.nRedPoint = nRedPoint;
GuildWarStatus.nMyPoint = nMyPoint;
GuildWarStatus.nMyGuildPoint = nMyGuildPoint;
if( g_pGuildWarManager->GetFinalProgress() )
{
GuildWarStatus.nRankingCount = g_pGuildWarManager->GetGuildWarTrialRankingCount();
memcpy(GuildWarStatus.sGuildWarPointTrialRanking, g_pGuildWarManager->GetGuildWarTrialRankingInfo(), sizeof(SGuildWarRankingInfo)*GuildWarStatus.nRankingCount);
}
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDWAR_STATUS_OPEN, reinterpret_cast<char*>(&GuildWarStatus)
, sizeof(GuildWarStatus)-(sizeof(SGuildWarRankingInfo)*(GUILDWAR_TRIAL_POINT_TEAM_MAX-GuildWarStatus.nRankingCount)) );
}
void CDNUserSendManager::SendGuildWarTrialResultOpen()
{
SCGuildWarTrialResult GuildWarTrialResult;
memset(&GuildWarTrialResult, 0, sizeof(SCGuildWarTrialResult));
GuildWarTrialResult.nBluePoint = g_pGuildWarManager->GetBlueTeamPoint();
GuildWarTrialResult.nRedPoint = g_pGuildWarManager->GetRedTeamPoint();
memcpy(GuildWarTrialResult.sGuildWarRankingInfo, g_pGuildWarManager->GetGuildWarRankingInfo(), sizeof(GuildWarTrialResult.sGuildWarRankingInfo));
memcpy(GuildWarTrialResult.sGuildWarMissionGuildRankingInfo, g_pGuildWarManager->GetGuildWarMissionGuildRankingInfo(), sizeof(GuildWarTrialResult.sGuildWarMissionGuildRankingInfo));
memcpy(GuildWarTrialResult.sGuildWarMissionRankingInfo, g_pGuildWarManager->GetGuildWarMissionRankingInfo(), sizeof(GuildWarTrialResult.sGuildWarMissionRankingInfo));
memcpy(GuildWarTrialResult.sGuildWarDailyAward, g_pGuildWarManager->GetGuildDailyAward(), sizeof(GuildWarTrialResult.sGuildWarDailyAward));
int nPacketSize = sizeof(SCGuildWarTrialResult);
GuildWarTrialResult.bGuildWar = false;
GuildWarTrialResult.bReward = false;
CDNGuildBase* pGuild = g_pGuildManager->At(m_pSession->GetGuildUID());
if(pGuild)
{
#if !defined( PRE_ADD_NODELETEGUILD )
CDetachAutoEx<CDNGuildBase> AutoDetach(pGuild);
if(true == pGuild->IsEnable() )
{
#endif
if( pGuild->IsEnrollGuildWar() )
{
CDNGuildVillage* pGuildVillage = static_cast<CDNGuildVillage *>(pGuild);
GuildWarTrialResult.bGuildWar = true;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
GuildWarTrialResult.nFestivalPoint = m_pSession->GetGuildWarPoint();
GuildWarTrialResult.nFestivalPointAdd = g_pGuildWarManager->CalcGuildWarFestivalPoint(m_pSession->GetGuildSelfView().cTeamColorCode,
m_pSession->GetCharacterDBID(), GuildWarTrialResult.nFestivalPoint) - GuildWarTrialResult.nFestivalPoint;
memcpy(&GuildWarTrialResult.sMyGuildWarRankingInfo, pGuildVillage->GetGuildWarMyRankingInfo(), sizeof(GuildWarTrialResult.sMyGuildWarRankingInfo));
memcpy(&GuildWarTrialResult.sMyGuildWarMissionGuildRankingInfo, pGuildVillage->GetGuildWarTotalRankingInfo(), sizeof(GuildWarTrialResult.sMyGuildWarMissionGuildRankingInfo));
memcpy(&GuildWarTrialResult.sMyGuildWarMissionRaningInfo, m_pSession->GetGuildWarMissionRankingInfo(), sizeof(GuildWarTrialResult.sMyGuildWarMissionRaningInfo));
if( m_pSession->GetGuildWarPoint() > 0 ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>츸..
GuildWarTrialResult.bReward = m_pSession->IsGuildWarReward();
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDWAR_TRIAL_RESULT_OPEN, reinterpret_cast<char*>(&GuildWarTrialResult), nPacketSize);
return;
}
#if !defined( PRE_ADD_NODELETEGUILD )
}
#endif
}
nPacketSize = sizeof(SCGuildWarTrialResult) - sizeof(int) - sizeof(int) -
(sizeof(GuildWarTrialResult.sMyGuildWarRankingInfo)+sizeof(GuildWarTrialResult.sMyGuildWarMissionGuildRankingInfo)+sizeof(GuildWarTrialResult.sMyGuildWarMissionRaningInfo));
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDWAR_TRIAL_RESULT_OPEN, reinterpret_cast<char*>(&GuildWarTrialResult), nPacketSize);
}
void CDNUserSendManager::SendGuildWarTrialResultUIOpen()
{
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDWAR_TRIAL_RESULT_UIOPEN, NULL, 0);
}
void CDNUserSendManager::SendGuildWarTournamentInfoUIOpen()
{
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDWAR_TOURNAMENT_INFO_UIOPEN, NULL, 0);
}
void CDNUserSendManager::SendGuildWarTournamentInfoOpen(bool bPopularityVote)
{
SCGuildTournamentInfo GuildTournamentInfo;
memset(&GuildTournamentInfo, 0, sizeof(SCGuildTournamentInfo));
memcpy(GuildTournamentInfo.TournamentInfo, g_pGuildWarManager->GetGuildTournamentInfo(), sizeof(GuildTournamentInfo.TournamentInfo));
GuildTournamentInfo.bPopularityVote = bPopularityVote;
GuildTournamentInfo.cMatchTypeCode = g_pGuildWarManager->GetGuildWarFinalPart();
GuildTournamentInfo.tStartTime = g_pGuildWarManager->GetGuildWarFinalPartBeginTime();
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDWAR_TOURNAMENT_INFO_OPEN, reinterpret_cast<char*>(&GuildTournamentInfo), sizeof(SCGuildTournamentInfo));
}
void CDNUserSendManager::SendGuildWarVote(int nRetCode, int nAddFestivalPoint)
{
SCGuildWarVote GuildWarVote;
memset(&GuildWarVote, 0, sizeof(SCGuildWarVote));
GuildWarVote.nRetCode = nRetCode;
GuildWarVote.nAddFestivalPoint = nAddFestivalPoint;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDWAR_VOTE,reinterpret_cast<char*>(&GuildWarVote), sizeof(SCGuildWarVote));
}
void CDNUserSendManager::SendGuildWarVoteTop(int nVoteCount, const WCHAR* pwszVoteGuildName)
{
SCGuildWarVoteTop GuildWarVoteTop;
memset(&GuildWarVoteTop, 0, sizeof(SCGuildWarVoteTop));
GuildWarVoteTop.nVoteCount = nVoteCount;
memcpy(GuildWarVoteTop.wszGuildName, pwszVoteGuildName, sizeof(GuildWarVoteTop.wszGuildName));
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDWAR_VOTE_TOP,reinterpret_cast<char*>(&GuildWarVoteTop), sizeof(SCGuildWarVoteTop));
}
void CDNUserSendManager::SendGuildWarReward(int nRetCode)
{
SCGuildWarCompensation GuildWarCompensation;
memset(&GuildWarCompensation, 0, sizeof(SCGuildWarCompensation));
GuildWarCompensation.nRetCode = nRetCode;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDWAR_COMPENSATION,reinterpret_cast<char*>(&GuildWarCompensation), sizeof(SCGuildWarCompensation));
}
void CDNUserSendManager::SendGuildWarWinSkill(int nRetCode, DWORD dwCoolTime)
{
SCGuildWarWinSkill GuildWarWinSkill;
memset(&GuildWarWinSkill, 0, sizeof(SCGuildWarWinSkill));
GuildWarWinSkill.nRetCode = nRetCode;
GuildWarWinSkill.dwCoolTime = dwCoolTime;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDWAR_WIN_SKILL,reinterpret_cast<char*>(&GuildWarWinSkill), sizeof(SCGuildWarWinSkill));
}
void CDNUserSendManager::SendGuildWarUserWinSkill(TGuildUID GuildUID, EtVector3 vPos, int nSkillID)
{
SCGuildWarUserWinSkill GuildWarUserWinSkill;
memset(&GuildWarUserWinSkill, 0, sizeof(SCGuildWarUserWinSkill));
GuildWarUserWinSkill.GuildUID = GuildUID;
GuildWarUserWinSkill.vPos = vPos;
GuildWarUserWinSkill.nSkillID = nSkillID;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDWAR_USER_WINSKILL,reinterpret_cast<char*>(&GuildWarUserWinSkill), sizeof(SCGuildWarUserWinSkill));
}
void CDNUserSendManager::SendGuildWarBuyedItem(int itemID, int count)
{
SCBuyedItemCount packet;
memset(&packet, 0, sizeof(packet));
packet.count = 1;
packet.items[0].id = itemID;
packet.items[0].count = count;
int length = sizeof(packet) - sizeof(packet.items) + (sizeof(ItemCount) * packet.count);
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDWAR_BUYED_ITEM_COUNT, reinterpret_cast<char*>(&packet), length);
}
void CDNUserSendManager::SendGuildWarBuyedItemList(const std::map<int, int>& items)
{
if (items.empty())
return;
SCBuyedItemCount packet;
memset(&packet, 0, sizeof(packet));
packet.count = static_cast<short>(items.size());
size_t i = 0;
for each (std::map<int, int>::value_type v in items)
{
packet.items[i].id = v.first;
packet.items[i].count = v.second;
++i;
}
int length = sizeof(packet) - sizeof(packet.items) + (sizeof(ItemCount) * packet.count);
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDWAR_BUYED_ITEM_COUNT_LIST, reinterpret_cast<char*>(&packet), length);
}
#endif // #if defined(_VILLAGESERVER)
void CDNUserSendManager::SendChangeGuildName(const wchar_t* pwszGuildName)
{
SCChangeGuildName Packet;
memset(&Packet, 0, sizeof(SCChangeGuildName));
_wcscpy(Packet.wszGuildName, _countof(Packet.wszGuildName), pwszGuildName, (int)wcslen(pwszGuildName));
m_pSession->AddSendData(SC_GUILD, eGuild::SC_CHANGEGUILDNAME, reinterpret_cast<char*>(&Packet), sizeof(SCChangeGuildName));
}
void CDNUserSendManager::SendChangeGuildMark(const MAGuildChangeMark *pPacket)
{
SCChangeGuildMark Packet;
memset(&Packet, 0, sizeof(SCChangeGuildMark));
Packet.wMark = pPacket->wMark;
Packet.wMarkBG = pPacket->wMarkBG;
Packet.wMarkBorder = pPacket->wMarkBorder;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_CHANGEGUILDMARK, reinterpret_cast<char*>(&Packet), sizeof(SCChangeGuildMark));
}
void CDNUserSendManager::SendGuildLevelUp(int nLevel)
{
SCGuildLevelUp Packet;
memset (&Packet, 0, sizeof(SCGuildLevelUp));
Packet.nLevel = nLevel;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDLEVELUP, reinterpret_cast<char*>(&Packet), sizeof(SCGuildLevelUp));
}
void CDNUserSendManager::SendUpdateGuildExp(int nError, BYTE cPointType, int nPointValue, int nGuildExp, INT64 biCharacterDBID, int nMissionID)
{
SCUpdateGuildExp Packet;
memset (&Packet, 0, sizeof(SCUpdateGuildExp));
Packet.nError = nError;
Packet.cPointType = cPointType;
Packet.nPointValue = nPointValue;
Packet.nGuildExp = nGuildExp;
Packet.biCharacterDBID = biCharacterDBID;
Packet.nMissionID = nMissionID;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_UPDATEGUILDEXP, reinterpret_cast<char*>(&Packet), sizeof(SCUpdateGuildExp));
}
void CDNUserSendManager::SendExtendGuildWare(short wTotalSize)
{
SCExtendGuildWare Packet;
Packet.wTotalSize = wTotalSize;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_EXTEND_GUILDWARESIZE, reinterpret_cast<char*>(&Packet), sizeof(SCExtendGuildWare));
}
void CDNUserSendManager::SendChangeGuildMemberInfo(UINT nReqAccountDBID, INT64 nReqCharacterDBID, UINT nChgAccountDBID, INT64 nChgCharacterDBID, BYTE btGuildMemberUpdate, int iErrNo, int iInt1, int iInt2, INT64 biInt64, LPCWSTR pText, const TGuildUID *pGuildUID)
{
SCChangeGuildMemberInfo Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nReqAccountDBID = nReqAccountDBID;
Packet.nReqCharacterDBID = nReqCharacterDBID;
Packet.nChgAccountDBID = nChgAccountDBID;
Packet.nChgCharacterDBID = nChgCharacterDBID;
Packet.btGuildMemberUpdate = btGuildMemberUpdate;
Packet.Int1 = iInt1;
Packet.Int2 = iInt2;
Packet.Int64 = biInt64;
Packet.iErrNo = iErrNo;
if(pText) {
_wcscpy(Packet.Text, _countof(Packet.Text), pText, (int)wcslen(pText));
}
if(pGuildUID) {
Packet.GuildUID = (*pGuildUID);
}
m_pSession->AddSendData(SC_GUILD, eGuild::SC_CHANGEGUILDMEMBINFO, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendGetGuildHistoryList(const TGuildUID pGuildUID, INT64 biIndex, bool bDirection, int nCurCount, int nTotCount, int iErrNo, const TGuildHistory* pHistoryList, int nCount)
{
SCGetGuildHistoryList Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.GuildUID = pGuildUID;
Packet.biIndex = biIndex;
Packet.bDirection = bDirection;
Packet.nCurCount = nCurCount;
Packet.nTotCount = nTotCount;
Packet.iErrNo = iErrNo;
if(pHistoryList && CHECK_RANGE(nCount, 1, GUILDSIZE_MAX)) {
for (int iIndex = 0 ; nCount > iIndex ; ++iIndex) {
Packet.HistoryList[Packet.nCount] = pHistoryList[iIndex];
++Packet.nCount;
}
}
int iSize = static_cast<int>(sizeof(Packet) - sizeof(Packet.HistoryList) + sizeof(Packet.HistoryList[0]) * Packet.nCount);
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GETGUILDHISTORYLIST, reinterpret_cast<char*>(&Packet), iSize);
}
void CDNUserSendManager::SendGuildSelfView(UINT nSessionID, const TGuildSelfView& pGuildSelfView)
{
SCChangeGuildSelfView Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nSessionID = nSessionID;
Packet.GuildSelfView = pGuildSelfView;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_CHANGEGUILDSELFVIEW, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendGuildChat(const TGuildUID pGuildUID, UINT nAccountDBID, INT64 nCharacterDBID, LPCWSTR lpwszChatMsg, short nLen)
{
SCGuildChat Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.GuildUID = pGuildUID;
Packet.nAccountDBID = nAccountDBID;
Packet.nCharacterDBID = nCharacterDBID;
for(short aIndex = 0 ; _countof(Packet.wszChatMsg) > aIndex ; ++aIndex) {
Packet.wszChatMsg[aIndex] = lpwszChatMsg[aIndex];
}
Packet.nLen = nLen;
int iSize = static_cast<int>(sizeof(Packet) - sizeof(Packet.wszChatMsg) + sizeof(Packet.wszChatMsg[0]) * Packet.nLen);
m_pSession->AddSendData(SC_CHAT, eChat::SC_GUILDCHAT, reinterpret_cast<char*>(&Packet), iSize);
}
#ifdef PRE_ADD_DOORS_GUILDCHAT_DISCONNECT
void CDNUserSendManager::SendDoorsGuildChat(const TGuildUID pGuildUID, INT64 biCharacterDBID, LPCWSTR lpwszChatMsg, short nLen)
{
SCDoorsGuildChat packet;
memset(&packet, 0, sizeof(SCDoorsGuildChat));
packet.GuildUID = pGuildUID;
packet.biCharacterDBID = biCharacterDBID;
_wcscpy(packet.wszChatMsg, CHATLENMAX, lpwszChatMsg, nLen);
packet.nLen = nLen;
int iSize = static_cast<int>(sizeof(packet) - sizeof(packet.wszChatMsg) + sizeof(packet.wszChatMsg[0]) * packet.nLen);
m_pSession->AddSendData(SC_CHAT, eChat::SC_DOORS_GUILDCHAT, reinterpret_cast<char*>(&packet), iSize);
}
#endif //#ifdef PRE_ADD_DOORS_GUILDCHAT_DISCONNECT
void CDNUserSendManager::SendGuildMemberLoginList(SCGuildMemberLoginList* pPacket)
{
int iSize = static_cast<int>(sizeof(SCGuildMemberLoginList) - sizeof(pPacket->List) + sizeof(pPacket->List[0]) * pPacket->nCount);
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDMEMBLOGINLIST, reinterpret_cast<char*>(pPacket), iSize);
}
void CDNUserSendManager::SendGuildMemberLoginList(TGuildUID GuildUID, int nCount, INT64 *List)
{
SCGuildMemberLoginList Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.GuildUID = GuildUID;
for (int i = 0 ; std::min<int>(GUILDSIZE_MAX, nCount) > i; ++i) {
if(GUILDSIZE_MAX <= Packet.nCount) {
break;
}
Packet.List[Packet.nCount] = List[i];
++Packet.nCount;
}
int iSize = static_cast<int>(sizeof(Packet) - sizeof(Packet.List) + sizeof(Packet.List[0]) * Packet.nCount);
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILDMEMBLOGINLIST, reinterpret_cast<char*>(&Packet), iSize);
}
void CDNUserSendManager::SendGuildRewardItem(TGuildRewardItem* GuildRewardItem)
{
SCGetGuildRewardItem Packet;
memset(&Packet, 0, sizeof(Packet));
if(GuildRewardItem)
memcpy( Packet.GuildRewardItem, GuildRewardItem, sizeof(Packet.GuildRewardItem) );
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILD_GET_REWARDITEM, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendAddGuildRewardItem( TGuildRewardItem GuildRewardItem )
{
SCAddGUildRewardItem Packet;
memset(&Packet, 0, sizeof(Packet));
memcpy( &Packet.GuildRewardItem, &GuildRewardItem, sizeof(Packet.GuildRewardItem) );
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILD_ADD_REWARDITEM, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendBuyGuildRewardItem( int iRet, int nItemID )
{
SCBuyGuildRewardItem Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.iRet = iRet;
Packet.nItemID = nItemID;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILD_BUY_REWARDITEM, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendExtendGuildSize(short nGuildSize)
{
SCExtendGuildSize Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nGuildSize = nGuildSize;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILD_EXTEND_GUILDSIZE, reinterpret_cast<char*>(&Packet), sizeof(SCExtendGuildSize));
}
void CDNUserSendManager::SendPlayerGuildInfo( int nRet, UINT nSessionID, LPCWSTR lpwszGuildName, LPCWSTR lpwszMasterName, int nGuildLevel, int nMemberSize, int nGuildSize, TGuildRewardItem* GuildRewardItem )
{
SCPlayerGuildInfo Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nSessionID = nSessionID;
if(lpwszGuildName)
_wcscpy(Packet.wszGuildName, _countof(Packet.wszGuildName), lpwszGuildName, (int)wcslen(lpwszGuildName));
if(lpwszMasterName)
_wcscpy(Packet.wszMasterName, _countof(Packet.wszMasterName), lpwszMasterName, (int)wcslen(lpwszMasterName));
Packet.nGuildLevel = nGuildLevel;
Packet.nMemberSize = nMemberSize;
Packet.nGuildSize = nGuildSize;
if(GuildRewardItem)
memcpy( Packet.GuildRewardItem, GuildRewardItem, sizeof(Packet.GuildRewardItem) );
m_pSession->AddSendData(SC_GUILD, eGuild::SC_PLAYER_REQUEST_GUILDINFO, reinterpret_cast<char*>(&Packet), sizeof(SCPlayerGuildInfo));
}
void CDNUserSendManager::SendPvPVillageToLobby()
{
if( !m_pSession ) return;
m_pSession->AddSendData( SC_SYSTEM, eSystem::SC_MOVE_PVPVILLAGETOLOBBY, NULL, 0 );
}
void CDNUserSendManager::SendPvPCreateRoom( const short nRetCode, const UINT uiPvPIndex/*=0*/, const CSPVP_CREATEROOM* pPacket/*=NULL*/ )
{
if( !m_pSession )
return;
SCPVP_CREATEROOM TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nRetCode = nRetCode;
int nSize = sizeof(TxPacket.nRetCode);
if( nRetCode == ERROR_NONE )
{
TxPacket.uiPvPIndex = uiPvPIndex;
memcpy( &TxPacket.sCSPVP_CREATEROOM, pPacket, sizeof(CSPVP_CREATEROOM)-sizeof(TxPacket.sCSPVP_CREATEROOM.wszBuf)+sizeof(WCHAR)*(pPacket->cRoomNameLen+pPacket->cRoomPWLen) );
nSize += sizeof(UINT);
nSize += sizeof(CSPVP_CREATEROOM)-sizeof(TxPacket.sCSPVP_CREATEROOM.wszBuf)+sizeof(WCHAR)*(pPacket->cRoomNameLen+pPacket->cRoomPWLen);
}
m_pSession->AddSendData( SC_PVP, ePvP::SC_CREATEROOM, reinterpret_cast<char*>(&TxPacket), nSize );
}
void CDNUserSendManager::SendPvPModifyRoom( const short nRetCode, const CSPVP_MODIFYROOM* pPacket/*=NULL*/ )
{
if( !m_pSession )
return;
SCPVP_MODIFYROOM TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nRetCode = nRetCode;
int nSize = sizeof(TxPacket.nRetCode);
if( nRetCode == ERROR_NONE )
{
int iDummySize = sizeof(CSPVP_MODIFYROOM)-sizeof(TxPacket.sCSPVP_MODIFYROOM.sCSPVP_CREATEROOM.wszBuf)+sizeof(WCHAR)*(pPacket->sCSPVP_CREATEROOM.cRoomNameLen+pPacket->sCSPVP_CREATEROOM.cRoomPWLen);
memcpy( &TxPacket.sCSPVP_MODIFYROOM, pPacket, iDummySize );
nSize += iDummySize;
}
m_pSession->AddSendData( SC_PVP, ePvP::SC_MODIFYROOM, reinterpret_cast<char*>(&TxPacket), nSize );
}
void CDNUserSendManager::SendPvPLeaveRoom( const short nRetCode, PvPCommon::LeaveType::eLeaveType Type, const UINT uiLeaveUserSessionID )
{
if( !m_pSession )
return;
SCPVP_LEAVEROOM TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nRetCode = nRetCode;
TxPacket.uiLeaveUserSessionID = uiLeaveUserSessionID;
TxPacket.eType = Type;
m_pSession->AddSendData( SC_PVP, ePvP::SC_LEAVEROOM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#if defined(_VILLAGESERVER)
void CDNUserSendManager::SendPvPRoomList( const short nRetCode )
{
if( !m_pSession )
return;
SCPVP_ROOMLIST TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nRetCode = nRetCode;
TxPacket.cRoomCount = 0;
TxPacket.uiMaxPage = 0;
WCHAR* pBufferOffset = TxPacket.RoomInfoList.wszBuffer;
int iSize = static_cast<int>(sizeof(TxPacket)-sizeof(TxPacket.RoomInfoList.wszBuffer)+(sizeof(WCHAR)*(pBufferOffset-TxPacket.RoomInfoList.wszBuffer)) );
m_pSession->AddSendData( SC_PVP, ePvP::SC_ROOMLIST, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNUserSendManager::SendPvPRoomList( const short nRetCode, std::vector<CDNPvPRoom*>& vPvPRoom, const UINT uiMaxPage )
{
if( !m_pSession )
return;
SCPVP_ROOMLIST TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nRetCode = nRetCode;
TxPacket.cRoomCount = static_cast<BYTE>( vPvPRoom.size() );
TxPacket.uiMaxPage = uiMaxPage;
WCHAR* pBufferOffset = TxPacket.RoomInfoList.wszBuffer;
for( UINT i=0 ; i<vPvPRoom.size() ; ++i )
pBufferOffset = vPvPRoom[i]->MakeRoomInfoList( this, &TxPacket.RoomInfoList, i, pBufferOffset );
int iSize = static_cast<int>(sizeof(TxPacket)-sizeof(TxPacket.RoomInfoList.wszBuffer)+(sizeof(WCHAR)*(pBufferOffset-TxPacket.RoomInfoList.wszBuffer)) );
m_pSession->AddSendData( SC_PVP, ePvP::SC_ROOMLIST, reinterpret_cast<char*>(&TxPacket), iSize );
}
#if defined(PRE_ADD_PVP_VILLAGE_ACCESS)
void CDNUserSendManager::SendPvPRoomList( SCPVP_ROOMLIST* pPacket, int nSize)
{
if( !m_pSession )
return;
m_pSession->AddSendData( SC_PVP, ePvP::SC_ROOMLIST, reinterpret_cast<char*>(pPacket), nSize);
}
#endif
void CDNUserSendManager::SendPvPWaitUserList( const short nRetCode )
{
if( !m_pSession )
return;
SCPVP_WAITUSERLIST TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nRetCode = nRetCode;
m_pSession->AddSendData( SC_PVP, ePvP::SC_WAITUSERLIST, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket.nRetCode) );
}
void CDNUserSendManager::SendPvPWaitUserList( const short nRetCode, std::vector<CDNUserSession*>& vUserList, const UINT uiMaxPage )
{
if( !m_pSession )
return;
SCPVP_WAITUSERLIST TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nRetCode = nRetCode;
TxPacket.cUserCount = static_cast<BYTE>(vUserList.size());
TxPacket.unMaxPage = static_cast<USHORT>(uiMaxPage);
for( UINT i=0 ; i<vUserList.size() ; ++i )
{
TxPacket.Repository.WaitUserList[i].cPvPLevel = vUserList[i]->GetPvPData()->cLevel;
TxPacket.Repository.WaitUserList[i].cJob = vUserList[i]->GetUserJob();
TxPacket.Repository.WaitUserList[i].cLevel = vUserList[i]->GetLevel();
#ifdef PRE_ADD_COLOSSEUM_BEGINNER
TxPacket.Repository.WaitUserList[i].cType = vUserList[i]->GetPvPChannelType();
#endif //#ifdef PRE_ADD_COLOSSEUM_BEGINNER
_wcscpy( TxPacket.Repository.WaitUserList[i].wszCharName, _countof(TxPacket.Repository.WaitUserList[i].wszCharName),
vUserList[i]->GetCharacterName(), (int)wcslen(vUserList[i]->GetCharacterName()) );
}
int iSize = static_cast<int>(sizeof(TxPacket)-sizeof(TxPacket.Repository)+(sizeof(TxPacket.Repository.WaitUserList[0])*TxPacket.cUserCount ));
m_pSession->AddSendData( SC_PVP, ePvP::SC_WAITUSERLIST, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNUserSendManager::SendPvPJoinRoom( const short nRetCode, CDNPvPRoom* pPvPRoom/*=NULL*/ )
{
if( !m_pSession )
return;
SCPVP_JOINROOM TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nRetCode = nRetCode;
int iSize = sizeof(short);
if( nRetCode == ERROR_NONE )
{
if( pPvPRoom )
{
if( !pPvPRoom->bMakeJoinRoom( &TxPacket, iSize ) )
{
_DANGER_POINT();
return;
}
#if 0
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"<22><><EFBFBD><EFBFBD>ȣ:%d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%s PvP<76><20><><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>ϴ<EFBFBD>.", pPvPRoom->GetIndex(), pPvPRoom->GetRoomName() );
SendDebugChat( wszBuf );
WCHAR* pwOffset = TxPacket.UserInfoList.wszBuffer;
for( BYTE i=0 ; i<TxPacket.cUserCount ; ++i )
{
WCHAR wszCharName[NAMELENMAX];
memset( wszCharName, 0, NAMELENMAX*sizeof(WCHAR) );
wcsncpy( wszCharName, pwOffset, TxPacket.UserInfoList.cCharacterNameLen[i] );
pwOffset += TxPacket.UserInfoList.cCharacterNameLen[i];
wsprintf( wszBuf, L"[%d] ij<><C4B3><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>:%s Ready:%d", i+1, wszCharName, TxPacket.UserInfoList.cReady[i] );
SendDebugChat( wszBuf );
}
#endif
}
else
_DANGER_POINT();
}
m_pSession->AddSendData( SC_PVP, ePvP::SC_JOINROOM, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNUserSendManager::SendPvPStart( const short nRetCode )
{
if( !m_pSession )
return;
SCPVP_START TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nRetCode = nRetCode;
m_pSession->AddSendData( SC_PVP, ePvP::SC_START, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendPvPChangeTeam( const short nRetCode )
{
if( !m_pSession )
return;
SCPVP_CHANGETEAM TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nRetCode = nRetCode;
m_pSession->AddSendData( SC_PVP, ePvP::SC_CHANGETEAM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendPvPRoomInfo( MAVIPVP_ROOMINFO* pPacket )
{
if( !m_pSession )
return;
SCPVP_ROOMINFO TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.uiIndex = pPacket->uiIndex;
TxPacket.uiWinCondition = pPacket->uiWinCondition;
TxPacket.uiGameModeTableID = pPacket->uiGameModeTableID;
TxPacket.uiPlayTimeSec = pPacket->uiPlayTimeSec;
TxPacket.cMaxUser = pPacket->cMaxUser;
TxPacket.bIsGuildWar = pPacket->bIsGuildWar;
#if defined( PRE_PVP_GAMBLEROOM )
TxPacket.cGambleType = pPacket->cGambleType;
TxPacket.nGamblePrice = pPacket->nGamblePrice;
#endif
m_pSession->AddSendData( SC_PVP, ePvP::SC_ROOMINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#endif
void CDNUserSendManager::SendPvPData( const TPvPGroup& PvP )
{
if( !m_pSession )
return;
SCPvPInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
memcpy( &TxPacket.PvP, &PvP, sizeof(TPvPGroup) );
m_pSession->AddSendData( SC_CHAR, eChar::SC_PVPDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendPvPMemberIndex(USHORT nTeam, BYTE cCount, const TSwapMemberIndex * pIndex, int nRetCode)
{
if( !m_pSession ) return;
SCPvPMemberIndex packet;
memset(&packet, 0, sizeof(SCPvPMemberIndex));
packet.nTeam = nTeam;
packet.nRetCode = nRetCode;
if(pIndex)
{
packet.cCount = cCount;
memcpy(packet.Index, pIndex, sizeof(packet.Index));
}
m_pSession->AddSendData( SC_PVP, ePvP::SC_PVP_MEMBERINDEX, reinterpret_cast<char*>(&packet), sizeof(packet) - sizeof(packet.Index) +(sizeof(TSwapMemberIndex) * cCount) );
}
void CDNUserSendManager::SendPvPGuildWarMemberGrade(UINT uiUserState, UINT nSessionID, int nRetCode)
{
if( !m_pSession ) return;
SCPvPMemberGrade packet;
memset(&packet, 0, sizeof(SCPvPMemberGrade));
packet.nRetCode = nRetCode;
packet.uiUserState = uiUserState;
packet.nSessionID = nSessionID;
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_MEMBERGRADE, reinterpret_cast<char*>(&packet), sizeof(packet));
}
void CDNUserSendManager::SendPvPTryAcquirePoint(int nAreaID, int nRetCode)
{
if( !m_pSession ) return;
SCPvPTryAcquirePoint packet;
memset(&packet, 0, sizeof(SCPvPTryAcquirePoint));
packet.nAreaID = nAreaID;
packet.nRetCode = nRetCode;
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_TRYACQUIREPOINT, reinterpret_cast<char*>(&packet), sizeof(packet));
}
void CDNUserSendManager::SendPvPTryAcquireSkill(int nSkillID, int nLevel, int nRetCode)
{
if(m_pSession == NULL) return;
SCPvPTryAcquireSkill packet;
memset(&packet, 0, sizeof(SCPvPTryAcquireSkill));
packet.nSkillID = nSkillID;
packet.nLevel = nLevel;
packet.nRetCode = nRetCode;
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_TRYACQUIRESKILL, reinterpret_cast<char*>(&packet), sizeof(packet));
}
void CDNUserSendManager::SendPvPInitSkill(int nRetCode)
{
if(m_pSession == NULL) return;
SCPvPInitSkill packet;
memset(&packet, 0, sizeof(SCPvPInitSkill));
packet.nRetCode = nRetCode;
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_INITSKILL, reinterpret_cast<char*>(&packet), sizeof(packet));
}
void CDNUserSendManager::SendPvPUseSkill(UINT nSessionID, int nSkillID, int nRetCode)
{
if(m_pSession == NULL) return;
SCPvPUseSkill packet;
memset(&packet, 0, sizeof(SCPvPUseSkill));
packet.nSessionID = nSessionID;
packet.nSkillID = nSkillID;
packet.nRetCode = nRetCode;
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_USESKILL, reinterpret_cast<char*>(&packet), sizeof(packet));
}
void CDNUserSendManager::SendPvPSwapSkillIndex(char cFrom, char cTo, int nRetCode)
{
if(m_pSession == NULL) return;
SCPvPSwapSkillIndex packet;
memset(&packet, 0, sizeof(SCPvPSwapSkillIndex));
packet.cFrom = cFrom;
packet.cTo = cTo;
packet.nRetCode = nRetCode;
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_SWAPSKILLINDEX, reinterpret_cast<char*>(&packet), sizeof(packet));
}
void CDNUserSendManager::SendPvPUserState(UINT nSessionID, UINT uiUserState)
{
if(m_pSession == NULL) return;
SCPVP_USERSTATE TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.uiSessionID = nSessionID;
TxPacket.uiUserState = uiUserState;
m_pSession->AddSendData(SC_PVP, ePvP::SC_USERSTATE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
#if defined(_GAMESERVER) ||(defined(_WINDOWS) && !defined(_LAUNCHER))
void CDNUserSendManager::SendGuildWarConcentrateOrder(UINT nSessionID, EtVector3 vPosition)
{
SCConcentrateOrder packet;
memset(&packet, 0, sizeof(SCConcentrateOrder));
packet.nSessionID = nSessionID;
packet.vPosition = vPosition;
m_pSession->AddSendData( SC_PVP, ePvP::SC_CONCENTRATE_ORDER, reinterpret_cast<char*>(&packet), sizeof(SCConcentrateOrder) );
}
#endif
void CDNUserSendManager::SendPvPAllKillGroupCaptain( UINT uiGroupCaptainSessionID )
{
SCPVP_ALLKILL_GROUPCAPTAIN TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.uiGroupCaptainSessionID = uiGroupCaptainSessionID;
m_pSession->AddSendData( SC_PVP, ePvP::SC_PVP_ALLKILL_GROUPCAPTAIN, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendPvPAllKillActiveActor( UINT uiActiveActorSessionID )
{
SCPVP_ALLKILL_ACTIVEPLAYER TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.uiActivePlayerSessionID = uiActiveActorSessionID;
m_pSession->AddSendData( SC_PVP, ePvP::SC_PVP_ALLKILL_ACTIVEPLAYER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#if defined(PRE_ADD_PVP_TOURNAMENT)
void CDNUserSendManager::SendPvPSwapTournamentIndex(int nRetCode, char cSourceIndex, char cDestIndex)
{
SCPvPSwapTournamentIndex TxPacket;
memset(&TxPacket, 0, sizeof(TxPacket));
TxPacket.nRetCode = nRetCode;
TxPacket.cSourceIndex = cSourceIndex;
TxPacket.cDestIndex = cDestIndex;
m_pSession->AddSendData( SC_PVP, ePvP::SC_PVP_SWAP_TOURNAMENT_INDEX, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#endif // #if defined(PRE_ADD_PVP_TOURNAMENT)
#if defined(PRE_ADD_QUICK_PVP)
void CDNUserSendManager::SendQuickPvPInvite(UINT nSenderSessionID)
{
SCQuickPvPInvite packet;
packet.nSenderSessionID = nSenderSessionID;
m_pSession->AddSendData( SC_PVP, ePvP::SC_QUICKPVP_INVITE, reinterpret_cast<char*>(&packet), sizeof(SCQuickPvPInvite));
}
void CDNUserSendManager::SendQuickPvPResult(int nResult)
{
SCQuickPvPResult packet;
packet.nResult = nResult;
m_pSession->AddSendData( SC_PVP, ePvP::SC_QUICKPVP_RESULT, reinterpret_cast<char*>(&packet), sizeof(SCQuickPvPInvite));
}
#endif //#if defined(PRE_ADD_QUICK_PVP)
#if defined(PRE_ADD_PVP_VILLAGE_ACCESS)
void CDNUserSendManager::SendPvPListOpenUI(int nResult, int nLimitLevel)
{
SCPvPListOpenUI packet;
packet.nResult = nResult;
packet.nLimitLevel = nLimitLevel;
m_pSession->AddSendData( SC_PVP, ePvP::SC_PVP_LIST_OPEN_UI, reinterpret_cast<char*>(&packet), sizeof(SCPvPListOpenUI));
}
#endif
void CDNUserSendManager::SendLadderEnterChannel( int iRet, LadderSystem::MatchType::eCode Type )
{
LadderSystem::SC_ENTER_CHANNEL TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.MatchType = Type;
m_pSession->AddSendData( SC_PVP, ePvP::SC_ENTER_LADDERCHANNEL, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] ä<><C3A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ret:%d MatchType:%d", iRet, Type );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendLadderLeaveChannel( int iRet )
{
LadderSystem::SC_LEAVE_CHANNEL TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
m_pSession->AddSendData( SC_PVP, ePvP::SC_LEAVE_LADDERCHANNEL, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] ä<><C3A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ret:%d", iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendLadderMatching( int iRet, bool bIsCancel )
{
LadderSystem::SC_LADDER_MATCHING TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.bIsCancel = bIsCancel;
m_pSession->AddSendData( SC_PVP, ePvP::SC_LADDER_MATCHING, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] %s<><73>û<EFBFBD><C3BB><EFBFBD><EFBFBD> Ret:%d", bIsCancel ? L"<EFBFBD><EFBFBD>Ī<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" : L"<EFBFBD><EFBFBD>Ī", iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendLadderNotifyLeaveUser( INT64 biCharDBID, const WCHAR* pwszCharName, LadderSystem::Reason::eCode Type )
{
LadderSystem::SC_NOTIFY_LEAVEUSER TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.biCharDBID = biCharDBID;
TxPacket.Reason = Type;
m_pSession->AddSendData( SC_PVP, ePvP::SC_LADDER_NOTIFY_LEAVEUSER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] ä<><C3A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CharName:%s CharDBID:%I64d", pwszCharName, biCharDBID );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendLadderNotifyJoinUser( INT64 biCharDBID, const WCHAR* pwszCharName, int iGradePoint, BYTE cJobID )
{
LadderSystem::SC_NOTIFY_JOINUSER TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.sUserInfo.biCharDBID = biCharDBID;
TxPacket.sUserInfo.iGradePoint = iGradePoint;
TxPacket.sUserInfo.cJob = cJobID;
_wcscpy( TxPacket.sUserInfo.wszCharName, _countof(TxPacket.sUserInfo.wszCharName), pwszCharName, (int)wcslen(pwszCharName) );
m_pSession->AddSendData( SC_PVP, ePvP::SC_LADDER_NOTIFY_JOINUSER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] ä<><C3A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CharName:%s CharDBID:%I64d GradePoint:%d", TxPacket.sUserInfo.wszCharName, TxPacket.sUserInfo.biCharDBID, TxPacket.sUserInfo.iGradePoint );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendLadderNotifyLeader( const WCHAR* pwszCharName )
{
LadderSystem::SC_NOTIFY_LEADER TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
_wcscpy( TxPacket.wszLeaderName, _countof(TxPacket.wszLeaderName), pwszCharName, (int)wcslen(pwszCharName) );
m_pSession->AddSendData( SC_PVP, ePvP::SC_LADDER_NOTIFY_LEADER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] <20><><EFBFBD><EFBFBD><E5BAAF> CharName:%s", pwszCharName );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendLadderNotifyRoomState( LadderSystem::RoomState::eCode State, LadderSystem::RoomStateReason::eCode Reason )
{
LadderSystem::SC_NOTIFY_ROOMSTATE TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.State = State;
TxPacket.Reason = Reason;
m_pSession->AddSendData( SC_PVP, ePvP::SC_LADDER_NOTIFY_ROOMSTATE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] ChangeRoomState RoomState:%d Reason=%d", State, Reason );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
#if defined( _VILLAGESERVER )
void CDNUserSendManager::SendLadderPlayingRoomList( int iRet, const std::vector<LadderSystem::CRoom*>& vRoomList/*=std::vector<LadderSystem::CRoom>()*/, UINT uiMaxPage/*=0*/ )
{
LadderSystem::SC_PLAYING_ROOMLIST TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = sizeof(TxPacket)-sizeof(TxPacket.wszCharName);
TxPacket.iRet = iRet;
TxPacket.unMaxPage = static_cast<USHORT>(uiMaxPage);
if( iRet == ERROR_NONE )
{
for( UINT i=0 ; i<vRoomList.size() ; ++i )
{
if( TxPacket.unNameCount >= _countof(TxPacket.wszCharName) )
{
_ASSERT(0);
break;
}
if( vRoomList[i]->bIsValidUserInfo() == false )
{
_ASSERT(0);
continue;
}
LadderSystem::CRoom* pOpponentRoom = LadderSystem::CManager::GetInstance().GetRoomPtr( vRoomList[i]->GetOpponentRoomIndex() );
if( pOpponentRoom == NULL )
{
_ASSERT(0);
continue;
}
if( pOpponentRoom->bIsValidUserInfo() == false )
{
_ASSERT(0);
continue;
}
if( LadderSystem::CManager::GetInstance().bIsValidPairRoom( vRoomList[i]->GetRoomIndex(), pOpponentRoom->GetRoomIndex() ) == false )
{
_ASSERT(0);
continue;
}
#if defined(PRE_ADD_DWC)
for( int j=0 ; j< LadderSystem::GetNeedTeamCount(vRoomList[i]->GetMatchType()) ; ++j )
#else
for( int j=0 ; j<vRoomList[i]->GetMatchType() ; ++j )
#endif
{
TxPacket.cJob[TxPacket.unNameCount] = vRoomList[i]->GetUserInfo()[j].cJob;
USHORT unNameCount = TxPacket.unNameCount;
_wcscpy( TxPacket.wszCharName[unNameCount], _countof(TxPacket.wszCharName[unNameCount]),
vRoomList[i]->GetUserInfo()[j].wszCharName, (int)wcslen(vRoomList[i]->GetUserInfo()[j].wszCharName) );
TxPacket.unNameCount++;
}
#if defined(PRE_ADD_DWC)
for( int j=0 ; j< LadderSystem::GetNeedTeamCount(pOpponentRoom->GetMatchType()) ; ++j )
#else
for( int j=0 ; j<pOpponentRoom->GetMatchType() ; ++j )
#endif
{
TxPacket.cJob[TxPacket.unNameCount] = pOpponentRoom->GetUserInfo()[j].cJob;
USHORT unNameCount = TxPacket.unNameCount;
_wcscpy( TxPacket.wszCharName[unNameCount], _countof(TxPacket.wszCharName[unNameCount]),
pOpponentRoom->GetUserInfo()[j].wszCharName, (int)wcslen(pOpponentRoom->GetUserInfo()[j].wszCharName) );
TxPacket.unNameCount++;
}
}
}
iSize += (TxPacket.unNameCount*sizeof(TxPacket.cJob[0]));
iSize += (TxPacket.unNameCount*sizeof(TxPacket.wszCharName[0]));
m_pSession->AddSendData( SC_PVP, ePvP::SC_LADDER_PLAYING_ROOMLIST, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] PlayingRoomList Ret:%d MaxPage:%d NameCount:%d", iRet, TxPacket.unMaxPage, TxPacket.unNameCount );
m_pSession->SendDebugChat( wszBuf );
for( int i=0 ; i<TxPacket.unNameCount ; ++i )
m_pSession->SendDebugChat( TxPacket.wszCharName[i] );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendLadderObserver( int iRet )
{
LadderSystem::SC_OBSERVER TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
m_pSession->AddSendData( SC_PVP, ePvP::SC_LADDER_OBSERVER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[LADDER] SC_LADDER_OBSERVER Ret:%d", iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
#endif // #if defined( _VILLAGESERVER )
void CDNUserSendManager::SendOccupationModeState(int nState)
{
SCPvPOccupationModeState packet;
memset(&packet, 0, sizeof(SCPvPOccupationModeState));
packet.nState = nState;
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_OCCUPATION_MODESTATE, reinterpret_cast<char*>(&packet), sizeof(packet));
}
void CDNUserSendManager::SendOccupationState(BYTE cCount, const PvPCommon::OccupationStateInfo * pInfo)
{
if(pInfo == NULL)
{
_DANGER_POINT();
return;
}
SCPvPOccupationState packet;
memset(&packet, 0, sizeof(SCPvPOccupationState));
packet.cCount = cCount;
for (int i = 0; i < cCount || i < PARTYMAX; i++)
{
packet.Info[i].nAreaID = pInfo[i].nAreaID;
packet.Info[i].nOccupationState = pInfo[i].nOccupationState;
packet.Info[i].nOwnedUniqueID = pInfo[i].nOwnedUniqueID;
packet.Info[i].nOwnedTemID = pInfo[i].nOwnedTemID;
packet.Info[i].nTryUniqueID = pInfo[i].nTryUniqueID;
packet.Info[i].nTryTeamID = pInfo[i].nTryTeamID;
packet.Info[i].nMoveWaitUniqueID = pInfo[i].nMoveWaitUniqueID;
packet.Info[i].nMoveWaitTeamID = pInfo[i].nMoveWaitTeamID;
}
m_pSession->AddSendData( SC_PVP, ePvP::SC_PVP_OCCUPATION_POINTSTATE, reinterpret_cast<char*>(&packet), sizeof(packet) - sizeof(packet.Info) +(sizeof(PvPCommon::OccupationStateInfo) * cCount) );
}
void CDNUserSendManager::SendOccupationTeamState(int nTeam, int nResource, int nResourceSum)
{
SCPvPOccupationTeamState packet;
memset(&packet, 0, sizeof(SCPvPOccupationTeamState));
packet.nTeam = nTeam;
packet.nResource = nResource;
packet.nResourceSum = nResourceSum;
m_pSession->AddSendData( SC_PVP, ePvP::SC_PVP_OCCUPATION_TEAMSTATE, reinterpret_cast<char*>(&packet), sizeof(packet) );
}
void CDNUserSendManager::SendOccupationSkillState(const PvPCommon::OccupationSkillSlotInfo * pInfo)
{
if(pInfo == NULL)
return;
SCPvPOccupationSkillState packet;
memset(&packet, 0, sizeof(SCPvPOccupationSkillState));
memcpy_s(&packet.Info, sizeof(SCPvPOccupationSkillState), pInfo, sizeof(PvPCommon::OccupationSkillSlotInfo));
m_pSession->AddSendData( SC_PVP, ePvP::SC_PVP_OCCUPATION_SKILLSTATE, reinterpret_cast<char*>(&packet), sizeof(packet) );
}
void CDNUserSendManager::SendOccupationClimaxMode()
{
m_pSession->AddSendData( SC_PVP, ePvP::SC_PVP_CLIMAXMODE, NULL, 0);
}
#if defined(PRE_ADD_REVENGE)
void CDNUserSendManager::SendPvPSetRevengeTarget( UINT uiSessionID, UINT uiRevengeTargetSessionID, Revenge::TargetReason::eCode eReason )
{
SCPvPSetRevengeTarget packet;
packet.uiSessionID = uiSessionID;
packet.uiRevengeTargetSessionID = uiRevengeTargetSessionID;
packet.eReason = eReason;
m_pSession->AddSendData( SC_PVP, ePvP::SC_PVP_SET_REVENGE_TARGET, reinterpret_cast<char*>(&packet), sizeof(packet) );
}
#endif
void CDNUserSendManager::SendTriggerCallAction( int nSectorIndex, int nTriggerIndex, int nRandomSeed )
{
SCTriggerCallAction packet;
packet.wSectorIndex = (short)nSectorIndex;
packet.wObjectIndex = (short)nTriggerIndex;
packet.nRandomSeed = nRandomSeed;
m_pSession->AddSendData(SC_TRIGGER, eTrigger::SC_TRIGGER_CALLACTION, (char*)&packet, sizeof(SCTriggerCallAction));
}
void CDNUserSendManager::SendTriggerChangeMyBGM( int nBGM, int nFadeDelta )
{
SCChangeMyBGM packet;
packet.nBGM = nBGM;
packet.nFadeDelta = nFadeDelta;
packet.nSessionID = m_pSession->GetSessionID();
m_pSession->AddSendData(SC_TRIGGER, eTrigger::SC_CHANGE_MY_BGM, (char*)&packet, sizeof(SCChangeMyBGM));
}
void CDNUserSendManager::SendTriggerFileTableBGMOff()
{
SCFileTableBGMOff packet;
packet.nSessionID = m_pSession->GetSessionID();
m_pSession->AddSendData( SC_TRIGGER, eTrigger::SC_FILE_TABLE_BGM_OFF, (char*)&packet, sizeof(SCFileTableBGMOff) );
}
void CDNUserSendManager::SendTriggerRadioImage( UINT nSessionID, int nFileID, DWORD nTime )
{
SCRadioImage packet;
memset(&packet, 0, sizeof(packet));
packet.nSessionID = nSessionID;
packet.nFileID = nFileID;
packet.nTime = nTime;
m_pSession->AddSendData(SC_TRIGGER, eTrigger::SC_RADIO_IMAGE, (char*)&packet, sizeof(SCRadioImage));
}
void CDNUserSendManager::SendTriggerForceEnableRide( const UINT nSessionID, const bool bForceEnableRide )
{
SCForceEnableRide packet;
memset( &packet, 0, sizeof(packet) );
packet.nSessionID = nSessionID;
packet.bForceEnableRide = bForceEnableRide;
m_pSession->AddSendData(SC_TRIGGER, eTrigger::SC_TRIGGER_FORCE_ENABLE_RIDE, (char*)&packet, sizeof(SCForceEnableRide));
}
void CDNUserSendManager::SendVoiceChatInfo(char *pIp, USHORT wControlPort, USHORT wAudioPort, UINT m_nAccountDBID)
{
SCVoiceChatInfo Info = { 0, };
_strcpy(Info.szVoiceChatIp, _countof(Info.szVoiceChatIp), pIp, (int)strlen(pIp));
Info.wControlPort = wControlPort;
Info.wAudioPort = wAudioPort;
Info.nAccountDBID = m_nAccountDBID;
m_pSession->AddSendData(SC_VOICECHAT, eVoiceChat::SC_VOICECHATINFO, (char*)&Info, sizeof(SCVoiceChatInfo));
}
void CDNUserSendManager::SendTalkingUpdate(int nCount, TTalkingInfo * pInfo)
{
SCTalkingInfo packet;
memset(&packet, 0, sizeof(SCTalkingInfo));
packet.cCount = (BYTE)nCount;
memcpy(packet.Talking, pInfo, sizeof(TTalkingInfo) * nCount);
m_pSession->AddSendData(SC_VOICECHAT, eVoiceChat::SC_TALKINGINFO, (char*)&packet, sizeof(SCTalkingInfo) - sizeof(packet.Talking) +(sizeof(TTalkingInfo) * packet.cCount));
}
void CDNUserSendManager::SendVoiceMemberInfoRefresh(int nCount, UINT * pMuteSessionList, TVoiceMemberInfo * pInfo)
{
SCVoiceMemberInfo packet;
memset(&packet, 0, sizeof(SCVoiceMemberInfo));
packet.cCount = (BYTE)nCount;
memcpy(packet.Info, pInfo, sizeof(TVoiceMemberInfo) * nCount);
memcpy(packet.nVoiceMutedList, pMuteSessionList, sizeof(packet.nVoiceMutedList));
m_pSession->AddSendData(SC_VOICECHAT, eVoiceChat::SC_VOICEMEMBERINFO, (char*)&packet, sizeof(SCVoiceMemberInfo) - sizeof(packet.Info) +(sizeof(TVoiceMemberInfo) * packet.cCount));
}
#if defined( PRE_USA_FATIGUE )
void CDNUserSendManager::SendChannelInfoFatigueInfo()
{
SCChannelInfoFatigueInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iFatigueExpValue = g_pDataManager->GetFatigueExpRate();
TxPacket.iNoFatigueExpValue = g_pDataManager->GetNoFatigueExpRate();
m_pSession->AddSendData(SC_ETC, eEtc::SC_CHANNELINFO_FATIGUEINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#endif // #if defined( PRE_USA_FATIGUE )
void CDNUserSendManager::SendIsolateResult(int nRetCode)
{
SCIsolateResult packet;
memset(&packet, 0, sizeof(packet));
packet.nRetCode = nRetCode;
m_pSession->AddSendData(SC_ISOLATE, eIsolate::SC_ISOLATE_RESULT, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendIsolateList(SCIsolateList * pPacket, int nSize)
{
m_pSession->AddSendData(SC_ISOLATE, eIsolate::SC_ISOLATE_LIST, (char*)pPacket, sizeof(SCIsolateList) - sizeof(pPacket->wszIsolateName) + nSize);
}
void CDNUserSendManager::SendIsolateAdd(const WCHAR * pAddIsolateName)
{
SCIsolateAdd packet;
memset(&packet, 0, sizeof(packet));
_wcscpy(packet.wszIsolateName, _countof(packet.wszIsolateName), pAddIsolateName, (int)wcslen(pAddIsolateName));
m_pSession->AddSendData(SC_ISOLATE, eIsolate::SC_ISOLATE_ADD, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendIsolateDel(std::vector <std::wstring> * vList)
{
SCIsolateDelete packet;
memset(&packet, 0, sizeof(SCIsolateDelete));
int nSize = 0;
std::vector <std::wstring>::iterator ii;
for(ii = vList->begin(); ii != vList->end(); ii++)
{
packet.cNameLen[packet.cCount] = (BYTE)wcslen((*ii).c_str());
wmemcpy_s( packet.wszIsolateName+nSize, _countof(packet.wszIsolateName)-nSize, (*ii).c_str(), packet.cNameLen[packet.cCount]);
nSize += packet.cNameLen[packet.cCount];
packet.cCount++;
}
nSize = nSize * sizeof(WCHAR);
m_pSession->AddSendData(SC_ISOLATE, eIsolate::SC_ISOLATE_DELETE, (char*)&packet, sizeof(packet) - sizeof(packet.wszIsolateName) + nSize);
}
void CDNUserSendManager::SendIsolateDel(const WCHAR * pDelIsolateName)
{
if(pDelIsolateName == NULL) return;
SCIsolateDelete packet;
memset(&packet, 0, sizeof(SCIsolateDelete));
_wcscpy(packet.wszIsolateName, _countof(packet.wszIsolateName), pDelIsolateName, (int)wcslen(pDelIsolateName));
packet.cNameLen[0] = (BYTE)wcslen(pDelIsolateName);
packet.cCount = 1;
m_pSession->AddSendData(SC_ISOLATE, eIsolate::SC_ISOLATE_DELETE, (char*)&packet, sizeof(packet) - sizeof(packet.wszIsolateName) +(packet.cNameLen[0] * sizeof(WCHAR)));
}
void CDNUserSendManager::SendMissionList(int nScore, char *pGain, char *pAchieve, short *pLastUpdate)
{
SCMissionList packet;
memset(&packet, 0, sizeof(packet));
packet.nMissionScore = nScore;
memcpy(packet.cGain, pGain, MISSIONMAX_BITSIZE);
memcpy(packet.cAchieve, pAchieve, MISSIONMAX_BITSIZE);
memcpy(packet.wLastUpdate, pLastUpdate, sizeof(short)*LASTMISSIONACHIEVEMAX);
/*
int nOffset;
for( int i=0; i<MISSIONMAX_BITSIZE; i++ ) {
nOffset = i * 8;
packet.cGain[i] = ((pGain[nOffset+0]<<7)&0xFF ) |((pGain[nOffset+1]<<6)&0xFF ) |
((pGain[nOffset+2]<<5)&0xFF ) |((pGain[nOffset+3]<<4)&0xFF ) |
((pGain[nOffset+4]<<3)&0xFF ) |((pGain[nOffset+5]<<2)&0xFF ) |
((pGain[nOffset+6]<<1)&0xFF ) |( pGain[nOffset+7]&0xFF );
packet.cAchieve[i] = ((pAchieve[nOffset+0]<<7)&0xFF ) |((pAchieve[nOffset+1]<<6)&0xFF ) |
((pAchieve[nOffset+2]<<5)&0xFF ) |((pAchieve[nOffset+3]<<4)&0xFF ) |
((pAchieve[nOffset+4]<<3)&0xFF ) |((pAchieve[nOffset+5]<<2)&0xFF ) |
((pAchieve[nOffset+6]<<1)&0xFF ) |( pAchieve[nOffset+7]&0xFF );
}
*/
m_pSession->AddSendData(SC_MISSION, eMission::SC_MISSION_LIST, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendMissionGain( int nArrayIndex )
{
SCMissionGain packet;
memset(&packet, 0, sizeof(packet));
packet.nArrayIndex = nArrayIndex;
m_pSession->AddSendData(SC_MISSION, eMission::SC_GAIN_MISSION, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendMissionAchieve( int nArrayIndex )
{
SCMissionAchieve packet;
memset(&packet, 0, sizeof(packet));
packet.nArrayIndex = nArrayIndex;
m_pSession->AddSendData(SC_MISSION, eMission::SC_ACHIEVE_MISSION, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendDailyMissionList( char cType, TDailyMission *pMission )
{
SCDailyMissionList packet;
memset(&packet, 0, sizeof(packet));
packet.cType = cType;
int nCountMax = 0;
switch( cType )
{
case 0: nCountMax = DAILYMISSIONMAX; break;
case 1: nCountMax = WEEKLYMISSIONMAX; break;
case 2: nCountMax = GUILDWARMISSIONMAX; break;
case 4: nCountMax = GUILDCOMMONMISSIONMAX; break;
case 5: nCountMax = WEEKENDEVENTMISSIONMAX; break;
case 6: nCountMax = WEEKENDREPEATMISSIONMAX; break;
#if defined(PRE_ADD_MONTHLY_MISSION)
case 7: nCountMax = MONTHLYMISSIONMAX; break;
#endif // #if defined(PRE_ADD_MONTHLY_MISSION)
}
int nCount = 0;
for( int i=0; i<nCountMax; i++ ) {
if( pMission[i].nMissionID > 0 ){
nCount++;
}
};
packet.nCount = nCount;
if(nCount > 0)
memcpy( packet.Mission, pMission, sizeof(TDailyMission) * nCount );
m_pSession->AddSendData(SC_MISSION, eMission::SC_DAILYMISSION_LIST, (char*)&packet, sizeof(SCDailyMissionList) - sizeof(packet.Mission) +( sizeof(TDailyMission) * nCount ));
}
void CDNUserSendManager::SendDailyMissionCount( char cType, int nArrayIndex, int nCount )
{
SCDailyMissionCount packet;
memset(&packet, 0, sizeof(packet));
packet.cType = cType;
packet.nArrayIndex = nArrayIndex;
packet.nCount = nCount;
m_pSession->AddSendData(SC_MISSION, eMission::SC_COUNT_DAILYMISSION, (char*)&packet, sizeof(SCDailyMissionCount));
}
void CDNUserSendManager::SendDailyMissionAchieve( char cType, int nArrayIndex, bool bSecret/*=false*/)
{
SCDailyMissionAchieve packet;
memset(&packet, 0, sizeof(packet));
packet.cType = cType;
packet.nArrayIndex = nArrayIndex;
packet.bSecret = bSecret;
m_pSession->AddSendData(SC_MISSION, eMission::SC_ACHIEVE_DAILYMISSION, (char*)&packet, sizeof(SCDailyMissionAchieve));
}
void CDNUserSendManager::SendDailyMissionAlarm( char cType )
{
SCDailyMissionAlarm packet;
memset(&packet, 0, sizeof(packet));
packet.cType = cType;
m_pSession->AddSendData(SC_MISSION, eMission::SC_ALARM_DAILYMISSION, (char*)&packet, sizeof(SCDailyMissionAlarm));
}
// Event
void CDNUserSendManager::SendMissionEventPopUp( int nArrayIndex )
{
DNTableFileFormat* pSox = GetDNTable( CDnTableDB::TMISSION );
if(!pSox)
{
g_Log.Log( LogType::_FILELOG, L"MissionTable.ext failed\r\n");
return;
}
SCMissionEventPopUp packet;
memset(&packet, 0, sizeof(packet));
// <20>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> PopUpTable<6C><65><EFBFBD><EFBFBD> <20><><EFBFBD>ڵ带 ã<><C3A3> <20><> <20>ֵ<EFBFBD><D6B5><EFBFBD> <20>Ѵ<EFBFBD>.
packet.nItemID = pSox->GetItemID(nArrayIndex);
m_pSession->AddSendData(SC_MISSION, eMission::SC_EVENT_POPUP, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendMissionHelpAlarm( int nArrayIndex )
{
DNTableFileFormat* pSox = GetDNTable( CDnTableDB::TMISSION );
if(!pSox)
{
g_Log.Log( LogType::_FILELOG, L"MissionTable.ext failed\r\n");
return;
}
SCMissionHelpAlarm packet;
memset(&packet, 0, sizeof(packet));
// <20>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> PopUpTable<6C><65><EFBFBD><EFBFBD> <20><><EFBFBD>ڵ带 ã<><C3A3> <20><> <20>ֵ<EFBFBD><D6B5><EFBFBD> <20>Ѵ<EFBFBD>.
packet.nItemID = pSox->GetItemID(nArrayIndex);
m_pSession->AddSendData(SC_MISSION, eMission::SC_HELP_ALARM, (char*)&packet, sizeof(packet));
}
#if defined(PRE_ADD_ACTIVEMISSION)
void CDNUserSendManager::SendActiveMissionGain( int nIndex )
{
SCActiveMissionGain packet;
memset(&packet, 0, sizeof(packet));
packet.nIndex = nIndex;
m_pSession->AddSendData(SC_MISSION, eMission::SC_GAIN_ACTIVE_MISSION, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendActiveMissionAchieve( int nIndex )
{
SCActiveMissionAchieve packet;
memset(&packet, 0, sizeof(packet));
packet.nIndex = nIndex;
m_pSession->AddSendData(SC_MISSION, eMission::SC_ACHIEVE_ACTIVE_MISSION, (char*)&packet, sizeof(packet));
}
#endif
void CDNUserSendManager::SendAppellationList( char *pGain )
{
SCAppellationList packet;
memset(&packet, 0, sizeof(packet));
memcpy( packet.cGain, pGain, APPELLATIONMAX_BITSIZE );
m_pSession->AddSendData(SC_APPELLATION, eAppellation::SC_APPELLATION_LIST, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendAppellationGain( int nArrayIndex )
{
SCAppellationGain packet;
memset( &packet, 0, sizeof(packet) );
packet.nArrayIndex = nArrayIndex;
m_pSession->AddSendData(SC_APPELLATION, eAppellation::SC_GAIN_APPELLATION, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendAppellationTime( BYTE nCount, TAppellationTime *AppellationTIme)
{
if(nCount == 0) return;
SCPeriodAppellationTIme PeriodAppellation;
memset(&PeriodAppellation, 0, sizeof(SCPeriodAppellationTIme));
if(AppellationTIme){
PeriodAppellation.cPeriodCount = nCount;
memcpy(PeriodAppellation.AppellationTime, AppellationTIme, sizeof(TAppellationTime) * PeriodAppellation.cPeriodCount);
}
int nSize = sizeof(SCPeriodAppellationTIme) - sizeof(PeriodAppellation.AppellationTime) +(sizeof(TAppellationTime) * PeriodAppellation.cPeriodCount);
m_pSession->AddSendData( SC_APPELLATION, eAppellation::SC_PERIOD_APPELLATION, (char*)&PeriodAppellation, nSize );
}
void CDNUserSendManager::SendResetPcbangAppellation()
{
m_pSession->AddSendData(SC_APPELLATION, eAppellation::SC_RESET_PCBANGAPPELLATION, NULL, 0);
}
void CDNUserSendManager::SendGameOption(UINT nSessionID, const TGameOptions * pOption, TPARTYID PartyID)
{
SCGameOptionCommOption packet;
memset(&packet, 0, sizeof(packet));
packet.nSessionID = nSessionID;
memcpy_s(packet.cCommunityOption, sizeof(packet.cCommunityOption), pOption->cCommunityOption, sizeof(pOption->cCommunityOption));
packet.PartyID = PartyID;
m_pSession->AddSendData(SC_GAMEOPTION, eGameOption::SC_GAMEOPTION_USERCOMMOPTION, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendGameOptionRefreshNotifier()
{
SCGameOptionRefreshNotifier TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
for( UINT i=0 ; i<DNNotifier::RegisterCount::Total ; ++i )
{
TxPacket.data[i] = m_pSession->m_NotifierRepository.GetData(i);
}
m_pSession->AddSendData( SC_GAMEOPTION, eGameOption::SC_GAMEOPTION_REFRESH_NOTIFIER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendSecondAuthInfo( bool bPW, bool bLock )
{
SCGameOptionNotifySecondAuthInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.bIsSetSecondAuthPW = bPW;
TxPacket.bIsSetSecondAuthLock = bLock;
TxPacket.tSecondAuthResetDate = -1;
m_pSession->AddSendData( SC_GAMEOPTION, eGameOption::SC_NOTIFY_SECONDAUTHINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendMaxLevelCharacterCount( int iCount )
{
SCMaxLevelCharacterCount TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iCount = iCount;
m_pSession->AddSendData(SC_CHAR, eChar::SC_MAXLEVEL_CHARACTER_COUNT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD>:%d", iCount );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendSecondAuthValidate( int nRet, int nAuthCheckType, BYTE cFailCount )
{
SCGameOptionValidateSecondAuth TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nRet = nRet;
TxPacket.nAuthCheckType = nAuthCheckType;
TxPacket.cFailCount = cFailCount;
m_pSession->AddSendData( SC_GAMEOPTION, eGameOption::SC_GAMEOPTION_VALIDATE_SECONDAUTH, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendProfile( TProfile & profile )
{
SCGameOptionGetProfile TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
memcpy_s(&TxPacket.sProfile, sizeof(TxPacket.sProfile), &profile, sizeof(profile) );
m_pSession->AddSendData( SC_GAMEOPTION, eGameOption::SC_GAMEOPTION_GET_PROFILE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendDisplayProfile( int nSessionID, TProfile & profile )
{
SCGameOptionDisplayProfile TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.nSessionID = nSessionID;
memcpy_s(&TxPacket.sProfile, sizeof(TxPacket.sProfile), &profile, sizeof(profile) );
m_pSession->AddSendData( SC_GAMEOPTION, eGameOption::SC_GAMEOPTION_DISPLAY_PROFILE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendSelectAppellation( int nArrayIndex, int nCoverArrayIndex )
{
SCSelectAppellation packet;
memset(&packet, 0, sizeof(packet));
packet.nArrayIndex = nArrayIndex;
packet.nCoverArrayIndex = nCoverArrayIndex;
m_pSession->AddSendData(SC_APPELLATION, eAppellation::SC_SELECT_APPELLATION, (char*)&packet, sizeof(packet));
#if defined(_GAMESERVER)
m_pSession->GetGameRoom()->OnDispatchMessage( m_pSession, SC_APPELLATION, eAppellation::SC_SELECT_APPELLATION, (char*)&packet, (int)sizeof(packet), 0 );
#endif
}
void CDNUserSendManager::SendChangeAppellation( UINT nSessionID, int nArrayIndex, int nCoverArrayIndex )
{
SCChangeAppellation packet;
memset(&packet, 0, sizeof(packet));
packet.nSessionID = nSessionID;
packet.nArrayIndex = nArrayIndex;
packet.nCoverArrayIndex = nCoverArrayIndex;
m_pSession->AddSendData(SC_APPELLATION, eAppellation::SC_CHANGE_APPELLATION, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendDecreaseDurabilityInventory( const int iValue )
{
SCDecreaseDurabilityInventory TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cType = 0;
TxPacket.nAbsolute = iValue;
m_pSession->AddSendData( SC_ITEM, eItem::SC_DECREASE_DURABILITY_INVENTORY, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendDecreaseDurabilityInventory( const float fValue )
{
SCDecreaseDurabilityInventory TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cType = 1;
TxPacket.fRatio = fValue;
m_pSession->AddSendData( SC_ITEM, eItem::SC_DECREASE_DURABILITY_INVENTORY, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendRestrinatList(TRestraintData * pRestraint)
{
SCRestraintList packet;
memset(&packet, 0, sizeof(packet));
for (int i = 0; i < RESTRAINTMAX; i++)
{
if(pRestraint->Restraint[i].nRestraintKey <= 0) continue;
memcpy(&packet.restraint[i], &pRestraint->Restraint[i], sizeof(TRestraint));
packet.cCount++;
}
m_pSession->AddSendData(SC_RESTRAINT, eRestraint::SC_RESTRAINTLIST, (char*)&packet, sizeof(packet) - sizeof(packet.restraint) +(sizeof(TRestraint) * packet.cCount));
}
void CDNUserSendManager::SendRestraint(TRestraint * pRestraint)
{
SCRestraintAdd packet;
memset(&packet, 0, sizeof(SCRestraintAdd));
memcpy(&packet.Restraint, pRestraint, sizeof(TRestraint));
m_pSession->AddSendData(SC_RESTRAINT, eRestraint::SC_RESTRAINTADD, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendRestraintDel(UINT nRestraintKey)
{
SCRestraintDel packet;
memset(&packet, 0, sizeof(SCRestraintDel));
packet.nRestraintKey = nRestraintKey;
m_pSession->AddSendData(SC_RESTRAINT, eRestraint::SC_RESTRAINTDEL, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendRestraintRetCode(short nRetCode)
{
SCRestraintRet packet;
memset(&packet, 0, sizeof(SCRestraintRet));
packet.nRestraintRet = nRetCode;
m_pSession->AddSendData(SC_RESTRAINT, eRestraint::SC_RESTRAINTRETCODE, (char*)&packet, sizeof(packet));
}
// CashShop
void CDNUserSendManager::SendCashShopBalanceInquiry(int nRet, int nPetal, int nCash)
{
SCCashShopBalanceInquiry CashShop;
memset(&CashShop, 0, sizeof(SCCashShopBalanceInquiry));
CashShop.nRet = nRet;
CashShop.nCash = nCash;
CashShop.nPetal = nPetal;
#if defined(_US)
CashShop.nNxAPrepaid = m_pSession->GetNxAPrepaid();
CashShop.nNxACredit = m_pSession->GetNxACredit();
#endif // #if defined(_US)
#if defined( PRE_ADD_NEW_MONEY_SEED )
CashShop.nSeed = m_pSession->GetSeedPoint();
#endif
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_BALANCEINQUIRY, (char*)&CashShop, sizeof(SCCashShopBalanceInquiry));
}
void CDNUserSendManager::SendCashShopOpen(UINT nCash, int nReserve, int nRet, WCHAR *pAccountName)
{
SCCashShopOpen CashShop;
memset(&CashShop, 0, sizeof(SCCashShopOpen));
#if defined(_US)
CashShop.nNxAPrepaid = m_pSession->GetNxAPrepaid();
CashShop.nNxACredit = m_pSession->GetNxACredit();
#endif // #if defined(_US)
CashShop.nCashAmount = nCash;
CashShop.nReserveAmount = nReserve;
CashShop.nRet = nRet;
#if defined( PRE_ADD_NEW_MONEY_SEED )
CashShop.nSeedAmount = m_pSession->GetSeedPoint();
#endif
if(pAccountName) _wcscpy(CashShop.wszAccountName, _countof(CashShop.wszAccountName), pAccountName, (int)wcslen(pAccountName));
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_SHOPOPEN, (char*)&CashShop, sizeof(SCCashShopOpen));
}
void CDNUserSendManager::SendCashShopClose(int nRet)
{
SCCashShopClose CashShop;
memset(&CashShop, 0, sizeof(SCCashShopClose));
CashShop.nRet = nRet;
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_SHOPCLOSE, (char*)&CashShop, sizeof(SCCashShopClose));
}
void CDNUserSendManager::SendCashShopBuy(UINT nCash, int nReserve, int nRet, char cType, char cCount, TCashShopInfo *CashShopArray, TPaymentItemInfo* pPaymentItem/* = NULL*/, int nNxAPrepaid/* = 0*/, int nNxACredit/* = 0*/, INT64 nSeedPoint/*=0*/)
{
SCCashShopBuy CashShop;
memset(&CashShop, 0, sizeof(SCCashShopBuy));
#if defined(_US)
CashShop.nNxAPrepaid = nNxAPrepaid;
CashShop.nNxACredit = nNxACredit;
#endif // #if defined(_US)
CashShop.nCashAmount = nCash;
CashShop.nReserveAmount = nReserve;
CashShop.nRet = nRet;
CashShop.cType = cType;
#if defined( PRE_ADD_NEW_MONEY_SEED )
CashShop.nSeedAmount = nSeedPoint;
#endif
#if defined(PRE_ADD_CASH_REFUND)
if( pPaymentItem )
memcpy(&CashShop.ItemList, pPaymentItem, sizeof(CashShop.ItemList));
#endif
if(CashShopArray){
CashShop.cCount = cCount;
switch(CashShop.cType)
{
case 3:
case 7:
if(CashShop.cCount > PREVIEWCARTLISTMAX) CashShop.cCount = PREVIEWCARTLISTMAX;
break;
default:
if(CashShop.cCount > CARTLISTMAX) CashShop.cCount = CARTLISTMAX;
break;
}
memcpy(CashShop.BuyList, CashShopArray, sizeof(TCashShopInfo) * CashShop.cCount);
}
int nLen = sizeof(SCCashShopBuy) - sizeof(CashShop.BuyList) +(sizeof(TCashShopInfo) * CashShop.cCount);
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_BUY, (char*)&CashShop, nLen);
}
void CDNUserSendManager::SendCashShopPackageBuy(int nPackageSN, int nCash, int nReserve, int nRet, const TPaymentPackageItemInfo* pPaymentPackageItem/* = NULL*/, int nNxAPrepaid/* = 0*/, int nNxACredit/* = 0*/, INT64 nSeedPoint/*=0*/)
{
SCCashShopPackageBuy CashShop;
memset(&CashShop, 0, sizeof(SCCashShopPackageBuy));
#if defined(_US)
CashShop.nNxAPrepaid = nNxAPrepaid;
CashShop.nNxACredit = nNxACredit;
#endif // #if defined(_US)
CashShop.nPackageSN = nPackageSN;
CashShop.nCashAmount = nCash;
CashShop.nReserveAmount = nReserve;
#if defined( PRE_ADD_NEW_MONEY_SEED )
CashShop.nSeedAmount = nSeedPoint;
#endif
CashShop.nRet = nRet;
#if defined(PRE_ADD_CASH_REFUND)
if( pPaymentPackageItem )
memcpy(&CashShop.PackageItem, pPaymentPackageItem, sizeof(TPaymentPackageItemInfo));
#endif
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_PACKAGEBUY, (char*)&CashShop, sizeof(SCCashShopPackageBuy));
}
#if defined(PRE_ADD_CASH_REFUND)
void CDNUserSendManager::SendCashShopMoveCashinven( INT64 biDBID, int nRet, int nReservePetal, INT64 nSeedPoint )
{
SCMoveCashInven CashShop;
memset(&CashShop, 0, sizeof(SCMoveCashInven));
CashShop.biDBID = biDBID;
CashShop.nRet = nRet;
CashShop.nReserveAmount = nReservePetal;
#if defined( PRE_ADD_NEW_MONEY_SEED )
CashShop.nSeedAmount = nSeedPoint;
#endif
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_MOVE_CASHINVEN, (char*)&CashShop, sizeof(SCMoveCashInven));
}
void CDNUserSendManager::SendCashShopCashRefund( INT64 biDBID, int nRet, int nCashAmount)
{
SCCashRefund CashShop;
memset(&CashShop, 0, sizeof(SCCashRefund));
CashShop.biDBID = biDBID;
CashShop.nRet = nRet;
CashShop.nCashAmount = nCashAmount;
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_CASH_REFUND, (char*)&CashShop, sizeof(SCCashRefund));
}
#endif
void CDNUserSendManager::SendCashShopCheckReceiver(BYTE cLevel, BYTE cJob, int nRet)
{
SCCashShopCheckReceiver CashShop;
memset(&CashShop, 0, sizeof(SCCashShopCheckReceiver));
CashShop.cLevel = cLevel;
CashShop.cJob = cJob;
CashShop.nRet = nRet;
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_CHECKRECEIVER, (char*)&CashShop, sizeof(SCCashShopCheckReceiver));
}
#if defined(PRE_ADD_CADGE_CASH)
void CDNUserSendManager::SendCashShopCadge(int nRet)
{
SCCashShopCadge CashShop;
CashShop.nRet = nRet;
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_CADGE, (char*)&CashShop, sizeof(SCCashShopCadge));
}
#endif // #if defined(PRE_ADD_CADGE_CASH)
void CDNUserSendManager::SendCashShopGift(int nCash, int nReserve, int nRet, char cType, int nCount, TCashShopInfo *GiftList, int nNxAPrepaid/* = 0*/, int nNxACredit/* = 0*/, INT64 nSeedPoint/*=0*/)
{
SCCashShopGift CashShop;
memset(&CashShop, 0, sizeof(SCCashShopGift));
CashShop.nCashAmount = nCash;
CashShop.nReserveAmount = nReserve;
CashShop.nRet = nRet;
CashShop.cType = cType;
#if defined(_US)
CashShop.nNxAPrepaid = nNxAPrepaid;
CashShop.nNxACredit = nNxACredit;
#endif // #if defined(_US)
#if defined( PRE_ADD_NEW_MONEY_SEED )
CashShop.nSeedAmount = nSeedPoint;
#endif
if(GiftList){
CashShop.cCount = nCount;
switch(CashShop.cType)
{
case 3:
case 7:
if(CashShop.cCount > PREVIEWCARTLISTMAX) CashShop.cCount = PREVIEWCARTLISTMAX;
break;
default:
if(CashShop.cCount > CARTLISTMAX) CashShop.cCount = CARTLISTMAX;
break;
}
memcpy(CashShop.GiftList, GiftList, sizeof(TCashShopInfo) * CashShop.cCount);
}
int nLen = sizeof(SCCashShopGift) - sizeof(CashShop.GiftList) +(sizeof(TCashShopInfo) * CashShop.cCount);
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_GIFT, (char*)&CashShop, nLen);
}
void CDNUserSendManager::SendCashShopPackageGift(int nPackageSN, int nCash, int nReserve, int nRet, int nNxAPrepaid/* = 0*/, int nNxACredit/* = 0*/, INT64 nSeedPoint/*=0*/)
{
SCCashShopPackageGift CashShop;
memset(&CashShop, 0, sizeof(SCCashShopPackageGift));
CashShop.nPackageSN = nPackageSN;
CashShop.nCashAmount = nCash;
CashShop.nReserveAmount = nReserve;
#if defined( PRE_ADD_NEW_MONEY_SEED )
CashShop.nSeedAmount = nSeedPoint;
#endif
CashShop.nRet = nRet;
#if defined(_US)
CashShop.nNxAPrepaid = nNxAPrepaid;
CashShop.nNxACredit = nNxACredit;
#endif // #if defined(_US)
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_PACKAGEGIFT, (char*)&CashShop, sizeof(SCCashShopPackageGift));
}
void CDNUserSendManager::SendCashShopGiftList(int nRet, int nCount, TGiftInfo *GiftInfoArray)
{
SCCashShopGiftList CashShop;
memset(&CashShop, 0, sizeof(SCCashShopGiftList));
CashShop.nRet = nRet;
CashShop.cCount = nCount;
if(GiftInfoArray) memcpy(CashShop.GiftInfo, GiftInfoArray, nCount * sizeof(TGiftInfo));
int nLen = sizeof(SCCashShopGiftList) - sizeof(CashShop.GiftInfo) + (nCount * sizeof(TGiftInfo));
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_GIFTLIST, (char*)&CashShop, nLen);
}
void CDNUserSendManager::SendCashShopReceiveGift(INT64 nGiftDBID, int nRet)
{
SCCashShopReceiveGift CashShop;
memset(&CashShop, 0, sizeof(SCCashShopReceiveGift));
CashShop.nGiftDBID = (int)nGiftDBID;
CashShop.nRet = nRet;
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_RECEIVEGIFT, (char*)&CashShop, sizeof(SCCashShopReceiveGift));
}
void CDNUserSendManager::SendCashShopReceiveGiftAll(std::vector<INT64> &VecGiftDBIDList, int nRet)
{
SCCashShopReceiveGiftAll CashShop;
memset(&CashShop, 0, sizeof(SCCashShopReceiveGiftAll));
for (int i = 0; i < (int)VecGiftDBIDList.size(); i++){
CashShop.nGiftDBID[CashShop.cCount] = VecGiftDBIDList[i];
CashShop.cCount++;
}
CashShop.nRet = nRet;
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_RECEIVEGIFTALL, (char*)&CashShop, sizeof(SCCashShopReceiveGiftAll));
}
#if defined(PRE_ADD_GIFT_RETURN)
void CDNUserSendManager::SendCashShopGiftReturn(INT64 nGiftDBID, int nRet)
{
SCCashShopGiftReturn CashShop;
memset(&CashShop, 0, sizeof(SCCashShopGiftReturn));
CashShop.nGiftDBID = (int)nGiftDBID;
CashShop.nRet = nRet;
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_GIFTRETURN, (char*)&CashShop, sizeof(SCCashShopGiftReturn));
}
#endif
void CDNUserSendManager::SendCashshopNotifyGift(bool bNew, int nGiftCount)
{
SCNotifyGift CashShop;
CashShop.bNew = bNew;
CashShop.nGiftCount = nGiftCount;
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_NOTIFYGIFT, (char*)&CashShop, sizeof(SCNotifyGift));
}
void CDNUserSendManager::SendCoupon(int nRet)
{
SCCashShopCoupon CashShop;
CashShop.nRet = nRet;
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_COUPON, (char*)&CashShop, sizeof(SCCashShopCoupon));
}
#if defined(PRE_ADD_VIP)
void CDNUserSendManager::SendVIPBuy(UINT nCashAmount, int nReserveAmount, int nRet, int nVIPPoint, __time64_t tEndDate, bool bAutoPay, INT64 nSeedPoint)
{
SCVIPBuy Result;
Result.nCashAmount = nCashAmount;
Result.nReserveAmount = nReserveAmount;
#if defined( PRE_ADD_NEW_MONEY_SEED )
Result.nSeedAmount = nSeedPoint;
#endif
Result.nRet = nRet;
Result.nVIPPoint = nVIPPoint;
Result.tVIPExpirationDate = tEndDate;
Result.bAutoPay = bAutoPay;
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_VIPBUY, (char*)&Result, sizeof(SCVIPBuy));
}
void CDNUserSendManager::SendVIPGift(UINT nCashAmount, int nReserveAmount, int nRet, INT64 nSeedPoint)
{
SCVIPGift Result;
Result.nCashAmount = nCashAmount;
Result.nReserveAmount = nReserveAmount;
#if defined( PRE_ADD_NEW_MONEY_SEED )
Result.nSeedAmount = nSeedPoint;
#endif
Result.nRet = nRet;
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_VIPGIFT, (char*)&Result, sizeof(SCVIPGift));
}
void CDNUserSendManager::SendVIPInfo(int nVIPPoint, __time64_t tEndDate, bool bAutoPay, bool bVIP)
{
SCVIPInfo Result;
Result.bVIP = bVIP;
Result.nVIPPoint = nVIPPoint;
Result.tVIPExpirationDate = tEndDate;
Result.bAutoPay = bAutoPay;
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_VIPINFO, (char*)&Result, sizeof(SCVIPInfo));
}
#endif // #if defined(PRE_ADD_VIP)
void CDNUserSendManager::SendSaleAbortList(BYTE cCount, int *nAbortList)
{
SCSaleAbortList Result;
memset(&Result, 0, sizeof(SCSaleAbortList));
Result.cCount = cCount;
memcpy(Result.nAbortList, nAbortList, sizeof(int) * Result.cCount);
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_SALEABORTLIST, (char*)&Result, sizeof(SCSaleAbortList) - sizeof(nAbortList) +(sizeof(int) * Result.cCount));
}
void CDNUserSendManager::SendCashShopServerTimeForCharge(__time64_t tTime)
{
SCCashShopChargeTime Result;
memset(&Result, 0, sizeof(SCCashShopChargeTime));
Result.tTime = tTime;
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_CHARGE_TIME, (char*)&Result, sizeof(SCCashShopChargeTime));
}
#ifdef PRE_ADD_LIMITED_CASHITEM
void CDNUserSendManager::SendQuantityLimitedItemList(std::vector<LimitedCashItem::TLimitedQuantityCashItem> &vList)
{
SCQuantityLimitedItem packet;
memset(&packet, 0, sizeof(SCQuantityLimitedItem));
for (int i = 0; i < (int)vList.size(); i++)
{
packet.Limited[packet.cCount++] = vList[i];
if (packet.cCount >= LimitedCashItem::Common::DefaultPacketCount)
{
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_LIMITEDCASHITEM, (char*)&packet, sizeof(SCQuantityLimitedItem) - sizeof(packet.Limited) + \
(sizeof(LimitedCashItem::TLimitedQuantityCashItem) * packet.cCount));
memset(&packet, 0, sizeof(SCQuantityLimitedItem));
}
}
packet.cIsLast = 1;
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_LIMITEDCASHITEM, (char*)&packet, sizeof(SCQuantityLimitedItem) - sizeof(packet.Limited) + \
(sizeof(LimitedCashItem::TLimitedQuantityCashItem) * packet.cCount));
}
void CDNUserSendManager::SendChangedQuantityItemList(std::vector<LimitedCashItem::TChangedLimitedQuantity> &vList)
{
SCChangedQuantityLimitedItem packet;
memset(&packet, 0, sizeof(SCChangedQuantityLimitedItem));
for (int i = 0; i < (int)vList.size(); i++)
{
packet.Changed[packet.cCount++] = vList[i];
if (packet.cCount >= LimitedCashItem::Common::DefaultPacketCount)
break;
}
m_pSession->AddSendData(SC_CASHSHOP, eCashShop::SC_CHANGEDLIMITEDCASHITEM, (char*)&packet, sizeof(SCChangedQuantityLimitedItem) - sizeof(packet.Changed) + \
(sizeof(LimitedCashItem::TChangedLimitedQuantity) * packet.cCount));
}
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
void CDNUserSendManager::SendZeroPopulation(bool bZero)
{
SCZeroPopulation packet;
memset(&packet, 0, sizeof(packet));
packet.bZeroPopulation = bZero;
m_pSession->AddSendData(SC_SYSTEM, eSystem::SC_ZEROPOPULATION, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendChatRoomCreateChatRoom( int nRet, TChatRoomView & RoomView )
{
SCCreateChatRoom CreateChatRoom;
CreateChatRoom.nRet = nRet;
CreateChatRoom.ChatRoomView.Set( RoomView.m_nChatRoomID, RoomView.m_wszChatRoomName, RoomView.m_nChatRoomType, RoomView.m_bHasPassword,
RoomView.m_wszChatRoomPRLine1, RoomView.m_wszChatRoomPRLine2, RoomView.m_wszChatRoomPRLine3 );
m_pSession->AddSendData( SC_CHATROOM, eChatRoom::SC_CREATECHATROOM, reinterpret_cast<char*>(&CreateChatRoom), sizeof(CreateChatRoom));
}
void CDNUserSendManager::SendChatRoomEnterRoom( int nRet, int nLeaderSID, int * pUserSIDs, USHORT nUserCount )
{
SCChatRoomEnterRoom EnterRoom;
EnterRoom.nRet = nRet;
EnterRoom.LeaderSID = nLeaderSID;
USHORT nCount = min( nUserCount, CHATROOMMAX );
for( int i=0; i<nCount; i++ )
EnterRoom.UserSessionIDs[i] = pUserSIDs[i];
m_pSession->AddSendData( SC_CHATROOM, eChatRoom::SC_ENTERCHATROOM, reinterpret_cast<char*>(&EnterRoom), sizeof(EnterRoom));
}
void CDNUserSendManager::SendChatRoomEnterUser( UINT nChatRoomID, BYTE cChatRoomType, int nUserSessionID)
{
SCChatRoomEnterUser EnterUser;
EnterUser.nChatRoomID = nChatRoomID;
EnterUser.cChatRoomType = cChatRoomType;
EnterUser.nUserSessionID = nUserSessionID;
m_pSession->AddSendData( SC_CHATROOM, eChatRoom::SC_ENTERUSERCHATROOM, reinterpret_cast<char*>(&EnterUser), sizeof(EnterUser));
}
void CDNUserSendManager::SendChatRoomChangeRoomOption( int nRet, TChatRoomView & RoomView )
{
SCChatRoomChangeRoomOption ChangeRoomOption;
ChangeRoomOption.nRet = nRet;
ChangeRoomOption.ChatRoomView.Set( RoomView );
m_pSession->AddSendData( SC_CHATROOM, eChatRoom::SC_CHANGEROOMOPTION, reinterpret_cast<char*>(&ChangeRoomOption), sizeof(ChangeRoomOption));
}
void CDNUserSendManager::SendChatRoomKickUser( int nRet, int UserSessionID )
{
SCChatRoomKickUser KickUser;
KickUser.nRet = nRet;
KickUser.nKickedSessionID = UserSessionID;
m_pSession->AddSendData( SC_CHATROOM, eChatRoom::SC_KICKUSER, reinterpret_cast<char*>(&KickUser), sizeof(KickUser));
}
void CDNUserSendManager::SendChatRoomLeaveUser( int UserSessionID, BYTE nLeaveReason )
{
SCChatRoomLeaveUser LeaveUser;
LeaveUser.nUserSessionID = UserSessionID;
LeaveUser.nLeaveReason = nLeaveReason;
m_pSession->AddSendData( SC_CHATROOM, eChatRoom::SC_LEAVEUSER, reinterpret_cast<char*>(&LeaveUser), sizeof(LeaveUser));
}
void CDNUserSendManager::SendChatRoomView( int SessionID, TChatRoomView & RoomView )
{
SCChatRoomView ChatRoomView;
ChatRoomView.nSessionID = SessionID;
ChatRoomView.ChatRoomView.Set( RoomView );
m_pSession->AddSendData( SC_CHATROOM, eChatRoom::SC_CHATROOMVIEW, reinterpret_cast<char*>(&ChatRoomView), sizeof(ChatRoomView));
}
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
void CDNUserSendManager::SendReputationList( std::vector<TNpcReputation>& vData )
{
SCReputationList TxPacket;
if( vData.empty() )
{
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = sizeof(TxPacket)-sizeof(TxPacket.ReputationArr);
m_pSession->AddSendData( SC_REPUTATION, eReputation::SC_REPUTATIONLIST, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
m_pSession->SendDebugChat( L"<EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" );
#endif // #if defined( _WORK )
return;
}
for( UINT i=0 ; i<vData.size() ; i+=_countof(TxPacket.ReputationArr) )
{
memset( &TxPacket, 0, sizeof(TxPacket) );
if( vData.size()-i > _countof(TxPacket.ReputationArr) )
TxPacket.cCount = _countof(TxPacket.ReputationArr);
else
TxPacket.cCount = static_cast<BYTE>(vData.size()-i);
for( UINT j=0 ; j<TxPacket.cCount ; ++j )
{
TxPacket.ReputationArr[j] = vData[i+j];
}
int iSize = sizeof(TxPacket)-sizeof(TxPacket.ReputationArr)+(sizeof(TNpcReputation)*TxPacket.cCount);
m_pSession->AddSendData( SC_REPUTATION, eReputation::SC_REPUTATIONLIST, reinterpret_cast<char*>(&TxPacket), iSize );
}
#if defined( _WORK )
for( UINT i=0 ; i<vData.size() ; ++i )
{
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[NPC:%d] <20><><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD>Ʈ Favor:%d Malice:%d", vData[i].iNpcID, vData[i].iFavorPoint, vData[i].iMalicePoint );
m_pSession->SendDebugChat( wszBuf );
}
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendModReputation( std::vector<TNpcReputation>& vData )
{
SCModReputation TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cCount = static_cast<BYTE>(vData.size());
for( UINT i=0 ; i<TxPacket.cCount ; ++i )
TxPacket.UpdateArr[i] = vData[i];
int iSize = sizeof(TxPacket)-sizeof(TxPacket.UpdateArr)+(sizeof(TxPacket.UpdateArr[0])*TxPacket.cCount);
m_pSession->AddSendData( SC_REPUTATION, eReputation::SC_MODREPUTATION, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
for( UINT i=0 ; i<vData.size() ; ++i )
{
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[NPC:%d] <20><><EFBFBD>Ǻ<EFBFBD><C7BA><EFBFBD> Favor:%d Malice:%d", vData[i].iNpcID, vData[i].iFavorPoint, vData[i].iMalicePoint );
m_pSession->SendDebugChat( wszBuf );
}
#endif // #if defined( _WORK )
}
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
void CDNUserSendManager::SendUnionPoint()
{
SCUnionPoint TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
for (int i=NpcReputation::UnionType::Commercial; i<NpcReputation::UnionType::Etc; i++)
TxPacket.biUnionPoint[i] = m_pSession->GetUnionReputePointInfoPtr()->GetUnionReputePoint(i);
m_pSession->AddSendData( SC_REPUTATION, eReputation::SC_UNIONPOINT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendUnionMembershipList( CDNUserItem *pItem )
{
bool bSend = false;
CTimeSet CurrentTimeSet;
SCUnionMembershipList Packet;
memset( &Packet, 0, sizeof(SCUnionMembershipList) );
for (int i=0; i<NpcReputation::UnionType::Etc; i++)
{
TUnionMembership* pMembership = pItem->GetUnionMembership(i);
if(pMembership->nItemID <=0 ) continue;
Packet.nItemID[i] = pMembership->nItemID;
CTimeSet ExpireTimeSet(pMembership->tExpireDate, true);
Packet.nLeftUseTime[i] = (int)((ExpireTimeSet-CurrentTimeSet)/60);
bSend = true;
}
if(!bSend) return;
m_pSession->AddSendData( SC_REPUTATION, eReputation::SC_UNIONMEMBERSHIPLIST, (char*)&Packet, sizeof(SCUnionMembershipList) );
}
void CDNUserSendManager::SendBuyUnionMembershipResult( TUnionMembership* pMembership )
{
SCBuyUnionMembershipResult Packet;
memset( &Packet, 0, sizeof(SCBuyUnionMembershipResult) );
Packet.cType = pMembership->cType;
Packet.nItemID = pMembership->nItemID;
CTimeSet CurrentTimeSet;
CTimeSet ExpireTimeSet(pMembership->tExpireDate, true);
Packet.nLeftUseTime = (int)((ExpireTimeSet-CurrentTimeSet)/60);
m_pSession->AddSendData( SC_REPUTATION, eReputation::SC_BUYUNIONMEMBERSHIPRESULT, (char*)&Packet, sizeof(SCBuyUnionMembershipResult) );
}
void CDNUserSendManager::SendMasterSystemSimpleInfo( TMasterSystemSimpleInfo& SimpleInfo, bool bRefresh /*= false*/)
{
MasterSystem::SCSimpleInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.SimpleInfo = SimpleInfo;
TxPacket.bRefresh = bRefresh;
int iSize = sizeof(TxPacket.SimpleInfo)-sizeof(TxPacket.SimpleInfo.OppositeInfo)+TxPacket.SimpleInfo.cCharacterDBIDCount*sizeof(TxPacket.SimpleInfo.OppositeInfo[0]);
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_SIMPLEINFO, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] SimpleInfo MasterCount:%d PupilCount:%d", TxPacket.SimpleInfo.iMasterCount, TxPacket.SimpleInfo.iPupilCount );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemCountInfo( int iMasterCount, int iPupilCount, int iClassmateCount )
{
MasterSystem::SCCountInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iMasterCount = iMasterCount;
TxPacket.iPupilCount = iPupilCount;
TxPacket.iClassmateCount = iClassmateCount;
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_COUNTINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] CountInfo MasterCount:%d PupilCount:%d ClassmateCount:%d", TxPacket.iMasterCount, TxPacket.iPupilCount, TxPacket.iClassmateCount );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemMasterList( int iRet, std::vector<TMasterInfo>& vMasterList )
{
MasterSystem::SCMasterList TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.cCount = static_cast<BYTE>(vMasterList.size());
for( UINT i=0 ; i<TxPacket.cCount ; ++i )
TxPacket.MasterInfoList[i] = vMasterList[i];
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MasterInfoList)+(TxPacket.cCount*sizeof(TxPacket.MasterInfoList[0]));
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_MASTERLIST, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] Ret:%d <20><><EFBFBD>¸<EFBFBD><C2B8><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>:%d", iRet, static_cast<int>(TxPacket.cCount) );
m_pSession->SendDebugChat( wszBuf );
if( iRet == ERROR_NONE )
{
for( UINT i=0 ; i<TxPacket.cCount ; ++i )
{
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><><EFBFBD><EFBFBD>CharDBID:%I64d Name:%s", TxPacket.MasterInfoList[i].biCharacterDBID, TxPacket.MasterInfoList[i].wszCharName );
m_pSession->SendDebugChat( wszBuf );
}
}
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemMasterCharacterInfo( int iRet, TMasterCharacterInfo* pMasterCharacterInfo/*=NULL*/ )
{
MasterSystem::SCMasterCharacterInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
if( iRet != ERROR_NONE )
{
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Err=%d", iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_MASTERCHARACTERINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket.iRet) );
return;
}
if( pMasterCharacterInfo == NULL )
{
_DANGER_POINT();
return;
}
TxPacket.MasterCharacterInfo = *pMasterCharacterInfo;
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_MASTERCHARACTERINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] Show:%d Intro:%s GraduateCount:%d RespectPoint:%d", pMasterCharacterInfo->bMasterListShowFlag, pMasterCharacterInfo->wszSelfIntroduction, pMasterCharacterInfo->iGraduateCount, pMasterCharacterInfo->iRespectPoint );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemPupilList( int iRet, INT64 biCharacterDBID, std::vector<TPupilInfo>& vPupilList )
{
MasterSystem::SCPupilList TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.biMasterCharacterDBID = biCharacterDBID;
if( iRet != ERROR_NONE )
{
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>ƮErr=%d", iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_PUPILLIST, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket.iRet)+sizeof(TxPacket.biMasterCharacterDBID) );
return;
}
TxPacket.cCount = static_cast<BYTE>(vPupilList.size());
if( TxPacket.cCount > MasterSystem::Max::PupilCount )
{
_DANGER_POINT();
TxPacket.cCount = MasterSystem::Max::PupilCount;
}
for( UINT i=0 ; i<TxPacket.cCount ; ++i )
{
TxPacket.PupilInfoList[i] = vPupilList[i];
TxPacket.PupilInfoList[i].Location = MasterSystem::CCacheRepository::GetInstance().GetLocationInfo( vPupilList[i].biCharacterDBID );
}
int iSize = sizeof(TxPacket)-sizeof(TxPacket.PupilInfoList)+TxPacket.cCount*sizeof(TxPacket.PupilInfoList[0]);
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_PUPILLIST, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>:%d", static_cast<int>(TxPacket.cCount) );
m_pSession->SendDebugChat( wszBuf );
for( UINT i=0 ; i<TxPacket.cCount ; ++i )
{
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><><EFBFBD><EFBFBD>Name:%s CharDBID:%I64d", TxPacket.PupilInfoList[i].wszCharName, TxPacket.PupilInfoList[i].biCharacterDBID );
m_pSession->SendDebugChat( wszBuf );
}
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemIntroductionOnOff( int iRet, bool bRegister, WCHAR* pwszText )
{
MasterSystem::SCIntroduction TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.bRegister = bRegister;
if( bRegister && iRet == ERROR_NONE )
_wcscpy( TxPacket.wszSelfIntroduction, _countof(TxPacket.wszSelfIntroduction), pwszText, (int)wcslen(pwszText) );
int iSize = (bRegister && iRet == ERROR_NONE) ? sizeof(TxPacket) : sizeof(TxPacket)-sizeof(TxPacket.wszSelfIntroduction);
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_INTRODUCTION_ONOFF, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] Ret:%d <20><><EFBFBD><EFBFBD>%s", iRet, bRegister ? L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" : L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemMasterApplication( int iRet )
{
MasterSystem::SCMasterApplication TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_MASTER_APPLICATION, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] Ret:%d <20><><EFBFBD>½<EFBFBD>û", iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemJoin( int iRet, bool bIsDirectMenu, bool bIsAddPupil, bool bIsTransactor )
{
MasterSystem::SCJoin TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.bIsDirectMenu = bIsDirectMenu;
TxPacket.bIsAddPupil = bIsAddPupil;
TxPacket.bIsTransactor = bIsTransactor;
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_JOIN, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] Ret:%d %s", iRet, bIsAddPupil ? L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߰<EFBFBD>" : L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߰<EFBFBD>" );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemMasterAndClassmateInfo( int iRet, std::vector<TMasterAndClassmateInfo>& vList )
{
MasterSystem::SCMasterClassmate TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
if( iRet != ERROR_NONE )
{
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><><EFBFBD><EFBFBD>&<26><><EFBFBD><EFBFBD><E2B8AE>ƮErr=%d", iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_MASTERANDCLASSMATE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket.iRet) );
return;
}
TxPacket.cCount = static_cast<BYTE>(vList.size());
if( TxPacket.cCount > _countof(TxPacket.DataList) )
{
_DANGER_POINT();
TxPacket.cCount = _countof(TxPacket.DataList);
}
for( UINT i=0 ; i<TxPacket.cCount ; ++i )
{
TxPacket.DataList[i] = vList[i];
TxPacket.DataList[i].Location = MasterSystem::CCacheRepository::GetInstance().GetLocationInfo( vList[i].biCharacterDBID );
}
int iSize = sizeof(TxPacket)-sizeof(TxPacket.DataList)+TxPacket.cCount*sizeof(TxPacket.DataList[0]);
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_MASTERANDCLASSMATE, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><><EFBFBD><EFBFBD>&<26><><EFBFBD><EFBFBD><E2B8AE>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>:%d", static_cast<int>(TxPacket.cCount) );
m_pSession->SendDebugChat( wszBuf );
for( UINT i=0 ; i<TxPacket.cCount ; ++i )
{
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] %s-Name:%s CharDBID:%I64d", (vList[i].Code==MasterSystem::MasterClassmateKind::Master) ? L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" : L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", vList[i].wszCharName, vList[i].biCharacterDBID );
m_pSession->SendDebugChat( wszBuf );
}
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemClassmateInfo( int iRet, TClassmateInfo* pClassmateInfo/*=NULL*/ )
{
#if defined( _VILLAGESERVER )
MasterSystem::SCClassmateInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = sizeof(TxPacket.iRet);
TxPacket.iRet = iRet;
if( iRet == ERROR_NONE )
{
_ASSERT( pClassmateInfo );
iSize = sizeof(TxPacket);
if( pClassmateInfo )
{
TxPacket.ClassmateInfo = *pClassmateInfo;
TxPacket.ClassmateInfo.Location = MasterSystem::CCacheRepository::GetInstance().GetLocationInfo( pClassmateInfo->biCharacterDBID );
}
}
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_CLASSMATEINFO, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ret:%d", iRet );
m_pSession->SendDebugChat( wszBuf );
if( iRet == ERROR_NONE )
{
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] CharName=%s Level=%d", TxPacket.ClassmateInfo.wszCharName, static_cast<int>(TxPacket.ClassmateInfo.cLevel) );
m_pSession->SendDebugChat( wszBuf );
for( int i=0 ; i<TxPacket.ClassmateInfo.cMasterCount ; ++i )
{
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>=%s", TxPacket.ClassmateInfo.wszMasterCharName[i] );
m_pSession->SendDebugChat( wszBuf );
}
}
#endif // #if defined( _WORK )
#endif // #if defined( _VILLAGESERVER )
}
void CDNUserSendManager::SendMasterSystemMyMasterInfo( int iRet, TMyMasterInfo* pMyMasterInfo/*=NULL*/ )
{
#if defined( _VILLAGESERVER )
MasterSystem::SCMyMasterInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = sizeof(TxPacket.iRet);
TxPacket.iRet = iRet;
if( iRet == ERROR_NONE )
{
_ASSERT( pMyMasterInfo );
iSize = sizeof(TxPacket);
if( pMyMasterInfo )
{
TxPacket.MasterInfo = *pMyMasterInfo;
TxPacket.MasterInfo.Location = MasterSystem::CCacheRepository::GetInstance().GetLocationInfo( pMyMasterInfo->biCharacterDBID );
}
}
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_MYMASTERINFO, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><><EFBFBD>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ret:%d", iRet );
m_pSession->SendDebugChat( wszBuf );
if( iRet == ERROR_NONE )
{
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] CharName=%s Level=%d", TxPacket.MasterInfo.wszCharName, static_cast<int>(TxPacket.MasterInfo.cLevel) );
m_pSession->SendDebugChat( wszBuf );
}
#endif // #if defined( _WORK )
#endif // #if defined( _VILLAGESERVER )
}
void CDNUserSendManager::SendMasterSystemLeave( int iRet, bool bIsDelPupil/*=false*/, int iPenaltyRespectPoint/*=0*/ )
{
MasterSystem::SCLeave TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
int iSize = sizeof(TxPacket.iRet);
TxPacket.iRet = iRet;
if( iRet == ERROR_NONE )
{
iSize = sizeof(TxPacket);
TxPacket.bIsDelPupil = bIsDelPupil;
TxPacket.iPenaltyRespectPoint = iPenaltyRespectPoint;
}
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_LEAVE, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
if( iRet == ERROR_NONE)
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ret=%d %s PenaltyPoint=%d", iRet, bIsDelPupil ? L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" : L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", iPenaltyRespectPoint );
else
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ret=%d", iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemGraduate( WCHAR* pwszCharName )
{
MasterSystem::SCGraduate TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
_wcscpy( TxPacket.wszCharName, _countof(TxPacket.wszCharName), pwszCharName, (int)wcslen(pwszCharName) );
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_GRADUATE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><><EFBFBD><EFBFBD> CharName:%s", TxPacket.wszCharName );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemConnect( bool bIsConnect, WCHAR* pwszCharName )
{
MasterSystem::SCConnect TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.bIsConnect = bIsConnect;
_wcscpy( TxPacket.wszCharName, _countof(TxPacket.wszCharName), pwszCharName, (int)wcslen(pwszCharName) );
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_CONNECT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] CharName:%s %s", TxPacket.wszCharName, bIsConnect ? L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>." : L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>." );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemRespectPoint( int iRespectPoint )
{
MasterSystem::SCRespectPoint TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRespectPoint = iRespectPoint;
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_RESPECTPOINT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ %d <20><><EFBFBD><EFBFBD>", iRespectPoint );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemFavorPoint( INT64 biMasterCharacterDBID, INT64 biPupilCharacterDBID, int iFavorPoint )
{
MasterSystem::SCFavorPoint TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.biMasterCharacterDBID = biMasterCharacterDBID;
TxPacket.biPupilCharacterDBID = biPupilCharacterDBID;
TxPacket.iFavorPoint = iFavorPoint;
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_FAVORPOINT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] CharDBID:%I64d-%I64d ȣ<><C8A3><EFBFBD><EFBFBD>ġ %d <20><><EFBFBD><EFBFBD>", biMasterCharacterDBID, biPupilCharacterDBID, iFavorPoint );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemInvitePupil( int iRet, WCHAR* pwszName )
{
MasterSystem::SCInvitePupil TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
_wcscpy( TxPacket.wszCharName, _countof(TxPacket.wszCharName), pwszName, (int)wcslen(pwszName) );
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_INVITE_PUPIL, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] %s <20><>û Ret:%d", pwszName, iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemInvitePupilConfirm( int iRet, WCHAR* pwszCharName )
{
MasterSystem::SCInvitePupilConfirm TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
_wcscpy( TxPacket.wszMasterCharName, _countof(TxPacket.wszMasterCharName), pwszCharName, (int)wcslen(pwszCharName) );
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_INVITE_PUPIL_CONFIRM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
if( iRet == ERROR_NONE )
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] %s <20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD><CAB4>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>.", pwszCharName );
else
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] %s <20><><EFBFBD><EFBFBD> <20>ʴ뿡<CAB4><EBBFA1>(Ret=%d)", pwszCharName, iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemJoinDirect( int iRet, WCHAR* pwszCharName )
{
MasterSystem::SCJoinDirect TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
_wcscpy( TxPacket.wszMasterCharName, _countof(TxPacket.wszMasterCharName), pwszCharName, (int)wcslen(pwszCharName) );
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_JOIN_DIRECT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
if( iRet == ERROR_MASTERSYSTEM_JOIN_DENY )
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] %s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û <20><><EFBFBD><EFBFBD>", pwszCharName );
else
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] %s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û Ret:%d", pwszCharName, iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemJoinDirectConfirm( int iRet, WCHAR* pwszCharName )
{
MasterSystem::SCJoinDirectConfirm TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
_wcscpy( TxPacket.wszPupilCharName, _countof(TxPacket.wszPupilCharName), pwszCharName, (int)wcslen(pwszCharName) );
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_JOIN_DIRECT_CONFIRM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
if( iRet == ERROR_NONE )
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] %s <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD>û <20>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>.", pwszCharName );
else
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] %s <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD>û <20><><EFBFBD><EFBFBD>(Ret=%d)", pwszCharName, iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemRecallMaster( int iRet, WCHAR* pwszCharName, bool bIsConfirm )
{
MasterSystem::SCRecallMaster TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.bIsConfirm = bIsConfirm;
_wcscpy( TxPacket.wszCharName, _countof(TxPacket.wszCharName), pwszCharName, (int)wcslen(pwszCharName) );
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_RECALL_MASTER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>] <20><>ȯ<EFBFBD><C8AF><EFBFBD><EFBFBD> Ret:%d CharName:%s Comfirm=%s", iRet, pwszCharName, bIsConfirm ? L"true" : L" false");
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendMasterSystemJoinComfirm( BYTE cLevel, BYTE cJob, WCHAR* pwszCharName )
{
MasterSystem::SCJoinComfirm TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cLevel = cLevel;
TxPacket.cJob = cJob;
_wcscpy( TxPacket.wszPupilCharName, _countof(TxPacket.wszPupilCharName), pwszCharName, (int)wcslen(pwszCharName) );
m_pSession->AddSendData( SC_MASTERSYSTEM, eMasterSystem::SC_JOIN_COMFIRM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#if defined( PRE_ADD_SECONDARY_SKILL )
void CDNUserSendManager::SendCreateSecondarySkill( int iRet, int iSkillID )
{
SecondarySkill::SCCreate TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.iSkillID = iSkillID;
m_pSession->AddSendData( SC_SECONDARYSKILL, eSecondarySkill::SC_CREATE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų] SC_CREATE Ret:%d SkillID:%d", iRet, iSkillID );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendDelSecondarySkill( int iRet, int iSkillID )
{
SecondarySkill::SCDelete TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.iSkillID = iSkillID;
m_pSession->AddSendData( SC_SECONDARYSKILL, eSecondarySkill::SC_DELETE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų] SC_DELETE Ret:%d SkillID:%d", iRet, iSkillID );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendUpdateSecondarySkillExp( int iRet, int iSkillID, SecondarySkill::Grade::eType Grade, int iExp, int iLevel )
{
SecondarySkill::SCUpdateExp TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.iSkillID = iSkillID;
TxPacket.Grade = Grade;
TxPacket.iExp = iExp;
TxPacket.iLevel = iLevel;
m_pSession->AddSendData( SC_SECONDARYSKILL, eSecondarySkill::SC_UPDATE_EXP, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų] SC_UPDATE_EXP Ret:%d SkillID:%d Grade:%d Exp:%d Level:%d", iRet, iSkillID, Grade, iExp, iLevel );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendAddSecondarySkillRecipe( int iRet, CSecondarySkillRecipe* pRecipe )
{
SecondarySkill::SCAddRecipe TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
if( TxPacket.iRet == ERROR_NONE )
{
_ASSERT( pRecipe );
TxPacket.iSkillID = pRecipe->GetSkillID();
TxPacket.iItemID = pRecipe->GetItemID();
TxPacket.biItemSerial = pRecipe->GetItemSerial();
TxPacket.nExp = pRecipe->GetExp();
m_pSession->AddSendData( SC_SECONDARYSKILL, eSecondarySkill::SC_ADD_RECIPE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų] SC_ADD_RECIPE Ret:%d SkillID:%d ItemID:%d ItemSerial:%I64d Exp=%d", iRet, TxPacket.iSkillID, TxPacket.iItemID, TxPacket.biItemSerial, TxPacket.nExp );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
else
{
_ASSERT( pRecipe == NULL );
m_pSession->AddSendData( SC_SECONDARYSKILL, eSecondarySkill::SC_ADD_RECIPE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket.iRet) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų] SC_ADD_RECIPE Failed! Ret:%d", iRet );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
}
void CDNUserSendManager::SendDeleteSecondarySkillRecipe( int iRet, int iSkillID, int iItemID )
{
SecondarySkill::SCDeleteRecipe TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.iSkillID = iSkillID;
TxPacket.iItemID = iItemID;
m_pSession->AddSendData( SC_SECONDARYSKILL, eSecondarySkill::SC_DELETE_RECIPE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų] SC_DELETE_RECIPE Ret:%d SkillID:%d ItemID:%d", iRet, iSkillID, iItemID );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendExtractSecondarySkillRecipe( int iRet, int iSkillID, int iItemID )
{
SecondarySkill::SCExtractRecipe TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.iSkillID = iSkillID;
TxPacket.iItemID = iItemID;
m_pSession->AddSendData( SC_SECONDARYSKILL, eSecondarySkill::SC_EXTRACT_RECIPE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų] SC_EXTRACT_RECIPE Ret:%d SkillID:%d ItemID:%d", iRet, iSkillID, iItemID );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendUpdateSecondarySkillRecipeExp( int iRet, int iSkillID, int iItemID, int iExp )
{
SecondarySkill::SCUpdateRecipeExp TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.iSkillID = iSkillID;
TxPacket.iItemID = iItemID;
TxPacket.iExp = iExp;
m_pSession->AddSendData( SC_SECONDARYSKILL, eSecondarySkill::SC_UPDATE_RECIPE_EXP, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų] SC_UPDATE_RECIPE_EXP Ret:%d SkillID:%d ItemID:%d Exp:%d", iRet, iSkillID, iItemID, iExp );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendManufactureSecondarySkill( int iRet, bool bIsStart, int iSkillID, int iItemID )
{
SecondarySkill::SCManufacture TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.bIsStart = bIsStart;
TxPacket.iSkillID = iSkillID;
TxPacket.iItemID = iItemID;
m_pSession->AddSendData( SC_SECONDARYSKILL, eSecondarySkill::SC_MANUFACTURE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų] SC_MANUFACTURE Ret:%d Start:%d SkillID:%d ItemID:%d", iRet, bIsStart, iSkillID, iItemID );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendCancleManufactureSecondarySkill( int iRet, int iSkillID )
{
SecondarySkill::SCCancelManufacture TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.iSkillID = iSkillID;
m_pSession->AddSendData( SC_SECONDARYSKILL, eSecondarySkill::SC_CANCEL_MANUFACTURE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų] SC_CANCEL_MANUFACTURE Ret:%d SkillID:%d", iRet, iSkillID );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
#endif // #if defined( PRE_ADD_SECONDARY_SKILL )
void CDNUserSendManager::SendFarmPlantSeed( int iRet, Farm::ActionType::eType ActionType, int iAreaIndex, int iItemID, int iAttachItemID )
{
SCFarmPlant TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.ActionType = ActionType;
TxPacket.iAreaIndex = iAreaIndex;
TxPacket.iItemID = iItemID;
TxPacket.iAttachItemID = iAttachItemID;
m_pSession->AddSendData( SC_FARM, eFarm::SC_PLANT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD>] SC_PLANT Ret:%d ActionType:%d Area:%d ItemID:%d AttachItemID:%d", iRet, ActionType, iAreaIndex, iItemID, iAttachItemID );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendFarmHarvest( int iRet, Farm::ActionType::eType ActionType, int iAreaIndex, const std::vector<int>& vResultItem/*=std::vector<int>()*/ )
{
SCFarmHarvest TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.ActionType = ActionType;
TxPacket.iAreaIndex = iAreaIndex;
for( UINT i=0 ; i<vResultItem.size() ; ++i )
{
if( i >= _countof(TxPacket.iResultItemIDs) )
{
_ASSERT(0);
break;
}
TxPacket.iResultItemIDs[i] = vResultItem[i];
}
int iSize = sizeof(TxPacket)-sizeof(TxPacket.iResultItemIDs);
if( iRet == ERROR_NONE && ActionType == Farm::ActionType::COMPLETE )
iSize = sizeof(TxPacket);
m_pSession->AddSendData( SC_FARM, eFarm::SC_HARVEST, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD>] SC_HARVEST Ret:%d ActionType:%d Area:%d", iRet, ActionType, iAreaIndex );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendFarmAddWater( int iRet, Farm::ActionType::eType ActionType, int iAreaIndex )
{
SCFarmAddWater TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.ActionType = ActionType;
TxPacket.iAreaIndex = iAreaIndex;
m_pSession->AddSendData( SC_FARM, eFarm::SC_ADDWATER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD>] SC_ADDWATER Ret:%d ActionType:%d Area:%d", iRet, ActionType, iAreaIndex );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendFarmWareHouseList( int iRet, INT64 biLastUniqueID, const std::map<INT64,TFarmWareHouseItem>& mList )
{
SCFarmWareHouseList TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
if( iRet == ERROR_NONE )
{
for( std::map<INT64,TFarmWareHouseItem>::const_iterator itor=mList.begin() ; itor!=mList.end() ; ++itor )
{
if((*itor).second.biUniqueID <= biLastUniqueID )
continue;
TxPacket.Items[TxPacket.cCount] = (*itor).second;
++TxPacket.cCount;
if( TxPacket.cCount >= Farm::Max::HARVESTDEPOT_COUNT )
break;
}
}
int iSize = sizeof(TxPacket)-sizeof(TxPacket.Items)+TxPacket.cCount*sizeof(TxPacket.Items[0]);
m_pSession->AddSendData( SC_FARM, eFarm::SC_WAREHOUSE_LIST, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD>] SC_WAREHOUSE_LIST Ret:%d Count:%d", iRet, static_cast<int>(TxPacket.cCount) );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendFarmTakeWareHouseItem( int iRet, INT64 biUniqueID )
{
SCFarmTakeWareHouseItem TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.biUniqueID = biUniqueID;
m_pSession->AddSendData( SC_FARM, eFarm::SC_TAKE_WAREHOUSE_ITEM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD>] SC_TAKE_WAREHOUSE_ITEM Ret:%d UniqueID=%I64d", iRet, biUniqueID );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendFarmFieldCountInfo( int iCount )
{
SCFarmFieldCountInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iCount = iCount;
m_pSession->AddSendData( SC_FARM, eFarm::SC_FIELDCOUNTIFNO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD>] SC_FIELDCOUNTIFNO Count:%d", iCount );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendFarmWareHouseItemCount( int iCount )
{
SCFarmWareHouseItemCount TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iCount = iCount;
m_pSession->AddSendData( SC_FARM, eFarm::SC_WAREHOUSE_ITEMCOUNT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD>] SC_WAREHOUSE_ITEMCOUNT Count:%d", iCount );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendFarmAddWaterAnotherUser( WCHAR* pwszCharName )
{
SCFarmAddWaterAnotherUser TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
_wcscpy( TxPacket.wszCharName, _countof(TxPacket.wszCharName), pwszCharName, (int)wcslen(pwszCharName) );
m_pSession->AddSendData( SC_FARM, eFarm::SC_ADDWATER_ANOTHERUSER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[<5B><><EFBFBD><EFBFBD>] SC_ADDWATER_ANOTHERUSER CharName:%s", TxPacket.wszCharName );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendFishingReadyResult(int nRet)
{
SCFishingReady packet;
memset(&packet, 0, sizeof(SCFishingReady));
packet.nRetCode = nRet;
m_pSession->AddSendData(SC_FISHING, eFishing::SC_READYFISHING, (char*)&packet, sizeof(SCFishingReady));
}
void CDNUserSendManager::SendFishingCastBaitResult(int nRet)
{
SCCastBait packet;
memset(&packet, 0, sizeof(SCCastBait));
packet.nRetCode = nRet;
m_pSession->AddSendData(SC_FISHING, eFishing::SC_CASTBAITRESULT, (char*)&packet, sizeof(SCCastBait));
}
void CDNUserSendManager::SendFishingStopFishingResult(int nRet)
{
SCStopFishing packet;
memset(&packet, 0, sizeof(SCStopFishing));
packet.nRetCode = nRet;
m_pSession->AddSendData(SC_FISHING, eFishing::SC_STOPFISHINGRESULT, (char*)&packet, sizeof(SCStopFishing));
}
#ifdef PRE_ADD_CASHFISHINGITEM
void CDNUserSendManager::SendFishingPattern(int nPatternID, int nFishingAutoMaxTime)
{
SCFishingPattern packet;
memset(&packet, 0, sizeof(SCFishingPattern));
packet.nPatternID = nPatternID;
packet.nFishingAutoMaxTime = nFishingAutoMaxTime;
m_pSession->AddSendData(SC_FISHING, eFishing::SC_FISHINGPATTERN, (char*)&packet, sizeof(SCFishingPattern));
}
#else //#ifdef PRE_ADD_CASHFISHINGITEM
void CDNUserSendManager::SendFishingPattern(int nPatternID)
{
SCFishingPattern packet;
memset(&packet, 0, sizeof(SCFishingPattern));
packet.nPatternID = nPatternID;
m_pSession->AddSendData(SC_FISHING, eFishing::SC_FISHINGPATTERN, (char*)&packet, sizeof(SCFishingPattern));
}
#endif //#ifdef PRE_ADD_CASHFISHINGITEM
void CDNUserSendManager::SendFishingEnd()
{
m_pSession->AddSendData(SC_FISHING, eFishing::SC_FISHINGEND, NULL, 0);
}
//void CDNUserSendManager::SendFishingResult(UINT nSessionID, int nRetCode, int nFishingRewardID)
//{
// SCFishingReward packet;
// memset(&packet, 0, sizeof(SCFishingReward));
//
// packet.nSessionID = nSessionID;
// packet.nRetCode = nRetCode;
// packet.nRewardItemID = nFishingRewardID;
//
// m_pSession->AddSendData(SC_FISHING, eFishing::SC_FISHINGREWARD, (char*)&packet, sizeof(SCFishingPattern));
//}
void CDNUserSendManager::SendFishingSync(int nReduceTimeTick, int nFishingGauge)
{
SCFishingSync packet;
memset(&packet, 0, sizeof(SCFishingSync));
packet.nReduceTick = nReduceTimeTick;
packet.nFishingGauge = nFishingGauge;
m_pSession->AddSendData(SC_FISHING, eFishing::SC_FISHINGSYNC, (char*)&packet, sizeof(SCFishingSync));
}
void CDNUserSendManager::SendOpenMovieBrowser()
{
// note by kalliste : <20>ϴ<EFBFBD> NPC Movie Browser<65><72> ȣ<><C8A3><EFBFBD>ϴ<EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20>߱<EFBFBD><DFB1><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20>־<EFBFBD> url<72>̳<EFBFBD> type<70><65> <20><>Ʈ<EFBFBD><C6AE>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPEN_MOVIEBROWSER, NULL, 0);
}
void CDNUserSendManager::SendOpenBrowser(const char* szUrl, int nX, int nY, int width, int height)
{
SCOpenBrowser packet;
memset(&packet, 0, sizeof(SCOpenBrowser));
_strcpy(packet.url, _countof(packet.url), szUrl, (int)strlen(szUrl));
packet.nX = nX;
packet.nY = nY;
packet.nWidth = width;
packet.nHeight = height;
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPEN_BROWSER, (char*)&packet, sizeof(SCOpenBrowser));
}
void CDNUserSendManager::SendStartDragonNest( eDragonNestType Type, int nRebirthCount )
{
SCStartDragonNest TxPacket;
TxPacket.Type= Type;
TxPacket.nRebirthCount = nRebirthCount;
m_pSession->AddSendData( SC_ROOM, eRoom::SC_START_DRAGONNEST, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendTimeEventList( TTimeEventGroup *pEvent )
{
SCTimeEventList Packet;
memset( &Packet, 0, sizeof(SCTimeEventList) );
int nCount = 0;
for( int i=0; i<TIMEEVENTMAX; i++ ) {
if( pEvent->Event[i].nItemID < 1 ) continue;
Packet.Event[nCount] = pEvent->Event[i];
nCount++;
}
Packet.nCount = nCount;
m_pSession->AddSendData( SC_TIMEEVENT, eTimeEvent::SC_TIMEEVENTLIST, (char*)&Packet, sizeof(SCTimeEventList) -((sizeof(TTimeEvent) *(TIMEEVENTMAX-nCount) ) ) );
}
void CDNUserSendManager::SendTimeEventAchieve( int nEventID, INT64 nRemainTime )
{
SCTimeEventAchieve Packet;
memset( &Packet, 0, sizeof(SCTimeEventAchieve) );
Packet.nItemID = nEventID;
Packet.nRemainTime = nRemainTime;
m_pSession->AddSendData( SC_TIMEEVENT, eTimeEvent::SC_ACHIEVE_EVENT, (char*)&Packet, sizeof(SCTimeEventAchieve) );
}
void CDNUserSendManager::SendTimeEventExpire( int nEventID )
{
SCTimeEventExpire Packet;
memset( &Packet, 0, sizeof(SCTimeEventExpire) );
Packet.nItemID = nEventID;
m_pSession->AddSendData( SC_TIMEEVENT, eTimeEvent::SC_EXPIRE_EVENT, (char*)&Packet, sizeof(SCTimeEventExpire) );
}
#ifdef PRE_ADD_CHANGEJOB_CASHITEM
void CDNUserSendManager::SendChangeJobCashItemRes( int nRet, USHORT wTotalSkillPoint, int nChangeFirstJobID, int nChangeSecondJobID )
{
SCUseChangeJobCashItemRes Packet;
memset( &Packet, 0, sizeof(SCUseChangeJobCashItemRes) );
Packet.nRet = nRet;
Packet.nFirstJobID = nChangeFirstJobID;
Packet.nSecondJobID = nChangeSecondJobID;
Packet.nResultSkillPoint = wTotalSkillPoint;
m_pSession->AddSendData( SC_ITEMGOODS, eItemGoods::SC_USE_CHANGEJOB_CASHITEM_RES, (char*)&Packet, sizeof(SCUseChangeJobCashItemRes) );
}
#endif // #ifdef PRE_ADD_CHANGEJOB_CASHITEM
void CDNUserSendManager::SendCommonVariableList( const std::map<CommonVariable::Type::eCode, CommonVariable::Data>& mList )
{
SCCommonVariableList TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
for( std::map<CommonVariable::Type::eCode, CommonVariable::Data>::const_iterator itor=mList.begin() ; itor!=mList.end() ; ++itor )
{
TxPacket.List[TxPacket.cCount++] = (*itor).second;
}
int iSize = sizeof(TxPacket)-sizeof(TxPacket.List)+TxPacket.cCount*sizeof(TxPacket.List[0]);
m_pSession->AddSendData( SC_CHAR, eChar::SC_COMMONVARIABLE_LIST, reinterpret_cast<char*>(&TxPacket), iSize );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[CommonVariable] SendCommonVariableList() Count:%d", TxPacket.cCount );
m_pSession->SendDebugChat( wszBuf );
for( int i=0 ; i<TxPacket.cCount ; ++i )
{
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[CommonVariable] Type:%d Value:%I64d", TxPacket.List[i].Type, TxPacket.List[i].biValue );
m_pSession->SendDebugChat( wszBuf );
}
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendModCommonVariableData( const CommonVariable::Data& Data )
{
SCModCommonVariable TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.Data = Data;
m_pSession->AddSendData( SC_CHAR, eChar::SC_MOD_COMMONVARIABLE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[CommonVariable] Type=%d Value=%I64d", TxPacket.Data.Type, TxPacket.Data.biValue );
m_pSession->SendDebugChat( wszBuf );
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendCheckLastDungeonInfo( const WCHAR* pwszPartyName )
{
SCPartyCheckLastDungeonInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
if( pwszPartyName )
_wcscpy( TxPacket.wszPartyName, _countof(TxPacket.wszPartyName), pwszPartyName, static_cast<int>(wcslen(pwszPartyName)) );
m_pSession->AddSendData( SC_PARTY, eParty::SC_CHECK_LASTDUNGEONINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[SendCheckLastDungeonInfo] PartyName:%s", TxPacket.wszPartyName );
m_pSession->SendDebugChat( wszBuf );
std::wcout << wszBuf << std::endl;
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendConfirmLastDungeonInfo( int iRet )
{
SCPartyConfirmLastDungeonInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
m_pSession->AddSendData( SC_PARTY, eParty::SC_CONFIRM_LASTDUNGEONINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[SendConfirmLastDungeonInfo] Ret:%d", iRet );
m_pSession->SendDebugChat( wszBuf );
std::wcout << wszBuf << std::endl;
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendAttendanceEventResult( bool bCheckAttendanceFirst )
{
SCAttendanceEvent TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.bCheckAttendanceFirst = bCheckAttendanceFirst;
m_pSession->AddSendData( SC_CHAR, eChar::SC_ATTENDANCEEVENT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
#if defined( _WORK )
WCHAR wszBuf[MAX_PATH];
wsprintf( wszBuf, L"[SendAttendanceEventResult] Ret:%d", bCheckAttendanceFirst );
m_pSession->SendDebugChat( wszBuf );
std::wcout << wszBuf << std::endl;
#endif // #if defined( _WORK )
}
void CDNUserSendManager::SendIncreaseLife( char cType, int nIncreaseLife )
{
SCIncreaseLife Packet;
memset( &Packet, 0, sizeof(SCIncreaseLife) );
Packet.cType = cType;
Packet.nIncreaseLife = nIncreaseLife;
m_pSession->AddSendData( SC_ITEM, eItem::SC_INCREASELIFE, (char*)&Packet, sizeof(SCIncreaseLife) );
}
#if defined(PRE_ADD_REMOVE_PREFIX)
void CDNUserSendManager::SendRemovePrefixItemResult( int nRet, int nSlotIndex )
{
SCEnchantJewelItem result;
result.nRet = nRet;
result.cInvenIndex = nSlotIndex;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_REMOVE_PREFIX, (char*)&result, sizeof(SCEnchantJewelItem));
}
#endif // PRE_ADD_REMOVE_PREFIX
void CDNUserSendManager::SendSourceData(int nSessonID, const TSourceData& sourceData, bool bUsedInGameServer)
{
if (sourceData.nItemID <= 0)
return;
SCSourceItem packet;
memset(&packet, 0, sizeof(packet));
packet.nSessionID = nSessonID;
packet.nItemID = sourceData.nItemID;
packet.nRemainTime = sourceData.nRemainTime;
packet.bUsedInGameServer = bUsedInGameServer;
m_pSession->AddSendData(SC_ITEM, eItem::SC_USE_SOURCE, (char*)&packet, sizeof(packet));
}
#if defined( PRE_ADD_NAMEDITEM_SYSTEM )
void CDNUserSendManager::SendEffectSkillItemData(int nSessionID, std::vector<TEffectSkillData>& EffectSkillList, bool bUsedInGameServer)
{
if( EffectSkillList.empty() || EffectSkillList.size() > EFFECTSKILLMAX )
return;
SCEffectSkillItem packet;
memset(&packet, 0, sizeof(packet));
packet.nSessionID = nSessionID;
packet.bUsedInGameServer = bUsedInGameServer;
#if defined( _VILLAGESERVER )
for( int i=0;i<(int)(EffectSkillList.size());i++ )
{
packet.EffectSkill[i] = EffectSkillList[i];
packet.nCount++;
}
#elif defined( _GAMESERVER )
for( int i=0;i<(int)(EffectSkillList.size());i++ )
{
if( EffectSkillList[i].bApplySkill )
{
packet.EffectSkill[packet.nCount] = EffectSkillList[i];
packet.nCount++;
}
}
#endif
int nSize = ( sizeof(packet) - sizeof(packet.EffectSkill) ) + ( sizeof(TEffectSkillData) * packet.nCount );
m_pSession->AddSendData(SC_ITEM, eItem::SC_EFFECTSKILLITEM, (char*)&packet, nSize);
}
void CDNUserSendManager::SendEffectSkillItemData(int nSessionID, TEffectSkillData EffectSkill, bool bUsedInGameServer)
{
SCEffectSkillItem packet;
memset(&packet, 0, sizeof(packet));
packet.nSessionID = nSessionID;
packet.bUsedInGameServer = bUsedInGameServer;
packet.EffectSkill[0] = EffectSkill;
packet.nCount++;
int nSize = ( sizeof(packet) - sizeof(packet.EffectSkill) ) + ( sizeof(TEffectSkillData) * packet.nCount );
m_pSession->AddSendData(SC_ITEM, eItem::SC_EFFECTSKILLITEM, (char*)&packet, nSize);
}
void CDNUserSendManager::SendDelEffectSkillItemData(int nSessionID, int nItemID)
{
SCDelEffectSkillItem packet;
memset(&packet, 0, sizeof(packet));
packet.nSessionID = nSessionID;
packet.nItemID = nItemID;
m_pSession->AddSendData(SC_ITEM, eItem::SC_DELEFFECTSKILLITEM, (char*)&packet, sizeof(SCDelEffectSkillItem));
}
void CDNUserSendManager::SendShowEffect(int nItemID, int nSessionID, BYTE cEffectType)
{
SCShowEffect packet;
memset(&packet, 0, sizeof(packet));
packet.nItemID = nItemID;
packet.nSessionID = nSessionID;
if(cEffectType == EffectSkillNameSpace::ShowEffectType::BUFFEFFECT)
packet.bUseSession = false;
else if(cEffectType == EffectSkillNameSpace::ShowEffectType::SPELLEFFECT)
packet.bUseSession = true;
m_pSession->AddSendData(SC_ITEM, eItem::SC_SHOWEFFECT, (char*)&packet, sizeof(SCShowEffect));
}
void CDNUserSendManager::SendNamedItemID(int nSessionID, int nItemID)
{
SCNamedItemID packet;
memset(&packet, 0, sizeof(packet));
packet.nSessionID = nSessionID;
packet.nItemID = nItemID;
m_pSession->AddSendData(SC_ITEM, eItem::SC_SENDNAMEDITEMID, (char*)&packet, sizeof(SCNamedItemID));
}
#endif
#if defined(PRE_ADD_TRANSFORM_POTION)
void CDNUserSendManager::SendChangeTransform(int nSessionID, int nTranformID, int nExpireTIme)
{
SCChangeTransform packet;
memset(&packet, 0, sizeof(packet));
packet.nSessionID = nSessionID;
packet.nTransformID = nTranformID;
packet.nExpireTime = nExpireTIme;
m_pSession->AddSendData(SC_ITEM, eItem::SC_CHANGE_TRANSFORM, (char*)&packet, sizeof(SCChangeTransform));
}
#endif
void CDNUserSendManager::SendPetSkillItemResult( int nRet, char cSlotNum, int nSkillID )
{
SCPetSkillItem result;
memset(&result, 0, sizeof(result));
result.nRet = nRet;
result.cSlotNum = cSlotNum;
result.nSkillID = nSkillID;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_PETSKILLITEM, (char*)&result, sizeof(SCPetSkillItem));
}
void CDNUserSendManager::SendPetSkillExpandResult( int nRet )
{
SCPetSkillExpand result;
memset(&result, 0, sizeof(result));
result.nRet = nRet;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_PETSKILLEXPAND, (char*)&result, sizeof(SCPetSkillExpand));
}
void CDNUserSendManager::SendPetSkillDelete( int nRet, char cSlotNum)
{
SCPetSkillDelete result;
memset(&result, 0, sizeof(result));
result.nRet = nRet;
result.cSlotNum = cSlotNum;
m_pSession->AddSendData(SC_ITEM, eItem::SC_DELETE_PET_SKILL, (char*)&result, sizeof(SCPetSkillDelete));
}
void CDNUserSendManager::SendSpecialRebirthItem( int nItemID, int nRebirthCount )
{
SCSpecialRebirthItem TxPacket;
TxPacket.nItemID= nItemID;
TxPacket.nRebirthItemCount = nRebirthCount;
m_pSession->AddSendData( SC_ROOM, eRoom::SC_SPECIAL_REBIRTHITEM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendPlayerCustomEventUI(SCGetPlayerCustomEventUI * pPacket)
{
if (pPacket == NULL) return;
m_pSession->AddSendData(SC_CUSTOMEVENTUI, ePlayerCustomEventUI::SC_GETPLAYERUI, reinterpret_cast<char*>(pPacket), sizeof(SCGetPlayerCustomEventUI) - sizeof(pPacket->UIs) + (sizeof(TCustomEventInfo) * pPacket->cCount));
}
void CDNUserSendManager::SendGuildRecruitList( int iRet, UINT uiPage, std::vector<TGuildRecruitInfo>& vGuildRecruitList )
{
GuildRecruitSystem::SCGuildRecruitList TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.uiPage = uiPage;
TxPacket.cCount = static_cast<BYTE>(vGuildRecruitList.size());
for( UINT i=0 ; i<TxPacket.cCount ; ++i )
TxPacket.GuildRecruitList[i] = vGuildRecruitList[i];
int iSize = sizeof(TxPacket)-sizeof(TxPacket.GuildRecruitList)+(TxPacket.cCount*sizeof(TxPacket.GuildRecruitList[0]));
m_pSession->AddSendData( SC_GUILDRECRUIT, eGuildRecruit::SC_GUILDRECRUIT_LIST, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNUserSendManager::SendGuildRecruitCharacter( int iRet, std::vector<TGuildRecruitCharacter>& vGuildRecruitCharacterList )
{
GuildRecruitSystem::SCGuildRecruitCharacterList TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.cCount = static_cast<BYTE>(vGuildRecruitCharacterList.size());
for( UINT i=0 ; i<TxPacket.cCount ; ++i )
TxPacket.GuildRecruitCharacterList[i] = vGuildRecruitCharacterList[i];
int iSize = sizeof(TxPacket)-sizeof(TxPacket.GuildRecruitCharacterList)+(TxPacket.cCount*sizeof(TxPacket.GuildRecruitCharacterList[0]));
m_pSession->AddSendData( SC_GUILDRECRUIT, eGuildRecruit::SC_GUILDREQUEST_CHARACTER, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNUserSendManager::SendMyGuildRecruit( int iRet, std::vector<TGuildRecruitInfo>& vMyGuildRecruitList )
{
GuildRecruitSystem::SCMyGuildRecruitList TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.cCount = static_cast<BYTE>(vMyGuildRecruitList.size());
for( UINT i=0 ; i<TxPacket.cCount ; ++i )
TxPacket.MyGuildRecruitList[i] = vMyGuildRecruitList[i];
int iSize = sizeof(TxPacket)-sizeof(TxPacket.MyGuildRecruitList)+(TxPacket.cCount*sizeof(TxPacket.MyGuildRecruitList[0]));
m_pSession->AddSendData( SC_GUILDRECRUIT, eGuildRecruit::SC_GUILDRECRUIT_MYLIST, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNUserSendManager::SendGuildRecruitRequestCount( int iRet, int cRequestCount, GuildRecruitSystem::Max::eType type )
{
GuildRecruitSystem::SCGuildRecruitRequestCount TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.cRequestCount = cRequestCount;
TxPacket.cMaxRequestCount = type;
m_pSession->AddSendData( SC_GUILDRECRUIT, eGuildRecruit::SC_GUILDRECRUIT_REQUESTCOUNT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendRegisterGuildRecruitList( int iRet, GuildRecruitSystem::RegisterType::eType type )
{
GuildRecruitSystem::SCGuildRecruitRegister TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.cRegisterType = (BYTE)type;
m_pSession->AddSendData( SC_GUILDRECRUIT, eGuildRecruit::SC_GUILDRECRUIT_REGISTER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendGuildRecruitRequest( int iRet, GuildRecruitSystem::RequestType::eType type )
{
GuildRecruitSystem::SCGuildRecruitRequest TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.cRequestType = type;
m_pSession->AddSendData( SC_GUILDRECRUIT, eGuildRecruit::SC_GUILDRECRUIT_REQUEST, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendGuildRecruitAccept( int iRet, INT64 biAcceptCharacterDBID, bool bDelGuildRecruit, GuildRecruitSystem::AcceptType::eType type )
{
GuildRecruitSystem::SCGuildRecruitAccept TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.cAcceptType = type;
TxPacket.biAcceptCharacterDBID = biAcceptCharacterDBID;
TxPacket.bDelGuildRecruit = bDelGuildRecruit;
m_pSession->AddSendData( SC_GUILDRECRUIT, eGuildRecruit::SC_GUILDRECRUIT_ACCEPRESULT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendGuildRecruitMemberResult( int iRet, WCHAR* wszGuildName, GuildRecruitSystem::AcceptType::eType type )
{
GuildRecruitSystem::SCGuildRecruitMemberResult TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.iRet = iRet;
TxPacket.cAcceptType = type;
_wcscpy( TxPacket.wszGuildName, _countof(TxPacket.wszGuildName), wszGuildName, (int)wcslen(wszGuildName) );
m_pSession->AddSendData( SC_GUILDRECRUIT, eGuildRecruit::SC_GUILDRECRUIT_MEMBERRESULT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#if defined( PRE_ADD_GUILD_EASYSYSTEM )
void CDNUserSendManager::SendRegisterGuildRecruitInfo( BYTE* cClassCode, int nMinLevel, int nMaxLevel, WCHAR* wszGuildIntroduction, BYTE cPurposeCode, bool bCheckHomePage )
#else
void CDNUserSendManager::SendRegisterGuildRecruitInfo( BYTE* cClassCode, int nMinLevel, int nMaxLevel, WCHAR* wszGuildIntroduction )
#endif
{
GuildRecruitSystem::SCGuildRecruitRegisterInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
if(cClassCode)
memcpy(TxPacket.cClassGrade, cClassCode, sizeof(TxPacket.cClassGrade));
TxPacket.nMinLevel = nMinLevel;
TxPacket.nMaxLevel = nMaxLevel;
_wcscpy( TxPacket.wszGuildIntroduction, _countof(TxPacket.wszGuildIntroduction), wszGuildIntroduction, (int)wcslen(wszGuildIntroduction) );
#if defined( PRE_ADD_GUILD_EASYSYSTEM )
TxPacket.cPurposeCode = cPurposeCode;
TxPacket.bCheckHomePage = bCheckHomePage;
#endif
m_pSession->AddSendData( SC_GUILDRECRUIT, eGuildRecruit::SC_GUILDRECRUIT_REGISTERINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNUserSendManager::SendWarpVillageResult(int nResult)
{
SCWarpVillage packet;
ZeroMemory(&packet, sizeof(packet));
packet.nResult = nResult;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_WARP_VILLAGE, reinterpret_cast<char*>(&packet), sizeof(packet));
}
void CDNUserSendManager::SendWarpVillageList(const vector<WarpVillage::WarpVillageInfo>& vList)
{
SCWarpVillageList packet;
ZeroMemory(&packet, sizeof(packet));
packet.btCount = static_cast<BYTE>(vList.size());
copy(vList.begin(), vList.end(), packet.VillageList);
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_WARP_VILLAGE_LIST, reinterpret_cast<char*>(&packet), sizeof(packet) - sizeof(packet.VillageList) + sizeof(WarpVillage::WarpVillageInfo) * packet.btCount);
}
#if defined (PRE_ADD_DONATION)
void CDNUserSendManager::SendOpenDonation()
{
m_pSession->AddSendData(SC_DONATION, eDonation::SC_DONATION_OPEN, NULL, 0);
}
void CDNUserSendManager::SendDonationResult(int nResult)
{
SCDonate packet;
ZeroMemory(&packet, sizeof(packet));
packet.nResult = nResult;
m_pSession->AddSendData(SC_DONATION, eDonation::SC_DONATE, reinterpret_cast<char*>(&packet), sizeof(packet));
}
void CDNUserSendManager::SendDonationRanking(const Donation::Ranking vRanking[], int nMyRanking, INT64 nMyCoin)
{
SCDonationRanking packet;
ZeroMemory(&packet, sizeof(packet));
memcpy(packet.Ranking, vRanking, sizeof(Donation::Ranking) * Donation::MAX_RANKING);
packet.nMyRanking = nMyRanking;
packet.nMyCoin = nMyCoin;
m_pSession->AddSendData(SC_DONATION, eDonation::SC_DONATION_RANKING, reinterpret_cast<char*>(&packet), sizeof(packet));
}
#endif // #if defined (PRE_ADD_DONATION)
#ifdef PRE_ADD_AUTOUNPACK
void CDNUserSendManager::SendAutoUnpack(INT64 serial, int nRetCode)
{
SCAutoUnpack packet;
memset(&packet, 0, sizeof(SCAutoUnpack));
packet.nRetCode = nRetCode;
packet.serial = serial;
m_pSession->AddSendData(SC_ITEM, eItem::SC_USE_AUTOUNPACK_CASHITEM, (char*)&packet, sizeof(SCAutoUnpack));
}
#endif
#ifdef PRE_ADD_EXCHANGE_POTENTIAL
void CDNUserSendManager::SendExchangePotoential(int nRetCode)
{
SCExchangePotential packet;
memset(&packet, 0, sizeof(SCExchangePotential));
packet.nRetCode = nRetCode;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_EXCHANGE_POTENTIAL, (char*)&packet, sizeof(SCExchangePotential));
}
#endif //#ifdef PRE_ADD_EXCHANGE_POTENTIAL
#if defined(PRE_ADD_EXCHANGE_ENCHANT)
void CDNUserSendManager::SendExchangeEnchant(int nRetCode)
{
SCExchangeEnchant packet;
memset(&packet, 0, sizeof(SCExchangeEnchant));
packet.nRetCode = nRetCode;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_EXCHANGE_ENCHANT, (char*)&packet, sizeof(SCExchangeEnchant));
}
#endif //#if defined(PRE_ADD_EXCHANGE_ENCHANT)
#if defined(PRE_ADD_PCBANG_RENTAL_ITEM)
void CDNUserSendManager::SendPcCafeRentItem(int nRetCode, int nNeedCount)
{
SCPcCafeRentItem packet;
memset(&packet, 0, sizeof(SCPcCafeRentItem));
packet.nRetCode = nRetCode;
packet.nNeedCount = nNeedCount;
m_pSession->AddSendData(SC_ITEMGOODS, eItemGoods::SC_PCCAFE_RENT_ITEM, (char*)&packet, sizeof(SCPcCafeRentItem));
}
#endif
#if defined (PRE_ADD_BESTFRIEND)
void CDNUserSendManager::SendGetBestFriend(int nRetCode, TBestFriendInfo& Info)
{
BestFriend::SCGetInfo packet;
memset(&packet, 0, sizeof(packet));
packet.iRet = nRetCode;
packet.Info = Info;
m_pSession->AddSendData(SC_BESTFRIEND, eBestFriend::SC_GETINFO, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendSearchBestFriendResult(int nRetCode, char cLevel, char cJob, LPCWSTR lpwszCharacterName)
{
BestFriend::SCSearch packet;
memset(&packet, 0, sizeof(packet));
packet.iRet = nRetCode;
packet.cLevel = cLevel;
packet.cJob = cJob;
if(lpwszCharacterName)
_wcscpy(packet.wszName, _countof(packet.wszName), lpwszCharacterName, _countof(packet.wszName));
m_pSession->AddSendData(SC_BESTFRIEND, eBestFriend::SC_SEARCH, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendRegistBestFriendReq(int nRetCode, UINT nFromAccountDBID, INT64 biFromCharacterDBID, LPCWSTR lpwszFromCharacterName, UINT nToAccountDBID, INT64 biToCharacterDBID, LPCWSTR lpwszToCharacterName)
{
BestFriend::SCRegistReq packet;
memset(&packet, 0, sizeof(packet));
packet.iRet = nRetCode;
packet.nFromAccountDBID = nFromAccountDBID;
packet.biFromCharacterDBID = biFromCharacterDBID;
packet.nToAccountDBID = nToAccountDBID;
packet.biToCharacterDBID = biToCharacterDBID;
if(lpwszFromCharacterName)
_wcscpy(packet.wszFromName, _countof(packet.wszFromName), lpwszFromCharacterName, _countof(packet.wszFromName));
if(lpwszToCharacterName)
_wcscpy(packet.wszToName, _countof(packet.wszToName), lpwszToCharacterName, _countof(packet.wszToName));
m_pSession->AddSendData(SC_BESTFRIEND, eBestFriend::SC_REGISTREQ, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendRegistBestFriendAck(int nRetCode, UINT nFromAccountDBID, LPCWSTR lpwszFromCharacterName, UINT nToAccountDBID, LPCWSTR lpwszToCharacterName)
{
BestFriend::SCRegistAck packet;
memset(&packet, 0, sizeof(packet));
packet.iRet = nRetCode;
packet.nFromAccountDBID = nFromAccountDBID;
packet.nToAccountDBID = nToAccountDBID;
if(lpwszFromCharacterName)
_wcscpy(packet.wszFromName, _countof(packet.wszFromName), lpwszFromCharacterName, _countof(packet.wszFromName));
if(lpwszToCharacterName)
_wcscpy(packet.wszToName, _countof(packet.wszToName), lpwszToCharacterName, _countof(packet.wszToName));
m_pSession->AddSendData(SC_BESTFRIEND, eBestFriend::SC_REGISTACK, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendCompleteBestFriend(int nRetCode, LPCWSTR lpwszCharacterName)
{
BestFriend::SCComplete packet;
memset(&packet, 0, sizeof(packet));
packet.iRet = nRetCode;
if (lpwszCharacterName)
_wcscpy(packet.wszName, _countof(packet.wszName), lpwszCharacterName, _countof(packet.wszName));
m_pSession->AddSendData(SC_BESTFRIEND, eBestFriend::SC_COMPLETE, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendEditBestFriendMemo(int nRetCode, bool bFromMe, LPCWSTR lpwszMemo)
{
BestFriend::SCEditMemo packet;
memset(&packet, 0, sizeof(packet));
packet.iRet = nRetCode;
packet.bFromMe = bFromMe;
if(lpwszMemo)
_wcscpy(packet.wszMemo, _countof(packet.wszMemo), lpwszMemo, _countof(packet.wszMemo));
m_pSession->AddSendData(SC_BESTFRIEND, eBestFriend::SC_EDITMEMO, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendCancelBestFriend(int nRetCode, LPCWSTR lpwszName, bool bCancel)
{
BestFriend::SCCancel packet;
memset(&packet, 0, sizeof(packet));
packet.iRet = nRetCode;
packet.bCancel = bCancel;
if (lpwszName)
_wcscpy(packet.wszName, _countof(packet.wszName), lpwszName, _countof(packet.wszName));
m_pSession->AddSendData(SC_BESTFRIEND, eBestFriend::SC_CANCELBF, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendCloseBestFriend(int nRetCode, LPCWSTR lpwszName)
{
BestFriend::SCClose packet;
memset(&packet, 0, sizeof(packet));
packet.iRet = nRetCode;
if (lpwszName)
_wcscpy(packet.wszName, _countof(packet.wszName), lpwszName, _countof(packet.wszName));
m_pSession->AddSendData(SC_BESTFRIEND, eBestFriend::SC_CLOSEBF, (char*)&packet, sizeof(packet));
}
#endif
void CDNUserSendManager::SendItemModItemExpireDate(int nRet)
{
SCModItemExpireDate result;
memset(&result, 0, sizeof(result));
result.nRet = nRet;
m_pSession->AddSendData(SC_ITEM, eItem::SC_MODITEMEXPIREDATE, (char*)&result, sizeof(SCModItemExpireDate));
}
#if defined( PRE_PRIVATECHAT_CHANNEL )
void CDNUserSendManager::SendPrivateChatChannelResult(int nRet)
{
PrivateChatChannel::SCPrivateChatChannleResult result;
memset(&result, 0, sizeof(result));
result.nRet = nRet;
m_pSession->AddSendData(SC_PRIVATECHAT_CHANNEL, ePrivateChatChannel::SC_PRIVATECHAT_CHANNEL_RESULT, (char*)&result, sizeof(PrivateChatChannel::SCPrivateChatChannleResult));
}
void CDNUserSendManager::SendPrivateChatChannelInfo(TPrivateChatChannelInfo ChannelInfo, std::list<TPrivateChatChannelMember> &MemberList)
{
if(MemberList.empty())
return;
PrivateChatChannel::SCPrivateChannleInfo TxPacket;
memset(&TxPacket, 0, sizeof(TxPacket));
_wcscpy(TxPacket.wszChannelName, _countof(TxPacket.wszChannelName), ChannelInfo.wszName, (int)wcslen(ChannelInfo.wszName));
for(std::list<TPrivateChatChannelMember>::iterator itor = MemberList.begin();itor!=MemberList.end();itor++)
{
TxPacket.Members[TxPacket.nCount].biCharacterDBID = itor->biCharacterDBID;
TxPacket.Members[TxPacket.nCount].bMaster = itor->bMaster;
_wcscpy(TxPacket.Members[TxPacket.nCount].wszCharacterName, _countof(TxPacket.Members[TxPacket.nCount].wszCharacterName), itor->wszCharacterName, (int)wcslen(itor->wszCharacterName));
TxPacket.nCount++;
}
int iSize = sizeof(TxPacket)-sizeof(TxPacket.Members)+(TxPacket.nCount*sizeof(TxPacket.Members[0]));
m_pSession->AddSendData( SC_PRIVATECHAT_CHANNEL, ePrivateChatChannel::SC_PRIVATECHAT_CHANNEL_INFO, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNUserSendManager::SendPrivateChatChannelJoinResult( int nRet, WCHAR* wszChannelName)
{
PrivateChatChannel::SCPrivateChatChannleJoinResult TxPacket;
memset(&TxPacket, 0, sizeof(TxPacket));
TxPacket.nRet = nRet;
if(wszChannelName)
_wcscpy(TxPacket.wszChannelName, _countof(TxPacket.wszChannelName), wszChannelName, (int)wcslen(wszChannelName));
m_pSession->AddSendData( SC_PRIVATECHAT_CHANNEL, ePrivateChatChannel::SC_PRIVATECHAT_CHANNEL_JOINRESULT, reinterpret_cast<char*>(&TxPacket), sizeof(PrivateChatChannel::SCPrivateChatChannleJoinResult) );
}
void CDNUserSendManager::SendPrivateChatChannelInviteResult( int nRet )
{
PrivateChatChannel::SCPrivateChatChannleInviteResult TxPacket;
memset(&TxPacket, 0, sizeof(TxPacket));
TxPacket.nRet = nRet;
m_pSession->AddSendData( SC_PRIVATECHAT_CHANNEL, ePrivateChatChannel::SC_PRIVATECHAT_CHANNEL_INVITERESULT, reinterpret_cast<char*>(&TxPacket), sizeof(PrivateChatChannel::SCPrivateChatChannleOutResult) );
}
void CDNUserSendManager::SendPrivateChatChannelOutResult( int nRet )
{
PrivateChatChannel::SCPrivateChatChannleOutResult TxPacket;
memset(&TxPacket, 0, sizeof(TxPacket));
TxPacket.nRet = nRet;
m_pSession->AddSendData( SC_PRIVATECHAT_CHANNEL, ePrivateChatChannel::SC_PRIVATECHAT_CHANNEL_OUTRESULT, reinterpret_cast<char*>(&TxPacket), sizeof(PrivateChatChannel::SCPrivateChatChannleOutResult) );
}
void CDNUserSendManager::SendPrivateChatChannelMemberAdd( int nRet, TPrivateChatChannelMember Member)
{
PrivateChatChannel::SCPrivateChatChannleAdd TxPacket;
memset(&TxPacket, 0, sizeof(TxPacket));
TxPacket.nRet = nRet;
TxPacket.Member.biCharacterDBID = Member.biCharacterDBID;
TxPacket.Member.bMaster = Member.bMaster;
_wcscpy(TxPacket.Member.wszCharacterName, _countof(TxPacket.Member.wszCharacterName), Member.wszCharacterName, (int)wcslen(Member.wszCharacterName));
m_pSession->AddSendData( SC_PRIVATECHAT_CHANNEL, ePrivateChatChannel::SC_PRIVATECHAT_CHANNEL_ADD, reinterpret_cast<char*>(&TxPacket), sizeof(PrivateChatChannel::SCPrivateChatChannleAdd) );
}
void CDNUserSendManager::SendPrivateChatChannelKickResult(int nRetCode, bool bMe)
{
PrivateChatChannel::CSPrivateChatChannleKickResult TxPacket;
memset(&TxPacket, 0, sizeof(TxPacket));
TxPacket.nRet = nRetCode;
TxPacket.bMe = bMe;
m_pSession->AddSendData( SC_PRIVATECHAT_CHANNEL, ePrivateChatChannel::SC_PRIVATECHAT_CHANNEL_KICKRESULT, reinterpret_cast<char*>(&TxPacket), sizeof(PrivateChatChannel::CSPrivateChatChannleKickResult) );
}
void CDNUserSendManager::SendPrivateChatChannelMemberDel( int nRet, INT64 biCharacterDBID, WCHAR* wszName)
{
PrivateChatChannel::SCPrivateChatChannleDel TxPacket;
memset(&TxPacket, 0, sizeof(TxPacket));
TxPacket.nRet = nRet;
TxPacket.biCharacterDBID = biCharacterDBID;
if(wszName)
_wcscpy(TxPacket.wszCharacterName, _countof(TxPacket.wszCharacterName), wszName, (int)wcslen(wszName));
m_pSession->AddSendData( SC_PRIVATECHAT_CHANNEL, ePrivateChatChannel::SC_PRIVATECHAT_CHANNEL_DEL, reinterpret_cast<char*>(&TxPacket), sizeof(PrivateChatChannel::SCPrivateChatChannleDel) );
}
void CDNUserSendManager::SendPrivateChatChannelMemberKick( int nRet, INT64 biCharacterDBID, WCHAR* wszName)
{
PrivateChatChannel::SCPrivateChatChannleDel TxPacket;
memset(&TxPacket, 0, sizeof(TxPacket));
TxPacket.nRet = nRet;
TxPacket.biCharacterDBID = biCharacterDBID;
if(wszName)
_wcscpy(TxPacket.wszCharacterName, _countof(TxPacket.wszCharacterName), wszName, (int)wcslen(wszName));
m_pSession->AddSendData( SC_PRIVATECHAT_CHANNEL, ePrivateChatChannel::SC_PRIVATECHAT_CHANNEL_KICK, reinterpret_cast<char*>(&TxPacket), sizeof(PrivateChatChannel::SCPrivateChatChannleDel) );
}
void CDNUserSendManager::SendPrivateChatChannelInfoMod( int nRet, int nModType, WCHAR* wszMasterName, INT64 biCharacterDBID )
{
PrivateChatChannel::SCPrivateChatChannleMod TxPacket;
memset(&TxPacket, 0, sizeof(TxPacket));
TxPacket.nRet = nRet;
TxPacket.biCharacterDBID = biCharacterDBID;
TxPacket.nModType = nModType;
if(wszMasterName)
_wcscpy(TxPacket.wszCharacterName, _countof(TxPacket.wszCharacterName), wszMasterName, (int)wcslen(wszMasterName));
m_pSession->AddSendData( SC_PRIVATECHAT_CHANNEL, ePrivateChatChannel::SC_PRIVATECHAT_CHANNEL_MOD, reinterpret_cast<char*>(&TxPacket), sizeof(PrivateChatChannel::SCPrivateChatChannleMod) );
}
#endif
#if defined( PRE_ADD_TOTAL_LEVEL_SKILL )
void CDNUserSendManager::SendTotalLevel(UINT nSessionID, int nTotalLevelSkill)
{
SCActorMessage ActorMsg;
memset(&ActorMsg, 0, sizeof(SCActorMessage));
CPacketCompressStream Stream( ActorMsg.cBuf, 128 );
Stream.Write( &nTotalLevelSkill, sizeof(int) );
ActorMsg.nSessionID = nSessionID;
int nSize = (USHORT)Stream.Tell();
m_pSession->AddSendData(SC_ACTOR, eActor::SC_TOTAL_LEVEL, (char*)&ActorMsg, sizeof(SCActorMessage) -(USHORT)(128 - nSize));
}
void CDNUserSendManager::SendTotalLevelSkillList(UINT nSessionID, int* nTotalLevelSkill)
{
SCActorMessage ActorMsg;
memset(&ActorMsg, 0, sizeof(SCActorMessage));
CPacketCompressStream Stream( ActorMsg.cBuf, 128 );
int nCount = 4;
Stream.Write( &nCount, sizeof(int) );
for(int i=0;i<TotalLevelSkill::Common::MAXSLOTCOUNT;i++)
{
Stream.Write( &i, sizeof(int) );
Stream.Write( &nTotalLevelSkill[i], sizeof(int) );
}
ActorMsg.nSessionID = nSessionID;
int nSize = (USHORT)Stream.Tell();
m_pSession->AddSendData(SC_ACTOR, eActor::SC_TOTAL_LEVEL_SKILL_ACTIVE_LIST, (char*)&ActorMsg, sizeof(SCActorMessage) -(USHORT)(128 - nSize));
}
void CDNUserSendManager::SendTotalLevelSkillCashSlot(UINT nSessionID, int nCashSlotIndex, bool bFlag, __time64_t tExpireDate)
{
SCActorMessage ActorMsg;
memset(&ActorMsg, 0, sizeof(SCActorMessage));
CPacketCompressStream Stream( ActorMsg.cBuf, 128 );
Stream.Write( &nCashSlotIndex, sizeof(int) );
Stream.Write(&bFlag, sizeof(bool));
Stream.Write(&tExpireDate, sizeof(__time64_t));
ActorMsg.nSessionID = nSessionID;
int nSize = (USHORT)Stream.Tell();
m_pSession->AddSendData(SC_ACTOR, eActor::SC_TOTAL_LEVEL_SKILL_CASHSLOT_ACTIVATE, (char*)&ActorMsg, sizeof(SCActorMessage) -(USHORT)(128 - nSize));
}
void CDNUserSendManager::SendAddTotalLevelSkill(UINT nSessionID, int nSlotIndex, int nSkillID, bool isInitialize/* = false*/)
{
SCActorMessage ActorMsg;
memset(&ActorMsg, 0, sizeof(SCActorMessage));
CPacketCompressStream Stream( ActorMsg.cBuf, 128 );
Stream.Write( &nSlotIndex, sizeof(int) );
Stream.Write( &nSkillID, sizeof(int) );
Stream.Write( &isInitialize, sizeof(bool) );
ActorMsg.nSessionID = nSessionID;
int nSize = (USHORT)Stream.Tell();
m_pSession->AddSendData(SC_ACTOR, eActor::SC_ADD_TOTAL_LEVEL_SKILL, (char*)&ActorMsg, sizeof(SCActorMessage) -(USHORT)(128 - nSize));
}
void CDNUserSendManager::SendDelTotalLevelSkill(UINT nSessionID, int nSlotIndex)
{
SCActorMessage ActorMsg;
memset(&ActorMsg, 0, sizeof(SCActorMessage));
CPacketCompressStream Stream( ActorMsg.cBuf, 128 );
Stream.Write( &nSlotIndex, sizeof(int) );
ActorMsg.nSessionID = nSessionID;
int nSize = (USHORT)Stream.Tell();
m_pSession->AddSendData(SC_ACTOR, eActor::SC_REMOVE_TOTAL_LEVEL_SKILL, (char*)&ActorMsg, sizeof(SCActorMessage) -(USHORT)(128 - nSize));
}
#endif
#ifdef PRE_ADD_PRESET_SKILLTREE
void CDNUserSendManager::SendSkillPresetList(TSkillSetIndexData * pSetData, TSkillSetPartialData * pSkillData, int nRetCode)
{
SCSKillSetList packet;
memset(&packet, 0, sizeof(SCSKillSetList));
int nCount = 0;
packet.nRetCode = nRetCode;
if (pSetData != NULL && pSkillData != NULL)
{
memcpy_s(&packet.SKillIndex, sizeof(packet.SKillIndex), pSetData, sizeof(TSkillSetIndexData) * SKILLPRESETMAX);
for (int i = 0; i < SKILLPRESETMAX; i++)
{
nCount += packet.SKillIndex[i].cCount;
}
memcpy_s(&packet.SKills, sizeof(packet.SKills), pSkillData, sizeof(TSkillSetPartialData) * nCount);
}
m_pSession->AddSendData(SC_SKILL, eSkill::SC_LIST_SKILLSET, (char*)&packet, sizeof(SCSKillSetList) - sizeof(packet.SKills) + (sizeof(TSkillSetPartialData) * nCount));
}
void CDNUserSendManager::SendSkillPresetAddResult(int nRetCode)
{
SCSKillSaveResult packet;
memset(&packet, 0, sizeof(SCSKillSaveResult));
packet.nRetCode = nRetCode;
m_pSession->AddSendData(SC_SKILL, eSkill::SC_SAVE_SKILLSET, (char*)&packet, sizeof(SCSKillSaveResult));
}
void CDNUserSendManager::SendSkillPresetDelResult(int nRetCode)
{
SCSKillDeleteResult packet;
memset(&packet, 0, sizeof(SCSKillDeleteResult));
packet.nRetCode = nRetCode;
m_pSession->AddSendData(SC_SKILL, eSkill::SC_DELETE_SKILLSET, (char*)&packet, sizeof(SCSKillDeleteResult));
}
#endif //#ifdef PRE_ADD_PRESET_SKILLTREE
#if defined( PRE_WORLDCOMBINE_PVP )
void CDNUserSendManager::SendWorldPvPRoomStartMsg( bool bShow, UINT uiPvPIndex )
{
WorldPvPMissionRoom::SCWorldPvPRoomStartMsg packet;
memset(&packet, 0, sizeof(WorldPvPMissionRoom::SCWorldPvPRoomStartMsg));
packet.bShow = bShow;
packet.uiPvPIndex = uiPvPIndex;
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_WORLDPVPROOM_STARTMSG, (char*)&packet, sizeof(WorldPvPMissionRoom::SCWorldPvPRoomStartMsg));
}
void CDNUserSendManager::SendWorldPvPRoomStartResult( int nRet )
{
WorldPvPMissionRoom::SCWorldPvPRoomStartReturn packet;
memset(&packet, 0, sizeof(WorldPvPMissionRoom::SCWorldPvPRoomStartReturn));
packet.nRet = nRet;
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_WORLDPVPROOM_START_RESULT, (char*)&packet, sizeof(WorldPvPMissionRoom::SCWorldPvPRoomStartReturn));
}
void CDNUserSendManager::SendWorldPvPRoomJoinResult( int nRet )
{
WorldPvPMissionRoom::SCWorldPvPRoomJoinResult packet;
memset(&packet, 0, sizeof(WorldPvPMissionRoom::SCWorldPvPRoomJoinResult));
packet.nRet = nRet;
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_WORLDPVPROOM_JOIN_RESULT, (char*)&packet, sizeof(WorldPvPMissionRoom::SCWorldPvPRoomJoinResult));
}
void CDNUserSendManager::SendWorldPvPRoomAllKillTeamInfo( UINT* nSessionID, int* nTeam )
{
WorldPvPMissionRoom::SCWorldPvPRoomAllKillTeamInfo packet;
memset(&packet, 0, sizeof(WorldPvPMissionRoom::SCWorldPvPRoomAllKillTeamInfo));
for( int i=0;i<PARTYMAX;i++ )
{
if( nSessionID[i] > 0 )
{
packet.nSessionID[i] = nSessionID[i];
packet.nTeam[i] = nTeam[i];
}
else
break;
}
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_WORLDPVPROOM_ALLKILLTEAMINFO, (char*)&packet, sizeof(WorldPvPMissionRoom::SCWorldPvPRoomAllKillTeamInfo));
}
void CDNUserSendManager::SendWorldPvPRoomTournamentUserInfo( BYTE cUserCount, PvPCommon::UserInfoList *TournamentUserInfo, int nSize )
{
WorldPvPMissionRoom::SCWorldPvPRoomTournamentUserInfo packet;
memset(&packet, 0, sizeof(WorldPvPMissionRoom::SCWorldPvPRoomTournamentUserInfo));
packet.cUserCount = cUserCount;
memcpy(&packet.UserInfoList, TournamentUserInfo, sizeof(PvPCommon::UserInfoList) );
nSize += sizeof(packet.cUserCount);
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_WORLDPVPROOM_TOURNAMENTUSERINFO, (char*)&packet, nSize);
}
#endif
#if defined( PRE_ADD_PVP_COMBOEXERCISE )
void CDNUserSendManager::SendPvPComboExerciseRoomMasterInfo( UINT uiRoomMasterSessionID )
{
SCPvPComboExerciseRoomMasterInfo packet;
memset(&packet, 0, sizeof(SCPvPComboExerciseRoomMasterInfo));
packet.uiRoomMasterSessionID = uiRoomMasterSessionID;
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_COMBOEXERCISE_ROOMMASTERINFO, (char*)&packet, sizeof(SCPvPComboExerciseRoomMasterInfo));
}
void CDNUserSendManager::SendPvPComboExerciseChangeRoomMaster( UINT uiRoomMasterSessionID )
{
SCPvPComboExerciseChangeRoomMaster packet;
memset(&packet, 0, sizeof(SCPvPComboExerciseChangeRoomMaster));
packet.uiRoomMasterSessionID = uiRoomMasterSessionID;
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_COMBOEXERCISE_CHANGEROOMMASTER, (char*)&packet, sizeof(SCPvPComboExerciseChangeRoomMaster));
}
void CDNUserSendManager::SendPvPComboExerciseRecallMonsterResult( int nRetCode )
{
SCPvPComboExerciseRecallMonsterResult packet;
memset(&packet, 0, sizeof(SCPvPComboExerciseRecallMonsterResult));
packet.nRet = nRetCode;
m_pSession->AddSendData(SC_PVP, ePvP::SC_PVP_COMBOEXERCISE_RECALLMONSTERRESULT, (char*)&packet, sizeof(SCPvPComboExerciseRecallMonsterResult));
}
#endif // #if defined( PRE_ADD_PVP_COMBOEXERCISE )
#if defined( PRE_ALTEIAWORLD_EXPLORE )
void CDNUserSendManager::SendAlteiaWorldJoinInfo( BYTE cWeeklyClearCount, BYTE cDailyClearCount, BYTE cTicketCount )
{
AlteiaWorld::SCAlteiaWorldJoinInfo packet;
memset(&packet, 0, sizeof(AlteiaWorld::SCAlteiaWorldJoinInfo));
packet.cWeeklyClearCount = cWeeklyClearCount;
packet.cDailyClearCount = cDailyClearCount;
packet.cTicketCount = cTicketCount;
m_pSession->AddSendData(SC_ALTEIAWORLD, eAlteiaWorld::SC_ALTEIAWORLD_JOIN_INFO, (char*)&packet, sizeof(AlteiaWorld::SCAlteiaWorldJoinInfo));
}
void CDNUserSendManager::SendAlteiaWorldJoinResult( int nRetCode )
{
AlteiaWorld::SCAlteiaWorldJoinResult packet;
memset(&packet, 0, sizeof(AlteiaWorld::SCAlteiaWorldJoinResult));
packet.nRet = nRetCode;
m_pSession->AddSendData(SC_ALTEIAWORLD, eAlteiaWorld::SC_ALTEIAWORLD_JOIN_RESULT, (char*)&packet, sizeof(AlteiaWorld::SCAlteiaWorldJoinResult));
}
void CDNUserSendManager::SendAlteiaWorldSendTicket( const WCHAR* wszSendName, int nTicketCount/*=0*/ )
{
AlteiaWorld::SCAlteiaWorldSendTicket packet;
memset(&packet, 0, sizeof(AlteiaWorld::SCAlteiaWorldSendTicket));
_wcscpy( packet.wszCharacterName, _countof(packet.wszCharacterName), wszSendName, (int)wcslen(wszSendName));
packet.nTicketCount = nTicketCount;
m_pSession->AddSendData(SC_ALTEIAWORLD, eAlteiaWorld::SC_ALTEIAWORLD_SENDTICKET, (char*)&packet, sizeof(AlteiaWorld::SCAlteiaWorldSendTicket));
}
void CDNUserSendManager::SendAlteiaWorldSendTicketResult( int nRetCode, int nSendTicketCount )
{
AlteiaWorld::SCAlteiaWorldSendTicketResult packet;
memset(&packet, 0, sizeof(AlteiaWorld::SCAlteiaWorldSendTicketResult));
packet.nRet = nRetCode;
packet.nSendTicketCount = nSendTicketCount;
m_pSession->AddSendData(SC_ALTEIAWORLD, eAlteiaWorld::SC_ALTEIAWORLD_SENDTICKET_RESULT, (char*)&packet, sizeof(AlteiaWorld::SCAlteiaWorldSendTicketResult));
}
void CDNUserSendManager::SendAlteiaWorldDiceResult( int nRetCode, int nCount/*=0*/ )
{
AlteiaWorld::SCAlteiaWorldDiceResult packet;
memset(&packet, 0, sizeof(AlteiaWorld::SCAlteiaWorldDiceResult));
packet.nRet = nRetCode;
packet.nNumber = nCount;
m_pSession->AddSendData(SC_ALTEIAWORLD, eAlteiaWorld::SC_ALTEIAWORLD_DICE_RESULT, (char*)&packet, sizeof(AlteiaWorld::SCAlteiaWorldDiceResult));
}
#if defined( _VILLAGESERVER )
void CDNUserSendManager::SendAlteiaWorldPrivateGoldKeyRank( const TAGetAlteiaWorldPrivateGoldKeyRank *pPacket )
{
AlteiaWorld::SCAlteiaWorldPrivateGoldKeyRankingInfo packet;
memset(&packet, 0, sizeof(AlteiaWorld::SCAlteiaWorldPrivateGoldKeyRankingInfo));
packet.nMyBestGoldKeyCount = m_pSession->GetAlteiaBestGoldKeyCount();
packet.nCount = pPacket->nCount;
memcpy(&packet.MemberInfo, pPacket->RankMemberInfo, sizeof(packet.MemberInfo) );
m_pSession->AddSendData(SC_ALTEIAWORLD, eAlteiaWorld::SC_ALTEIAWORLD_PRIVATEGOLDKEYRANKING_INFO, (char*)&packet, sizeof(AlteiaWorld::SCAlteiaWorldPrivateGoldKeyRankingInfo));
}
void CDNUserSendManager::SendAlteiaWorldPrivatePlayTimeRank( const TAGetAlteiaWorldPrivatePlayTimeRank *pPacket )
{
AlteiaWorld::SCAlteiaWorldPrivatePlayTimeRankingInfo packet;
memset(&packet, 0, sizeof(AlteiaWorld::SCAlteiaWorldPrivatePlayTimeRankingInfo));
packet.nPlaySec = m_pSession->GetAlteiaBestPlayTime();
packet.nCount = pPacket->nCount;
memcpy(&packet.MemberInfo, pPacket->RankMemberInfo, sizeof(packet.MemberInfo) );
m_pSession->AddSendData(SC_ALTEIAWORLD, eAlteiaWorld::SC_ALTEIAWORLD_PRIVATEPLAYTIMERANKING_INFO, (char*)&packet, sizeof(AlteiaWorld::SCAlteiaWorldPrivatePlayTimeRankingInfo));
}
void CDNUserSendManager::SendAlteiaWorldGuildGoldKeyRank( const TAGetAlteiaWorldGuildGoldKeyRank *pPacket )
{
AlteiaWorld::SCAlteiaWorldGuildGoldKeyRankingInfo packet;
memset(&packet, 0, sizeof(AlteiaWorld::SCAlteiaWorldGuildGoldKeyRankingInfo));
packet.nMyBestGoldKeyCount = m_pSession->GetAlteiaBestGoldKeyCount();
packet.nCount = pPacket->nCount;
memcpy(&packet.GuildRankInfo, pPacket->RankMemberInfo, sizeof(packet.GuildRankInfo) );
m_pSession->AddSendData(SC_ALTEIAWORLD, eAlteiaWorld::SC_ALTEIAWORLD_GUILDGOLDKEYRANKING_INFO, (char*)&packet, sizeof(AlteiaWorld::SCAlteiaWorldGuildGoldKeyRankingInfo));
}
void CDNUserSendManager::SendAlteiaWorldSendTicketInfo( INT64* biCharacterDBID, BYTE cTicketCount )
{
AlteiaWorld::SCAlteiaWorldSendTicketInfo packet;
memset(&packet, 0, sizeof(AlteiaWorld::SCAlteiaWorldSendTicketInfo));
memcpy(&packet.biCharacterDBID, biCharacterDBID, sizeof(packet.biCharacterDBID) );
packet.cSendTicketCount = cTicketCount;
m_pSession->AddSendData(SC_ALTEIAWORLD, eAlteiaWorld::SC_ALTEIAWORLD_SENDTICKET_INFO, (char*)&packet, sizeof(AlteiaWorld::SCAlteiaWorldSendTicketInfo));
}
#endif
#endif // #if defined( PRE_ALTEIAWORLD_EXPLORE )
#if defined(PRE_ADD_GAMEQUIT_REWARD)
void CDNUserSendManager::SendGameQuitRewardType(GameQuitReward::RewardType::eType eRewardType)
{
SCGameQuitRewardCheckRes packet;
memset(&packet, 0, sizeof(SCGameQuitRewardCheckRes));
packet.eRewardType = eRewardType;
m_pSession->AddSendData(SC_ETC, eEtc::SC_GAMEQUIT_REWARDCHECK_RES, (char*)&packet, sizeof(SCGameQuitRewardCheckRes));
}
void CDNUserSendManager::SendGameQuitRewardResult(int nRet)
{
SCGameQuitRewardRes packet;
memset(&packet, 0, sizeof(SCGameQuitRewardRes));
packet.nRet = nRet;
m_pSession->AddSendData(SC_ETC, eEtc::SC_GAMEQUIT_REWARD_RES, (char*)&packet, sizeof(SCGameQuitRewardRes));
}
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
#if defined( PRE_ADD_STAMPSYSTEM )
void CDNUserSendManager::SendStampSystemInit(int nWeekDay, INT64 biTableStartTime, bool * pCompleteFlagData)
{
using namespace StampSystem;
SCStampSystemInit packet;
memset(&packet, 0, sizeof(SCStampSystemInit));
packet.nWeekDay = nWeekDay;
packet.biTableStartTime = biTableStartTime;
memcpy(packet.bCompleteFlagData, pCompleteFlagData, sizeof(bool) * Common::MaxStampSlotCount);
m_pSession->AddSendData(SC_STAMPSYSTEM, eStampSystem::SC_STAMPSYSTEM_INIT, (char*)&packet, sizeof(SCStampSystemInit));
}
void CDNUserSendManager::SendStampSystemAddComplete(int nChallengeIndex, int nWeekDay)
{
using namespace StampSystem;
SCStampSystemAddComplete packet;
memset(&packet, 0, sizeof(SCStampSystemAddComplete));
packet.nChallengeIndex = nChallengeIndex;
packet.nWeekDay = nWeekDay;
m_pSession->AddSendData(SC_STAMPSYSTEM, eStampSystem::SC_STAMPSYSTEM_ADD_COMPLETE, (char*)&packet, sizeof(SCStampSystemAddComplete));
}
void CDNUserSendManager::SendStampSystemClear()
{
using namespace StampSystem;
m_pSession->AddSendData(SC_STAMPSYSTEM, eStampSystem::SC_STAMPSYSTEM_CLEAR_COMPLETE, NULL, 0);
}
void CDNUserSendManager::SendStampSystemChangeWeekDay(int nWeekDay)
{
using namespace StampSystem;
SCStampSystemChangeWeekDay packet;
memset(&packet, 0, sizeof(SCStampSystemChangeWeekDay));
packet.nWeekDay = nWeekDay;
m_pSession->AddSendData(SC_STAMPSYSTEM, eStampSystem::SC_STAMPSYSTEM_CHANGE_WEEKDAY, (char*)&packet, sizeof(SCStampSystemChangeWeekDay));
}
void CDNUserSendManager::SendStampSystemChangeTable(INT64 biTableStartTime)
{
using namespace StampSystem;
SCStampSystemChangeTable packet;
memset(&packet, 0, sizeof(SCStampSystemChangeTable));
packet.biTableStartTime = biTableStartTime;
m_pSession->AddSendData(SC_STAMPSYSTEM, eStampSystem::SC_STAMPSYSTEM_CHANGE_TABLE, (char*)&packet, sizeof(SCStampSystemChangeTable));
}
#endif // #if defined( PRE_ADD_STAMPSYSTEM )
#if defined( PRE_ADD_PVP_EXPUP_ITEM )
void CDNUserSendManager::SendUsePvPExpupItem(int nRet, BYTE cLevel, UINT uiXP, int nIncrement)
{
SCUsePvPExpup packet;
memset(&packet, 0, sizeof(SCUsePvPExpup));
packet.nRet = nRet;
packet.cLevel = cLevel;
packet.uiXP = uiXP;
packet.nIncrement = nIncrement;
m_pSession->AddSendData(SC_ITEM, eItem::SC_USE_PVPEXPUP, (char*)&packet, sizeof(SCUsePvPExpup));
}
#endif // #if defined( PRE_ADD_PVP_EXPUP_ITEM )
#if defined(PRE_ADD_TALISMAN_SYSTEM)
void CDNUserSendManager::SendOpenTalismanSlot(int nRet, int nTalismanOpenFlag)
{
SCOpenTalismanSlot packet;
memset(&packet, 0, sizeof(SCOpenTalismanSlot));
packet.nRet = nRet;
packet.nTalismanOpenFlag = nTalismanOpenFlag;
m_pSession->AddSendData(SC_ITEM, eItem::SC_OPEN_TALISMANSLOT, (char*)&packet, sizeof(SCOpenTalismanSlot));
}
#endif
#if defined( PRE_DRAGONBUFF )
void CDNUserSendManager::SendWorldBuffMsg( WCHAR* wszCharacterName, int nItemID )
{
SCWorldBuffMsg packet;
memset(&packet, 0, sizeof(SCWorldBuffMsg));
if( wszCharacterName )
_wcscpy( packet.wszCharacterName, _countof(packet.wszCharacterName), wszCharacterName, (int)wcslen(wszCharacterName));
packet.nItemID = nItemID;
m_pSession->AddSendData( SC_ETC, eEtc::SC_WORLDBUFFMSG, (char*)&packet, sizeof(SCWorldBuffMsg));
}
#endif
#if defined( PRE_ADD_GUILD_CONTRIBUTION )
void CDNUserSendManager::SendGuildContributionPoint( int nWeeklyContributionPoint, int nTotalContributionPoint )
{
GuildContribution::SCGuildContributionPoint packet;
memset(&packet, 0, sizeof(GuildContribution::SCGuildContributionPoint));
packet.nWeeklyContributionPoint = nWeeklyContributionPoint;
packet.nTotalContributionPoint = nTotalContributionPoint;
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILD_CONTRIBUTION_POINT, (char*)&packet, sizeof(GuildContribution::SCGuildContributionPoint));
}
void CDNUserSendManager::SendGuildWeeklyContributionRankList( const TAGetGuildContributionRanking* pData )
{
GuildContribution::SCGuildContributionRank packet;
memset(&packet, 0, sizeof(GuildContribution::SCGuildContributionRank));
packet.nCount = pData->nCount;
memcpy(packet.Data, pData->ContributionRankingList, sizeof(GuildContribution::TGuildContributionRankingData) * pData->nCount);
int nLen = sizeof(GuildContribution::SCGuildContributionRank) - sizeof(GuildContribution::TGuildContributionRankingData) * (GUILDSIZE_MAX - pData->nCount);
m_pSession->AddSendData(SC_GUILD, eGuild::SC_GUILD_CONTRIBUTION_RANK, (char*)&packet, nLen);
}
#endif // #if defined( PRE_ADD_GUILD_CONTRIBUTION )
#if defined(PRE_ADD_DWC)
void CDNUserSendManager::SendDismissDWCTeam(UINT nTeamID, int nRet)
{
SCDismissDWCTeam packet;
memset(&packet, 0, sizeof(SCDismissDWCTeam));
packet.nRet = nRet;
packet.nTeamID = nTeamID;
m_pSession->AddSendData( SC_DWC, eDWC::SC_DISMISS_DWCTEAM, (char*)&packet, sizeof(SCDismissDWCTeam));
}
void CDNUserSendManager::SendLeaveDWCTeamMember(UINT nTeamID, INT64 biLeaveUserCharacterDBID, LPCWSTR lpwszCharacterName, int nRet)
{
SCLeaveDWCTeamMember packet;
memset(&packet, 0, sizeof(SCLeaveDWCTeamMember));
packet.nRet = nRet;
packet.nTeamID = nTeamID;
packet.biLeaveUserCharacterDBID = biLeaveUserCharacterDBID;
_wcscpy( packet.wszCharacterName, _countof(packet.wszCharacterName), lpwszCharacterName, (int)wcslen(lpwszCharacterName));
m_pSession->AddSendData( SC_DWC, eDWC::SC_LEAVE_DWCTEAM_MEMB, (char*)&packet, sizeof(SCLeaveDWCTeamMember));
}
void CDNUserSendManager::SendChangeDWCTeamMemberState(UINT nTeamID, INT64 biCharacterDBID, TCommunityLocation* pLocation)
{
SCChangeDWCTeamMemberState packet;
memset(&packet, 0, sizeof(SCChangeDWCTeamMemberState));
packet.nTeamID = nTeamID;
packet.biCharacterDBID = biCharacterDBID;
if(pLocation)
packet.Location = (*pLocation);
m_pSession->AddSendData( SC_DWC, eDWC::SC_CHANGE_DWCTEAM_MEMBERSTATE, (char*)&packet, sizeof(SCChangeDWCTeamMemberState));
}
void CDNUserSendManager::SendInviteDWCTeamMemberAck(UINT nToAccountDBID, INT64 biToCharacterDBID, LPCWSTR lpwszToCharacterName, int nRet, UINT nFromAccountDBID, INT64 biFromCharacterDBID, TP_JOB nJob, TCommunityLocation* pLocation, UINT nTeamID)
{
SCInviteDWCTeamMemberAck Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nToAccountDBID = nToAccountDBID;
Packet.biToCharacterDBID = biToCharacterDBID;
Packet.nFromAccountDBID = nFromAccountDBID;
Packet.biFromCharacterDBID = biFromCharacterDBID;
Packet.nTeamID = nTeamID;
Packet.nJob = nJob;
Packet.nRet = nRet;
_wcscpy(Packet.wszToCharacterName, _countof(Packet.wszToCharacterName), lpwszToCharacterName, (int)wcslen(lpwszToCharacterName));
if(pLocation) {
Packet.Location = (*pLocation);
}
m_pSession->AddSendData(SC_DWC, eDWC::SC_INVITE_DWCTEAM_MEMBACK, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
#if defined(_VILLAGESERVER)
void CDNUserSendManager::SendCreateDWCTeam(int nRet, UINT nSessionID, LPCWSTR lpwszTeamdName, UINT nTeamID )
{
SCCreateDWCTeam packet;
memset(&packet, 0, sizeof(SCCreateDWCTeam));
packet.nRet = nRet;
packet.nSessionID = nSessionID;
packet.nTeamID = nTeamID;
_wcscpy( packet.wszTeamName, _countof(packet.wszTeamName), lpwszTeamdName, (int)wcslen(lpwszTeamdName));
m_pSession->AddSendData( SC_DWC, eDWC::SC_CREATE_DWCTEAM, (char*)&packet, sizeof(SCCreateDWCTeam));
}
void CDNUserSendManager::SendGetDWCTeamInfo(CDnDWCTeam* pDWCTeam, int nRet)
{
SCGetDWCTeamInfo packet;
memset(&packet, 0, sizeof(SCGetDWCTeamInfo));
packet.nRet = nRet;
if(pDWCTeam)
{
packet.nTeamID = pDWCTeam->GetTeamID();
const TDWCTeam* pTeamInfo = pDWCTeam->GetTeamInfo();
if(pTeamInfo)
packet.Info = *pTeamInfo;
m_pSession->AddSendData( SC_DWC, eDWC::SC_GET_DWCTEAM_INFO, (char*)&packet, sizeof(SCGetDWCTeamInfo));
}
else
m_pSession->AddSendData( SC_DWC, eDWC::SC_GET_DWCTEAM_INFO, (char*)&packet, sizeof(SCGetDWCTeamInfo) - sizeof(TDWCTeam));
}
void CDNUserSendManager::SendGetDWCTeamMember(CDnDWCTeam* pDWCTeam, int nRet)
{
SCGetDWCTeamMember packet;
memset(&packet, 0, sizeof(SCGetDWCTeamMember));
packet.nRet = nRet;
if(pDWCTeam)
{
packet.nTeamID = pDWCTeam->GetTeamID();
if( pDWCTeam->GetRecvMemberList() )
{
std::vector<TDWCTeamMember> vecMemberList;
pDWCTeam->GetMemberList(vecMemberList);
for(int i=0; i < MIN(vecMemberList.size(), DWC::DWC_MAX_MEMBERISZE); i++)
{
packet.MemberList[i] = vecMemberList[i];
packet.nCount++;
}
}
}
int nSize = sizeof(SCGetDWCTeamMember) - ((DWC::DWC_MAX_MEMBERISZE - packet.nCount) * sizeof(TDWCTeamMember));
m_pSession->AddSendData( SC_DWC, eDWC::SC_GET_DWCTEAM_MEMBER, (char*)&packet, nSize );
}
void CDNUserSendManager::SendInviteDWCTeamMemberReq(UINT nTeamID, UINT nFromAccountDBID, LPCWSTR lpwszFromCharacterName, LPCWSTR lpwszTeamName)
{
SCInviteDWCTeamMemberReq Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nTeamID = nTeamID;
Packet.nFromAccountDBID = nFromAccountDBID;
_wcscpy(Packet.wszFromCharacterName, _countof(Packet.wszFromCharacterName), lpwszFromCharacterName, (int)wcslen(lpwszFromCharacterName));
if(lpwszTeamName)
_wcscpy(Packet.wszTeamName, _countof(Packet.wszTeamName), lpwszTeamName, (int)wcslen(lpwszTeamName));
m_pSession->AddSendData(SC_DWC, eDWC::SC_INVITE_DWCTEAM_MEMBREQ, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendInviteDWCTeamMemberAck(int nRet)
{
SendInviteDWCTeamMemberAck(0, 0, L"", nRet, 0, 0, 0, NULL, 0);
}
void CDNUserSendManager::SendInviteDWCTeamMemberAckResult(int nRet)
{
SCInviteDWCTeamMemberAckResult Packet;
Packet.nRet = nRet;
m_pSession->AddSendData(SC_DWC, eDWC::SC_INVITE_DWCTEAM_MEMBACK_RESULT, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNUserSendManager::SendDWCRankResult(int nRet, UINT nTotalRankSize, int nPageNum, int nPageSize, const TDWCRankData * pDataRank)
{
SCGetDWCRankPage packet;
memset(&packet, 0, sizeof(SCGetDWCRankPage));
packet.nRetCode = nRet;
packet.nTotalRankSize = nTotalRankSize;
packet.nPageNum = nPageNum;
packet.nPageSize = nPageSize;
if (packet.nPageSize > 0)
memcpy_s(packet.RankDataList, sizeof(packet.RankDataList), pDataRank, sizeof(TDWCRankData) * packet.nPageSize);
m_pSession->AddSendData(SC_DWC, eDWC::SC_GET_DWC_RANKPAGE, reinterpret_cast<char*>(&packet), sizeof(packet) - sizeof(packet.RankDataList) + (sizeof(TDWCRankData) * packet.nPageSize));
}
void CDNUserSendManager::SendDWCFindRankResult(int nRet, const TDWCRankData * pDataRank)
{
SCGetDWCFindRank packet;
memset(&packet, 0, sizeof(SCGetDWCFindRank));
packet.nRetCode = nRet;
if (pDataRank && pDataRank->nTeamID > 0)
packet.Rank = *pDataRank;
m_pSession->AddSendData(SC_DWC, eDWC::SC_GET_DWC_FINDRANK, reinterpret_cast<char*>(&packet), sizeof(packet));
}
void CDNUserSendManager::SendDWCChannelInfo()
{
SCDWCChannelInfo packet;
memset(&packet, 0, sizeof(SCDWCChannelInfo));
if(g_pDWCTeamManager)
g_pDWCTeamManager->GetDWCChannelInfo(packet.ChannelInfo);
m_pSession->AddSendData(SC_DWC, eDWC::SC_DWCCHANNELINFO, (char*)&packet, sizeof(SCDWCChannelInfo));
}
void CDNUserSendManager::SendDWCTeamName(UINT nSessionID, LPCWSTR lpwszTeamName)
{
SCChangeDWCTeam Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.nSessionID = nSessionID;
if(lpwszTeamName)
_wcscpy(Packet.wszTeamName, _countof(Packet.wszTeamName), lpwszTeamName, (int)wcslen(lpwszTeamName));
m_pSession->AddSendData(SC_DWC, eDWC::SC_CHANGE_DWCTEAM, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
#endif //#if defined(_VILLAGESERVER)
#endif //#if defined(PRE_ADD_DWC)
#if defined(PRE_ADD_EQUIPLOCK)
void CDNUserSendManager::SendLockItems(CDNUserItem* pItem)
{
SCEquipItemLockList packet;
memset(&packet, 0, sizeof(SCEquipItemLockList));
pItem->GetLockItemList(packet.nEquipCount, packet.nCashEquipCount, packet.LockItems);
int nSize = sizeof(SCEquipItemLockList) - sizeof(EquipItemLock::TLockItemInfo) * (EQUIPMAX + CASHEQUIPMAX - packet.nEquipCount - packet.nCashEquipCount);
m_pSession->AddSendData(SC_ITEM, eItem::SC_EQUIPITEM_LOCKLIST, (char*)&packet, nSize);
}
void CDNUserSendManager::SendAddLockItem(int nRet, DBDNWorldDef::ItemLocation::eCode Code, char cSlotIndex, __time64_t tLockDate)
{
SCItemLockRes packet;
memset(&packet, 0, sizeof(SCItemLockRes));
packet.nRet = nRet;
if(nRet == ERROR_NONE)
{
packet.LockItems.ItemData.eItemLockStatus = EquipItemLock::Lock;
packet.LockItems.cItemSlotIndex = cSlotIndex;
packet.LockItems.ItemData.tUnLockDate = tLockDate;
packet.IsCashEquip = (Code == DBDNWorldDef::ItemLocation::CashEquip);
}
m_pSession->AddSendData(SC_ITEM, eItem::SC_ITEM_LOCK_RES, (char*)&packet, sizeof(packet));
}
void CDNUserSendManager::SendRequestUnlockItem(int nRet, DBDNWorldDef::ItemLocation::eCode Code, char cSlotIndex, __time64_t tUnLockDate, __time64_t tUnLockRequestDate)
{
SCItemLockRes packet;
memset(&packet, 0, sizeof(SCItemLockRes));
packet.nRet = nRet;
if(nRet == ERROR_NONE)
{
packet.LockItems.cItemSlotIndex = cSlotIndex;
packet.LockItems.ItemData.eItemLockStatus = EquipItemLock::RequestUnLock;
packet.LockItems.ItemData.tUnLockDate = tUnLockDate;
packet.LockItems.ItemData.tUnLockRequestDate = tUnLockRequestDate;
packet.IsCashEquip = (Code == DBDNWorldDef::ItemLocation::CashEquip);
}
m_pSession->AddSendData(SC_ITEM, eItem::SC_ITEM_UNLOCK_RES, (char*)&packet, sizeof(packet));
}
#endif // #if defined(PRE_ADD_EQUIPLOCK)
void CDNUserSendManager::SendOpenChangeJobDialog()
{
SCOpenChangeJobDialog packet;
memset(&packet, 0, sizeof(SCOpenTextureDialog));
packet.nNextClass = 0; //rlkt_test
m_pSession->AddSendData(SC_NPC, eNpc::SC_OPEN_CHANGEJOB_DIALOG, (char*)&packet, sizeof(packet));
}