PHP Code:
#include "stdafx.h"
#include "./GLChar.h"
#include "./GLogicEx.h"
#include "./GLGaeaServer.h"
#include "./GLItemLMT.h"
#include "./GLItemMan.h"
#include "../enginelib/Common/StringUtils.h"
#include "RanFilter.h"
#include "./GLItemMixMan.h"
//crashfix
//#include "../../RanClientUILib/Interface/GameTextControl.h"
//#include "../../RanClientUILib/Interface/InnerInterface.h"
//#include "../../RanClientUILib/Interface/UITextControl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// Note : Àκ¥¾ÆÀÌÅÛÀ» ¼Ò¸ð½ÃÅ´.
// 2. ¼Ò¸ð¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡ ¾Ë¸².
// 3. b2AGENT º¯¼ö´Â Ŭ¶óÀÌ¾ðÆ®¿¡ ¾Ë¸±¶§ Çʵå¿ÍÀÇ ¿¬°á¼ºÀÌ ºÒÈ®½Ç ÇÒ °æ¿ì¸¦ ´ëºñÇÏ¿©
// ¿¡ÀÌÁ¯Æ®¸¦ ÅëÇØ¼ ¾Ë¸±¼ö ÀÖµµ·Ï ÇÔ.
bool GLChar::DoDrugInvenItem ( WORD wPosX, WORD wPosY, bool b2AGENT )
{
// Àκ¥ÀÇ ¾ÆÀÌÅÛ È®ÀÎ.
SINVENITEM *pINVENITEM = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pINVENITEM ) return false;
// ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿È.
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( !pItem ) return false;
if ( pItem->sDrugOp.bInstance )
{
if ( pINVENITEM->sItemCustom.wTurnNum > 0 ) pINVENITEM->sItemCustom.wTurnNum--;
// Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
//
GLITEMLMT::GetInstance().ReqItemRoute ( pINVENITEM->sItemCustom, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_DELETE, 1 );
if ( pINVENITEM->sItemCustom.wTurnNum==0 )
{
// ¾ÆÀÌÅÆ Á¦°Å.
m_cInventory.DeleteItem ( wPosX, wPosY );
// [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
NetMsg_Inven_Delete.wPosX = wPosX;
NetMsg_Inven_Delete.wPosY = wPosY;
if ( b2AGENT ) GLGaeaServer::GetInstance().SENDTOAGENT(m_dwClientID,&NetMsg_Inven_Delete);
else GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Delete);
}
else
{
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÆ ¼Ò¸ðµÊ.
GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg_Inven_Update;
NetMsg_Inven_Update.wPosX = wPosX;
NetMsg_Inven_Update.wPosY = wPosY;
NetMsg_Inven_Update.wTurnNum = pINVENITEM->sItemCustom.wTurnNum;
if ( b2AGENT ) GLGaeaServer::GetInstance().SENDTOAGENT(m_dwClientID,&NetMsg_Inven_Update);
else GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Update);
}
}
// ÄðŸÀÓ Àû¿ë
if ( pItem->sBasicOp.IsCoolTime() )
{
SetCoolTime( pINVENITEM->sItemCustom.sNativeID , pItem->sBasicOp.emCoolType );
}
return true;
}
bool GLChar::DoDrugSlotItem ( EMSLOT emSLOT, WORD wNum )
{
if ( emSLOT >= SLOT_TSIZE ) return false;
SITEMCUSTOM& sSLOTITEM = m_PutOnItems[emSLOT];
SITEM* pItem = GLItemMan::GetInstance().GetItem ( sSLOTITEM.sNativeID );
if ( !pItem ) return false;
// ¼Ò¸ð¼º ¾ÆÀÌÅÛÀÏ °æ¿ì
if ( pItem->ISINSTANCE() )
{
if ( sSLOTITEM.wTurnNum >= wNum ) sSLOTITEM.wTurnNum -= wNum;
// Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
//
GLITEMLMT::GetInstance().ReqItemRoute ( sSLOTITEM, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_DELETE, sSLOTITEM.wTurnNum );
if ( sSLOTITEM.wTurnNum==0 )
{
// HOLD ¾ÆÀÌÅÆ Á¦°Å.
RELEASE_SLOT_ITEM ( emSLOT );
// [Àڽſ¡°Ô] ½½·Ô¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_PUTON_RELEASE NetMsg_Release(emSLOT);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Release);
}
else
{
// [Àڽſ¡°Ô] ¿¬¸¶Á¦ÀÇ ¿¬¸¶°¡´É Ƚ¼ö °¨¼Ò.
GLMSG::SNETPC_PUTON_DRUG_UPDATE NetMsg_Update;
NetMsg_Update.emSlot = emSLOT;
NetMsg_Update.wTurnNum = sSLOTITEM.wTurnNum;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Update);
}
}
else
{
// ±âÇÑ ¾ÆÀÌÅÛÀÏ °æ¿ì
GLITEMLMT::GetInstance().ReqItemRoute ( sSLOTITEM, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_DELETE, 0 );
}
// ÄðŸÀÓ Àû¿ë
if ( pItem->sBasicOp.IsCoolTime() )
{
SetCoolTime( sSLOTITEM.sNativeID , pItem->sBasicOp.emCoolType );
}
return true;
}
bool GLChar::IsInsertToInven ( PITEMDROP pItemDrop, bool bVietnamInven )
{
GASSERT(pItemDrop&&"GLChar::IsItemToInven()");
if ( !pItemDrop ) return false;
SITEM *pItem = GLItemMan::GetInstance().GetItem(pItemDrop->sItemCustom.sNativeID);
if ( !pItem ) return false;
if ( pItem->ISPILE() )
{
WORD wINVENX = pItem->sBasicOp.wInvenSizeX;
WORD wINVENY = pItem->sBasicOp.wInvenSizeY;
// °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
WORD wPILENUM = pItem->sDrugOp.wPileNum;
SNATIVEID sNID = pItem->sBasicOp.sNativeID;
// ³Ö±â ¿äûµÈ ¾ÆÀÌÅÛ¼ö. ( ÀÜ¿©·®. )
WORD wREQINSRTNUM = ( pItemDrop->sItemCustom.wTurnNum );
BOOL bITEM_SPACE = TRUE;
if( bVietnamInven )
bITEM_SPACE = m_cVietnamInventory.ValidPileInsrt ( wREQINSRTNUM, sNID, wPILENUM, wINVENX, wINVENY );
else
bITEM_SPACE = m_cInventory.ValidPileInsrt ( wREQINSRTNUM, sNID, wPILENUM, wINVENX, wINVENY );
if ( !bITEM_SPACE ) return false;
}
else
{
WORD wPosX, wPosY;
BOOL bOk = TRUE;
if( bVietnamInven )
bOk = m_cVietnamInventory.FindInsrtable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
else
bOk = m_cInventory.FindInsrtable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk ) return false;
}
return true;
}
/* ºñȰ¼ºÈ Àκ¥Å丮¿¡µµ ¹«¾ð°¡ ³ÖÀ»¼ö ÀÖ´Ù.*/
bool GLChar::IsInsertToInvenEx ( PITEMDROP pItemDrop )
{
GASSERT(pItemDrop&&"GLChar::IsItemToInven()");
if ( !pItemDrop ) return false;
SITEM *pItem = GLItemMan::GetInstance().GetItem(pItemDrop->sItemCustom.sNativeID);
if ( !pItem ) return false;
if ( pItem->ISPILE() )
{
WORD wINVENX = pItem->sBasicOp.wInvenSizeX;
WORD wINVENY = pItem->sBasicOp.wInvenSizeY;
// °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
WORD wPILENUM = pItem->sDrugOp.wPileNum;
SNATIVEID sNID = pItem->sBasicOp.sNativeID;
// ³Ö±â ¿äûµÈ ¾ÆÀÌÅÛ¼ö. ( ÀÜ¿©·®. )
WORD wREQINSRTNUM = ( pItemDrop->sItemCustom.wTurnNum );
BOOL bITEM_SPACE = m_cInventory.ValidPileInsrt ( wREQINSRTNUM, sNID, wPILENUM, wINVENX, wINVENY, true );
if ( !bITEM_SPACE ) return false;
}
else
{
WORD wPosX, wPosY;
BOOL bOk = m_cInventory.FindInsrtable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY, true );
if ( !bOk ) return false;
}
return true;
}
HRESULT GLChar::InsertToVNGainInven( PITEMDROP pItemDrop )
{
GASSERT(pItemDrop&&"GLChar::InsertToInven()");
if ( !pItemDrop ) return E_FAIL;
SITEM *pItem = GLItemMan::GetInstance().GetItem(pItemDrop->sItemCustom.sNativeID);
if ( !pItem ) return E_FAIL;
bool bITEM_SPACE = IsInsertToInven ( pItemDrop, TRUE );
if ( !bITEM_SPACE )
{
// ÀιêÀÌ °¡µæÂ÷¼ ¾ÆÀÌÅÆÀ» ³ÖÀ»¼ö ¾ø½À´Ï´Ù.
GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
NetMsg.emCrow = CROW_ITEM;
NetMsg.emTakeFB = EMTAKE_FB_INVEN_ERROR;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
return E_FAIL;
}
if ( pItem->ISPILE() )
{
WORD wINVENX = pItem->sBasicOp.wInvenSizeX;
WORD wINVENY = pItem->sBasicOp.wInvenSizeY;
// °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
WORD wPILENUM = pItem->sDrugOp.wPileNum;
SNATIVEID sNID = pItem->sBasicOp.sNativeID;
// ³Ö±â ¿äûµÈ ¾ÆÀÌÅÛ¼ö. ( ÀÜ¿©·®. )
WORD wREQINSRTNUM = ( pItemDrop->sItemCustom.wTurnNum );
// Note : ´õ °ãÃÄÁú¼ö ÀÖ´Â ¾ÆÀÌÅÛÀÌ ÀÖ´ÂÁö °Ë»çÇÏ¿© Àκ¥¿¡ µé¾î°¡¾ßÇÏ´Â
// ¾ÆÀÌÅÛ Á¡°Ë ¼ýÀÚ¸¦ °¨¼Ò½ÃÅ´.
GLInventory::CELL_MAP &ItemMap = *m_cVietnamInventory.GetItemList();
GLInventory::CELL_MAP_ITER iter = ItemMap.begin();
for ( ; iter!=ItemMap.end(); ++iter )
{
SINVENITEM &sINVENITEM = *(*iter).second;
SITEMCUSTOM &sITEMCUSTOM = sINVENITEM.sItemCustom;
if ( sITEMCUSTOM.sNativeID != sNID ) continue;
if ( sITEMCUSTOM.wTurnNum>=wPILENUM ) continue;
// ±âÁ¸ ¾ÆÀÌÅÛ °ãħ ¿©À¯ºÐ.
WORD wSURPLUSNUM = wPILENUM - sITEMCUSTOM.wTurnNum;
if ( wREQINSRTNUM > wSURPLUSNUM )
{
// Note : ±âÁ¸ ¾ÆÀÌÅÛÀÇ °ãħÀ» º¯°æ. ( ²ËÂü )
sITEMCUSTOM.wTurnNum = wPILENUM;
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
NetMsg.bVietnamInven = TRUE;
NetMsg.wPosX = sINVENITEM.wPosX;
NetMsg.wPosY = sINVENITEM.wPosY;
NetMsg.wTurnNum = sITEMCUSTOM.wTurnNum;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
// Note : ÀÜ¿© ¼ö·® °¨¼Ò.
wREQINSRTNUM -= wSURPLUSNUM;
}
else
{
// Note : ±âÁ¸ ¾ÆÀÌÅÛ¿¡ °ãÄ¡´Â °Í ¸¸À¸·Îµµ »õ·Î ³ÖÀ» ¾ÆÀÌÅÛÀÌ ÃæºÐÈ÷ µé¾î°¨.
sITEMCUSTOM.wTurnNum += wREQINSRTNUM;
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
NetMsg.bVietnamInven = TRUE;
NetMsg.wPosX = sINVENITEM.wPosX;
NetMsg.wPosY = sINVENITEM.wPosY;
NetMsg.wTurnNum = sITEMCUSTOM.wTurnNum;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
// Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
//
GLPARTY_FIELD *pParty = GLGaeaServer::GetInstance().GetParty ( m_dwPartyID );
if ( pParty )
{
GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
NetMsg.dwGaeaID = m_dwGaeaID;
NetMsg.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
pParty->SENDMSG2NEAR ( this, &NetMsg );
}
// Note : ¾ÆÀÌÅÆ Land¿¡¼ »èÁ¦.
m_pLandMan->DropOutItem ( pItemDrop->dwGlobID );
return S_OK;
}
}
// Note : »õ·ÎÀÌ Àκ¥¿¡ µé¾î°¡¾ßÇÒ ¾ÆÀÌÅÛÀÇ °¹¼ö ÆÄ¾ÇÈÄ Àκ¥¿¡ µé¾î°¥ °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ç.
// ÃÖ´ë°ãħ¾ÆÀÌÅÛ ¼ö·®.
WORD wONENUM = wREQINSRTNUM / wPILENUM;
WORD wITEMNUM = wONENUM;
// ¿©ºÐ°ãħ¾ÆÀÌÅÛÀÇ °ãħ¼ö.
WORD wSPLITNUM = wREQINSRTNUM % wPILENUM;
if ( wSPLITNUM > 0 ) wITEMNUM += 1;
if ( wSPLITNUM==0 && wITEMNUM>=1 ) wSPLITNUM = wPILENUM;
for ( WORD i=0; i<wITEMNUM; ++i )
{
WORD wInsertPosX(0), wInsertPosY(0);
BOOL bSPACE = m_cVietnamInventory.FindInsrtable ( wINVENX, wINVENY, wInsertPosX, wInsertPosY );
GASSERT(bSPACE&&"³ÖÀ» °ø°£À» ¹Ì¸® üũ¸¦ ÇÏ°í ¾ÆÀÌÅÛÀ» ³Ö¾úÀ¸³ª °ø°£ÀÌ ºÎÁ·ÇÔ.");
if ( !bSPACE ) return E_FAIL; // ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.
// Note : »õ·Î¿î ¾ÆÀÌÅÛÀ» ³Ö¾îÁÜ.
//
SITEMCUSTOM sITEMCUSTOM = pItemDrop->sItemCustom;
if ( wITEMNUM==(i+1) ) sITEMCUSTOM.wTurnNum = wSPLITNUM; // ¸¶Áö¸· ¾ÆÀÌÅÛÀº ÀÜ¿©·®.
else sITEMCUSTOM.wTurnNum = wPILENUM; // ¾Æ´Ò °æ¿ì´Â ²ËÂù·®.
// ÀιêÅ丮¿¡ ³Ö½À´Ï´Ù.
sITEMCUSTOM.bVietnamGainItem = true;
m_cVietnamInventory.InsertItem ( sITEMCUSTOM, wInsertPosX, wInsertPosY );
SINVENITEM *pInvenItem = m_cVietnamInventory.GetItem ( wInsertPosX, wInsertPosY );
if ( !pInvenItem ) return E_FAIL; // ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.
// Àι꿡 ¾ÆÀÌÅÆ ³Ö¾îÁÖ´Â ¸Þ½ÃÁö.
GLMSG::SNETPC_INVEN_INSERT NetMsgInven;
NetMsgInven.bVietnamInven = TRUE;
NetMsgInven.Data = *pInvenItem;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInven);
}
// Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
//
GLPARTY_FIELD *pParty = GLGaeaServer::GetInstance().GetParty ( m_dwPartyID );
if ( pParty )
{
GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
NetMsg.dwGaeaID = m_dwGaeaID;
NetMsg.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
pParty->SENDMSG2NEAR ( this, &NetMsg );
}
// Note : ¾ÆÀÌÅÛ ½Àµæ½Ã ÀÚµ¿ Äù½ºÆ® ½ÃÀÛ Á¡°Ë.
// ³ªÁß¿¡ »ìÆìºÁ¾ß ÇÒ°÷
//QuestStartFromGetITEM ( pItemDrop->sItemCustom.sNativeID );
// Note : PILE °ãħ ¾ÆÀÌÅÛÀ̹ǷΠ·Î±× ÀÛ¼º ºÒ°¡´É.
//
// Note : ¾ÆÀÌÅÆ Land¿¡¼ »èÁ¦.
m_pLandMan->DropOutItem ( pItemDrop->dwGlobID );
}
else
{
WORD wPosX, wPosY;
BOOL bOk = m_cVietnamInventory.FindInsrtable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk ) return E_FAIL; // ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.
// Note : ¾ÆÀÌÅÆ Áݱ⠼º°ø.
pItemDrop->sItemCustom.bVietnamGainItem = true;
m_cVietnamInventory.InsertItem ( pItemDrop->sItemCustom, wPosX, wPosY );
SINVENITEM *pInvenItem = m_cVietnamInventory.GetItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL; // ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.
// Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
//
GLPARTY_FIELD *pParty = GLGaeaServer::GetInstance().GetParty ( m_dwPartyID );
if ( pParty )
{
GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
NetMsg.dwGaeaID = m_dwGaeaID;
NetMsg.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
pParty->SENDMSG2NEAR ( this, &NetMsg );
}
// [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.bVietnamInven = TRUE;
NetMsg_Inven.Data = *pInvenItem;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
// Note : ¾ÆÀÌÅÛ ½Àµæ½Ã ÀÚµ¿ Äù½ºÆ® ½ÃÀÛ Á¡°Ë.
// ³ªÁß¿¡ »ìÆìºÁ¾ß ÇÒ°÷
//QuestStartFromGetITEM ( pItemDrop->sItemCustom.sNativeID );
// Note : ¾ÆÀÌÅÆ Land¿¡¼ »èÁ¦.
m_pLandMan->DropOutItem ( pItemDrop->dwGlobID );
}
return S_OK;
}
HRESULT GLChar::InsertToInven ( PITEMDROP pItemDrop )
{
//NeedToSaveValue _C
GASSERT(pItemDrop&&"GLChar::InsertToInven()");
if ( !pItemDrop ) return E_FAIL;
SITEM *pItem = GLItemMan::GetInstance().GetItem(pItemDrop->sItemCustom.sNativeID);
if ( !pItem ) return E_FAIL;
bool bITEM_SPACE = IsInsertToInven ( pItemDrop );
if ( !bITEM_SPACE )
{
// ÀιêÀÌ °¡µæÂ÷¼ ¾ÆÀÌÅÆÀ» ³ÖÀ»¼ö ¾ø½À´Ï´Ù.
GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
NetMsg.emCrow = CROW_ITEM;
NetMsg.emTakeFB = EMTAKE_FB_INVEN_ERROR;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
return E_FAIL;
}
if ( pItem->ISPILE() )
{
WORD wINVENX = pItem->sBasicOp.wInvenSizeX;
WORD wINVENY = pItem->sBasicOp.wInvenSizeY;
// °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
WORD wPILENUM = pItem->sDrugOp.wPileNum;
SNATIVEID sNID = pItem->sBasicOp.sNativeID;
// ³Ö±â ¿äûµÈ ¾ÆÀÌÅÛ¼ö. ( ÀÜ¿©·®. )
WORD wREQINSRTNUM = ( pItemDrop->sItemCustom.wTurnNum );
// Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
//
GLITEMLMT::GetInstance().ReqItemRoute ( pItemDrop->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pItemDrop->sItemCustom.wTurnNum );
// Note : ´õ °ãÃÄÁú¼ö ÀÖ´Â ¾ÆÀÌÅÛÀÌ ÀÖ´ÂÁö °Ë»çÇÏ¿© Àκ¥¿¡ µé¾î°¡¾ßÇÏ´Â
// ¾ÆÀÌÅÛ Á¡°Ë ¼ýÀÚ¸¦ °¨¼Ò½ÃÅ´.
GLInventory::CELL_MAP &ItemMap = *m_cInventory.GetItemList();
GLInventory::CELL_MAP_ITER iter = ItemMap.begin();
for ( ; iter!=ItemMap.end(); ++iter )
{
SINVENITEM &sINVENITEM = *(*iter).second;
SITEMCUSTOM &sITEMCUSTOM = sINVENITEM.sItemCustom;
if ( sITEMCUSTOM.sNativeID != sNID ) continue;
if ( sITEMCUSTOM.wTurnNum>=wPILENUM ) continue;
// ±âÁ¸ ¾ÆÀÌÅÛ °ãħ ¿©À¯ºÐ.
WORD wSURPLUSNUM = wPILENUM - sITEMCUSTOM.wTurnNum;
if ( wREQINSRTNUM > wSURPLUSNUM )
{
// Note : ±âÁ¸ ¾ÆÀÌÅÛÀÇ °ãħÀ» º¯°æ. ( ²ËÂü )
sITEMCUSTOM.wTurnNum = wPILENUM;
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
NetMsg.wPosX = sINVENITEM.wPosX;
NetMsg.wPosY = sINVENITEM.wPosY;
NetMsg.wTurnNum = sITEMCUSTOM.wTurnNum;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
// Note : ÀÜ¿© ¼ö·® °¨¼Ò.
wREQINSRTNUM -= wSURPLUSNUM;
}
else
{
// Note : ±âÁ¸ ¾ÆÀÌÅÛ¿¡ °ãÄ¡´Â °Í ¸¸À¸·Îµµ »õ·Î ³ÖÀ» ¾ÆÀÌÅÛÀÌ ÃæºÐÈ÷ µé¾î°¨.
sITEMCUSTOM.wTurnNum += wREQINSRTNUM;
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
NetMsg.wPosX = sINVENITEM.wPosX;
NetMsg.wPosY = sINVENITEM.wPosY;
NetMsg.wTurnNum = sITEMCUSTOM.wTurnNum;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
// Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
//
GLPARTY_FIELD *pParty = GLGaeaServer::GetInstance().GetParty ( m_dwPartyID );
if ( pParty )
{
GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
NetMsg.dwGaeaID = m_dwGaeaID;
NetMsg.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
pParty->SENDMSG2NEAR ( this, &NetMsg );
}
GLMSG::SNETPC_PICKUP_ITEM NetMsgPickUp;
NetMsgPickUp.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPickUp);
// Note : ¾ÆÀÌÅÆ Land¿¡¼ »èÁ¦.
m_pLandMan->DropOutItem ( pItemDrop->dwGlobID );
return S_OK;
}
}
// Note : »õ·ÎÀÌ Àκ¥¿¡ µé¾î°¡¾ßÇÒ ¾ÆÀÌÅÛÀÇ °¹¼ö ÆÄ¾ÇÈÄ Àκ¥¿¡ µé¾î°¥ °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ç.
// ÃÖ´ë°ãħ¾ÆÀÌÅÛ ¼ö·®.
WORD wONENUM = wREQINSRTNUM / wPILENUM;
WORD wITEMNUM = wONENUM;
// ¿©ºÐ°ãħ¾ÆÀÌÅÛÀÇ °ãħ¼ö.
WORD wSPLITNUM = wREQINSRTNUM % wPILENUM;
if ( wSPLITNUM > 0 ) wITEMNUM += 1;
if ( wSPLITNUM==0 && wITEMNUM>=1 ) wSPLITNUM = wPILENUM;
for ( WORD i=0; i<wITEMNUM; ++i )
{
WORD wInsertPosX(0), wInsertPosY(0);
BOOL bSPACE = m_cInventory.FindInsrtable ( wINVENX, wINVENY, wInsertPosX, wInsertPosY );
GASSERT(bSPACE&&"³ÖÀ» °ø°£À» ¹Ì¸® üũ¸¦ ÇÏ°í ¾ÆÀÌÅÛÀ» ³Ö¾úÀ¸³ª °ø°£ÀÌ ºÎÁ·ÇÔ.");
if ( !bSPACE ) return E_FAIL; // ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.
// Note : »õ·Î¿î ¾ÆÀÌÅÛÀ» ³Ö¾îÁÜ.
//
SITEMCUSTOM sITEMCUSTOM = pItemDrop->sItemCustom;
if ( wITEMNUM==(i+1) ) sITEMCUSTOM.wTurnNum = wSPLITNUM; // ¸¶Áö¸· ¾ÆÀÌÅÛÀº ÀÜ¿©·®.
else sITEMCUSTOM.wTurnNum = wPILENUM; // ¾Æ´Ò °æ¿ì´Â ²ËÂù·®.
// ÀιêÅ丮¿¡ ³Ö½À´Ï´Ù.
m_cInventory.InsertItem ( sITEMCUSTOM, wInsertPosX, wInsertPosY );
SINVENITEM *pInvenItem = m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
if ( !pInvenItem ) return E_FAIL; // ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.
// Àι꿡 ¾ÆÀÌÅÆ ³Ö¾îÁÖ´Â ¸Þ½ÃÁö.
GLMSG::SNETPC_INVEN_INSERT NetMsgInven;
NetMsgInven.Data = *pInvenItem;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInven);
}
// Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
//
GLPARTY_FIELD *pParty = GLGaeaServer::GetInstance().GetParty ( m_dwPartyID );
if ( pParty )
{
GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
NetMsg.dwGaeaID = m_dwGaeaID;
NetMsg.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
pParty->SENDMSG2NEAR ( this, &NetMsg );
}
GLMSG::SNETPC_PICKUP_ITEM NetMsgPickUp;
NetMsgPickUp.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPickUp);
// Note : ¾ÆÀÌÅÛ ½Àµæ½Ã ÀÚµ¿ Äù½ºÆ® ½ÃÀÛ Á¡°Ë.
//
QuestStartFromGetITEM ( pItemDrop->sItemCustom.sNativeID );
// Note : PILE °ãħ ¾ÆÀÌÅÛÀ̹ǷΠ·Î±× ÀÛ¼º ºÒ°¡´É.
//
// Note : ¾ÆÀÌÅÆ Land¿¡¼ »èÁ¦.
m_pLandMan->DropOutItem ( pItemDrop->dwGlobID );
}
else
{
WORD wPosX, wPosY;
BOOL bOk = m_cInventory.FindInsrtable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk ) return E_FAIL; // ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.
// Note : ¾ÆÀÌÅÆ Áݱ⠼º°ø.
m_cInventory.InsertItem ( pItemDrop->sItemCustom, wPosX, wPosY );
SINVENITEM *pInvenItem = m_cInventory.GetItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL; // ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.
// Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
//
GLPARTY_FIELD *pParty = GLGaeaServer::GetInstance().GetParty ( m_dwPartyID );
if ( pParty )
{
GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
NetMsg.dwGaeaID = m_dwGaeaID;
NetMsg.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
pParty->SENDMSG2NEAR ( this, &NetMsg );
}
GLMSG::SNETPC_PICKUP_ITEM NetMsgPickUp;
NetMsgPickUp.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPickUp);
// Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
//
GLITEMLMT::GetInstance().ReqItemRoute ( pInvenItem->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pInvenItem->sItemCustom.wTurnNum );
// [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.Data = *pInvenItem;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
// Note : ¾ÆÀÌÅÛ ½Àµæ½Ã ÀÚµ¿ Äù½ºÆ® ½ÃÀÛ Á¡°Ë.
//
QuestStartFromGetITEM ( pItemDrop->sItemCustom.sNativeID );
// Note : ¾ÆÀÌÅÆ Land¿¡¼ »èÁ¦.
m_pLandMan->DropOutItem ( pItemDrop->dwGlobID );
}
return S_OK;
}
HRESULT GLChar::InsertToInvenEx ( PITEMDROP pItemDrop )
{
GASSERT(pItemDrop&&"GLChar::InsertToInven()");
if ( !pItemDrop ) return E_FAIL;
SITEM *pItem = GLItemMan::GetInstance().GetItem(pItemDrop->sItemCustom.sNativeID);
if ( !pItem ) return E_FAIL;
bool bITEM_SPACE = IsInsertToInvenEx ( pItemDrop );
if ( !bITEM_SPACE )
{
// ÀιêÀÌ °¡µæÂ÷¼ ¾ÆÀÌÅÆÀ» ³ÖÀ»¼ö ¾ø½À´Ï´Ù.
GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
NetMsg.emCrow = CROW_ITEM;
NetMsg.emTakeFB = EMTAKE_FB_INVEN_ERROR;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
return E_FAIL;
}
if ( pItem->ISPILE() )
{
WORD wINVENX = pItem->sBasicOp.wInvenSizeX;
WORD wINVENY = pItem->sBasicOp.wInvenSizeY;
// °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
WORD wPILENUM = pItem->sDrugOp.wPileNum;
SNATIVEID sNID = pItem->sBasicOp.sNativeID;
// ³Ö±â ¿äûµÈ ¾ÆÀÌÅÛ¼ö. ( ÀÜ¿©·®. )
WORD wREQINSRTNUM = ( pItemDrop->sItemCustom.wTurnNum );
// Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
//
GLITEMLMT::GetInstance().ReqItemRoute ( pItemDrop->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pItemDrop->sItemCustom.wTurnNum );
// Note : ´õ °ãÃÄÁú¼ö ÀÖ´Â ¾ÆÀÌÅÛÀÌ ÀÖ´ÂÁö °Ë»çÇÏ¿© Àκ¥¿¡ µé¾î°¡¾ßÇÏ´Â
// ¾ÆÀÌÅÛ Á¡°Ë ¼ýÀÚ¸¦ °¨¼Ò½ÃÅ´.
GLInventory::CELL_MAP &ItemMap = *m_cInventory.GetItemList();
GLInventory::CELL_MAP_ITER iter = ItemMap.begin();
for ( ; iter!=ItemMap.end(); ++iter )
{
SINVENITEM &sINVENITEM = *(*iter).second;
SITEMCUSTOM &sITEMCUSTOM = sINVENITEM.sItemCustom;
if ( sITEMCUSTOM.sNativeID != sNID ) continue;
if ( sITEMCUSTOM.wTurnNum>=wPILENUM ) continue;
// ±âÁ¸ ¾ÆÀÌÅÛ °ãħ ¿©À¯ºÐ.
WORD wSURPLUSNUM = wPILENUM - sITEMCUSTOM.wTurnNum;
if ( wREQINSRTNUM > wSURPLUSNUM )
{
// Note : ±âÁ¸ ¾ÆÀÌÅÛÀÇ °ãħÀ» º¯°æ. ( ²ËÂü )
sITEMCUSTOM.wTurnNum = wPILENUM;
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
NetMsg.wPosX = sINVENITEM.wPosX;
NetMsg.wPosY = sINVENITEM.wPosY;
NetMsg.wTurnNum = sITEMCUSTOM.wTurnNum;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
// Note : ÀÜ¿© ¼ö·® °¨¼Ò.
wREQINSRTNUM -= wSURPLUSNUM;
}
else
{
// Note : ±âÁ¸ ¾ÆÀÌÅÛ¿¡ °ãÄ¡´Â °Í ¸¸À¸·Îµµ »õ·Î ³ÖÀ» ¾ÆÀÌÅÛÀÌ ÃæºÐÈ÷ µé¾î°¨.
sITEMCUSTOM.wTurnNum += wREQINSRTNUM;
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
NetMsg.wPosX = sINVENITEM.wPosX;
NetMsg.wPosY = sINVENITEM.wPosY;
NetMsg.wTurnNum = sITEMCUSTOM.wTurnNum;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
// Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
//
GLPARTY_FIELD *pParty = GLGaeaServer::GetInstance().GetParty ( m_dwPartyID );
if ( pParty )
{
GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
NetMsg.dwGaeaID = m_dwGaeaID;
NetMsg.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
pParty->SENDMSG2NEAR ( this, &NetMsg );
}
GLMSG::SNETPC_PICKUP_ITEM NetMsgPickUp;
NetMsgPickUp.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPickUp);
// Note : ¾ÆÀÌÅÆ Land¿¡¼ »èÁ¦.
m_pLandMan->DropOutItem ( pItemDrop->dwGlobID );
return S_OK;
}
}
// Note : »õ·ÎÀÌ Àκ¥¿¡ µé¾î°¡¾ßÇÒ ¾ÆÀÌÅÛÀÇ °¹¼ö ÆÄ¾ÇÈÄ Àκ¥¿¡ µé¾î°¥ °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ç.
// ÃÖ´ë°ãħ¾ÆÀÌÅÛ ¼ö·®.
WORD wONENUM = wREQINSRTNUM / wPILENUM;
WORD wITEMNUM = wONENUM;
// ¿©ºÐ°ãħ¾ÆÀÌÅÛÀÇ °ãħ¼ö.
WORD wSPLITNUM = wREQINSRTNUM % wPILENUM;
if ( wSPLITNUM > 0 ) wITEMNUM += 1;
if ( wSPLITNUM==0 && wITEMNUM>=1 ) wSPLITNUM = wPILENUM;
for ( WORD i=0; i<wITEMNUM; ++i )
{
WORD wInsertPosX(0), wInsertPosY(0);
// Ȱ¼ºÈµÈ Àκ¥¿¡ ¿ì¼±Àû ¹èÄ¡...( ±âÁ¸ °Ë»ö¼ø¼°¡ ¼¼·Î ¿ì¼±ÀÌ¶ó¼ º¯°æ Çϱ⠾ָÅÇÔ. )
BOOL bSPACE = m_cInventory.FindInsrtable ( wINVENX, wINVENY, wInsertPosX, wInsertPosY );
if ( !bSPACE )
{
bSPACE = m_cInventory.FindInsrtable ( wINVENX, wINVENY, wInsertPosX, wInsertPosY, true );
GASSERT(bSPACE&&"³ÖÀ» °ø°£À» ¹Ì¸® üũ¸¦ ÇÏ°í ¾ÆÀÌÅÛÀ» ³Ö¾úÀ¸³ª °ø°£ÀÌ ºÎÁ·ÇÔ.");
if ( !bSPACE ) return E_FAIL; // ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.
}
// Note : »õ·Î¿î ¾ÆÀÌÅÛÀ» ³Ö¾îÁÜ.
//
SITEMCUSTOM sITEMCUSTOM = pItemDrop->sItemCustom;
if ( wITEMNUM==(i+1) ) sITEMCUSTOM.wTurnNum = wSPLITNUM; // ¸¶Áö¸· ¾ÆÀÌÅÛÀº ÀÜ¿©·®.
else sITEMCUSTOM.wTurnNum = wPILENUM; // ¾Æ´Ò °æ¿ì´Â ²ËÂù·®.
// ÀιêÅ丮¿¡ ³Ö½À´Ï´Ù.
m_cInventory.InsertItem ( sITEMCUSTOM, wInsertPosX, wInsertPosY, true );
SINVENITEM *pInvenItem = m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
if ( !pInvenItem ) return E_FAIL; // ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.
// Àι꿡 ¾ÆÀÌÅÆ ³Ö¾îÁÖ´Â ¸Þ½ÃÁö.
GLMSG::SNETPC_INVEN_INSERT NetMsgInven;
NetMsgInven.Data = *pInvenItem;
NetMsgInven.bAllLine = true;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInven);
}
// Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
//
GLPARTY_FIELD *pParty = GLGaeaServer::GetInstance().GetParty ( m_dwPartyID );
if ( pParty )
{
GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
NetMsg.dwGaeaID = m_dwGaeaID;
NetMsg.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
pParty->SENDMSG2NEAR ( this, &NetMsg );
}
GLMSG::SNETPC_PICKUP_ITEM NetMsgPickUp;
NetMsgPickUp.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPickUp);
// Note : ¾ÆÀÌÅÛ ½Àµæ½Ã ÀÚµ¿ Äù½ºÆ® ½ÃÀÛ Á¡°Ë.
//
QuestStartFromGetITEM ( pItemDrop->sItemCustom.sNativeID );
// Note : PILE °ãħ ¾ÆÀÌÅÛÀ̹ǷΠ·Î±× ÀÛ¼º ºÒ°¡´É.
//
// Note : ¾ÆÀÌÅÆ Land¿¡¼ »èÁ¦.
m_pLandMan->DropOutItem ( pItemDrop->dwGlobID );
}
else
{
WORD wPosX = 0, wPosY = 0;
// Ȱ¼ºÈµÈ Àκ¥¿¡ ¿ì¼±Àû ¹èÄ¡...( ±âÁ¸ °Ë»ö¼ø¼°¡ ¼¼·Î ¿ì¼±ÀÌ¶ó¼ º¯°æ Çϱ⠾ָÅÇÔ. )
BOOL bOk = m_cInventory.FindInsrtable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk )
{
bOk = m_cInventory.FindInsrtable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY, true );
GASSERT(bOk&&"³ÖÀ» °ø°£À» ¹Ì¸® üũ¸¦ ÇÏ°í ¾ÆÀÌÅÛÀ» ³Ö¾úÀ¸³ª °ø°£ÀÌ ºÎÁ·ÇÔ.");
if ( !bOk ) return E_FAIL; // ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.
}
// Note : ¾ÆÀÌÅÆ Áݱ⠼º°ø.
m_cInventory.InsertItem ( pItemDrop->sItemCustom, wPosX, wPosY, true );
SINVENITEM *pInvenItem = m_cInventory.GetItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL; // ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.
// Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
//
GLPARTY_FIELD *pParty = GLGaeaServer::GetInstance().GetParty ( m_dwPartyID );
if ( pParty )
{
GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
NetMsg.dwGaeaID = m_dwGaeaID;
NetMsg.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
pParty->SENDMSG2NEAR ( this, &NetMsg );
}
GLMSG::SNETPC_PICKUP_ITEM NetMsgPickUp;
NetMsgPickUp.sNID_ITEM = pItemDrop->sItemCustom.sNativeID;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPickUp);
// Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
//
GLITEMLMT::GetInstance().ReqItemRoute ( pInvenItem->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pInvenItem->sItemCustom.wTurnNum );
// [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.Data = *pInvenItem;
NetMsg_Inven.bAllLine = true;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
// Note : ¾ÆÀÌÅÛ ½Àµæ½Ã ÀÚµ¿ Äù½ºÆ® ½ÃÀÛ Á¡°Ë.
//
QuestStartFromGetITEM ( pItemDrop->sItemCustom.sNativeID );
// Note : ¾ÆÀÌÅÆ Land¿¡¼ »èÁ¦.
m_pLandMan->DropOutItem ( pItemDrop->dwGlobID );
}
return S_OK;
}
void GLChar::DisableSkillFact()
{
EMSLOT emRHand = GetCurRHand();
SITEM* pRightItem = GET_SLOT_ITEMDATA(emRHand);
for ( int i=0; i<SKILLFACT_SIZE; ++i )
{
if ( m_sSKILLFACT[i].sNATIVEID == NATIVEID_NULL() ) continue;
PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( m_sSKILLFACT[i].sNATIVEID );
if ( !pSkill ) continue;
// ½ºÅ³ ÀڽйöÇÁ
if ( pSkill->m_sBASIC.emIMPACT_TAR != TAR_SELF || pSkill->m_sBASIC.emIMPACT_REALM != REALM_SELF ) continue;
GLITEM_ATT emSKILL_RITEM = pSkill->m_sBASIC.emUSE_RITEM;
// ½ºÅ³ µµ±¸ Á¾¼Ó ¾øÀ½
if ( emSKILL_RITEM == ITEMATT_NOCARE ) continue;
// ½ºÅ³ °ú ¹«±â°¡ ºÒÀÏÄ¡
if( !pRightItem || !CHECHSKILL_ITEM(emSKILL_RITEM,pRightItem->sSuitOp.emAttack) )
{
DISABLESKEFF( i );
}
}
}
//************************************
// Method: InsertMoney
// FullName: GLChar::InsertMoney
// Access: public
// Returns: void
// Qualifier:
// Parameter: LONGLONG lnAmount
// Explanation: ÇöÀç´Â ÆÄƼ¿¡¼ ±Ý¾× ºÐ¹è½Ã »ç¿ëµÇ´Â ÇÔ¼öÀÌ´Ù
//************************************
void GLChar::InsertMoney ( LONGLONG lnAmount )
{
// µ· ½Àµæ.
lnAmount = CalculateInsertmoney( lnAmount );
CheckMoneyUpdate( m_lnMoney, lnAmount, TRUE, "Insert Party Money." );
m_bMoneyUpdate = TRUE;
m_lnMoney += lnAmount;
// Note : ±Ý¾× ·Î±×.
//
if ( lnAmount>EMMONEY_LOG )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, 0, ID_CHAR, m_dwCharID, lnAmount, EMITEM_ROUTE_GROUND );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnMoney, EMITEM_ROUTE_CHAR );
}
#if defined(_RELEASED) || defined(TW_PARAM) || defined(TH_PARAM) || defined(HK_PARAM)// ***Tracing Log print
if ( m_bTracingUser )
{
NET_LOG_UPDATE_TRACINGCHAR TracingMsg;
TracingMsg.nUserNum = GetUserID();
StringCchCopy( TracingMsg.szAccount, USR_ID_LENGTH+1, m_szUID );
CString strTemp;
strTemp.Format( "Insert Party Money, [%s][%s], Insert Amount:[%I64d], Have Money:[%I64d]",
m_szUID, m_szName, lnAmount, m_lnMoney );
StringCchCopy( TracingMsg.szLogMsg, TRACING_LOG_SIZE, strTemp.GetString() );
m_pGLGaeaServer->SENDTOAGENT( m_dwClientID, &TracingMsg );
}
#endif
#if defined(VN_PARAM) //vietnamtest%%%
if( lnAmount != 0 )
#endif
{
// ±Ý¾× º¯È Ŭ¶óÀÌ¾ðÆ®¿¡ ¾Ë·ÁÁÜ.
GLMSG::SNETPC_UPDATE_MONEY NetMsg;
NetMsg.lnMoney = m_lnMoney;
//add money 2
NetMsg.lnVoteP = m_lnVoteP;
//add money 3
NetMsg.lnPremP = m_lnPremP;
//add contributionpoints by CNDev
NetMsg.lnContribP = m_lnContribP;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
}
#if defined(VN_PARAM) //vietnamtest%%%
GLMSG::SNETPC_VIETNAM_GAIN_MONEY NetMsg2;
NetMsg2.gainMoney = m_lVNGainSysMoney;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg2 );
#endif
}
LONGLONG GLChar::CalculateInsertmoney( LONGLONG lnAmount )
{
LONGLONG lnMoney = lnAmount;
// µ· ½Àµæ.
lnMoney = lnMoney * (m_pGLGaeaServer->GetMoneyGainRate(m_CHARINDEX,m_wLevel) + m_pGLGaeaServer->GetMoneyGainRate(m_wSchool) - 1);
#if defined(TH_PARAM) || defined(MYE_PARAM ) || defined(MY_PARAM) || defined(KR_PARAM)
if( m_dwThaiCCafeClass == 1 || m_nMyCCafeClass == 1 ) // Aµî±Þ
{
lnMoney *= 2;
}else if( m_dwThaiCCafeClass == 2 || m_nMyCCafeClass == 2 ) // Bµî±Þ
{
lnMoney *= 1.75f;
}else if( m_dwThaiCCafeClass == 3 || m_nMyCCafeClass == 3 ) // Cµî±Þ
{
lnMoney *= 1.5f;
}
#endif
#ifdef CH_PARAM_USEGAIN //chinaTest%%%
if( m_ChinaGainType == GAINTYPE_HALF )
{
lnMoney /= 2;
}else if( m_ChinaGainType == GAINTYPE_EMPTY )
{
lnMoney = 0;
}
#endif
//NeedToSaveValue_B
#if defined(VN_PARAM) //vietnamtest%%%
if( m_dwVietnamGainType == GAINTYPE_HALF )
{
lnMoney /= 2;
m_lVNGainSysMoney += lnMoney;
}else if( m_dwVietnamGainType == GAINTYPE_EMPTY )
{
m_lVNGainSysMoney += lnMoney;
lnMoney = 0;
}
#endif
return lnMoney;
}
HRESULT GLChar::InsertToInven ( PMONEYDROP pMoneyDrop )
{
// µ· ½Àµæ.
if( pMoneyDrop->bDropMonster )
{
pMoneyDrop->lnAmount = CalculateInsertmoney( pMoneyDrop->lnAmount );
}
CheckMoneyUpdate( m_lnMoney, pMoneyDrop->lnAmount, TRUE, "Insert Money." );
m_bMoneyUpdate = TRUE;
m_lnMoney += pMoneyDrop->lnAmount;
// Note : ±Ý¾× ·Î±×.
//
if ( pMoneyDrop->lnAmount>EMMONEY_LOG )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, 0, ID_CHAR, m_dwCharID, pMoneyDrop->lnAmount, EMITEM_ROUTE_GROUND );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnMoney, EMITEM_ROUTE_CHAR );
}
#if defined(_RELEASED) || defined(TW_PARAM) || defined(TH_PARAM) || defined(HK_PARAM) // ***Tracing Log print
if ( m_bTracingUser )
{
NET_LOG_UPDATE_TRACINGCHAR TracingMsg;
TracingMsg.nUserNum = GetUserID();
StringCchCopy( TracingMsg.szAccount, USR_ID_LENGTH+1, m_szUID );
CString strTemp;
strTemp.Format( "Insert Money, [%s][%s], Insert Amount:[%I64d], Have Money:[%I64d]",
m_szUID, m_szName, pMoneyDrop->lnAmount, m_lnMoney );
StringCchCopy( TracingMsg.szLogMsg, TRACING_LOG_SIZE, strTemp.GetString() );
m_pGLGaeaServer->SENDTOAGENT( m_dwClientID, &TracingMsg );
}
#endif
#if defined(VN_PARAM) //vietnamtest%%%
if( pMoneyDrop->lnAmount != 0 )
#endif
{
GLMSG::SNETPC_PICKUP_MONEY NetMsg;
NetMsg.lnMoney = m_lnMoney;
NetMsg.lnPickUp = pMoneyDrop->lnAmount;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
}
#if defined(VN_PARAM) //vietnamtest%%%
GLMSG::SNETPC_VIETNAM_GAIN_MONEY NetMsg2;
NetMsg2.gainMoney = m_lVNGainSysMoney;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg2 );
#endif
// µ·À» Land¿¡¼ »èÁ¦.
m_pLandMan->DropOutMoney ( pMoneyDrop->dwGlobID );
return S_OK;
}
// Note : FieldÀÇ ¾ÆÀÌÅÆ,µ·À» Inventory ¿¡ ³Ö±â ½Ãµµ.
//
HRESULT GLChar::MsgReqFieldToInven ( NET_MSG_GENERIC* nmg )
{
if ( !m_pLandMan ) return E_FAIL;
GLMSG::SNETPC_REQ_FIELD_TO_INVEN *pNetMsg = reinterpret_cast<GLMSG::SNETPC_REQ_FIELD_TO_INVEN*> ( nmg );
if ( pNetMsg->emCrow==CROW_ITEM )
{
PITEMDROP pItemDrop = m_pLandMan->GetItem ( pNetMsg->dwID );
if ( !pItemDrop )
{
// ¾ÆÀÌÅÆÀÌ »ç¶óÁ³½À´Ï´Ù.
GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
NetMsg.emCrow = CROW_ITEM;
NetMsg.emTakeFB = EMTAKE_FB_OFF;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
return E_FAIL;
}
// »ç¸ÁÈ®ÀÎ
if ( !IsValidBody() ) return E_FAIL;
// °Å¸® üũ
D3DXVECTOR3 vPos;
if ( pNetMsg->bPet )
{
PGLPETFIELD pMyPet = GLGaeaServer::GetInstance().GetPET ( m_dwPetGUID );
if ( pMyPet ) vPos = pMyPet->m_vPos;
}
else vPos = m_vPos;
const D3DXVECTOR3 &vTarPos = pItemDrop->vPos;
D3DXVECTOR3 vDistance = vPos - vTarPos;
float fDistance = D3DXVec3Length ( &vDistance );
WORD wTarBodyRadius = 4;
WORD wTakeRange = wTarBodyRadius + GETBODYRADIUS() + 2;
WORD wTakeAbleDis = wTakeRange + 15;
if ( fDistance>wTakeAbleDis )
{
// °Å¸®°¡ ¸Ù´Ï´Ù.
GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
NetMsg.emCrow = CROW_ITEM;
NetMsg.emTakeFB = EMTAKE_FB_DISTANCE;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
return E_FAIL;
}
// Çʵ忡¼ ÁÖ¿î°æ¿ì ½ÃÈ¿¼º üũ( Ŭ·´¶ôÄ¿ ¹ö±× ´ëó )
{
GLITEMLMT & glItemmt = GLITEMLMT::GetInstance();
GLItemMan & glItemMan = GLItemMan::GetInstance();
SITEMCUSTOM sCUSTOM = pItemDrop->sItemCustom;
const CTime cTIME_CUR = CTime::GetCurrentTime();
SITEM *pITEM = glItemMan.GetItem ( sCUSTOM.sNativeID );
if ( !pITEM ) return E_FAIL;
bool bDELETE(false);
if ( pITEM->IsTIMELMT() )
{
CTimeSpan cSPAN(pITEM->sDrugOp.tTIME_LMT);
CTime cTIME_LMT(sCUSTOM.tBORNTIME);
cTIME_LMT += cSPAN;
if ( cTIME_CUR > cTIME_LMT )
{
// ½Ã°£ Á¦ÇÑÀ¸·Î ¾ÆÀÌÅÛ »èÁ¦ ·Î±× ³²±è.
glItemmt.ReqItemRoute ( sCUSTOM, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_DELETE, sCUSTOM.wTurnNum );
// ½Ã°£ Á¦ÇÑÀ¸·Î ¾ÆÀÌÅÛ »èÁ¦ ¾Ë¸².
GLMSG::SNET_INVEN_DEL_ITEM_TIMELMT NetMsgInvenDelTimeLmt;
NetMsgInvenDelTimeLmt.nidITEM = sCUSTOM.sNativeID;
m_pGLGaeaServer->SENDTOCLIENT(m_dwClientID,&NetMsgInvenDelTimeLmt);
bDELETE = true;
// Note : ÄÚ½ºÅù º¹±¸.
if ( sCUSTOM.nidDISGUISE!=SNATIVEID(false) )
{
SITEM *pONE = glItemMan.GetItem ( sCUSTOM.nidDISGUISE );
if ( !pONE ) return E_FAIL;
SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = sCUSTOM.nidDISGUISE;
CTime cTIME = CTime::GetCurrentTime();
if ( sCUSTOM.tDISGUISE!=0 && pONE->sDrugOp.tTIME_LMT!= 0 )
{
cTIME = CTime(sCUSTOM.tDISGUISE);
CTimeSpan tLMT(pONE->sDrugOp.tTIME_LMT);
cTIME -= tLMT;
}
// Note : ¾ÆÀÌÅÛ »ý¼º.
//
sITEM_NEW.tBORNTIME = cTIME.GetTime();
sITEM_NEW.wTurnNum = 1;
sITEM_NEW.cGenType = EMGEN_BILLING;
sITEM_NEW.cChnID = (BYTE)m_pGLGaeaServer->GetServerChannel();
sITEM_NEW.cFieldID = (BYTE)m_pGLGaeaServer->GetFieldSvrID();
sITEM_NEW.lnGenNum = glItemmt.RegItemGen ( sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );
// »ý¼ºµÈ ÄÚ½ºÅùÀº ¹Ù´Ú¿¡¼ ´Ù½Ã ¶³±º´Ù.
CItemDrop cDropItem;
cDropItem.sItemCustom = sITEM_NEW;
m_pLandMan->DropItem ( m_vPos, &(cDropItem.sItemCustom), EMGROUP_ONE, m_dwGaeaID );
// Note : ºÐ¸®µÈ ÄÚ½ºÅù ·Î±×.
glItemmt.ReqItemRoute ( sITEM_NEW, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_GROUND, sITEM_NEW.wTurnNum );
}
m_pLandMan->DropOutItem ( pItemDrop->dwGlobID );
return E_FAIL;
}
}
if ( !bDELETE && sCUSTOM.nidDISGUISE!=SNATIVEID(false) )
{
if ( sCUSTOM.tDISGUISE != 0 )
{
CTime cTIME_LMT(sCUSTOM.tDISGUISE);
if ( cTIME_LMT.GetYear()!=1970 )
{
if ( cTIME_CUR > cTIME_LMT )
{
// ½Ã°£ Á¦ÇÑÀ¸·Î ¾ÆÀÌÅÛ »èÁ¦ ¾Ë¸².
GLMSG::SNET_INVEN_DEL_ITEM_TIMELMT NetMsgInvenDelTimeLmt;
NetMsgInvenDelTimeLmt.nidITEM = sCUSTOM.nidDISGUISE;
m_pGLGaeaServer->SENDTOCLIENT(m_dwClientID,&NetMsgInvenDelTimeLmt);
// Note : ÄÚ½ºÅù Á¤º¸ ¸®¼Â.
pItemDrop->sItemCustom.tDISGUISE = 0;
pItemDrop->sItemCustom.nidDISGUISE = SNATIVEID(false);
}
}
}
}
}
// ¾ÆÀÌÅÛÀÌ ÀڽŰú µ¿ÀÏÇÑ ¸Ê¿¡ ÀÖ´ÂÁö ( ¼±µµÀü Á¾·áÈÄ ºñÀÎÁõŬ·´¿øÀÌ ¼±µµ¹«±â ȹµæÇÏ´Â ¹ö±× ´ëó )
if ( pItemDrop->sMapID != m_sMapID ) return E_FAIL;
if ( !pItemDrop->IsTakeItem(m_dwPartyID,m_dwGaeaID) )
{
// ¾ÆÀÌÅÆÀÌ ´Ù¸¥ »ç¶÷¿¡°Ô ¿¹¾àµÇ¾î ÀÖ½À´Ï´Ù.
GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
NetMsg.emCrow = CROW_ITEM;
NetMsg.emTakeFB = EMTAKE_FB_RESERVED;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
return E_FAIL;
}
SITEM *pItem = GLItemMan::GetInstance().GetItem(pItemDrop->sItemCustom.sNativeID);
if ( !pItem ) return E_FAIL;
if ( pItem->sBasicOp.emItemType==ITEM_QITEM )
{
TourchQItem ( pNetMsg->dwID );
return S_OK;
}
// Note : ÆÄƼ¿øÀ̰í À̺¥Æ® ¾ÆÀÌÅÛÀÌ ¾Æ´Ò¶§ ÆÄƼ ·çÆÃÀÎÁö °Ë»çÈÄ Ã³¸®.
//
GLPARTY_FIELD* pParty = GLGaeaServer::GetInstance().GetParty(m_dwPartyID);
if ( pParty && !pItem->ISEVENTITEM() )
{
bool ballot = pParty->DOITEM_ALLOT ( this, pItemDrop );
if ( ballot ) return S_OK;
}
// Note : À̺¥Æ® ¾ÆÀÌÅÛ Áߺ¹À¸·Î °¡Á®°¡±â ¹æÁö.
//
/*if ( pItem->ISEVENTITEM() && m_cInventory.HaveEventItem() )
{
// ÀÌ¹Ì À̺¥Æ® ¾ÆÀÌÅÛÀ» °¡Áö°í ÀÖ½À´Ï´Ù.
GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
NetMsg.emCrow = CROW_ITEM;
NetMsg.emTakeFB = EMTAKE_FB_TOO_EVENT_ITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
return E_FAIL;
}*/
// Note : ¾ÆÀÌÅÛ Àκ¥¿¡ ³ÖÀ½ ( Àκ¥ÀÌ °¡µæ Â÷ÀÖÀ» ¶§´Â ½Àµæ ºÒ°¡´É. ) º£Æ®³²ÀÏ °æ¿ì Ž´Ð Àκ¥Å丮¿¡ ³ÖÀ» ¼öµµ ÀÖ´Ù.
//
#if defined(VN_PARAM) //vietnamtest%%%
if( m_dwVietnamGainType == GAINTYPE_EMPTY )
{
InsertToVNGainInven( pItemDrop );
}else{
InsertToInven ( pItemDrop );
}
#else
InsertToInven ( pItemDrop );
#endif
/*
// ȹµæÇÑ ¾ÆÀÌÅÛÀÌ ÆÖÄ«µå && »ý¼ºµÈ ÆÖÀ̶ó¸é ¼ÒÀ¯±ÇÀ» ÀÌÀüÇÑ´Ù.
// ÆÖ¾ÆÀ̵𰡠0 ÀÌ ¾Æ´Ï¸é ÆÖÄ«µåÀÌ¸é¼ DB¿¡ ÆÖÀÌ »ý¼ºµÈ °ÍÀÌ´Ù.
if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD && pItemDrop->sItemCustom.dwPetID != 0 )
{
CExchangePet* pDbAction = new CExchangePet ( m_dwCharID, pItemDrop->sItemCustom.dwPetID );
GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
if ( pDBMan ) pDBMan->AddJob ( pDbAction );
}
*/
}
else if ( pNetMsg->emCrow==CROW_MONEY )
{
PMONEYDROP pMoneyDrop = m_pLandMan->GetMoney ( pNetMsg->dwID );
if ( !pMoneyDrop )
{
// µ·ÀÌ »ç¶óÁ³½À´Ï´Ù.
GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
NetMsg.emCrow = CROW_MONEY;
NetMsg.emTakeFB = EMTAKE_FB_OFF;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
return E_FAIL;
}
// »ç¸ÁÈ®ÀÎ
if ( !IsValidBody() ) return E_FAIL;
// °Å¸® üũ
D3DXVECTOR3 vPos;
if ( pNetMsg->bPet )
{
PGLPETFIELD pMyPet = GLGaeaServer::GetInstance().GetPET ( m_dwPetGUID );
if ( pMyPet ) vPos = pMyPet->m_vPos;
}
else vPos = m_vPos;
const D3DXVECTOR3 &vTarPos = pMoneyDrop->vPos;
D3DXVECTOR3 vDistance = vPos - vTarPos;
float fDistance = D3DXVec3Length ( &vDistance );
WORD wTarBodyRadius = 4;
WORD wTakeRange = wTarBodyRadius + GETBODYRADIUS() + 2;
WORD wTakeAbleDis = wTakeRange + 15;
if ( fDistance>wTakeAbleDis )
{
// °Å¸®°¡ ¸Ù´Ï´Ù.
GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
NetMsg.emCrow = CROW_ITEM;
NetMsg.emTakeFB = EMTAKE_FB_DISTANCE;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
return E_FAIL;
}
if ( !pMoneyDrop->IsTakeItem(m_dwPartyID,m_dwGaeaID) )
{
// µ·ÀÌ ´Ù¸¥ »ç¶÷¿¡°Ô ¿¹¾àµÇ¾î ÀÖ½À´Ï´Ù.
GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
NetMsg.emCrow = CROW_MONEY;
NetMsg.emTakeFB = EMTAKE_FB_RESERVED;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
return E_FAIL;
}
// Note : ÆÄƼ¿øÀ̰í À̺¥Æ® ¾ÆÀÌÅÛÀÌ ¾Æ´Ò¶§ ÆÄƼ ·çÆÃÀÎÁö °Ë»çÈÄ Ã³¸®.
//
GLPARTY_FIELD* pParty = GLGaeaServer::GetInstance().GetParty(m_dwPartyID);
if ( pParty )
{
bool ballot = pParty->DOMONEY_ALLOT ( this, pMoneyDrop, m_pLandMan );
if ( ballot )
{
return S_OK;
}
}
// µ· Áݱ⠼º°ø.
InsertToInven ( pMoneyDrop );
}
return S_OK;
}
// Note : FieldÀÇ ¾ÆÀÌÅÆ,µ·À» ¼Õ¿¡ µé±â ½Ãµµ. ( ¼Õ¿¡ µç ¾ÆÀÌÅÆÀÌ ¾ø´Ù°í °¡Á¤ÇÔ. )
//
HRESULT GLChar::MsgReqFieldToHold ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_FIELD_TO_HOLD *pNetMsg = reinterpret_cast<GLMSG::SNETPC_REQ_FIELD_TO_HOLD*> ( nmg );
PITEMDROP pItemDrop = m_pLandMan->GetItem ( pNetMsg->dwGlobID );
// Çʵ忡¼ ¾ÆÀÌÅÛÀ» ¼Õ¿¡ µå´Â°æ¿ì´Â Àκ¥ÀÌ °¡µæ áÀ» °æ¿ì »ÓÀÌ´Ù.
// º£Æ®³²Å½´ÐÀÏ °æ¿ì ¼Õ¿¡ µå´Â°É ¹æÁöÇØ¾ß ÇÑ´Ù.
#if defined(VN_PARAM) //vietnamtest%%%
if( m_dwVietnamGainType == GAINTYPE_EMPTY ) return E_FAIL;
#endif
if ( !pItemDrop )
{
// ¾ÆÀÌÅÆÀÌ »ç¶óÁ³½À´Ï´Ù.
GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
NetMsg.emCrow = CROW_ITEM;
NetMsg.emTakeFB = EMTAKE_FB_OFF;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
return S_FALSE;
}
// ¾ÆÀÌÅÛÀÌ ÀڽŰú µ¿ÀÏÇÑ ¸Ê¿¡ ÀÖ´ÂÁö ( ¼±µµÀü Á¾·áÈÄ ºñÀÎÁõŬ·´¿øÀÌ ¼±µµ¹«±â ȹµæÇÏ´Â ¹ö±× ´ëó )
if ( pItemDrop->sMapID != m_sMapID ) return S_FALSE;
const SITEM *pItemData = GLItemMan::GetInstance().GetItem(pItemDrop->sItemCustom.sNativeID);
if ( !pItemData ) return S_FALSE;
if ( !pItemDrop->IsTakeItem(m_dwPartyID,m_dwGaeaID) )
{
// ¾ÆÀÌÅÆÀÌ ´Ù¸¥ »ç¶÷¿¡°Ô ¿¹¾àµÇ¾î ÀÖ½À´Ï´Ù.
GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
NetMsg.emCrow = CROW_ITEM;
NetMsg.emTakeFB = EMTAKE_FB_RESERVED;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
return S_FALSE;
}
if ( pItemData->sBasicOp.emItemType==ITEM_QITEM )
{
TourchQItem ( pNetMsg->dwGlobID );
return S_OK;
}
// Note : ÆÄƼ¿øÀ̰í À̺¥Æ® ¾ÆÀÌÅÛÀÌ ¾Æ´Ò¶§ ÆÄƼ ·çÆÃÀÎÁö °Ë»çÈÄ Ã³¸®.
//
GLPARTY_FIELD* pParty = GLGaeaServer::GetInstance().GetParty(m_dwPartyID);
if ( pParty && !pItemData->ISEVENTITEM() )
{
bool ballot = pParty->DOITEM_ALLOT ( this, pItemDrop );
if ( ballot ) return S_OK;
}
// Note : À̺¥Æ® ¾ÆÀÌÅÛ Áߺ¹À¸·Î °¡Á®°¡±â ¹æÁö.
//
/*if ( pItemData->ISEVENTITEM() && m_cInventory.HaveEventItem() )
{
// ÀÌ¹Ì À̺¥Æ® ¾ÆÀÌÅÛÀ» °¡Áö°í ÀÖ½À´Ï´Ù.
GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
NetMsg.emCrow = CROW_ITEM;
NetMsg.emTakeFB = EMTAKE_FB_TOO_EVENT_ITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );
return S_FALSE;
}*/
// Field¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
HOLD_ITEM ( pItemDrop->sItemCustom );
// Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
//
GLITEMLMT::GetInstance().ReqItemRoute ( pItemDrop->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pItemDrop->sItemCustom.wTurnNum );
// [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
NetMsg_PutOn.emSlot = SLOT_HOLD;
NetMsg_PutOn.sItemCustom = pItemDrop->sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);
// Note : ¾ÆÀÌÅÆ Land¿¡¼ »èÁ¦.
m_pLandMan->DropOutItem ( pItemDrop->dwGlobID );
return S_OK;
}
// Note : InventoryÀÇ ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µé±â ½Ãµµ.
//
HRESULT GLChar::MsgReqInvenToHold ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_INVEN_TO_HOLD *pNetMsg = reinterpret_cast<GLMSG::SNETPC_REQ_INVEN_TO_HOLD*> ( nmg );
static GLMSG::SNETPC_REQ_HOLD_FB NetMsg_fb(NET_MSG_GCTRL_REQ_INVEN_TO_HOLD,EMHOLD_FB_OFF);
// ¿äûÇÑ ¾ÆÀÌÅÆ À¯È¿¼º °Ë»ç.
SINVENITEM *pInvenItem = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pInvenItem )
{
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_fb);
return S_FALSE;
}
// ¼Õ¿¡ µç ¾ÆÀÌÅÆÀÌ ÀÖÀ»¶§.
if ( VALID_HOLD_ITEM() )
{
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_fb);
return S_FALSE;
}
SITEM* pITEM = GLItemMan::GetInstance().GetItem( pInvenItem->sItemCustom.sNativeID );
if ( !pITEM ) return S_FALSE;
if ( pITEM->sBasicOp.emItemType == ITEM_PET_CARD && m_bGetPetFromDB )
{
GLGaeaServer::GetInstance().GetConsoleMsg()->Write( "PetCard Inven to Hold Error, m_bGetPetFromDB : %d",
m_bGetPetFromDB );
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_fb);
return S_FALSE;
}
// Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ ¹é¾÷.
SINVENITEM sInven_BackUp = *pInvenItem;
// Àι꿡¼ »©³¾ ¾ÆÀÌÅÆÀ» »èÁ¦.
m_cInventory.DeleteItem ( sInven_BackUp.wPosX, sInven_BackUp.wPosY );
// Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
HOLD_ITEM ( sInven_BackUp.sItemCustom );
// [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý. - Àι꿡¼ ¾ÆÀÌÅÆ »èÁ¦.
GLMSG::SNETPC_INVEN_DELETE NetMsg;
NetMsg.wPosX = sInven_BackUp.wPosX;
NetMsg.wPosY = sInven_BackUp.wPosY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
// [Àڽſ¡°Ô] Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
NetMsg_PutOn.emSlot = SLOT_HOLD;
NetMsg_PutOn.sItemCustom = sInven_BackUp.sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);
return S_OK;
}
HRESULT GLChar::MsgReqInvenExHold ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_INVEN_EX_HOLD *pNetMsg = reinterpret_cast<GLMSG::SNETPC_REQ_INVEN_EX_HOLD*> ( nmg );
if ( !VALID_HOLD_ITEM() )
{
return S_FALSE;
}
SINVENITEM *pInvenItem = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pInvenItem )
{
return S_FALSE;
}
SINVENITEM sInven_BackUp = *pInvenItem; // Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ ¹é¾÷.
WORD wPosX = sInven_BackUp.wPosX; // ¾ÆÀÌÅÆ À§Ä¡.
WORD wPosY = sInven_BackUp.wPosY;
SITEMCUSTOM sItemHold = GET_HOLD_ITEM(); // ¼Õ¿¡ µç ¾ÆÀÌÅÆ ¹é¾÷.
#if defined(VN_PARAM) //vietnamtest%%%
if ( sItemHold.bVietnamGainItem ) return S_FALSE;
#endif
SITEM* pInvenData = GLItemMan::GetInstance().GetItem ( sInven_BackUp.sItemCustom.sNativeID );
SITEM* pHoldData = GLItemMan::GetInstance().GetItem ( sItemHold.sNativeID );
if ( !pInvenData || !pHoldData ) return S_FALSE;
// Note : º´ÇÕ ÇÒ¼ö ÀÖ´Â ¾ÆÀÌÅÛÀÎÁö Á¡°Ë.
bool bMERGE(false);
bMERGE = (pInvenData->sBasicOp.sNativeID==pHoldData->sBasicOp.sNativeID);
if (bMERGE) bMERGE = ( pInvenData->ISPILE() );
if (bMERGE) bMERGE = ( sItemHold.wTurnNum<pInvenData->sDrugOp.wPileNum );
if (bMERGE) bMERGE = ( sInven_BackUp.sItemCustom.wTurnNum<pInvenData->sDrugOp.wPileNum );
if ( bMERGE )
{
WORD wTurnNum = sInven_BackUp.sItemCustom.wTurnNum + sItemHold.wTurnNum;
if ( wTurnNum <= pInvenData->sDrugOp.wPileNum )
{
// Note : °ãħ ¼ö Á¶Á¤.
pInvenItem->sItemCustom.wTurnNum = wTurnNum;
// ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
RELEASE_HOLD_ITEM ();
// Note : Àκ¥ÀÇ ¾ÆÀÌÅÛ ¾÷µ¥ÀÌÆ®.
GLMSG::SNET_INVEN_ITEM_UPDATE NetMsgInvenItem;
NetMsgInvenItem.wPosX = pNetMsg->wPosX;
NetMsgInvenItem.wPosY = pNetMsg->wPosY;
NetMsgInvenItem.sItemCustom = pInvenItem->sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenItem);
// [Àڽſ¡°Ô] ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_PUTON_RELEASE NetMsg_ReleaseHold(SLOT_HOLD);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_ReleaseHold);
}
else
{
WORD wSplit = wTurnNum - pInvenData->sDrugOp.wPileNum;
// ±âÁ¸ ¾ÆÀÌÅÛ °¹¼ö º¯°æ.
pInvenItem->sItemCustom.wTurnNum = pInvenData->sDrugOp.wPileNum;
// ¼Õ¿¡ µé°í ÀÖ´ø ¾ÆÀÌÅÛ º¯°æ.
sItemHold.wTurnNum = wSplit;
HOLD_ITEM ( sItemHold );
// Note : ¼Õ¿¡µç ¾ÆÀÌÅÛ º¯°æ.
GLMSG::SNETPC_PUTON_UPDATE NetMsgPutOn;
NetMsgPutOn.emSlot = SLOT_HOLD;
NetMsgPutOn.sItemCustom = sItemHold;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPutOn);
// Note : Àκ¥ÀÇ ¾ÆÀÌÅÛ ¾÷µ¥ÀÌÆ®.
GLMSG::SNET_INVEN_ITEM_UPDATE NetMsgInvenItem;
NetMsgInvenItem.wPosX = pNetMsg->wPosX;
NetMsgInvenItem.wPosY = pNetMsg->wPosY;
NetMsgInvenItem.sItemCustom = pInvenItem->sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenItem);
}
return S_OK;
}
// Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ »èÁ¦.
BOOL bOk = m_cInventory.DeleteItem ( sInven_BackUp.wPosX, sInven_BackUp.wPosY );
// Note : Á¾Àü ¼Õ¿¡µç ¾ÆÀÌÅÆ°ú µé·Á´Â ¾ÆÀÌÅÆÀÇ Å©±â°¡ Ʋ¸± °æ¿ì.
// µé°í ÀÖ´Â ¾ÆÀÌÅÆÀÌ µé¾î°¥ °ø°£À» ã´Â´Ù.
// if ( !pInvenData->SAME_INVENSIZE ( *pHoldData ) )
// {
// µ¿ÀÏÀ§Ä¡¿¡ ³ÖÀ»¼ö ÀÖ´ÂÁö °Ë»ç.
bOk = m_cInventory.IsInsertable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk )
{
// µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ» °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ö.
bOk = m_cInventory.FindInsrtable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk )
{
// roll-back : Àι꿡¼ »èÁ¦Çß´ø ¾ÆÀÌÅÆÀ» ´Ù½Ã ³ÖÀ½.
m_cInventory.InsertItem ( sInven_BackUp.sItemCustom, sInven_BackUp.wPosX, sInven_BackUp.wPosY, true );
return S_FALSE;
}
}
//}
// µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
m_cInventory.InsertItem ( sItemHold, wPosX, wPosY );
SINVENITEM *pINSERT_ITEM = m_cInventory.GetItem(wPosX,wPosY);
if ( !pINSERT_ITEM )
{
GLGaeaServer::GetInstance().GetConsoleMsg()->Write ( "error MsgReqInvenExHold(), sItemHold, id(%d,%d) to pos(%d,%d)",
sItemHold.sNativeID.wMainID, sItemHold.sNativeID.wSubID, wPosX, wPosY );
return S_FALSE;
}
// Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
HOLD_ITEM ( sInven_BackUp.sItemCustom );
// [Àڽſ¡°Ô] Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ »èÁ¦, ¹× ¾ÆÀÌÅÆ »ðÀÔ.
GLMSG::SNETPC_INVEN_DEL_AND_INSERT NetMsg_Del_Insert;
NetMsg_Del_Insert.wDelX = sInven_BackUp.wPosX; // »èÁ¦µÉ ¾ÆÀÌÅÆ.
NetMsg_Del_Insert.wDelY = sInven_BackUp.wPosY;
if ( pINSERT_ITEM ) NetMsg_Del_Insert.sInsert = *pINSERT_ITEM; // »ðÀԵǴ ¾ÆÀÌÅÆ.
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Del_Insert);
// [Àڽſ¡°Ô] Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
NetMsg_PutOn.emSlot = SLOT_HOLD;
NetMsg_PutOn.sItemCustom = sInven_BackUp.sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);
// À¯È¿±â°£ Ãʰú Á¡°Ë.
const SINVENITEM& sINVENITEM = *pINSERT_ITEM;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sINVENITEM.sItemCustom.sNativeID );
if ( pITEM && pITEM->IsTIMELMT() )
{
if ( pITEM->sDrugOp.tTIME_LMT != 0 )
{
const CTime cTIME_CUR = CTime::GetCurrentTime();
CTimeSpan cSPAN(pITEM->sDrugOp.tTIME_LMT);
CTime cTIME_LMT(sINVENITEM.sItemCustom.tBORNTIME);
cTIME_LMT += cSPAN;
WORD wInsertPosX = sINVENITEM.wPosX, wInsertPosY = sINVENITEM.wPosY;
if ( cTIME_CUR > cTIME_LMT )
{
// Å»°ÍÀÏ °æ¿ì
if ( pITEM->sBasicOp.emItemType == ITEM_VEHICLE && sINVENITEM.sItemCustom.dwVehicleID != 0 )
{
GLVEHICLE* pNewVehicle = new GLVEHICLE();
CGetVehicle* pGetVehicle = new CGetVehicle ( pNewVehicle,
sINVENITEM.sItemCustom.dwVehicleID,
m_dwClientID,
m_dwCharID,
true );
GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
if ( pDBMan ) pDBMan->AddJob ( pGetVehicle );
}
// ÆÖÄ«µåÀÏ °æ¿ì
if ( pITEM->sBasicOp.emItemType == ITEM_PET_CARD && sINVENITEM.sItemCustom.dwPetID != 0 )
{
CDeletePet* pDbAction = new CDeletePet ( m_dwCharID, sINVENITEM.sItemCustom.dwPetID );
GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
if ( pDBMan ) pDBMan->AddJob ( pDbAction );
// Ȱµ¿ÁßÀÌ¸é »ç¶óÁö°Ô ÇØÁØ´Ù.
PGLPETFIELD pMyPet = GLGaeaServer::GetInstance().GetPET ( m_dwPetGUID );
if ( pMyPet && sINVENITEM.sItemCustom.dwPetID == pMyPet->m_dwPetID )
{
// ÆÖÀÇ ¾Ç¼¼»ç¸®¸¦ °Ë»çÇÑ´Ù.
pMyPet->UpdateTimeLmtItem ( this );
// ³Ö¾îÁÙ²¨ ³Ö¾îÁØ´Ù.
for ( WORD i = 0; i < ACCETYPESIZE; ++i )
{
CItemDrop cDropItem;
cDropItem.sItemCustom = pMyPet->m_PutOnItems[i];
if ( IsInsertToInven ( &cDropItem ) ) InsertToInven ( &cDropItem );
else
{
if ( m_pLandMan )
{
m_pLandMan->DropItem ( m_vPos,
&(cDropItem.sItemCustom),
EMGROUP_ONE,
m_dwGaeaID );
}
}
}
GLGaeaServer::GetInstance().ReserveDropOutPet ( SDROPOUTPETINFO(pMyPet->m_dwGUID,true,false) );
// ÆÖÀÌ »èÁ¦µÇ¸é ºÎȰÁ¤º¸¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡ ¾Ë·ÁÁÜ.
CGetRestorePetList *pDbAction = new CGetRestorePetList ( m_dwCharID, m_dwClientID );
if ( pDBMan ) pDBMan->AddJob ( pDbAction );
}
else
{
// ¾Ç¼¼»ç¸®¸¦ üũÈÄ ÆÖÀ» DB¿¡¼ »èÁ¦ÇØÁØ´Ù.
GLPET* pNewPet = new GLPET ();
CGetPet* pGetPet = new CGetPet ( pNewPet,
sINVENITEM.sItemCustom.dwPetID,
m_dwClientID,
m_dwCharID,
sINVENITEM.wPosX,
sINVENITEM.wPosY,
true );
GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
if ( pDBMan ) pDBMan->AddJob ( pGetPet );
}
}
// [Àڽſ¡°Ô] ÇØ´ç ¾ÆÀÌÅÆÀ» Àι꿡¼ »èÁ¦.
GLMSG::SNETPC_INVEN_DELETE NetMsgInvenDel;
NetMsgInvenDel.wPosX = sINVENITEM.wPosX;
NetMsgInvenDel.wPosY = sINVENITEM.wPosY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDel);
// ½Ã°£ Á¦ÇÑÀ¸·Î ¾ÆÀÌÅÛ »èÁ¦ ¾Ë¸².
GLMSG::SNET_INVEN_DEL_ITEM_TIMELMT NetMsgInvenDelTimeLmt;
NetMsgInvenDelTimeLmt.nidITEM = sINVENITEM.sItemCustom.sNativeID;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDelTimeLmt);
// Note : ¾ÆÀÌÅÛ »èÁ¦.
//
m_cInventory.DeleteItem ( sINVENITEM.wPosX, sINVENITEM.wPosY );
// Note : ÄÚ½ºÅù º¹±¸.
if ( sINVENITEM.sItemCustom.nidDISGUISE!=SNATIVEID(false) )
{
SITEM *pONE = GLItemMan::GetInstance().GetItem ( sINVENITEM.sItemCustom.nidDISGUISE );
if ( !pONE ) return E_FAIL;
SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = sINVENITEM.sItemCustom.nidDISGUISE;
CTime cTIME = CTime::GetCurrentTime();
if ( sINVENITEM.sItemCustom.tDISGUISE!=0 && pONE->sDrugOp.tTIME_LMT!= 0 )
{
cTIME = CTime(sINVENITEM.sItemCustom.tDISGUISE);
CTimeSpan tLMT(pONE->sDrugOp.tTIME_LMT);
cTIME -= tLMT;
}
// Note : ¾ÆÀÌÅÛ »ý¼º.
//
sITEM_NEW.tBORNTIME = cTIME.GetTime();
sITEM_NEW.wTurnNum = 1;
sITEM_NEW.cGenType = EMGEN_BILLING;
sITEM_NEW.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
sITEM_NEW.cFieldID = (BYTE)GLGaeaServer::GetInstance().GetFieldSvrID();
sITEM_NEW.lnGenNum = GLITEMLMT::GetInstance().RegItemGen ( sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );
// Note : Àκ¥¿¡ µé¾î°¥ °ø°£ °Ë»ç.
BOOL bOk = m_cInventory.IsInsertable ( pONE->sBasicOp.wInvenSizeX, pONE->sBasicOp.wInvenSizeY, wInsertPosX, wInsertPosY );
if ( !bOk ) return E_FAIL;
// Note : Àκ¥¿¡ ³ÖÀ½.
m_cInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
SINVENITEM *pINSERT_ITEM = m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
GLMSG::SNETPC_INVEN_INSERT NetItemInsert;
NetItemInsert.Data = *pINSERT_ITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemInsert);
// Note : ºÐ¸®µÈ ÄÚ½ºÅù ·Î±×.
GLITEMLMT::GetInstance().ReqItemRoute ( pINSERT_ITEM->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pINSERT_ITEM->sItemCustom.wTurnNum );
}
}
}
}
return S_OK;
}
HRESULT GLChar::MsgReqInvenToSlot ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_INVEN_TO_SLOT *pNetMsg = reinterpret_cast<GLMSG::SNETPC_REQ_INVEN_TO_SLOT*> ( nmg );
if ( pNetMsg->emToSlot >= SLOT_TSIZE ) return S_FALSE;
SINVENITEM *pInvenItem = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pInvenItem ) return E_FAIL;
SITEMCUSTOM sItemCustom = pInvenItem->sItemCustom;
BOOL bOk(FALSE);
if( sItemCustom.nidDISGUISE!=SNATIVEID(false) )
{
// ÄÚ½ºÆ¬À» ÀÔÈù ¾ÆÀÌÅÛÀÏ °æ¿ì
bOk = ACCEPT_ITEM ( sItemCustom.sNativeID, sItemCustom.nidDISGUISE );
if ( !bOk ) return E_FAIL;
}
else
{
// ÀÚ°ÝÁ¶°Ç¿¡ ºÎÇÕÇÏ´ÂÁö °Ë»ç.
bOk = ACCEPT_ITEM ( sItemCustom.sNativeID );
if ( !bOk ) return E_FAIL;
}
if ( sItemCustom.IsWrap() ) return E_FAIL;
// ÇØ´ç ½½·Ô¿¡ ÀåÂø °¡´ÉÇÑÁö °Ë»ç.
bOk = CHECKSLOT_ITEM ( sItemCustom.sNativeID, pNetMsg->emToSlot );
if ( !bOk ) return E_FAIL;
// ÇØ´ç ½½·ÔÀÌ ºñ¿´´ÂÁö Á¡°Ë.
bOk = ISEMPTY_SLOT ( sItemCustom.sNativeID, pNetMsg->emToSlot );
if ( !bOk ) return E_FAIL;
// ½½·Ô¿¡ ¾ÆÀÌÅÆ »ðÀÔ.
SLOT_ITEM ( sItemCustom, pNetMsg->emToSlot );
// Àι꿡¼ ¾ÆÀÌÅÆ »èÁ¦.
m_cInventory.DeleteItem ( pNetMsg->wPosX, pNetMsg->wPosY );
// [Àڽſ¡°Ô] ÇØ´ç ¾ÆÀÌÅÆÀ» Àι꿡¼ »èÁ¦.
GLMSG::SNETPC_INVEN_DELETE NetMsgInvenDel;
NetMsgInvenDel.wPosX = pNetMsg->wPosX;
NetMsgInvenDel.wPosY = pNetMsg->wPosY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDel);
// [Àڽſ¡°Ô] ÇØ´ç ¾ÆÀÌÅÆÀ» Àι꿡 ³Ö¾îÁÜ.
GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
NetMsg_PutOn.emSlot = pNetMsg->emToSlot;
NetMsg_PutOn.sItemCustom = GET_SLOT_ITEM(pNetMsg->emToSlot);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);
return S_OK;
}
HRESULT GLChar::MsgReqVNGainToHold(NET_MSG_GENERIC* nmg)
{
GLMSG::SNETPC_REQ_VNGAIN_TO_HOLD *pNetMsg = reinterpret_cast<GLMSG::SNETPC_REQ_VNGAIN_TO_HOLD*> ( nmg );
static GLMSG::SNETPC_REQ_HOLD_FB NetMsg_fb(NET_MSG_GCTRL_REQ_VNGAIN_TO_HOLD,EMHOLD_FB_OFF);
// ¿äûÇÑ ¾ÆÀÌÅÆ À¯È¿¼º °Ë»ç.
SINVENITEM *pInvenItem = m_cVietnamInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pInvenItem )
{
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_fb);
return S_FALSE;
}
// ¼Õ¿¡ µç ¾ÆÀÌÅÆÀÌ ÀÖÀ»¶§.
if ( VALID_HOLD_ITEM() )
{
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_fb);
return S_FALSE;
}
// Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ ¹é¾÷.
SINVENITEM sInven_BackUp = *pInvenItem;
// Àι꿡¼ »©³¾ ¾ÆÀÌÅÆÀ» »èÁ¦.
m_cVietnamInventory.DeleteItem ( sInven_BackUp.wPosX, sInven_BackUp.wPosY );
// Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
HOLD_ITEM ( sInven_BackUp.sItemCustom );
// [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý. - Àι꿡¼ ¾ÆÀÌÅÆ »èÁ¦.
GLMSG::SNETPC_INVEN_DELETE NetMsg;
NetMsg.wPosX = sInven_BackUp.wPosX;
NetMsg.wPosY = sInven_BackUp.wPosY;
NetMsg.bVietnamInven = TRUE;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
// [Àڽſ¡°Ô] Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
NetMsg_PutOn.emSlot = SLOT_HOLD;
NetMsg_PutOn.sItemCustom = sInven_BackUp.sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);
return S_OK;
}
HRESULT GLChar::MsgReqVNGainExHold(NET_MSG_GENERIC* nmg)
{
GLMSG::SNETPC_REQ_VNGAIN_EX_HOLD *pNetMsg = reinterpret_cast<GLMSG::SNETPC_REQ_VNGAIN_EX_HOLD*> ( nmg );
if ( !VALID_HOLD_ITEM() )
{
return S_FALSE;
}
SINVENITEM *pInvenItem = m_cVietnamInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pInvenItem )
{
return S_FALSE;
}
SINVENITEM sInven_BackUp = *pInvenItem; // Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ ¹é¾÷.
WORD wPosX = sInven_BackUp.wPosX; // ¾ÆÀÌÅÆ À§Ä¡.
WORD wPosY = sInven_BackUp.wPosY;
SITEMCUSTOM sItemHold = GET_HOLD_ITEM(); // ¼Õ¿¡ µç ¾ÆÀÌÅÆ ¹é¾÷.
SITEM* pInvenData = GLItemMan::GetInstance().GetItem ( sInven_BackUp.sItemCustom.sNativeID );
SITEM* pHoldData = GLItemMan::GetInstance().GetItem ( sItemHold.sNativeID );
if ( !pInvenData || !pHoldData ) return S_FALSE;
// Note : º´ÇÕ ÇÒ¼ö ÀÖ´Â ¾ÆÀÌÅÛÀÎÁö Á¡°Ë.
bool bMERGE(false);
bMERGE = (pInvenData->sBasicOp.sNativeID==pHoldData->sBasicOp.sNativeID);
if (bMERGE) bMERGE = ( pInvenData->ISPILE() );
if (bMERGE) bMERGE = ( sItemHold.wTurnNum<pInvenData->sDrugOp.wPileNum );
if (bMERGE) bMERGE = ( sInven_BackUp.sItemCustom.wTurnNum<pInvenData->sDrugOp.wPileNum );
if ( bMERGE )
{
WORD wTurnNum = sInven_BackUp.sItemCustom.wTurnNum + sItemHold.wTurnNum;
if ( wTurnNum <= pInvenData->sDrugOp.wPileNum )
{
// Note : °ãħ ¼ö Á¶Á¤.
pInvenItem->sItemCustom.wTurnNum = wTurnNum;
// ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
RELEASE_HOLD_ITEM ();
// Note : Àκ¥ÀÇ ¾ÆÀÌÅÛ ¾÷µ¥ÀÌÆ®.
GLMSG::SNET_INVEN_ITEM_UPDATE NetMsgInvenItem;
NetMsgInvenItem.wPosX = pNetMsg->wPosX;
NetMsgInvenItem.wPosY = pNetMsg->wPosY;
NetMsgInvenItem.sItemCustom = pInvenItem->sItemCustom;
NetMsgInvenItem.bVietnamInven = TRUE;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenItem);
// [Àڽſ¡°Ô] ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_PUTON_RELEASE NetMsg_ReleaseHold(SLOT_HOLD);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_ReleaseHold);
}
else
{
WORD wSplit = wTurnNum - pInvenData->sDrugOp.wPileNum;
// ±âÁ¸ ¾ÆÀÌÅÛ °¹¼ö º¯°æ.
pInvenItem->sItemCustom.wTurnNum = pInvenData->sDrugOp.wPileNum;
// ¼Õ¿¡ µé°í ÀÖ´ø ¾ÆÀÌÅÛ º¯°æ.
sItemHold.wTurnNum = wSplit;
HOLD_ITEM ( sItemHold );
// Note : ¼Õ¿¡µç ¾ÆÀÌÅÛ º¯°æ.
GLMSG::SNETPC_PUTON_UPDATE NetMsgPutOn;
NetMsgPutOn.emSlot = SLOT_HOLD;
NetMsgPutOn.sItemCustom = sItemHold;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPutOn);
// Note : Àκ¥ÀÇ ¾ÆÀÌÅÛ ¾÷µ¥ÀÌÆ®.
GLMSG::SNET_INVEN_ITEM_UPDATE NetMsgInvenItem;
NetMsgInvenItem.wPosX = pNetMsg->wPosX;
NetMsgInvenItem.wPosY = pNetMsg->wPosY;
NetMsgInvenItem.sItemCustom = pInvenItem->sItemCustom;
NetMsgInvenItem.bVietnamInven = TRUE;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenItem);
}
return S_OK;
}
// Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ »èÁ¦.
BOOL bOk = m_cVietnamInventory.DeleteItem ( sInven_BackUp.wPosX, sInven_BackUp.wPosY );
// Note : Á¾Àü ¼Õ¿¡µç ¾ÆÀÌÅÆ°ú µé·Á´Â ¾ÆÀÌÅÆÀÇ Å©±â°¡ Ʋ¸± °æ¿ì.
// µé°í ÀÖ´Â ¾ÆÀÌÅÆÀÌ µé¾î°¥ °ø°£À» ã´Â´Ù.
// if ( !pInvenData->SAME_INVENSIZE ( *pHoldData ) )
{
// µ¿ÀÏÀ§Ä¡¿¡ ³ÖÀ»¼ö ÀÖ´ÂÁö °Ë»ç.
BOOL bOk = m_cVietnamInventory.IsInsertable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk )
{
// µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ» °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ö.
bOk = m_cVietnamInventory.FindInsrtable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk )
{
// roll-back : Àι꿡¼ »èÁ¦Çß´ø ¾ÆÀÌÅÆÀ» ´Ù½Ã ³ÖÀ½.
sInven_BackUp.sItemCustom.bVietnamGainItem = true;
m_cVietnamInventory.InsertItem ( sInven_BackUp.sItemCustom, sInven_BackUp.wPosX, sInven_BackUp.wPosY, true );
return S_FALSE;
}
}
}
// µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
sItemHold.bVietnamGainItem = true;
m_cVietnamInventory.InsertItem ( sItemHold, wPosX, wPosY );
SINVENITEM *pINSERT_ITEM = m_cVietnamInventory.GetItem(wPosX,wPosY);
if ( !pINSERT_ITEM )
{
GLGaeaServer::GetInstance().GetConsoleMsg()->Write ( "error MsgReqInvenExHold(), sItemHold, id(%d,%d) to pos(%d,%d)",
sItemHold.sNativeID.wMainID, sItemHold.sNativeID.wSubID, wPosX, wPosY );
return S_FALSE;
}
// Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
HOLD_ITEM ( sInven_BackUp.sItemCustom );
// [Àڽſ¡°Ô] Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ »èÁ¦, ¹× ¾ÆÀÌÅÆ »ðÀÔ.
GLMSG::SNETPC_INVEN_DEL_AND_INSERT NetMsg_Del_Insert;
NetMsg_Del_Insert.wDelX = sInven_BackUp.wPosX; // »èÁ¦µÉ ¾ÆÀÌÅÆ.
NetMsg_Del_Insert.wDelY = sInven_BackUp.wPosY;
NetMsg_Del_Insert.bVietnamInven = TRUE;
if ( pINSERT_ITEM ) NetMsg_Del_Insert.sInsert = *pINSERT_ITEM; // »ðÀԵǴ ¾ÆÀÌÅÆ.
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Del_Insert);
// [Àڽſ¡°Ô] Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
NetMsg_PutOn.emSlot = SLOT_HOLD;
NetMsg_PutOn.sItemCustom = sInven_BackUp.sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);
return S_OK;
}
HRESULT GLChar::MsgReqHoldToVNGain(NET_MSG_GENERIC* nmg)
{
GLMSG::SNETPC_REQ_HOLD_TO_VNGAIN *pNetMsg = reinterpret_cast<GLMSG::SNETPC_REQ_HOLD_TO_VNGAIN*> ( nmg );
if ( !VALID_HOLD_ITEM() )
{
return S_FALSE;
}
SITEM* pHoldData = GLItemMan::GetInstance().GetItem ( GET_HOLD_ITEM().sNativeID );
if ( !pHoldData )
{
return E_FAIL;
}
// Àκ¥ À§Ä¡.
WORD wInsertPosX = pNetMsg->wPosX, wInsertPosY = pNetMsg->wPosY;
// ÇØÅ· ÀçÇö ( ¾ÆÀÌÅÛÀÇ »çÀÌÁî°¡ 0 À϶§ )
//pHoldData->sBasicOp.wInvenSizeX = 0, pHoldData->sBasicOp.wInvenSizeY = 0;
BOOL bOk = m_cVietnamInventory.IsInsertable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, wInsertPosX, wInsertPosY );
if ( !bOk )
{
// ÀιêÀÌ °¡µæÂþÀ½.
return E_FAIL;
}
// µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
SITEMCUSTOM& sITEM_NEW = m_PutOnItems[SLOT_HOLD];
sITEM_NEW.bVietnamGainItem = true;
bOk = m_cVietnamInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
if ( !bOk ) return E_FAIL;
SINVENITEM sINVENITEM = *m_cVietnamInventory.FindPosItem ( wInsertPosX, wInsertPosY );
// ¼º°ø½Ã ¾ÆÀÌÅÆ Á¦°Å.
RELEASE_HOLD_ITEM ();
// [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ »ðÀÔ.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven_Insert;
NetMsg_Inven_Insert.bVietnamInven = TRUE;
NetMsg_Inven_Insert.Data = sINVENITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Insert);
// [Àڽſ¡°Ô] ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_PUTON_RELEASE NetMsg_ReleaseHold(SLOT_HOLD);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_ReleaseHold);
return S_OK;
}
HRESULT GLChar::MsgReqVNInvenToInven( NET_MSG_GENERIC* nmg )
{
if ( m_dwVietnamInvenCount <= 0 ) return E_FAIL;
GLMSG::SNETPC_REQ_VNINVEN_TO_INVEN *pNetMsg = (GLMSG::SNETPC_REQ_VNINVEN_TO_INVEN *)nmg;
SINVENITEM* pInvenItem(NULL);
pInvenItem = m_cVietnamInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
// »ì·Á°í ÇÏ´Â ¾ÆÀÌÅÆÀÌ ¾ø½À´Ï´Ù.
if ( !pInvenItem ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem ) return E_FAIL;
WORD wINVENX = pItem->sBasicOp.wInvenSizeX;
WORD wINVENY = pItem->sBasicOp.wInvenSizeY;
WORD wInsertPosX(0), wInsertPosY(0);
BOOL bITEM_SPACE(false);
bITEM_SPACE = m_cInventory.FindInsrtable ( wINVENX, wINVENY, wInsertPosX, wInsertPosY );
// Àκ¥¿¡ ¿©À¯°ø°£ÀÌ ¾øÀ» °æ¿ì Ãë¼ÒµÊ.
if ( !bITEM_SPACE ) return E_FAIL;
SITEMCUSTOM sITEM_NEW = pInvenItem->sItemCustom;
sITEM_NEW.bVietnamGainItem = false;
m_cInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
m_cVietnamInventory.DeleteItem( pNetMsg->wPosX, pNetMsg->wPosY );
SINVENITEM sINVENITEM = *m_cInventory.FindPosItem ( wInsertPosX, wInsertPosY );
m_dwVietnamInvenCount--;
GLMSG::SNETPC_INVEN_VIETNAM_ITEMGETNUM_UPDATE NetMsgFB;
NetMsgFB.dwVietnamInvenCount = m_dwVietnamInvenCount;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
GLMSG::SNETPC_REQ_VNINVEN_TO_INVEN_FB NetMsg;
NetMsg.wPosX = pNetMsg->wPosX;
NetMsg.wPosY = pNetMsg->wPosY;
NetMsg.wNewPosX = wInsertPosX;
NetMsg.wNewPosY = wInsertPosY;
NetMsg.Data = sINVENITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sINVENITEM.sItemCustom.sNativeID );
if ( pITEM && pITEM->IsTIMELMT() )
{
if ( pITEM->sDrugOp.tTIME_LMT != 0 )
{
const CTime cTIME_CUR = CTime::GetCurrentTime();
CTimeSpan cSPAN(pITEM->sDrugOp.tTIME_LMT);
CTime cTIME_LMT(sINVENITEM.sItemCustom.tBORNTIME);
cTIME_LMT += cSPAN;
WORD wInsertPosX = sINVENITEM.wPosX, wInsertPosY = sINVENITEM.wPosY;
if ( cTIME_CUR > cTIME_LMT )
{
// [Àڽſ¡°Ô] ÇØ´ç ¾ÆÀÌÅÆÀ» Àι꿡¼ »èÁ¦.
GLMSG::SNETPC_INVEN_DELETE NetMsgInvenDel;
NetMsgInvenDel.wPosX = sINVENITEM.wPosX;
NetMsgInvenDel.wPosY = sINVENITEM.wPosY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDel);
// ½Ã°£ Á¦ÇÑÀ¸·Î ¾ÆÀÌÅÛ »èÁ¦ ¾Ë¸².
GLMSG::SNET_INVEN_DEL_ITEM_TIMELMT NetMsgInvenDelTimeLmt;
NetMsgInvenDelTimeLmt.nidITEM = sINVENITEM.sItemCustom.sNativeID;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDelTimeLmt);
// Note : ¾ÆÀÌÅÛ »èÁ¦.
//
m_cInventory.DeleteItem ( sINVENITEM.wPosX, sINVENITEM.wPosY );
// Note : ÄÚ½ºÅù º¹±¸.
if ( sINVENITEM.sItemCustom.nidDISGUISE!=SNATIVEID(false) )
{
SITEM *pONE = GLItemMan::GetInstance().GetItem ( sINVENITEM.sItemCustom.nidDISGUISE );
if ( !pONE ) return E_FAIL;
SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = sINVENITEM.sItemCustom.nidDISGUISE;
CTime cTIME = CTime::GetCurrentTime();
if ( sINVENITEM.sItemCustom.tDISGUISE!=0 && pONE->sDrugOp.tTIME_LMT!= 0 )
{
cTIME = CTime(sINVENITEM.sItemCustom.tDISGUISE);
CTimeSpan tLMT(pONE->sDrugOp.tTIME_LMT);
cTIME -= tLMT;
}
// Note : ¾ÆÀÌÅÛ »ý¼º.
//
sITEM_NEW.tBORNTIME = cTIME.GetTime();
sITEM_NEW.wTurnNum = 1;
sITEM_NEW.cGenType = EMGEN_BILLING;
sITEM_NEW.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
sITEM_NEW.cFieldID = (BYTE)GLGaeaServer::GetInstance().GetFieldSvrID();
sITEM_NEW.lnGenNum = GLITEMLMT::GetInstance().RegItemGen ( sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );
// Note : Àκ¥¿¡ µé¾î°¥ °ø°£ °Ë»ç.
BOOL bOk = m_cInventory.IsInsertable ( pONE->sBasicOp.wInvenSizeX, pONE->sBasicOp.wInvenSizeY, wInsertPosX, wInsertPosY );
if ( !bOk ) return E_FAIL;
// Note : Àκ¥¿¡ ³ÖÀ½.
m_cInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
SINVENITEM *pINSERT_ITEM = m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
GLMSG::SNETPC_INVEN_INSERT NetItemInsert;
NetItemInsert.Data = *pINSERT_ITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemInsert);
// Note : ºÐ¸®µÈ ÄÚ½ºÅù ·Î±×.
GLITEMLMT::GetInstance().ReqItemRoute ( pINSERT_ITEM->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pINSERT_ITEM->sItemCustom.wTurnNum );
}
}
}
}
return S_OK;
}
HRESULT GLChar::MsgReqVNGainInvenReset(NET_MSG_GENERIC* nmg)
{
m_cVietnamInventory.DeleteItemAll();
return S_OK;
}
HRESULT GLChar::MsgReqInvenSplit ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_INVEN_SPLIT *pNetMsg = (GLMSG::SNETPC_REQ_INVEN_SPLIT *)nmg;
BOOL bOk(FALSE);
// Note : ºÐ¸® ¿äû ¾ÆÀÌÅÛ Ã£À½.
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pInvenItem ) return E_FAIL;
// Note : ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿À±â.
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem ) return E_FAIL;
// Note : ºÐ¸® °¡´ÉÇÑ ¾ÆÀÌÅÛÀÎÁö Á¡°Ë.
bool bSPLIT(false);
bSPLIT = ( pItem->ISINSTANCE() );
if ( !bSPLIT ) return E_FAIL;
if ( pNetMsg->wSplit < 1 ) return E_FAIL;
if ( pInvenItem->sItemCustom.wTurnNum <= 1 ) return E_FAIL;
if ( pInvenItem->sItemCustom.wTurnNum <= pNetMsg->wSplit ) return E_FAIL;
// Note : ¿øº» ¾ÆÀÌÅÛÀÇ º¯ÈµÈ °¹¼ö.
WORD wORGIN_SPLIT = pInvenItem->sItemCustom.wTurnNum - pNetMsg->wSplit;
// Note : ºÐ¸®µÇ¾î »õ·Î »ý±â´Â ¾ÆÀÌÅÛ.
SITEMCUSTOM sNEW_ITEM = pInvenItem->sItemCustom;
sNEW_ITEM.wTurnNum = pNetMsg->wSplit;
// Note : »õ·Î »ý±â´Â ¾ÆÀÌÅÛ À§Ä¡ ã±â.
WORD wInvenPosX(0), wInvenPosY(0);
bOk = m_cInventory.FindInsrtable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wInvenPosX, wInvenPosY );
if ( !bOk ) return E_FAIL;
// Note : »õ·Î »ý±ä ¾ÆÀÌÅÛ ³Ö±â.
bOk = m_cInventory.InsertItem ( sNEW_ITEM, wInvenPosX, wInvenPosY );
if ( !bOk ) return E_FAIL;
// Note : »õ·Î »ý±ä ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿À±â.
SINVENITEM* pNewItem = m_cInventory.GetItem ( wInvenPosX, wInvenPosY );
if ( !bOk ) return E_FAIL;
// Note : ¿øº» ¾ÆÀÌÅÛÀÇ °¹¼ö º¯°æ ½ÃÅ´.
pInvenItem->sItemCustom.wTurnNum = wORGIN_SPLIT;
// Note : Àκ¥¿¡ »õ·Î ºÐ¸®µÇ¾î µé¾î °¡´Â ¾ÆÀÌÅÛ.
GLMSG::SNETPC_INVEN_INSERT NetMsgNew;
NetMsgNew.Data = *pNewItem;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgNew);
// Note : ¿øº» ¾ÆÀÌÅÛ °¹¼ö º¯°æ.
GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsgInven;
NetMsgInven.wPosX = pNetMsg->wPosX;
NetMsgInven.wPosY = pNetMsg->wPosY;
NetMsgInven.wTurnNum = wORGIN_SPLIT;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInven);
return S_OK;
}
HRESULT GLChar::MsgReqHoldToInven ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_HOLD_TO_INVEN *pNetMsg = reinterpret_cast<GLMSG::SNETPC_REQ_HOLD_TO_INVEN*> ( nmg );
#if defined(VN_PARAM) //vietnamtest%%%
if ( pNetMsg->bUseVietnamInven && m_dwVietnamInvenCount <= 0 ) return E_FAIL;
#endif
if ( !VALID_HOLD_ITEM() )
{
return S_FALSE;
}
SITEM* pHoldData = GLItemMan::GetInstance().GetItem ( GET_HOLD_ITEM().sNativeID );
if ( !pHoldData )
{
return E_FAIL;
}
// Àκ¥ À§Ä¡.
WORD wInsertPosX = pNetMsg->wPosX, wInsertPosY = pNetMsg->wPosY;
// ÇØÅ· ÀçÇö ( ¾ÆÀÌÅÛÀÇ »çÀÌÁî°¡ 0 À϶§ )
//pHoldData->sBasicOp.wInvenSizeX = 0, pHoldData->sBasicOp.wInvenSizeY = 0;
BOOL bOk = m_cInventory.IsInsertable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, wInsertPosX, wInsertPosY );
if ( !bOk )
{
// ÀιêÀÌ °¡µæÂþÀ½.
return E_FAIL;
}
// µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
#if defined(VN_PARAM) //vietnamtest%%%
SITEMCUSTOM& sCustom = m_PutOnItems[SLOT_HOLD];
if ( sCustom.bVietnamGainItem && m_dwVietnamInvenCount <= 0 ) return E_FAIL;
sCustom.bVietnamGainItem = false;
#endif
bOk = m_cInventory.InsertItem ( GET_HOLD_ITEM(), wInsertPosX, wInsertPosY );
if ( !bOk ) return E_FAIL;
SINVENITEM sINVENITEM = *m_cInventory.FindPosItem ( wInsertPosX, wInsertPosY );
// ¼º°ø½Ã ¾ÆÀÌÅÆ Á¦°Å.
RELEASE_HOLD_ITEM ();
#if defined(VN_PARAM) //vietnamtest%%%
if( pNetMsg->bUseVietnamInven )
{
m_dwVietnamInvenCount--;
GLMSG::SNETPC_INVEN_VIETNAM_ITEMGETNUM_UPDATE NetMsgFB;
NetMsgFB.dwVietnamInvenCount = m_dwVietnamInvenCount;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
}
#endif
// [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ »ðÀÔ.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven_Insert;
NetMsg_Inven_Insert.Data = sINVENITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Insert);
// [Àڽſ¡°Ô] ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_PUTON_RELEASE NetMsg_ReleaseHold(SLOT_HOLD);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_ReleaseHold);
// À¯È¿±â°£ Ãʰú Á¡°Ë.
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sINVENITEM.sItemCustom.sNativeID );
if ( pITEM && pITEM->IsTIMELMT() )
{
if ( pITEM->sDrugOp.tTIME_LMT != 0 )
{
const CTime cTIME_CUR = CTime::GetCurrentTime();
CTimeSpan cSPAN(pITEM->sDrugOp.tTIME_LMT);
CTime cTIME_LMT(sINVENITEM.sItemCustom.tBORNTIME);
cTIME_LMT += cSPAN;
if ( cTIME_CUR > cTIME_LMT )
{
// Å»°ÍÀÏ °æ¿ì
if ( pITEM->sBasicOp.emItemType == ITEM_VEHICLE && sINVENITEM.sItemCustom.dwVehicleID != 0 )
{
GLVEHICLE* pNewVehicle = new GLVEHICLE();
CGetVehicle* pGetVehicle = new CGetVehicle ( pNewVehicle,
sINVENITEM.sItemCustom.dwVehicleID,
m_dwClientID,
m_dwCharID,
true );
GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
if ( pDBMan ) pDBMan->AddJob ( pGetVehicle );
}
// ÆÖÄ«µåÀÏ °æ¿ì
if ( pITEM->sBasicOp.emItemType == ITEM_PET_CARD && sINVENITEM.sItemCustom.dwPetID != 0 )
{
CDeletePet* pDbAction = new CDeletePet ( m_dwCharID, sINVENITEM.sItemCustom.dwPetID );
GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
if ( pDBMan ) pDBMan->AddJob ( pDbAction );
// Ȱµ¿ÁßÀÌ¸é »ç¶óÁö°Ô ÇØÁØ´Ù.
PGLPETFIELD pMyPet = GLGaeaServer::GetInstance().GetPET ( m_dwPetGUID );
if ( pMyPet && sINVENITEM.sItemCustom.dwPetID == pMyPet->m_dwPetID )
{
// ÆÖÀÇ ¾Ç¼¼»ç¸®¸¦ °Ë»çÇÑ´Ù.
pMyPet->UpdateTimeLmtItem ( this );
// ³Ö¾îÁÙ²¨ ³Ö¾îÁØ´Ù.
for ( WORD i = 0; i < ACCETYPESIZE; ++i )
{
CItemDrop cDropItem;
cDropItem.sItemCustom = pMyPet->m_PutOnItems[i];
if ( IsInsertToInven ( &cDropItem ) ) InsertToInven ( &cDropItem );
else
{
if ( m_pLandMan )
{
m_pLandMan->DropItem ( m_vPos,
&(cDropItem.sItemCustom),
EMGROUP_ONE,
m_dwGaeaID );
}
}
}
GLGaeaServer::GetInstance().ReserveDropOutPet ( SDROPOUTPETINFO(pMyPet->m_dwGUID,true,false) );
// ÆÖÀÌ »èÁ¦µÇ¸é ºÎȰÁ¤º¸¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡ ¾Ë·ÁÁÜ.
CGetRestorePetList *pDbAction = new CGetRestorePetList ( m_dwCharID, m_dwClientID );
if ( pDBMan ) pDBMan->AddJob ( pDbAction );
}
else
{
// ¾Ç¼¼»ç¸®¸¦ üũÈÄ ÆÖÀ» DB¿¡¼ »èÁ¦ÇØÁØ´Ù.
GLPET* pNewPet = new GLPET ();
CGetPet* pGetPet = new CGetPet ( pNewPet,
sINVENITEM.sItemCustom.dwPetID,
m_dwClientID,
m_dwCharID,
sINVENITEM.wPosX,
sINVENITEM.wPosY,
true );
GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
if ( pDBMan ) pDBMan->AddJob ( pGetPet );
}
}
// [Àڽſ¡°Ô] ÇØ´ç ¾ÆÀÌÅÆÀ» Àι꿡¼ »èÁ¦.
GLMSG::SNETPC_INVEN_DELETE NetMsgInvenDel;
NetMsgInvenDel.wPosX = sINVENITEM.wPosX;
NetMsgInvenDel.wPosY = sINVENITEM.wPosY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDel);
// ½Ã°£ Á¦ÇÑÀ¸·Î ¾ÆÀÌÅÛ »èÁ¦ ¾Ë¸².
GLMSG::SNET_INVEN_DEL_ITEM_TIMELMT NetMsgInvenDelTimeLmt;
NetMsgInvenDelTimeLmt.nidITEM = sINVENITEM.sItemCustom.sNativeID;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDelTimeLmt);
// Note : ¾ÆÀÌÅÛ »èÁ¦.
//
m_cInventory.DeleteItem ( sINVENITEM.wPosX, sINVENITEM.wPosY );
// Note : ÄÚ½ºÅù º¹±¸.
if ( sINVENITEM.sItemCustom.nidDISGUISE!=SNATIVEID(false) )
{
SITEM *pONE = GLItemMan::GetInstance().GetItem ( sINVENITEM.sItemCustom.nidDISGUISE );
if ( !pONE ) return E_FAIL;
SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = sINVENITEM.sItemCustom.nidDISGUISE;
CTime cTIME = CTime::GetCurrentTime();
if ( sINVENITEM.sItemCustom.tDISGUISE!=0 && pONE->sDrugOp.tTIME_LMT!= 0 )
{
cTIME = CTime(sINVENITEM.sItemCustom.tDISGUISE);
CTimeSpan tLMT(pONE->sDrugOp.tTIME_LMT);
cTIME -= tLMT;
}
// Note : ¾ÆÀÌÅÛ »ý¼º.
//
sITEM_NEW.tBORNTIME = cTIME.GetTime();
sITEM_NEW.wTurnNum = 1;
sITEM_NEW.cGenType = EMGEN_BILLING;
sITEM_NEW.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
sITEM_NEW.cFieldID = (BYTE)GLGaeaServer::GetInstance().GetFieldSvrID();
sITEM_NEW.lnGenNum = GLITEMLMT::GetInstance().RegItemGen ( sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );
// Note : Àκ¥¿¡ µé¾î°¥ °ø°£ °Ë»ç.
BOOL bOk = m_cInventory.IsInsertable ( pONE->sBasicOp.wInvenSizeX, pONE->sBasicOp.wInvenSizeY, wInsertPosX, wInsertPosY );
if ( !bOk ) return E_FAIL;
// Note : Àκ¥¿¡ ³ÖÀ½.
m_cInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
SINVENITEM *pINSERT_ITEM = m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
GLMSG::SNETPC_INVEN_INSERT NetItemInsert;
NetItemInsert.Data = *pINSERT_ITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemInsert);
// Note : ºÐ¸®µÈ ÄÚ½ºÅù ·Î±×.
GLITEMLMT::GetInstance().ReqItemRoute ( pINSERT_ITEM->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pINSERT_ITEM->sItemCustom.wTurnNum );
}
}
}
}
/*
// ȹµæÇÑ ¾ÆÀÌÅÛÀÌ ÆÖÄ«µå && »ý¼ºµÈ ÆÖÀ̶ó¸é ¼ÒÀ¯±ÇÀ» ÀÌÀüÇÑ´Ù.
// ÆÖ¾ÆÀ̵𰡠0 ÀÌ ¾Æ´Ï¸é ÆÖÄ«µåÀÌ¸é¼ DB¿¡ ÆÖÀÌ »ý¼ºµÈ °ÍÀÌ´Ù.
if ( pHoldData->sBasicOp.emItemType == ITEM_PET_CARD && sINVENITEM.sItemCustom.dwPetID != 0 )
{
CExchangePet* pDbAction = new CExchangePet ( m_dwCharID, sINVENITEM.sItemCustom.dwPetID );
GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
if ( pDBMan ) pDBMan->AddJob ( pDbAction );
}
*/
return S_OK;
}
HRESULT GLChar::MsgReqHoldToField ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_HOLD_TO_FIELD *pNetMsg = reinterpret_cast<GLMSG::SNETPC_REQ_HOLD_TO_FIELD*> ( nmg );
if ( !VALID_HOLD_ITEM () ) return S_FALSE;
D3DXVECTOR3 vCollisionPos;
BOOL bCollision = m_pLandMan->IsCollisionNavi
(
pNetMsg->vPos + D3DXVECTOR3(0,+5,0),
pNetMsg->vPos + D3DXVECTOR3(0,-5,0),
vCollisionPos
);
if ( !bCollision ) return S_FALSE;
const SITEMCUSTOM& sITEMCUSTOM = GET_HOLD_ITEM();
#if defined(VN_PARAM) //vietnamtest%%%
if ( sITEMCUSTOM.bVietnamGainItem )
{
// ¾ÆÀÌÅÆ Á¦°Å.
RELEASE_HOLD_ITEM ();
// [Àڽſ¡°Ô] ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_PUTON_RELEASE NetMsg_ReleaseHold(SLOT_HOLD);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_ReleaseHold);
return S_OK;
}
#endif
SITEMCUSTOM sCustom = GET_HOLD_ITEM();
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sITEMCUSTOM.sNativeID );
if ( !pITEM ) return false;
// ¹ö¸®´Â ¾ÆÀÌÅÛÀÌ ÆÖÄ«µå && ÆÖÀÌ È°¼º»óÅÂÀÌ¸é ¹ö¸± ¼ö ¾ø´Ù
if ( pITEM->sBasicOp.emItemType == ITEM_PET_CARD )
{
PGLPETFIELD pMyPet = GLGaeaServer::GetInstance().GetPET ( m_dwPetGUID );
if ( pMyPet && pMyPet->IsValid () && sITEMCUSTOM.dwPetID == pMyPet->m_dwPetID ) return FALSE;
}
// °Å·¡¿É¼Ç
//
if ( !pITEM->sBasicOp.IsTHROW() && ( pITEM && sCustom.bWrap!=true ) ) return FALSE;
// GMCharEdit ·Î ³ÖÀº ¾ÆÀÌÅÛÀº ¹ö¸®±â ºÒ°¡´ÉÇÏ´Ù.
if ( sITEMCUSTOM.IsGM_GENITEM() && ( pITEM && sCustom.bWrap!=true ) ) return FALSE;
// Item Drop ½Ãµµ.
BOOL bDrop = m_pLandMan->DropItem ( vCollisionPos, const_cast<SITEMCUSTOM*> ( &sITEMCUSTOM ) );
if ( !bDrop ) return S_FALSE;
// Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
//
GLITEMLMT::GetInstance().ReqItemRoute ( sITEMCUSTOM, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_GROUND, sITEMCUSTOM.wTurnNum );
// Drop ½Ã ¾ÆÀÌÅÆ Á¦°Å.
RELEASE_HOLD_ITEM ();
// [Àڽſ¡°Ô] ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_PUTON_RELEASE NetMsg_ReleaseHold(SLOT_HOLD);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_ReleaseHold);
return S_OK;
}
BOOL ISBOTH_HANDHELD ( SITEM *pITEM )
{
GASSERT ( pITEM );
return ( (pITEM->sSuitOp.emSuit==SUIT_HANDHELD) && pITEM->sSuitOp.IsBOTHHAND() );
}
HRESULT GLChar::MsgReqSlotToHold ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_SLOT_TO_HOLD *pNetMsg = reinterpret_cast<GLMSG::SNETPC_REQ_SLOT_TO_HOLD*> ( nmg );
if ( pNetMsg->emSlot >= SLOT_TSIZE ) return S_FALSE;
if ( VALID_HOLD_ITEM () ) return S_FALSE;
if ( !VALID_SLOT_ITEM(pNetMsg->emSlot) ) return S_FALSE;
if ( m_sCONFTING.IsCONFRONTING() ) return S_FALSE;
EMSLOT emRHand = GetCurRHand();
EMSLOT emLHand = GetCurLHand();
SITEM *pITEM_LEFT=NULL, *pITEM_RIGHT=NULL;
if ( VALID_SLOT_ITEM(emLHand) ) pITEM_LEFT = GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(emLHand).sNativeID);
if ( VALID_SLOT_ITEM(emRHand) ) pITEM_RIGHT = GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(emRHand).sNativeID);
// ¾ç¼Õ ¸ðµÎ Âø¿ë ¹«±â ÀÖÀ» °æ¿ì. Ȱ+È»ì, â+ºÎÀû. ¼¼Æ®·Î µ¿ÀÛÇÏ´Â ¹«±â·ù°¡ ÀÖÀ½ À̶§ ¸ðµÎ »©³»¾ßÇÔ.
//
if ( pNetMsg->emSlot==emRHand )
{
if ( (pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_BOW) || (pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_SCYTHE)|| (pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_SPEAR) || (pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_DUAL_GUN || pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_RAIL_GUN || pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_PORTAL_GUN) ) //|| (pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_RIFLE) )
{
if ( pITEM_LEFT ) // È»ì, ºÎÀû »©³»¾ß ÇÔ.
{
SITEMCUSTOM sITEM_LHAND = GET_SLOT_ITEM(emLHand);
WORD wInvenPosX, wInvenPosY;
BOOL bOk = m_cInventory.FindInsrtable ( pITEM_LEFT->sBasicOp.wInvenSizeX, pITEM_LEFT->sBasicOp.wInvenSizeY, wInvenPosX, wInvenPosY );
if ( bOk )
{
// Á¾Àü ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
m_cInventory.InsertItem ( sITEM_LHAND, wInvenPosX, wInvenPosY );
// [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ »ðÀÔ.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven_Insert;
NetMsg_Inven_Insert.Data = *m_cInventory.GetItem(wInvenPosX, wInvenPosY);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Insert);
// [¸ðµÎ¿¡°Ô] µð½ºÇ÷¹ÀÌ ¾ÆÀÌÅÛÀÌ ¾Æ´Ñ°É·Î °¡Á¤ÇÏ¿© ¹«½Ã.
}
// Note : Àκ¥Å丮 ³Ö±â¿¡ ½ÇÆÐÇÏ¿´À» °æ¿ì.
else
{
// Item Drop ½Ãµµ.
BOOL bDrop = m_pLandMan->DropItem ( m_vPos, &sITEM_LHAND );
// Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
//
GLITEMLMT::GetInstance().ReqItemRoute ( sITEM_LHAND, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_GROUND, sITEM_LHAND.wTurnNum );
}
// ¿ÞÂÊ ½½·Ô Áö¿öÁÜ.
RELEASE_SLOT_ITEM(emLHand);
// [Àڽſ¡°Ô] SLOT¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_PUTON_RELEASE NetMsg_PutOn_Release(emLHand);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn_Release);
}
}
}
if ( pNetMsg->emSlot== SLOT_VEHICLE && m_bGetVehicleFromDB )
{
GLGaeaServer::GetInstance().GetConsoleMsg()->Write( "Vehicle Slot Release Error, m_bGetVehicleFromDB : %d",
m_bGetVehicleFromDB );
return S_FALSE;
}
// ¼Õ¿¡ µé°Ô ÇÔ.
HOLD_ITEM ( GET_SLOT_ITEM(pNetMsg->emSlot) );
// SLOT ¾ÆÀÌÅÆ Á¦°Å.
RELEASE_SLOT_ITEM ( pNetMsg->emSlot );
// ¾ÆÀÌÅÆ º¯°æ½Ã °ª Àç ȯ»ê ÇÊ¿äÇÔ.
INIT_DATA ( FALSE, FALSE );
// [Àڽſ¡°Ô] SLOT¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_PUTON_RELEASE NetMsg_PutOn_Release(pNetMsg->emSlot);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn_Release);
// [¸ðµÎ¿¡°Ô] ÀÚ½ÅÀÇ Âø¿ë º¹ÀåÀÌ ¹Ù²ñÀ» ¾Ë¸².
GLMSG::SNETPC_PUTON_RELEASE_BRD NetMsg_PutOn_Release_Brd;
NetMsg_PutOn_Release_Brd.dwGaeaID = m_dwGaeaID;
NetMsg_PutOn_Release_Brd.emSlot = pNetMsg->emSlot;
SendMsgViewAround ( reinterpret_cast<NET_MSG_GENERIC*>(&NetMsg_PutOn_Release_Brd) );
// [Àڽſ¡°Ô] ¼Õ¿¡ ¾ÆÀÌÅÆÀ» µé°Ô.
GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
NetMsg_PutOn.emSlot = SLOT_HOLD;
NetMsg_PutOn.sItemCustom = GET_HOLD_ITEM();
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);
if ( pNetMsg->emSlot == SLOT_VEHICLE )
{
GLGaeaServer::GetInstance().SaveVehicle( m_dwClientID, m_dwGaeaID, false );
}
// ¹«±â¿¡ µû¸¥ ¹öÇÁ¸¦ ÃʱâÈ ÇÑ´Ù.
DisableSkillFact();
return S_OK;
}
HRESULT GLChar::MsgReqSlotExHold ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_SLOT_EX_HOLD *pNetMsg = reinterpret_cast<GLMSG::SNETPC_REQ_SLOT_EX_HOLD*> ( nmg );
if ( pNetMsg->emSlot >= SLOT_TSIZE ) return S_FALSE;
if ( !VALID_HOLD_ITEM () ) return S_FALSE;
if ( m_sCONFTING.IsCONFRONTING() ) return S_FALSE;
BOOL bOk(FALSE);
#if defined(VN_PARAM) //vietnamtest%%%
if ( GET_HOLD_ITEM().bVietnamGainItem ) return S_FALSE;
#endif
if( GET_HOLD_ITEM().nidDISGUISE!=SNATIVEID(false) )
{
// ÄÚ½ºÆ¬À» ÀÔÈù ¾ÆÀÌÅÛÀÏ °æ¿ì
bOk = ACCEPT_ITEM ( GET_HOLD_ITEM().sNativeID, GET_HOLD_ITEM().nidDISGUISE );
if ( !bOk ) return E_FAIL;
}
else
{
// ÀÚ°ÝÁ¶°Ç¿¡ ºÎÇÕÇÏ´ÂÁö °Ë»ç.
bOk = ACCEPT_ITEM ( GET_HOLD_ITEM().sNativeID );
if ( !bOk ) return E_FAIL;
}
// ÇØ´ç ½½·Ô¿¡ ÀåÂø °¡´ÉÇÑÁö °Ë»ç.
bOk = CHECKSLOT_ITEM ( GET_HOLD_ITEM().sNativeID, pNetMsg->emSlot );
if ( !bOk ) return E_FAIL;
WORD wInvenPosX, wInvenPosY;
SITEMCUSTOM sToHoldItem(NATIVEID_NULL());
SITEMCUSTOM sToInvenItem(NATIVEID_NULL());
SITEMCUSTOM sToSlotItem(NATIVEID_NULL());
SITEM *pITEM_TOSLOT = GLItemMan::GetInstance().GetItem(GET_HOLD_ITEM().sNativeID);
if ( !pITEM_TOSLOT ) return E_FAIL;
EMSLOT emRHand = GetCurRHand();
EMSLOT emLHand = GetCurLHand();
// Note : ÀÏ¹Ý ½½·ÔÀÏ °æ¿ì.
//
if ( pITEM_TOSLOT->sSuitOp.emSuit!=SUIT_HANDHELD )
{
if ( !VALID_SLOT_ITEM(pNetMsg->emSlot) ) return S_FALSE;
// Á¾Àü ¾ÆÀÌÅÆ ¼Õ¿¡ µé°í ÀÖ°Ô. #1 ¹é¾÷
sToHoldItem = GET_SLOT_ITEM ( pNetMsg->emSlot );
// ÀåÂøÇÒ ¾ÆÀÌÅÛ ÁöÁ¤.
sToSlotItem = GET_HOLD_ITEM();
}
// ¼Õ¿¡ µå´Â µµ±¸ÀÏ °æ¿ì.
else
{
SITEM *pITEM_LEFT=NULL, *pITEM_RIGHT=NULL;
if ( VALID_SLOT_ITEM(emLHand) ) pITEM_LEFT = GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(emLHand).sNativeID);
if ( VALID_SLOT_ITEM(emRHand) ) pITEM_RIGHT = GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(emRHand).sNativeID);
// ¾ç¼Õ µµ±¸¸¦ Âø¿ëÇÏ·Á ÇÏ´Â °æ¿ì.
if ( ISBOTH_HANDHELD(pITEM_TOSLOT) )
{
if ( pITEM_LEFT && pITEM_RIGHT )
{
// Memo : ³ÖÀ»·Á´Â ¾ÆÀÌÅÛÀÌ È°ÀÌ°í ¿ÞÂÊ¿¡ Âø¿ëÇÑ ¾ÆÀÌÅÛÀÌ È»ìÀÌ ¾Æ´Ñ °æ¿ì.
if( ( (pITEM_TOSLOT->sSuitOp.emAttack==ITEMATT_BOW) && (pITEM_LEFT->sBasicOp.emItemType!=ITEM_ARROW) ) ||
// Memo : ³ÖÀ»·Á´Â ¾ÆÀÌÅÛÀÌ ºÀÀÌ°í ¿ÞÂÊ¿¡ Âø¿ëÇÑ ¾ÆÀÌÅÛÀÌ ºÎÀûÀÌ ¾Æ´Ñ °æ¿ì.
( (pITEM_TOSLOT->sSuitOp.emAttack==ITEMATT_SPEAR || pITEM_TOSLOT->sSuitOp.emAttack==ITEMATT_SCYTHE) && (pITEM_LEFT->sBasicOp.emItemType!=ITEM_CHARM) ) ||
//test gun
( (pITEM_TOSLOT->sSuitOp.emAttack==ITEMATT_DUAL_GUN || pITEM_TOSLOT->sSuitOp.emAttack==ITEMATT_RAIL_GUN || pITEM_TOSLOT->sSuitOp.emAttack==ITEMATT_PORTAL_GUN) && (pITEM_LEFT->sBasicOp.emItemType!=ITEM_BULLET) ) || //|| pITEM_TOSLOT->sSuitOp.emAttack==ITEMATT_RIFLE) && (pITEM_LEFT->sBasicOp.emItemType!=ITEM_BULLET) ) ||
// Memo : ³ÖÀ»·Á´Â ¾ÆÀÌÅÆÀÌ È°À̳ª ÁöÆÎÀ̰¡ ¾Æ´Ò °æ¿ì. & test gun
(
(pITEM_TOSLOT->sSuitOp.emAttack!=ITEMATT_BOW) &&
(pITEM_TOSLOT->sSuitOp.emAttack!=ITEMATT_SPEAR) &&
(pITEM_TOSLOT->sSuitOp.emAttack!=ITEMATT_DUAL_GUN) &&
(pITEM_TOSLOT->sSuitOp.emAttack!=ITEMATT_RAIL_GUN )&&
(pITEM_TOSLOT->sSuitOp.emAttack!=ITEMATT_PORTAL_GUN)
)
) //|| pITEM_TOSLOT->sSuitOp.emAttack!=ITEMATT_RIFLE) ) )
{
bOk = m_cInventory.FindInsrtable ( pITEM_LEFT->sBasicOp.wInvenSizeX, pITEM_LEFT->sBasicOp.wInvenSizeY, wInvenPosX, wInvenPosY );
if ( !bOk ) return E_FAIL;
// Á¾Àü ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½. #1 ¹é¾÷ // ¿ÞÂÊ ½½·Ô Áö¿öÁÜ.
sToInvenItem = GET_SLOT_ITEM(emLHand);
}
// Á¾Àü ¾ÆÀÌÅÆ ¼Õ¿¡ µé°í ÀÖ°Ô. #2 ¹é¾÷
sToHoldItem = GET_SLOT_ITEM(emRHand);
// ÀåÂøÇÒ ¾ÆÀÌÅÛ ÁöÁ¤.
sToSlotItem = GET_HOLD_ITEM();
}
else
{
if ( !VALID_SLOT_ITEM(pNetMsg->emSlot) ) return S_FALSE;
// ¼Õ¿¡ µé°Ô.
sToHoldItem = GET_SLOT_ITEM(pNetMsg->emSlot);
// ¾ÆÀÌÅÆ ÀåÂøÇÒ ¾ÆÀÌÅÛ ÁöÁ¤.
sToSlotItem = GET_HOLD_ITEM();
}
}
// ÇÑ¼Õ µµ±¸¸¦ Âø¿ëÇÏ·Á ÇÏ´Â °æ¿ì.
else
{
// Note : Âø¿ëÇÒ·ÁÇÏ´Â µµ±¸°¡ È»ìÀ̳ª ºÎÀûÀÇ °æ¿ì.
// test gun
if ( (pITEM_TOSLOT->sBasicOp.emItemType==ITEM_ARROW) || (pITEM_TOSLOT->sBasicOp.emItemType==ITEM_CHARM) || (pITEM_TOSLOT->sBasicOp.emItemType==ITEM_BULLET) )
{
// ¿Þ¼Õ¿¡¸¸ ÀåÂø °¡´É.
if ( pNetMsg->emSlot != emLHand )
return E_FAIL;
// Note : ¾ç¼Õ¹«±âÀ̰í ȰÀ̳ª È»ìÀÏ °æ¿ì¸¸ Âø¿ë °¡´É.
//
if ( pITEM_RIGHT && ISBOTH_HANDHELD(pITEM_RIGHT) )
{
if ( (pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_BOW) && (pITEM_TOSLOT->sBasicOp.emItemType!=ITEM_ARROW) ) return E_FAIL;
if ( (pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_SPEAR || pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_SCYTHE) && (pITEM_TOSLOT->sBasicOp.emItemType!=ITEM_CHARM) ) return E_FAIL;
//test gun
if ( (pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_DUAL_GUN || pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_RAIL_GUN || pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_PORTAL_GUN ) && (pITEM_TOSLOT->sBasicOp.emItemType!=ITEM_BULLET) ) return E_FAIL; //|| pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_RIFLE) && (pITEM_TOSLOT->sBasicOp.emItemType!=ITEM_BULLET) ) return E_FAIL;
}
else return E_FAIL;
if ( !VALID_SLOT_ITEM(pNetMsg->emSlot) ) return S_FALSE;
// Á¾Àü ¾ÆÀÌÅÆ ¼Õ¿¡ µé°í ÀÖ°Ô. #1 ¹é¾÷
sToHoldItem = GET_SLOT_ITEM(pNetMsg->emSlot);
// ÀåÂøÇÒ ¾ÆÀÌÅÛ ÁöÁ¤.
sToSlotItem = GET_HOLD_ITEM();
}
else
{
// Á¾Àü ¾ÆÀÌÅÛÀÌ ¾ç¼Õ·ùÀÏ °æ¿ì.
if ( pITEM_RIGHT && ISBOTH_HANDHELD(pITEM_RIGHT) )
{
// ¾ç¼Õ ¸ðµÎ Âø¿ë ¹«±â ÀÖÀ» °æ¿ì. Ȱ+È»ì, â+ºÎÀû. ¼¼Æ®·Î µ¿ÀÛÇÏ´Â ¹«±â·ù°¡ ÀÖÀ½ À̶§ ¸ðµÎ »©³»¾ßÇÔ.
//
if ( pITEM_LEFT )
{
bOk = m_cInventory.FindInsrtable ( pITEM_LEFT->sBasicOp.wInvenSizeX, pITEM_LEFT->sBasicOp.wInvenSizeY, wInvenPosX, wInvenPosY );
if ( !bOk ) return E_FAIL;
// Á¾Àü ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½. #1 ¹é¾÷ // ¿ÞÂÊ ½½·Ô Áö¿öÁÜ.
sToInvenItem = GET_SLOT_ITEM(emLHand);
}
// Á¾Àü ¾ÆÀÌÅÆ ¼Õ¿¡ µé°í ÀÖ°Ô. #2 ¹é¾÷
sToHoldItem = GET_SLOT_ITEM(emRHand);
// ÀåÂøÇÒ ¾ÆÀÌÅÛ ÁöÁ¤.
sToSlotItem = GET_HOLD_ITEM();
}
// ÀϹÝÀûÀÏ °æ¿ì.
else
{
if ( !VALID_SLOT_ITEM(pNetMsg->emSlot) ) return S_FALSE;
// Á¾Àü ¾ÆÀÌÅÆ ¼Õ¿¡ µé°í ÀÖ°Ô. #1 ¹é¾÷
sToHoldItem = GET_SLOT_ITEM(pNetMsg->emSlot);
// ÀåÂøÇÒ ¾ÆÀÌÅÛ ÁöÁ¤.
sToSlotItem = GET_HOLD_ITEM();
}
}
}
}
// Note : ½ÇÁ¦·Î À̵¿ ½ÃÅ´, ¸Þ½ÃÁö ¹ß»ý
//
// Note : Àκ¥¿¡ º¸³»Áú ¾ÆÀÌÅÛ.
//
if ( sToInvenItem.sNativeID != NATIVEID_NULL() )
{
m_cInventory.InsertItem ( sToInvenItem, wInvenPosX, wInvenPosY );
// [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ »ðÀÔ.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven_Insert;
NetMsg_Inven_Insert.Data = *m_cInventory.GetItem(wInvenPosX, wInvenPosY);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Insert);
}
// Note : ¼Õ¿¡µé±â.
//
if ( sToHoldItem.sNativeID != NATIVEID_NULL() )
{
HOLD_ITEM ( sToHoldItem );
// [Àڽſ¡°Ô] ¼Õ¿¡ ¾ÆÀÌÅÆÀ» µé°Ô.
GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
NetMsg_PutOn.emSlot = SLOT_HOLD;
NetMsg_PutOn.sItemCustom = sToHoldItem;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);
// ¹«±â¿¡ µû¸¥ ¹öÇÁ¸¦ ÃʱâÈ ÇÑ´Ù.
DisableSkillFact();
}
if ( pNetMsg->emSlot == SLOT_VEHICLE )
{
GLGaeaServer::GetInstance().SaveVehicle( m_dwClientID, m_dwGaeaID, false );
}
// Note : ½½·Ô¿¡ ³Ö±â. ½½·Ô¿¡¼ »©³¾ ¾ÆÀÌÅÛ ÀÖÀ¸¸é Á¦°Å. (Àκ¥¿¡ º¸³»Áú ¾ÆÀÌÅÛ.)
//
if ( sToSlotItem.sNativeID != NATIVEID_NULL() )
{
// Note : ½½·Ô¿¡¼ Á¦°ÅÇÒ ¾ÆÀÌÅÛÀÌ ÀÖÀ» °æ¿ì.
//
EMSLOT emSlotRelease(SLOT_TSIZE);
if ( sToInvenItem.sNativeID!=NATIVEID_NULL() )
{
emSlotRelease = emLHand;
RELEASE_SLOT_ITEM(emLHand); // ¿ÞÂÊ ½½·Ô Áö¿öÁÜ.
}
// ½½·Ô¿¡ ³ÖÀ½.
SLOT_ITEM ( sToSlotItem, pNetMsg->emSlot );
// [Àڽſ¡°Ô] SLOT ¿¡ ¾ÆÀÌÅÆÀ» Âø¿ë.
//
GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
NetMsg_PutOn.emSlot = pNetMsg->emSlot;
NetMsg_PutOn.sItemCustom = sToSlotItem;
NetMsg_PutOn.emSlotRelease = emSlotRelease; // ¾ÆÀÌÅÛ »èÁ¦ÇÒ ½½·Ô.
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);
// [¸ðµÎ¿¡°Ô] ÀÚ½ÅÀÇ Âø¿ë º¹ÀåÀÌ ¹Ù²ñÀ» ¾Ë¸².
//
GLMSG::SNETPC_PUTON_UPDATE_BRD NetMsg_PutOn_Update_Brd;
NetMsg_PutOn_Update_Brd.dwGaeaID = m_dwGaeaID;
NetMsg_PutOn_Update_Brd.emSlot = pNetMsg->emSlot;
NetMsg_PutOn_Update_Brd.sItemClient.Assign ( sToSlotItem );
NetMsg_PutOn_Update_Brd.emSlotRelease = emSlotRelease; // ¾ÆÀÌÅÛ »èÁ¦ÇÒ ½½·Ô.
SendMsgViewAround ( reinterpret_cast<NET_MSG_GENERIC*>(&NetMsg_PutOn_Update_Brd) );
// ¹«±â¿¡ µû¸¥ ¹öÇÁ¸¦ ÃʱâÈ ÇÑ´Ù.
DisableSkillFact();
}
// Note : ¾ÆÀÌÅÆ º¯°æ½Ã °ª Àç ȯ»ê ÇÊ¿äÇÔ.
//
INIT_DATA ( FALSE, FALSE );
return S_OK;
}
HRESULT GLChar::MsgReqHoldToSlot ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_HOLD_TO_SLOT *pNetMsg = reinterpret_cast<GLMSG::SNETPC_REQ_HOLD_TO_SLOT*> ( nmg );
if ( pNetMsg->emSlot >= SLOT_TSIZE ) return S_FALSE;
if ( !VALID_HOLD_ITEM () ) return S_FALSE;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( GET_HOLD_ITEM().sNativeID );
if ( !pItem ) return S_FALSE;
if ( m_sCONFTING.IsCONFRONTING() ) return S_FALSE;
const SITEMCUSTOM sItemCustom = GET_HOLD_ITEM ();
BOOL bOk(FALSE);
#if defined(VN_PARAM) //vietnamtest%%%
if ( sItemCustom.bVietnamGainItem ) return S_FALSE;
#endif
if( sItemCustom.nidDISGUISE!=SNATIVEID(false) )
{
// ÄÚ½ºÆ¬À» ÀÔÈù ¾ÆÀÌÅÛÀÏ °æ¿ì
bOk = ACCEPT_ITEM ( sItemCustom.sNativeID, sItemCustom.nidDISGUISE );
if ( !bOk ) return E_FAIL;
}
else
{
// ÀÚ°ÝÁ¶°Ç¿¡ ºÎÇÕÇÏ´ÂÁö °Ë»ç.
bOk = ACCEPT_ITEM ( sItemCustom.sNativeID );
if ( !bOk ) return E_FAIL;
}
// ÇØ´ç ½½·Ô¿¡ ÀåÂø °¡´ÉÇÑÁö °Ë»ç.
bOk = CHECKSLOT_ITEM ( sItemCustom.sNativeID, pNetMsg->emSlot );
if ( !bOk ) return E_FAIL;
// ÇØ´ç ½½·ÔÀÌ ºñ¿´´ÂÁö Á¡°Ë.
bOk = ISEMPTY_SLOT ( sItemCustom.sNativeID, pNetMsg->emSlot );
if ( !bOk ) return E_FAIL;
// ¸¸¾à ¾ç¼Õ ¹«±âÀÏ °æ¿ì ½½·ÔÀ» "¿À¸¥¼Õ µé±â" ½½·ÔÀ¸·Î.
if ( ISBOTH_HANDHELD(pItem) ) pNetMsg->emSlot = GetCurRHand();
// ÇØ´ç ½½·Ô¿¡ ¾ÆÀÌÅÆ ÀåÂø.
SLOT_ITEM ( sItemCustom, pNetMsg->emSlot );
// ¼Õ¿¡ µç ¾ÆÀÌÅÛ Á¦°Å
RELEASE_HOLD_ITEM ();
// ¾ÆÀÌÅÆ º¯°æ½Ã °ª Àç ȯ»ê ÇÊ¿äÇÔ.
INIT_DATA ( FALSE, FALSE );
// [Àڽſ¡°Ô] ¼Õ¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_PUTON_RELEASE NetMsg_PutOn_Release(SLOT_HOLD);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn_Release);
// [Àڽſ¡°Ô] ¼Õ¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» Slot¿¡ Âø¿ë.
GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
NetMsg_PutOn.emSlot = pNetMsg->emSlot;
NetMsg_PutOn.sItemCustom = sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);
// [¸ðµÎ¿¡°Ô] º¹ÀåÀÌ ¹Ù²ñÀ» ¾Ë·ÁÁÜ.
GLMSG::SNETPC_PUTON_UPDATE_BRD NetMsg_PutOn_Brd;
NetMsg_PutOn_Brd.dwGaeaID = m_dwGaeaID;
NetMsg_PutOn_Brd.emSlot = pNetMsg->emSlot;
NetMsg_PutOn_Brd.sItemClient.Assign ( sItemCustom );
SendMsgViewAround ( reinterpret_cast<NET_MSG_GENERIC*>(&NetMsg_PutOn_Brd) );
// ¹«±â¿¡ µû¸¥ ¹öÇÁ¸¦ ÃʱâÈ ÇÑ´Ù.
DisableSkillFact();
return S_OK;
}
HRESULT GLChar::MsgReqSlotChange ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_SLOT_CHANGE *pNetMsg = reinterpret_cast<GLMSG::SNETPC_REQ_SLOT_CHANGE*> ( nmg );
if( IsUseArmSub() ) SetUseArmSub( FALSE ); // ÁÖ¹«±â
else SetUseArmSub( TRUE ); // º¸Á¶¹«±â
// ¾ÆÀÌÅÆ º¯°æ½Ã °ª Àç ȯ»ê ÇÊ¿äÇÔ.
INIT_DATA ( FALSE, FALSE, m_sCONFTING.sOption.fHP_RATE );
// [Àڽſ¡°Ô] ¹«±â ½º¿Ò
GLMSG::SNETPC_PUTON_CHANGE NetMsg_PutOn;
NetMsg_PutOn.bUseArmSub = IsUseArmSub();
NetMsg_PutOn.fCONFT_HP_RATE = m_sCONFTING.sOption.fHP_RATE;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);
// [¸ðµÎ¿¡°Ô] ¹«±â ½º¿ÒÀ» ¾Ë¸².
GLMSG::SNETPC_PUTON_CHANGE_BRD NetMsg_PutOn_Brd;
NetMsg_PutOn_Brd.dwGaeaID = m_dwGaeaID;
NetMsg_PutOn_Brd.bUseArmSub = IsUseArmSub();
SendMsgViewAround ( reinterpret_cast<NET_MSG_GENERIC*>(&NetMsg_PutOn_Brd) );
GLMSG::SNETPC_PUTON_CHANGE_AG NetMsg_PutOn_AG;
NetMsg_PutOn_AG.bUseArmSub = IsUseArmSub();
GLGaeaServer::GetInstance().SENDTOAGENT ( m_dwClientID, &NetMsg_PutOn_AG );
// ¹«±â¿¡ µû¸¥ ¹öÇÁ¸¦ ÃʱâÈ ÇÑ´Ù.
DisableSkillFact();
return S_OK;
}
bool GLChar::InsertPileItem ( const SITEMCUSTOM& sItemCustom, WORD wREQINSRTNUM )
{
SITEM* pItem = GLItemMan::GetInstance().GetItem ( sItemCustom.sNativeID );
if ( !pItem ) return false;
if ( !pItem->ISPILE() ) return false;
WORD wPILENUM = pItem->sDrugOp.wPileNum;
WORD wINVENX = pItem->sBasicOp.wInvenSizeX;
WORD wINVENY = pItem->sBasicOp.wInvenSizeY;
// Note : ´õ °ãÃÄÁú¼ö ÀÖ´Â ¾ÆÀÌÅÛÀÌ ÀÖ´ÂÁö °Ë»çÇÏ¿© Àκ¥¿¡ µé¾î°¡¾ßÇÏ´Â
// ¾ÆÀÌÅÛ Á¡°Ë ¼ýÀÚ¸¦ °¨¼Ò½ÃÅ´.
GLInventory::CELL_MAP &ItemMap = *m_cInventory.GetItemList();
GLInventory::CELL_MAP_ITER iter = ItemMap.begin();
for ( ; iter!=ItemMap.end(); ++iter )
{
SINVENITEM &sINVENITEM = *(*iter).second;
SITEMCUSTOM &sITEMCUSTOM = sINVENITEM.sItemCustom;
if ( sITEMCUSTOM.sNativeID != sItemCustom.sNativeID ) continue;
if ( sITEMCUSTOM.wTurnNum>=wPILENUM ) continue;
// ±âÁ¸ ¾ÆÀÌÅÛ °ãħ ¿©À¯ºÐ.
WORD wSURPLUSNUM = wPILENUM - sITEMCUSTOM.wTurnNum;
if ( wREQINSRTNUM > wSURPLUSNUM )
{
// Note : ±âÁ¸ ¾ÆÀÌÅÛÀÇ °ãħÀ» º¯°æ. ( ²ËÂü )
sITEMCUSTOM.wTurnNum = wPILENUM;
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
NetMsg.wPosX = sINVENITEM.wPosX;
NetMsg.wPosY = sINVENITEM.wPosY;
NetMsg.wTurnNum = sITEMCUSTOM.wTurnNum;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
// Note : ÀÜ¿© ¼ö·® °¨¼Ò.
wREQINSRTNUM -= wSURPLUSNUM;
}
else
{
// Note : ±âÁ¸ ¾ÆÀÌÅÛ¿¡ °ãÄ¡´Â °Í ¸¸À¸·Îµµ »õ·Î ³ÖÀ» ¾ÆÀÌÅÛÀÌ ÃæºÐÈ÷ µé¾î°¨.
sITEMCUSTOM.wTurnNum += wREQINSRTNUM;
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
NetMsg.wPosX = sINVENITEM.wPosX;
NetMsg.wPosY = sINVENITEM.wPosY;
NetMsg.wTurnNum = sITEMCUSTOM.wTurnNum;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
// ±Ý¾× º¯È ¸Þ½ÃÁö.
GLMSG::SNETPC_UPDATE_MONEY NetMsgMoney;
NetMsgMoney.lnMoney = m_lnMoney;
//add money 2
NetMsgMoney.lnVoteP = m_lnVoteP;
//add money 3
NetMsgMoney.lnPremP = m_lnPremP;
//add contributionpoints by CNDev
NetMsgMoney.lnContribP = m_lnContribP;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgMoney);
return true;
}
}
// Note : »õ·ÎÀÌ Àκ¥¿¡ µé¾î°¡¾ßÇÒ ¾ÆÀÌÅÛÀÇ °¹¼ö ÆÄ¾ÇÈÄ Àκ¥¿¡ µé¾î°¥ °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ç.
// ÃÖ´ë°ãħ¾ÆÀÌÅÛ ¼ö·®.
WORD wONENUM = wREQINSRTNUM / wPILENUM;
WORD wITEMNUM = wONENUM;
// ¿©ºÐ°ãħ¾ÆÀÌÅÛÀÇ °ãħ¼ö.
WORD wSPLITNUM = wREQINSRTNUM % wPILENUM;
if ( wSPLITNUM > 0 ) wITEMNUM += 1;
if ( wSPLITNUM==0 && wITEMNUM>=1 ) wSPLITNUM = wPILENUM;
for ( WORD i=0; i<wITEMNUM; ++i )
{
WORD wInsertPosX(0), wInsertPosY(0);
BOOL bITEM_SPACE = m_cInventory.FindInsrtable ( wINVENX, wINVENY, wInsertPosX, wInsertPosY );
GASSERT(bITEM_SPACE&&"³ÖÀ» °ø°£À» ¹Ì¸® üũ¸¦ ÇÏ°í ¾ÆÀÌÅÛÀ» ³Ö¾úÀ¸³ª °ø°£ÀÌ ºÎÁ·ÇÔ.");
// Note : »õ·Î¿î ¾ÆÀÌÅÛÀ» ³Ö¾îÁÜ.
//
SITEMCUSTOM sITEMCUSTOM(sItemCustom.sNativeID);
sITEMCUSTOM.tBORNTIME = sItemCustom.tBORNTIME;
sITEMCUSTOM.cGenType = sItemCustom.cGenType;
sITEMCUSTOM.cChnID = sItemCustom.cChnID;
sITEMCUSTOM.cFieldID = sItemCustom.cFieldID;
if ( wITEMNUM==(i+1) ) sITEMCUSTOM.wTurnNum = wSPLITNUM; // ¸¶Áö¸· ¾ÆÀÌÅÛÀº ÀÜ¿©·®.
else sITEMCUSTOM.wTurnNum = wPILENUM; // ¾Æ´Ò °æ¿ì´Â ²ËÂù·®.
m_cInventory.InsertItem ( sITEMCUSTOM, wInsertPosX, wInsertPosY ); // ÀιêÅ丮¿¡ ³Ö½À´Ï´Ù.
// Àι꿡 ¾ÆÀÌÅÆ ³Ö¾îÁÖ´Â ¸Þ½ÃÁö.
GLMSG::SNETPC_INVEN_INSERT NetMsgInven;
NetMsgInven.Data = *m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInven);
}
return true;
}
bool GLChar::DeletePileItem ( SNATIVEID sNID, WORD wREQDELNUM )
{
SITEM* pItem = GLItemMan::GetInstance().GetItem ( sNID );
if ( !pItem ) return false;
if ( !pItem->ISPILE() ) return false;
WORD wINVENX = pItem->sBasicOp.wInvenSizeX;
WORD wINVENY = pItem->sBasicOp.wInvenSizeY;
std::vector<SNATIVEID> vecDEL;
// Note : ´õ °ãÃÄÁú¼ö ÀÖ´Â ¾ÆÀÌÅÛÀÌ ÀÖ´ÂÁö °Ë»çÇÏ¿© Àκ¥¿¡ µé¾î°¡¾ßÇÏ´Â
// ¾ÆÀÌÅÛ Á¡°Ë ¼ýÀÚ¸¦ °¨¼Ò½ÃÅ´.
GLInventory::CELL_MAP &ItemMap = *m_cInventory.GetItemList();
GLInventory::CELL_MAP_ITER iter = ItemMap.begin();
for ( ; iter!=ItemMap.end(); ++iter )
{
if ( wREQDELNUM==0 ) break;
SINVENITEM &sINVENITEM = *(*iter).second;
SITEMCUSTOM &sITEMCUSTOM = sINVENITEM.sItemCustom;
if ( sITEMCUSTOM.sNativeID != sNID ) continue;
if ( sITEMCUSTOM.wTurnNum>wREQDELNUM )
{
sITEMCUSTOM.wTurnNum -= wREQDELNUM;
wREQDELNUM = 0;
// Note : °¹¼öº¯°æ ¸Þ½ÃÁö.
GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsgUpdate;
NetMsgUpdate.wPosX = sINVENITEM.wPosX;
NetMsgUpdate.wPosY = sINVENITEM.wPosY;
NetMsgUpdate.wTurnNum = sITEMCUSTOM.wTurnNum;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgUpdate);
}
else
{
wREQDELNUM -= sITEMCUSTOM.wTurnNum;
sITEMCUSTOM.wTurnNum = 0;
vecDEL.push_back ( SNATIVEID(sINVENITEM.wPosX,sINVENITEM.wPosY) );
}
}
if ( !vecDEL.size() ) return true;
for ( DWORD i=0; i<vecDEL.size(); ++i )
{
m_cInventory.DeleteItem ( vecDEL[i].wMainID, vecDEL[i].wSubID );
// Note : »èÁ¦ ¸Þ½ÃÁö.
GLMSG::SNETPC_INVEN_DELETE NetMsgDelete;
NetMsgDelete.wPosX = vecDEL[i].wMainID;
NetMsgDelete.wPosY = vecDEL[i].wSubID;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgDelete);
}
return true;
}
// *****************************************************
// Desc: NPC ·ÎºÎÅÍ ¾ÆÀÌÅÛ ±¸ÀÔ
// *****************************************************
HRESULT GLChar::MsgReqBuyFromNpc ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_BUY_FROM_NPC *pNetMsg = (GLMSG::SNETPC_REQ_BUY_FROM_NPC *) nmg;
PCROWDATA pCrowData = GLCrowDataMan::GetInstance().GetCrowData ( pNetMsg->sNID );
DxConsoleMsg* pConsoleMsg = GLGaeaServer::GetInstance().GetConsoleMsg();
if ( !m_pLandMan )
{
return E_FAIL;
}
// »óÁ¡ NPC À¯È¿¼º üũ
PGLCROW pCrow = m_pLandMan->GetCrow ( pNetMsg->dwNPCID );
if ( !pCrow ) return E_FAIL;
float fDist = D3DXVec3Length ( &D3DXVECTOR3(m_vPos-pCrow->GetPosition()) );
float fTalkRange = (float) (pCrow->GetBodyRadius() + GETBODYRADIUS() + 30);
float fTalkableDis = fTalkRange + 20;
if ( fDist>fTalkableDis ) return E_FAIL;
if ( !pCrowData )
{
// »óÀÎ NPC°¡ Á¸Á¦ÇÏÁö ¾Ê½À´Ï´Ù.
return E_FAIL;
}
if ( !pCrowData->m_sNpcTalkDlg.IsMARKET() )
{
// »óÀÎÀÌ ¾Æ´Õ´Ï´Ù.
return E_FAIL;
}
if ( pCrowData->GetSaleNum() <= pNetMsg->dwChannel ) return E_FAIL;
GLInventory *pInven = pCrowData->GetSaleInven(pNetMsg->dwChannel);
if ( !pInven ) return E_FAIL;
SINVENITEM* pSaleItem(NULL);
pSaleItem = pInven->GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
// »ì·Á°í ÇÏ´Â ¾ÆÀÌÅÆÀÌ ¾ø½À´Ï´Ù.
if ( !pSaleItem ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pSaleItem->sItemCustom.sNativeID );
if ( !pItem ) return E_FAIL;
volatile float fSHOP_RATE = GET_PK_SHOP2BUY();
if ( fSHOP_RATE==0.0f ) return E_FAIL;
volatile float fSHOP_2RATE = fSHOP_RATE + m_pLandMan->m_fCommissionRate;
volatile float fSHOP_2RATE_C = fSHOP_2RATE * 0.01f;
LONGLONG dwPrice = pCrowData->GetNpcSellPrice(pItem->sBasicOp.sNativeID.dwID);
volatile LONGLONG llPRICE2;
//add money 2
//no tax for vote item
if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM )
{
llPRICE2= pItem->sBasicOp.dwBuyPrice;
}
//add money 3
//no tax for premium item
else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
{
llPRICE2= pItem->sBasicOp.dwBuyPrice;
}
//add contributionpoint by CNDev
//no tax for contribution item
else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
{
llPRICE2= pItem->sBasicOp.dwBuyPrice;
}
else
{
if( dwPrice == 0 )
{
dwPrice = pItem->sBasicOp.dwBuyPrice;
llPRICE2 = (LONGLONG)(dwPrice * fSHOP_2RATE_C);
}
else
{
llPRICE2 = dwPrice;
}
}
volatile LONGLONG llPRICE3 = (LONGLONG)(llPRICE2*pNetMsg->wBuyNum);
//add money 2
//compare price to votepoint
if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM )
{
if ( m_lnVoteP < llPRICE3 )
{
return E_FAIL;
}
}
//add money 3
//compare price to premium point
else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
{
if ( m_lnPremP < llPRICE3 )
{
return E_FAIL;
}
}
//add contributionpoint by CNDev
else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
{
if ( m_lnContribP < llPRICE3 )
{
return E_FAIL;
}
}
//compare price to gold
else
{
if ( m_lnMoney < llPRICE3 )
{
return E_FAIL;
}
}
WORD wINVENX = pItem->sBasicOp.wInvenSizeX;
WORD wINVENY = pItem->sBasicOp.wInvenSizeY;
// Note : Àκ¥¿¡ ¿©À¯ °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ç.
//
BOOL bITEM_SPACE(FALSE);
if ( pItem->ISPILE() )
{
// °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
WORD wPILENUM = pItem->sDrugOp.wPileNum;
SNATIVEID sNID = pItem->sBasicOp.sNativeID;
// ³Ö±â ¿äûµÈ ¾ÆÀÌÅÛ¼ö. ( ÀÜ¿©·®. )
WORD wREQINSRTNUM = ( pNetMsg->wBuyNum * pItem->GETAPPLYNUM() );
bITEM_SPACE = m_cInventory.ValidPileInsrt ( wREQINSRTNUM, sNID, wPILENUM, wINVENX, wINVENY );
// Àκ¥¿¡ ¿©À¯°ø°£ÀÌ ¾øÀ» °æ¿ì Ãë¼ÒµÊ.
if ( !bITEM_SPACE ) return E_FAIL;
// Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
//
SITEMCUSTOM sDB_ITEM(sNID);
sDB_ITEM.cGenType = EMGEN_SHOP;
sDB_ITEM.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
sDB_ITEM.cFieldID = (BYTE)GLGaeaServer::GetInstance().GetFieldSvrID();
sDB_ITEM.wTurnNum = wPILENUM;
sDB_ITEM.tBORNTIME = CTime::GetCurrentTime().GetTime();
//add money 2
//log vote item purchase to db
if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM )
{
GLITEMLMT::GetInstance().ReqItemRoute ( sDB_ITEM, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR_VOTE, sDB_ITEM.wTurnNum );
}
//add money 3
//log premium item purchase to db
else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
{
GLITEMLMT::GetInstance().ReqItemRoute ( sDB_ITEM, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR_PREMIUM, sDB_ITEM.wTurnNum );
}
//add cotnributionpoint by CNDev
else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
{
GLITEMLMT::GetInstance().ReqItemRoute ( sDB_ITEM, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR_CONTRIBUTION, sDB_ITEM.wTurnNum );
}
else
{
GLITEMLMT::GetInstance().ReqItemRoute ( sDB_ITEM, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, sDB_ITEM.wTurnNum );
}
//add money 3
//record vote item purchase
if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM )
{
CheckMoneyUpdate( m_lnVoteP, llPRICE3, FALSE, "Buy From Npc." );
m_bMoneyUpdate = TRUE;
m_lnVoteP -= llPRICE3;
std::string strTIME = CDebugSet::GetCurTime ();
CDebugSet::ToFile ( "ITEM_VOTE_PURCHASE.txt", "%s BUY MILTIPLE VOTE ITEM [CharID: %d][CharName:%s][Point Spent:%I64d][Money Left:%I64d][ITEM MID:%d SID:%d][Number: %d] ",
strTIME.c_str(), m_dwCharID, m_szName, llPRICE3, m_lnVoteP, sDB_ITEM.sNativeID.wMainID, sDB_ITEM.sNativeID.wSubID,pNetMsg->wBuyNum );
}
//add money 2
//record premium item purchase
else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
{
CheckMoneyUpdate( m_lnPremP, llPRICE3, FALSE, "Buy From Npc." );
m_bMoneyUpdate = TRUE;
m_lnPremP -= llPRICE3;
std::string strTIME = CDebugSet::GetCurTime ();
CDebugSet::ToFile ( "ITEM_PREMIUM_PURCHASE.txt", "%s BUY MILTIPLE PREMIUM ITEM [CharID: %d][CharName:%s][Point Spent:%I64d][Money Left:%I64d][ITEM MID:%d SID:%d][Number: %d] ",
strTIME.c_str(), m_dwCharID, m_szName, llPRICE3, m_lnPremP, sDB_ITEM.sNativeID.wMainID, sDB_ITEM.sNativeID.wSubID,pNetMsg->wBuyNum );
}
//add contributionpoint by CNDev
else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
{
CheckMoneyUpdate( m_lnContribP, llPRICE3, FALSE, "Buy From Npc." );
m_bMoneyUpdate = TRUE;
m_lnContribP -= llPRICE3;
std::string strTIME = CDebugSet::GetCurTime ();
CDebugSet::ToFile ( "ITEM_CONTRIBUTION_PURCHASE.txt", "%s BUY MILTIPLE CONTRIBUTION ITEM [CharID: %d][CharName:%s][Point Spent:%I64d][Money Left:%I64d][ITEM MID:%d SID:%d][Number: %d] ",
strTIME.c_str(), m_dwCharID, m_szName, llPRICE3, m_lnContribP, sDB_ITEM.sNativeID.wMainID, sDB_ITEM.sNativeID.wSubID,pNetMsg->wBuyNum );
}
else
{
CheckMoneyUpdate( m_lnMoney, llPRICE3, FALSE, "Buy From Npc." );
m_bMoneyUpdate = TRUE;
m_lnMoney -= llPRICE3;
}
//add money 2 modified
if ( llPRICE3>EMMONEY_LOG )
{
if ( !(pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM || pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM || pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM) )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, -LONGLONG(llPRICE3), EMITEM_ROUTE_DELETE );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnMoney, EMITEM_ROUTE_CHAR );
}
}
if ( llPRICE3>EMMONEY_LOG_PREMIUM )
{
if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, -LONGLONG(llPRICE3), EMITEM_ROUTE_DELETE_VOTE );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnVoteP, EMITEM_ROUTE_CHAR_VOTE );
}
else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, -LONGLONG(llPRICE3), EMITEM_ROUTE_DELETE_PREMIUM );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnPremP, EMITEM_ROUTE_CHAR_PREMIUM );
}
//add contributionpoint by CNDev
else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, -LONGLONG(llPRICE3), EMITEM_ROUTE_DELETE_CONTRIBUTION );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnContribP, EMITEM_ROUTE_CHAR_CONTRIBUTION );
}
}
#if defined(_RELEASED) || defined(TW_PARAM) || defined(TH_PARAM) || defined(HK_PARAM) // ***Tracing Log print
if ( m_bTracingUser )
{
NET_LOG_UPDATE_TRACINGCHAR TracingMsg;
TracingMsg.nUserNum = GetUserID();
StringCchCopy( TracingMsg.szAccount, USR_ID_LENGTH+1, m_szUID );
CString strTemp;
strTemp.Format( "Buy From Npc, [%s][%s], Buy price:[%I64d], Have Money:[%I64d]",
m_szUID, m_szName, llPRICE3, m_lnMoney );
StringCchCopy( TracingMsg.szLogMsg, TRACING_LOG_SIZE, strTemp.GetString() );
m_pGLGaeaServer->SENDTOAGENT( m_dwClientID, &TracingMsg );
}
#endif
// Note : ¾ÆÀÌÅÛÀ» Àκ¥¿¡ ³Ö¾îÁØ´Ù.
//
InsertPileItem ( sDB_ITEM, wREQINSRTNUM );
}
else
{
// ÀÏ¹Ý ¾ÆÀÌÅÛÀÇ °æ¿ì.
WORD wInsertPosX(0), wInsertPosY(0);
bITEM_SPACE = m_cInventory.FindInsrtable ( wINVENX, wINVENY, wInsertPosX, wInsertPosY );
// Àκ¥¿¡ ¿©À¯°ø°£ÀÌ ¾øÀ» °æ¿ì Ãë¼ÒµÊ.
if ( !bITEM_SPACE ) return E_FAIL;
// Note : »õ·Î¿î ¾ÆÀÌÅÛÀ» »ý¼ºÇÕ´Ï´Ù.
//
SNATIVEID sNID = pSaleItem->sItemCustom.sNativeID;
SITEMCUSTOM sITEM_NEW = pSaleItem->sItemCustom;
CTime cTIME = CTime::GetCurrentTime();
sITEM_NEW.tBORNTIME = cTIME.GetTime();
sITEM_NEW.wTurnNum = 1;
sITEM_NEW.cGenType = (BYTE) EMGEN_SHOP;
sITEM_NEW.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
sITEM_NEW.cFieldID = (BYTE) GLGaeaServer::GetInstance().GetFieldSvrID();
sITEM_NEW.lnGenNum = GLITEMLMT::GetInstance().RegItemGen ( sNID, EMGEN_SHOP );
// ·£´ý ¿É¼Ç ¹ß»ý.
//
//if( sITEM_NEW.GENERATE_RANDOM_OPT () )
//{
// GLITEMLMT::GetInstance().ReqRandomItem( sITEM_NEW );
//}
// Note : µ·À» ÁöºÒÇÕ´Ï´Ù.
//
//add money 2
//record vote item purchase
if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM )
{
CheckMoneyUpdate( m_lnVoteP, llPRICE2, FALSE, "Buy From Npc." );
m_bMoneyUpdate = TRUE;
m_lnVoteP -= llPRICE2;
std::string strTIME = CDebugSet::GetCurTime ();
CDebugSet::ToFile ( "ITEM_VOTE_PURCHASE.txt", "%s BUY SINGLE VOTE ITEM [CharID: %d][CharName:%s][Point Spent:%I64d][Money Left:%I64d][ITEM MID:%d SID:%d] ",
strTIME.c_str(), m_dwCharID, m_szName, llPRICE3, m_lnVoteP, sITEM_NEW.sNativeID.wMainID, sITEM_NEW.sNativeID.wSubID );
//test add regenerate random option
if( sITEM_NEW.GENERATE_RANDOM_OPT () )
{
GLITEMLMT::GetInstance().ReqRandomItem( sITEM_NEW );
}
}
//add money 3
//record premium item purchase
else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
{
CheckMoneyUpdate( m_lnPremP, llPRICE2, FALSE, "Buy From Npc." );
m_bMoneyUpdate = TRUE;
m_lnPremP -= llPRICE2;
std::string strTIME = CDebugSet::GetCurTime ();
CDebugSet::ToFile ( "ITEM_PREMIUM_PURCHASE.txt", "%s BUY SINGLE PREMIUM ITEM [CharID: %d][CharName:%s][Point Spent:%I64d][Money Left:%I64d][ITEM MID:%d SID:%d] ",
strTIME.c_str(), m_dwCharID, m_szName, llPRICE3, m_lnPremP, sITEM_NEW.sNativeID.wMainID, sITEM_NEW.sNativeID.wSubID );
//test add regenerate random option
if( sITEM_NEW.GENERATE_RANDOM_OPT () )
{
GLITEMLMT::GetInstance().ReqRandomItem( sITEM_NEW );
}
}
//add contributionpoint by CNDev
else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
{
CheckMoneyUpdate( m_lnContribP, llPRICE2, FALSE, "Buy From Npc." );
m_bMoneyUpdate = TRUE;
m_lnContribP -= llPRICE2;
std::string strTIME = CDebugSet::GetCurTime ();
CDebugSet::ToFile ( "ITEM_PREMIUM_CONTRIBUTION.txt", "%s BUY SINGLE CONTRIBUTION ITEM [CharID: %d][CharName:%s][Point Spent:%I64d][Money Left:%I64d][ITEM MID:%d SID:%d] ",
strTIME.c_str(), m_dwCharID, m_szName, llPRICE3, m_lnContribP, sITEM_NEW.sNativeID.wMainID, sITEM_NEW.sNativeID.wSubID );
//test add regenerate random option
if( sITEM_NEW.GENERATE_RANDOM_OPT () )
{
GLITEMLMT::GetInstance().ReqRandomItem( sITEM_NEW );
}
}
else
{
CheckMoneyUpdate( m_lnMoney, llPRICE2, FALSE, "Buy From Npc." );
m_bMoneyUpdate = TRUE;
m_lnMoney -= llPRICE2;
}
//add money 2
//add contributionpoint by CNDev
if ( llPRICE3>EMMONEY_LOG )
{
if ( !(pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM || pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM || pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM) )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, -LONGLONG(llPRICE2), EMITEM_ROUTE_DELETE );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnMoney, EMITEM_ROUTE_CHAR );
}
}
if ( llPRICE3>EMMONEY_LOG_PREMIUM )
{
if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, -LONGLONG(llPRICE2), EMITEM_ROUTE_DELETE_VOTE );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnVoteP, EMITEM_ROUTE_CHAR_VOTE );
}
else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, -LONGLONG(llPRICE2), EMITEM_ROUTE_DELETE_PREMIUM );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnPremP, EMITEM_ROUTE_CHAR_PREMIUM );
}
//add contributionpoint by CNDev
else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, -LONGLONG(llPRICE2), EMITEM_ROUTE_DELETE_CONTRIBUTION );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnContribP, EMITEM_ROUTE_CHAR_CONTRIBUTION );
}
}
#if defined(_RELEASED) || defined(TW_PARAM) || defined(TH_PARAM) || defined(HK_PARAM) // ***Tracing Log print
if ( m_bTracingUser )
{
NET_LOG_UPDATE_TRACINGCHAR TracingMsg;
TracingMsg.nUserNum = GetUserID();
StringCchCopy( TracingMsg.szAccount, USR_ID_LENGTH+1, m_szUID );
CString strTemp;
strTemp.Format( "Buy From Npc, [%s][%s], Buy price:[%I64d], Have Money:[%I64d]",
m_szUID, m_szName, llPRICE3, m_lnMoney );
StringCchCopy( TracingMsg.szLogMsg, TRACING_LOG_SIZE, strTemp.GetString() );
m_pGLGaeaServer->SENDTOAGENT( m_dwClientID, &TracingMsg );
}
#endif
// Note : Àκ¥Å丮¿¡ ³Ö¾îÁÝ´Ï´Ù.
//
BOOL bOK = m_cInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
if ( !bOK ) return S_OK;
// Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
//
//add money 2
//item log
if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM )
{
GLITEMLMT::GetInstance().ReqItemRoute ( sITEM_NEW, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR_VOTE, sITEM_NEW.wTurnNum );
}
//add money 3
else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
{
GLITEMLMT::GetInstance().ReqItemRoute ( sITEM_NEW, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR_PREMIUM, sITEM_NEW.wTurnNum );
}
//add contributionpoint by CNDev
else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
{
GLITEMLMT::GetInstance().ReqItemRoute ( sITEM_NEW, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR_CONTRIBUTION, sITEM_NEW.wTurnNum );
}
else
{
GLITEMLMT::GetInstance().ReqItemRoute ( sITEM_NEW, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, sITEM_NEW.wTurnNum );
}
// Àι꿡 ¾ÆÀÌÅÆ ³Ö¾îÁÖ´Â ¸Þ½ÃÁö.
GLMSG::SNETPC_INVEN_INSERT NetMsgInven;
NetMsgInven.Data = *m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInven);
}
if ( pCrow->m_bNpcRecall )
{
volatile float fSHOP_RATE_C = fSHOP_RATE * 0.01f;
volatile LONGLONG llPRICE1 = (LONGLONG)( dwPrice * fSHOP_RATE_C );
volatile LONGLONG llCommission = llPRICE2 - llPRICE1;
llCommission = LONGLONG ( llCommission * GLCONST_CHAR::fEARNING_RATE_NPC + 0.1f );
pCrow->m_lnCommission += llCommission;
}
else if ( m_pLandMan->m_dwGuidClubID != CLUB_NULL )
{
GLGuidance *pGuid = m_pLandMan->m_pGuidance;
if ( pGuid && !pGuid->m_bBattle )
{
// Note : Ŭ·´ÀÇ ¼öÀÍ ¹ß»ý.
volatile float fSHOP_RATE_C = fSHOP_RATE * 0.01f;
volatile LONGLONG llPRICE1 = (LONGLONG)( dwPrice * fSHOP_RATE_C );
volatile LONGLONG llCommission = llPRICE2 - llPRICE1;
GLClubMan &cClubMan = GLGaeaServer::GetInstance().GetClubMan();
GLCLUB *pCLUB = cClubMan.GetClub ( m_pLandMan->m_dwGuidClubID );
if ( pCLUB )
{
pCLUB->m_lnIncomeMoney += llCommission;
// Ŭ·´ ¼öÀÔÀÌ 1¾ï ÀÌ»óÀÏ °æ¿ì ·Î±×¸¦ ³²±ä´Ù.
if( llCommission > EMCLUBINCOMEMONEY_LOG )
GLITEMLMT::GetInstance().ReqMoneyExc( ID_CHAR, 0,
ID_CLUB, pCLUB->m_dwID,
llCommission,
EMITEM_ROUTE_CLUBINCOME );
CDebugSet::ToFile ( "club_income_char.txt", "{BuyFromNpc}, ClubID[%u], CharID[%u], Commission[%I64d], IncomeMoney[%I64d]",
pCLUB->m_dwID, m_dwCharID, llCommission, pCLUB->m_lnIncomeMoney );
}
}
}
// ±Ý¾× º¯È ¸Þ½ÃÁö.
GLMSG::SNETPC_UPDATE_MONEY NetMsgMoney;
NetMsgMoney.lnMoney = m_lnMoney;
//add money 2
NetMsgMoney.lnVoteP = m_lnVoteP;
//add money 3
NetMsgMoney.lnPremP = m_lnPremP;
//add contributionpoints by CNDev
NetMsgMoney.lnContribP = m_lnContribP;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgMoney);
return S_OK;
}
// *****************************************************
// Desc: NPC ¿¡°Ô ¾ÆÀÌÅÛ ÆÇ¸Å
// *****************************************************
HRESULT GLChar::MsgReqSaleToNpc ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_SALE_TO_NPC *pNetMsg = (GLMSG::SNETPC_REQ_SALE_TO_NPC *) nmg;
PCROWDATA pCrowData = GLCrowDataMan::GetInstance().GetCrowData ( pNetMsg->sNID );
DxConsoleMsg* pConsoleMsg = GLGaeaServer::GetInstance().GetConsoleMsg();
// »óÁ¡ NPC À¯È¿¼º üũ
PGLCROW pCrow = m_pLandMan->GetCrow ( pNetMsg->dwNPCID );
if ( !pCrow ) return E_FAIL;
float fDist = D3DXVec3Length ( &D3DXVECTOR3(m_vPos-pCrow->GetPosition()) );
float fTalkRange = (float) (pCrow->GetBodyRadius() + GETBODYRADIUS() + 30);
float fTalkableDis = fTalkRange + 20;
if ( fDist>fTalkableDis ) return E_FAIL;
if ( !pCrowData )
{
// »óÀÎ NPC°¡ Á¸Á¦ÇÏÁö ¾Ê½À´Ï´Ù.
return E_FAIL;
}
if ( !pCrowData->m_sNpcTalkDlg.IsMARKET() )
{
// »óÀÎÀÌ ¾Æ´Õ´Ï´Ù.
return E_FAIL;
}
if ( !VALID_HOLD_ITEM() )
{
// ÆÈ·Á°í ÇÏ´Â ¾ÆÀÌÅÆÀÌ ¾ø½À´Ï´Ù.
return E_FAIL;
}
const SITEMCUSTOM& sHOLD_ITEM = GET_HOLD_ITEM();
SITEM* pItem = GLItemMan::GetInstance().GetItem ( sHOLD_ITEM.sNativeID );
if ( pItem==NULL ) return E_FAIL;
// ÆÖ¾ÆÀ̵ð(DBÁ¢±Ù¿ë)
DWORD dwPetID = sHOLD_ITEM.dwPetID;
DWORD dwVehicleID = sHOLD_ITEM.dwVehicleID;
// °Å·¡¿É¼Ç
if ( !pItem->sBasicOp.IsSALE() )
{
// ÆÈ±â °¡´ÉÇÏÁö ¾ÊÀ½.
return E_FAIL;
}
// Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö ¾ÆÀÌÅÛ °è»ê °ø½ÄÀÌ Æ²·Á¼ ¼öÁ¤ÇÔ
/*
volatile float fSHOP_SALE_RATE = GET_PK_SHOP2SALE();
if ( fSHOP_SALE_RATE==0.0f ) return E_FAIL;
volatile LONGLONG llPRICE = LONGLONG( pItem->GETPRICE(sHOLD_ITEM.wTurnNum) * GLCONST_CHAR::fDISPRICE );
volatile float fSHOP_SALE_2RATE = fSHOP_SALE_RATE - m_pLandMan->m_fCommissionRate;
volatile float fSHOP_SALE_2RATE_C = (DOUBLE(fSHOP_SALE_2RATE) * 0.01f );
volatile LONGLONG llDisPRICE2 = LONGLONG( llPRICE * fSHOP_SALE_2RATE_C );
*/
volatile float fSHOP_SALE_RATE = GET_PK_SHOP2SALE();
if ( fSHOP_SALE_RATE==0.0f ) return E_FAIL;
volatile LONGLONG dwPrice = pItem->GETSELLPRICE ( sHOLD_ITEM.wTurnNum );
volatile float fSHOP_SALE_2RATE = fSHOP_SALE_RATE - m_pLandMan->m_fCommissionRate;
volatile float fSHOP_SALE_2RATE_C = fSHOP_SALE_2RATE * 0.01f;
volatile LONGLONG llDisPRICE2 = LONGLONG( dwPrice * fSHOP_SALE_2RATE_C );
if ( pCrow->m_bNpcRecall )
{
volatile float fSHOP_RATE_C = fSHOP_SALE_RATE * 0.01f;
volatile LONGLONG llDisPRICE1 = LONGLONG ( dwPrice * fSHOP_RATE_C );
volatile LONGLONG llCommission = llDisPRICE1-llDisPRICE2;
llCommission = LONGLONG ( llCommission * GLCONST_CHAR::fEARNING_RATE_NPC + 0.1f );
pCrow->m_lnCommission += llCommission;
}
else if ( m_pLandMan->m_dwGuidClubID != CLUB_NULL )
{
GLGuidance *pGuid = m_pLandMan->m_pGuidance;
if ( pGuid && !pGuid->m_bBattle )
{
// Note : Ŭ·´ÀÇ ¼öÀÍ ¹ß»ý.
volatile float fSHOP_RATE_C = fSHOP_SALE_RATE * 0.01f;
volatile LONGLONG llDisPRICE1 = LONGLONG ( dwPrice * fSHOP_RATE_C );
volatile LONGLONG llCommission = llDisPRICE1-llDisPRICE2;
GLClubMan &cClubMan = GLGaeaServer::GetInstance().GetClubMan();
GLCLUB *pCLUB = cClubMan.GetClub ( m_pLandMan->m_dwGuidClubID );
if ( pCLUB )
{
pCLUB->m_lnIncomeMoney += llCommission;
// Ŭ·´ ¼öÀÔÀÌ 1¾ï ÀÌ»óÀÏ °æ¿ì ·Î±×¸¦ ³²±ä´Ù.
if( llCommission > EMCLUBINCOMEMONEY_LOG )
GLITEMLMT::GetInstance().ReqMoneyExc( ID_CHAR, m_dwCharID,
ID_CLUB, pCLUB->m_dwID,
llCommission,
EMITEM_ROUTE_CLUBINCOME );
CDebugSet::ToFile ( "club_income_char.txt", "{SaleToNpc}, ClubID[%u], CharID[%u], Commission[%I64d], IncomeMoney[%I64d]",
pCLUB->m_dwID, m_dwCharID, llCommission, pCLUB->m_lnIncomeMoney );
}
}
}
// ±Ý¾× º¯È.
CheckMoneyUpdate( m_lnMoney, llDisPRICE2, TRUE, "Sale To Npc." );
m_bMoneyUpdate = TRUE;
if ( pItem->sBasicOp.IsPointRecover() )
{//add and modified for //add point sell
if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM )
{
m_lnVoteP += dwPrice;
if ( dwPrice>EMMONEY_LOG_PREMIUM )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, 0, ID_CHAR, m_dwCharID, dwPrice, EMITEM_ROUTE_CHAR_VOTE );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnVoteP, EMITEM_ROUTE_CHAR_VOTE );
}
GLITEMLMT::GetInstance().ReqItemRoute ( sHOLD_ITEM, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_SHOP_VOTE, sHOLD_ITEM.wTurnNum );
std::string strTIME = CDebugSet::GetCurTime ();
CDebugSet::ToFile ( "ITEM_VOTE_SELL.txt", "%s SELL VOTE ITEM [CharID: %d][CharName:%s][Item Price:%I64d][Money After:%I64d][ITEM MID:%d SID:%d][Number: %d] ",
strTIME.c_str(), m_dwCharID, m_szName, dwPrice, m_lnVoteP, pItem->sBasicOp.sNativeID.wMainID, pItem->sBasicOp.sNativeID.wSubID,sHOLD_ITEM.wTurnNum );
}
else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
{
m_lnPremP += dwPrice;
if ( dwPrice>EMMONEY_LOG_PREMIUM )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, 0, ID_CHAR, m_dwCharID, dwPrice, EMITEM_ROUTE_CHAR_PREMIUM );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnPremP, EMITEM_ROUTE_CHAR_PREMIUM );
}
GLITEMLMT::GetInstance().ReqItemRoute ( sHOLD_ITEM, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_SHOP_PREMIUM, sHOLD_ITEM.wTurnNum );
std::string strTIME = CDebugSet::GetCurTime ();
CDebugSet::ToFile ( "ITEM_PREMIUM_SELL.txt", "%s SELL PREMIUM ITEM [CharID: %d][CharName:%s][Item Price:%I64d][Money After:%I64d][ITEM MID:%d SID:%d][Number: %d] ",
strTIME.c_str(), m_dwCharID, m_szName, dwPrice, m_lnPremP, pItem->sBasicOp.sNativeID.wMainID, pItem->sBasicOp.sNativeID.wSubID,sHOLD_ITEM.wTurnNum );
}
//add contributionpoint by CNDev
else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
{
m_lnContribP += dwPrice;
if ( dwPrice>EMMONEY_LOG_CONTRIBUTION )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, 0, ID_CHAR, m_dwCharID, dwPrice, EMITEM_ROUTE_CHAR_CONTRIBUTION );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnContribP, EMITEM_ROUTE_CHAR_CONTRIBUTION );
}
GLITEMLMT::GetInstance().ReqItemRoute ( sHOLD_ITEM, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_SHOP_CONTRIBUTION, sHOLD_ITEM.wTurnNum );
std::string strTIME = CDebugSet::GetCurTime ();
CDebugSet::ToFile ( "ITEM_CONTRIBUTION_SELL.txt", "%s SELL CONTRIBUTION ITEM [CharID: %d][CharName:%s][Item Price:%I64d][Money After:%I64d][ITEM MID:%d SID:%d][Number: %d] ",
strTIME.c_str(), m_dwCharID, m_szName, dwPrice, m_lnContribP, pItem->sBasicOp.sNativeID.wMainID, pItem->sBasicOp.sNativeID.wSubID,sHOLD_ITEM.wTurnNum );
}
}
else
{
m_lnMoney += llDisPRICE2;
// µ· ·Î±×.
if ( llDisPRICE2>EMMONEY_LOG )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, 0, ID_CHAR, m_dwCharID, llDisPRICE2, EMITEM_ROUTE_CHAR );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnMoney, EMITEM_ROUTE_CHAR );
}
// Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
//
GLITEMLMT::GetInstance().ReqItemRoute ( sHOLD_ITEM, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_SHOP, sHOLD_ITEM.wTurnNum );
}
//#if defined(_RELEASED) || defined(TW_PARAM) || defined(TH_PARAM) || defined(HK_PARAM) // ***Tracing Log print
if ( m_bTracingUser )
{
NET_LOG_UPDATE_TRACINGCHAR TracingMsg;
TracingMsg.nUserNum = GetUserID();
StringCchCopy( TracingMsg.szAccount, USR_ID_LENGTH+1, m_szUID );
CString strTemp;
strTemp.Format( "Sale To Npc, [%s][%s], Sale price:[%I64d], Have Money:[%I64d]",
m_szUID, m_szName, llDisPRICE2, m_lnMoney );
StringCchCopy( TracingMsg.szLogMsg, TRACING_LOG_SIZE, strTemp.GetString() );
m_pGLGaeaServer->SENDTOAGENT( m_dwClientID, &TracingMsg );
}
//#endif
// ¾ÆÀÌÅÆ »èÁ¦.
RELEASE_HOLD_ITEM();
// ±Ý¾× º¯È ¸Þ½ÃÁö.
GLMSG::SNETPC_UPDATE_MONEY NetMsgMoney;
NetMsgMoney.lnMoney = m_lnMoney;
//add money 2
NetMsgMoney.lnVoteP = m_lnVoteP;
//add money 3
NetMsgMoney.lnPremP = m_lnPremP;
//add contributionpoints by CNDev
NetMsgMoney.lnContribP = m_lnContribP;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgMoney);
// [Àڽſ¡°Ô] ¼Õ¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_PUTON_RELEASE NetMsg_PutOn_Release(SLOT_HOLD);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn_Release);
// ÆÖÄ«µåÀÏ °æ¿ì ¾ÆÀÌÅÛÀ» »óÁ¡¿¡ ÆÈ¸é ÆÖDB »èÁ¦
if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD && dwPetID != 0 )
{
// ÆÖÀ» »ç¶óÁö°Ô ÇØÁØ´Ù.
GLGaeaServer::GetInstance().ReserveDropOutPet ( SDROPOUTPETINFO(m_dwPetGUID,true,false) );
CDeletePet* pDbAction = new CDeletePet ( m_dwCharID, dwPetID );
GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
if ( pDBMan ) pDBMan->AddJob ( pDbAction );
// ÆÖÀÌ »èÁ¦µÇ¸é ºÎȰÁ¤º¸¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡ ¾Ë·ÁÁÜ.
CGetRestorePetList *pDbAction1 = new CGetRestorePetList ( m_dwCharID, m_dwClientID );
if ( pDBMan ) pDBMan->AddJob ( pDbAction1 );
}
if ( pItem->sBasicOp.emItemType == ITEM_VEHICLE && dwVehicleID != 0 )
{
CDeleteVehicle* pDbAction = new CDeleteVehicle ( m_dwClientID, m_dwCharID, dwVehicleID );
GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
if ( pDBMan ) pDBMan->AddJob ( pDbAction );
}
return S_OK;
}
HRESULT GLChar::MsgReqFireCracker ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_FIRECRACKER_BRD *pNetMsg = (GLMSG::SNETPC_REQ_FIRECRACKER_BRD *) nmg;
GLMSG::SNETPC_REQ_FIRECRACKER_FB NetMsgFB;
if ( !VALID_HOLD_ITEM () )
{
NetMsgFB.emFB = EMREQ_FIRECRACKER_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
if ( m_sTrade.Valid() )
{
NetMsgFB.emFB = EMREQ_FIRECRACKER_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
SITEM* pITEM = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pITEM )
{
NetMsgFB.emFB = EMREQ_FIRECRACKER_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pITEM->sBasicOp.sNativeID ) ) return E_FAIL;
SITEMCUSTOM &sCUSTOM = m_PutOnItems[SLOT_HOLD];
if ( pITEM->sBasicOp.emItemType!=ITEM_FIRECRACKER )
{
NetMsgFB.emFB = EMREQ_FIRECRACKER_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
if ( pITEM->sBasicOp.strTargetEffect.empty() )
{
NetMsgFB.emFB = EMREQ_FIRECRACKER_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
// Note : ÆøÁ× »ç¿ë.
//
GLMSG::SNETPC_REQ_FIRECRACKER_BRD NetMsgBrd;
NetMsgBrd.nidITEM = sCUSTOM.sNativeID;
NetMsgBrd.vPOS = pNetMsg->vPOS;
SNDMSGAROUND ( (NET_MSG_GENERIC*) &NetMsgBrd );
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgBrd);
// Note : ÆøÁ× »ç¿ëÀ» ¾Ë¸².
//
NetMsgFB.emFB = EMREQ_FIRECRACKER_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
// Note : ¾ÆÀÌÅÛ ¼Ò¸ð.
//
DoDrugSlotItem (SLOT_HOLD );
return S_OK;
}
HRESULT GLChar::MsgInvenVietnamGet ( NET_MSG_GENERIC* nmg )
{
if ( !IsValidBody() ) return E_FAIL;
// if( m_dwVietnamGainType == GAINTYPE_EMPTY ) return E_FAIL;
// if( m_dwVietnamGainType == GAINTYPE_HALF ) return E_FAIL;
GLMSG::SNETPC_INVEN_VIETNAM_INVENGET *pNetMsg = (GLMSG::SNETPC_INVEN_VIETNAM_INVENGET *) nmg;
SINVENITEM* pInvenItem = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pInvenItem ) return E_FAIL;
if ( CheckCoolTime( pInvenItem->sItemCustom.sNativeID ) ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem || pItem->sDrugOp.wCureVolume == 0 ) return E_FAIL;
if( pNetMsg->bGetExp )
{
// È®·ü
if ( pItem->sDrugOp.bRatio )
{
LONGLONG lAddExp;
LONGLONG lAddMoney;
float fRate = (float)pItem->sDrugOp.wCureVolume / 100.0f;
lAddExp = m_lVNGainSysExp * fRate;
lAddMoney = m_lVNGainSysMoney * fRate;
if ( lAddExp > m_lVNGainSysExp ) lAddExp = m_lVNGainSysExp;
if ( lAddMoney > m_lVNGainSysMoney ) lAddMoney = m_lVNGainSysMoney;
m_lVNGainSysExp -= lAddExp;
m_lVNGainSysMoney -= lAddMoney;
m_sExperience.lnNow += lAddExp;
m_lnMoney += lAddMoney;
m_bVietnamLevelUp = TRUE;
}
else
{
LONGLONG lAddExp;
if( m_lVNGainSysExp < pItem->sDrugOp.wCureVolume )
{
lAddExp = m_lVNGainSysExp;
m_lVNGainSysExp = 0;
}else{
lAddExp = pItem->sDrugOp.wCureVolume;
m_lVNGainSysExp -= pItem->sDrugOp.wCureVolume;
}
m_sExperience.lnNow += lAddExp;
m_lnMoney += m_lVNGainSysMoney;
m_lVNGainSysMoney = 0;
m_bVietnamLevelUp = TRUE;
}
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
GLMSG::SNETPC_INVEN_VIETNAM_EXPGET_FB NetMsgFB;
NetMsgFB.lnVnMoney = m_lVNGainSysMoney;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ µ· ¾×¼ö º¯È¸¦ ¾Ë·ÁÁÜ.
GLMSG::SNETPC_UPDATE_MONEY NetMsg;
NetMsg.lnMoney = m_lnMoney;
//add money 2
NetMsg.lnVoteP = m_lnVoteP;
//add money 3
NetMsg.lnPremP = m_lnPremP;
//add contributionpoints by CNDev
NetMsg.lnContribP = m_lnContribP;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
// Note : ±Ý¾× ·Î±×.
//
/*if ( lnAmount>EMMONEY_LOG )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, 0, ID_CHAR, m_dwCharID, lnAmount, EMITEM_ROUTE_VNINVEN );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnMoney, EMITEM_ROUTE_CHAR );
}*/
}else{
m_dwVietnamInvenCount += pItem->sDrugOp.wCureVolume;
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
GLMSG::SNETPC_INVEN_VIETNAM_ITEMGET_FB NetMsgFB;
NetMsgFB.dwVietnamInvenCount = m_dwVietnamInvenCount;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
}
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
return S_OK;
}
HRESULT GLChar::MsgReqInvenDrug ( NET_MSG_GENERIC* nmg )
{
if ( !IsValidBody() ) return E_FAIL;
GLMSG::SNETPC_REQ_INVENDRUG *pNetMsg = (GLMSG::SNETPC_REQ_INVENDRUG *) nmg;
SINVENITEM* pInvenItem = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pInvenItem ) return E_FAIL;
if ( CheckCoolTime( pInvenItem->sItemCustom.sNativeID ) ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem || pItem->sDrugOp.emDrug==ITEM_DRUG_NUNE ) return E_FAIL;
if ( m_bAntiPot )
{
GLMSG::SNET_ITEM_CANNOT_POT NetMsg;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
return E_FAIL;
}
if ( m_sCONFTING.IsFIGHTING() )
{
if ( !m_sCONFTING.IsRECOVE() )
{
// Note : ȸº¹¾à »ç¿ë °¡´É °¹¼ö Ŭ¶óÀÌ¾ðÆ®¿¡ ¾Ë¸².
//
GLMSG::SNETPC_CONFRONT_RECOVE NetMsg;
NetMsg.wRECOVER = m_sCONFTING.wRECOVER;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
return E_FAIL;
}
if ( m_sCONFTING.sOption.wRECOVER!=USHRT_MAX )
{
m_sCONFTING.COUNTRECOVE();
// Note : ȸº¹¾à »ç¿ë °¡´É °¹¼ö Ŭ¶óÀÌ¾ðÆ®¿¡ ¾Ë¸².
//
GLMSG::SNETPC_CONFRONT_RECOVE NetMsg;
NetMsg.wRECOVER = m_sCONFTING.wRECOVER;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
}
}
// Note : pk µî±ÞÀÌ »ìÀθ¶ µî±Þ ÀÌ»óÀÏ °æ¿ì ȸº¹¾àÀÇ »ç¿ëÀ» ¸·´Â´Ù.
//
DWORD dwPK_LEVEL = GET_PK_LEVEL();
if ( dwPK_LEVEL != UINT_MAX && dwPK_LEVEL>GLCONST_CHAR::dwPK_DRUG_ENABLE_LEVEL )
{
return E_FAIL;
}
switch ( pItem->sDrugOp.emDrug )
{
case ITEM_DRUG_HP:
if ( m_sHP.dwNow == m_sHP.dwMax ) return E_FAIL;
m_sHP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio );
break;
case ITEM_DRUG_MP:
if ( m_sMP.dwNow == m_sMP.dwMax ) return E_FAIL;
m_sMP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio );
break;
case ITEM_DRUG_SP:
if ( m_sSP.dwNow == m_sSP.dwMax ) return E_FAIL;
m_sSP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio );
break;
case ITEM_DRUG_HP_MP:
if ( m_sHP.dwNow == m_sHP.dwMax && m_sMP.dwNow == m_sMP.dwMax ) return E_FAIL;
m_sHP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio );
m_sMP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio );
break;
case ITEM_DRUG_MP_SP:
if ( m_sMP.dwNow == m_sMP.dwMax && m_sSP.dwNow == m_sSP.dwMax ) return E_FAIL;
m_sMP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio );
m_sSP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio );
break;
case ITEM_DRUG_HP_MP_SP:
if ( m_sHP.dwNow == m_sHP.dwMax && m_sMP.dwNow == m_sMP.dwMax && m_sSP.dwNow == m_sSP.dwMax ) return E_FAIL;
m_sHP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio );
m_sMP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio );
m_sSP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio );
break;
case ITEM_DRUG_CP:
if ( m_sCP.dwNow == m_sCP.dwMax ) return E_FAIL;
m_sCP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio ); //add cp
break;
//case ITEM_DRUG_HP:
//case ITEM_DRUG_MP:
//case ITEM_DRUG_SP:
//case ITEM_DRUG_HP_MP:
//case ITEM_DRUG_MP_SP:
//case ITEM_DRUG_HP_MP_SP:
// RECEIVE_DRUGFACT(pItem->sDrugOp.emDrug,pItem->sDrugOp.wCureVolume,pItem->sDrugOp.bRatio);
// break;
case ITEM_DRUG_CURE:
case ITEM_DRUG_HP_CURE:
case ITEM_DRUG_HP_MP_SP_CURE:
{
BOOL bSTATEBLOW = ISSTATEBLOW();
if( pItem->sDrugOp.emDrug == ITEM_DRUG_HP_CURE )
{
if ( m_sHP.dwNow == m_sHP.dwMax && !bSTATEBLOW ) return E_FAIL;
m_sHP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio );
bSTATEBLOW = TRUE;
}
if( pItem->sDrugOp.emDrug == ITEM_DRUG_HP_MP_SP_CURE )
{
if ( m_sHP.dwNow == m_sHP.dwMax && m_sMP.dwNow == m_sMP.dwMax
&& m_sSP.dwNow == m_sSP.dwMax && !bSTATEBLOW ) return E_FAIL;
m_sHP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio );
m_sMP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio );
m_sSP.INCREASE ( pItem->sDrugOp.wCureVolume, pItem->sDrugOp.bRatio );
bSTATEBLOW = TRUE;
}
if ( !bSTATEBLOW ) return E_FAIL;
GLMSG::SNETPC_CURESTATEBLOW_BRD NetMsgBrd;
for ( int i=0; i<EMBLOW_MULTI; ++i )
{
if ( m_sSTATEBLOWS[i].emBLOW==EMBLOW_NONE ) continue;
EMDISORDER emDIS = STATE_TO_DISORDER(m_sSTATEBLOWS[i].emBLOW);
if ( !(pItem->sDrugOp.dwCureDISORDER&emDIS) ) continue;
// »óÅÂÀÌ»ó Áö¼Ó½Ã°£À» Á¾·á½ÃÅ´.
m_sSTATEBLOWS[i].fAGE = 0.0f;
}
// »óÅÂÀÌ»ó Ä¡·áµÊÀ» Àڽſ¡°Ô ¾Ë¸².
NetMsgBrd.emCrow = CROW_PC;
NetMsgBrd.dwID = m_dwGaeaID;
NetMsgBrd.dwCUREFLAG = pItem->sDrugOp.dwCureDISORDER;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgBrd);
// »óÅÂÀÌ»ó Ä¡·áµÊÀ» ¸ðµÎ¿¡°Ô ¾Ë¸².
SNDMSGAROUND ( (NET_MSG_GENERIC*)&NetMsgBrd );
}
break;
};
// Note : ¾ÆÀÌÅÛ ¼Ò¸ð.
//
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
// Note : ü·Â ¼öÄ¡ º¯È¸¦ [ÀÚ½Å,ÆÄƼ¿ø,ÁÖÀ§]ÀÇ Å¬¶óÀÌ¾ðÆ®µé¿¡ ¾Ë¸².
MsgSendUpdateState ();
return S_OK;
}
HRESULT GLChar::MsgGetPoints ( NET_MSG_GENERIC* nmg )
{
if ( !IsValidBody() ) return E_FAIL;
GLMSG::SNETPC_RETRIEVE_POINTS_FB *pNetMsg = (GLMSG::SNETPC_RETRIEVE_POINTS_FB *) nmg;
GLMSG::SNETPC_RETRIEVE_POINTS_FB pNetMsgFB;
pNetMsgFB.emFB = pNetMsg->emFB;
pNetMsgFB.PPoints = pNetMsg->PPoints;
pNetMsgFB.VPoints = pNetMsg->VPoints;
//CONSOLEMSG_WRITE ( " send MsgGetPoints ");
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&pNetMsgFB);
return S_OK;
}
HRESULT GLChar::MsgRetrievePoints ( NET_MSG_GENERIC* nmg )
{
if ( !IsValidBody() ) return E_FAIL;
GLMSG::SNETPC_RETRIEVE_POINTS *pNetMsg = (GLMSG::SNETPC_RETRIEVE_POINTS *) nmg;
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
CGetPoints* pDbAction = new CGetPoints ( m_dwCharID, m_dwUserID , m_dwClientID );
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDbAction );
//if ( pDbAction ) CONSOLEMSG_WRITE ( " send MsgRetrievePoints ");
}
return S_OK;
}
HRESULT GLChar::MsgReqInvenItemShopInfo ( NET_MSG_GENERIC* nmg )
{
if ( !IsValidBody() ) return E_FAIL;
GLMSG::SNET_GET_ITEMSHOP_FROMDB* pNetMsg = (GLMSG::SNET_GET_ITEMSHOP_FROMDB*) nmg;
CString strUID = m_szUID;
std::vector<ITEMSHOP> vItem;
// DB¿¡¼ ºô¸µ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿À±â
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
CGetItemShop* pDbAction = new CGetItemShop (m_dwCharID);
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDbAction );
//if ( pDbAction ) CONSOLEMSG_WRITE ( " send MsgReqInvenItemShopInfo ");
}
return S_OK;
}
HRESULT GLChar::MsgBuyItemShop ( NET_MSG_GENERIC* nmg )
{
if ( !IsValidBody() ) return E_FAIL;
GLMSG::SNET_ITEMSHOP_ITEM_BUY *pNetMsg = (GLMSG::SNET_ITEMSHOP_ITEM_BUY *) nmg;
GLMSG::SNET_ITEMSHOP_ITEM_BUY NetMsg;
NetMsg.bBuy = pNetMsg->bBuy;
NetMsg.dwUserID = pNetMsg->dwUserID;
//CONSOLEMSG_WRITE ( " send ");
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
return S_OK;
}
HRESULT GLChar::MsgReqInvenItemShop ( NET_MSG_GENERIC* nmg )
{
if ( !IsValidBody() ) return E_FAIL;
GLMSG::SNET_ITEMSHOP_BUY *pNetMsg = (GLMSG::SNET_ITEMSHOP_BUY *) nmg;
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
CItemShop_Get *pDbAction = new CItemShop_Get( m_dwClientID, m_dwUserID, pNetMsg->szPurKey );
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDbAction );
//if ( pDbAction ) CONSOLEMSG_WRITE ( " send MsgReqInvenItemShop ");
}
return S_OK;
}
HRESULT GLChar::MsgReqInvenBoxInfo ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_GET_CHARGEDITEM_FROMDB* pNetMsg = (GLMSG::SNET_GET_CHARGEDITEM_FROMDB*) nmg;
CString strUID = m_szUID;
std::vector<SHOPPURCHASE> vItem;
// DB¿¡¼ ºô¸µ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿À±â
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
CGetPurchaseItem* pDbAction = new CGetPurchaseItem ( strUID, m_dwCharID );
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDbAction );
}
return S_OK;
}
HRESULT GLChar::MsgReqInvenBoxOpen ( NET_MSG_GENERIC* nmg )
{
if ( !IsValidBody() ) return E_FAIL;
GLMSG::SNET_INVEN_BOXOPEN *pNetMsg = (GLMSG::SNET_INVEN_BOXOPEN *) nmg;
GLMSG::SNET_INVEN_BOXOPEN_FB NetMsgFB;
WORD wPosX = pNetMsg->wPosX;
WORD wPosY = pNetMsg->wPosY;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
{
NetMsgFB.emFB = EMREQ_BOXOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem || pItem->sBasicOp.emItemType!=ITEM_BOX )
{
NetMsgFB.emFB = EMREQ_BOXOPEN_FB_NOBOX;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
if ( !pItem->sBox.VALID() )
{
NetMsgFB.emFB = EMREQ_BOXOPEN_FB_EMPTY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
// Note : Àκ¥ÀÇ ¿©À¯ °ø°£ ÃøÁ¤.
//
GLInventory cInvenTemp;
cInvenTemp.Assign ( m_cInventory );
for ( int i=0; i<ITEM::SBOX::ITEM_SIZE; ++i )
{
SITEMCUSTOM sCUSTOM;
sCUSTOM.sNativeID = pItem->sBox.sITEMS[i].nidITEM;
if ( sCUSTOM.sNativeID==SNATIVEID(false) ) continue;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sCUSTOM.sNativeID );
if ( !pITEM )
{
NetMsgFB.emFB = EMREQ_BOXOPEN_FB_INVALIDITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
BOOL bOK = cInvenTemp.InsertItem ( sCUSTOM );
if ( !bOK )
{
// Note : Àκ¥¿¡ °ø°£ÀÌ ¾ø´Â °ÍÀ¸·Î ÆÇ´ÜµÊ.
//
NetMsgFB.emFB = EMREQ_BOXOPEN_FB_NOTINVEN;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
}
// Note : »óÀھȿ¡ ÀÖ´Â ¾ÆÀÌÅÛÀ» ²¨³»¾î¼ ³Ö´Â´Ù.
//
for ( int i=0; i<ITEM::SBOX::ITEM_SIZE; ++i )
{
SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = pItem->sBox.sITEMS[i].nidITEM;
DWORD dwAMOUNT = pItem->sBox.sITEMS[i].dwAMOUNT;
if ( sITEM_NEW.sNativeID==SNATIVEID(false) ) continue;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sITEM_NEW.sNativeID );
if ( !pITEM ) return E_FAIL;
// Note : ¾ÆÀÌÅÛ »ý¼º.
//
CTime cTIME = CTime::GetCurrentTime();
sITEM_NEW.tBORNTIME = cTIME.GetTime();
sITEM_NEW.wTurnNum = (WORD) dwAMOUNT;
sITEM_NEW.cGenType = pInvenItem->sItemCustom.cGenType;
sITEM_NEW.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
sITEM_NEW.cFieldID = (BYTE)GLGaeaServer::GetInstance().GetFieldSvrID();
sITEM_NEW.lnGenNum = GLITEMLMT::GetInstance().RegItemGen ( sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );
// ¾ÆÀÌÅÛ ¿¡µðÆ®¿¡¼ ÀÔ·ÂÇÑ °³Á¶ µî±Þ Àû¿ë ( ÁØÇõ )
sITEM_NEW.cDAMAGE = (BYTE)pITEM->sBasicOp.wGradeAttack;
sITEM_NEW.cDEFENSE = (BYTE)pITEM->sBasicOp.wGradeDefense;
// ·£´ý ¿É¼Ç »ý¼º.
if( sITEM_NEW.GENERATE_RANDOM_OPT() )
{
GLITEMLMT::GetInstance().ReqRandomItem( sITEM_NEW );
}
// Note : Àκ¥¿¡ ³ÖÀ» À§Ä¡ ãÀ½.
WORD wInsertPosX, wInsertPosY;
BOOL bOk = m_cInventory.FindInsrtable ( pITEM->sBasicOp.wInvenSizeX, pITEM->sBasicOp.wInvenSizeY, wInsertPosX, wInsertPosY );
if ( !bOk ) return S_OK; // Àκ¥ °ø°£ ºÎÁ·À¸·Î µÇµ¹¸² ½ÇÆÐ.
// »ý¼ºÇÑ ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
m_cInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
SINVENITEM *pInsertItem = m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
GLITEMLMT::GetInstance().ReqItemRoute ( pInsertItem->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pInsertItem->sItemCustom.wTurnNum );
// [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.Data = *pInsertItem;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
}
// »óÀÚ »èÁ¦ ·Î±×.
GLITEMLMT::GetInstance().ReqItemRoute ( pInvenItem->sItemCustom, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_DELETE, pInvenItem->sItemCustom.wTurnNum );
// Note : »óÀÚ ¾ÆÀÌÅÛ »èÁ¦.
//
m_cInventory.DeleteItem ( wPosX, wPosY );
// [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
NetMsg_Inven_Delete.wPosX = wPosX;
NetMsg_Inven_Delete.wPosY = wPosY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Delete);
// Note : »óÀÚ¸¦ ¼º°øÀûÀ¸·Î ¿¾úÀ½.
//
NetMsgFB.emFB = EMREQ_BOXOPEN_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_OK;
}
HRESULT GLChar::MsgReqInvenGMItem ( NET_MSG_GENERIC* nmg ) //add itemcmd
{
if ( !IsValidBody() ) return E_FAIL;
if ( m_dwUserLvl < USER_MASTER ) return E_FAIL;
GLMSG::SNET_INVEN_GMITEM *pNetMsg = (GLMSG::SNET_INVEN_GMITEM *) nmg;
GLMSG::SNET_INVEN_GMITEM_FB NetMsgFB;
if ( pNetMsg->wPass != GLCONST_CHAR::wGMItemPass )
{
NetMsgFB.emFB = EMREQ_GMITEM_FB_PASS;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pNetMsg->sItemID );
if ( !pItem )
{
NetMsgFB.emFB = EMREQ_GMITEM_FB_NOTITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
if ( pNetMsg->wNum >= GLCONST_CHAR::wGMItemMax )
{
NetMsgFB.emFB = EMREQ_GMITEM_FB_MAX;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
GLInventory cInvenTemp;
cInvenTemp.Assign ( m_cInventory );
WORD wNum = pNetMsg->wNum;
for ( int i=0; i<wNum; ++i )
{
SITEMCUSTOM sCUSTOM;
sCUSTOM.sNativeID = pItem->sBasicOp.sNativeID;
if ( sCUSTOM.sNativeID==SNATIVEID(false) ) continue;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sCUSTOM.sNativeID );
if ( !pITEM )
{
NetMsgFB.emFB = EMREQ_GMITEM_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
BOOL bOK = cInvenTemp.InsertItem ( sCUSTOM );
if ( !bOK )
{
NetMsgFB.emFB = EMREQ_GMITEM_FB_INFAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
}
for ( int i=0; i<wNum; ++i )
{
SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = pItem->sBasicOp.sNativeID;
//DWORD dwAMOUNT = pItem->sBox.sITEMS[i].dwAMOUNT;
if ( sITEM_NEW.sNativeID==SNATIVEID(false) ) continue;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sITEM_NEW.sNativeID );
if ( !pITEM ) return E_FAIL;
CTime cTIME = CTime::GetCurrentTime();
sITEM_NEW.tBORNTIME = cTIME.GetTime();
//sITEM_NEW.wTurnNum = (WORD) 1;
sITEM_NEW.cGenType = EMGEN_SYSTEM;
sITEM_NEW.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
sITEM_NEW.cFieldID = (BYTE)GLGaeaServer::GetInstance().GetFieldSvrID();
sITEM_NEW.lnGenNum = GLITEMLMT::GetInstance().RegItemGen ( sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );
sITEM_NEW.cDAMAGE = (BYTE)0; //item is +9
sITEM_NEW.cDEFENSE = (BYTE)0;//item is +9
//sITEM_NEW.dwOwnerID = m_dwCharID; //item have owner id of the one who request
if( sITEM_NEW.GENERATE_RANDOM_OPT() )
{
GLITEMLMT::GetInstance().ReqRandomItem( sITEM_NEW );
}
WORD wInsertPosX, wInsertPosY;
BOOL bOk = m_cInventory.FindInsrtable ( pITEM->sBasicOp.wInvenSizeX, pITEM->sBasicOp.wInvenSizeY, wInsertPosX, wInsertPosY );
if ( !bOk ) return S_OK;
m_cInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
SINVENITEM *pInsertItem = m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
GLITEMLMT::GetInstance().ReqItemRoute ( pInsertItem->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pInsertItem->sItemCustom.wTurnNum );
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.Data = *pInsertItem;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
}
NetMsgFB.emFB = EMREQ_GMITEM_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_OK;
}
HRESULT GLChar::MsgReqInvenRandomBoxOpen ( NET_MSG_GENERIC* nmg )
{
if ( !IsValidBody() ) return E_FAIL;
GLMSG::SNET_INVEN_RANDOMBOXOPEN *pNetMsg = (GLMSG::SNET_INVEN_RANDOMBOXOPEN *) nmg;
GLMSG::SNET_INVEN_RANDOMBOXOPEN_FB NetMsgFB;
WORD wPosX = pNetMsg->wPosX;
WORD wPosY = pNetMsg->wPosY;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
{
NetMsgFB.emFB = EMINVEN_RANDOMBOXOPEN_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem || pItem->sBasicOp.emItemType!=ITEM_RANDOMITEM )
{
NetMsgFB.emFB = EMINVEN_RANDOMBOXOPEN_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
if ( !pItem->sRandomBox.VALID() )
{
NetMsgFB.emFB = EMINVEN_RANDOMBOXOPEN_FB_EMPTY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
float fNowRate = seqrandom::getpercent();
float fLOW = 0;
ITEM::SRANDOMITEM sGENITEM;
sGENITEM.nidITEM = SNATIVEID(false);
for ( DWORD i=0; i<pItem->sRandomBox.vecBOX.size(); ++i )
{
ITEM::SRANDOMITEM sITEM = pItem->sRandomBox.vecBOX[i];
if ( fLOW <= fNowRate && fNowRate < (fLOW+sITEM.fRATE) )
{
sGENITEM = sITEM;
break;
}
fLOW += sITEM.fRATE;
}
if ( sGENITEM.nidITEM == SNATIVEID(false) )
{
// »óÀÚ ¾ÆÀÌÅÛ »èÁ¦ ·Î±× ³²±è.
GLITEMLMT::GetInstance().ReqItemRoute ( pInvenItem->sItemCustom, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_DELETE, pInvenItem->sItemCustom.wTurnNum );
// Note : »óÀÚ ¾ÆÀÌÅÛ »èÁ¦.
//
m_cInventory.DeleteItem ( wPosX, wPosY );
// [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
NetMsg_Inven_Delete.wPosX = wPosX;
NetMsg_Inven_Delete.wPosY = wPosY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Delete);
// Note : ó¸® °á°ú Àü¼Û.
NetMsgFB.emFB = EMINVEN_RANDOMBOXOPEN_FB_MISS;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
SITEM *pITEM_DATA = GLItemMan::GetInstance().GetItem ( sGENITEM.nidITEM );
if ( !pITEM_DATA )
{
NetMsgFB.emFB = EMINVEN_RANDOMBOXOPEN_FB_BADITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
// Note : ¾ÆÀÌÅÆ ¹ß»ý.
//
WORD wINSERTX(0), wINSERTY(0);
BOOL bOK = m_cInventory.FindInsrtable ( pITEM_DATA->sBasicOp.wInvenSizeX, pITEM_DATA->sBasicOp.wInvenSizeY, wINSERTX, wINSERTY );
if ( !bOK )
{
NetMsgFB.emFB = EMINVEN_RANDOMBOXOPEN_FB_NOINVEN;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
// Note : ¾ÆÀÌÅÛ »ý¼º.
//
SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = sGENITEM.nidITEM;
CTime cTIME = CTime::GetCurrentTime();
sITEM_NEW.tBORNTIME = cTIME.GetTime();
sITEM_NEW.wTurnNum = pITEM_DATA->GETAPPLYNUM();
sITEM_NEW.cGenType = pInvenItem->sItemCustom.cGenType;
sITEM_NEW.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
sITEM_NEW.cFieldID = (BYTE)GLGaeaServer::GetInstance().GetFieldSvrID();
sITEM_NEW.lnGenNum = GLITEMLMT::GetInstance().RegItemGen ( sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );
// ¾ÆÀÌÅÛ ¿¡µðÆ®¿¡¼ ÀÔ·ÂÇÑ °³Á¶ µî±Þ Àû¿ë ( ÁØÇõ )
sITEM_NEW.cDAMAGE = (BYTE)pITEM_DATA->sBasicOp.wGradeAttack;
sITEM_NEW.cDEFENSE = (BYTE)pITEM_DATA->sBasicOp.wGradeDefense;
// ·£´ý ¿É¼Ç »ý¼º.
if( sITEM_NEW.GENERATE_RANDOM_OPT() )
{
GLITEMLMT::GetInstance().ReqRandomItem( sITEM_NEW );
}
// »ý¼ºÇÑ ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
m_cInventory.InsertItem ( sITEM_NEW, wINSERTX, wINSERTY );
SINVENITEM *pInsertItem = m_cInventory.GetItem ( wINSERTX, wINSERTY );
if (!pInsertItem) return E_FAIL;
// [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.Data = *pInsertItem;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
// »óÀÚ ¾ÆÀÌÅÛ »èÁ¦ ·Î±× ³²±è.
GLITEMLMT::GetInstance().ReqItemRoute ( pInvenItem->sItemCustom, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_DELETE, pInvenItem->sItemCustom.wTurnNum );
// ·£´ý ¾ÆÀÌÅÛ »ý¼º ·Î±× ³²±è.
GLITEMLMT::GetInstance().ReqItemRoute ( pInsertItem->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pInvenItem->sItemCustom.wTurnNum );
// Note : »óÀÚ ¾ÆÀÌÅÛ »èÁ¦.
//
m_cInventory.DeleteItem ( wPosX, wPosY );
// [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
NetMsg_Inven_Delete.wPosX = wPosX;
NetMsg_Inven_Delete.wPosY = wPosY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Delete);
// Note : »óÀÚ¸¦ ¼º°øÀûÀ¸·Î ¿¾úÀ½.
//
NetMsgFB.emFB = EMINVEN_RANDOMBOXOPEN_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_OK;
}
HRESULT GLChar::MsgReqInvenDisJunction ( NET_MSG_GENERIC* nmg )
{
if ( !IsValidBody() ) return E_FAIL;
GLMSG::SNET_INVEN_DISJUNCTION *pNetMsg = (GLMSG::SNET_INVEN_DISJUNCTION *) nmg;
GLMSG::SNET_INVEN_DISJUNCTION_FB NetMsgFB;
WORD wPosX = pNetMsg->wPosX;
WORD wPosY = pNetMsg->wPosY;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
{
NetMsgFB.emFB = EMINVEN_DISJUNCTION_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pHold )
{
NetMsgFB.emFB = EMINVEN_DISJUNCTION_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
if ( CheckCoolTime( pHold->sBasicOp.sNativeID ) ) return E_FAIL;
if ( pHold->sBasicOp.emItemType!=ITEM_DISJUNCTION )
{
NetMsgFB.emFB = EMINVEN_DISJUNCTION_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
if ( pInvenItem->sItemCustom.nidDISGUISE==SNATIVEID(false) )
{
NetMsgFB.emFB = EMINVEN_DISJUNCTION_FB_NONEED;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = pInvenItem->sItemCustom.nidDISGUISE;
if ( sITEM_NEW.sNativeID==SNATIVEID(false) )
{
NetMsgFB.emFB = EMINVEN_DISJUNCTION_FB_BADITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
SITEM *pONE = GLItemMan::GetInstance().GetItem ( sITEM_NEW.sNativeID );
if ( !pONE )
{
NetMsgFB.emFB = EMINVEN_DISJUNCTION_FB_BADITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
CTime cTIME = CTime::GetCurrentTime();
if ( pInvenItem->sItemCustom.tDISGUISE!=0 && pONE->sDrugOp.tTIME_LMT!= 0 )
{
cTIME = CTime(pInvenItem->sItemCustom.tDISGUISE);
CTimeSpan tLMT(pONE->sDrugOp.tTIME_LMT);
cTIME -= tLMT;
}
// Note : ¾ÆÀÌÅÛ »ý¼º.
//
sITEM_NEW.tBORNTIME = cTIME.GetTime();
sITEM_NEW.wTurnNum = 1;
sITEM_NEW.cGenType = EMGEN_BILLING;
sITEM_NEW.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
sITEM_NEW.cFieldID = (BYTE)GLGaeaServer::GetInstance().GetFieldSvrID();
sITEM_NEW.lnGenNum = GLITEMLMT::GetInstance().RegItemGen ( sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );
// Note : hold ¾ÆÀÌÅÛ Àκ¥¿¡ µÇµ¹¸².
WORD wInsertPosX, wInsertPosY;
BOOL bOk = m_cInventory.FindInsrtable ( pONE->sBasicOp.wInvenSizeX, pONE->sBasicOp.wInvenSizeY, wInsertPosX, wInsertPosY );
if ( !bOk )
{
NetMsgFB.emFB = EMINVEN_DISJUNCTION_FB_NOINVEN;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL; // Àκ¥ °ø°£ ºÎÁ·À¸·Î µÇµ¹¸² ½ÇÆÐ.
}
// µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
m_cInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
SINVENITEM *pINSERT_ITEM = m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
// [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.Data = *pINSERT_ITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
// Note : ¸Á°¢ÀÇ ¼¼Å¹À» ÇÔ.
//
pInvenItem->sItemCustom.tDISGUISE = 0;
pInvenItem->sItemCustom.nidDISGUISE = SNATIVEID(false);
GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
NetItemUpdate.wPosX = pNetMsg->wPosX;
NetItemUpdate.wPosY = pNetMsg->wPosY;
NetItemUpdate.sItemCustom = pInvenItem->sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);
// Note : ºÐ¸®µÈ ÄÚ½ºÅù ·Î±×.
GLITEMLMT::GetInstance().ReqItemRoute ( pINSERT_ITEM->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pINSERT_ITEM->sItemCustom.wTurnNum );
// Note : ÀÏ¹Ý º¹Àå ¾ÆÀÌÅÛÀÌ ¼¼Å¹ÇÏ´Â °ÍÀ» ·Î±× ³²±è.
//
GLITEMLMT::GetInstance().ReqItemConversion ( pInvenItem->sItemCustom, ID_CHAR, m_dwCharID );
// Note : ¾ÆÀÌÅÛ ¼Ò¸ð.
//
DoDrugSlotItem ( SLOT_HOLD );
NetMsgFB.emFB = EMINVEN_DISJUNCTION_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_OK;
}
// *****************************************************
// Desc: ÄÚ½ºÆ¬ ÀÔÈû
// *****************************************************
HRESULT GLChar::MsgReqInvenDisguise ( NET_MSG_GENERIC* nmg )
{
if ( !IsValidBody() ) return E_FAIL;
GLMSG::SNET_INVEN_DISGUISE *pNetMsg = (GLMSG::SNET_INVEN_DISGUISE *) nmg;
GLMSG::SNET_INVEN_DISGUISE_FB NetMsgFB;
WORD wPosX = pNetMsg->wPosX;
WORD wPosY = pNetMsg->wPosY;
// À¯È¿ÇÑ Àκ¥Å丮 ÀÎÁö °Ë»ç
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
{
NetMsgFB.emFB = EMREQ_DISGUISE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
// À¯È¿ÇÑ ¾ÆÀÌÅÛÀÎÁö °Ë»ç
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
NetMsgFB.emFB = EMREQ_DISGUISE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
// ¼Õ¿¡ µé°í ÀÖ´Â ¾ÆÀÌÅÛÀÌ À¯È¿ÇÑÁö °Ë»ç
const SITEMCUSTOM& sITEM_HOLD = GET_SLOT_ITEM(SLOT_HOLD);
if ( sITEM_HOLD.sNativeID==SNATIVEID(false) )
{
NetMsgFB.emFB = EMREQ_DISGUISE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
// ¼Õ¿¡µç ¾ÆÀÌÅÛÀÇ Á¤º¸ °®°í ¿À±â
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pHold )
{
NetMsgFB.emFB = EMREQ_DISGUISE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
// ¼Õ¿¡µç ¾ÆÀÌÅÛÀÌ ÄÚ½ºÆ¬ÀÎÁö °Ë»ç
if ( !pHold->sBasicOp.IsDISGUISE() )
{
NetMsgFB.emFB = EMREQ_DISGUISE_FB_NODISGUISE;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
// Àκ¥Å丮 ¾ÆÀÌÅÛÀÌ ¿¬¸¶°¡´ÉÇÑÁö °Ë»ç
if ( pItem->sBasicOp.IsDISGUISE() )
{
NetMsgFB.emFB = EMREQ_DISGUISE_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
// °°Àº Ŭ·¡½º ÀÎÁö °Ë»ç
if ( ( pHold->sBasicOp.dwReqCharClass & pItem->sBasicOp.dwReqCharClass ) == NULL )
{
NetMsgFB.emFB = EMREQ_DISGUISE_FB_DEFSUIT;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
// º¹Àå·ùÀÎÁö °Ë»ç
if ( pHold->sBasicOp.emItemType != ITEM_SUIT )
{
NetMsgFB.emFB = EMREQ_DISGUISE_FB_NOTSUIT;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
if ( pItem->sBasicOp.emItemType != ITEM_SUIT )
{
NetMsgFB.emFB = EMREQ_DISGUISE_FB_NOTSUIT;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
// °°Àº Á¾·ùÀÇ º¹ÀåÀÎÁö °Ë»ç
if ( pHold->sSuitOp.emSuit != pItem->sSuitOp.emSuit )
{
NetMsgFB.emFB = EMREQ_DISGUISE_FB_DEFSUIT;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
// Àκ¥Å丮ÀÇ º¹ÀåÀÌ ÄÚ½ºÆ¬ÀÌ ÀÔÇôÁ® ÀÖ´ÂÁö °Ë»ç
if ( pInvenItem->sItemCustom.nidDISGUISE!=SNATIVEID(false) )
{
NetMsgFB.emFB = EMREQ_DISGUISE_FB_ALREADY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
// Note : ½ÃÇÑ ÄÚ½ºÅùÀÏ °æ¿ì.
//
if ( pHold->sDrugOp.tTIME_LMT != 0 )
{
__time64_t &tTIME = pInvenItem->sItemCustom.tDISGUISE;
CTime tCurTime = sITEM_HOLD.tBORNTIME;
CTime tSeedTime(tTIME);
CTimeSpan tLMT (pHold->sDrugOp.tTIME_LMT);
tLMT += CTimeSpan(0,0,05,0);
// Note : ½Ã°£ ÃæÀü.
tSeedTime = tCurTime + tLMT;
tTIME = tSeedTime.GetTime();
}
// Note : ÄÚ½ºÅù ½ºÅ² ÁöÁ¤.
//
pInvenItem->sItemCustom.nidDISGUISE = pHold->sBasicOp.sNativeID;
GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
NetItemUpdate.wPosX = pNetMsg->wPosX;
NetItemUpdate.wPosY = pNetMsg->wPosY;
NetItemUpdate.sItemCustom = pInvenItem->sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);
// Note : ÀÏ¹Ý º¹Àå ¾ÆÀÌÅÛÀÌ ÄÚ½ºÅù ½ºÅ²À¸·Î º¯È¯µÇ´Â °ª ·Î±× ³²±è.
//
GLITEMLMT::GetInstance().ReqItemConversion ( pInvenItem->sItemCustom, ID_CHAR, m_dwCharID );
// Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
//
GLITEMLMT::GetInstance().ReqItemRoute ( GET_HOLD_ITEM(), ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_DELETE, GET_HOLD_ITEM().wTurnNum );
// Note : ¼Õ¿¡µç ¾ÆÀÌÅÛ »èÁ¦.
//
RELEASE_SLOT_ITEM ( SLOT_HOLD );
// [Àڽſ¡°Ô] SLOT¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_PUTON_RELEASE NetMsg_PutOn_Release(SLOT_HOLD);
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn_Release);
// Note : ÄÚ½ºÅù ½ºÅ²À¸·Î º¯È¯ ¼º°ø ¾Ë¸².
//
NetMsgFB.emFB = EMREQ_DISGUISE_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_OK;
}
HRESULT GLChar::MsgReqInvenCleanser ( NET_MSG_GENERIC* nmg )
{
if ( !IsValidBody() ) return E_FAIL;
GLMSG::SNET_INVEN_CLEANSER *pNetMsg = (GLMSG::SNET_INVEN_CLEANSER *) nmg;
GLMSG::SNET_INVEN_CLEANSER_FB NetMsgFB;
WORD wPosX = pNetMsg->wPosX;
WORD wPosY = pNetMsg->wPosY;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
{
NetMsgFB.emFB = EMREQ_CLEANSER_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
NetMsgFB.emFB = EMREQ_CLEANSER_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pHold )
{
NetMsgFB.emFB = EMREQ_CLEANSER_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
if ( CheckCoolTime( pHold->sBasicOp.sNativeID ) ) return E_FAIL;
if ( pInvenItem->sItemCustom.nidDISGUISE==SNATIVEID(false) )
{
NetMsgFB.emFB = EMREQ_CLEANSER_FB_NONEED;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
if ( pHold->sBasicOp.emItemType!=ITEM_CLEANSER )
{
NetMsgFB.emFB = EMREQ_CLEANSER_FB_NONEED;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_FALSE;
}
// Note : ¸Á°¢ÀÇ ¼¼Å¹À» ÇÔ.
//
pInvenItem->sItemCustom.tDISGUISE = 0;
pInvenItem->sItemCustom.nidDISGUISE = SNATIVEID(false);
GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
NetItemUpdate.wPosX = pNetMsg->wPosX;
NetItemUpdate.wPosY = pNetMsg->wPosY;
NetItemUpdate.sItemCustom = pInvenItem->sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);
// Note : ÀÏ¹Ý º¹Àå ¾ÆÀÌÅÛÀÌ ¼¼Å¹ÇÏ´Â °ÍÀ» ·Î±× ³²±è.
//
GLITEMLMT::GetInstance().ReqItemConversion ( pInvenItem->sItemCustom, ID_CHAR, m_dwCharID );
// Note : ¾ÆÀÌÅÛ ¼Ò¸ð.
//
DoDrugSlotItem ( SLOT_HOLD );
// Note : ÄÚ½ºÅù ½ºÅ² ¸®¼Â º¯È¯ ¼º°ø ¾Ë¸².
//
NetMsgFB.emFB = EMREQ_CLEANSER_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_OK;
}
HRESULT GLChar::MsgReqMoneyToField ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_REQ_MONEY_TO_FIELD *pNetMsg = (GLMSG::SNETPC_REQ_MONEY_TO_FIELD *)nmg;
if ( !GLCONST_CHAR::bMONEY_DROP2FIELD ) return S_FALSE;
if ( pNetMsg->lnMoney < 0 ) return S_FALSE;
if ( m_lnMoney < pNetMsg->lnMoney ) return S_FALSE;
D3DXVECTOR3 vCollisionPos;
BOOL bCollision = m_pLandMan->IsCollisionNavi
(
pNetMsg->vPos + D3DXVECTOR3(0,+5,0),
pNetMsg->vPos + D3DXVECTOR3(0,-5,0),
vCollisionPos
);
if ( !bCollision ) return S_FALSE;
// Note : °¡Áö°í ÀÖ´Â µ·ÀÇ ¾×¼ö¸¦ Á¶Àý.
CheckMoneyUpdate( m_lnMoney, pNetMsg->lnMoney, FALSE, "Drop Money." );
m_bMoneyUpdate = TRUE;
m_lnMoney -= pNetMsg->lnMoney;
// Note : ±Ý¾× ·Î±×.
//
if ( pNetMsg->lnMoney > EMMONEY_LOG )
{
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, pNetMsg->lnMoney, EMITEM_ROUTE_GROUND );
GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnMoney, EMITEM_ROUTE_CHAR );
}
#if defined(_RELEASED) || defined(TW_PARAM) || defined(TH_PARAM) || defined(HK_PARAM) // ***Tracing Log print
if ( m_bTracingUser )
{
NET_LOG_UPDATE_TRACINGCHAR TracingMsg;
TracingMsg.nUserNum = GetUserID();
StringCchCopy( TracingMsg.szAccount, USR_ID_LENGTH+1, m_szUID );
CString strTemp;
strTemp.Format( "DropMoney!!, [%s][%s], Drop Amount:[%I64d], Have Money:[%I64d]",
m_szUID, m_szName, pNetMsg->lnMoney, m_lnMoney );
StringCchCopy( TracingMsg.szLogMsg, TRACING_LOG_SIZE, strTemp.GetString() );
m_pGLGaeaServer->SENDTOAGENT( m_dwClientID, &TracingMsg );
}
#endif
// Note : ¹Ù´Ú¿¡ ¶³¾îÆ®¸°´Ù.
m_pLandMan->DropMoney ( vCollisionPos, pNetMsg->lnMoney, FALSE );
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ µ· ¾×¼ö º¯È¸¦ ¾Ë·ÁÁÜ.
GLMSG::SNETPC_UPDATE_MONEY NetMsg;
NetMsg.lnMoney = m_lnMoney;
//add money 2
NetMsg.lnVoteP = m_lnVoteP;
//add money 3
NetMsg.lnPremP = m_lnPremP;
//add contributionpoints by CNDev
NetMsg.lnContribP = m_lnContribP;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
return S_OK;
}
// *****************************************************
// Desc: ¾ÆÀÌÅÛ ÀÎþƮ ¿äû ó¸®
// *****************************************************
HRESULT GLChar::MsgReqInvenGrinding ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_INVEN_GRINDING *pNetMsg = (GLMSG::SNET_INVEN_GRINDING *)nmg;
if ( !VALID_HOLD_ITEM() ) return S_FALSE;
SITEMCUSTOM& sHOLDITEM = m_PutOnItems[SLOT_HOLD];
SITEM* pHold = GLItemMan::GetInstance().GetItem ( sHOLDITEM.sNativeID );
if ( !pHold ) return E_FAIL;
if ( pHold->sBasicOp.emItemType != ITEM_GRINDING ) return S_FALSE;
if ( CheckCoolTime( pHold->sBasicOp.sNativeID ) ) return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pInvenItem ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem ) return S_FALSE;
if ( pItem->sSuitOp.gdDamage == GLPADATA(0,0) )
{
if ( pHold->sGrindingOp.emCLASS != EMGRINDING_CLASS_CLOTH ) return S_FALSE;
}
else
{
if ( pHold->sGrindingOp.emCLASS != EMGRINDING_CLASS_ARM ) return S_FALSE;
}
BOOL bGrinding = pItem->sBasicOp.emItemType==ITEM_SUIT && pItem->sSuitOp.wReModelNum>0;
if ( !bGrinding ) return E_FAIL;
if ( pHold->sGrindingOp.emTYPE == EMGRINDING_DAMAGE || pHold->sGrindingOp.emTYPE == EMGRINDING_DEFENSE )
{
if ( pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE)>=GLCONST_CHAR::wGRADE_MAX )
{
return S_FALSE;
}
}
else
{
if ( pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE)>=GLCONST_CHAR::wGRADE_MAX_REGI )
{
return S_FALSE;
}
}
// Note : ¿¬¸¶Á¦ µî±Þ, ³·Àº ¿¬¸¶Á¦·Î ³ôÀº ¿¬¸¶ ºÒ°¡´É
//
BYTE cGrade = 0;
cGrade = pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE);
if ( cGrade >= GRADE_HIGH && pHold->sGrindingOp.emGRINDER_TYPE != EMGRINDER_TOP )
{
return E_FAIL;
}
else if ( cGrade >=GRADE_NORMAL && pHold->sGrindingOp.emGRINDER_TYPE < EMGRINDER_HIGH )
{
return E_FAIL;
}
// ÃÖ»óÀ§ µî±Þ±îÁö ÀÎæƮ ÇÒ¼ö ÀÖ´Â ¾ÆÀÌÅÛÀÎÁö Á¡°Ë
if ( cGrade >= GRADE_HIGH && pItem->sGrindingOp.emGRINDER_TYPE != EMGRINDER_TOP )
{
return S_FALSE;
}
// Note : ¿¬¸¶Á¦ ¼ö·® È®ÀÎ
WORD wGradeNum = 1;
if ( cGrade >= GRADE_HIGH )
{
wGradeNum = GLCONST_CHAR::wUSE_GRADE_NUM[cGrade-GRADE_HIGH];
if ( wGradeNum > sHOLDITEM.wTurnNum )
{
return E_FAIL;
}
}
// Note : °í±Þ ¿¬¸¶Á¦ÀÏ °æ¿ì GRADE_NORMAL µî±Þ ¹Ì¸¸ ¿¬¸¶ ºÒ°¡´É.
//
//if ( pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE)<GRADE_NORMAL && pHold->sGrindingOp.bHIGH )
//{
// return E_FAIL;
//}
// Note : ¿¬¸¶ ¼öÇà.
//
bool bRESET(false), bTERMINATE(false);
EMANTIDISAPPEAR emANTIDISAPPEAR(EMANTIDISAPPEAR_OFF);
// ¼Ò¹æÁÖ°¡ ÀÖ´Ù¸é bANTIDISAPPEAR¸¦ 1·Î ¼ÂÆÃÇØ¼ ¾ÆÀÌÅÛÀÌ ¼Ò¸êµÇ´Â°ÍÀ» ¹æÁöÇÑ´Ù.
SITEM* pITEM = GET_SLOT_ITEMDATA(SLOT_NECK);
if ( pITEM && pITEM->sBasicOp.emItemType == ITEM_ANTI_DISAPPEAR )
{
if ( !IsCoolTime( pITEM->sBasicOp.sNativeID ) ) emANTIDISAPPEAR = EMANTIDISAPPEAR_ON;
}
bool bNoFail = pHold->sBasicOp.IsNoFail();//add nofailups
BOOL bSucceeded = DOGRINDING ( pInvenItem->sItemCustom, pHold, bRESET, bTERMINATE, bNoFail, emANTIDISAPPEAR ); //add nofailups
// Note : ¼Ò¸ðµÈ ¿¬¸¶Á¦ ó¸®.
//
DoDrugSlotItem(SLOT_HOLD, wGradeNum);
// Note : ¼Ò¸ðµÈ ¼Ò¹æÁÖ Ã³¸®.
// bANTIDISAPPEAR°¡ false¸é ¼Ò¹æÁÖ°¡ »ç¿ëµÇ¾ú´Ù.
if( emANTIDISAPPEAR == EMANTIDISAPPEAR_USE )
{
DoDrugSlotItem(SLOT_NECK);
}
// Note : ·Î±× ±â·Ï.
//
GLITEMLMT::GetInstance().ReqItemConversion ( pInvenItem->sItemCustom, ID_CHAR, m_dwCharID );
// Note : ¿¬¸¶ ¼º°ø ¿©ºÎ ¹Ýȯ.
//
GLMSG::SNET_INVEN_GRINDING_FB NetMsgFB;
NetMsgFB.bRESET = bRESET;
NetMsgFB.bTERMINATE = bTERMINATE;
NetMsgFB.emANTIDISAPPEAR = emANTIDISAPPEAR;
NetMsgFB.emGrindFB = bSucceeded ? EMGRINDING_SUCCEED : EMGRINDING_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
// Note : ¾ÆÀÌÅÛÀÇ ¼Ó¼º°ª Ŭ¶óÀÌ¾ðÆ®¿¡ ¾Ë¸².
//
if ( !bTERMINATE )
{
GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
NetItemUpdate.wPosX = pNetMsg->wPosX;
NetItemUpdate.wPosY = pNetMsg->wPosY;
NetItemUpdate.sItemCustom = pInvenItem->sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);
//dmk14 | 9-22-16 | upgrade announce
BYTE cUpgrade = 0;
const EMGRINDING_TYPE emGRINDING = pHold->sGrindingOp.emTYPE;
switch( emGRINDING )
{
case EMGRINDING_DAMAGE: cUpgrade = pInvenItem->sItemCustom.cDAMAGE; break;
case EMGRINDING_DEFENSE: cUpgrade = pInvenItem->sItemCustom.cDEFENSE; break;
}
if( bSucceeded && cUpgrade >= 8 )
{
//CInnerInterface::GetInstance().PrintConsoleText ( "%s '%s' successfully upgraded into (+%d) %s.", m_szName, pItem->GetName(), cUpgrade, COMMENT::GRINDING_TYPE[ emGRINDING ].c_str());
CString strTEXT;
strTEXT.Format ( "%s '%s' successfully upgraded into (+%d) %s.", m_szName, pItem->GetName(), cUpgrade, COMMENT::GRINDING_TYPE[ emGRINDING ].c_str() );
GLMSG::SNET_SERVER_GENERALCHAT NetMsgUps;
NetMsgUps.SETTEXT ( strTEXT.GetString() );
//NetMsgUpsbAnnounce = true;
GLGaeaServer::GetInstance().SENDTOALLCLIENT(&NetMsgUps);
}
}
else
{
// ¸¸¾à ÄÚ½ºÆ¬ÀÌ ¹ß¶óÁ® ÀÖÀ¸¸é ÄÚ½ºÆ¬À» ºÐ¸®ÇÏ°í »èÁ¦ÇÑ´Ù.
if ( pInvenItem->sItemCustom.nidDISGUISE!=SNATIVEID(false) )
{
GLITEMLMT & glItemmt = GLITEMLMT::GetInstance();
GLItemMan & glItemMan = GLItemMan::GetInstance();
SITEM *pONE = glItemMan.GetItem ( pInvenItem->sItemCustom.nidDISGUISE );
if ( !pONE ) return E_FAIL;
SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = pInvenItem->sItemCustom.nidDISGUISE;
CTime cTIME = CTime::GetCurrentTime();
if ( pInvenItem->sItemCustom.tDISGUISE!=0 && pONE->sDrugOp.tTIME_LMT!= 0 )
{
cTIME = CTime(pInvenItem->sItemCustom.tDISGUISE);
CTimeSpan tLMT(pONE->sDrugOp.tTIME_LMT);
cTIME -= tLMT;
}
// Note : ¾ÆÀÌÅÛ »ý¼º.
//
sITEM_NEW.tBORNTIME = cTIME.GetTime();
sITEM_NEW.wTurnNum = 1;
sITEM_NEW.cGenType = EMGEN_BILLING;
sITEM_NEW.cChnID = (BYTE)m_pGLGaeaServer->GetServerChannel();
sITEM_NEW.cFieldID = (BYTE)m_pGLGaeaServer->GetFieldSvrID();
sITEM_NEW.lnGenNum = glItemmt.RegItemGen ( sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );
// Note : hold ¾ÆÀÌÅÛ Àκ¥¿¡ µÇµ¹¸².
WORD wInsertPosX, wInsertPosY;
BOOL bOk = m_cInventory.FindInsrtable ( pONE->sBasicOp.wInvenSizeX, pONE->sBasicOp.wInvenSizeY, wInsertPosX, wInsertPosY );
if ( !bOk )
{
// »ý¼ºµÈ ÄÚ½ºÅùÀº ¹Ù´Ú¿¡¼ ´Ù½Ã ¶³±º´Ù.
CItemDrop cDropItem;
cDropItem.sItemCustom = sITEM_NEW;
m_pLandMan->DropItem ( m_vPos, &(cDropItem.sItemCustom), EMGROUP_ONE, m_dwGaeaID );
// Note : ºÐ¸®µÈ ÄÚ½ºÅù ·Î±×.
glItemmt.ReqItemRoute ( sITEM_NEW, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_GROUND, sITEM_NEW.wTurnNum );
}else{
// µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
m_cInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
SINVENITEM *pINSERT_ITEM = m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
// [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.Data = *pINSERT_ITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
}
}
// Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
//
GLITEMLMT::GetInstance().ReqItemRoute ( pInvenItem->sItemCustom, ID_CHAR, m_dwCharID, ID_CHAR, 0, EMITEM_ROUTE_DELETE, pInvenItem->sItemCustom.wTurnNum );
// [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ Á¦°Å.
GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
NetMsg_Inven_Delete.wPosX = pNetMsg->wPosX;
NetMsg_Inven_Delete.wPosY = pNetMsg->wPosY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Delete);
// ¾ÆÀÌÅÆ Á¦°Å.
m_cInventory.DeleteItem ( pNetMsg->wPosX, pNetMsg->wPosY );
}
return S_OK;
}
HRESULT GLChar::MsgReqInvenResetSkSt ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_INVEN_RESET_SKST *pNetMsg = (GLMSG::SNET_INVEN_RESET_SKST *)nmg;
GLMSG::SNET_INVEN_RESET_SKST_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMREQ_RESET_SKST_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) ) return E_FAIL;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_SKP_STAT_RESET )
{
MsgFB.emFB = EMREQ_RESET_SKST_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
// ·¹º§ Á¶°Ç È®ÀÎ
if ( !SIMPLE_CHECK_ITEM( pITEM->sBasicOp.sNativeID ) )
{
MsgFB.emFB = EMREQ_RESET_SKST_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
enum
{
EMGRADE = 31,
EMMARBLE_MID = 104,
EMGRADE_MIN = 4,
};
WORD wNUM(0);
WORD wGRADE[EMGRADE];
memset(wGRADE,0,sizeof(WORD)*EMGRADE);
SKILL_MAP_ITER pos = m_ExpSkills.begin();
SKILL_MAP_ITER end = m_ExpSkills.end();
for ( ; pos!=end; ++pos )
{
SNATIVEID sNID ( (*pos).first );
PGLSKILL pSKILL = GLSkillMan::GetInstance().GetData ( sNID );
if ( !pSKILL ) continue;
if ( EMGRADE_MIN > pSKILL->m_sBASIC.dwGRADE ) continue;
wGRADE[pSKILL->m_sBASIC.dwGRADE] += 1;
++wNUM;
}
BOOL bINSERT(TRUE);
GLInventory cInven;
cInven.Assign ( m_cInventory );
for ( int i=EMGRADE_MIN; i<EMGRADE; ++i )
for ( int j=0; j<wGRADE[i]; ++j )
{
SITEM *pITEM_SKILL = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( !pITEM_SKILL ) continue;
SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = SNATIVEID(EMMARBLE_MID,i);
// ¾ÆÀÌÅÛÀÇ »ç¿ë Ƚ¼ö Ç¥½Ã. ( ¼Ò¸ðǰÀÏ °æ¿ì x °ª, ÀÏ¹Ý ¹°Ç° 1 )
sITEM_NEW.wTurnNum = pITEM_SKILL->GETAPPLYNUM();
BOOL bOK = cInven.InsertItem ( sITEM_NEW );
if ( !bOK )
{
bINSERT = FALSE;
break;
}
}
if ( !bINSERT )
{
MsgFB.wITEM_NUM = wNUM;
MsgFB.emFB = EMREQ_RESET_SKST_FB_NOINVEN;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
for ( i=EMGRADE_MIN; i<EMGRADE; ++i )
for ( int j=0; j<wGRADE[i]; ++j )
{
SITEM *pITEM_SKILL = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( !pITEM_SKILL ) continue;
SITEMCUSTOM sITEM_NEW;
CTime cTIME = CTime::GetCurrentTime();
// ¾ÆÀÌÅÛ ¹ß»ý.
sITEM_NEW.sNativeID = SNATIVEID(EMMARBLE_MID,i);
sITEM_NEW.tBORNTIME = cTIME.GetTime();
// ¾ÆÀÌÅÛÀÇ »ç¿ë Ƚ¼ö Ç¥½Ã. ( ¼Ò¸ðǰÀÏ °æ¿ì x °ª, ÀÏ¹Ý ¹°Ç° 1 )
sITEM_NEW.wTurnNum = pITEM_SKILL->GETAPPLYNUM();
// ¹ß»ýµÈ Á¤º¸ µî·Ï.
sITEM_NEW.cGenType = EMGEN_INIT;
sITEM_NEW.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
sITEM_NEW.cFieldID = (BYTE)GLGaeaServer::GetInstance().GetFieldSvrID();
sITEM_NEW.lnGenNum = GLITEMLMT::GetInstance().RegItemGen ( sITEM_NEW.sNativeID, EMGEN_INIT );
BOOL bOK;
WORD wPosX(0), wPosY(0);
bOK = m_cInventory.FindInsrtable ( pITEM_SKILL->sBasicOp.wInvenSizeX, pITEM_SKILL->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOK ) continue;
bOK = m_cInventory.InsertItem ( sITEM_NEW, wPosX, wPosY );
if ( !bOK ) continue;
SINVENITEM *pInvenItem = m_cInventory.GetItem ( wPosX, wPosY );
if (!pInvenItem) continue;
// ¾ÆÀÌÅÛ È¹µæ ·Î±× ³²±è.
GLITEMLMT::GetInstance().ReqItemRoute ( sITEM_NEW, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, sITEM_NEW.wTurnNum );
// [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.Data = *pInvenItem;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
}
// Note : ½ºÅ³, ½ºÅÝ ¸®¼Â.
//
RESET_STATS_SKILL ( pITEM->sDrugOp.wCureVolume );
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
// Note : ¸®¼Â ¸Þ½ÃÁö º¸³¿.
//
MsgFB.emFB = EMREQ_RESET_SKST_FB_OK;
MsgFB.wITEM_NUM = wNUM;
MsgFB.wSTATS_POINT = pITEM->sDrugOp.wCureVolume;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return S_OK;
}
HRESULT GLChar::MsgReqCharCard ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_INVEN_CHARCARD *pNetMsg = (GLMSG::SNET_INVEN_CHARCARD *)nmg;
GLMSG::SNET_INVEN_CHARCARD_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMREQ_CHARCARD_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) ) return E_FAIL;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_CHARACTER_CARD )
{
MsgFB.emFB = EMREQ_CHARCARD_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
// Note : Äɸ¯ÅÍ »ý¼º ½½·Ô Áõ°¡.
//
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
CItemChaCreateNumIncrease *pDbAction = new CItemChaCreateNumIncrease ( m_dwUserID );
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDbAction );
}
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
// Note : ó¸® ¼º°ø ¾Ë¸².
MsgFB.emFB = EMREQ_CHARCARD_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return S_OK;
}
HRESULT GLChar::MsgReqStorageCard ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_INVEN_STORAGECARD *pNetMsg = (GLMSG::SNET_INVEN_STORAGECARD *)nmg;
GLMSG::SNET_INVEN_STORAGECARD_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMREQ_STORAGECARD_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) ) return E_FAIL;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_STORAGE_CARD )
{
MsgFB.emFB = EMREQ_STORAGECARD_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( pNetMsg->wSTORAGE < EMSTORAGE_CHANNEL_SPAN || pNetMsg->wSTORAGE>=(EMSTORAGE_CHANNEL_SPAN+EMSTORAGE_CHANNEL_SPAN_SIZE) )
{
MsgFB.emFB = EMREQ_STORAGECARD_FB_INVNUM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
// Note : â°í Á¦ÇÑ ½Ã°£ º¯°æ.
//
int nINDEX = pNetMsg->wSTORAGE-EMSTORAGE_CHANNEL_SPAN;
__time64_t &tTIME = m_tSTORAGE[nINDEX];
CTime tCurTime = CTime::GetCurrentTime();
CTime tSeedTime(tTIME);
CTimeSpan tLMT (pITEM->sDrugOp.tTIME_LMT);
CTimeSpan tADD(0,1,30,0);
// Note : ¾ÆÁ÷ ÃʱâÈ µÇÁö ¾Ê¾Ò°Å³ª, ÃæÀü½Ã°£ ÃʰúµÇ¾úÀ» °æ¿ì.
if ( tTIME == 0 || tSeedTime < tCurTime )
{
tSeedTime = tCurTime + tLMT + tADD;
}
// Note : ÃæÀü½Ã°£¿¡ ¾ÆÁ÷ ¿©À¯°¡ ÀÖÀ»¶§.
else
{
tSeedTime = tSeedTime + tLMT + tADD;
}
// Note : »ç¿ë½Ã°£ ÃæÀüµÊ, »ç¿ë °¡´ÉÀ¸·Î º¯°æ.
tTIME = tSeedTime.GetTime(); // m_tSTORAGE[nINDEX] = time;
m_bSTORAGE[nINDEX] = true;
// Note : DB¿¡ ½ºÅ丮Áö ÃæÀü½Ã°£ ÀúÀå.
//
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
CSetChaStorageDate *pDbAction = new CSetChaStorageDate ( m_dwUserID, nINDEX+EMSTORAGE_CHANNEL_SPAN, tTIME );
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDbAction );
}
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
// Note : ó¸® °á°ú ¾Ë¸².
CTimeSpan tDX = tSeedTime - tCurTime;
MsgFB.emFB = EMREQ_STORAGECARD_FB_OK;
MsgFB.tSTORAGE_LIMIT = tSeedTime.GetTime();
MsgFB.tSPAN = tDX.GetTimeSpan();
MsgFB.wSTORAGE = pNetMsg->wSTORAGE;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return S_OK;
}
HRESULT GLChar::MsgReqInvenLine ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_INVEN_INVENLINE *pNetMsg = (GLMSG::SNET_INVEN_INVENLINE *)nmg;
GLMSG::SNET_INVEN_INVENLINE_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMREQ_INVENLINE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) ) return E_FAIL;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_INVEN_CARD )
{
MsgFB.emFB = EMREQ_INVENLINE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( m_wINVENLINE >= (EM_INVENSIZE_Y - EM_INVEN_DEF_SIZE_Y - EM_INVEN_PREMIUM_SIZE) )
{
MsgFB.emFB = EMREQ_INVENLINE_FB_MAXLINE;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
// Note : Àκ¥ ¶óÀÎ Áõ°¡.
//
m_wINVENLINE += 1;
// Note : ÇöÁ¦ Ȱ¼ºÈµÈ Àκ¥ ¶óÀÎ ¼³Á¤.
//
m_cInventory.SetAddLine ( GetOnINVENLINE(), true );
// Note : DB¿¡ ÀúÀå.
//
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
CSetChaInvenNum *pDbAction = new CSetChaInvenNum ( m_dwCharID, m_wINVENLINE );
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDbAction );
}
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÛ ¼Ò¸ð½ÃÅ´.
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
// Note : ó¸® °á°ú ¾Ë¸².
MsgFB.emFB = EMREQ_INVENLINE_FB_OK;
MsgFB.wINVENLINE = m_wINVENLINE;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return S_OK;
}
// *****************************************************
// Desc: °³Á¶ ±â´É ÀÌ¿ëÄ«µå ¿äû ( Ä«µå¸¸ ¼Ò¸ð½ÃÅ´ )
// *****************************************************
HRESULT GLChar::MsgReqInvenRemodelOpen ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_INVEN_REMODELOPEN *pNetMsg = (GLMSG::SNET_INVEN_REMODELOPEN *)nmg;
GLMSG::SNET_INVEN_REMODELOPEN_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMREQ_REMODELOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_REMODEL )
{
MsgFB.emFB = EMREQ_REMODELOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
m_ItemRemodelPosX = pNetMsg->wPosX;
m_ItemRemodelPosY = pNetMsg->wPosY;
MsgFB.emFB = EMREQ_REMODELOPEN_FB_OK;
//dmk14 | 12-18-16 | rebuild test fix
m_bUseRebuildCard = true;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return S_OK;
}
HRESULT GLChar::MsgReqInvenGarbageOpen ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_INVEN_GARBAGEOPEN *pNetMsg = (GLMSG::SNET_INVEN_GARBAGEOPEN *)nmg;
GLMSG::SNET_INVEN_GARBAGEOPEN_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMREQ_GARBAGEOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_GARBAGE_CARD )
{
MsgFB.emFB = EMREQ_GARBAGEOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
m_ItemGarbagePosX = pNetMsg->wPosX;
m_ItemGarbagePosY = pNetMsg->wPosY;
MsgFB.emFB = EMREQ_GARBAGEOPEN_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return S_OK;
}
// *****************************************************
// Desc: ±ä±Þ â°í ÀÌ¿ëÄ«µå ¿äû ( Ä«µå¸¸ ¼Ò¸ð½ÃÅ´ )
// *****************************************************
HRESULT GLChar::MsgReqInvenStorageOpen ( NET_MSG_GENERIC* nmg )
{
// â°í¿¬°áÄ«µå¸¦ »ç¿ëÁßÀ̸é
if ( m_bUsedStorageCard ) return E_FAIL;
GLMSG::SNET_INVEN_STORAGEOPEN *pNetMsg = (GLMSG::SNET_INVEN_STORAGEOPEN *)nmg;
GLMSG::SNET_INVEN_STORAGEOPEN_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMREQ_STORAGEOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) ) return E_FAIL;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_STORAGE_CONNECT )
{
MsgFB.emFB = EMREQ_STORAGEOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÛ ¼Ò¸ð½ÃÅ´.
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
MsgFB.emFB = EMREQ_STORAGEOPEN_FB_OK;
MsgFB.wPosX = pNetMsg->wPosX;
MsgFB.wPosY = pNetMsg->wPosY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
// â°í¿¬°áÄ«µå »ç¿ë¿©ºÎ
m_bUsedStorageCard = true;
return S_OK;
}
// *****************************************************
// Desc: ±ä±Þ â°í »ç¿ë ¿Ï·á
// *****************************************************
HRESULT GLChar::MsgReqInvenStorageClose ( NET_MSG_GENERIC* nmg )
{
// â°í¿¬°áÄ«µå »ç¿ë¿©ºÎ
m_bUsedStorageCard = false;
return S_OK;
}
HRESULT GLChar::MsgReqInvenPremiumSet ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_INVEN_PREMIUMSET *pNetMsg = (GLMSG::SNET_INVEN_PREMIUMSET *)nmg;
GLMSG::SNET_INVEN_PREMIUMSET_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMREQ_PREMIUMSET_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) ) return E_FAIL;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_PREMIUMSET )
{
MsgFB.emFB = EMREQ_PREMIUMSET_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
// Note : Àκ¥ÀÇ ¿©À¯ °ø°£ ÃøÁ¤.
//
GLInventory cInvenTemp;
cInvenTemp.SetAddLine ( m_cInventory.GETAddLine(), true );
cInvenTemp.Assign ( m_cInventory );
for ( int i=0; i<ITEM::SBOX::ITEM_SIZE; ++i )
{
SITEMCUSTOM sCUSTOM;
sCUSTOM.sNativeID = pITEM->sBox.sITEMS[i].nidITEM;
if ( sCUSTOM.sNativeID==SNATIVEID(false) ) continue;
SITEM *pONE = GLItemMan::GetInstance().GetItem ( sCUSTOM.sNativeID );
if ( !pONE )
{
MsgFB.emFB = EMREQ_PREMIUMSET_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
BOOL bOK = cInvenTemp.InsertItem ( sCUSTOM );
if ( !bOK )
{
// Note : Àκ¥¿¡ °ø°£ÀÌ ¾ø´Â °ÍÀ¸·Î ÆÇ´ÜµÊ.
//
MsgFB.emFB = EMREQ_PREMIUMSET_FB_NOTINVEN;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
}
// Note : »óÀھȿ¡ ÀÖ´Â ¾ÆÀÌÅÛÀ» ²¨³»¾î¼ ³Ö´Â´Ù.
//
for ( int i=0; i<ITEM::SBOX::ITEM_SIZE; ++i )
{
SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = pITEM->sBox.sITEMS[i].nidITEM;
DWORD dwAMOUNT = pITEM->sBox.sITEMS[i].dwAMOUNT;
if ( sITEM_NEW.sNativeID==SNATIVEID(false) ) continue;
SITEM *pONE = GLItemMan::GetInstance().GetItem ( sITEM_NEW.sNativeID );
if ( !pONE ) return E_FAIL;
// Note : ¾ÆÀÌÅÛ »ý¼º.
//
CTime cTIME = CTime::GetCurrentTime();
sITEM_NEW.tBORNTIME = cTIME.GetTime();
sITEM_NEW.wTurnNum = (WORD) dwAMOUNT;
sITEM_NEW.cGenType = pINVENITEM->sItemCustom.cGenType;
sITEM_NEW.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
sITEM_NEW.cFieldID = (BYTE)GLGaeaServer::GetInstance().GetFieldSvrID();
sITEM_NEW.lnGenNum = GLITEMLMT::GetInstance().RegItemGen ( sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );
// ¾ÆÀÌÅÛ ¿¡µðÆ®¿¡¼ ÀÔ·ÂÇÑ °³Á¶ µî±Þ Àû¿ë ( ÁØÇõ )
sITEM_NEW.cDAMAGE = (BYTE)pONE->sBasicOp.wGradeAttack;
sITEM_NEW.cDEFENSE = (BYTE)pONE->sBasicOp.wGradeDefense;
// ·£´ý ¿É¼Ç »ý¼º.
if( sITEM_NEW.GENERATE_RANDOM_OPT() )
{
GLITEMLMT::GetInstance().ReqRandomItem( sITEM_NEW );
}
// Note :.
WORD wInsertPosX, wInsertPosY;
BOOL bOk = m_cInventory.FindInsrtable ( pONE->sBasicOp.wInvenSizeX, pONE->sBasicOp.wInvenSizeY, wInsertPosX, wInsertPosY );
if ( !bOk ) return S_OK; // Àκ¥ °ø°£ ºÎÁ·À¸·Î µÇµ¹¸² ½ÇÆÐ.
// .
m_cInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
SINVENITEM *pInvenItem = m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
if ( !pInvenItem ) return E_FAIL;
// Note : ·Î±× ³²±è.
GLITEMLMT::GetInstance().ReqItemRoute ( pInvenItem->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pInvenItem->sItemCustom.wTurnNum );
// [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.Data = *pInvenItem;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
}
// Note : ÇÁ¸®¹Ì¾ö ¼³Á¤.
//
CTime tPREMIUM(m_tPREMIUM);
CTime tCurTime = CTime::GetCurrentTime();
CTimeSpan tLMT(pITEM->sDrugOp.tTIME_LMT);
CTimeSpan tADD(0,1,30,0);
if ( m_tPREMIUM==0 || tPREMIUM < tCurTime )
{
tPREMIUM = tCurTime + tLMT + tADD;
}
else
{
tPREMIUM = tPREMIUM + tLMT + tADD;
}
// Note : ÇÁ¸®¹Ì¾ö ¸ðµå ON.
//
m_tPREMIUM = tPREMIUM.GetTime();
m_bPREMIUM = true;
// Note : ÇöÁ¦ Ȱ¼ºÈµÈ Àκ¥ ¶óÀÎ ¼³Á¤.
//
m_cInventory.SetAddLine ( GetOnINVENLINE(), true );
// Note : DB¿¡ ÀúÀå.
//
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
CSetPremiumTime *pDbAction = new CSetPremiumTime ( m_dwUserID, m_tPREMIUM );
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDbAction );
}
// Note : CSetPremiumTime Ŭ·¡½º¿¡¼ ¸ðµç °æ¿ì¸¦ ó¸®Çϵµ·Ï º¯°æµÊ
/*
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
CDaumSetPremiumTime *pDbAction = new CDaumSetPremiumTime ( m_dwUserID, m_tPREMIUM );
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDbAction );
}
*/
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
// Note : ¿¡ÀÌÁ¯Æ®·Î °ÅÃļ ¸Þ½ÃÁö Àü¼Û.
// ( ¿¡ÀÌÁ¯Æ®¿¡ ±â·ÏµÇ¾î ÀÖ´Â ÇÁ¸®¹Ì¾ö ±â°£À» °»½Å ½ÃÄÑÁà¾ß ÇÑ´Ù. )
//
CTimeSpan tDX = tPREMIUM - tCurTime;
MsgFB.emFB = EMREQ_PREMIUMSET_FB_OK;
MsgFB.tLMT = m_tPREMIUM;
MsgFB.tSPAN = tDX.GetTimeSpan();
GLGaeaServer::GetInstance().SENDTOAGENT(m_dwClientID,&MsgFB);
return S_OK;
}
HRESULT GLChar::MsgReqInvenHairChange ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_INVEN_HAIR_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_HAIR_CHANGE *)nmg;
GLMSG::SNETPC_INVEN_HAIR_CHANGE_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) )
{
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_COOLTIME;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_HAIR )
{
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
bool bVALIDCLASS = (NULL!=(pITEM->sBasicOp.dwReqCharClass&m_emClass));
if ( !bVALIDCLASS )
{
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_BADCLASS;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
WORD wHAIR = pITEM->sSuitOp.wReModelNum;
EMCHARINDEX emIndex = CharClassToIndex(m_emClass);
const GLCONST_CHARCLASS& sCHARCONST = GLCONST_CHAR::cCONSTCLASS[emIndex];
if ( sCHARCONST.dwHAIRNUM<=wHAIR || MAX_HAIR<=wHAIR )
{
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_BADITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( sCHARCONST.strHAIR_CPS[wHAIR].empty() )
{
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_BADITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
// Note : Çì¾î¸¦ º¯È ½ÃÅ´.
//
m_wHair = wHAIR;
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ ó¸® °á°ú Àü¼Û.
MsgFB.dwID = m_wHair;
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
// Note : Çì¾î º¯°æÀ» ´Ù¸¥ »ç¶÷µé¿¡°Ô ¾Ë¸².
GLMSG::SNETPC_INVEN_HAIR_CHANGE_BRD NetMsgBrd;
NetMsgBrd.dwGaeaID = m_dwGaeaID;
NetMsgBrd.dwID = m_wHair;
SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
return S_OK;
}
HRESULT GLChar::MsgReqInvenHairStyleChange ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_INVEN_HAIRSTYLE_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_HAIRSTYLE_CHANGE *)nmg;
GLMSG::SNETPC_INVEN_HAIR_CHANGE_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) )
{
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_COOLTIME;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_HAIR_STYLE )
{
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
bool bVALIDCLASS = (NULL!=(pITEM->sBasicOp.dwReqCharClass&m_emClass));
if ( !bVALIDCLASS )
{
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_BADCLASS;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
//WORD wHAIR = pITEM->sSuitOp.wReModelNum;
EMCHARINDEX emIndex = CharClassToIndex(m_emClass);
const GLCONST_CHARCLASS& sCHARCONST = GLCONST_CHAR::cCONSTCLASS[emIndex];
if ( sCHARCONST.dwHAIRNUM<=pNetMsg->wHairStyle || MAX_HAIR<=pNetMsg->wHairStyle )
{
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_BADITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
m_wHair = pNetMsg->wHairStyle;
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ ó¸® °á°ú Àü¼Û.
MsgFB.dwID = m_wHair;
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
// Note : Çì¾î º¯°æÀ» ´Ù¸¥ »ç¶÷µé¿¡°Ô ¾Ë¸².
GLMSG::SNETPC_INVEN_HAIR_CHANGE_BRD NetMsgBrd;
NetMsgBrd.dwGaeaID = m_dwGaeaID;
NetMsgBrd.dwID = m_wHair;
SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
// DB¿¡ ÀúÀå
CSetChaHairStyle* pDBAction = new CSetChaHairStyle ( m_dwCharID, m_wHair );
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDBAction );
}
return S_OK;
}
HRESULT GLChar::MsgReqInvenHairColorChange ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_INVEN_HAIRCOLOR_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_HAIRCOLOR_CHANGE *)nmg;
GLMSG::SNETPC_INVEN_HAIRCOLOR_CHANGE_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) )
{
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_COOLTIME;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_HAIR_COLOR )
{
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
// Note : Çì¾î¸¦ º¯È ½ÃÅ´.
//
m_wHairColor = pNetMsg->wHairColor;
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ ó¸® °á°ú Àü¼Û.
MsgFB.wHairColor = m_wHairColor;
MsgFB.emFB = EMINVEN_HAIR_CHANGE_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
// Note : Çì¾î º¯°æÀ» ´Ù¸¥ »ç¶÷µé¿¡°Ô ¾Ë¸².
GLMSG::SNETPC_INVEN_HAIRCOLOR_CHANGE_BRD NetMsgBrd;
NetMsgBrd.dwGaeaID = m_dwGaeaID;
NetMsgBrd.wHairColor = m_wHairColor;
SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
// DB¿¡ ÀúÀå
CSetChaHairColor* pDBAction = new CSetChaHairColor ( m_dwCharID, m_wHairColor );
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDBAction );
}
return S_OK;
}
HRESULT GLChar::MsgReqInvenBikeColorChange ( NET_MSG_GENERIC* nmg ) //add bike color
{
GLMSG::SNETPC_INVEN_BIKECOLOR_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_BIKECOLOR_CHANGE *)nmg;
GLMSG::SNETPC_INVEN_BIKECOLOR_CHANGE_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMINVEN_BIKE_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) )
{
MsgFB.emFB = EMINVEN_BIKE_CHANGE_FB_COOLTIME;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_BIKE_COLOR )
{
MsgFB.emFB = EMINVEN_BIKE_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
m_sVehicle.m_wColor = pNetMsg->wBikeColor;
MsgFB.wBikeColor = m_sVehicle.m_wColor;
MsgFB.emFB = EMINVEN_BIKE_CHANGE_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
GLMSG::SNETPC_INVEN_BIKECOLOR_CHANGE_BRD NetMsgBrd;
NetMsgBrd.dwGaeaID = m_dwGaeaID;
NetMsgBrd.wBikeColor = m_sVehicle.m_wColor;
SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
// DB¿¡ ÀúÀå //jdev todo save color after change
CSetVehicleColor* pDBAction = new CSetVehicleColor ( m_dwClientID, m_dwCharID, m_sVehicle.m_dwGUID ,m_sVehicle.m_wColor );
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDBAction );
}
return S_OK;
}
HRESULT GLChar::MsgReqInvenFaceChange ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_INVEN_FACE_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_FACE_CHANGE *)nmg;
GLMSG::SNETPC_INVEN_FACE_CHANGE_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMINVEN_FACE_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) )
{
MsgFB.emFB = EMINVEN_FACE_CHANGE_FB_COOLTIME;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_FACE )
{
MsgFB.emFB = EMINVEN_FACE_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
bool bVALIDCLASS = (NULL!=(pITEM->sBasicOp.dwReqCharClass&m_emClass));
if ( !bVALIDCLASS )
{
MsgFB.emFB = EMINVEN_FACE_CHANGE_FB_BADCLASS;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
WORD wFACE = pITEM->sSuitOp.wReModelNum;
EMCHARINDEX emIndex = CharClassToIndex(m_emClass);
const GLCONST_CHARCLASS& sCHARCONST = GLCONST_CHAR::cCONSTCLASS[emIndex];
if ( sCHARCONST.dwHEADNUM<=wFACE || MAX_HEAD<=wFACE )
{
MsgFB.emFB = EMINVEN_FACE_CHANGE_FB_BADITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( sCHARCONST.strHEAD_CPS[wFACE].empty() )
{
MsgFB.emFB = EMINVEN_FACE_CHANGE_FB_BADITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
// Note : ¾ó±¼À» º¯È ½ÃÅ´.
//
m_wFace = wFACE;
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ ó¸® °á°ú Àü¼Û.
MsgFB.dwID = m_wFace;
MsgFB.emFB = EMINVEN_FACE_CHANGE_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
// Note : ¾ó±¼ º¯°æÀ» ´Ù¸¥ »ç¶÷µé¿¡°Ô ¾Ë¸².
GLMSG::SNETPC_INVEN_FACE_CHANGE_BRD NetMsgBrd;
NetMsgBrd.dwGaeaID = m_dwGaeaID;
NetMsgBrd.dwID = m_wFace;
SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
return S_OK;
}
HRESULT GLChar::MsgReqInvenFaceStyleChange ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_INVEN_FACESTYLE_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_FACESTYLE_CHANGE *)nmg;
GLMSG::SNETPC_INVEN_FACE_CHANGE_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMINVEN_FACE_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) )
{
MsgFB.emFB = EMINVEN_FACE_CHANGE_FB_COOLTIME;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_FACE_STYLE )
{
MsgFB.emFB = EMINVEN_FACE_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
bool bVALIDCLASS = (NULL!=(pITEM->sBasicOp.dwReqCharClass&m_emClass));
if ( !bVALIDCLASS )
{
MsgFB.emFB = EMINVEN_FACE_CHANGE_FB_BADCLASS;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
//WORD wHAIR = pITEM->sSuitOp.wReModelNum;
EMCHARINDEX emIndex = CharClassToIndex(m_emClass);
const GLCONST_CHARCLASS& sCHARCONST = GLCONST_CHAR::cCONSTCLASS[emIndex];
if ( sCHARCONST.dwHEADNUM<=pNetMsg->wFaceStyle || MAX_HEAD<=pNetMsg->wFaceStyle )
{
MsgFB.emFB = EMINVEN_FACE_CHANGE_FB_BADITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
m_wFace = pNetMsg->wFaceStyle;
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ ó¸® °á°ú Àü¼Û.
MsgFB.dwID = m_wFace;
MsgFB.emFB = EMINVEN_FACE_CHANGE_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
// Note : Çì¾î º¯°æÀ» ´Ù¸¥ »ç¶÷µé¿¡°Ô ¾Ë¸².
GLMSG::SNETPC_INVEN_FACE_CHANGE_BRD NetMsgBrd;
NetMsgBrd.dwGaeaID = m_dwGaeaID;
NetMsgBrd.dwID = m_wFace;
SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
// DB¿¡ ÀúÀå
CSetChaFaceStyle* pDBAction = new CSetChaFaceStyle ( m_dwCharID, m_wFace );
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDBAction );
}
return S_OK;
}
HRESULT GLChar::MsgReqInvenGenderChange( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_INVEN_GENDER_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_GENDER_CHANGE *)nmg;
GLMSG::SNETPC_INVEN_GENDER_CHANGE_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMINVEN_GENDER_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) ) return E_FAIL;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_GENDER_CHANGE )
{
MsgFB.emFB = EMINVEN_GENDER_CHANGE_FB_ITEMTYPE;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
//added by | 08-07-2012 | make extreme can use gender card
/*if ( m_emClass == GLCC_EXTREME_M || m_emClass == GLCC_EXTREME_W )
{
MsgFB.emFB = EMINVEN_GENDER_CHANGE_FB_BADCLASS;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}*/
//fix for proper class reverse
EMCHARCLASS emClass;
//if ( m_emClass > GLCC_EXTREME_M && m_emClass < GLCC_SCIENCE_M ) emClass = (EMCHARCLASS) (m_emClass / 64 );
//else if ( m_emClass < GLCC_EXTREME_M ) emClass = (EMCHARCLASS) (m_emClass * 64);
if ( m_emClass == GLCC_FIGHTER_M || m_emClass == GLCC_ARMS_M || m_emClass == GLCC_ARCHER_W || m_emClass == GLCC_SPIRIT_W ) emClass = (EMCHARCLASS) (m_emClass * 64);
else if ( m_emClass == GLCC_FIGHTER_W || m_emClass == GLCC_ARMS_W || m_emClass == GLCC_ARCHER_M || m_emClass == GLCC_SPIRIT_M ) emClass = (EMCHARCLASS) (m_emClass / 64);
else if ( m_emClass == GLCC_EXTREME_M || m_emClass == GLCC_SCIENCE_M || m_emClass == GLCC_ASSASSIN_M ) emClass = (EMCHARCLASS) (m_emClass * 2 );
else if ( m_emClass == GLCC_EXTREME_W || m_emClass == GLCC_SCIENCE_W || m_emClass == GLCC_ASSASSIN_W ) emClass = (EMCHARCLASS) (m_emClass / 2 );
EMCHARINDEX emIndex = CharClassToIndex(emClass);
const GLCONST_CHARCLASS& sCHARCONST = GLCONST_CHAR::cCONSTCLASS[emIndex];
if ( pNetMsg->wFace >= sCHARCONST.dwHEADNUM || pNetMsg->wHair >= sCHARCONST.dwHAIRNUM_SELECT )
{
MsgFB.emFB = EMINVEN_GENDER_CHANGE_FB_NOTVALUE;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
m_emClass = emClass;
m_wHair = pNetMsg->wHair;
m_wFace = pNetMsg->wFace;
m_wHairColor = HAIRCOLOR::GetHairColor( emIndex, m_wHair );
m_wSex = m_wSex ? 0 : 1;
// Note : Ŭ¶óÀÌ¾ðÆ®¿¡ ó¸® °á°ú Àü¼Û.
MsgFB.emClass = m_emClass;
MsgFB.wSex = m_wSex;
MsgFB.wFace = m_wFace;
MsgFB.wHair = m_wHair;
MsgFB.wHairColor = m_wHairColor;
MsgFB.emFB = EMINVEN_GENDER_CHANGE_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
// DB¿¡ ÀúÀå
CSetChaGenderChange* pDBAction = new CSetChaGenderChange ( m_dwCharID, m_emClass, m_wSex, m_wFace, m_wHair, m_wHairColor );
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDBAction );
}
return S_OK;
}
HRESULT GLChar::MsgReqInvenChargedItem ( NET_MSG_GENERIC* nmg )
{
if ( !IsValidBody() ) return E_FAIL;
GLMSG::SNET_CHARGED_ITEM_GET *pNetMsg = (GLMSG::SNET_CHARGED_ITEM_GET *) nmg;
GLMSG::SNET_CHARGED_ITEM_GET_FB NetMsgFB;
MAPSHOP_ITER iter = m_mapCharged.find ( pNetMsg->szPurKey );
if ( iter==m_mapCharged.end() )
{
NetMsgFB.emFB = EMCHARGED_ITEM_GET_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
SHOPPURCHASE &sPURCHASE = (*iter).second;
SNATIVEID nidITEM(sPURCHASE.wItemMain,sPURCHASE.wItemSub);
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( nidITEM );
if ( !pITEM )
{
NetMsgFB.emFB = EMCHARGED_ITEM_GET_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
WORD wPosX, wPosY;
BOOL bOK = m_cInventory.FindInsrtable ( pITEM->sBasicOp.wInvenSizeX, pITEM->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOK )
{
NetMsgFB.emFB = EMCHARGED_ITEM_GET_FB_NOINVEN;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
// Note : ¾ÆÀÌÅÛ °¡Á®¿È. DB Action.
//
CPurchaseItem_Get *pDbAction = new CPurchaseItem_Get(m_dwClientID,
m_dwUserID,
pNetMsg->szPurKey,
nidITEM,pNetMsg->dwID);
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDbAction );
}
return S_OK;
}
// *****************************************************
// Desc: À̸§º¯°æ¿äû ó¸®
// *****************************************************
HRESULT GLChar::MsgReqInvenRename ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_INVEN_RENAME *pNetMsg = (GLMSG::SNETPC_INVEN_RENAME*) nmg;
GLMSG::SNETPC_INVEN_RENAME_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMINVEN_RENAME_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) ) return E_FAIL;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_RENAME )
{
MsgFB.emFB = EMINVEN_RENAME_FB_BADITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
// ij¸¯Å͸í
CString strChaName(pNetMsg->szName);
strChaName.Trim(_T(" ")); // ¾ÕµÚ °ø¹éÁ¦°Å
// ½ºÆäÀ̽º ã±â, ij¸¯ÅÍÀ̸§ 4±ÛÀÚ ÀÌÇÏ ¿¡·¯, ij¸¯ÅÍ ¸¸µé ¼ö ¾øÀ½.
if ((strChaName.FindOneOf(" ") != -1) || (strChaName.GetLength() < 4))
{
MsgFB.emFB = EMINVEN_RENAME_FB_LENGTH;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
BOOL bFILTER0 = STRUTIL::CheckString( strChaName );
BOOL bFILTER1 = CRanFilter::GetInstance().NameFilter( strChaName );
if ( bFILTER0 || bFILTER1 )
{
MsgFB.emFB = EMINVEN_RENAME_FROM_DB_BAD;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &MsgFB );
return S_FALSE;
}
#ifdef TH_PARAM
// ű¹¾î ¹®ÀÚ Á¶ÇÕ Ã¼Å©
if ( !m_pCheckString ) return E_FAIL;
if ( !m_pCheckString(strChaName) )
{
MsgFB.emFB = EMINVEN_RENAME_FB_THAICHAR_ERROR;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
#endif
#ifdef VN_PARAM
// º£Æ®³² ¹®ÀÚ Á¶ÇÕ Ã¼Å©
if( STRUTIL::CheckVietnamString( strChaName ) )
{
MsgFB.emFB = EMINVEN_RENAME_FB_VNCHAR_ERROR;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
#endif
// DB¿¡ ÀúÀå¿äû
CRenameCharacter* pDBAction = new CRenameCharacter(m_dwClientID,
m_dwCharID,
pNetMsg->szName,
pNetMsg->wPosX,
pNetMsg->wPosY);
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDBAction );
}
return S_OK;
}
// *****************************************************
// Desc: À̸§º¯°æ °á°ú ó¸®
// *****************************************************
HRESULT GLChar::MsgInvenRename ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_INVEN_RENAME_FROM_DB *pNetMsg = (GLMSG::SNETPC_INVEN_RENAME_FROM_DB *)nmg;
// Ŭ¶óÀÌ¾ðÆ®¿¡ ó¸® °á°ú Àü¼Û.
GLMSG::SNETPC_INVEN_RENAME_FB MsgFB;
if( pNetMsg->emFB == EMINVEN_RENAME_FROM_DB_BAD )
{
MsgFB.emFB = EMINVEN_RENAME_FROM_DB_BAD;
StringCchCopy ( MsgFB.szName, CHAR_SZNAME, pNetMsg->szName );
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return S_FALSE;
}
else if ( pNetMsg->emFB == EMINVEN_RENAME_FROM_DB_FAIL )
{
MsgFB.emFB = EMINVEN_RENAME_FROM_DB_FAIL;
StringCchCopy ( MsgFB.szName, CHAR_SZNAME, pNetMsg->szName );
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return S_FALSE;
}
StringCchCopy ( MsgFB.szName, CHAR_SZNAME, pNetMsg->szName );
MsgFB.emFB = EMINVEN_RENAME_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
// ÁÖº¯¿¡ À̸§º¯°æÀ» ¾Ë¸².
GLMSG::SNETPC_INVEN_RENAME_BRD NetMsgBrd;
NetMsgBrd.dwGaeaID = m_dwGaeaID;
StringCchCopy ( NetMsgBrd.szName, CHAR_SZNAME, pNetMsg->szName );
SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );
// GLLandMan À̸§¸Ê º¯°æ.
GLMSG::SNETPC_CHANGE_NAMEMAP NetMsgNameMap;
NetMsgNameMap.dwGaeaID = m_dwGaeaID;
StringCchCopy ( NetMsgNameMap.szOldName, CHAR_SZNAME, m_szName );
StringCchCopy ( NetMsgNameMap.szNewName, CHAR_SZNAME, pNetMsg->szName );
SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgNameMap );
// À̸§º¯°æÀ» Ä£±¸¿Í Ŭ·´ ¸É¹öµé¿¡°Ô ¾Ë¸²
GLMSG::SNETPC_INVEN_RENAME_AGTBRD NetMsgAgt;
NetMsgAgt.dwID = m_dwGaeaID;
StringCchCopy ( NetMsgAgt.szOldName, CHAR_SZNAME, m_szName );
StringCchCopy ( NetMsgAgt.szNewName, CHAR_SZNAME, pNetMsg->szName );
GLGaeaServer::GetInstance().SENDTOAGENT ( m_dwClientID, &NetMsgAgt );
GLGaeaServer::GetInstance().ChangeNameMap ( this, m_szName, pNetMsg->szName );
// [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ Á¦°Å.
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
return S_OK;
}
HRESULT GLChar::MsgReqSendSMS( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_SEND_SMS *pNetMsg = (GLMSG::SNETPC_SEND_SMS*) nmg;
GLMSG::SNETPC_SEND_SMS_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wItemPosX, pNetMsg->wItemPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMSMS_SEND_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) ) return E_FAIL;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_SMS )
{
MsgFB.emFB = EMSMS_SEND_FB_BADITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
// DB¿¡ ÀúÀå¿äû
CSendSMS* pDBAction = new CSendSMS( m_dwClientID,
m_dwCharID,
pNetMsg->dwReceiveChaNum,
pNetMsg->szPhoneNumber,
m_szName,
pNetMsg->szSmsMsg,
pNetMsg->wItemPosX,
pNetMsg->wItemPosY );
if( GLGaeaServer::GetInstance().GetDBMan() )
{
GLGaeaServer::GetInstance().GetDBMan()->AddJob( pDBAction );
}
return S_OK;
}
// *****************************************************
// Desc: SMS Àü¼Û °á°ú ó¸®
// *****************************************************
HRESULT GLChar::MsgSendSMS( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_SEND_SMS_FROM_DB *pNetMsg = (GLMSG::SNETPC_SEND_SMS_FROM_DB *)nmg;
// Ŭ¶óÀÌ¾ðÆ®¿¡ ó¸® °á°ú Àü¼Û.
GLMSG::SNETPC_SEND_SMS_FB MsgFB;
if ( pNetMsg->emFB == EMSMS_SEND_FROM_DB_FAIL )
{
MsgFB.emFB = EMSMS_SEND_FROM_DB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return S_FALSE;
}
MsgFB.emFB = EMSMS_SEND_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
return TRUE;
}
HRESULT GLChar::MsgLoudSpeaker ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_CHAT_LOUDSPEAKER *pNetMsg = (GLMSG::SNETPC_CHAT_LOUDSPEAKER *) nmg;
GLMSG::SNETPC_CHAT_LOUDSPEAKER_FB NetMsgFB;
bool bchannel_all(false);
if ( m_dwUserLvl < USER_GM3 )
{
SINVENITEM *pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
NetMsgFB.emFB = EMCHAT_LOUDSPEAKER_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsgFB );
return S_OK;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) ) return E_FAIL;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( !pITEM )
{
NetMsgFB.emFB = EMCHAT_LOUDSPEAKER_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsgFB );
return S_OK;
}
if ( pITEM->sBasicOp.emItemType!=ITEM_LOUDSPEAKER )
{
NetMsgFB.emFB = EMCHAT_LOUDSPEAKER_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsgFB );
return S_OK;
}
if ( IsCHATBLOCK() ) return S_FALSE;
bchannel_all = pITEM->sBasicOp.IsCHANNEL_ALL();
if ( m_sPMarket.IsOpen() )
{
DWORD wTurn = m_cInventory.CountTurnItem( pINVENITEM->sItemCustom.sNativeID );
DWORD wMarketTurn = m_sPMarket.GetItemTurnNum( pINVENITEM->sItemCustom.sNativeID ) ;
if ( wTurn <= wMarketTurn )
{
NetMsgFB.emFB = EMCHAT_LOUDSPEAKER_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsgFB );
return S_OK;
}
}
// [Àڽſ¡°Ô] ÀÎ¹ê ¾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
}
// Note : È®¼º±â »ç¿ë.
//
GLMSG::SNETPC_CHAT_LOUDSPEAKER_AGT NetMsgAgt;
StringCbCopy( NetMsgAgt.szMSG, CHAT_MSG_SIZE+1, pNetMsg->szMSG);
NetMsgAgt.bchannel_all = bchannel_all;
NetMsgAgt.sITEMLINK = pNetMsg->sITEMLINK;
GLGaeaServer::GetInstance().SENDTOAGENT ( m_dwClientID, &NetMsgAgt );
return S_OK;
}
HRESULT GLChar::MsgReqRebuildResult( NET_MSG_GENERIC* nmg ) //sealed card
{
GLMSG::SNET_REBUILD_RESULT* pNetMsg = (GLMSG::SNET_REBUILD_RESULT*)nmg;
switch( pNetMsg->emResult )
{
case EMREBUILD_RESULT_OPEN:
{
InitRebuildData();
OpenRebuild();
}
break;
case EMREBUILD_RESULT_SUCCESS:
{
if( m_i64RebuildInput != m_i64RebuildCost || m_lnMoney < m_i64RebuildCost )
{
pNetMsg->emResult = EMREBUILD_RESULT_MONEY;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, pNetMsg );
return S_OK;
}
SITEMCUSTOM sRebuildItem = GET_REBUILD_ITEM();
SITEM* pItem = GLItemMan::GetInstance().GetItem( sRebuildItem.sNativeID );
if( !pItem ) return E_FAIL;
SRANDOM_GEN* pRANDOM_SET = GLItemMan::GetInstance().GetItemRandomOpt( sRebuildItem.sNativeID );
if( !pRANDOM_SET ) return E_FAIL;
if( m_ItemRemodelPosX < EM_INVENSIZE_X && m_ItemRemodelPosY < EM_INVENSIZE_Y )
{
GLMSG::SNET_INVEN_REMODELOPEN_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( m_ItemRemodelPosX, m_ItemRemodelPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMREQ_REMODELOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) ) return E_FAIL;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( pITEM->sBasicOp.emItemType!=ITEM_REMODEL )
{
MsgFB.emFB = EMREQ_REMODELOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
//fix unli rando
BOOL bEraseRando = DoDrugInvenItem ( m_ItemRemodelPosX, m_ItemRemodelPosY );
if ( !bEraseRando )
{
SINVENITEM* pinvenitemrando = m_cInventory.FindItem( ITEM_REMODEL );
if ( pinvenitemrando )
{
bEraseRando = DoDrugInvenItem ( pinvenitemrando->wPosX, pinvenitemrando->wPosY );
}
if ( !bEraseRando )
{
SITEM* pholditemrando = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( pholditemrando && pholditemrando->sBasicOp.emItemType==ITEM_REMODEL )
{
bEraseRando = DoDrugSlotItem ( SLOT_HOLD );
}
}
if ( !bEraseRando )
{
CDebugSet::ToFileWithTime( "randobug.txt", "=============================");
CDebugSet::ToFileWithTime( "randobug.txt", "rando bug info start char:[%d] %s", m_dwCharID, m_szName );
CDebugSet::ToFileWithTime( "randobug.txt", "rando item not found! [%04d~%04d]", m_ItemRemodelPosX, m_ItemRemodelPosY );
CDebugSet::ToFileWithTime( "randobug.txt", "=============================");
GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
netmsgerror.emFB = EMREQ_REMODELOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
return E_FAIL;
}
}
//fix unli sealed card
if ( pNetMsg->Data1.nOption != -1 || pNetMsg->Data2.nOption != -1 )
{
BOOL bEraseSealed = DoDrugInvenItem( m_sRebuildSeal.wPosX, m_sRebuildSeal.wPosY );
if ( !bEraseSealed )
{
SINVENITEM* pinvenitemseal = m_cInventory.FindItem( ITEM_SEALED_CARD);
if ( pinvenitemseal )
{
bEraseSealed = DoDrugInvenItem ( pinvenitemseal->wPosX, pinvenitemseal->wPosY );
}
if ( !bEraseSealed )
{
SITEM* pholditemseal = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( pholditemseal && pholditemseal->sBasicOp.emItemType==ITEM_SEALED_CARD )
{
bEraseSealed = DoDrugSlotItem ( SLOT_HOLD );
}
}
if ( !bEraseSealed )
{
CDebugSet::ToFileWithTime( "randobug.txt", "=============================");
CDebugSet::ToFileWithTime( "randobug.txt", "rando bug info start char:[%d] %s", m_dwCharID, m_szName );
CDebugSet::ToFileWithTime( "randobug.txt", "seal item not found! [%04d~%04d]", m_sRebuildSeal.wPosX, m_sRebuildSeal.wPosY );
CDebugSet::ToFileWithTime( "randobug.txt", "=============================");
GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
netmsgerror.emFB = EMREQ_REMODELOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
return E_FAIL;
}
}
}
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( m_sRebuildSeal.wPosX, m_sRebuildSeal.wPosY );
if ( !pInvenItem )
m_sRebuildSeal.RESET();
}
else
{
CDebugSet::ToFileWithTime( "randobug.txt", "=============================");
CDebugSet::ToFileWithTime( "randobug.txt", "rando bug info start char:[%d] %s", m_dwCharID, m_szName );
CDebugSet::ToFileWithTime( "randobug.txt", "rando item invalid [%04d~%04d]", m_ItemRemodelPosX, m_ItemRemodelPosY );
CDebugSet::ToFileWithTime( "randobug.txt", "=============================");
GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
netmsgerror.emFB = EMREQ_REMODELOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
return E_FAIL;
}
/*else
{
PGLCROW pCrow = m_pLandMan->GetCrow ( pNetMsg->dwNPCID );
if ( !pCrow )
return E_FAIL;
float fDist = D3DXVec3Length ( &D3DXVECTOR3(m_vPos-pCrow->GetPosition()) );
float fTalkRange = (float) (pCrow->GetBodyRadius() + GETBODYRADIUS() + 30);
float fTalkableDis = fTalkRange + 20;
if ( fDist>fTalkableDis )
return E_FAIL;
}*/
{
CheckMoneyUpdate( m_lnMoney, m_i64RebuildCost, FALSE, "Rebuild Cost." );
m_bMoneyUpdate = TRUE;
m_lnMoney -= m_i64RebuildCost;
GLMSG::SNETPC_UPDATE_MONEY NetMsgMoney;
NetMsgMoney.lnMoney = m_lnMoney;
NetMsgMoney.lnVoteP = m_lnVoteP;
NetMsgMoney.lnPremP = m_lnPremP;
//add contributionpoints by CNDev
NetMsgMoney.lnContribP = m_lnContribP;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsgMoney );
GLITEMLMT::GetInstance().ReqMoneyExc( ID_CHAR, m_dwCharID, ID_CHAR, 0, -m_i64RebuildCost, EMITEM_ROUTE_NPCREMAKE );
GLITEMLMT::GetInstance().ReqMoneyExc( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnMoney, EMITEM_ROUTE_CHAR );
}
float fDestroyRate = seqrandom::getpercent();
if( fDestroyRate < pRANDOM_SET->fD_point )
{
GLITEMLMT::GetInstance().ReqItemRoute( sRebuildItem, ID_CHAR, m_dwCharID, ID_CHAR, m_dwCharID, EMITEM_ROUTE_DELETE, sRebuildItem.wTurnNum );
m_cInventory.DeleteItem( m_sRebuildItem.wPosX, m_sRebuildItem.wPosY );
GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
NetMsg_Inven_Delete.wPosX = m_sRebuildItem.wPosX;
NetMsg_Inven_Delete.wPosY = m_sRebuildItem.wPosY;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsg_Inven_Delete );
pNetMsg->emResult = EMREBUILD_RESULT_DESTROY;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, pNetMsg );
}
else
{
SINVENITEM* pInvenItem = m_cInventory.GetItem( m_sRebuildItem.wPosX, m_sRebuildItem.wPosY );
if( pInvenItem )
{
SITEMSEALDATA sData1 = pNetMsg->Data1;
SITEMSEALDATA sData2 = pNetMsg->Data2;
if ( sData1.nOption != -1 || sData2.nOption != -1 )
{
if ( sData1.nOption != -1 && !pInvenItem->sItemCustom.isExistStat( (BYTE)sData1.emOpt, sData1.cDataValue ) )
{
CDebugSet::ToFileWithTime( "sealedbug.txt", "=============================");
CDebugSet::ToFileWithTime( "sealedbug.txt", "option bug info start char:[%d] %s", m_dwCharID, m_szName );
CDebugSet::ToFileWithTime( "sealedbug.txt", "option item [%04d~%04d]", pInvenItem->sItemCustom.sNativeID.wMainID, pInvenItem->sItemCustom.sNativeID.wSubID );
CDebugSet::ToFileWithTime( "sealedbug.txt", "option not found on base item! option:%d value:%d", sData1.emOpt, sData1.cDataValue );
CDebugSet::ToFileWithTime( "sealedbug.txt", "option 1 option:%d value:%d", pInvenItem->sItemCustom.cOptTYPE1, pInvenItem->sItemCustom.nOptVALUE1 );
CDebugSet::ToFileWithTime( "sealedbug.txt", "option 2 option:%d value:%d", pInvenItem->sItemCustom.cOptTYPE2, pInvenItem->sItemCustom.nOptVALUE2 );
CDebugSet::ToFileWithTime( "sealedbug.txt", "option 3 option:%d value:%d", pInvenItem->sItemCustom.cOptTYPE3, pInvenItem->sItemCustom.nOptVALUE3 );
CDebugSet::ToFileWithTime( "sealedbug.txt", "option 4 option:%d value:%d", pInvenItem->sItemCustom.cOptTYPE4, pInvenItem->sItemCustom.nOptVALUE4 );
CDebugSet::ToFileWithTime( "sealedbug.txt", "=============================");
GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
netmsgerror.emFB = EMREQ_REMODELOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
return E_FAIL;
}
if ( sData2.nOption != -1 && !pInvenItem->sItemCustom.isExistStat( (BYTE)sData2.emOpt, sData2.cDataValue ) )
{
CDebugSet::ToFileWithTime( "sealedbug.txt", "=============================");
CDebugSet::ToFileWithTime( "sealedbug.txt", "option bug info start char:[%d] %s", m_dwCharID, m_szName );
CDebugSet::ToFileWithTime( "sealedbug.txt", "option item [%04d~%04d]", pInvenItem->sItemCustom.sNativeID.wMainID, pInvenItem->sItemCustom.sNativeID.wSubID );
CDebugSet::ToFileWithTime( "sealedbug.txt", "option not found on base item! option:%d value:%d", sData2.emOpt, sData2.cDataValue );
CDebugSet::ToFileWithTime( "sealedbug.txt", "option 1 option:%d value:%d", pInvenItem->sItemCustom.cOptTYPE1, pInvenItem->sItemCustom.nOptVALUE1 );
CDebugSet::ToFileWithTime( "sealedbug.txt", "option 2 option:%d value:%d", pInvenItem->sItemCustom.cOptTYPE2, pInvenItem->sItemCustom.nOptVALUE2 );
CDebugSet::ToFileWithTime( "sealedbug.txt", "option 3 option:%d value:%d", pInvenItem->sItemCustom.cOptTYPE3, pInvenItem->sItemCustom.nOptVALUE3 );
CDebugSet::ToFileWithTime( "sealedbug.txt", "option 4 option:%d value:%d", pInvenItem->sItemCustom.cOptTYPE4, pInvenItem->sItemCustom.nOptVALUE4 );
CDebugSet::ToFileWithTime( "sealedbug.txt", "=============================");
GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
netmsgerror.emFB = EMREQ_REMODELOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
return E_FAIL;
}
SITEMCUSTOM sCustom = pInvenItem->sItemCustom;
SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = sCustom.sNativeID;
sITEM_NEW.nidDISGUISE = sCustom.nidDISGUISE;
sITEM_NEW.tBORNTIME = sCustom.tBORNTIME;
sITEM_NEW.tDISGUISE = sCustom.tDISGUISE;
sITEM_NEW.cGenType = sCustom.cGenType;
sITEM_NEW.cChnID = sCustom.cChnID;
sITEM_NEW.cFieldID = sCustom.cFieldID;
sITEM_NEW.lnGenNum = sCustom.lnGenNum;
sITEM_NEW.cDAMAGE = sCustom.cDAMAGE;
sITEM_NEW.cDEFENSE = sCustom.cDEFENSE;
sITEM_NEW.cRESIST_FIRE = sCustom.cRESIST_FIRE;
sITEM_NEW.cRESIST_ICE = sCustom.cRESIST_ICE;
sITEM_NEW.cRESIST_ELEC = sCustom.cRESIST_ELEC;
sITEM_NEW.cRESIST_POISON = sCustom.cRESIST_POISON;
sITEM_NEW.cRESIST_SPIRIT = sCustom.cRESIST_SPIRIT;
sITEM_NEW.dwPetID = sCustom.dwPetID;
sITEM_NEW.dwVehicleID = sCustom.dwVehicleID;
sITEM_NEW.bVietnamGainItem = sCustom.bVietnamGainItem;
sITEM_NEW.bWrap = sCustom.bWrap;
sITEM_NEW.bNonDrop = sCustom.bNonDrop;
//sITEM_NEW.dwOwnerID = sCustom.dwOwnerID;
//sITEM_NEW.wColor = sCustom.wColor;
if( sITEM_NEW.GENERATE_RANDOM_OPT() )
{
if ( sData1.nOption != -1 && pInvenItem->sItemCustom.isExistStat( (BYTE)sData1.emOpt, sData1.cDataValue ) )
{
sITEM_NEW.cOptTYPE1 = sData1.emOpt;
//sITEM_NEW.nOptVALUE1 = sData1.fValue;
sITEM_NEW.nOptVALUE1 = sData1.cDataValue;
//if( sITEM_NEW.cOptTYPE1 == EMR_OPT_DAMAGE || sITEM_NEW.cOptTYPE1 == EMR_OPT_DEFENSE || sITEM_NEW.cOptTYPE1 == EMR_OPT_HITRATE || sITEM_NEW.cOptTYPE1 == EMR_OPT_AVOIDRATE )
// sITEM_NEW.nOptVALUE1 = sData1.fValue * 100.0f;
if( sITEM_NEW.cOptTYPE1 == sITEM_NEW.cOptTYPE2)
{
sITEM_NEW.cOptTYPE2 = 0;
sITEM_NEW.nOptVALUE2 = 0;
}
if( sITEM_NEW.cOptTYPE1 == sITEM_NEW.cOptTYPE3)
{
sITEM_NEW.cOptTYPE3 = 0;
sITEM_NEW.nOptVALUE3 = 0;
}
if( sITEM_NEW.cOptTYPE1 == sITEM_NEW.cOptTYPE4)
{
sITEM_NEW.cOptTYPE4 = 0;
sITEM_NEW.nOptVALUE4 = 0;
}
}
if ( sData2.nOption != -1 && pInvenItem->sItemCustom.isExistStat( (BYTE)sData2.emOpt, sData2.cDataValue ) )
{
sITEM_NEW.cOptTYPE2 = sData2.emOpt;
//sITEM_NEW.nOptVALUE2 = sData2.fValue;
sITEM_NEW.nOptVALUE2 = sData2.cDataValue;
//if( sITEM_NEW.cOptTYPE2 == EMR_OPT_DAMAGE || sITEM_NEW.cOptTYPE2 == EMR_OPT_DEFENSE || sITEM_NEW.cOptTYPE2 == EMR_OPT_HITRATE || sITEM_NEW.cOptTYPE2 == EMR_OPT_AVOIDRATE )
// sITEM_NEW.nOptVALUE2 = sData2.fValue * 100.0f;
if( sITEM_NEW.cOptTYPE2 == sITEM_NEW.cOptTYPE3)
{
sITEM_NEW.cOptTYPE3 = 0;
sITEM_NEW.nOptVALUE3 = 0;
}
if( sITEM_NEW.cOptTYPE2 == sITEM_NEW.cOptTYPE4)
{
sITEM_NEW.cOptTYPE4 = 0;
sITEM_NEW.nOptVALUE4 = 0;
}
}
GLITEMLMT::GetInstance().ReqRandomItem( sITEM_NEW );
}
GLITEMLMT::GetInstance().ReqItemRoute( sRebuildItem, ID_CHAR, m_dwCharID, ID_CHAR, m_dwCharID, EMITEM_ROUTE_DELETE, sRebuildItem.wTurnNum );
BOOL bDeleteOldItem = m_cInventory.DeleteItem( m_sRebuildItem.wPosX, m_sRebuildItem.wPosY );
if ( !bDeleteOldItem )
{
CDebugSet::ToFileWithTime( "randobug.txt", "=============================");
CDebugSet::ToFileWithTime( "randobug.txt", "rando bug info start char:[%d] %s", m_dwCharID, m_szName );
CDebugSet::ToFileWithTime( "randobug.txt", "failure to delete rebuild item [%04d~%04d]", m_sRebuildItem.wPosX, m_sRebuildItem.wPosY );
CDebugSet::ToFileWithTime( "randobug.txt", "=============================");
GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
netmsgerror.emFB = EMREQ_REMODELOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
return E_FAIL;
}
GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
NetMsg_Inven_Delete.wPosX = m_sRebuildItem.wPosX;
NetMsg_Inven_Delete.wPosY = m_sRebuildItem.wPosY;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsg_Inven_Delete );
BOOL bInsertNewItem = m_cInventory.InsertItem ( sITEM_NEW, m_sRebuildItem.wPosX, m_sRebuildItem.wPosY );
if ( !bInsertNewItem )
{
CDebugSet::ToFileWithTime( "randobug.txt", "=============================");
CDebugSet::ToFileWithTime( "randobug.txt", "rando bug info start char:[%d] %s", m_dwCharID, m_szName );
CDebugSet::ToFileWithTime( "randobug.txt", "failure to insert new item [%04d~%04d] [%04d~%04d]", sITEM_NEW.sNativeID.wMainID, sITEM_NEW.sNativeID.wSubID, m_sRebuildItem.wPosX, m_sRebuildItem.wPosY );
CDebugSet::ToFileWithTime( "randobug.txt", "=============================");
GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
netmsgerror.emFB = EMREQ_REMODELOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
return E_FAIL;
}
SINVENITEM *pInsertItem = m_cInventory.GetItem ( m_sRebuildItem.wPosX, m_sRebuildItem.wPosY );
if ( !pInsertItem )
{
CDebugSet::ToFileWithTime( "randobug.txt", "=============================");
CDebugSet::ToFileWithTime( "randobug.txt", "rando bug info start char:[%d] %s", m_dwCharID, m_szName );
CDebugSet::ToFileWithTime( "randobug.txt", "failure to find new item [%04d~%04d]", m_sRebuildItem.wPosX, m_sRebuildItem.wPosY );
CDebugSet::ToFileWithTime( "randobug.txt", "=============================");
GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
netmsgerror.emFB = EMREQ_REMODELOPEN_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
return E_FAIL;
}
GLITEMLMT::GetInstance().ReqItemRoute ( pInsertItem->sItemCustom, ID_CHAR, m_dwCharID, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pInsertItem->sItemCustom.wTurnNum );
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.Data = *pInsertItem;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
pNetMsg->emResult = EMREBUILD_RESULT_SUCCESS;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, pNetMsg );
}
else
{
pInvenItem->sItemCustom.GENERATE_RANDOM_OPT( false );
GLITEMLMT::GetInstance().ReqRandomItem( sRebuildItem );
GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
NetItemUpdate.wPosX = m_sRebuildItem.wPosX;
NetItemUpdate.wPosY = m_sRebuildItem.wPosY;
NetItemUpdate.sItemCustom = pInvenItem->sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetItemUpdate );
pNetMsg->emResult = EMREBUILD_RESULT_SUCCESS;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, pNetMsg );
}
}
}
}
break;
case EMREBUILD_RESULT_FAIL:
case EMREBUILD_RESULT_DESTROY:
case EMREBUILD_RESULT_MONEY:
case EMREBUILD_RESULT_CLOSE:
{
InitRebuildData();
CloseRebuild();
m_ItemRemodelPosX = EM_INVENSIZE_X;
m_ItemRemodelPosY = EM_INVENSIZE_Y;
}
break;
}
return S_OK;
}
HRESULT GLChar::MsgReqGarbageResult( NET_MSG_GENERIC* nmg ) // ITEMREBUILD_MARK
{
GLMSG::SNET_GARBAGE_RESULT* pNetMsg = (GLMSG::SNET_GARBAGE_RESULT*)nmg;
//if( m_ItemGarbagePosX < EM_INVENSIZE_X && m_ItemGarbagePosY < EM_INVENSIZE_Y )
{
GLMSG::SNET_GARBAGE_RESULT_FB MsgFB;
SINVENITEM* pINVENITEM_DEL = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM_DEL )
{
MsgFB.emResult = EMGARBAGE_RESULT_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
SITEM* pItem = GLItemMan::GetInstance().GetItem( pINVENITEM_DEL->sItemCustom.sNativeID );
if( !pItem ) //|| !pItem->sBasicOp.IsGarbage() )
{
MsgFB.emResult = EMGARBAGE_RESULT_FB_ITEMTYPE;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
// ÆÖÄ«µåÀÌ¸é¼ ÆÖÀÌ È°¼ºÈ µÇ¾î ÀÖÀ¸¸é »èÁ¦ÇÒ¼ö ¾ø´Ù.
if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD )
{
PGLPETFIELD pMyPet = GLGaeaServer::GetInstance().GetPET ( m_dwPetGUID );
if ( pMyPet && pMyPet->IsValid () && pINVENITEM_DEL->sItemCustom.dwPetID == pMyPet->m_dwPetID )
{
MsgFB.emResult = EMGARBAGE_RESULT_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
}
/*SINVENITEM* pINVENITEM = m_cInventory.GetItem ( m_ItemGarbagePosX, m_ItemGarbagePosY );
if ( !pINVENITEM )
{
MsgFB.emResult = EMGARBAGE_RESULT_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) ) return E_FAIL;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
if ( !pITEM || pITEM->sBasicOp.emItemType!=ITEM_GARBAGE_CARD )
{
MsgFB.emResult = EMGARBAGE_RESULT_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}*/
DoDrugInvenItem ( m_ItemGarbagePosX, m_ItemGarbagePosY );
GLITEMLMT::GetInstance().ReqItemRoute( pINVENITEM_DEL->sItemCustom, ID_CHAR, m_dwCharID, ID_CHAR, m_dwCharID, EMITEM_ROUTE_GARBAGE, pINVENITEM_DEL->sItemCustom.wTurnNum );
{
// Æê Ä«µå Àϰæ¿ì
if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD && pINVENITEM_DEL->sItemCustom.dwPetID != 0 )
{
PGLPETFIELD pMyPet = m_pGLGaeaServer->GetPET ( m_dwPetGUID );
if ( pMyPet && pINVENITEM_DEL->sItemCustom.dwPetID == pMyPet->m_dwPetID )
{
m_pGLGaeaServer->ReserveDropOutPet ( SDROPOUTPETINFO(pMyPet->m_dwGUID,true,false) );
// ÆÖÀÇ ¾Ç¼¼»ç¸®¸¦ °Ë»çÇÑ´Ù.
pMyPet->UpdateTimeLmtItem ( this );
// ³Ö¾îÁÙ²¨ ³Ö¾îÁØ´Ù.
for ( WORD i = 0; i < ACCETYPESIZE; ++i )
{
CItemDrop cDropItem;
cDropItem.sItemCustom = pMyPet->m_PutOnItems[i];
if ( IsInsertToInven ( &cDropItem ) ) InsertToInven ( &cDropItem );
else
{
if ( m_pLandMan )
{
m_pLandMan->DropItem ( m_vPos,
&(cDropItem.sItemCustom),
EMGROUP_ONE,
m_dwGaeaID );
}
}
}
CDeletePet* pDeletePet = new CDeletePet ( m_dwCharID, pINVENITEM_DEL->sItemCustom.dwPetID );
GLDBMan* pDBMan = m_pGLGaeaServer->GetDBMan ();
if ( pDBMan ) pDBMan->AddJob ( pDeletePet );
// ÆÖÀÌ »èÁ¦µÇ¸é ºÎȰÁ¤º¸¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡ ¾Ë·ÁÁÜ.
CGetRestorePetList *pGetRestorePetList = new CGetRestorePetList ( m_dwCharID, m_dwClientID );
if ( pDBMan ) pDBMan->AddJob ( pGetRestorePetList );
}
else
{
// ¾Ç¼¼»ç¸®¸¦ üũÈÄ ÆÖÀ» DB¿¡¼ »èÁ¦ÇØÁØ´Ù.
GLPET* pNewPet = new GLPET ();
CGetPet* pGetPet = new CGetPet ( pNewPet,
pINVENITEM_DEL->sItemCustom.dwPetID,
m_dwClientID,
m_dwCharID,
pINVENITEM_DEL->wPosX,
pINVENITEM_DEL->wPosY,
true );
GLDBMan* pDBMan = m_pGLGaeaServer->GetDBMan ();
if ( pDBMan ) pDBMan->AddJob ( pGetPet );
}
}
// Å»°ÍÀÏ °æ¿ì
if ( pItem->sBasicOp.emItemType == ITEM_VEHICLE && pINVENITEM_DEL->sItemCustom.dwVehicleID != 0 )
{
// ¾Ç¼¼»ç¸®¸¦ üũÈÄ Å»°ÍÀ» DB¿¡¼ »èÁ¦ÇØÁØ´Ù.
GLVEHICLE* pNewVehicle = new GLVEHICLE();
CGetVehicle* pGetVehicle = new CGetVehicle ( pNewVehicle,
pINVENITEM_DEL->sItemCustom.dwVehicleID,
m_dwClientID,
m_dwCharID,
true );
GLDBMan* pDBMan = m_pGLGaeaServer->GetDBMan ();
if ( pDBMan ) pDBMan->AddJob ( pGetVehicle );
}
}
// Àκ¥Å丮¿¡¼ ¾ÆÀÌÅÛ Á¦°Å
m_cInventory.DeleteItem( pNetMsg->wPosX, pNetMsg->wPosY );
MsgFB.emResult = EMGARBAGE_RESULT_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
// »èÁ¦ÇÑ ¾ÆÀÌÅÛ Á¦°Å
GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
NetMsg_Inven_Delete.wPosX = pNetMsg->wPosX;
NetMsg_Inven_Delete.wPosY = pNetMsg->wPosY;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsg_Inven_Delete );
m_ItemGarbagePosX = EM_INVENSIZE_X;
m_ItemGarbagePosY = EM_INVENSIZE_Y;
}
return S_OK;
}
HRESULT GLChar::MsgReqRebuildMoveItem( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_REBUILD_MOVE_ITEM* pNetMsg = (GLMSG::SNET_REBUILD_MOVE_ITEM*)nmg;
GLMSG::SNET_REBUILD_MOVE_ITEM NetMsg;
m_sRebuildItem.RESET();
if( pNetMsg->wPosX != USHRT_MAX && pNetMsg->wPosY != USHRT_MAX )
{
SINVENITEM* pResistItem = m_cInventory.GetItem( pNetMsg->wPosX, pNetMsg->wPosY );
if( pResistItem )
{
// ÀåÂø ¾ÆÀÌÅÛÀ̾î¾ß ¹Ù²Ü ¼ö ÀÖ´Ù
SITEM* pItem = GLItemMan::GetInstance().GetItem( pResistItem->sItemCustom.sNativeID );
if( pItem && pItem->sBasicOp.emItemType == ITEM_SUIT )
{
// ·£´ý¿É¼Ç ÆÄÀÏÀÌ ÁöÁ¤µÇ¾î ÀÖ¾î¾ß °¡´ÉÇÏ´Ù
if( strlen( pItem->sRandomOpt.szNAME ) > 3 )
{
NetMsg.wPosX = pNetMsg->wPosX;
NetMsg.wPosY = pNetMsg->wPosY;
m_sRebuildItem.SET( NetMsg.wPosX, NetMsg.wPosY );
}
}
}
}
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsg );
// °³Á¶ ºñ¿ë Àü¼Û
MsgReqRebuildCostMoney();
return S_OK;
}
HRESULT GLChar::MsgReqRebuildMoveSeal( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_REBUILD_MOVE_SEAL* pNetMsg = (GLMSG::SNET_REBUILD_MOVE_SEAL*)nmg;
GLMSG::SNET_REBUILD_MOVE_SEAL NetMsg;
m_sRebuildSeal.RESET();
m_wSealType = 0;
if( pNetMsg->wPosX != USHRT_MAX && pNetMsg->wPosY != USHRT_MAX )
{
SINVENITEM* pResistItem = m_cInventory.GetItem( pNetMsg->wPosX, pNetMsg->wPosY );
if( pResistItem )
{
SITEM* pItem = GLItemMan::GetInstance().GetItem( pResistItem->sItemCustom.sNativeID );
if( pItem && pItem->sBasicOp.emItemType == ITEM_SEALED_CARD )
{
NetMsg.wPosX = pNetMsg->wPosX;
NetMsg.wPosY = pNetMsg->wPosY;
m_sRebuildSeal.SET( NetMsg.wPosX, NetMsg.wPosY );
m_wSealType = pItem->sSuitOp.wReModelNum;
}
}
}
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsg );
return S_OK;
}
HRESULT GLChar::MsgReqRebuildCostMoney()
{
GLMSG::SNET_REBUILD_COST_MONEY NetMsg;
// °³Á¶ ¾ÆÀÌÅÛÀÌ ¾øÀ¸¹Ç·Î 0À» Àü¼ÛÇÑ´Ù
if( !m_sRebuildItem.VALID() )
{
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsg );
return S_OK;
}
// °³Á¶Ã¢¿¡ ¾ÆÀÌÅÛ ¿Ã¸±¶§ Á¡°ËÇßÀ¸¹Ç·Î ÀÌ·± °æ¿ì´Â ¹ß»ýÇÏÁö ¸»¾Æ¾ßÇÑ´Ù
SITEMCUSTOM sRebuildItem = GET_REBUILD_ITEM();
SITEM* pItem = GLItemMan::GetInstance().GetItem( sRebuildItem.sNativeID );
if( !pItem )
{
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsg );
return S_OK;
}
// °³Á¶Ã¢¿¡ ¾ÆÀÌÅÛ ¿Ã¸±¶§ Á¡°ËÇßÀ¸¹Ç·Î ÀÌ·± °æ¿ì´Â ¹ß»ýÇÏÁö ¸»¾Æ¾ßÇÑ´Ù
SRANDOM_GEN* pRANDOM_SET = GLItemMan::GetInstance().GetItemRandomOpt( sRebuildItem.sNativeID );
if( !pRANDOM_SET )
{
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsg );
return S_OK;
}
m_i64RebuildCost = (LONGLONG)( pItem->sBasicOp.dwBuyPrice * pRANDOM_SET->fS_value );
NetMsg.i64CostMoney = m_i64RebuildCost;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsg );
return S_OK;
}
HRESULT GLChar::MsgReqRebuildInputMoney( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_REBUILD_INPUT_MONEY* pNetMsg = (GLMSG::SNET_REBUILD_INPUT_MONEY*)nmg;
m_i64RebuildInput = (LONGLONG)max( 0, pNetMsg->i64InputMoney );
m_i64RebuildInput = (LONGLONG)min( m_i64RebuildInput, m_lnMoney );
pNetMsg->i64InputMoney = m_i64RebuildInput;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, pNetMsg );
return S_OK;
}
HRESULT GLChar::MsgGiveFood ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPET_REQ_GIVEFOOD* pNetMsg = ( GLMSG::SNETPET_REQ_GIVEFOOD* ) nmg;
GLMSG::SNETPET_REQ_GIVEFOOD_FB NetMsgFB;
SNATIVEID sNativeID;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pInvenItem )
{
NetMsgFB.emFB = EMPET_REQ_GIVEFOOD_FB_INVALIDCARD;
return E_FAIL;
}
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
NetMsgFB.emFB = EMPET_REQ_GIVEFOOD_FB_INVALIDCARD;
return E_FAIL;
}
// ÆÖÄ«µå ¿©ºÎ üũ
if ( pItem->sBasicOp.emItemType != ITEM_PET_CARD )
{
NetMsgFB.emFB = EMPET_REQ_GIVEFOOD_FB_INVALIDCARD;
return E_FAIL;
}
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pHold )
{
NetMsgFB.emFB = EMPET_REQ_GIVEFOOD_FB_INVALIDFOOD;
return E_FAIL;
}
if ( CheckCoolTime( pHold->sBasicOp.sNativeID ) ) return E_FAIL;
// »ç·á ¿©ºÎ üũ
if ( pHold->sBasicOp.emItemType != ITEM_PET_FOOD )
{
NetMsgFB.emFB = EMPET_REQ_GIVEFOOD_FB_INVALIDFOOD;
return E_FAIL;
}
// ¾ÆÀÌÅÛ Á¤º¸°¡ ¼·Î Ʋ¸®¸é ½ÇÇàÇÏÁö ¾Ê´Â´Ù.
SITEM* pPutOnItem = GLItemMan::GetInstance().GetItem ( m_PutOnItems[SLOT_HOLD].sNativeID );
if( pHold != pPutOnItem )
{
NetMsgFB.emFB = EMPET_REQ_GIVEFOOD_FB_INVALIDFOOD;
return E_FAIL;
}
sNativeID = pHold->sBasicOp.sNativeID;
switch ( pHold->sDrugOp.emDrug )
{
case ITEM_DRUG_HP:
{
PGLPETFIELD pMyPet = GLGaeaServer::GetInstance().GetPET ( m_dwPetGUID );
// Logic ¿¡ ÆÖÀÌ ÀÖ´Ù¸é
if ( pMyPet && pMyPet->m_dwPetID == pInvenItem->sItemCustom.dwPetID )
{
// Æê »ç·á¸Ô±â ÀÌÀü ·Î±×
GLITEMLMT::GetInstance().ReqPetAction( pMyPet->m_dwPetID,
pInvenItem->sItemCustom.sNativeID,
EMPET_ACTION_FOOD_BEFORE,
pMyPet->m_nFull );
bool bOK = pMyPet->IncreaseFull ( pHold->sDrugOp.wCureVolume, pHold->sDrugOp.bRatio );
if ( !bOK ) return E_FAIL;
if ( pMyPet->IsValid () ) pMyPet->m_fTIMER = 0.0f;
DoDrugSlotItem ( SLOT_HOLD );
// Æê »ç·á¸Ô±â ÀÌÈÄ ·Î±×
GLITEMLMT::GetInstance().ReqPetAction( pMyPet->m_dwPetID,
pInvenItem->sItemCustom.sNativeID,
EMPET_ACTION_FOOD_AFTER,
pMyPet->m_nFull );
// ÆÖ¿¡°Ô ¸ÔÀ̸¦ ÁØ´Ù.
NetMsgFB.emFB = EMPET_REQ_GIVEFOOD_FB_OK;
NetMsgFB.dwPetID = pMyPet->m_dwPetID;
NetMsgFB.sNativeID = sNativeID;
NetMsgFB.nFull = pMyPet->m_nFull;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsgFB );
}
// ¾ÆÁ÷ Logic ¿¡ ÆÖÀÌ ¾ø´Ù¸é
else
{
// ÆÖ »ý¼º¿©ºÎ È®ÀÎ
if (pInvenItem->sItemCustom.dwPetID <= 0 )
{
GLGaeaServer::GetInstance().GetConsoleMsg()->Write ( LOG_TEXT_CONSOLE, "Invalid ID, PetID %d dwClientID %d",
pInvenItem->sItemCustom.dwPetID, m_dwClientID );
return E_FAIL;
}
// ÆÖÀÇ Æ÷¸¸°¨À» °¡Á®¿Í¼ °»½ÅÇÏ°í ´Ù½Ã DB¿¡ ÀúÀåÇÏ´Â ÄÚµå
CGetPetFull* pDbAction = new CGetPetFull ( m_dwCharID,
pInvenItem->sItemCustom.dwPetID,
m_dwClientID,
pHold->sDrugOp.wCureVolume,
pHold->sDrugOp.bRatio,
sNativeID,
pNetMsg->emPetTYPE );
GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
if ( pDBMan ) pDBMan->AddJob ( pDbAction );
}
}
break;
default:
break;
}
return S_OK;
}
HRESULT GLChar::MsgGetPetFullFromDB ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPET_REQ_GETFULL_FROMDB_FB* pIntMsg = ( GLMSG::SNETPET_REQ_GETFULL_FROMDB_FB* ) nmg;
switch ( pIntMsg->emFB )
{
case EMPET_REQ_GETFULL_FROMDB_FAIL:
{
GLMSG::SNETPET_REQ_GIVEFOOD_FB NetMsgFB;
NetMsgFB.emFB = EMPET_REQ_GETFULL_FROMDB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsgFB );
}
break;
case EMPET_REQ_GETFULL_FROMDB_OK:
{
// ¼Õ¿¡ µç ¾ÆÀÌÅÛ È®ÀÎÇÑ´Ù.
// ¾ÆÀÌÅÛÀÌ ¹Ù²î´Â °æ¿ì°¡ ÀÖ´Ù.
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pHold )
{
GLGaeaServer::GetInstance().GetConsoleMsg()->Write ( LOG_TEXT_CONSOLE,
"Pet Give Full Error CharID : %d", m_dwCharID );
return E_FAIL;
}
if ( pHold->sBasicOp.emItemType != ITEM_PET_FOOD || pHold->sBasicOp.sNativeID != pIntMsg->sNativeID )
{
GLGaeaServer::GetInstance().GetConsoleMsg()->Write ( LOG_TEXT_CONSOLE,
"Pet Give Full Error CharID : %d, Item %d/%d", m_dwCharID,
pHold->sBasicOp.sNativeID.wMainID, pHold->sBasicOp.sNativeID.wSubID );
return E_FAIL;
}
// Æê Æ÷¸¸°¨ ÀÌÀü ·Î±×
GLITEMLMT::GetInstance().ReqPetAction( pIntMsg->dwPetID,
pIntMsg->sNativeID,
EMPET_ACTION_FOOD_BEFORE,
pIntMsg->nFull );
int nFull = pIntMsg->nFull;
int nMaxFull = GLCONST_PET::pGLPET[pIntMsg->emType]->m_nFull;
if ( nFull >= nMaxFull ) break;
if ( pIntMsg->bRatio )
{
nFull += ( nMaxFull*pIntMsg->wCureVolume )/100;
if ( nFull > nMaxFull ) nFull = nMaxFull;
}
else
{
nFull += pIntMsg->wCureVolume;
if ( nFull > nMaxFull ) nFull = nMaxFull;
}
CSetPetFull* pDbAction = new CSetPetFull( m_dwCharID, pIntMsg->dwPetID, nFull );
GLDBMan* pDbMan = GLGaeaServer::GetInstance().GetDBMan ();
if ( pDbMan ) pDbMan->AddJob ( pDbAction );
DoDrugSlotItem ( SLOT_HOLD );
// Æê Æ÷¸¸°¨ ÀÌÀü ·Î±×
GLITEMLMT::GetInstance().ReqPetAction( pIntMsg->dwPetID,
pIntMsg->sNativeID,
EMPET_ACTION_FOOD_AFTER,
nFull );
GLMSG::SNETPET_REQ_GIVEFOOD_FB NetMsgFB;
NetMsgFB.emFB = EMPET_REQ_GIVEFOOD_FB_OK;
NetMsgFB.dwPetID = pIntMsg->dwPetID;
NetMsgFB.sNativeID = pIntMsg->sNativeID;
NetMsgFB.nFull = nFull;
GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsgFB );
}
}
return S_OK;
}
HRESULT GLChar::MsgReqMGameOddEvenEvent( NET_MSG_GENERIC* nmg )
{
GLMSG::SNETPC_MGAME_ODDEVEN* pNetMsg = ( GLMSG::SNETPC_MGAME_ODDEVEN* )nmg;
GLMSG::SNETPC_MGAME_ODDEVEN_FB NetMsgFB;
// Ȧ¦°ÔÀÓNPC À¯È¿¼º üũ
PGLCROW pCrow = m_pLandMan->GetCrow ( pNetMsg->dwNPCID );
if ( !pCrow )
{
NetMsgFB.emResult = EMMGAME_ODDEVEN_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsgFB );
return E_FAIL;
}
float fDist = D3DXVec3Length ( &D3DXVECTOR3(m_vPos-pCrow->GetPosition()) );
float fTalkRange = (float) (pCrow->GetBodyRadius() + GETBODYRADIUS() + 30);
float fTalkableDis = fTalkRange + 20;
// Ȧ¦°ÔÀÓNPC °Å¸® üũ
if ( fDist>fTalkableDis )
{
NetMsgFB.emResult = EMMGAME_ODDEVEN_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsgFB );
return E_FAIL;
}
switch( pNetMsg->emEvent )
{
case EMMGAME_ODDEVEN_OK: return MGOddEvenOK(pNetMsg);
case EMMGAME_ODDEVEN_CANCEL: return MGOddEvenCANCEL(pNetMsg);
case EMMGAME_ODDEVEN_SELECT: return MGOddEvenSelect(pNetMsg);
case EMMGAME_ODDEVEN_AGAIN_OK: return MGOddEvenAGAIN(pNetMsg);
case EMMGAME_ODDEVEN_SHUFFLE: return MGOddEvenShuffle(pNetMsg);
case EMMGAME_ODDEVEN_FINISH: return MGOddEvenFinish(pNetMsg);
default:
{
// ÀûÀýÇÑ À̺¥Æ®°¡ ¾Æ´Ï¶ó¼ °ÔÀÓ Ãë¼Ò
NetMsgFB.emResult = EMMGAME_ODDEVEN_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsgFB );
return S_FALSE;
}
break;
}
return S_OK;
}
HRESULT GLChar::MsgReqItemMix( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_INVEN_ITEM_MIX* pNetMsg = (GLMSG::SNET_INVEN_ITEM_MIX*)nmg;
GLMSG::SNET_INVEN_ITEM_MIX_FB NetMsgFB;
SINVENITEM* pInvenItem[ITEMMIX_ITEMNUM];
// NPCÈ®ÀÎ
// NPC üũ
// Á¶ÇÕ È®ÀÎ
const ITEM_MIX* pItemMix = GLItemMixMan::GetInstance().GetItemMix( pNetMsg->dwKey );
if ( !pItemMix )
{
NetMsgFB.emFB = EMITEM_MIX_FB_NOMIX;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
// ±Ý¾× È®ÀÎ
if( m_lnMoney < pItemMix->dwPrice )
{
NetMsgFB.emFB = EMITEM_MIX_FB_NOMONEY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
// Àκ¥ ¾ÆÀÌÅÛ È®ÀÎ
for ( int i =0; i < ITEMMIX_ITEMNUM; ++i )
{
if( !pNetMsg->sInvenPos[i].VALID() ) continue;
pInvenItem[i] = m_cInventory.GetItem ( pNetMsg->sInvenPos[i].wPosX, pNetMsg->sInvenPos[i].wPosY );
if ( !pInvenItem[i] )
{
NetMsgFB.emFB = EMITEM_MIX_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
SITEM* pItem = GLItemMan::GetInstance().GetItem( pInvenItem[i]->sItemCustom.sNativeID );
if ( !pItem )
{
NetMsgFB.emFB = EMITEM_MIX_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
}
for ( int i =0; i < ITEMMIX_ITEMNUM; ++i )
{
if ( pItemMix->sMeterialItem[i].sNID == NATIVEID_NULL() ) continue;
if ( pItemMix->sMeterialItem[i].nNum != pInvenItem[i]->sItemCustom.wTurnNum )
{
NetMsgFB.emFB = EMITEM_MIX_FB_NOMIXNUM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
}
// °á°ú ¾ÆÀÌÅÛ Ã¼Å©
SITEM* pItemResult = GLItemMan::GetInstance().GetItem( pItemMix->sResultItem.sNID );
if ( !pItemResult )
{
NetMsgFB.emFB = EMITEM_MIX_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
WORD wInsertPosX, wInsertPosY;
BOOL bOk = m_cInventory.FindInsrtable ( pItemResult->sBasicOp.wInvenSizeX, pItemResult->sBasicOp.wInvenSizeY, wInsertPosX, wInsertPosY );
if ( !bOk )
{
// ºÒ°¡´ÉÇÑ °æ¿ì ÀÔ´Ï´Ù.
NetMsgFB.emFB = EMITEM_MIX_FB_NOINVEN;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL; // Àκ¥ °ø°£ ºÎÁ·À¸·Î µÇµ¹¸² ½ÇÆÐ.
}
GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
// Á¶ÇÕ ¾ÆÀÌÅÛ »èÁ¦
for ( int i =0; i < ITEMMIX_ITEMNUM; ++i )
{
if( !pNetMsg->sInvenPos[i].VALID() ) continue;
GLITEMLMT::GetInstance().ReqItemRoute( pInvenItem[i]->sItemCustom, ID_CHAR, m_dwCharID, ID_CHAR, 0,
EMITEM_ROUTE_ITEMMIX, pInvenItem[i]->sItemCustom.wTurnNum );
m_cInventory.DeleteItem( pInvenItem[i]->wPosX, pInvenItem[i]->wPosY );
NetMsg_Inven_Delete.wPosX = pNetMsg->sInvenPos[i].wPosX;
NetMsg_Inven_Delete.wPosY = pNetMsg->sInvenPos[i].wPosY;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsg_Inven_Delete );
}
// ¼ÒÁö±Ý
if ( pItemMix->dwPrice > 0 )
{
CheckMoneyUpdate( m_lnMoney, pItemMix->dwPrice, FALSE, "ITEM_MIX" );
m_bMoneyUpdate = TRUE;
m_lnMoney -= pItemMix->dwPrice;
GLMSG::SNETPC_UPDATE_MONEY NetMsgMoney;
NetMsgMoney.lnMoney = m_lnMoney;
//add money 2
NetMsgMoney.lnVoteP = m_lnVoteP;
//add money 3
NetMsgMoney.lnPremP = m_lnPremP;
//add contributionpoints by CNDev
NetMsgMoney.lnContribP = m_lnContribP;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsgMoney );
}
// ½ÇÆÐÇßÀ» °æ¿ì
float fRate = (float)pItemMix->dwRate;
if ( !RANDOM_GEN( fRate ) )
{
NetMsgFB.emFB = EMITEM_MIX_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_OK;
}
// °á°ú ¾ÆÀÌÅÛ »ý¼º
SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = pItemMix->sResultItem.sNID;
sITEM_NEW.tBORNTIME = CTime::GetCurrentTime().GetTime();
sITEM_NEW.wTurnNum = pItemMix->sResultItem.nNum;
sITEM_NEW.cGenType = EMGEN_ITEMMIX;
sITEM_NEW.cChnID = (BYTE)m_pGLGaeaServer->GetServerChannel();
sITEM_NEW.cFieldID = (BYTE)m_pGLGaeaServer->GetFieldSvrID();
sITEM_NEW.lnGenNum = GLITEMLMT::GetInstance().RegItemGen ( sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );
// ·£´ý ¿É¼Ç »ý¼º.
if( sITEM_NEW.GENERATE_RANDOM_OPT() )
{
GLITEMLMT::GetInstance().ReqRandomItem( sITEM_NEW );
}
// µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
m_cInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
SINVENITEM *pINSERT_ITEM = m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
if ( !pINSERT_ITEM )
{
NetMsgFB.emFB = EMITEM_MIX_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
GLITEMLMT::GetInstance().ReqItemRoute ( pINSERT_ITEM->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID,
EMITEM_ROUTE_ITEMMIX, pINSERT_ITEM->sItemCustom.wTurnNum );
// [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.Data = *pINSERT_ITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
NetMsgFB.emFB = EMITEM_MIX_FB_OK;
NetMsgFB.sNativeID = pINSERT_ITEM->sItemCustom.sNativeID;
NetMsgFB.wTurnNum = pINSERT_ITEM->sItemCustom.wTurnNum;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_OK;
}
//dmk14 | 12-9-16 | item compound
HRESULT GLChar::MsgReqItemCompound( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_INVEN_ITEM_MIX* pNetMsg = (GLMSG::SNET_INVEN_ITEM_MIX*)nmg;
GLMSG::SNET_INVEN_ITEM_MIX_FB NetMsgFB;
// Á¶ÇÕ È®ÀÎ
const ITEM_MIX* pItemMix = GLItemMixMan::GetInstance().GetItemMix( pNetMsg->dwKey );
if ( !pItemMix )
{
NetMsgFB.emFB = EMITEM_MIX_FB_NOMIX;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
// ±Ý¾× È®ÀÎ
if( m_lnMoney < pItemMix->dwPrice )
{
NetMsgFB.emFB = EMITEM_MIX_FB_NOMONEY;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
// Àκ¥ ¾ÆÀÌÅÛ È®ÀÎ
for ( int i =0; i < ITEMMIX_ITEMNUM; ++i )
{
if( pItemMix->sMeterialItem[i].sNID == NATIVEID_NULL() ) continue;
GLInventory::CELL_MAP_ITER iter = m_cInventory.GetItemList()->begin();
GLInventory::CELL_MAP_ITER iter_end = m_cInventory.GetItemList()->end();
bool bFind = false;
bool bCount = false;
DWORD wCount = 0;
for ( ; iter!=iter_end; ++iter )
{
SINVENITEM* pInvenItem = (*iter).second;
if( pInvenItem->sItemCustom.sNativeID == pItemMix->sMeterialItem[i].sNID )
{
bFind = true;
wCount += pInvenItem->sItemCustom.wTurnNum;
SITEM* pItem = GLItemMan::GetInstance().GetItem( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
NetMsgFB.emFB = EMITEM_MIX_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
}
}
bCount = ( wCount >= pItemMix->sMeterialItem[i].nNum ) ? true : false;
if ( !bFind )
{
NetMsgFB.emFB = EMITEM_MIX_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
if ( !bCount )
{
NetMsgFB.emFB = EMITEM_MIX_FB_NOMIXNUM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
}
SITEM* pItemResult = GLItemMan::GetInstance().GetItem( pItemMix->sResultItem.sNID );
if ( !pItemResult )
{
NetMsgFB.emFB = EMITEM_MIX_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
WORD wInsertPosX, wInsertPosY;
BOOL bOk = m_cInventory.FindInsrtable ( pItemResult->sBasicOp.wInvenSizeX, pItemResult->sBasicOp.wInvenSizeY, wInsertPosX, wInsertPosY );
if ( !bOk )
{
// ºÒ°¡´ÉÇÑ °æ¿ì ÀÔ´Ï´Ù.
NetMsgFB.emFB = EMITEM_MIX_FB_NOINVEN;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL; // Àκ¥ °ø°£ ºÎÁ·À¸·Î µÇµ¹¸² ½ÇÆÐ.
}
for ( int i =0; i < ITEMMIX_ITEMNUM; ++i )
{
if( pItemMix->sMeterialItem[i].sNID == NATIVEID_NULL() ) continue;
GLInventory::CELL_MAP_ITER iter = m_cInventory.GetItemList()->begin();
GLInventory::CELL_MAP_ITER iter_end = m_cInventory.GetItemList()->end();
BYTE wCount = pItemMix->sMeterialItem[i].nNum;
for ( ; iter!=iter_end; ++iter )
{
SINVENITEM* pInvenItem = (*iter).second;
SITEM* pItem = GLItemMan::GetInstance().GetItem( pItemMix->sMeterialItem[i].sNID );
if( pInvenItem->sItemCustom.sNativeID == pItemMix->sMeterialItem[i].sNID ) CheckMixMaterial( TRUE );
else continue;
if ( bCheckMixMaterial )
{
if( pItem->ISPILE() )
{
try{
DeletePileItem( pInvenItem->sItemCustom.sNativeID, wCount );
break;
}
catch( std::exception const &DebugFile )
{
CDebugSet::ToLogFile ( "DebugSet Itemix Material" );
}
}
else
{
DeleteItem( pInvenItem->sItemCustom.sNativeID );
break;
}
}
}
}
// ¼ÒÁö±Ý
if ( pItemMix->dwPrice > 0 )
{
CheckMoneyUpdate( m_lnMoney, pItemMix->dwPrice, FALSE, "ITEM_MIX" );
m_bMoneyUpdate = TRUE;
m_lnMoney -= pItemMix->dwPrice;
GLMSG::SNETPC_UPDATE_MONEY NetMsgMoney;
NetMsgMoney.lnMoney = m_lnMoney;
GLGaeaServer::GetInstance().SENDTOCLIENT( m_dwClientID, &NetMsgMoney );
}
// ½ÇÆÐÇßÀ» °æ¿ì
float fRate = (float)pItemMix->dwRate;
if ( !RANDOM_GEN( fRate ) )
{
NetMsgFB.emFB = EMITEM_MIX_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return S_OK;
}
// °á°ú ¾ÆÀÌÅÛ »ý¼º
SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = pItemMix->sResultItem.sNID;
sITEM_NEW.tBORNTIME = CTime::GetCurrentTime().GetTime();
sITEM_NEW.wTurnNum = pItemMix->sResultItem.nNum;
sITEM_NEW.cGenType = EMGEN_ITEMMIX;
sITEM_NEW.cChnID = (BYTE)m_pGLGaeaServer->GetServerChannel();
sITEM_NEW.cFieldID = (BYTE)m_pGLGaeaServer->GetFieldSvrID();
sITEM_NEW.lnGenNum = GLITEMLMT::GetInstance().RegItemGen ( sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );
// ·£´ý ¿É¼Ç »ý¼º.
if( sITEM_NEW.GENERATE_RANDOM_OPT() )
{
GLITEMLMT::GetInstance().ReqRandomItem( sITEM_NEW );
}
// µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
m_cInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
SINVENITEM *pINSERT_ITEM = m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
if ( !pINSERT_ITEM )
{
NetMsgFB.emFB = EMITEM_MIX_FB_FAIL;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
return E_FAIL;
}
GLITEMLMT::GetInstance().ReqItemRoute ( pINSERT_ITEM->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID,
EMITEM_ROUTE_ITEMMIX, pINSERT_ITEM->sItemCustom.wTurnNum );
// [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.Data = *pINSERT_ITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
NetMsgFB.emFB = EMITEM_MIX_FB_OK;
NetMsgFB.sNativeID = pINSERT_ITEM->sItemCustom.sNativeID;
NetMsgFB.wTurnNum = pINSERT_ITEM->sItemCustom.wTurnNum;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
CheckMixMaterial( FALSE );
return S_OK;
}
bool GLChar::DeleteItem ( SNATIVEID sNID )
{
SITEM* pItem = GLItemMan::GetInstance().GetItem ( sNID );
if ( !pItem ) return false;
if ( pItem->ISPILE() ) return false;
WORD wINVENX = pItem->sBasicOp.wInvenSizeX;
WORD wINVENY = pItem->sBasicOp.wInvenSizeY;
std::vector<SNATIVEID> vecDEL;
// Note : ´õ °ãÃÄÁú¼ö ÀÖ´Â ¾ÆÀÌÅÛÀÌ ÀÖ´ÂÁö °Ë»çÇÏ¿© Àκ¥¿¡ µé¾î°¡¾ßÇÏ´Â
// ¾ÆÀÌÅÛ Á¡°Ë ¼ýÀÚ¸¦ °¨¼Ò½ÃÅ´.
GLInventory::CELL_MAP &ItemMap = *m_cInventory.GetItemList();
GLInventory::CELL_MAP_ITER iter = ItemMap.begin();
for ( ; iter!=ItemMap.end(); ++iter )
{
SINVENITEM &sINVENITEM = *(*iter).second;
SITEMCUSTOM &sITEMCUSTOM = sINVENITEM.sItemCustom;
if ( sITEMCUSTOM.sNativeID != sNID ) continue;
sITEMCUSTOM.wTurnNum = 0;
vecDEL.push_back ( SNATIVEID(sINVENITEM.wPosX,sINVENITEM.wPosY) );
break;
}
if ( !vecDEL.size() ) return true;
for ( DWORD i=0; i<vecDEL.size(); ++i )
{
m_cInventory.DeleteItem ( vecDEL[i].wMainID, vecDEL[i].wSubID );
// Note : »èÁ¦ ¸Þ½ÃÁö.
GLMSG::SNETPC_INVEN_DELETE NetMsgDelete;
NetMsgDelete.wPosX = vecDEL[i].wMainID;
NetMsgDelete.wPosY = vecDEL[i].wSubID;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgDelete);
}
return true;
}
HRESULT GLChar::MsgReqInvenWrap ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_INVEN_WRAP *pNetMsg = (GLMSG::SNET_INVEN_WRAP *)nmg;
if ( !VALID_HOLD_ITEM() )
return S_FALSE;
SITEMCUSTOM& sHOLDITEM = m_PutOnItems[SLOT_HOLD];
SITEM* pHold = GLItemMan::GetInstance().GetItem ( sHOLDITEM.sNativeID );
if ( !pHold )
return E_FAIL;
if ( pHold->sBasicOp.emItemType != ITEM_WRAPPER )
return S_FALSE;
if ( CheckCoolTime( pHold->sBasicOp.sNativeID ) )
return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pInvenItem )
return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
return S_FALSE;
if ( pItem->sBasicOp.emItemType != ITEM_SUIT )
return S_FALSE;
if ( pItem->sBasicOp.emItemType == ITEM_SUIT )
{
if ( pItem->sSuitOp.emSuit > SUIT_HANDHELD )
return S_FALSE;
}
if ( pInvenItem->sItemCustom.IsWrap() )
return S_FALSE;
DoDrugSlotItem( SLOT_HOLD );
pInvenItem->sItemCustom.bWrap = true;
GLITEMLMT::GetInstance().ReqItemConversion ( pInvenItem->sItemCustom, ID_CHAR, m_dwCharID );
GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
NetItemUpdate.wPosX = pNetMsg->wPosX;
NetItemUpdate.wPosY = pNetMsg->wPosY;
NetItemUpdate.sItemCustom = pInvenItem->sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);
return S_OK;
}
HRESULT GLChar::MsgReqInvenRemoveWrap ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_INVEN_REMOVE_WRAP *pNetMsg = (GLMSG::SNET_INVEN_REMOVE_WRAP *)nmg;
SINVENITEM* pInvenItem = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pInvenItem )
return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
return S_FALSE;
if ( !pInvenItem->sItemCustom.IsWrap() )
return S_FALSE;
pInvenItem->sItemCustom.bWrap = false;
GLITEMLMT::GetInstance().ReqItemConversion ( pInvenItem->sItemCustom, ID_CHAR, m_dwCharID );
GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
NetItemUpdate.wPosX = pNetMsg->wPosX;
NetItemUpdate.wPosY = pNetMsg->wPosY;
NetItemUpdate.sItemCustom = pInvenItem->sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);
return S_OK;
}
//nondrop card Eduj
HRESULT GLChar::MsgReqNonDrop ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_INVEN_NONDROP *pNetMsg = (GLMSG::SNET_INVEN_NONDROP *)nmg;
if ( !VALID_HOLD_ITEM() )
return S_FALSE;
SITEMCUSTOM& sHOLDITEM = m_PutOnItems[SLOT_HOLD];
SITEM* pHold = GLItemMan::GetInstance().GetItem ( sHOLDITEM.sNativeID );
if ( !pHold )
return E_FAIL;
if ( CheckCoolTime( pHold->sBasicOp.sNativeID ) )
return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pInvenItem )
return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
return S_FALSE;
if ( pItem->sBasicOp.emItemType != ITEM_SUIT )
return S_FALSE;
if ( pInvenItem->sItemCustom.IsNonDrop() )
return S_FALSE;
DoDrugSlotItem( SLOT_HOLD );
pInvenItem->sItemCustom.bNonDrop = true;
GLITEMLMT::GetInstance().ReqItemConversion ( pInvenItem->sItemCustom, ID_CHAR, m_dwCharID );
GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
NetItemUpdate.wPosX = pNetMsg->wPosX;
NetItemUpdate.wPosY = pNetMsg->wPosY;
NetItemUpdate.sItemCustom = pInvenItem->sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);
GLMSG::SNET_INVEN_NONDROP_FB NetMsgBrd;
NetMsgBrd.bNonDrop = TRUE;
SITEM* pItemData = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
std::string strItemName = pItemData->GetName();
StringCchCopy ( NetMsgBrd.szItemName, GLMSG::SNET_INVEN_NONDROP_FB::MAX_ITEM_NAME, strItemName.c_str() );
StringCchCopy ( NetMsgBrd.szName, CHAR_SZNAME, m_szName );
GLGaeaServer::GetInstance().SENDTOAGENT ( &NetMsgBrd );
return S_OK;
}
HRESULT GLChar::MsgReqRemoveNonDrop ( NET_MSG_GENERIC* nmg )
{
GLMSG::SNET_INVEN_REMOVE_NONDROP *pNetMsg = (GLMSG::SNET_INVEN_REMOVE_NONDROP *)nmg;
if ( !VALID_HOLD_ITEM() )
return S_FALSE;
SITEMCUSTOM& sHOLDITEM = m_PutOnItems[SLOT_HOLD];
SITEM* pHold = GLItemMan::GetInstance().GetItem ( sHOLDITEM.sNativeID );
if ( !pHold )
return E_FAIL;
if ( CheckCoolTime( pHold->sBasicOp.sNativeID ) )
return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pInvenItem )
return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
return S_FALSE;
if ( pItem->sBasicOp.emItemType != ITEM_SUIT )
return S_FALSE;
if ( !pInvenItem->sItemCustom.IsNonDrop() )
return S_FALSE;
DoDrugSlotItem( SLOT_HOLD );
pInvenItem->sItemCustom.bNonDrop = false;
GLITEMLMT::GetInstance().ReqItemConversion ( pInvenItem->sItemCustom, ID_CHAR, m_dwCharID );
GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
NetItemUpdate.wPosX = pNetMsg->wPosX;
NetItemUpdate.wPosY = pNetMsg->wPosY;
NetItemUpdate.sItemCustom = pInvenItem->sItemCustom;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);
GLMSG::SNET_INVEN_REMOVE_NONDROP_FB NetMsgBrd;
NetMsgBrd.bNonDrop = FALSE;
SITEM* pItemData = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
std::string strItemName = pItemData->GetName();
StringCchCopy ( NetMsgBrd.szItemName, GLMSG::SNET_INVEN_REMOVE_NONDROP_FB::MAX_ITEM_NAME, strItemName.c_str() );
StringCchCopy ( NetMsgBrd.szName, CHAR_SZNAME, m_szName );
GLGaeaServer::GetInstance().SENDTOAGENT ( &NetMsgBrd );
return S_OK;
}
//Change School
HRESULT GLChar::MsgReqInvenSchoolChange ( NET_MSG_GENERIC* nmg ) //Added by Mharlon
{
GLMSG::SNETPC_INVEN_SCHOOL_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_SCHOOL_CHANGE *)nmg;
GLMSG::SNETPC_INVEN_SCHOOL_CHANGE_FB MsgFB;
SINVENITEM* pINVENITEM = m_cInventory.GetItem ( pNetMsg->wPosX, pNetMsg->wPosY );
if ( !pINVENITEM )
{
MsgFB.emFB = EMINVEN_SCHOOL_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) )
{
MsgFB.emFB = EMINVEN_SCHOOL_CHANGE_FB_COOLTIME;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
/*if ( pITEM->sBasicOp.emItemType!=ITEM_SCHOOL_CHANGE_SG)
{
MsgFB.emFB = EMINVEN_SCHOOL_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( pITEM->sBasicOp.emItemType!=ITEM_SCHOOL_CHANGE_MP)
{
MsgFB.emFB = EMINVEN_SCHOOL_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
if ( pITEM->sBasicOp.emItemType!=ITEM_SCHOOL_CHANGE_PH)
{
MsgFB.emFB = EMINVEN_SCHOOL_CHANGE_FB_NOITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}*/
GLPARTY_FIELD *pParty = GLGaeaServer::GetInstance().GetParty ( m_dwPartyID );
if ( pParty )
{
MsgFB.emFB = EMINVEN_SCHOOL_CHANGE_FB_BADITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
GLClubMan &cClubMan = m_pGLGaeaServer->GetClubMan();
GLCLUB *pCLUB = cClubMan.GetClub ( m_dwGuild );
if ( pCLUB )
{
MsgFB.emFB = EMINVEN_SCHOOL_CHANGE_FB_BADITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
bool bVALIDCLASS = (NULL!=(pITEM->sBasicOp.dwReqCharClass&m_emClass));
if ( !bVALIDCLASS )
{
MsgFB.emFB = EMINVEN_SCHOOL_CHANGE_FB_BADCLASS;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
/*
const GLCHARLOGIC& sCharData = GLGaeaClient::GetInstance().GetCharacterLogic ();
const WORD mySchool = sCharData.m_wSchool;
if ( mySchool == pNetMsg->wSchool )
{
MsgFB.emFB = EMINVEN_SCHOOL_CHANGE_FB_BADITEM;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
return E_FAIL;
}
*/
m_wSchool = pNetMsg->wSchool;
// Note : ?????? ?? ?? ??.
MsgFB.dwID = m_wSchool;
MsgFB.emFB = EMINVEN_SCHOOL_CHANGE_FB_OK;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
// Note : ?? ??? ?? ????? ??.
GLMSG::SNETPC_INVEN_SCHOOL_CHANGE_BRD NetMsgBrd;
NetMsgBrd.dwGaeaID = m_dwGaeaID;
NetMsgBrd.dwID = m_wSchool;
SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );
// [????] ?? ??? ????.
// DB? ??
CSetChaSchool* pDBAction = new CSetChaSchool ( m_dwCharID, m_wSchool );
if ( GLGaeaServer::GetInstance().GetDBMan() )
{
GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDBAction );
}
DoDrugInvenItem ( pNetMsg->wPosX, pNetMsg->wPosY );
return S_OK;
}
glcharactorreq.cpp
PHP Code:
#include "stdafx.h"
#include "DxInputDevice.h"
#include "editmeshs.h"
#include "DxMethods.h"
#include "DxViewPort.h"
#include "DxEffectMan.h"
#include "DxShadowMap.h"
#include "EditMeshs.h"
#include "GLogicData.h"
#include "GLItemMan.h"
#include "DxGlobalStage.h"
#include "GLGaeaClient.h"
#include "stl_Func.h"
#include "DxEffGroupPlayer.h"
#include "GLPartyClient.h"
#include "GLBusStation.h"
#include "GLBusData.h"
#include "GLTaxiStation.h"
#include "RANPARAM.h"
#include "GLMaplist.h"
#include "GLFriendClient.h"
#include "RanFilter.h"
#include "DxClubMan.h"
#include "GLFactEffect.h"
#include "GLQUEST.h"
#include "GLQUESTMAN.h"
#include "GLCharacter.h"
#include "GLItemMixMan.h"
#include "GLItem.h"
#include "../RanClientUILib/Interface/OuterInterface.h"
#include "../RanClientUILib/Interface/UITextControl.h"
#include "../RanClientUILib/Interface/GameTextControl.h"
#include "../RanClientUILib/Interface/InnerInterface.h"
#include "../RanClientUILib/Interface/InventoryPage.h"
#include "../RanClientUILib/Interface/InventoryWindow.h"
#include "../RanClientUILib/Interface/BasicGameMenu.h"
#include "../RanClientUILib/Interface/QBoxButton.h"
#include "../RanClientUILib/Interface/ModalWindow.h"
#include "../RanClientUILib/Interface/ModalCallerID.h"
#include "../RanClientUILib/Interface/ItemShopIconMan.h"
#include "../RanClientUILib/Interface/PetskinMixImage.h"
#include "../RanClientUILib/Interface/MapWindow/LargeMapWindow.h" //Request Crow List NaJDeV
#include "../enginelib/Common/StringUtils.h"
//#include "./ObserverNotifyID.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
void GLCharacter::ReqToggleRun ()
{
if ( IsSTATE(EM_ACT_RUN) )
{
ReSetSTATE(EM_ACT_RUN);
CBasicGameMenu * pGameMenu = CInnerInterface::GetInstance().GetGameMenu();
if( pGameMenu ) pGameMenu->SetFlipRunButton( FALSE );
}
else
{
SetSTATE(EM_ACT_RUN);
CBasicGameMenu * pGameMenu = CInnerInterface::GetInstance().GetGameMenu();
if( pGameMenu ) pGameMenu->SetFlipRunButton( TRUE );
}
m_actorMove.SetMaxSpeed ( GetMoveVelo() );
PGLPETCLIENT pMyPet = GLGaeaClient::GetInstance().GetPetClient ();
if ( pMyPet->IsVALID () )
{
pMyPet->SetMoveState ( IsSTATE(EM_ACT_RUN) );
}
// Note : ¸Þ¼¼Áö ¹ß»ý.
//
GLMSG::SNETPC_MOVESTATE NetMsg;
NetMsg.dwActState = m_dwActState;
NETSENDTOFIELD ( (NET_MSG_GENERIC*) &NetMsg );
}
void GLCharacter::ReqTogglePeaceMode ()
{
if ( IsSTATE(EM_ACT_PEACEMODE) && !m_bVehicle ) ReSetSTATE(EM_ACT_PEACEMODE);
else SetSTATE(EM_ACT_PEACEMODE);
//GLGaeaClient::GetInstance().GetActiveMapID();
if ( IsSafeZone() && GLGaeaClient::GetInstance().GetActiveMap()->GetMapID().wMainID == 22 ) SetSTATE(EM_ACT_PEACEMODE);
m_fIdleTime = 0.0f;
// Note : ¸Þ¼¼Áö ¹ß»ý.
//
GLMSG::SNETPC_ACTSTATE NetMsg;
NetMsg.dwActState = m_dwActState;
NETSEND ( (NET_MSG_GENERIC*) &NetMsg );
}
void GLCharacter::ReqToggleBooster () //add bike booster
{
if ( IsSTATE(EM_ACT_BOOSTER) /*&& m_bVehicle */) ReSetSTATE(EM_ACT_BOOSTER);
else if ( m_bVehicle ) SetSTATE( EM_ACT_BOOSTER );
GLMSG::SNETPC_ACTSTATE NetMsg;
NetMsg.dwActState = m_dwActState;
NETSEND ( (NET_MSG_GENERIC*) &NetMsg );
}
void GLCharacter::ReqVisibleNone ()
{
SetSTATE(EM_REQ_VISIBLENONE);
// Note : (¿¡ÀÌÁ¯Æ®¼¹ö) ¸Þ¼¼Áö ¹ß»ý.
//
GLMSG::SNETPC_ACTSTATE NetMsg;
NetMsg.dwActState = m_dwActState;
NETSEND ( (NET_MSG_GENERIC*) &NetMsg );
}
void GLCharacter::ReqVisibleOff ()
{
SetSTATE(EM_REQ_VISIBLEOFF);
// Note : (¿¡ÀÌÁ¯Æ®¼¹ö) ¸Þ¼¼Áö ¹ß»ý.
//
GLMSG::SNETPC_ACTSTATE NetMsg;
NetMsg.dwActState = m_dwActState;
NETSEND ( (NET_MSG_GENERIC*) &NetMsg );
}
void GLCharacter::ReqVisibleOn ()
{
ReSetSTATE(EM_REQ_VISIBLENONE);
ReSetSTATE(EM_REQ_VISIBLEOFF);
// Note : (¿¡ÀÌÁ¯Æ®¼¹ö) ¸Þ¼¼Áö ¹ß»ý.
//
GLMSG::SNETPC_ACTSTATE NetMsg;
NetMsg.dwActState = m_dwActState;
NETSEND ( (NET_MSG_GENERIC*) &NetMsg );
}
// *****************************************************
// Desc: Ãⱸ ³ª°¡±â ¿äû
// *****************************************************
void GLCharacter::ReqGateOut ()
{
if ( IsSTATE(EM_REQ_GATEOUT) ) return;
if ( IsSTATE(EM_ACT_WAITING) ) return;
DWORD dwGateID = DetectGate ();
if ( dwGateID==UINT_MAX ) return;
PLANDMANCLIENT pLandMClient = GLGaeaClient::GetInstance().GetActiveMap();
if ( !pLandMClient ) return;
DxLandGateMan *pLandGateMan = &pLandMClient->GetLandGateMan();
if ( !pLandGateMan ) return;
PDXLANDGATE pLandGate = pLandGateMan->FindLandGate ( dwGateID );
if ( !pLandGate ) return;
SNATIVEID sMapID = pLandGate->GetToMapID();
SMAPNODE *pMapNode = GLGaeaClient::GetInstance().FindMapNode ( sMapID );
if ( !pMapNode ) return;
// TODO : +, quest, ÆÄƼ¿ø üũ´Â ÇâÈÄ ±¸Çö, Ŭ¶óÀÌ¾ðÆ®¿¡¼¸¸ ó¸®Çϰí ÀÖÀ½. ¼¹ö¿¡¼ Á¡°ËÀº ³ªÁß¿¡.
//
// TODO : Ãⱸ »ç¿ë Á¶°ÇÀ» °Ë»çÇÏ¿©¾ß ÇÏÁö¸¸ ÇöÀç ¿¡ÀÌÁ¯Æ® ¼¹ö¿¡¼ È®ÀÎÇÒ ¼ö ÀÖ´Â
// Äɸ¯ÅÍ Á¤º¸ÀÇ ÇѰ谡 ÀÖÀ¸¹Ç·Î Ŭ¶óÀÌ¾ðÆ®¿¡¼¸¸ È®Àεǰí ÀÖÀ½.
//
EMREQFAIL emReqFail(EMREQUIRE_COMPLETE);
GLLevelFile cLevelFile;
BOOL bOk = cLevelFile.LoadFile ( pMapNode->strFile.c_str(), TRUE, NULL );
if ( !bOk ) return;
if ( GLGaeaClient::GetInstance().GetPetClient()->IsVALID() )
{
CInnerInterface &cINTERFACE1 = CInnerInterface::GetInstance();
cINTERFACE1.PrintMsgTextDlg( NS_UITEXTCOLOR::DISABLE, "Please disable your pet first.");
return;
}
SLEVEL_REQUIRE* pRequire = cLevelFile.GetLevelRequire ();
emReqFail = pRequire->ISCOMPLETE ( this );
if ( emReqFail != EMREQUIRE_COMPLETE )
{
CInnerInterface &cINTERFACE = CInnerInterface::GetInstance();
switch ( emReqFail )
{
case EMREQUIRE_LEVEL:
{
if( pRequire->m_signLevel == EMSIGN_FROMTO )
{
cINTERFACE.PrintMsgTextDlg( NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_LEVEL2"),
pRequire->m_wLevel,
pRequire->m_wLevel2 );
}else{
std::string strSIGN = ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signLevel].c_str());
if( RANPARAM::emSERVICE_TYPE == EMSERVICE_THAILAND )
{
cINTERFACE.PrintMsgTextDlg( NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_LEVEL"),
strSIGN.c_str(),
pRequire->m_wLevel );
}
else
{
cINTERFACE.PrintMsgTextDlg( NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_LEVEL"),
pRequire->m_wLevel,
strSIGN.c_str() );
}
}
}
break;
case EMREQUIRE_ITEM:
{
SITEM *pItem = GLItemMan::GetInstance().GetItem ( pRequire->m_sItemID );
if ( pItem )
{
cINTERFACE.PrintMsgTextDlg
(
NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_ITEM"),
pItem->GetName()
);
}
}
break;
case EMREQUIRE_SKILL:
{
PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( pRequire->m_sSkillID );
if ( pSkill )
{
cINTERFACE.PrintMsgTextDlg
(
NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_SKILL"),
pSkill->GetName()
);
}
}
break;
case EMREQUIRE_LIVING:
{
std::string strSIGN = ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signLiving].c_str());
cINTERFACE.PrintMsgTextDlg
(
NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_PREMIUM"),
pRequire->m_nLiving,
strSIGN.c_str() // 1
);
}
break;
case EMREQUIRE_BRIGHT:
{
std::string strSIGN = ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signBright].c_str());
cINTERFACE.PrintMsgTextDlg
(
NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_REBORN"),
pRequire->m_nBright,
strSIGN.c_str()
);
}
break;
case EMREQUIRE_QUEST_COM:
{
CString strQUEST = "quest";
GLQUEST *pQUEST = GLQuestMan::GetInstance().Find ( pRequire->m_sComQuestID.dwID );
if ( pQUEST ) strQUEST = pQUEST->GetTITLE();
cINTERFACE.PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQUIRE_QUEST_COM"), strQUEST.GetString() );
}
break;
case EMREQUIRE_QUEST_ACT:
{
CString strQUEST = "quest";
GLQUEST *pQUEST = GLQuestMan::GetInstance().Find ( pRequire->m_sActQuestID.dwID );
if ( pQUEST ) strQUEST = pQUEST->GetTITLE();
cINTERFACE.PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQUIRE_QUEST_ACT"), strQUEST.GetString() );
}
break;
default:
cINTERFACE.PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("MAP_REQUIRE_FAIL") );
break;
};
// Note : Ãⱸ »ç¿ë ±ÇÇÑÀÌ ¾ÈµÉ °æ¿ì. GM level ÀÌ»óÀÏ °æ¿ì Á¶°Ç ¹«½Ã.
//
if ( m_dwUserLvl < USER_GM3 ) return;
}
if( pMapNode->bInstantMap )
{
// Note : ÀνºÅϽº ¸Ê »ý¼º ¿äû
//
GLMSG::SNETREQ_CREATE_INSTANT_MAP_REQ NetMsg;
NetMsg.dwGateID = dwGateID;
NETSENDTOFIELD ( &NetMsg );
SetSTATE(EM_REQ_GATEOUT);
return;
}
DISABLEALLLANDEFF();
// Note : Ãⱸ ³ª°¡±â ¿äû ¸Þ½ÃÁö ¹ß»ý.
//
GLMSG::SNETREQ_GATEOUT_REQ NetMsg;
NetMsg.dwGateID = dwGateID;
NETSENDTOFIELD ( &NetMsg );
SetSTATE(EM_REQ_GATEOUT);
}
bool GLCharacter::ReqGESTURE ( int nMOTION, bool bCOMMAND )
{
// Note : ¸ð¼Ç Á¾·ù°¡ ÆòÈ ¸ðµåÀÏ °æ¿ì¸¸ Á¦½ºÃĸ¦ ÇÒ ¼ö ÀÖ´Ù.
PLANDMANCLIENT pLand = GLGaeaClient::GetInstance().GetActiveMap();
BOOL bPeaceZone = pLand ? pLand->IsPeaceZone() : FALSE;
// Note : ¸í·É¾î·Î ±¸µ¿µÇ´Â Á¦½ºÃÄÀÏ °æ¿ì. Æòȸðµå·Î Á¯È¯.
if ( bCOMMAND )
{
if ( !bPeaceZone && !IsSTATE(EM_ACT_PEACEMODE) )
{
if ( IsACTION(GLAT_IDLE) ) ReqTogglePeaceMode();
}
}
if ( !bPeaceZone && IsSTATE(EM_ACT_PEACEMODE) )
{
bPeaceZone = TRUE;
}
if ( !bPeaceZone ) return false;
// Å»°Í ž½ÂÁßÀ϶§ Á¦½ºÃÄ ±ÝÁö
if ( m_bVehicle ) return true;
// Note : ÇØ´ç Á¦½ºÃÄ ¿¡´Ï¸ÞÀ̼ÇÀÌ Á¸Á¦½Ã ±¸µ¿.
PANIMCONTNODE pNODE = m_pSkinChar->GETANI ( AN_GESTURE, EMANI_SUBTYPE(nMOTION) );
if ( !pNODE ) return false;
// Note : ½Åü°¡ Á¤»óÀûÀ϶§ ±¸µ¿.
if ( !IsValidBody() ) return false;
// Note : Á¦½ºÃĸ¦ ÇàÇÔ.
m_dwANISUBGESTURE = (DWORD) nMOTION;
TurnAction(GLAT_TALK);
// Note : ¼¹ö·Î ¸Þ½ÃÁö Àü¼Û.
GLMSG::SNETPC_REQ_GESTURE NetMsg;
NetMsg.dwID = m_dwANISUBGESTURE;
NETSENDTOFIELD ( &NetMsg );
return true;
}
inline bool GLCharacter::IsInsertToInven ( PITEMCLIENTDROP pItemDrop )
{
GASSERT(pItemDrop&&"GLChar::IsItemToInven()");
if ( !pItemDrop ) return false;
SITEM *pItem = GLItemMan::GetInstance().GetItem(pItemDrop->sItemClient.sNativeID);
if ( !pItem ) return false;
if ( pItem->ISPILE() )
{
WORD wINVENX = pItem->sBasicOp.wInvenSizeX;
WORD wINVENY = pItem->sBasicOp.wInvenSizeY;
// °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
WORD wPILENUM = pItem->sDrugOp.wPileNum;
SNATIVEID sNID = pItem->sBasicOp.sNativeID;
// Note : ³Ö±â ¿äûµÈ ¾ÆÀÌÅÛ¼ö. ( ÀÜ¿©·®. )
//
WORD wREQINSRTNUM = ( pItemDrop->sItemClient.wTurnNum );
BOOL bITEM_SPACE = TRUE;
#if defined(VN_PARAM) //vietnamtest%%%
if( m_dwVietnamGainType == GAINTYPE_EMPTY )
{
bITEM_SPACE = m_cVietnamInventory.ValidPileInsrt ( wREQINSRTNUM, sNID, wPILENUM, wINVENX, wINVENY );
}else{
bITEM_SPACE = m_cInventory.ValidPileInsrt ( wREQINSRTNUM, sNID, wPILENUM, wINVENX, wINVENY );
}
#else
bITEM_SPACE = m_cInventory.ValidPileInsrt ( wREQINSRTNUM, sNID, wPILENUM, wINVENX, wINVENY );
#endif
if ( !bITEM_SPACE ) return false;
}
else
{
WORD wPosX, wPosY;
BOOL bOk = TRUE;
#if defined(VN_PARAM) //vietnamtest%%%
if( m_dwVietnamGainType == GAINTYPE_EMPTY )
{
bOk = m_cVietnamInventory.FindInsrtable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
}else{
bOk = m_cInventory.FindInsrtable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
}
#else
bOk = m_cInventory.FindInsrtable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
#endif
if ( !bOk ) return false;
}
return true;
}
// Note : ÇÊµå ¾ÆÀÌÅÛ(µ·) ÁÖÀ»¶§.
HRESULT GLCharacter::ReqFieldTo ( const STARGETID &sTargetID, bool bPet )
{
if ( VALID_HOLD_ITEM () ) return E_FAIL;
if ( ValidWindowOpen() ) return E_FAIL;
PLANDMANCLIENT pLAND = GLGaeaClient::GetInstance().GetActiveMap();
if ( !pLAND ) return E_FAIL;
//if ( sTargetID.emCrow==CROW_ITEM )
//{
// if ( pLAND->ISITEM_PICKDELAY ( sTargetID.dwID ) ) return E_FAIL;
//}
//else if ( sTargetID.emCrow==CROW_MONEY )
//{
// if ( pLAND->ISMONEY_PICKDELAY ( sTargetID.dwID ) ) return E_FAIL;
//}
//BOOL bInventoryOpen = FALSE;
//bInventoryOpen = CInnerInterface::GetInstance().IsInventoryWindowOpen ();
//if ( sTargetID.emCrow==CROW_ITEM && bInventoryOpen )
//{
// // ¸Þ½ÃÁö ¹ß»ý.
// GLMSG::SNETPC_REQ_FIELD_TO_HOLD NetMsg;
// NetMsg.dwGlobID = sTargetID.dwID;
// NETSENDTOFIELD ( &NetMsg );
// // ´ÙÀ½ ¸Þ½ÃÁö Áö¿¬ ÁöÁ¤.
// pLAND->SETITEM_PICKDELAY ( sTargetID.dwID );
//}
//else
{
// Note : ¸Þ½ÃÁö ¼Û½ÅÀü¿¡ À¯È¿ÇÒÁö¸¦ ¹Ì¸® °Ë»çÇÔ.
//
// »ç¸ÁÈ®ÀÎ
if ( !IsValidBody() ) return E_FAIL;
// °Å¸® üũ
const D3DXVECTOR3 &vTarPos = sTargetID.vPos;
// °Å¸® üũ
D3DXVECTOR3 vPos;
if ( bPet )
{
GLPetClient* pMyPet = GLGaeaClient::GetInstance().GetPetClient ();
if ( pMyPet->IsVALID() ) vPos = pMyPet->GetPosition();
}
else vPos = m_vPos;
D3DXVECTOR3 vDistance = vPos - vTarPos;
float fDistance = D3DXVec3Length ( &vDistance );
WORD wTarBodyRadius = 4;
WORD wTakeRange = wTarBodyRadius + GETBODYRADIUS() + 2;
WORD wTakeAbleDis = wTakeRange + 15;
if ( fDistance>wTakeAbleDis )
{
CInnerInterface::GetInstance().PrintMsgText( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMTAKE_FB_DISTANCE") );
return E_FAIL;
}
if ( sTargetID.emCrow==CROW_ITEM )
{
PITEMCLIENTDROP pItemDrop = pLAND->GetItem ( sTargetID.dwID );
if ( !pItemDrop ) return E_FAIL;
if( CInnerInterface::GetInstance().GetQBoxButton()->GetQBoxEnable() == FALSE )
{
SITEM *pItem = GLItemMan::GetInstance().GetItem(pItemDrop->sItemClient.sNativeID);
if( pItem != NULL && pItem->sBasicOp.emItemType==ITEM_QITEM )
{
CInnerInterface::GetInstance().PrintMsgText( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("QBOX_OPTION_DISABLE_MSG") );
return E_FAIL;
}
}
// Note : Àκ¥¿¡ ³ÖÀ»¼ö ÀÖ´ÂÁö °Ë»ç.
//
BOOL bOk = IsInsertToInven ( pItemDrop );
if ( !bOk )
{
#if defined(VN_PARAM) //vietnamtest%%%
if( m_dwVietnamGainType == GAINTYPE_EMPTY ) return E_FAIL;
#endif
// ÀιêÀÌ °¡µæÂþÀ½.
// ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_REQ_FIELD_TO_HOLD NetMsg;
NetMsg.dwGlobID = sTargetID.dwID;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// ´ÙÀ½ ¸Þ½ÃÁö Áö¿¬ ÁöÁ¤.
// pLAND->SETITEM_PICKDELAY ( sTargetID.dwID );
}
else if ( sTargetID.emCrow==CROW_MONEY )
{
PMONEYCLIENTDROP pMoney = GLGaeaClient::GetInstance().GetActiveMap()->GetMoney ( sTargetID.dwID );
if ( !pMoney ) return E_FAIL;
// ´ÙÀ½ ¸Þ½ÃÁö Áö¿¬ ÁöÁ¤.
// pLAND->SETMONEY_PICKDELAY ( sTargetID.dwID );
}
// ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_REQ_FIELD_TO_INVEN NetMsg;
NetMsg.emCrow = sTargetID.emCrow;
NetMsg.dwID = sTargetID.dwID;
NetMsg.bPet = bPet;
NETSENDTOFIELD ( &NetMsg );
}
return S_OK;
}
// Note : Àκ¥Å丮 ¾ÆÀÌÅÛ µé¶§, ³õÀ»¶§, ±³È¯ÇÒ¶§, ÇÕÄ¥¶§.
HRESULT GLCharacter::ReqInvenTo ( WORD wPosX, WORD wPosY )
{
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
// Note : Æ®·¡À̵å Ȱ¼ºÈ½Ã¿¡.
//
if ( GLTradeClient::GetInstance().Valid() )
{
if ( pInvenItem ) GLTradeClient::GetInstance().SetPreItem ( SINVEN_POS( pInvenItem->wPosX, pInvenItem->wPosY ) );
else GLTradeClient::GetInstance().ReSetPreItem ();
return S_OK;
}
if( ValidRebuildOpen() || ValidGarbageOpen() || ValidItemMixOpen() ) // ITEMREBUILD_MARK
{
if( m_sPreInventoryItem.wPosX == wPosX && m_sPreInventoryItem.wPosY == wPosY )
{
m_sPreInventoryItem.RESET();
}
else
{
if( pInvenItem )
m_sPreInventoryItem.SET( wPosX, wPosY );
else
m_sPreInventoryItem.RESET();
}
return S_OK;
}
if ( !VALID_HOLD_ITEM () && !pInvenItem ) return E_FAIL;
if ( VALID_HOLD_ITEM () && pInvenItem )
{
#if defined(VN_PARAM) //vietnamtest%%%
const SITEMCUSTOM& sCustom = GET_HOLD_ITEM();
if ( !sCustom.bVietnamGainItem )
#endif
{
GLMSG::SNETPC_REQ_INVEN_EX_HOLD NetMsg;
NetMsg.wPosX = pInvenItem->wPosX;
NetMsg.wPosY = pInvenItem->wPosY;
NETSENDTOFIELD ( &NetMsg );
}
}
else if ( pInvenItem )
{
GLMSG::SNETPC_REQ_INVEN_TO_HOLD NetMsg;
NetMsg.wPosX = pInvenItem->wPosX;
NetMsg.wPosY = pInvenItem->wPosY;
NETSENDTOFIELD ( &NetMsg );
}
else if ( VALID_HOLD_ITEM () )
{
#if defined(VN_PARAM) //vietnamtest%%%
const SITEMCUSTOM& sCustom = GET_HOLD_ITEM();
if ( !sCustom.bVietnamGainItem || ( sCustom.bVietnamGainItem && m_dwVietnamInvenCount > 0 ) )
#endif
{
// Note : ¸Þ½ÃÁö ¼Û½ÅÀü¿¡ À¯È¿ÇÒÁö¸¦ ¹Ì¸® °Ë»çÇÔ.
//
SITEM* pItem = GLItemMan::GetInstance().GetItem ( GET_HOLD_ITEM().sNativeID );
GASSERT(pItem&&"¾ÆÀÌÅÆ ´ëÀÌÅͰ¡ Á¸Á¦ÇÏÁö ¾ÊÀ½");
BOOL bOk = m_cInventory.IsInsertable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk )
{
// ÀιêÀÌ °¡µæÂþÀ½.
return E_FAIL;
}
GLMSG::SNETPC_REQ_HOLD_TO_INVEN NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
#if defined(VN_PARAM) //vietnamtest%%%
NetMsg.bUseVietnamInven = sCustom.bVietnamGainItem;
#else
NetMsg.bUseVietnamInven = FALSE;
#endif
NETSENDTOFIELD ( &NetMsg );
}
#if defined(VN_PARAM) //vietnamtest%%%
else
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_VIETNAM_ITEMGET_FAILED") );
return E_FAIL;
}
#endif
}
return S_OK;
}
// Note : º£Æ®³² Ž´Ð ¹æÁö Àκ¥Å丮 ¾ÆÀÌÅÛ µé¶§, ³õÀ»¶§, ±³È¯ÇÒ¶§, ÇÕÄ¥¶§.
HRESULT GLCharacter::ReqVNInvenTo ( WORD wPosX, WORD wPosY )
{
if ( !IsValidBody() ) return E_FAIL;
if ( ValidWindowOpen() ) return E_FAIL;
SINVENITEM* pInvenItem = m_cVietnamInventory.FindPosItem ( wPosX, wPosY );
if ( !VALID_HOLD_ITEM () && !pInvenItem ) return E_FAIL;
const SITEMCUSTOM& sCustom = GET_HOLD_ITEM();
if ( VALID_HOLD_ITEM () && pInvenItem )
{
if ( sCustom.bVietnamGainItem )
{
GLMSG::SNETPC_REQ_VNGAIN_EX_HOLD NetMsg;
NetMsg.wPosX = pInvenItem->wPosX;
NetMsg.wPosY = pInvenItem->wPosY;
NETSENDTOFIELD ( &NetMsg );
}
}
else if ( pInvenItem )
{
GLMSG::SNETPC_REQ_VNGAIN_TO_HOLD NetMsg;
NetMsg.wPosX = pInvenItem->wPosX;
NetMsg.wPosY = pInvenItem->wPosY;
NETSENDTOFIELD ( &NetMsg );
}
else if ( VALID_HOLD_ITEM () && sCustom.bVietnamGainItem )
{
// Note : ¸Þ½ÃÁö ¼Û½ÅÀü¿¡ À¯È¿ÇÒÁö¸¦ ¹Ì¸® °Ë»çÇÔ.
//
SITEM* pItem = GLItemMan::GetInstance().GetItem ( GET_HOLD_ITEM().sNativeID );
GASSERT(pItem&&"¾ÆÀÌÅÆ ´ëÀÌÅͰ¡ Á¸Á¦ÇÏÁö ¾ÊÀ½");
BOOL bOk = m_cVietnamInventory.IsInsertable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk )
{
// ÀιêÀÌ °¡µæÂþÀ½.
return E_FAIL;
}
GLMSG::SNETPC_REQ_HOLD_TO_VNGAIN NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
}
return S_OK;
}
// Note : º£Æ®³² Àκ¥Å丮¿¡¼ ¿À¸¥ÂÊ ¹öưÀ¸·Î ¾ÆÀÌÅÛÀ» ¿Å±æ °æ¿ì
HRESULT GLCharacter::ReqVietemInvenTo (WORD wPosX, WORD wPosY )
{
if( m_dwVietnamInvenCount <= 0 )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_VIETNAM_ITEMGET_FAILED") );
return E_FAIL;
}
SINVENITEM* pInvenItem = m_cVietnamInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem ) return E_FAIL;
WORD wINVENX = pItem->sBasicOp.wInvenSizeX;
WORD wINVENY = pItem->sBasicOp.wInvenSizeY;
// Note : Àκ¥¿¡ ¿©À¯ °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ç.
//
//BOOL bITEM_SPACE(FALSE);
//if ( pItem->ISPILE() )
//{
// // °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
// WORD wPILENUM = pItem->sDrugOp.wPileNum;
// WORD wREQINSRTNUM = ( wBuyNum * pItem->GETAPPLYNUM() );
// bITEM_SPACE = m_cInventory.ValidPileInsrt ( wREQINSRTNUM, sBUYNID, wPILENUM, wINVENX, wINVENY );
//}
//else
//{
// GASSERT(wBuyNum==1&&"°ãħÀÌ ºÒ°¡´ÉÇÑ ¾ÆÀÌÅÛÀº 1°³¾¿¸¸ ±¸ÀÔ °¡´ÉÇÕ´Ï´Ù.");
// // ÀÏ¹Ý ¾ÆÀÌÅÛÀÇ °æ¿ì.
// WORD wInsertPosX(0), wInsertPosY(0);
// bITEM_SPACE = m_cInventory.FindInsrtable ( wINVENX, wINVENY, wInsertPosX, wInsertPosY );
//}
WORD wInsertPosX(0), wInsertPosY(0);
BOOL bITEM_SPACE(FALSE);
bITEM_SPACE = m_cInventory.FindInsrtable ( wINVENX, wINVENY, wInsertPosX, wInsertPosY );
if ( !bITEM_SPACE )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMCHARGED_ITEM_GET_FB_NOINVEN") );
return E_FAIL;
}
// ±¸ÀÔ ¿äû ¸Þ½ÃÁö.
GLMSG::SNETPC_REQ_VNINVEN_TO_INVEN NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// Note : º£Æ®³² Àκ¥Å丮ÀÇ ¾ÆÀÌÅÛ Àüü »èÁ¦
HRESULT GLCharacter::ReqVNInveReset ()
{
m_cVietnamInventory.DeleteItemAll();
GLMSG::SNETPC_REQ_VNGAIN_INVEN_RESET NetMsg;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqRetrievePoints ()
{
GLMSG::SNETPC_RETRIEVE_POINTS NetMsg;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// *****************************************************
// Desc: ¾ÆÀÌÅÛ ÀÎþƮ ½Ãµµ
// *****************************************************
HRESULT GLCharacter::ReqGrinding ( WORD wPosX, WORD wPosY )
{
if ( !IsValidBody() ) return E_FAIL;
if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem ) return E_FAIL;
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pHold ) return S_FALSE;
if ( pHold->sBasicOp.emItemType != ITEM_GRINDING ) return S_FALSE;
BOOL bGrinding = pItem->sBasicOp.emItemType==ITEM_SUIT && pItem->sSuitOp.wReModelNum>0;
if ( !bGrinding )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("GRINDING_NOITEM") );
return S_FALSE;
}
if ( pHold->sGrindingOp.emTYPE == EMGRINDING_DAMAGE || pHold->sGrindingOp.emTYPE == EMGRINDING_DEFENSE )
{
if ( pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE)>=GLCONST_CHAR::wGRADE_MAX )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("GRINDING_MAX") );
return S_FALSE;
}
}
else
{
if ( pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE)>=GLCONST_CHAR::wGRADE_MAX_REGI )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("GRINDING_MAX") );
return S_FALSE;
}
}
// Note : ¿¬¸¶Á¦ µî±Þ, ³·Àº ¿¬¸¶Á¦·Î ³ôÀº ¿¬¸¶ ºÒ°¡´É
//
BYTE cGrade = 0;
cGrade = pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE);
if ( cGrade >= GRADE_HIGH && pHold->sGrindingOp.emGRINDER_TYPE != EMGRINDER_TOP )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("GRINDING_NOT_BEST") );
return S_FALSE;
}
else if ( cGrade >=GRADE_NORMAL && pHold->sGrindingOp.emGRINDER_TYPE < EMGRINDER_HIGH )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("GRINDING_NOT_HIGH") );
return S_FALSE;
}
// ¹æ¾î±¸ ¹× ¹«±â°¡ ÃÖ»óÀ§ µî±Þ±îÁö ÀÎæƮ°¡ µÇ´ÂÁö È®ÀÎ
if ( cGrade >= GRADE_HIGH && pItem->sGrindingOp.emGRINDER_TYPE != EMGRINDER_TOP )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("GRINDING_NOT_BESTITEM") );
return S_FALSE;
}
// Note : ¿¬¸¶Á¦ ¼ö·® È®ÀÎ
if ( cGrade >= GRADE_HIGH )
{
if ( GLCONST_CHAR::wUSE_GRADE_NUM[cGrade-GRADE_HIGH] > GET_SLOT_ITEM(SLOT_HOLD).wTurnNum )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("GRINDING_NOT_NUM"), GLCONST_CHAR::wUSE_GRADE_NUM[cGrade-GRADE_HIGH] );
return S_FALSE;
}
}
//Note : °í±Þ ¿¬¸¶Á¦ÀÏ °æ¿ìµî GRADE_NORMAL ±Þ ¹Ì¸¸ ¿¬¸¶ ºÒ°¡´É.
//
//if ( pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE)<GRADE_NORMAL && pHold->sGrindingOp.bHIGH )
//{
// CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("GRINDING_NOT_LOW") );
// return S_FALSE;
//}
if ( pItem->sSuitOp.gdDamage == GLPADATA(0,0) )
{
if ( pHold->sGrindingOp.emCLASS != EMGRINDING_CLASS_CLOTH )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("GRINDING_DEFCLASS") );
return S_FALSE;
}
}
else
{
if ( pHold->sGrindingOp.emCLASS != EMGRINDING_CLASS_ARM )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("GRINDING_DEFCLASS") );
return S_FALSE;
}
}
// Note : ¼¹ö¿¡ ¿¬¸¶ ½Ãµµ ¿äû.
//
GLMSG::SNET_INVEN_GRINDING NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqDisguise ( WORD wPosX, WORD wPosY )
{
if ( !IsValidBody() ) return E_FAIL;
if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem ) return E_FAIL;
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pHold ) return S_FALSE;
if ( !pHold->sBasicOp.IsDISGUISE() ) return S_FALSE;
if ( pItem->sBasicOp.IsDISGUISE() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_DISGUISE_FB_FAIL") );
return S_FALSE;
}
if ( ( pHold->sBasicOp.dwReqCharClass & pItem->sBasicOp.dwReqCharClass ) == NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_DISGUISE_FB_DEFSUIT") );
return S_FALSE;
}
if ( pHold->sBasicOp.emItemType != ITEM_SUIT )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_DISGUISE_FB_NOTSUIT") );
return S_FALSE;
}
if ( pItem->sBasicOp.emItemType != ITEM_SUIT )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_DISGUISE_FB_NOTSUIT") );
return S_FALSE;
}
if ( pHold->sSuitOp.emSuit != pItem->sSuitOp.emSuit )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_DISGUISE_FB_DEFSUIT") );
return S_FALSE;
}
if ( pInvenItem->sItemCustom.nidDISGUISE!=SNATIVEID(false) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_DISGUISE_FB_ALREADY") );
return S_FALSE;
}
GLMSG::SNET_INVEN_DISGUISE NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqCleanser ( WORD wPosX, WORD wPosY )
{
if ( !IsValidBody() ) return E_FAIL;
if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem ) return E_FAIL;
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pHold ) return S_FALSE;
//if ( pHold->sBasicOp.emItemType!=ITEM_CLEANSER )
//{
// CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_CLEANSER_FB_NOCLEANSER") );
// return S_FALSE;
//}
if ( pInvenItem->sItemCustom.nidDISGUISE==SNATIVEID(false) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_CLEANSER_FB_NONEED") );
return S_FALSE;
}
GLMSG::SNET_INVEN_CLEANSER NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqCharCard ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem ) return E_FAIL;
//if ( pItem->sBasicOp.emItemType!=ITEM_CHARACTER_CARD ) return E_FAIL;
GLMSG::SNET_INVEN_CHARCARD NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// Note : â°í Ä«µå »ç¿ë.
HRESULT GLCharacter::ReqStorageCard ( WORD wPosX, WORD wPosY, WORD wSTORAGE )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_STORAGECARD_FB_NOITEM") );
return E_FAIL;
}
//if ( pItem->sBasicOp.emItemType!=ITEM_STORAGE_CARD )
//{
// CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_STORAGECARD_FB_NOITEM") );
// return E_FAIL;
//}
if ( wSTORAGE < 1 || wSTORAGE>=(EMSTORAGE_CHANNEL-1) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_STORAGECARD_FB_INVNUM") );
return E_FAIL;
}
GLMSG::SNET_INVEN_STORAGECARD NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NetMsg.wSTORAGE = wSTORAGE;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqInvenLineCard ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_INVENLINE_FB_NOITEM") );
return E_FAIL;
}
//if ( pItem->sBasicOp.emItemType!=ITEM_INVEN_CARD )
//{
// CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_INVENLINE_FB_NOITEM") );
// return E_FAIL;
//}
if ( m_wINVENLINE >= (EM_INVENSIZE_Y-EM_INVEN_DEF_SIZE_Y-1) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_INVENLINE_FB_MAXLINE") );
return E_FAIL;
}
GLMSG::SNET_INVEN_INVENLINE NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqRemodelOpenCard ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if ( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_REMODELOPEN_FB_NOITEM") );
return E_FAIL;
}
GLMSG::SNET_INVEN_REMODELOPEN NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqGabargeOpenCard ( WORD wPosX, WORD wPosY )
{
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_REMODELOPEN_FB_NOITEM") );
return E_FAIL;
}
GLMSG::SNET_INVEN_GARBAGEOPEN NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqStorageOpenCard ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
// â°í°¡ ¿·ÁÀÖÀ¸¸é â°í ¿¬°áÄ«µå¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù.
if ( CInnerInterface::GetInstance().IsStorageWindowOpen () ) return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_STORAGEOPEN_FB_NOITEM") );
return E_FAIL;
}
//if ( pItem->sBasicOp.emItemType!=ITEM_STORAGE_CONNECT )
//{
// CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_STORAGEOPEN_FB_NOITEM") );
// return E_FAIL;
//}
GLMSG::SNET_INVEN_STORAGEOPEN NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqStorageCloseCard()
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
GLMSG::SNET_INVEN_STORAGECLOSE NetMsg;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqPremiumSet ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_PREMIUMSET_FB_NOITEM") );
return E_FAIL;
}
//if ( pItem->sBasicOp.emItemType!=ITEM_PREMIUMSET )
//{
// CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_PREMIUMSET_FB_NOITEM") );
// return E_FAIL;
//}
GLMSG::SNET_INVEN_PREMIUMSET NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqInvenHairChange ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_HAIR_CHANGE_FB_NOITEM") );
return E_FAIL;
}
//if ( pItem->sBasicOp.emItemType!=ITEM_HAIR )
//{
// CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_HAIR_CHANGE_FB_NOITEM") );
// return E_FAIL;
//}
GLMSG::SNETPC_INVEN_HAIR_CHANGE NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// *****************************************************
// Desc: ¸Ó¸® ½ºÅ¸ÀÏ º¯°æ
// *****************************************************
HRESULT GLCharacter::ReqInvenHairStyleChange ( WORD wHairStyle )
{
GLMSG::SNETPC_INVEN_HAIRSTYLE_CHANGE NetMsg;
NetMsg.wPosX = m_wInvenPosX1;
NetMsg.wPosY = m_wInvenPosY1;
NetMsg.wHairStyle = wHairStyle;
NETSENDTOFIELD ( &NetMsg );
m_wInvenPosX1 = 0;
m_wInvenPosY1 = 0;
return S_OK;
}
// *****************************************************
// Desc: ¸Ó¸® ½ºÅ¸ÀÏ º¯°æ
// *****************************************************
HRESULT GLCharacter::InvenHairStyleChange ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_HAIR_CHANGE_FB_NOITEM") );
return E_FAIL;
}
//if ( pItem->sBasicOp.emItemType!=ITEM_HAIR_STYLE )
//{
// CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_HAIR_CHANGE_FB_NOITEM") );
// return E_FAIL;
//}
CInnerInterface::GetInstance().ShowGroupFocus( HAIRSTYLECARD_WINDOW );
m_wInvenPosX1 = wPosX;
m_wInvenPosY1 = wPosY;
return S_OK;
}
// *****************************************************
// Desc: ¸Ó¸® »ö±ò º¯°æ
// *****************************************************
HRESULT GLCharacter::ReqInvenHairColorChange ( WORD wHairColor )
{
GLMSG::SNETPC_INVEN_HAIRCOLOR_CHANGE NetMsg;
NetMsg.wPosX = m_wInvenPosX2;
NetMsg.wPosY = m_wInvenPosY2;
NetMsg.wHairColor = wHairColor;
NETSENDTOFIELD ( &NetMsg );
m_wInvenPosX2 = 0;
m_wInvenPosY2 = 0;
return S_OK;
}
// *****************************************************
// Desc: ¸Ó¸® »ö±ò º¯°æ
// *****************************************************
HRESULT GLCharacter::InvenHairColorChange ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_HAIR_CHANGE_FB_NOITEM") );
return E_FAIL;
}
//if ( pItem->sBasicOp.emItemType!=ITEM_HAIR_COLOR )
//{
// CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_HAIR_CHANGE_FB_NOITEM") );
// return E_FAIL;
//}
DoModal( ID2GAMEINTEXT("MODAL_HAIRCOLOR_INFO"), MODAL_INFOMATION, OK, MODAL_HAIRCOLOR_INFO );
m_wInvenPosX2 = wPosX;
m_wInvenPosY2 = wPosY;
return S_OK;
}
HRESULT GLCharacter::InvenBikeColorChange ( WORD wPosX, WORD wPosY ) //add bike color
{
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_VEHICLE_CHANGE_FB_NOITEM") );
return E_FAIL;
}
if ( !m_bVehicle )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_VEHICLE_CHANGE_FB_NOVEHICLE") );
return E_FAIL;
}
DoModal( ID2GAMEINTEXT("MODAL_BIKECOLOR_INFO"), MODAL_INFOMATION, OK, MODAL_BIKECOLOR_INFO );
m_wInvenPosX2 = wPosX;
m_wInvenPosY2 = wPosY;
return S_OK;
}
HRESULT GLCharacter::ReqInvenBikeColorChange ( WORD wBikeColor ) //add bike color
{
GLMSG::SNETPC_INVEN_BIKECOLOR_CHANGE NetMsg;
NetMsg.wPosX = m_wInvenPosX2;
NetMsg.wPosY = m_wInvenPosY2;
NetMsg.wBikeColor = wBikeColor;
NETSENDTOFIELD ( &NetMsg );
m_wInvenPosX3 = 0;
m_wInvenPosY3 = 0;
return S_OK;
}
// Note : ¾ó±¼½ºÅ¸ÀÏ º¯°æ.
HRESULT GLCharacter::ReqInvenFaceChange ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_FACE_CHANGE_FB_NOITEM") );
return E_FAIL;
}
//if ( pItem->sBasicOp.emItemType!=ITEM_FACE )
//{
// CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_FACE_CHANGE_FB_NOITEM") );
// return E_FAIL;
//}
GLMSG::SNETPC_INVEN_FACE_CHANGE NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// *****************************************************
// Desc: ¾ó±¼ ½ºÅ¸ÀÏ º¯°æ
// *****************************************************
HRESULT GLCharacter::ReqInvenFaceStyleChange ( WORD wFaceStyle )
{
GLMSG::SNETPC_INVEN_FACESTYLE_CHANGE NetMsg;
NetMsg.wPosX = m_wInvenPosX1;
NetMsg.wPosY = m_wInvenPosY1;
NetMsg.wFaceStyle = wFaceStyle;
NETSENDTOFIELD ( &NetMsg );
m_wInvenPosX1 = 0;
m_wInvenPosY1 = 0;
return S_OK;
}
// *****************************************************
// Desc: ¾ó±¼ ½ºÅ¸ÀÏ º¯°æ
// *****************************************************
HRESULT GLCharacter::InvenFaceStyleChange ( WORD wPosX, WORD wPosY )
{
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_FACE_CHANGE_FB_NOITEM") );
return E_FAIL;
}
CInnerInterface::GetInstance().ShowGroupFocus( FACE_CHANGE_WINDOW );
m_wInvenPosX1 = wPosX;
m_wInvenPosY1 = wPosY;
return S_OK;
}
HRESULT GLCharacter::InvenGenderChange ( WORD wPosX, WORD wPosY )
{
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_GENDER_CHANGE_FB_NOITEM") );
return E_FAIL;
}
if ( pItem->sBasicOp.emItemType != ITEM_GENDER_CHANGE )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_GENDER_CHANGE_FB_ITEMTYPE") );
return E_FAIL;
}
//added by | 08-07-2012 | make extreme can use gender card
/*if ( m_emClass == GLCC_EXTREME_M || m_emClass == GLCC_EXTREME_W )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_GENDER_CHANGE_FB_BADCLASS") );
return E_FAIL;
}*/
DoModal( ID2GAMEINTEXT("MODAL_GENDER_CHANGE"), MODAL_INFOMATION, YESNO, MODAL_GENDER_CHANGE );
m_wInvenPosX1 = wPosX;
m_wInvenPosY1 = wPosY;
return S_OK;
}
HRESULT GLCharacter::ReqInvenGenderChange ( WORD wFace, WORD wHair )
{
GLMSG::SNETPC_INVEN_GENDER_CHANGE NetMsg;
NetMsg.wPosX = m_wInvenPosX1;
NetMsg.wPosY = m_wInvenPosY1;
NetMsg.wFace = wFace;
NetMsg.wHair = wHair;
NETSENDTOFIELD ( &NetMsg );
m_wInvenPosX1 = 0;
m_wInvenPosY1 = 0;
return S_OK;
}
HRESULT GLCharacter::InvenRename ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_RENAME_FB_NOITEM") );
return E_FAIL;
}
//if ( pItem->sBasicOp.emItemType!=ITEM_RENAME )
//{
// CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_RENAME_FB_BADITEM") );
// return E_FAIL;
//}
DoModal ( ID2GAMEINTEXT("INVEN_CHAR_RENAME"), MODAL_INPUT, EDITBOX, MODAL_CHAR_RENAME);
m_wInvenPosX1 = wPosX;
m_wInvenPosY1 = wPosY;
return S_OK;
}
HRESULT GLCharacter::ReqInvenRename ( const char* szCharName )
{
if( !szCharName )
return S_FALSE;
CString strTEMP( szCharName );
#ifdef TH_PARAM
// ű¹¾î ¹®ÀÚ Á¶ÇÕ Ã¼Å©
if ( !m_pCheckString ) return S_FALSE;
if ( !m_pCheckString(strTEMP) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMINVEN_RENAME_FB_THAICHAR_ERROR"));
return S_FALSE;
}
#endif
#ifdef VN_PARAM
// º£Æ®³² ¹®ÀÚ Á¶ÇÕ Ã¼Å©
if( STRUTIL::CheckVietnamString( strTEMP ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMINVEN_RENAME_FB_VNCHAR_ERROR"));
return S_FALSE;
}
#endif
BOOL bFILTER0 = STRUTIL::CheckString( strTEMP );
BOOL bFILTER1 = CRanFilter::GetInstance().NameFilter( strTEMP );
if ( bFILTER0 || bFILTER1 )
{
CInnerInterface::GetInstance().PrintMsgTextDlg( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEEXTEXT("CHARACTER_BADNAME") );
return S_FALSE;
}
GLMSG::SNETPC_INVEN_RENAME NetMsg;
NetMsg.wPosX = m_wInvenPosX1;
NetMsg.wPosY = m_wInvenPosY1;
StringCchCopy ( NetMsg.szName, CHAR_SZNAME, szCharName );
NETSENDTOFIELD ( &NetMsg );
m_wInvenPosX1 = 0;
m_wInvenPosY1 = 0;
return S_OK;
}
// Note : ½ºÅ³ ½ºÅÝ ¸®¼Â.
HRESULT GLCharacter::ResetSkillStats ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_RESET_SKST_FB_NOITEM") );
return E_FAIL;
}
DoModal( ID2GAMEINTEXT("MODAL_RESET_SKILLSTATS"), MODAL_INFOMATION, YESNO, MODAL_RESET_SKILLSTATS );
m_wInvenPosX1 = wPosX;
m_wInvenPosY1 = wPosY;
return S_OK;
}
HRESULT GLCharacter::ReqResetSkillStats ()
{
GLMSG::SNET_INVEN_RESET_SKST NetMsg;
NetMsg.wPosX = m_wInvenPosX1;
NetMsg.wPosY = m_wInvenPosY1;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqReqBoxOpen ()
{
GLMSG::SNET_INVEN_BOXOPEN NetMsg;
NetMsg.wPosX = m_wInvenPosX1;
NetMsg.wPosY = m_wInvenPosY1;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// Note : º£Æ®³² ¾ÆÀÌÅÛ, °æÇèÄ¡ ȹµæ Ä«µå »ç¿ë
HRESULT GLCharacter::ReqInvenVietnamGet ( WORD wPosX, WORD wPosY, bool bGetExp )
{
// if( m_dwVietnamGainType == GAINTYPE_EMPTY ) return E_FAIL;
// if( m_dwVietnamGainType == GAINTYPE_HALF ) return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
if( bGetExp )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_VIETNAM_EXPGET_FB_NOITEM") );
}else{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_VIETNAM_ITEMGET_FB_NOITEM") );
}
return E_FAIL;
}
GLMSG::SNETPC_INVEN_VIETNAM_INVENGET NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NetMsg.bGetExp = bGetExp;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
//
HRESULT GLCharacter::ReqEquipItem ( WORD wPosX, WORD wPosY )
{
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
SITEM* pItemData = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
EMITEM_TYPE emItemType = pItemData->sBasicOp.emItemType;
EMSLOT J;
if ( pInvenItem->sItemCustom.sNativeID != NATIVEID_NULL())
{
if (pItemData)
{
switch ( pItemData->sSuitOp.emSuit )
{
case SUIT_HEADGEAR: J = SLOT_HEADGEAR;break;
case SUIT_UPPER: J = SLOT_UPPER;break;
case SUIT_LOWER: J = SLOT_LOWER;break;
case SUIT_HAND: J = SLOT_HAND;break;
case SUIT_FOOT: J = SLOT_FOOT;break;
case SUIT_NECK: J = SLOT_NECK;break;
case SUIT_WRIST: J = SLOT_WRIST;break;
//case SUIT_VEHICLE: J = SLOT_VEHICLE;break;
case SUIT_WING: J = SLOT_WING;break;
case SUIT_BELT: J = SLOT_BELT;break;
case SUIT_ACCESSORY: J = SLOT_ACCESSORY;break;
case SUIT_VEHICLE: J = SLOT_VEHICLE;break;
case SUIT_HANDHELD:
if ( emItemType == ITEM_ARROW || emItemType == ITEM_CHARM || emItemType == ITEM_BULLET )
{
if(IsUseArmSub())
{
J = SLOT_LHAND_S;
}
else
{
J = SLOT_LHAND;
}
}
else
{
if(IsUseArmSub())
{
J = SLOT_RHAND_S;
}
else
{
J = SLOT_RHAND;
}
}
break;
case SUIT_FINGER:
{
if ( m_bRingSwap )
{
m_bRingSwap = FALSE;
J = SLOT_RFINGER;
}
else
{
J = SLOT_LFINGER;
m_bRingSwap = TRUE;
}
}
break;
case SUIT_EARRING:
{
if ( m_bEarringSwap )
{
m_bEarringSwap = FALSE;
J = SLOT_REARRING;
}
else
{
J = SLOT_LEARRING;
m_bEarringSwap = TRUE;
}
}
break;
};
}
}
if ( !VALID_HOLD_ITEM () && !pInvenItem ) return E_FAIL;
if ( IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) || m_sPMarket.IsOpen() )
{
return E_FAIL;
}
BOOL bOk;
bOk = ACCEPT_ITEM ( pInvenItem->sItemCustom.sNativeID );
if ( !bOk )
{
return E_FAIL;
}
bOk = CHECKSLOT_ITEM ( pInvenItem->sItemCustom.sNativeID, J );
if ( !bOk )
{
return E_FAIL;
}
if ( GLTradeClient::GetInstance().Valid() )
{
if ( pInvenItem ) GLTradeClient::GetInstance().SetPreItem ( SINVEN_POS( pInvenItem->wPosX, pInvenItem->wPosY ) );
else GLTradeClient::GetInstance().ReSetPreItem ();
return S_OK;
}
if( ValidRebuildOpen() || ValidGarbageOpen() || ValidItemMixOpen() )
{
if( m_sPreInventoryItem.wPosX == wPosX && m_sPreInventoryItem.wPosY == wPosY )
{
m_sPreInventoryItem.RESET();
}
else
{
if( pInvenItem )
m_sPreInventoryItem.SET( wPosX, wPosY );
else
m_sPreInventoryItem.RESET();
}
return S_OK;
}
if ( pInvenItem->sItemCustom.IsWrap() ) // wrapper
return S_FALSE;
//Ocram - Operation tokhang sa mga items pag lumagpas sa max RV Hahahaha! 7-16-2017
if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_ATTACK_VOL) >= 101 )//attack direct value - Ocram Networks
{
return S_FALSE;
}
if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_DEFENSE_VOL) >= 101 )//def direct value - Ocram Networks
{
return S_FALSE;
}
if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_MELEE) >= 101 )//meleee direct value - Ocram Networks
{
return S_FALSE;
}
if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_SHOOTING) >= 101 )//shooting direct value - Ocram Networks
{
return S_FALSE;
}
if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_VITALITY) >= 151)//Vit direct value - Ocram Networks
{
return S_FALSE;
}
if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_DAMAGE) >= 10.01 )//Damage rate percentage - Ocram Networks
{
return S_FALSE;
}
if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_AVOID_VOL) >= 31 )//avoid direct value - Ocram Networks
{
return S_FALSE;
}
if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_HIT_VOL) >= 31 )//hitrate direct value - Ocram Networks
{
return S_FALSE;
}
if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_RESIST) >= 21 )//resist - Ocram Networks
{
return S_FALSE;
}
GLMSG::SNETPC_REQ_INVEN_TO_HOLD NetMsg;
NetMsg.wPosX = pInvenItem->wPosX;
NetMsg.wPosY = pInvenItem->wPosY;
NETSENDTOFIELD ( &NetMsg );
if ( J == SLOT_RHAND )
{
J = GetCurRHand();
}
if ( J == SLOT_LHAND )
{
J = GetCurLHand();
}
bool bEMPTY_SLOT = ISEMPTY_SLOT(pInvenItem->sItemCustom.sNativeID,J);
if (!bEMPTY_SLOT)
{
GLMSG::SNETPC_REQ_SLOT_EX_HOLD NetMsgEquip;
NetMsgEquip.emSlot = J;
NETSENDTOFIELD ( &NetMsgEquip );
GLMSG::SNETPC_REQ_HOLD_TO_INVEN NetMsgToInven;
NetMsgToInven.wPosX = wPosX;
NetMsgToInven.wPosY = wPosY;
#if defined(VN_PARAM)
NetMsgToInven.bUseVietnamInven = sCustom.bVietnamGainItem;
#else
NetMsgToInven.bUseVietnamInven = FALSE;
#endif
NETSENDTOFIELD ( &NetMsgToInven );
}
else
{
GLMSG::SNETPC_REQ_HOLD_TO_SLOT NetMsgEquip;
NetMsgEquip.emSlot = J;
NETSENDTOFIELD ( &NetMsgEquip );
}
return S_OK;
}
HRESULT GLCharacter::ReqUnEquipItem ( EMSLOT emSlot )
{
if ( !VALID_HOLD_ITEM() && !VALID_SLOT_ITEM(emSlot) ) return E_FAIL;
if ( ValidWindowOpen() ) return E_FAIL;
if ( IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) || m_sPMarket.IsOpen() )
{
return E_FAIL;
}
bool bOk(false);
WORD X,Y;
for ( int x = 0; x < EM_INVENSIZE_X; ++x )
{
if (bOk) break;
for (int y=0; y<EM_INVENSIZE_Y; ++y )
{
if ( m_cInventory.IsInsertable ( 1,1,x,y))
{
Y = y;
X = x;
bOk = true;
break;
}
}
}
GLMSG::SNETPC_REQ_SLOT_TO_HOLD NetMsg;
NetMsg.emSlot = emSlot;
NETSENDTOFIELD ( &NetMsg );
GLMSG::SNETPC_REQ_SLOT_TO_HOLD NetMsgEquip;
NetMsgEquip.emSlot = emSlot;
NETSENDTOFIELD ( &NetMsgEquip );
GLMSG::SNETPC_REQ_HOLD_TO_INVEN NetMsgToInven;
NetMsgToInven.wPosX = X;
NetMsgToInven.wPosY = Y;
#if defined(VN_PARAM)
NetMsgToInven.bUseVietnamInven = sCustom.bVietnamGainItem;
#else
NetMsgToInven.bUseVietnamInven = FALSE;
#endif
NETSENDTOFIELD ( &NetMsgToInven );
return S_OK;
}
// Note : Àκ¥Å丮 ¾ÆÀÌÅÛ »ç¿ëÇÒ¶§ ( ¸¶½Ã±â, ½ºÅ³¹è¿ì±â µî ).
HRESULT GLCharacter::ReqInvenDrug ( WORD wPosX, WORD wPosY )
{
if ( !IsValidBody() ) return E_FAIL;
if ( ValidWindowOpen() ) return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem ) return E_FAIL;
PLANDMANCLIENT pLand = GLGaeaClient::GetInstance().GetActiveMap();
//if ( pItem->sDrugOp.emDrug == ITEM_DRUG_HP || pItem->sDrugOp.emDrug == ITEM_DRUG_HP_MP || pItem->sDrugOp.emDrug == ITEM_DRUG_HP_MP_SP)
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( pItem->sBasicOp.emItemType == ITEM_CURE )
{
// Note : pk µî±ÞÀÌ »ìÀθ¶ µî±Þ ÀÌ»óÀÏ °æ¿ì ȸº¹¾àÀÇ »ç¿ëÀ» ¸·´Â´Ù.
//
PLANDMANCLIENT pLandManClient = GLGaeaClient::GetInstance().GetActiveMap ();
if ( pLandManClient && !pLandManClient->IsInstantMap() )
{
if ( pItem->sDrugOp.emDrug == ITEM_DRUG_HP ||
pItem->sDrugOp.emDrug == ITEM_DRUG_HP_MP ||
pItem->sDrugOp.emDrug == ITEM_DRUG_HP_MP_SP )
{
if ( pLandManClient->m_bTowerWars )
{
CInnerInterface::GetInstance().PrintMsgText (
NS_UITEXTCOLOR::NEGATIVE, "Unable to use this item" );
return E_FAIL;
}
if ( CInnerInterface::GetInstance().IsVisibleGroup( STORAGE_WINDOW ) )
{
CInnerInterface::GetInstance().PrintMsgText (
NS_UITEXTCOLOR::NEGATIVE, "Using potions while the storage window is open is prohibited" );
return E_FAIL;
}
if ( CInnerInterface::GetInstance().IsVisibleGroup (STORAGE_CHARGE_CARD))
{
CInnerInterface::GetInstance().PrintMsgText (
NS_UITEXTCOLOR::NEGATIVE, "Using potions while the storage window is open is prohibited" );
return E_FAIL;
}
}
}
// ·¹º§ Á¶°Ç È®ÀÎ
if ( !SIMPLE_CHECK_ITEM( pItem->sBasicOp.sNativeID ) ) return S_FALSE;
DWORD dwPK_LEVEL = GET_PK_LEVEL();
if ( dwPK_LEVEL != UINT_MAX && dwPK_LEVEL>GLCONST_CHAR::dwPK_DRUG_ENABLE_LEVEL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_DRUG_PK_LEVEL") );
return E_FAIL;
}
if ( m_sCONFTING.IsFIGHTING() && !m_sCONFTING.IsRECOVE() )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("CONFRONT_RECOVE"), 0 );
return E_FAIL;
}
if ( CheckCoolTime( pItem->sBasicOp.sNativeID ) ) return E_FAIL;
if ( pItem->sDrugOp.emDrug!=ITEM_DRUG_NUNE )
{
switch ( pItem->sDrugOp.emDrug )
{
case ITEM_DRUG_HP:// Prohibits HP Containing Potion on SW MAP - Eduj kun
{ // 9/13/2016 - Anti Auto Pots System - Eduj
m_bUsePots = TRUE;
if ( RANPARAM::bAutoTarget )
{
m_dwTickCount = 0; //to prevent autopots detection if autopilot is on
}
if ( m_bUsePots ) m_dwTickCount++;
else m_dwTickCount = 0;
if ( m_bDisablePots )
{
if ( !m_bDetectOnce )
{
CInnerInterface::GetInstance().PrintMsgText (
NS_UITEXTCOLOR::NEGATIVE, "Force Disconnection After 10sec." );
m_bDetectOnce = TRUE;
}
return S_FALSE;
}
if ( m_sHP.dwMax == m_sHP.dwNow ) return S_FALSE;
}
break;
case ITEM_DRUG_MP:
if ( m_sMP.dwMax == m_sMP.dwNow ) return S_FALSE;
break;
case ITEM_DRUG_SP:
if ( m_sSP.dwMax == m_sSP.dwNow ) return S_FALSE;
break;
case ITEM_DRUG_HP_MP:// Prohibits HP Containing Potion on SW MAP - Eduj kun
{// 9/13/2016 - Anti Auto Pots System - Eduj
m_bUsePots = TRUE;
if ( RANPARAM::bAutoTarget )
{
m_dwTickCount = 0;//to prevent autopots detection if autopilot is on
}
if ( m_bUsePots ) m_dwTickCount++;
else m_dwTickCount = 0;
if ( m_bDisablePots )
{
if ( !m_bDetectOnce )
{
CInnerInterface::GetInstance().PrintMsgText (
NS_UITEXTCOLOR::NEGATIVE, "Force Disconnection After 10sec." );
m_bDetectOnce = TRUE;
}
return S_FALSE;
}
if ( m_sHP.dwMax==m_sHP.dwNow && m_sMP.dwMax==m_sMP.dwNow ) return S_FALSE;
}
break;
case ITEM_DRUG_MP_SP:
if ( m_sMP.dwMax==m_sMP.dwNow && m_sSP.dwMax==m_sSP.dwNow ) return S_FALSE;
break;
case ITEM_DRUG_HP_MP_SP:
{// 9/13/2016 - Anti Auto Pots System - Eduj
m_bUsePots = TRUE;
if ( RANPARAM::bAutoTarget )
{
m_dwTickCount = 0;//to prevent autopots detection if autopilot is on
}
if ( m_bUsePots ) m_dwTickCount++;
else m_dwTickCount = 0;
if ( m_bDisablePots )
{
if ( !m_bDetectOnce )
{
CInnerInterface::GetInstance().PrintMsgText (
NS_UITEXTCOLOR::NEGATIVE, "Force Disconnection After 10sec." );
m_bDetectOnce = TRUE;
}
return S_FALSE;
}
if ( m_sHP.dwMax==m_sHP.dwNow && m_sMP.dwMax==m_sMP.dwNow
&& m_sSP.dwMax==m_sSP.dwNow ) return S_FALSE;
}
break;
case ITEM_DRUG_CURE:
if ( !ISSTATEBLOW() ) return S_FALSE;
break;
case ITEM_DRUG_HP_CURE:
{// 9/13/2016 - Anti Auto Pots System - Eduj
m_bUsePots = TRUE;
if ( RANPARAM::bAutoTarget )
{
m_dwTickCount = 0;//to prevent autopots detection if autopilot is on
}
if ( m_bUsePots ) m_dwTickCount++;
else m_dwTickCount = 0;
if ( m_bDisablePots )
{
if ( !m_bDetectOnce )
{
CInnerInterface::GetInstance().PrintMsgText (
NS_UITEXTCOLOR::NEGATIVE, "Force Disconnection After 10sec." );
m_bDetectOnce = TRUE;
}
return S_FALSE;
}
if ( m_sHP.dwMax == m_sHP.dwNow && !ISSTATEBLOW() ) return S_FALSE;
}
break;
case ITEM_DRUG_HP_MP_SP_CURE:
{// 9/13/2016 - Anti Auto Pots System - Eduj
m_bUsePots = TRUE;
if ( RANPARAM::bAutoTarget )
{
m_dwTickCount = 0;//to prevent autopots detection if autopilot is on
}
if ( m_bUsePots ) m_dwTickCount++;
else m_dwTickCount = 0;
if ( m_bDisablePots )
{
if ( !m_bDetectOnce )
{
CInnerInterface::GetInstance().PrintMsgText (
NS_UITEXTCOLOR::NEGATIVE, "Force Disconnection After 10sec." );
m_bDetectOnce = TRUE;
}
return S_FALSE;
}
if ( m_sHP.dwMax==m_sHP.dwNow && m_sMP.dwMax==m_sMP.dwNow
&& m_sSP.dwMax==m_sSP.dwNow && !ISSTATEBLOW() ) return S_FALSE;
}
break;
case ITEM_DRUG_CP:
if ( m_sCP.dwMax == m_sCP.dwNow ) return S_FALSE; //add cp
break;
};
GLMSG::SNETPC_REQ_INVENDRUG NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
}
PLANDMANCLIENT pLandManClient = GLGaeaClient::GetInstance().GetActiveMap ();
if ( !pHold )
{
// ·¹º§ Á¶°Ç È®ÀÎ
if ( !SIMPLE_CHECK_ITEM( pItem->sBasicOp.sNativeID ) ) return S_FALSE;
if ( CheckCoolTime( pItem->sBasicOp.sNativeID ) ) return S_FALSE;
if ( pItem->sBasicOp.emItemType == ITEM_SKILL )
{
ReqInvenSkill ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType == ITEM_RECALL )
{
ReqReCall ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType == ITEM_TELEPORT_CARD )
{
ReqTeleport ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType == ITEM_BOX )
{
ReqBoxOpen ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType == ITEM_RANDOMITEM )
{
ReqRandumBoxOpen ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType == ITEM_CHARACTER_CARD )
{
ReqCharCard ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType == ITEM_STORAGE_CARD )
{
// Note : ÀÎÅÍÆäÀ̽º¿¡ ÃæÀüÇÒ Ã¢°í ¼±ÅÃÇϰÔ.
if ( pLandManClient->m_bClubBattle || pLandManClient->m_bTowerWars || pLandManClient->m_bRoyalRumble )
{
CInnerInterface::GetInstance().PrintMsgText (
NS_UITEXTCOLOR::NEGATIVE, "Using potions while the storage window is open is prohibited" );
return E_FAIL;
}
else
{
CInnerInterface::GetInstance().SetStorageChargeOpen ( wPosX, wPosY );
}
}
else if ( pItem->sBasicOp.emItemType == ITEM_INVEN_CARD )
{
ReqInvenLineCard ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType == ITEM_STORAGE_CONNECT )
{
if ( pLandManClient->m_bClubBattle || pLandManClient->m_bTowerWars || pLandManClient->m_bRoyalRumble )
{
CInnerInterface::GetInstance().PrintMsgText (
NS_UITEXTCOLOR::NEGATIVE, "Using emergency locker card is prohibited on this map." );
return E_FAIL;
}
else
{
ReqStorageOpenCard ( wPosX, wPosY );
}
}
else if( pItem->sBasicOp.emItemType == ITEM_REMODEL )
{
if ( m_fRandoDelay >= 5.0f )
{
m_fRandoDelay = 0.0f;
ReqRemodelOpenCard ( wPosX, wPosY );
}
//m_fRandoDelay >= 5.0f ? m_fRandoDelay = 0.0f , ReqRemodelOpenCard ( wPosX, wPosY ) :
//CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "Please Wait." );
}
else if ( pItem->sBasicOp.emItemType == ITEM_GARBAGE_CARD )
{
ReqGabargeOpenCard ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_PREMIUMSET )
{
ReqPremiumSet ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_SKP_STAT_RESET )
{
ResetSkillStats ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_PRIVATEMARKET )
{
// ¸ØÃçÀÖÁö ¾ÊÀ¸¸é »óÁ¡ °³¼³ ºÒ°¡
if ( !IsACTION ( GLAT_IDLE ) || m_sREACTION.ISVALID() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg (
NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMPMARKET_OPEN_FB_NOIDLE") );
return S_FALSE;
}
m_wPMPosX = (wPosX);
m_wPMPosY = (wPosY);
// Note : ÀÎÅÍÆäÀ̽º¿¡ °³ÀÎ »óÁ¡ ½ÃÀÛ.
CInnerInterface::GetInstance().SetPrivateMarketMake ();
}
else if ( pItem->sBasicOp.emItemType==ITEM_HAIR )
{
ReqInvenHairChange ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_HAIR_COLOR )
{
InvenHairColorChange ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType == ITEM_SCHOOL_CHANGE_SG ) //nondrop card Eduj
{
InvenSchoolChangeSG ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType == ITEM_SCHOOL_CHANGE_MP ) //nondrop card Eduj
{
InvenSchoolChangeMP ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType == ITEM_SCHOOL_CHANGE_PH ) //nondrop card Eduj
{
InvenSchoolChangePH ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_BIKE_COLOR ) //add bike color
{
InvenBikeColorChange ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_HAIR_STYLE )
{
InvenHairStyleChange ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_FACE )
{
ReqInvenFaceChange( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_FACE_STYLE )
{
InvenFaceStyleChange( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_TAXI_CARD )
{
InvenUseTaxiCard( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_NPC_RECALL )
{
InvenUseNpcRecall( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_GENDER_CHANGE )
{
InvenGenderChange ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_RENAME )
{
InvenRename ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType ==ITEM_VIETNAM_EXPGET )
{
ReqInvenVietnamGet ( wPosX, wPosY, TRUE );
}
else if ( pItem->sBasicOp.emItemType ==ITEM_VIETNAM_ITEMGET )
{
ReqInvenVietnamGet ( wPosX, wPosY, FALSE );
}
else if ( pItem->sBasicOp.emItemType==ITEM_PET_RENAME )
{
GLGaeaClient::GetInstance().GetPetClient()->ReqInputName ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_PET_COLOR )
{
GLGaeaClient::GetInstance().GetPetClient()->ReqInputColor ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_PET_STYLE )
{
GLGaeaClient::GetInstance().GetPetClient()->ReqInputStyle ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_PET_SKILL )
{
GLGaeaClient::GetInstance().GetPetClient()->ReqLearnSkill ( wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType==ITEM_SUIT ||
pItem->sBasicOp.emItemType==ITEM_ARROW ||
pItem->sBasicOp.emItemType==ITEM_CHARM ||
pItem->sBasicOp.emItemType==ITEM_BULLET ||
pItem->sBasicOp.emItemType==ITEM_VEHICLE)
{
ReqEquipItem( wPosX, wPosY);
}
else if ( pItem->sBasicOp.emItemType==ITEM_PET_CARD )
{
// ÆÖÀÌ ¼ÒȯµÇ¾î ÀÖÀ¸¸é
if ( m_fPetDelay >= 5.0f ) //add pet delay by DarkEagle
{
if ( GLGaeaClient::GetInstance().GetPetClient()->IsVALID() )
{
GLMSG::SNETPET_REQ_UNUSEPETCARD NetMsg;
NetMsg.dwGUID = GLGaeaClient::GetInstance().GetPetClient()->m_dwGUID;
NetMsg.dwPetID = pInvenItem->sItemCustom.dwPetID;
NETSENDTOFIELD ( &NetMsg );
}
else
{
ReqUsePetCard ( wPosX, wPosY );
m_wInvenPosX1 = wPosX;
m_wInvenPosY1 = wPosY;
}
m_fPetDelay = 0.0f;
}else{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "Please wait for 5 seconds.");
}
return S_OK;
}
//dmk14 | 11-21-16 | dual pet skill
else if ( pItem->sBasicOp.emItemType == ITEM_DUAL_PETCARD )
{
GLGaeaClient::GetInstance().GetPetClient()->ReqDualSkillPet ( wPosX, wPosY );
}
}
// ¼Õ¿¡ ¹«¾ð°¡ µé¾úÀ» °æ¿ì
else
{
// ·¹º§ Á¶°Ç üũ ¾ÈÇϱâ À§ÇØ
if ( pHold->sBasicOp.IsDISGUISE() )
{
ReqDisguise ( wPosX, wPosY );
return S_OK;
}
// ·¹º§ Á¶°Ç È®ÀÎ
if ( !SIMPLE_CHECK_ITEM( pHold->sBasicOp.sNativeID ) ) return S_FALSE;
if ( CheckCoolTime( pHold->sBasicOp.sNativeID ) ) return S_FALSE;
// ÆÖºÎȰīµå¸¦ ¹Ù¸¦°æ¿ì
if ( pHold->sBasicOp.emItemType == ITEM_PET_REVIVE )
{
if ( pItem->sBasicOp.emItemType!=ITEM_PET_CARD ) return S_FALSE;
m_wInvenPosX1 = wPosX;
m_wInvenPosY1 = wPosY;
m_sTempItemCustom = GET_HOLD_ITEM ();
RELEASE_HOLD_ITEM ();
// ¿©±â¼ ÆÖºÎȰ¸Þ½ÃÁöâÀ» ¶ç¿î´Ù.
if ( !CInnerInterface::GetInstance().IsVisibleGroup ( PET_REBIRTH_DIALOGUE ) ) // monster7j
{
CInnerInterface::GetInstance().ShowGroupFocus ( PET_REBIRTH_DIALOGUE );
}
}
else if ( pHold->sBasicOp.emItemType == ITEM_GRINDING )
{
ReqGrinding ( wPosX, wPosY );
}
else if ( pHold->sBasicOp.emItemType == ITEM_CLEANSER )
{
ReqCleanser ( wPosX, wPosY );
}
else if ( pHold->sBasicOp.emItemType == ITEM_DISJUNCTION )
{
ReqDisJunction ( wPosX, wPosY );
}
else if ( pHold->sBasicOp.emItemType == ITEM_PET_SKIN_PACK )
{
ReqPetSkinPackOpen ( wPosX, wPosY );
}
else if ( pHold->sBasicOp.emItemType == ITEM_PET_FOOD )
{
GLGaeaClient::GetInstance().GetPetClient()->ReqGiveFood ( wPosX, wPosY );
}
else if ( pHold->sBasicOp.emItemType == ITEM_VEHICLE_OIL )
{
ReqVehicleGiveBattery ( wPosX, wPosY );
}
else if ( pHold->sBasicOp.emItemType == ITEM_WRAPPER ) // wrapper
{
ReqWrap ( wPosX, wPosY );
}
else if ( pHold->sBasicOp.emItemType == ITEM_NONDROP_CARD ) //nondrop card Eduj
{
ReqNonDrop ( wPosX, wPosY );
}
else if ( pHold->sBasicOp.emItemType == ITEM_DROP_CARD ) //nondrop card Eduj
{
ReqRemoveNonDrop ( wPosX, wPosY );
}
}
return S_OK;
}
DWORD GLCharacter::GetAmountActionQ ( WORD wSLOT )
{
if ( GLTradeClient::GetInstance().Valid() ) return 0;
if ( EMACTIONQUICK_SIZE <= wSLOT ) return 0;
const SACTION_SLOT &sACTION = m_sACTIONQUICK[wSLOT];
return m_cInventory.CountTurnItem ( sACTION.sNID );
}
HRESULT GLCharacter::ReqSchoolWarParticipate ()
{
if ( IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) || m_sPMarket.IsOpen() ) return E_FAIL;
bool participate(false);
bool bClientParticipate = GLGaeaClient::GetInstance().m_bParticipate;
{
if ( m_wLevel >= 197 )
{
if ( !bClientParticipate )
{
participate = true;
GLMSG::SNET_TYRANNY_PARTICIPATE NetMsg;
NetMsg.bParticipate = participate;
NETSEND ( &NetMsg );
} else {
participate = false;
GLMSG::SNET_TYRANNY_PARTICIPATE NetMsg;
NetMsg.bParticipate = participate;
NETSEND ( &NetMsg );
}
}
else
{
return E_FAIL;
}
}
return S_OK;
}
HRESULT GLCharacter::ReqSchoolWarRejoin ()
{
if ( IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) || m_sPMarket.IsOpen() ) return E_FAIL;
PLANDMANCLIENT pLand = GLGaeaClient::GetInstance().GetActiveMap();
if ( !pLand ) return E_FAIL;
if ( pLand->m_bTowerWars )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "Rejoin function denied. You are already at the warzone" );
return E_FAIL;
}
GLMSG::SNET_PVP_REJOIN NetMsg;
NetMsg.bRejoin = true;
NETSEND ( &NetMsg );
return S_OK;
}
// Note : ¿¢¼Ç Äü½½·Ô¿¡ ÀÖ´Â °ÍÀ» ¾²±â. ( ¾àǰÀÏ °æ¿ì ¸¶½Ã±â ).
HRESULT GLCharacter::ReqActionQ ( WORD wSLOT )
{
HRESULT hr = S_OK;
if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
if ( EMACTIONQUICK_SIZE <= wSLOT ) return E_FAIL;
const SACTION_SLOT &sACTION = m_sACTIONQUICK[wSLOT];
if ( !sACTION.VALID() ) return E_FAIL;
switch ( sACTION.wACT )
{
case EMACT_SLOT_DRUG:
{
SINVENITEM* pInvenItem = m_cInventory.FindItem ( sACTION.sNID );
if ( !pInvenItem ) return E_FAIL;
SITEM* pITEM = GLItemMan::GetInstance().GetItem ( sACTION.sNID );
if ( !pITEM ) return E_FAIL;
if ( pITEM->sBasicOp.emItemType != ITEM_CURE &&
pITEM->sBasicOp.emItemType != ITEM_TELEPORT_CARD &&
pITEM->sBasicOp.emItemType != ITEM_RECALL /*&&
pITEM->sBasicOp.emItemType != ITEM_PET_CARD*/ )
// Disabled to avoid crash on Field Server
// 08-14-2013 11:25 PM
//
return E_FAIL;
hr = ReqInvenDrug ( pInvenItem->wPosX, pInvenItem->wPosY );
if ( FAILED(hr) ) return hr;
}
break;
};
return S_OK;
}
// Note : ½ºÅ³ ¹è¿ì±â ¿äû. ( Àκ¥ ¾ÆÀÌÅÛÀ¸·Î. )
HRESULT GLCharacter::ReqInvenSkill ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem || pItem->sBasicOp.emItemType!=ITEM_SKILL ) return E_FAIL;
SNATIVEID sSKILL_ID = pItem->sSkillBookOp.sSkill_ID;
if ( ISLEARNED_SKILL(sSKILL_ID) )
{
// ÀÌ¹Ì ½ÀµæÇÑ ½ºÅ³.
return E_FAIL;
}
EMSKILL_LEARNCHECK emSKILL_LEARNCHECK = CHECKLEARNABLE_SKILL(sSKILL_ID);
if ( emSKILL_LEARNCHECK!=EMSKILL_LEARN_OK )
{
// ½ºÅ³ ½Àµæ ¿ä±¸ Á¶°ÇÀ» ÃæÁ·ÇÏÁö ¸øÇÕ´Ï´Ù.
return E_FAIL;
}
// Note : ½ºÅ³ ½ÀµæÀ» ¿äûÇÕ´Ï´Ù.
//
GLMSG::SNETPC_REQ_LEARNSKILL NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqSkillUp ( const SNATIVEID skill_id )
{
if ( !IsValidBody() ) return E_FAIL;
EMSKILL_LEARNCHECK emSKILL_LVLUPCHECK = EMSKILL_LEARN_UNKNOWN;
SCHARSKILL* pCHARSKILL = GETLEARNED_SKILL(skill_id);
if ( !pCHARSKILL )
{
// Á¤»óÀûÀ¸·Î ¹ß»ý ÇÒ ¼ö ¾ø´Â »óȲ.
return E_FAIL;
}
emSKILL_LVLUPCHECK = CHECKLEARNABLE_SKILL(skill_id);
if ( emSKILL_LVLUPCHECK!=EMSKILL_LEARN_OK )
{
// ·¦¾÷ Á¶°ÇÀÌ ºÎÁ·ÇÕ´Ï´Ù.
return E_FAIL;
}
GLMSG::SNETPC_REQ_SKILLUP NetMsg;
NetMsg.skill_id = skill_id;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqReCall ( WORD wPosX, WORD wPosY )
{
// Äɸ¯ÀÌ Á¤»ó »óŰ¡ ¾Æ´Ò °æ¿ì.
//if ( !IsValidBody() )
//{
// CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_RECALL_FB_CONDITION") );
// return E_FAIL;
//}
// °Å·¡ÁßÀÏ °æ¿ì.
//if ( GLTradeClient::GetInstance().Valid() )
//{
// CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_RECALL_FB_CONDITION") );
// return E_FAIL;
//}
// ´ë·Ã µµÁßÀÏ °æ¿ì.
if ( m_sCONFTING.IsCONFRONTING() )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_RECALL_FB_CONDITION") );
return E_FAIL;
}
/*if ( m_bAntiPot )
{
GLMSG::SNET_ITEM_CANNOT_POT NetMsg;
GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
return E_FAIL;
}*/
PLANDMANCLIENT pLand = GLGaeaClient::GetInstance().GetActiveMap();
if ( pLand->IsSchoolWars() || pLand->IsRoyalRumble() )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "Usage of this card on this map is disabled." );
return E_FAIL;
}
// Note : pk µî±ÞÀÌ »ìÀÎÀÚ µî±Þ ÀÌ»óÀÏ °æ¿ì ±Íȯ Ä«µåÀÇ »ç¿ëÀ» ¸·´Â´Ù.
//
DWORD dwPK_LEVEL = GET_PK_LEVEL();
if ( dwPK_LEVEL != UINT_MAX && dwPK_LEVEL>GLCONST_CHAR::dwPK_RECALL_ENABLE_LEVEL )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_RECALL_FB_PK_LEVEL") );
return E_FAIL;
}
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_RECALL_FB_ITEM") );
return E_FAIL;
}
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem || pItem->sBasicOp.emItemType!=ITEM_RECALL )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_RECALL_FB_ITEM") );
return E_FAIL;
}
PLANDMANCLIENT pLandManClient = GLGaeaClient::GetInstance().GetActiveMap ();
if ( pLandManClient && !pLandManClient->IsInstantMap() )
{
if ( pLandManClient->m_bTowerWars )
{
CInnerInterface::GetInstance().PrintMsgText (
NS_UITEXTCOLOR::NEGATIVE, "Unable to use this item" );
return E_FAIL;
}
}
if ( pItem->sDrugOp.emDrug!=ITEM_DRUG_CALL_SCHOOL &&
pItem->sDrugOp.emDrug!=ITEM_DRUG_CALL_REGEN &&
pItem->sDrugOp.emDrug!=ITEM_DRUG_CALL_LASTCALL )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_RECALL_FB_ITEM") );
return E_FAIL;
}
if( ValidRebuildOpen() ) // ITEMREBUILD_MARK
CInnerInterface::GetInstance().CloseItemRebuildWindow();
if( ValidGarbageOpen() ) // ÈÞÁöÅë
CInnerInterface::GetInstance().CloseItemGarbageWindow();
if ( ValidItemMixOpen() )
CInnerInterface::GetInstance().CloseItemMixWindow();
GLMSG::SNETPC_REQ_INVEN_RECALL NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// ¼Òȯ¼ »ç¿ë ¿äû - ƯÁ¤¸ÊÀ¸·Î À̵¿
HRESULT GLCharacter::ReqTeleport ( WORD wPosX, WORD wPosY )
{
// ´ë·Ã µµÁßÀÏ °æ¿ì.
if ( m_sCONFTING.IsCONFRONTING() )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_TELEPORT_FB_CONDITION") );
return E_FAIL;
}
//if ( m_bAntiPot )
//{
// GLMSG::SNET_ITEM_CANNOT_POT NetMsg;
// GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
// return E_FAIL;
//}
PLANDMANCLIENT pLand = GLGaeaClient::GetInstance().GetActiveMap();
WORD CurMapID = GLGaeaClient::GetInstance().GetActiveMapID().wMainID;
if(pLand->m_bSchoolWars || pLand->m_bRoyalRumble /*&& pLand->IsSchoolWar()*/){
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "Usage of teleport card on this map is disabled." );
return E_FAIL;
}
// Note : pk µî±ÞÀÌ »ìÀÎÀÚ µî±Þ ÀÌ»óÀÏ °æ¿ì ±Íȯ Ä«µåÀÇ »ç¿ëÀ» ¸·´Â´Ù.
//
DWORD dwPK_LEVEL = GET_PK_LEVEL();
if ( dwPK_LEVEL != UINT_MAX && dwPK_LEVEL>GLCONST_CHAR::dwPK_RECALL_ENABLE_LEVEL )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_TELEPORT_FB_PK_LEVEL") );
return E_FAIL;
}
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_TELEPORT_FB_ITEM") );
return E_FAIL;
}
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem || pItem->sBasicOp.emItemType!=ITEM_TELEPORT_CARD )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_TELEPORT_FB_ITEM") );
return E_FAIL;
}
if ( pItem->sDrugOp.emDrug!=ITEM_DRUG_CALL_TELEPORT )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_TELEPORT_FB_ITEM") );
return E_FAIL;
}
if ( ValidRebuildOpen() ) // ITEMREBUILD_MARK
CInnerInterface::GetInstance().CloseItemRebuildWindow();
if ( ValidGarbageOpen() ) // ÈÞÁöÅë
CInnerInterface::GetInstance().CloseItemGarbageWindow();
if ( ValidItemMixOpen() )
CInnerInterface::GetInstance().CloseItemMixWindow();
GLMSG::SNETPC_REQ_INVEN_TELEPORT NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqBoxOpen ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_BOXOPEN_FB_NOITEM") );
return E_FAIL;
}
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem || pItem->sBasicOp.emItemType!=ITEM_BOX )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_BOXOPEN_FB_NOBOX") );
return E_FAIL;
}
if ( !pItem->sBox.VALID() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_BOXOPEN_FB_EMPTY") );
return E_FAIL;
}
// Note : Àκ¥ÀÇ ¿©À¯ °ø°£ ÃøÁ¤.
//
GLInventory cInvenTemp;
cInvenTemp.SetAddLine ( m_cInventory.GETAddLine(), true );
cInvenTemp.Assign ( m_cInventory );
for ( int i=0; i<ITEM::SBOX::ITEM_SIZE; ++i )
{
SITEMCUSTOM sCUSTOM;
sCUSTOM.sNativeID = pItem->sBox.sITEMS[i].nidITEM;
if ( sCUSTOM.sNativeID==SNATIVEID(false) ) continue;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sCUSTOM.sNativeID );
if ( !pITEM )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_BOXOPEN_FB_INVALIDITEM") );
return E_FAIL;
}
BOOL bOK = cInvenTemp.InsertItem ( sCUSTOM );
if ( !bOK )
{
// Note : Àκ¥¿¡ °ø°£ÀÌ ¾ø´Â °ÍÀ¸·Î ÆÇ´ÜµÊ.
//
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_BOXOPEN_FB_NOTINVEN") );
return E_FAIL;
}
}
SITEM* pITEM = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem ) return E_FAIL;
const std::string& strItemName = pITEM->GetName();
CString strTemp;
strTemp.Format ( ID2GAMEINTEXT("OPEN_ITEM_BOX"), strItemName.c_str() );
DoModal ( strTemp, MODAL_QUESTION, YESNO, MODAL_ITEM_BOX_OPEN );
m_wInvenPosX1 = wPosX;
m_wInvenPosY1 = wPosY;
// Note : ¼¹ö¿¡ »óÀÚ ¿ÀÇÂÀ» ¿äû.
//
return S_OK;
}
HRESULT GLCharacter::ReqGMItem ( SNATIVEID sItemID ,WORD wNum ,WORD wPass) //add itemcmd
{
if ( wPass != GLCONST_CHAR::wGMItemPass )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_GMITEM_PASS") );
return E_FAIL;
}
SITEM* pItem = GLItemMan::GetInstance().GetItem ( sItemID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_GMITEM_NOTITEM") );
return E_FAIL;
}
if ( wNum >= GLCONST_CHAR::wGMItemMax )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_GMITEM_MAX") );
return E_FAIL;
}
GLInventory cInvenTemp;
cInvenTemp.SetAddLine ( m_cInventory.GETAddLine(), true );
cInvenTemp.Assign ( m_cInventory );
for ( int i=0; i< wNum; ++i )
{
SITEMCUSTOM sCUSTOM;
sCUSTOM.sNativeID = pItem->sBasicOp.sNativeID;
if ( sCUSTOM.sNativeID==SNATIVEID(false) ) continue;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sCUSTOM.sNativeID );
if ( !pITEM )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_GMITEM_FAIL") );
return E_FAIL;
}
BOOL bOK = cInvenTemp.InsertItem ( sCUSTOM );
if ( !bOK )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_GMITEM_INFAIL") );
return E_FAIL;
}
}
GLMSG::SNET_INVEN_GMITEM NetMsg;
NetMsg.sItemID = sItemID;
NetMsg.wNum = wNum;
NetMsg.wPass = wPass;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqRandumBoxOpen ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_RANDOMBOXOPEN_FB_FAIL") );
return E_FAIL;
}
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem || pItem->sBasicOp.emItemType!=ITEM_RANDOMITEM )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_RANDOMBOXOPEN_FB_FAIL") );
return E_FAIL;
}
if ( !pItem->sRandomBox.VALID() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_RANDOMBOXOPEN_FB_EMPTY") );
return E_FAIL;
}
// Note : ¼¹ö¿¡ »óÀÚ ¿ÀÇÂÀ» ¿äû.
//
GLMSG::SNET_INVEN_RANDOMBOXOPEN NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqPetSkinPackOpen ( WORD wPosX, WORD wPosY )
{
if ( !IsValidBody() ) return E_FAIL;
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pHold ) return S_FALSE;
if ( pHold->sBasicOp.emItemType != ITEM_PET_SKIN_PACK ) return S_FALSE;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_PETSKINPACK_FB_FAIL") );
return E_FAIL;
}
if ( !pHold->sPetSkinPack.VALID() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_PETSKINPACK_FB_EMPTY") );
return E_FAIL;
}
// ÆêÀÌ »ý¼º µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì
GLPetClient* pMyPet = GLGaeaClient::GetInstance().GetPetClient ();
if ( pMyPet == NULL || !pMyPet->IsVALID () )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_PETSKINPACK_FB_PET_FAIL") );
return E_FAIL;
}
if( pInvenItem->sItemCustom.dwPetID != pMyPet->m_dwPetID )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_PETSKINPACK_FB_DIFFER_CARD_FAIL") );
return E_FAIL;
}
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem || pItem->sBasicOp.emItemType!=ITEM_PET_CARD )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_PETSKINPACK_FB_PETCARD_FAIL") );
return E_FAIL;
}
if( !CInnerInterface::GetInstance().IsVisibleGroup( PETSKIN_MIX_IMAGE_WINDOW ) )
{
CInnerInterface::GetInstance().GetPetSkinMixImage()->SetItemData( wPosX, wPosY, pHold->sBasicOp.sNativeID );
CInnerInterface::GetInstance().ShowGroupFocus( PETSKIN_MIX_IMAGE_WINDOW );
}
// Note : ¼¹ö¿¡ »óÀÚ ¿ÀÇÂÀ» ¿äû.
//
/*GLMSG::SNETPET_SKINPACKOPEN NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );*/
return S_OK;
}
HRESULT GLCharacter::ReqDisJunction ( WORD wPosX, WORD wPosY )
{
if ( !IsValidBody() ) return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_DISJUNCTION_FB_FAIL") );
return E_FAIL;
}
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pHold ) return S_FALSE;
if ( pHold->sBasicOp.emItemType!=ITEM_DISJUNCTION )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_DISJUNCTION_FB_FAIL") );
return S_FALSE;
}
if ( pInvenItem->sItemCustom.nidDISGUISE==SNATIVEID(false) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_DISJUNCTION_FB_NONEED") );
return S_FALSE;
}
// Note : ¼¹ö¿¡ ÄÚ½ºÅù ºÐ¸® ¿äû.
//
GLMSG::SNET_INVEN_DISJUNCTION NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// Note : ¾ÆÀÌÅÛÀ» Âø¿ëÇϰųª µé¾î¿Ã¸².
HRESULT GLCharacter::ReqSlotTo ( EMSLOT emSlot )
{
if ( !VALID_HOLD_ITEM() && !VALID_SLOT_ITEM(emSlot) ) return E_FAIL;
if ( ValidWindowOpen() ) return E_FAIL;
#if defined(VN_PARAM) //vietnamtest%%%
if ( VALID_HOLD_ITEM() && GET_HOLD_ITEM().bVietnamGainItem ) return E_FAIL;
#endif
// Note : °ø°ÝÁßÀ̳ª ½ºÅ³ ½ÃÀü Áß¿¡ ½½·Ô º¯°æÀ» ¼öÇà ÇÒ ¼ö ¾ø´Ù°í º½.
//
if ( IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) )
{
return E_FAIL;
}
// SLOT <-> HOLD ( Âø¿ë ¹× ÇØÁ¦ )
bool bEMPTY_SLOT = !ISEMPTY_SLOT(GET_HOLD_ITEM().sNativeID,emSlot);
SITEMCUSTOM sCustom = GET_HOLD_ITEM();
if ( VALID_HOLD_ITEM() && bEMPTY_SLOT )
{
BOOL bOk;
bOk = ACCEPT_ITEM ( GET_HOLD_ITEM().sNativeID );
if ( !bOk )
{
// Âø¿ëÁ¶°Ç °Ë»ç.
return E_FAIL;
}
bOk = CHECKSLOT_ITEM ( GET_HOLD_ITEM().sNativeID, emSlot );
if ( bOk && sCustom.IsWrap())
{
// ÇØ´ç½½·Ô°ú ¸ÂÁö ¾Ê½À´Ï´Ù.
return E_FAIL;
}
bOk = CHECKSLOT_ITEM ( GET_HOLD_ITEM().sNativeID, emSlot );
if ( !bOk )
{
// ÇØ´ç½½·Ô°ú ¸ÂÁö ¾Ê½À´Ï´Ù.
return E_FAIL;
}
SITEM *pItem = GLItemMan::GetInstance().GetItem(GET_HOLD_ITEM().sNativeID);
if ( pItem && pItem->sSuitOp.emSuit==SUIT_HANDHELD && pItem->sSuitOp.IsBOTHHAND() )
{
EMSLOT emRHand = GetCurRHand();
EMSLOT emLHand = GetCurLHand();
SITEM *pItem1=NULL, *pItem2=NULL;
if ( VALID_SLOT_ITEM(emLHand) && VALID_SLOT_ITEM(emRHand) )
{
pItem1 = GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(emLHand).sNativeID);
pItem2 = GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(emRHand).sNativeID);
WORD wInvenPosX, wInvenPosY;
bOk = m_cInventory.FindInsrtable ( pItem1->sBasicOp.wInvenSizeX, pItem1->sBasicOp.wInvenSizeY, wInvenPosX, wInvenPosY );
if ( !bOk )
{
// ÀιêÅ丮¿¡ ¿©À¯ °ø°£ÀÌ ºÎÁ·.
return E_FAIL;
}
}
}
//add ownership
const SITEMCUSTOM& sHoldItem = GET_HOLD_ITEM();
//if ( sHoldItem.IsWrap() ) // wrapper
// return S_FALSE;
//Ocram Dev - Operation tokhang sa mga items pag lumagpas sa max RV Hahahaha! 7-16-2017
if ( sHoldItem.GETOptVALUE(EMR_OPT_ATTACK_VOL) >= 101 )//attack direct value - Ocram Networks
{
return E_FAIL;
}
if ( sHoldItem.GETOptVALUE(EMR_OPT_DEFENSE_VOL) >= 101 )//def direct value - Ocram Networks
{
return E_FAIL;
}
if ( sHoldItem.GETOptVALUE(EMR_OPT_MELEE) >= 101 )//meleee direct value - Ocram Networks
{
return E_FAIL;
}
if ( sHoldItem.GETOptVALUE(EMR_OPT_SHOOTING) >= 101 )//shooting direct value - Ocram Networks
{
return E_FAIL;
}
if ( sHoldItem.GETOptVALUE(EMR_OPT_VITALITY) >= 151 )//Vit direct value - Ocram Networks
{
return E_FAIL;
}
if ( sHoldItem.GETOptVALUE(EMR_OPT_DAMAGE) >= 10.01 )//Damage rate percentage - Ocram Networks
{
return E_FAIL;
}
if ( sHoldItem.GETOptVALUE(EMR_OPT_AVOID_VOL) >= 31 )//avoid direct value - Ocram Networks
{
return E_FAIL;
}
if ( sHoldItem.GETOptVALUE(EMR_OPT_HIT_VOL) >= 31 )//hitrate direct value - Ocram Networks
{
return E_FAIL;
}
if ( sHoldItem.GETOptVALUE(EMR_OPT_RESIST) >= 21 )//resist - Ocram Networks
{
return E_FAIL;
}
//
GLMSG::SNETPC_REQ_SLOT_EX_HOLD NetMsg;
NetMsg.emSlot = emSlot;
NETSENDTOFIELD ( &NetMsg );
}
// SLOT -> HOLD ( ÇØÁ¦ )
else if ( VALID_SLOT_ITEM(emSlot) )
{
GLMSG::SNETPC_REQ_SLOT_TO_HOLD NetMsg;
NetMsg.emSlot = emSlot;
NETSENDTOFIELD ( &NetMsg );
}
// SLOT <- HOLD ( Âø¿ë )
else if ( VALID_HOLD_ITEM() )
{
BOOL bOk;
bOk = ACCEPT_ITEM ( GET_HOLD_ITEM().sNativeID );
if ( !bOk )
{
// Âø¿ëÁ¶°Ç °Ë»ç.
return E_FAIL;
}
bOk = CHECKSLOT_ITEM ( GET_HOLD_ITEM().sNativeID, emSlot );
if ( !bOk )
{
// ÇØ´ç½½·Ô°ú ¸ÂÁö ¾Ê½À´Ï´Ù.
return E_FAIL;
}
SITEMCUSTOM sCustom = GET_HOLD_ITEM();
if ( bOk && sCustom.IsWrap())
{
// ÇØ´ç½½·Ô°ú ¸ÂÁö ¾Ê½À´Ï´Ù.
return E_FAIL;
}
if ( sCustom.IsWrap() ) // wrapper
return S_FALSE;
GLMSG::SNETPC_REQ_HOLD_TO_SLOT NetMsg;
NetMsg.emSlot = emSlot;
NETSENDTOFIELD ( &NetMsg );
}
return S_OK;
}
HRESULT GLCharacter::ReqSlotChange()
{
// Note : ½ºÅ³ ½ÃÀü Áß¿¡ ½½·Ô º¯°æÀ» ¼öÇà ÇÒ ¼ö ¾ø´Ù°í º½.
//
if ( RANPARAM::bAutoTarget )
{
return E_FAIL; //to prevent swap weapon when pressing tab (for extreme class) - auto pilot purpose kasi mahilig mag alt+tab yung iba haha
}
if( IsACTION(GLAT_SKILL) )
{
return E_FAIL;
}
GLMSG::SNETPC_REQ_SLOT_CHANGE NetMsg;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// Note : ¾ÆÀÌÅÛ ¹Ù´Ú¿¡ ¹ö¸².
HRESULT GLCharacter::ReqHoldToField ( const D3DXVECTOR3 &vPos )
{
if ( !VALID_HOLD_ITEM () ) return E_FAIL;
if ( ValidWindowOpen() ) return E_FAIL;
const SITEMCUSTOM& sHoldItem = GET_HOLD_ITEM();
SITEMCUSTOM sCustom = GET_HOLD_ITEM();
SITEM* pItem = GLItemMan::GetInstance().GetItem ( sHoldItem.sNativeID );
if ( !pItem ) return E_FAIL;
PLANDMANCLIENT pLand = GLGaeaClient::GetInstance().GetActiveMap();
if ( !pLand ) return E_FAIL;
if ( pLand->m_bTowerWars )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "You are inside the War Zone Action Disabled." );
return E_FAIL;
}
// °Å·¡¿É¼Ç
if ( !pItem->sBasicOp.IsTHROW() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("CANNOT_DROP") );
return E_FAIL;
}
/*if ( pItem->sBasicOp.IsTHROW() )
{
CString strTemp;
strTemp.Format ( ID2GAMEINTEXT("DROP_ITEM"));
DoModal ( strTemp, MODAL_QUESTION, YESNO, MODAL_DROP_ITEM );
//CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("CANNOT_DROP") );
//return S_OK;
}*/
if ( !pItem->sBasicOp.IsTHROW() && ( pItem && sCustom.bWrap!=true ) )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "The item you wish to drop is Undropable." );
return E_FAIL;
}
if ( ( pItem && sCustom.bNonDrop !=false ) && ( pItem && sCustom.bWrap!=true ) )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "The item you wish to drop is Undropable." );
return E_FAIL;
}
// ÆÖÄ«µåÀϰæ¿ì
if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD )
{
GLPetClient* pMyPet = GLGaeaClient::GetInstance().GetPetClient ();
if ( pMyPet->IsVALID () && sHoldItem.dwPetID == pMyPet->m_dwPetID )
{
return E_FAIL;
}
}
GLMSG::SNETPC_REQ_HOLD_TO_FIELD NetMsg;
NetMsg.vPos = vPos;
#if defined(VN_PARAM) //vietnamtest%%%
if ( sHoldItem.bVietnamGainItem )
{
NetMsg.bVietnamItem = sHoldItem.bVietnamGainItem;
}
#endif
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqHoldToFieldFireCracker ( const D3DXVECTOR3 &vPos )
{
if ( !VALID_HOLD_ITEM () ) return E_FAIL;
if ( ValidWindowOpen() ) return E_FAIL;
SITEM* pITEM = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pITEM ) return E_FAIL;
if ( pITEM->sBasicOp.emItemType!=ITEM_FIRECRACKER ) return E_FAIL;
if ( pITEM->sBasicOp.strTargetEffect.empty() ) return E_FAIL;
GLMSG::SNETPC_REQ_FIRECRACKER NetMsg;
NetMsg.vPOS = vPos;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
bool GLCharacter::IsNpcPileItem ( SNATIVEID sNID_NPC, DWORD dwChannel, WORD wPosX, WORD wPosY )
{
if ( ValidWindowOpen() ) return false;
PCROWDATA pCrowData = GLCrowDataMan::GetInstance().GetCrowData ( sNID_NPC );
// »óÀÎ NPC°¡ Á¸Á¦ÇÏÁö ¾Ê½À´Ï´Ù.
if ( !pCrowData ) return false;
if ( pCrowData->GetSaleNum() <= dwChannel ) return false;
GLInventory *pInven = pCrowData->GetSaleInven ( dwChannel );
if ( !pInven ) return false;
SINVENITEM* pSaleItem = pInven->FindPosItem ( wPosX, wPosY );
if ( !pSaleItem ) return false;
SNATIVEID sBUYNID = pSaleItem->sItemCustom.sNativeID;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( sBUYNID );
return ( pItem->ISPILE() != FALSE );
}
bool GLCharacter::IsRestartPossible()
{
GLMapList::FIELDMAP MapsList = GLGaeaClient::GetInstance().GetMapList ();
GLMapList::FIELDMAP_ITER iter = MapsList.find ( GLGaeaClient::GetInstance().GetActiveMap ()->GetMapID ().dwID );
if ( iter==MapsList.end() ) return FALSE;
const SMAPNODE *pMapNode = &(*iter).second;
return !pMapNode->bRestart;
}
/*void GLCharacter::SendHackingMSG ()
{
GLMSG::SNET_REQ_SERVERTEST NetMsg;
NETSENDTOFIELD ( &NetMsg );
}
void GLCharacter::SendHackingMSG1 ()
{
}
*/
// *****************************************************
// Desc: ¾ÆÀÌÅÛÀ» ±¸ÀÔÇϰųª/ÆÈ¾Æ¹ö¸²
// *****************************************************
HRESULT GLCharacter::ReqNpcTo ( SNATIVEID sNID_NPC, DWORD dwChannel, WORD wPosX, WORD wPosY, WORD wBuyNum )
{
if ( ValidWindowOpen() ) return E_FAIL;
PCROWDATA pCrowData = GLCrowDataMan::GetInstance().GetCrowData ( sNID_NPC );
if ( !pCrowData )
{
// »óÀÎ NPC°¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.
return E_FAIL;
}
// ¾ÆÀÌÅÆÀ» ÆÈ±â ¼öÇà.
if ( VALID_HOLD_ITEM() )
{
SITEM* pItem = GLItemMan::GetInstance().GetItem ( GET_HOLD_ITEM().sNativeID );
// °Å·¡¿É¼Ç
if ( !pItem->sBasicOp.IsSALE() )
{
// ÆÈ±â °¡´ÉÇÏÁö ¾ÊÀ½.
return E_FAIL;
}
if ( GET_HOLD_ITEM().IsGM_GENITEM() )
{
// ÆÈ±â °¡´ÉÇÏÁö ¾ÊÀ½.
return E_FAIL;
}
// ÆÖÄ«µåÀϰæ¿ì
if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD )
{
const SITEMCUSTOM& sHoldItem = GET_HOLD_ITEM();
GLPetClient* pMyPet = GLGaeaClient::GetInstance().GetPetClient ();
if ( pMyPet->IsVALID () && sHoldItem.dwPetID == pMyPet->m_dwPetID )
{
return E_FAIL;
}
}
// ÆÈ±â ¸Þ½ÃÁö.
GLMSG::SNETPC_REQ_SALE_TO_NPC NetMsg;
NetMsg.sNID = sNID_NPC;
NetMsg.dwNPCID = m_dwNPCID;
NETSENDTOFIELD ( &NetMsg );
}
// ¾ÆÀÌÅÆ »ç±â ¼öÇà.
else
{
GASSERT(wBuyNum>0&&"¾ÆÀÌÅÛ ±¸ÀÔ ¿äû ¼ö·®Àº 1°³ ÀÌ»óÀÌ¿©¾ß ÇÑ´Ù.");
if ( pCrowData->GetSaleNum() <= dwChannel ) return E_FAIL;
GLInventory *pInven = pCrowData->GetSaleInven ( dwChannel );
if ( !pInven ) return E_FAIL;
SINVENITEM* pSaleItem = pInven->FindPosItem ( wPosX, wPosY );
if ( !pSaleItem )
{
// »ì·Á°í ÇÏ´Â ¾ÆÀÌÅÆÀÌ ¾ø½À´Ï´Ù.
return E_FAIL;
}
SNATIVEID sBUYNID = pSaleItem->sItemCustom.sNativeID;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( sBUYNID );
LONGLONG dwPrice = pCrowData->GetNpcSellPrice(pItem->sBasicOp.sNativeID.dwID);
//add money 2
//no tax for vot item
if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM )
{
dwPrice = pItem->sBasicOp.dwBuyPrice;
}
//add money 3
//no tax for premium item
else if (pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
{
dwPrice = pItem->sBasicOp.dwBuyPrice;
}
//add contributionpoint by CNDev
//no tax for contributionpoint item
else if (pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
{
dwPrice = pItem->sBasicOp.dwBuyPrice;
}
else
{
if( dwPrice == 0 )
{
dwPrice = pItem->sBasicOp.dwBuyPrice;
}
}
//add money 2
//price check for vote item
if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM )
{
if ( m_lnVoteP < (LONGLONG)dwPrice*wBuyNum )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("BUYITEM_NOMONEY_2") );
return E_FAIL;
}
}
//add money 3
//price check for premium item
else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
{
if ( m_lnPremP < (LONGLONG)dwPrice*wBuyNum )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("BUYITEM_NOMONEY_3") );
return E_FAIL;
}
}
//add contributionpoint by CNDev
else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
{
if ( m_wSchool != GLGaeaClient::GetInstance().GetActiveMap()->m_dwCTFWINNER )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, "Your school is not the Tyranny Winner, Unable to purchase the item." );
return E_FAIL;
}
if ( m_lnContribP < (LONGLONG)dwPrice*wBuyNum )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("BUYITEM_NOMONEY_4") );
return E_FAIL;
}
}
//price check for gold
else
{
if ( m_lnMoney < (LONGLONG)dwPrice*wBuyNum )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("BUYITEM_NOMONEY") );
return E_FAIL;
}
}
WORD wINVENX = pItem->sBasicOp.wInvenSizeX;
WORD wINVENY = pItem->sBasicOp.wInvenSizeY;
// Note : Àκ¥¿¡ ¿©À¯ °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ç.
//
BOOL bITEM_SPACE(FALSE);
if ( pItem->ISPILE() )
{
// °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
WORD wPILENUM = pItem->sDrugOp.wPileNum;
WORD wREQINSRTNUM = ( wBuyNum * pItem->GETAPPLYNUM() );
bITEM_SPACE = m_cInventory.ValidPileInsrt ( wREQINSRTNUM, sBUYNID, wPILENUM, wINVENX, wINVENY );
}
else
{
GASSERT(wBuyNum==1&&"°ãħÀÌ ºÒ°¡´ÉÇÑ ¾ÆÀÌÅÛÀº 1°³¾¿¸¸ ±¸ÀÔ °¡´ÉÇÕ´Ï´Ù.");
// ÀÏ¹Ý ¾ÆÀÌÅÛÀÇ °æ¿ì.
WORD wInsertPosX(0), wInsertPosY(0);
bITEM_SPACE = m_cInventory.FindInsrtable ( wINVENX, wINVENY, wInsertPosX, wInsertPosY );
}
if ( !bITEM_SPACE )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("BUYITEM_NOSPACE") );
return E_FAIL;
}
// ±¸ÀÔ ¿äû ¸Þ½ÃÁö.
GLMSG::SNETPC_REQ_BUY_FROM_NPC NetMsg;
NetMsg.sNID = sNID_NPC;
NetMsg.dwNPCID = m_dwNPCID;
NetMsg.dwChannel = dwChannel;
NetMsg.wPosX = pSaleItem->wPosX;
NetMsg.wPosY = pSaleItem->wPosY;
NetMsg.wBuyNum = wBuyNum;
NETSENDTOFIELD ( &NetMsg );
}
return S_OK;
}
// *****************************************************
// Desc: ºô¸µ ¾ÆÀÌÅÛ Á¤º¸ DB¿¡¼ °¡Á®¿À±â
// *****************************************************
HRESULT GLCharacter::ReqItemBankInfo ()
{
GLMSG::SNET_GET_CHARGEDITEM_FROMDB NetMsg;
NetMsg.dwCharID = m_dwCharID;
StringCchCopy ( NetMsg.szUID, USR_ID_LENGTH+1, m_szUID );
NETSENDTOFIELD ( &NetMsg );
m_cInvenCharged.DeleteItemAll ();
m_mapChargedKey.clear();
return S_OK;
}
HRESULT GLCharacter::ReqDeducPoints ( DWORD wPoint1 , DWORD wPoint2 )
{
//if ( wPoint1 )
// COuterInterface::GetInstance().SetUserPointDeduc(wPoint1);
//else
// COuterInterface::GetInstance().SetUserPoint2Deduc(wPoint2);
return S_OK;
}
HRESULT GLCharacter::ReqItemShopInfo ()
{
for (int i=0;i<13;++i)
{
m_cInvenItemShopVote[i].DeleteItemAll ();
m_mapItemShopVoteKey[i].clear();
m_cInvenItemShopPremium[i].DeleteItemAll ();
m_mapItemShopPremiumKey[i].clear();
m_cInvenItemShop[i].DeleteItemAll ();
m_mapItemShopKey[i].clear();
}
GLMSG::SNET_GET_ITEMSHOP_FROMDB NetMsg;
NetMsg.dwCharID = m_dwCharID;
StringCchCopy ( NetMsg.szUID, USR_ID_LENGTH+1, m_szUID );
NETSENDTOFIELD ( &NetMsg );
GLMSG::SNETPC_RETRIEVE_POINTS pNetMsg;
NETSENDTOFIELD ( &pNetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqBuyItem ( const char* szPurkey )
{
if ( !IsValidBody() ) return E_FAIL;
GLMSG::SNET_ITEMSHOP_BUY NetMsg;
StringCchCopy ( NetMsg.szPurKey, PURKEY_LENGTH+1, szPurkey );
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqChargedItemTo ( WORD wPosX, WORD wPosY )
{
SINVENITEM *pINVENITEM = m_cInvenCharged.GetItem ( wPosX, wPosY );
if ( !pINVENITEM ) return E_FAIL;
SNATIVEID nidPOS(wPosX,wPosY);
MAPSHOP_KEY_ITER iter = m_mapChargedKey.find ( nidPOS.dwID );
if ( m_mapChargedKey.end()==iter ) return E_FAIL;
std::string strPurKey = (*iter).second;
// Note : ¾ÆÀÌÅÛ °¡Á®¿À±â ¿äû.
//
GLMSG::SNET_CHARGED_ITEM_GET NetMsg;
NetMsg.dwID = nidPOS.dwID;
StringCchCopy ( NetMsg.szPurKey, PURKEY_LENGTH+1, strPurKey.c_str() );
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
void GLCharacter::ReqLevelUp ()
{
GLMSG::SNETPC_REQ_LEVELUP NetMsg;
NETSENDTOFIELD ( &NetMsg );
}
//void GLCharacter::ReqStatsUp ( EMSTATS emStats )
//{
// if ( m_wStatsPoint==0 ) return;
//
// GLMSG::SNETPC_REQ_STATSUP NetMsg;
// NetMsg.emStats = emStats;
// NETSENDTOFIELD ( &NetMsg );
//}
void GLCharacter::ReqStatsUp ( SCHARSTATS sStats )
{
if ( m_wStatsPoint==0 ) return;
if ( sStats.GetTotal() > m_wStatsPoint ) return;
/*switch( sStats )
{
case sStats.dwPow: CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::GREENYELLOW, "Adding %d Pow. Success!" ); break;
case sStats.dwStr: CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::GREENYELLOW, "Adding %d Vit. Success!" ); break;
case sStats.dwSpi: CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::GREENYELLOW, "Adding %d Int. Success!" ); break;
case sStats.dwDex: CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::GREENYELLOW, "Adding %d Dex. Success!" ); break;
case sStats.dwSta: CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::GREENYELLOW, "Adding %d Stamina. Success!" ); break;
}*/
GLMSG::SNETPC_REQ_STATSUP NetMsg;
NetMsg.sStats = sStats;
NETSENDTOFIELD ( &NetMsg );
}
/*
void GLCharacter::ReqStatsUpCmd( EMSTATS emStats, DWORD value )
{
if ( m_wStatsPoint < value) return;
GLMSG::SNETPC_REQ_STATSUPCMD NetMsg;
NetMsg.emStats = emStats;
NetMsg.dwValue = value;
NETSENDTOFIELD ( &NetMsg );
}*/
/*void GLCharacter::ReqAllowBet ( BOOL bAllowBet ) //add duel bet
{
GLMSG::SNETPC_REQ_ALLOW_BET NetMsg;
NetMsg.bAllowBet = bAllowBet;
NETSENDTOFIELD ( &NetMsg );
}*/
HRESULT GLCharacter::ReqSkillQuickSet ( const SNATIVEID skill_id, const WORD wSLOT )
{
if ( EMSKILLQUICK_SIZE <= wSLOT ) return E_FAIL;
// Note : ¹è¿î ½ºÅ³ÀÌ ¾Æ´Ò °æ¿ì Ãë¼ÒµÊ.
if ( !ISLEARNED_SKILL(skill_id) ) return E_FAIL;
GLMSG::SNETPC_REQ_SKILLQUICK_SET NetMsg;
NetMsg.wSLOT = wSLOT;
NetMsg.skill_id = skill_id;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqSkillQuickReSet ( const WORD wSLOT )
{
if ( EMSKILLQUICK_SIZE <= wSLOT ) return E_FAIL;
// Note : Ŭ¶óÀ̾ðÆ®ÀÇ ½½·ÔÀ» ºñ¿öÁÜ.
//m_sSKILLQUICK[wSLOT] = NATIVEID_NULL();
GLMSG::SNETPC_REQ_SKILLQUICK_RESET NetMsg;
NetMsg.wSLOT = wSLOT;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// Note : ¾ÆÀÌÅÛ ½½·Ô¿¡ µî·Ï/Á¦°Å.
HRESULT GLCharacter::ReqItemQuickSet ( const WORD wSLOT )
{
if ( EMACTIONQUICK_SIZE <= wSLOT ) return E_FAIL;
if ( !VALID_HOLD_ITEM() ) return S_FALSE;
const SITEMCUSTOM& sITEM = GET_HOLD_ITEM ();
#if defined(VN_PARAM) //vietnamtest%%%
if ( sITEM.bVietnamGainItem ) return S_FALSE;
#endif
SITEM* pITEM = GLItemMan::GetInstance().GetItem ( sITEM.sNativeID );
if ( !pITEM ) return S_FALSE;
if ( pITEM->sBasicOp.emItemType != ITEM_CURE &&
pITEM->sBasicOp.emItemType != ITEM_RECALL &&
pITEM->sBasicOp.emItemType != ITEM_TELEPORT_CARD /*&&
pITEM->sBasicOp.emItemType != ITEM_PET_CARD*/ )
// Disabled to avoid crash on Field Server
// 08-14-2013 11:25 PM
//
return S_FALSE;
// Note : Ŭ¶óÀ̾ðÆ®ÀÇ ½½·Ô¿¡ ¹Ù·Î ³Ö¾îÁÜ.
//m_sACTIONQUICK[wSLOT].wACT = EMACT_SLOT_DRUG;
//m_sACTIONQUICK[wSLOT].sNID = sITEM.sNativeID;
// Note : ¼¹ö¿¡ ½½·Ô¿¡ µé¾î°¥ Á¤º¸ Àü¼Û.
GLMSG::SNETPC_REQ_ACTIONQUICK_SET NetMsg;
NetMsg.wSLOT = wSLOT;
NetMsg.wACT = EMACT_SLOT_DRUG;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqItemQuickReSet ( const WORD wSLOT )
{
if ( EMACTIONQUICK_SIZE <= wSLOT ) return E_FAIL;
//m_sACTIONQUICK[wSLOT].RESET ();
GLMSG::SNETPC_REQ_ACTIONQUICK_RESET NetMsg;
NetMsg.wSLOT = wSLOT;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// Note : ½ºÅ³ ½½·Ô¿¡ µî·Ï/Á¦°Å.
HRESULT GLCharacter::ReqSkillRunSet ( const WORD wSLOT )
{
if ( EMSKILLQUICK_SIZE <= wSLOT ) return E_FAIL;
const SNATIVEID &skill_id = m_sSKILLQUICK[wSLOT];
if ( skill_id==NATIVEID_NULL() ) return E_FAIL;
// Note : ¹è¿î ½ºÅ³ÀÌ ¾Æ´Ò °æ¿ì Ãë¼ÒµÊ.
if ( !ISLEARNED_SKILL(skill_id) ) return E_FAIL;
m_sRunSkill = skill_id;
GLMSG::SNETPC_REQ_SKILLQUICK_ACTIVE NetMsg;
NetMsg.wSLOT = wSLOT;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqSkillRunReSet ()
{
m_sRunSkill = NATIVEID_NULL();
return S_OK;
}
// *****************************************************
// Desc: ¼¹ö¿¡ â°í Á¤º¸ ¿äû ( ¶ôÄ¿ °ü¸®ÀÎ )
// *****************************************************
HRESULT GLCharacter::ReqGetStorage ( DWORD dwChannel, DWORD dwNPCID = 0 )
{
if ( !IsValidBody() ) return E_FAIL;
if ( IsVALID_STORAGE(dwChannel) ) return S_OK;
// Note : ¼¹ö¿¡ ¿äû.
//
GLMSG::SNETPC_REQ_GETSTORAGE NetMsg;
NetMsg.dwChannel = dwChannel;
NetMsg.dwNPCID = m_dwNPCID;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// *****************************************************
// Desc: â°í ¾ÆÀÌÅÛ µé¶§, ³õÀ»¶§, ±³È¯ÇÒ¶§, ÇÕÄ¥¶§.
// *****************************************************
HRESULT GLCharacter::ReqStorageTo ( DWORD dwChannel, WORD wPosX, WORD wPosY )
{
if ( !IsValidBody() ) return E_FAIL;
if ( !IsVALID_STORAGE(dwChannel) ) return S_OK;
if ( ValidWindowOpen() ) return E_FAIL;
SINVENITEM* pInvenItem = m_cStorage[dwChannel].FindPosItem ( wPosX, wPosY );
if ( !VALID_HOLD_ITEM () && !pInvenItem ) return E_FAIL;
if ( VALID_HOLD_ITEM() )
{
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( GET_HOLD_ITEM().sNativeID );
if ( !pITEM ) return false;
// °Å·¡¿É¼Ç
if ( GET_HOLD_ITEM().bWrap!= true )
{
if ( !pITEM->sBasicOp.IsEXCHANGE() ) return FALSE;
if ( GET_HOLD_ITEM().bNonDrop!= false ) return FALSE;
}
}
bool bKEEP = IsKEEP_STORAGE(dwChannel);
if ( VALID_HOLD_ITEM () && pInvenItem )
{
#if defined(VN_PARAM) //vietnamtest%%%
if ( !GET_HOLD_ITEM().bVietnamGainItem )
#endif
{
if ( !bKEEP )
{
// Note : ¾ÆÀÌÅÛÀ» ³ÖÀ» ¼ö ¾øÀ» °æ¿ì..
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("STORAGE_SPAN_END") );
return E_FAIL;
}
GLMSG::SNETPC_REQ_STORAGE_EX_HOLD NetMsg;
NetMsg.dwChannel = dwChannel;
NetMsg.dwNPCID = m_dwNPCID;
NetMsg.wPosX = pInvenItem->wPosX;
NetMsg.wPosY = pInvenItem->wPosY;
NETSENDTOFIELD ( &NetMsg );
}
}
else if ( pInvenItem )
{
GLMSG::SNETPC_REQ_STORAGE_TO_HOLD NetMsg;
NetMsg.dwChannel = dwChannel;
NetMsg.dwNPCID = m_dwNPCID;
NetMsg.wPosX = pInvenItem->wPosX;
NetMsg.wPosY = pInvenItem->wPosY;
NETSENDTOFIELD ( &NetMsg );
}
else if ( VALID_HOLD_ITEM () )
{
#if defined(VN_PARAM) //vietnamtest%%%
if ( !GET_HOLD_ITEM().bVietnamGainItem )
#endif
{
if ( !bKEEP )
{
// Note : ¾ÆÀÌÅÛÀ» ³ÖÀ» ¼ö ¾øÀ» °æ¿ì..
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("STORAGE_SPAN_END") );
return E_FAIL;
}
// Note : ¸Þ½ÃÁö ¼Û½ÅÀü¿¡ À¯È¿ÇÒÁö¸¦ ¹Ì¸® °Ë»çÇÔ.
//
SITEM* pItem = GLItemMan::GetInstance().GetItem ( GET_HOLD_ITEM().sNativeID );
GASSERT(pItem&&"¾ÆÀÌÅÆ ´ëÀÌÅͰ¡ Á¸Á¦ÇÏÁö ¾ÊÀ½");
BOOL bOk = m_cStorage[dwChannel].IsInsertable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk )
{
// ÀιêÀÌ °¡µæÂþÀ½.
return E_FAIL;
}
GLMSG::SNETPC_REQ_HOLD_TO_STORAGE NetMsg;
NetMsg.dwChannel = dwChannel;
NetMsg.dwNPCID = m_dwNPCID;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
}
}
return S_OK;
}
// *****************************************************
// Desc: ½ºÅ³ ¹è¿ì±â ¿äû. ( â°í ¾ÆÀÌÅÛÀ¸·Î. )
// *****************************************************
HRESULT GLCharacter::ReqStorageSkill ( DWORD dwChannel, WORD wPosX, WORD wPosY )
{
if ( !IsValidBody() ) return E_FAIL;
if ( !IsVALID_STORAGE(dwChannel) ) return S_OK;
if ( ValidWindowOpen() ) return E_FAIL;
SINVENITEM* pInvenItem = m_cStorage[dwChannel].FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem || pItem->sBasicOp.emItemType!=ITEM_SKILL ) return E_FAIL;
SNATIVEID sSKILL_ID = pItem->sSkillBookOp.sSkill_ID;
if ( ISLEARNED_SKILL(sSKILL_ID) )
{
// ÀÌ¹Ì ½ÀµæÇÑ ½ºÅ³.
return E_FAIL;
}
EMSKILL_LEARNCHECK emSKILL_LEARNCHECK = CHECKLEARNABLE_SKILL(sSKILL_ID);
if ( emSKILL_LEARNCHECK!=EMSKILL_LEARN_OK )
{
// ½ºÅ³ ½Àµæ ¿ä±¸ Á¶°ÇÀ» ÃæÁ·ÇÏÁö ¸øÇÕ´Ï´Ù.
return E_FAIL;
}
// Note : ½ºÅ³ ½ÀµæÀ» ¿äûÇÕ´Ï´Ù.
//
GLMSG::SNETPC_REQ_LEARNSKILL_STORAGE NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NetMsg.dwNPCID = m_dwNPCID;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// *****************************************************
// Desc: â°í ¾ÆÀÌÅÛ »ç¿ëÇÒ¶§ ( ¸¶½Ã±â, ½ºÅ³¹è¿ì±â µî ).
// *****************************************************
HRESULT GLCharacter::ReqStorageDrug ( DWORD dwChannel, WORD wPosX, WORD wPosY )
{
if ( !IsValidBody() ) return E_FAIL;
if ( !IsVALID_STORAGE(dwChannel) ) return S_OK;
if ( ValidWindowOpen() ) return E_FAIL;
SINVENITEM* pInvenItem = m_cStorage[dwChannel].FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
if ( CheckCoolTime( pInvenItem->sItemCustom.sNativeID ) ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem ) return E_FAIL;
// ·¹º§ Á¶°Ç È®ÀÎ
if ( !SIMPLE_CHECK_ITEM( pItem->sBasicOp.sNativeID ) ) return S_FALSE;
if ( pItem->sBasicOp.emItemType == ITEM_CURE )
{
// Note : pk µî±ÞÀÌ »ìÀθ¶ µî±Þ ÀÌ»óÀÏ °æ¿ì ȸº¹¾àÀÇ »ç¿ëÀ» ¸·´Â´Ù.
//
DWORD dwPK_LEVEL = GET_PK_LEVEL();
if ( dwPK_LEVEL != UINT_MAX && dwPK_LEVEL>GLCONST_CHAR::dwPK_DRUG_ENABLE_LEVEL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_DRUG_PK_LEVEL") );
return E_FAIL;
}
if ( m_sCONFTING.IsFIGHTING() && !m_sCONFTING.IsRECOVE() )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("CONFRONT_RECOVE"), 0 );
return E_FAIL;
}
if ( pItem->sDrugOp.emDrug!=ITEM_DRUG_NUNE )
{
switch ( pItem->sDrugOp.emDrug )
{
case ITEM_DRUG_HP:
if ( m_sHP.dwMax == m_sHP.dwNow ) return S_FALSE;
break;
case ITEM_DRUG_MP:
if ( m_sMP.dwMax == m_sMP.dwNow ) return S_FALSE;
break;
case ITEM_DRUG_SP:
if ( m_sSP.dwMax == m_sSP.dwNow ) return S_FALSE; //add cp
break;
case ITEM_DRUG_CP:
if ( m_sCP.dwMax == m_sCP.dwNow ) return S_FALSE;
break;
case ITEM_DRUG_HP_MP:
if ( m_sHP.dwMax==m_sHP.dwNow && m_sMP.dwMax==m_sMP.dwNow ) return S_FALSE;
break;
case ITEM_DRUG_MP_SP:
if ( m_sMP.dwMax==m_sMP.dwNow && m_sSP.dwMax==m_sSP.dwNow ) return S_FALSE;
break;
case ITEM_DRUG_HP_MP_SP:
if ( m_sHP.dwMax==m_sHP.dwNow && m_sMP.dwMax==m_sMP.dwNow
&& m_sSP.dwMax==m_sSP.dwNow ) return S_FALSE;
break;
case ITEM_DRUG_CURE:
if ( !ISSTATEBLOW() ) return S_FALSE;
break;
case ITEM_DRUG_HP_CURE:
if ( m_sHP.dwMax == m_sHP.dwNow && !ISSTATEBLOW() ) return S_FALSE;
break;
case ITEM_DRUG_HP_MP_SP_CURE:
if ( m_sHP.dwMax==m_sHP.dwNow && m_sMP.dwMax==m_sMP.dwNow
&& m_sSP.dwMax==m_sSP.dwNow && !ISSTATEBLOW() ) return S_FALSE;
break;
};
GLMSG::SNETPC_REQ_STORAGEDRUG NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NetMsg.dwNPCID = m_dwNPCID;
NETSENDTOFIELD ( &NetMsg );
}
}
else if ( pItem->sBasicOp.emItemType ==ITEM_SKILL )
{
ReqStorageSkill ( dwChannel, wPosX, wPosY );
}
else if ( pItem->sBasicOp.emItemType ==ITEM_PET_SKILL )
{
GLGaeaClient::GetInstance().GetPetClient()->ReqLearnSkill ( dwChannel, wPosX, wPosY );
}
return S_OK;
}
// *****************************************************
// Desc: â°í µ· ³Ö±â.
// *****************************************************
HRESULT GLCharacter::ReqStorageSaveMoney ( LONGLONG lnMoney )
{
//#if !defined(KR_PARAM) && !defined(KRT_PARAM)
// if( m_lnMoney%UINT_MAX < lnMoney ) return E_FAIL;
//#endif
if ( m_lnMoney < lnMoney ) return E_FAIL;
if ( ValidWindowOpen() ) return E_FAIL;
GLMSG::SNETPC_REQ_STORAGE_SAVE_MONEY NetMsg;
NetMsg.lnMoney = lnMoney;
NetMsg.dwNPCID = m_dwNPCID;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// *****************************************************
// Desc: â°í µ· »©³»±â.
// *****************************************************
HRESULT GLCharacter::ReqStorageDrawMoney ( LONGLONG lnMoney )
{
//#if !defined(KR_PARAM) && !defined(KRT_PARAM)
// if( m_lnStorageMoney%UINT_MAX < lnMoney ) return E_FAIL;
//#endif
if ( m_lnStorageMoney < lnMoney ) return E_FAIL;
if ( ValidWindowOpen() ) return E_FAIL;
GLMSG::SNETPC_REQ_STORAGE_DRAW_MONEY NetMsg;
NetMsg.lnMoney = lnMoney;
NetMsg.dwNPCID = m_dwNPCID;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// Note : µ· ¹Ù´Ú¿¡ ¹ö¸².
HRESULT GLCharacter::ReqMoneyToField ( LONGLONG lnMoney )
{
if ( !GLCONST_CHAR::bMONEY_DROP2FIELD ) return E_FAIL;
if ( lnMoney == 0 ) return E_FAIL;
//#if !defined(KR_PARAM) && !defined(KRT_PARAM)
// if ( m_lnMoney%UINT_MAX < lnMoney ) return E_FAIL;
//#endif
if ( m_lnMoney < lnMoney ) return E_FAIL;
if ( ValidWindowOpen() ) return E_FAIL;
D3DXVECTOR3 vDir(1,0,0);
BOOL bCollision = FALSE;
DWORD dwCollisionID;
D3DXVECTOR3 vCollisionPos(0,0,0);
srand(GetTickCount());
float fBaseY = (rand()%32) * (D3DX_PI*2)/32.0f;
for ( float fRotY = 0.0f; fRotY<D3DX_PI*2; fRotY += 0.2f )
{
D3DXMATRIX matRotY;
D3DXMatrixRotationY ( &matRotY, fRotY+fBaseY );
D3DXVec3TransformCoord ( &vDir, &vDir, &matRotY );
D3DXVec3Normalize ( &vDir, &vDir );
D3DXVECTOR3 vDropPos = GetPosition() + vDir*float(GLCONST_CHAR::wBODYRADIUS+12);
GLGaeaClient::GetInstance().GetActiveMap()->GetNaviMesh()->IsCollision
(
vDropPos + D3DXVECTOR3(0,+5,0),
vDropPos + D3DXVECTOR3(0,-5,0),
vCollisionPos,
dwCollisionID,
bCollision
);
}
if ( !bCollision )
{
GLGaeaClient::GetInstance().GetActiveMap()->GetNaviMesh()->IsCollision
(
GetPosition() + D3DXVECTOR3(0,+5,0),
GetPosition() + D3DXVECTOR3(0,-5,0),
vCollisionPos,
dwCollisionID,
bCollision
);
}
if ( bCollision )
{
GLMSG::SNETPC_REQ_MONEY_TO_FIELD NetMsg;
NetMsg.vPos = vCollisionPos;
NetMsg.lnMoney = lnMoney;
NETSENDTOFIELD ( &NetMsg );
}
return S_OK;
}
// Note : °Å·¡ÇÒ ±Ý¾× ³Ö±â.
//HRESULT GLCharacter::ReqTradeMoney ( LONGLONG lnMoney )
//{
// if ( !GLTradeClient::GetInstance().Valid () ) return E_FAIL;
//
// // Note : ¼ÒÁö ±Ý¾×ÀÌ ÃæºÐÇÑÁö °Ë»ç.
// //
// if ( lnMoney > m_lnMoney ) return E_FAIL;
//
// // Note : ±³È¯ÇÒ ±Ý¾× ¼³Á¤ MSG.
// //
// GLMSG::SNET_TRADE_MONEY NetMsg;
// NetMsg.lnMoney = lnMoney;
// NETSENDTOFIELD(&NetMsg);
//
// return S_OK;
//}
// Note : °Å·¡ÇÒ ¾ÆÀÌÅÛ ³Ö±â/Á¦°Å/±³È¯.
HRESULT GLCharacter::ReqTradeBoxTo ( WORD wPosX, WORD wPosY )
{
if ( !GLTradeClient::GetInstance().Valid () ) return E_FAIL;
SINVENITEM* pTradeItem = GLTradeClient::GetInstance().FindPosItem ( wPosX, wPosY ); // ÇöÀç À§Ä¡¿¡ Æ®·¡ÀÌµå ¹°Ç°ÀÌ µî·ÏµÇ¾î ÀÖÀ½.
SINVEN_POS sPreTradeItem = GLTradeClient::GetInstance().GetPreItem(); // ¿¹ºñ µî·Ï ¾ÆÀÌÅÛÀÌ Á¸Á¦.
// Note : ÇØ´ç À§Ä¡¿¡ ÀÌ¹Ì µî·ÏµÈ ¾ÆÀÌÅÛÀÌ ÀÖ°í µî·ÏÇϰíÀÚ ÇÏ´Â ¾ÆÀÌÅÛÀÌ ÀÖÀ» °æ¿ì.
//
if ( sPreTradeItem.VALID() && pTradeItem )
{
// µî·ÏÇϰíÀÚ ÇÏ´Â ¾ÆÀÌÅÛ.
SINVENITEM* pResistItem = m_cInventory.GetItem ( sPreTradeItem.wPosX, sPreTradeItem.wPosY );
if ( !pResistItem ) return E_FAIL;
// ÀÌ¹Ì µî·ÏµÇ¾î ÀÖ´ÂÁö °Ë»ç.
SINVENITEM* pAlready = GLTradeClient::GetInstance().FindItemBack ( pResistItem->wBackX, pResistItem->wBackY );
if ( pAlready )
{
GLTradeClient::GetInstance().ReSetPreItem();
return E_FAIL;
}
SITEM *pItem = GLItemMan::GetInstance().GetItem ( pResistItem->sItemCustom.sNativeID );
if ( !pItem ) return E_FAIL;
// °Å·¡¿É¼Ç
if ( !pResistItem->sItemCustom.IsWrap() )
{
if ( !pItem->sBasicOp.IsEXCHANGE() ) return E_FAIL;
if ( pResistItem->sItemCustom.IsNonDrop() ) return E_FAIL;
}
if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD )
{
// µé°íÀÖ´Â ¾ÆÀÌÅÛÀÌ ÆÖÄ«µåÀÌ¸ç ÆÖÀÌ È°¼ºÈ µÇ¾î ÀÖÀ¸¸é
GLPetClient* pMyPet = GLGaeaClient::GetInstance().GetPetClient ();
if ( pMyPet->IsVALID () && pResistItem->sItemCustom.dwPetID == pMyPet->m_dwPetID )
{
return E_FAIL;
}
}
if ( pItem->sBasicOp.emItemType == ITEM_VEHICLE && pResistItem->sItemCustom.dwVehicleID != 0 )
{
return E_FAIL;
}
// Note : Á¾Àü ¾ÆÀÌÅÛ°ú »õ·Î¿î ¾ÆÀÌÅÛÀ» ±³È¯ÇÏ¿© À§Ä¡¿¡ µé¾î °¥ ¼ö ÀÖ´ÂÁö °Ë»ç.
//
BOOL bOk = GLTradeClient::GetInstance().IsExInsertable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk ) return FALSE;
// Note : Á¾Àü ¾ÆÀÌÅÛÀ» ¸®½ºÆ®¿¡¼ Á¦°Å.
//
GLMSG::SNET_TRADE_ITEM_REMOVE NetMsgReMove;
NetMsgReMove.wPosX = pTradeItem->wPosX;
NetMsgReMove.wPosY = pTradeItem->wPosY;
NETSENDTOFIELD(&NetMsgReMove);
// Note : »õ·Î¿î ¾ÆÀÌÅÛÀ» ¸®½ºÆ®¿¡ µî·Ï.
GLMSG::SNET_TRADE_ITEM_REGIST NetMsgRegist;
NetMsgRegist.wPosX = wPosX;
NetMsgRegist.wPosY = wPosY;
NetMsgRegist.wInvenX = sPreTradeItem.wPosX;
NetMsgRegist.wInvenY = sPreTradeItem.wPosY;
NETSENDTOFIELD(&NetMsgRegist);
GLTradeClient::GetInstance().ReSetPreItem();
}
// Note : µî·ÏÇÒ ¾ÆÀÌÅÛÀÌ ÀÖ´Â °æ¿ì.
//
else if ( sPreTradeItem.VALID() )
{
// µî·ÏÇϰíÀÚ ÇÏ´Â ¾ÆÀÌÅÛ.
SINVENITEM* pResistItem = m_cInventory.GetItem ( sPreTradeItem.wPosX, sPreTradeItem.wPosY );
if ( !pResistItem ) return E_FAIL;
// ÀÌ¹Ì µî·ÏµÇ¾î ÀÖ´ÂÁö °Ë»ç.
SINVENITEM* pAlready = GLTradeClient::GetInstance().FindItemBack ( sPreTradeItem.wPosX, sPreTradeItem.wPosY );
if ( pAlready )
{
GLTradeClient::GetInstance().ReSetPreItem();
return E_FAIL;
}
// Note : ÇØ´çÀ§Ä¡¿¡ µé¾î °¥ ¼ö ÀÖ´ÂÁö °Ë»ç.
//
SITEM *pItem = GLItemMan::GetInstance().GetItem ( pResistItem->sItemCustom.sNativeID );
if ( !pItem ) return E_FAIL;
// °Å·¡¿É¼Ç
if ( !pResistItem->sItemCustom.IsWrap() )
{
if ( !pItem->sBasicOp.IsEXCHANGE() ) return E_FAIL;
if ( pResistItem->sItemCustom.IsNonDrop() ) return E_FAIL;
}
if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD )
{
// µé°íÀÖ´Â ¾ÆÀÌÅÛÀÌ ÆÖÄ«µåÀÌ¸ç ÆÖÀÌ È°¼ºÈ µÇ¾î ÀÖÀ¸¸é
const SITEMCUSTOM& sHold = GET_HOLD_ITEM();
GLPetClient* pMyPet = GLGaeaClient::GetInstance().GetPetClient ();
if ( pMyPet->IsVALID () && pResistItem->sItemCustom.dwPetID == pMyPet->m_dwPetID )
{
return E_FAIL;
}
}
if ( pItem->sBasicOp.emItemType == ITEM_VEHICLE && pResistItem->sItemCustom.dwVehicleID != 0 )
{
return E_FAIL;
}
BOOL bOk = GLTradeClient::GetInstance().IsInsertable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk ) return E_FAIL;
// Note : »õ·Î¿î ¾ÆÀÌÅÛÀ» ¸®½ºÆ®¿¡ µî·Ï.
GLMSG::SNET_TRADE_ITEM_REGIST NetMsgRegist;
NetMsgRegist.wPosX = wPosX;
NetMsgRegist.wPosY = wPosY;
NetMsgRegist.wInvenX = sPreTradeItem.wPosX;
NetMsgRegist.wInvenY = sPreTradeItem.wPosY;
NETSENDTOFIELD(&NetMsgRegist);
GLTradeClient::GetInstance().ReSetPreItem();
}
// Note : ¸®½ºÆ®¿¡¼ »èÁ¦ÇÒ ¾ÆÀÌÅÛÀÌ Àִ°æ¿ì.
//
else if ( pTradeItem )
{
GLMSG::SNET_TRADE_ITEM_REMOVE NetMsgReMove;
NetMsgReMove.wPosX = pTradeItem->wPosX;
NetMsgReMove.wPosY = pTradeItem->wPosY;
NETSENDTOFIELD(&NetMsgReMove);
}
return S_OK;
}
// Note : °Å·¡ ¼ö¶ô.
HRESULT GLCharacter::ReqTradeAgree ()
{
if ( !GLTradeClient::GetInstance().Valid () ) return E_FAIL;
if ( !GLTradeClient::GetInstance().IsAgreeAble() )
{
// Note : Áö±ÝÀº °Å·¡ ½ÂÀÎÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù. X`s ÈÄ¾Ö ´Ù½Ã ½Ãµµ ÇÏ¿© Áֽʽÿä.
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("TRADE_AGREE_TIME") );
return E_FAIL;
}
// Note : °Å·¡½Ã µé¾î¿Ã ¾ÆÀÌÅÛµéÀÇ °ø°£ÀÇ ¿©À¯°¡ ÀÖ´ÂÁö °Ë»ç.
//
if ( !IsVaildTradeInvenSpace () )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("TRADE_AGREE_FAIL_MYINVEN") );
return E_FAIL;
}
GLMSG::SNET_TRADE_AGREE NetMsg;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
// Note : °Å·¡ Ãë¼Ò.
HRESULT GLCharacter::ReqTradeCancel ()
{
if ( !GLTradeClient::GetInstance().Valid () ) return E_FAIL;
GLMSG::SNET_TRADE_CANCEL NetMsg;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
// Note : ºÎȰ À§Ä¡ ÁöÁ¤ ¿äû.
HRESULT GLCharacter::ReqReGenGate ( DWORD dwNpcID )
{
GLMSG::SNETPC_REQ_REGEN_GATE NetMsg;
PLANDMANCLIENT pLandMan = GLGaeaClient::GetInstance().GetActiveMap ();
PGLCROWCLIENT pCrow = pLandMan->GetCrow ( dwNpcID );
if ( !pCrow ) goto _REQ_FAIL;
if ( pCrow->GETCROW() != CROW_NPC ) goto _REQ_FAIL;
// Note : ºÎȰÀ§Ä¡ ÁöÁ¤ ¿äû.
//
NetMsg.dwNpcID = dwNpcID;
NETSEND(&NetMsg);
return S_OK;
_REQ_FAIL:
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREGEN_GATE_FAIL") );
return E_FAIL;
}
// *****************************************************
// Desc: ºÎȰÇϱâ
// *****************************************************
void GLCharacter::ReqReBirth ()
{
if ( !IsACTION(GLAT_DIE) ) return;
// ´ë±â»óÅ¿¡ µé¾î°¨.
m_dwWAIT = 0;
SetSTATE(EM_ACT_DIE);
// ºÎȰ ¿äû.
GLMSG::SNETPC_REQ_REBIRTH NetMsg;
NetMsg.bRegenEntryFailed = FALSE;
NetMsg.bCTFMAP = FALSE;
// ºÎȰ ÁöÁ¡À¸·Î ÁøÀÔ ºÒ°¡½Ã ºÎȰ ÁöÁ¡À» ÃʱâÈÇÑ´Ù.
if ( m_dwUserLvl < USER_GM3 )
{
SMAPNODE *pNODE = GLGaeaClient::GetInstance().FindMapNode(m_sStartMapID);
if ( pNODE )
{
EMREQFAIL emReqFail(EMREQUIRE_COMPLETE);
GLLevelFile cLevelFile;
BOOL bOk = cLevelFile.LoadFile ( pNODE->strFile.c_str(), TRUE, NULL );
if( bOk )
{
SLEVEL_REQUIRE* pRequire = cLevelFile.GetLevelRequire ();
emReqFail = pRequire->ISCOMPLETE ( this );
if ( emReqFail != EMREQUIRE_COMPLETE )
{
m_sStartMapID = GLCONST_CHAR::nidSTARTMAP[m_wSchool];
m_dwStartGate = GLCONST_CHAR::dwSTARTGATE[m_wSchool];
m_vStartPos = D3DXVECTOR3(0.0f,0.0f,0.0f);
NetMsg.bRegenEntryFailed = TRUE;
}
if ( m_sStartMapID.wMainID==119 && GLGaeaClient::GetInstance().GetActiveMap()->GetMapID().wMainID != 119)
{
m_sStartMapID = GLCONST_CHAR::nidSTARTMAP[m_wSchool];
m_dwStartGate = GLCONST_CHAR::dwSTARTGATE[m_wSchool];
m_vStartPos = D3DXVECTOR3(0.0f,0.0f,0.0f);
NetMsg.bRegenEntryFailed = TRUE;
}
}
}
}
PLANDMANCLIENT pLAND = GLGaeaClient::GetInstance().GetActiveMap ();
if ( pLAND && ( pLAND->m_bTowerWars || pLAND->m_bRoyalRumble ))
{
NetMsg.bCTFMAP = TRUE;
NetMsg.sCURMAPID = pLAND->GetMapID();
}
NETSEND ( &NetMsg );
// ¹èƲ·Î¾â À̺¥Æ®À϶§ ¾²·¯Áö¸é Åõ¸í¸ðµå ÇØÁ¦
if ( GLCONST_CHAR::bBATTLEROYAL )
{
ReSetSTATE(EM_REQ_VISIBLEOFF);
// Note : (¿¡ÀÌÁ¯Æ®¼¹ö) ¸Þ¼¼Áö ¹ß»ý.
//
GLMSG::SNETPC_ACTSTATE NetMsg;
NetMsg.dwActState = m_dwActState;
NETSEND ( (NET_MSG_GENERIC*) &NetMsg );
}
}
// *****************************************************
// Desc: ºÎȰÇϱâ (±ÍÈ¥ÁÖ »ç¿ë)
// *****************************************************
HRESULT GLCharacter::ReqReGenRevive ()
{
if ( !IsACTION(GLAT_DIE) ) return E_FAIL;
if ( !ISREVIVE () ) return E_FAIL;
// ´ë±â»óÅ¿¡ µé¾î°¨.
m_dwWAIT = 0;
SetSTATE(EM_ACT_DIE);
// ±ÍÈ¥ÁÖ »ç¿ë ¿äû
GLMSG::SNETPC_REQ_REVIVE NetMsg;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
// °æÇèÄ¡ º¹±¸¸¦ ¿äûÇÑ´Ù.
HRESULT GLCharacter::ReqRecoveryExp ()
{
// °æÇèġȸº¹_Á¤ÀÇ_Normal
#if defined( _RELEASED ) || defined ( KRT_PARAM ) || defined ( KR_PARAM )
if ( !IsACTION(GLAT_DIE) ) return E_FAIL;
// ´ë±â»óÅ¿¡ µé¾î°¨.
m_dwWAIT = 0;
SetSTATE(EM_ACT_DIE);
// °æÇèġȸº¹ ºÎȰ ¿äû
GLMSG::SNETPC_REQ_RECOVERY NetMsg;
NETSENDTOFIELD(&NetMsg);
#endif
return S_OK;
}
// °æÇèÄ¡ º¹±¸¸¦ ¿äûÇÑ´Ù Npc
HRESULT GLCharacter::ReqRecoveryExpNpc ( DWORD dwNpcID )
{
// °æÇèġȸº¹_Á¤ÀÇ_Npc
#if defined( _RELEASED ) || defined ( KRT_PARAM ) || defined ( KR_PARAM ) || defined ( TH_PARAM ) || defined ( MYE_PARAM ) || defined ( MY_PARAM ) || defined ( PH_PARAM ) || defined ( CH_PARAM ) || defined ( TW_PARAM ) || defined ( HK_PARAM ) || defined ( GS_PARAM )
GLMSG::SNETPC_REQ_RECOVERY_NPC NetMsg;
NetMsg.dwNPCID = dwNpcID;
NETSENDTOFIELD(&NetMsg);
#endif
return S_OK;
}
// Note : º¹±¸ÇÒ °æÇèÄ¡¸¦ ¹¯´Â´Ù.
HRESULT GLCharacter::ReqGetReExp ()
{
// °æÇèġȸº¹_Á¤ÀÇ_Normal
#if defined( _RELEASED ) || defined ( KRT_PARAM ) || defined ( KR_PARAM )
if ( !IsACTION(GLAT_DIE) ) return E_FAIL;
// º¹±¸ÇÒ °æÇèÄ¡¸¦ ¿äû
GLMSG::SNETPC_REQ_GETEXP_RECOVERY NetMsg;
NETSENDTOFIELD(&NetMsg);
#endif
return S_OK;
}
HRESULT GLCharacter::ReqGetReExpNpc ( DWORD dwNpcID )
{
// °æÇèġȸº¹_Á¤ÀÇ_Npc
#if defined( _RELEASED ) || defined ( KRT_PARAM ) || defined ( KR_PARAM ) || defined ( TH_PARAM ) || defined ( MYE_PARAM ) || defined ( MY_PARAM ) || defined ( PH_PARAM ) || defined ( CH_PARAM ) || defined ( TW_PARAM ) || defined ( HK_PARAM ) || defined ( GS_PARAM )
// º¹±¸ÇÒ °æÇèÄ¡¸¦ ¿äû
GLMSG::SNETPC_REQ_GETEXP_RECOVERY_NPC NetMsg;
NetMsg.dwNPCID = dwNpcID;
NETSENDTOFIELD(&NetMsg);
#endif
return S_OK;
}
HRESULT GLCharacter::ReqCure ( DWORD dwNpcID, DWORD dwGlobalID )
{
GLMSG::SNETPC_REQ_CURE NetMsg;
PLANDMANCLIENT pLandMan = GLGaeaClient::GetInstance().GetActiveMap ();
PGLCROWCLIENT pCrow = pLandMan->GetCrow ( dwNpcID );
if ( !pCrow ) goto _REQ_FAIL;
if ( pCrow->GETCROW() != CROW_NPC ) goto _REQ_FAIL;
// Note : Ä¡·á ¿äû.
NetMsg.dwNpcID = dwNpcID;
NetMsg.dwGlobalID = dwGlobalID;
NETSENDTOFIELD(&NetMsg);
return S_OK;
_REQ_FAIL:
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREGEN_CURE_FAIL") );
return S_OK;
}
// Note : ij¸¯ÅÍ Á¤º¸ ¸®¼Â. ( stats, skill )
//
HRESULT GLCharacter::ReqCharReset ( DWORD dwNpcID )
{
EMREGEN_CHARRESET_FB emFB = EMREGEN_CHARRESET_FAIL;
WORD wPosX(0), wPosY(0);
GLMSG::SNETPC_REQ_CHARRESET NetMsg;
PLANDMANCLIENT pLandMan = GLGaeaClient::GetInstance().GetActiveMap ();
PGLCROWCLIENT pCrow = pLandMan->GetCrow ( dwNpcID );
if ( !pCrow ) goto _REQ_FAIL;
if ( pCrow->GETCROW() != CROW_NPC ) goto _REQ_FAIL;
bool bITEM = m_cInventory.GetCharResetItem ( wPosX, wPosY );
if ( !bITEM )
{
emFB = EMREGEN_CHARRESET_ITEM_FAIL;
goto _REQ_FAIL;
}
// Note : ij¸¯ÅÍ Á¤º¸ ¸®¼Â.
NetMsg.dwNpcID = dwNpcID;
NETSENDTOFIELD(&NetMsg);
return S_OK;
_REQ_FAIL:
switch ( emFB )
{
case EMREGEN_CHARRESET_FAIL:
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREGEN_CHARRESET_FAIL") );
break;
case EMREGEN_CHARRESET_ITEM_FAIL:
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREGEN_CHARRESET_ITEM_FAIL") );
break;
};
return S_OK;
}
// Note : NPC¿Í itemÀ» ±³È¯ A:npc¿¡°Ô Áִ°͵é, b:npc¿¡°Ô¼ ¹Þ´Â°Í.
HRESULT GLCharacter::ReqItemTrade ( DWORD dwNpcID, DWORD dwGlobalID, DWORD *pDwA_NID, DWORD dwB_NID )
{
EMNPC_ITEM_TRADE_FB emFB = EMNPC_ITEM_TRADE_FAIL;
WORD wPosX(0), wPosY(0);
GLMSG::SNETPC_REQ_NPC_ITEM_TRADE NetMsg;
PLANDMANCLIENT pLandMan = GLGaeaClient::GetInstance().GetActiveMap ();
PGLCROWCLIENT pCrow = pLandMan->GetCrow ( dwNpcID );
if ( !pCrow ) goto _REQ_FAIL;
if ( pCrow->GETCROW() != CROW_NPC ) goto _REQ_FAIL;
// Need Add New Item Con.
BOOL bOK[] = { FALSE, FALSE, FALSE, FALSE, FALSE };
bOK[0] = ISHAVEITEM ( SNATIVEID(pDwA_NID[0]) );
BYTE i;
// MAX_NEEDITEM_COUNT 5
for( i = 1; i < 5; i++ )
{
if( pDwA_NID[i] == UINT_MAX )
bOK[i] = TRUE;
else
bOK[i] = ISHAVEITEM ( SNATIVEID(pDwA_NID[i]) );
}
if( bOK[0] == FALSE || bOK[1] == FALSE || bOK[2] == FALSE || bOK[3] == FALSE || bOK[4] == FALSE )
{
emFB = EMNPC_ITEM_TRADE_ITEM_FAIL;
goto _REQ_FAIL;
}
// Note : ¾ÆÀÌÅÛ ±³È¯ ¿äû.
//
NetMsg.dwNpcID = dwNpcID;
// MAX_NEEDITEM_COUNT 5
for( i = 0; i < 5; i++ )
{
NetMsg.dwA_NID[i] = pDwA_NID[i];
}
NetMsg.dwB_NID = dwB_NID;
NetMsg.dwGlobalID = dwGlobalID;
NETSENDTOFIELD(&NetMsg);
return S_OK;
_REQ_FAIL:
switch ( emFB )
{
case EMNPC_ITEM_TRADE_FAIL:
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMNPC_ITEM_TRADE_FAIL") );
break;
case EMNPC_ITEM_TRADE_ITEM_FAIL:
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMNPC_ITEM_TRADE_ITEM_FAIL") );
break;
};
return S_OK;
}
// *****************************************************
// Desc: Ä£±¸¿¡°Ô À̵¿(Ä£±¸À̵¿Ä«µå)
// *****************************************************
HRESULT GLCharacter::Req2Friend ( const char *szNAME )
{
SFRIEND* pFRIEND = GLFriendClient::GetInstance().GetFriend ( szNAME );
if ( !pFRIEND )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EM2FRIEND_FB_FAIL") );
return S_FALSE;
}
PLANDMANCLIENT pLAND = GLGaeaClient::GetInstance().GetActiveMap();
if ( pLAND->m_bTowerWars )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "Disable" );
return E_FAIL;
}
SINVENITEM *pINVENITEM = m_cInventory.FindItem ( ITEM_2FRIEND );
if ( !pINVENITEM )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EM2FRIEND_FB_NO_ITEM") );
return S_FALSE;
}
// Note : Ä£±¸¿¡°Ô °¡±â ¿äû.
GLMSG::SNETPC_2_FRIEND_REQ NetMsg;
StringCchCopy ( NetMsg.szFRIEND_NAME, CHAR_SZNAME, pFRIEND->szCharName );
NetMsg.wItemPosX = pINVENITEM->wPosX;
NetMsg.wItemPosY = pINVENITEM->wPosY;
NETSEND ( &NetMsg);
return S_OK;
}
bool GLCharacter::IsInvenSplitItem ( WORD wPosX, WORD wPosY, bool bVietnamInven )
{
SINVENITEM* pInvenItem = NULL;
if( bVietnamInven )
{
pInvenItem = m_cVietnamInventory.FindPosItem ( wPosX, wPosY );
}else{
pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
}
if ( !pInvenItem ) return false;
// Note : ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿À±â.
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
GASSERT(pItem&&"¾ÆÀÌÅÆ ´ëÀÌÅͰ¡ Á¸Á¦ÇÏÁö ¾ÊÀ½");
bool bSPLIT(false);
bSPLIT = ( pItem->ISINSTANCE() );
if ( !bSPLIT ) return FALSE;
bSPLIT = ( pInvenItem->sItemCustom.wTurnNum>1 );
return bSPLIT;
}
bool GLCharacter::IsStorageSplitItem ( DWORD dwChannel, WORD wPosX, WORD wPosY )
{
GASSERT(EMSTORAGE_CHANNEL>dwChannel);
if ( EMSTORAGE_CHANNEL<=dwChannel ) return false;
SINVENITEM* pInvenItem = m_cStorage[dwChannel].FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return false;
// Note : ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿À±â.
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
GASSERT(pItem&&"¾ÆÀÌÅÆ ´ëÀÌÅͰ¡ Á¸Á¦ÇÏÁö ¾ÊÀ½");
bool bSPLIT(false);
bSPLIT = ( pItem->ISPILE() );
if ( !bSPLIT ) return FALSE;
bSPLIT = ( pInvenItem->sItemCustom.wTurnNum>1 );
return bSPLIT;
}
// Note : Àκ¥Å丮 - °ãħ ¾ÆÀÌÅÛ ºÐ¸®.
HRESULT GLCharacter::ReqInvenSplit ( WORD wPosX, WORD wPosY, WORD wSplitNum )
{
if ( !IsInvenSplitItem(wPosX,wPosY) ) return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
if ( pInvenItem->sItemCustom.wTurnNum <= wSplitNum )
{
return E_FAIL;
}
// Note : ¾ÆÀÌÅÛ ºÐ¸® ¸Þ½ÃÁö Àü¼Û.
GLMSG::SNETPC_REQ_INVEN_SPLIT NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NetMsg.wSplit = wSplitNum;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
// *****************************************************
// Desc: â°í - °ãħ ¾ÆÀÌÅÛ ºÐ¸®.
// *****************************************************
HRESULT GLCharacter::ReqStorageSplit ( DWORD dwChannel, WORD wPosX, WORD wPosY, WORD wSplitNum )
{
if ( !IsStorageSplitItem(dwChannel,wPosX,wPosY) ) return E_FAIL;
SINVENITEM* pInvenItem = m_cStorage[dwChannel].FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return false;
if ( pInvenItem->sItemCustom.wTurnNum <= wSplitNum )
{
return E_FAIL;
}
// Note : ¾ÆÀÌÅÛ ºÐ¸® ¸Þ½ÃÁö Àü¼Û.
GLMSG::SNETPC_REQ_STORAGE_SPLIT NetMsg;
NetMsg.dwChannel = dwChannel;
NetMsg.dwNPCID = m_dwNPCID;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NetMsg.wSplit = wSplitNum;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
// Note : ´ë·Ã ¿äû.
//
HRESULT GLCharacter::ReqConflict ( DWORD dwID, const SCONFT_OPTION &sOption )
{
if ( !IsValidBody() ) return E_FAIL;
PGLCHARCLIENT pChar = GLGaeaClient::GetInstance().GetChar ( dwID );
if ( !pChar )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMCONFRONT_FAIL") );
return E_FAIL;
}
PLANDMANCLIENT pLAND = GLGaeaClient::GetInstance().GetActiveMap();
if ( pLAND->m_bTowerWars )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "Disable" );
return E_FAIL;
}
if ( GLGaeaClient::GetInstance().GetActiveMap()->IsPeaceZone() )
{
// Note : ÆòÈ Áö¿ª¿¡¼´Â ´ë·ÃÀÌ ºÒ°¡´ÉÇÕ´Ï´Ù.
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMCONFRONT_PEACE") );
return E_FAIL;
}
if ( !sOption.VALID_OPT() )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMCONFRONT_OPTION") );
return E_FAIL;
}
if ( m_sCONFTING.IsCONFRONTING() )
{
// Note : ÀÌ¹Ì ´ë·ÃÁßÀÌ¿©¼ ´ë·Ã ½ÅûÀÌ ºÒ°¡´ÉÇÕ´Ï´Ù.
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMCONFRONT_ALREADY_ME") );
return E_FAIL;
}
GLPARTY_CLIENT* pParty = GLPartyClient::GetInstance().FindMember ( dwID );
if ( pParty )
{
// Note : °°Àº ¼Ò¼ÓÀÇ ÆÄƼ¿øÀÌ¿©¼ ´ë·Ã ºÒ°¡´ÉÇÕ´Ï´Ù.
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMCONFRONT_PARTY") );
return E_FAIL;
}
// Note : Ŭ·´ ´ë·ÃÀÏ °æ¿ì.
if ( IsClubMaster() && pChar->IsClubMaster() )
{
GLMSG::SNETPC_REQ_CONFRONT NetMsg;
NetMsg.emTYPE = EMCONFT_GUILD;
NetMsg.dwID = dwID;
NetMsg.sOption = sOption;
NETSEND(&NetMsg);
}
// Note : ÆÄƼ ´ë·ÃÀÏ °æ¿ì.
else
if ( IsPartyMaster() && pChar->IsPartyMaster() )
{
GLMSG::SNETPC_REQ_CONFRONT NetMsg;
NetMsg.emTYPE = EMCONFT_PARTY;
NetMsg.dwID = dwID;
NetMsg.sOption = sOption;
NETSEND(&NetMsg);
}
// Note : °³ÀÎ ´ë·ÃÀÏ °æ¿ì.
else
{
if ( IsPartyMem() )
{
// Note : ÆÄƼÀ常 'ÆÄƼ´ë·Ã'À» ½ÅûÇÒ ¼ö ÀÖ½À´Ï´Ù.
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMCONFRONT_MENOTMASTER") );
return E_FAIL;
}
GLMSG::SNETPC_REQ_CONFRONT NetMsg;
NetMsg.emTYPE = EMCONFT_ONE;
NetMsg.dwID = dwID;
NetMsg.sOption = sOption;
NETSEND(&NetMsg);
}
return S_OK;
}
void GLCharacter::ReqSkillReaction ( STARGETID sTID )
{
if ( IsACTION(GLAT_SKILL) || IsACTION(GLAT_ATTACK) ) return;
BOOL bMove(FALSE);
D3DXVECTOR3 vMoveTo;
m_sActiveSkill = m_sRunSkill;
PGLSKILL pRunSkill = GLSkillMan::GetInstance().GetData ( m_sActiveSkill );
if ( !pRunSkill ) return;
if ( pRunSkill->m_sBASIC.emIMPACT_SIDE == SIDE_ENERMY ) return;
SetDefenseSkill( false );
GLCOPY* pCOPY = GLGaeaClient::GetInstance().GetCopyActor(sTID);
if ( !pCOPY ) return;
sTID.vPos = pCOPY->GetPosition();
SkillReaction ( sTID, DXKEY_UP, false, bMove, vMoveTo );
// Note : Reaction ¿¡¼ À̵¿À» ¿äûÇÑ °æ¿ì.
//
if ( bMove )
{
ActionMoveTo ( 0.0f, vMoveTo+D3DXVECTOR3(0,+5,0), vMoveTo+D3DXVECTOR3(0,-5,0), FALSE, TRUE );
}
}
HRESULT GLCharacter::ReqQuestStart ( DWORD dwNpcID, DWORD dwTalkID, DWORD dwQUESTID )
{
// Note : Äù½ºÆ® ½ÃÀÛÀ» À§ÇÑ °Ë»ç.
//
GLQUEST* pQUEST = GLQuestMan::GetInstance().Find ( dwQUESTID );
if ( !pQUEST )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMQUEST_START_FB_FAIL") );
return S_FALSE;
}
// ÀÌ¹Ì ÁøÇàÁßÀÎ Äù½ºÆ® ÀÎÁö Á¡°Ë.
GLQUESTPROG* pQUEST_PROG = m_cQuestPlay.FindProc ( dwQUESTID );
if ( pQUEST_PROG )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMQUEST_START_FB_ALREADY") );
return S_FALSE;
}
// ÀÌ¹Ì ¿Ï·áÇÑ Äù½ºÆ®ÀÎÁö °Ë»ç.
GLQUESTPROG* pQUEST_END = m_cQuestPlay.FindEnd ( dwQUESTID );
if ( pQUEST_END )
{
if ( !pQUEST_END->m_bCOMPLETE )
{
// Æ÷±â(½ÇÆÐ)ÇÑ Äù½ºÆ®¸¦ ´Ù½Ã ½Ãµµ ºÒ°¡´ÉÇÑ °æ¿ì.
if ( !pQUEST->IsAGAIN() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMQUEST_START_FB_DONAGAIN") );
return S_FALSE;
}
}
else
{
// ¿©·¯¹ø ½Ãµµ °¡´ÉÇÑÁö °Ë»ç.
if ( !pQUEST->IsREPEAT() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMQUEST_START_FB_DONREPEAT") );
return S_FALSE;
}
}
}
if ( m_lnMoney < pQUEST->m_dwBeginMoney )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMQUEST_START_FB_NEEDMONEY") );
return S_FALSE;
}
//pQUEST->m_dwBeginPartyMemNum;
// Note : quest ½ÃÀÛ ¼¹ö¿¡ ¿äû.
//
GLMSG::SNETPC_REQ_QUEST_START NetMsg;
NetMsg.dwNpcID = dwNpcID;
NetMsg.dwTalkID = dwTalkID;
NetMsg.dwQuestID = dwQUESTID;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqQuestStepNpcTalk ( DWORD dwNpcID, DWORD dwTalkID, DWORD dwQUESTID, DWORD dwQUESTSTEP )
{
// Note : Äù½ºÆ® ÁøÇàÀ» À§ÇÑ °Ë»ç.
//
GLQUEST* pQUEST = GLQuestMan::GetInstance().Find ( dwQUESTID );
if ( !pQUEST )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMQUEST_START_FB_FAIL") );
return S_FALSE;
}
// ÁøÇàÁßÀÎ Äù½ºÆ® ÀÎÁö Á¡°Ë.
GLQUESTPROG* pQUEST_PROG = m_cQuestPlay.FindProc ( dwQUESTID );
if ( !pQUEST_PROG )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMQUEST_START_FB_ALREADY") );
return S_FALSE;
}
// Note : quest ÁøÇà ¼¹ö¿¡ ¿äû.
//
GLMSG::SNET_QUEST_STEP_NPC_TALK NetMsg;
NetMsg.dwNpcID = dwNpcID;
NetMsg.dwTalkID = dwTalkID;
NetMsg.dwQUESTID = dwQUESTID;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqQuestGiveUp ( DWORD dwQUESTID )
{
// Note : Äù½ºÆ® ÁøÇàÀ» À§ÇÑ °Ë»ç.
//
GLQUEST* pQUEST = GLQuestMan::GetInstance().Find ( dwQUESTID );
if ( !pQUEST ) return S_FALSE;
// ÁøÇàÁßÀÎ Äù½ºÆ® ÀÎÁö Á¡°Ë.
GLQUESTPROG* pQUEST_PROG = m_cQuestPlay.FindProc ( dwQUESTID );
if ( !pQUEST_PROG ) return S_FALSE;
if ( !pQUEST->IsGIVEUP() ) return S_FALSE;
// Note : quest ÁøÇà ¼¹ö¿¡ ¿äû.
//
GLMSG::SNET_QUEST_PROG_GIVEUP NetMsg;
NetMsg.dwQUESTID = dwQUESTID;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqQuestREADINGReset ( DWORD dwQUESTID )
{
// Note : Äù½ºÆ® ÁøÇàÀ» À§ÇÑ °Ë»ç.
//
GLQUEST* pQUEST = GLQuestMan::GetInstance().Find ( dwQUESTID );
if ( !pQUEST ) return S_FALSE;
// ÁøÇàÁßÀÎ Äù½ºÆ® ÀÎÁö Á¡°Ë.
GLQUESTPROG* pQUEST_PROG = m_cQuestPlay.FindProc ( dwQUESTID );
if ( !pQUEST_PROG ) return S_FALSE;
if ( !pQUEST_PROG->IsReqREADING() ) return S_FALSE;
pQUEST_PROG->ResetReqREADING ();
// Note : quest ÀоúÀ½À» ¼¹ö¿¡ ¾Ë¸².
//
GLMSG::SNETPC_QUEST_PROG_READ NetMsg;
NetMsg.dwQID = dwQUESTID;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqQuestComplete ( DWORD dwQUESTID )
{
// Note : Äù½ºÆ® ÁøÇàÀ» À§ÇÑ °Ë»ç.
//
GLQUEST* pQUEST = GLQuestMan::GetInstance().Find ( dwQUESTID );
if ( !pQUEST ) return S_FALSE;
// ÁøÇàÁßÀÎ Äù½ºÆ® ÀÎÁö Á¡°Ë.
GLQUESTPROG* pQUEST_PROG = m_cQuestPlay.FindProc ( dwQUESTID );
if ( !pQUEST_PROG ) return S_FALSE;
if ( !pQUEST_PROG->CheckCOMPLETE() ) return S_FALSE;
// Note : quest ¿Ï·á ¿äû.
//
GLMSG::SNETPC_REQ_QUEST_COMPLETE NetMsg;
NetMsg.dwQID = dwQUESTID;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqBusStation ( DWORD dwNpcID, DWORD dwSTATION )
{
PLANDMANCLIENT pLandMan = GLGaeaClient::GetInstance().GetActiveMap ();
PGLCROWCLIENT pCrow = pLandMan->GetCrow ( dwNpcID );
if ( !pCrow ) return S_OK;
if ( pCrow->GETCROW() != CROW_NPC ) return S_OK;
// Note : Á¤·ùÀå id°¡ Á¤È®ÇÑÁö °Ë»ç.
//
SSTATION* pSTATION = GLBusStation::GetInstance().GetStation ( dwSTATION );
if ( !pSTATION ) return S_OK;
SMAPNODE *pNODE = GLGaeaClient::GetInstance().FindMapNode(SNATIVEID(pSTATION->dwMAPID));
if ( !pNODE ) return S_OK;
// Note : pk µî±ÞÀÌ »ìÀÎÀÚ µî±Þ ÀÌ»óÀÏ °æ¿ì ¹ö½º »ç¿ëÀ» ¸·´Â´Ù.
//
//DWORD dwPK_LEVEL = GET_PK_LEVEL();
//if ( dwPK_LEVEL != UINT_MAX && dwPK_LEVEL>GLCONST_CHAR::dwPK_RECALL_ENABLE_LEVEL )
//{
// CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMBUS_TAKE_PK_LEVEL") );
// return E_FAIL;
//}
EMREQFAIL emReqFail(EMREQUIRE_COMPLETE);
GLLevelFile cLevelFile;
BOOL bOk = cLevelFile.LoadFile ( pNODE->strFile.c_str(), TRUE, NULL );
if ( !bOk ) return S_OK;
SLEVEL_REQUIRE* pRequire = cLevelFile.GetLevelRequire ();
emReqFail = pRequire->ISCOMPLETE ( this );
if ( emReqFail != EMREQUIRE_COMPLETE )
{
CInnerInterface &cINTERFACE = CInnerInterface::GetInstance();
switch ( emReqFail )
{
case EMREQUIRE_LEVEL:
{
if( pRequire->m_signLevel == EMSIGN_FROMTO )
{
cINTERFACE.PrintMsgTextDlg( NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_LEVEL2"),
pRequire->m_wLevel,
pRequire->m_wLevel2 );
}else{
std::string strSIGN = ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signLevel].c_str());
if( RANPARAM::emSERVICE_TYPE == EMSERVICE_THAILAND )
{
cINTERFACE.PrintMsgTextDlg( NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_LEVEL"),
strSIGN.c_str(),
pRequire->m_wLevel );
}
else
{
cINTERFACE.PrintMsgTextDlg( NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_LEVEL"),
pRequire->m_wLevel,
strSIGN.c_str() );
}
}
}
break;
case EMREQUIRE_ITEM:
{
SITEM *pItem = GLItemMan::GetInstance().GetItem ( pRequire->m_sItemID );
if ( pItem )
{
cINTERFACE.PrintMsgTextDlg
(
NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_ITEM"),
pItem->GetName()
);
}
}
break;
case EMREQUIRE_SKILL:
{
PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( pRequire->m_sSkillID );
if ( pSkill )
{
cINTERFACE.PrintMsgTextDlg
(
NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_SKILL"),
pSkill->GetName()
);
}
}
break;
case EMREQUIRE_LIVING:
{
std::string strSIGN = ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signLiving].c_str());
cINTERFACE.PrintMsgTextDlg
(
NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_PREMIUM"),
pRequire->m_nLiving,
strSIGN.c_str() // 2
);
}
break;
case EMREQUIRE_BRIGHT:
{
std::string strSIGN = ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signBright].c_str());
cINTERFACE.PrintMsgTextDlg
(
NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_REBORN"),
pRequire->m_nBright,
strSIGN.c_str()
);
}
break;
case EMREQUIRE_QUEST_COM:
{
CString strQUEST = "quest";
GLQUEST *pQUEST = GLQuestMan::GetInstance().Find ( pRequire->m_sComQuestID.dwID );
if ( pQUEST ) strQUEST = pQUEST->GetTITLE();
cINTERFACE.PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQUIRE_QUEST_COM"), strQUEST.GetString() );
}
break;
case EMREQUIRE_QUEST_ACT:
{
CString strQUEST = "quest";
GLQUEST *pQUEST = GLQuestMan::GetInstance().Find ( pRequire->m_sComQuestID.dwID );
if ( pQUEST ) strQUEST = pQUEST->GetTITLE();
cINTERFACE.PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQUIRE_QUEST_ACT"), strQUEST.GetString() );
}
break;
default:
cINTERFACE.PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("MAP_REQUIRE_FAIL") );
break;
};
// Note : Ãⱸ »ç¿ë ±ÇÇÑÀÌ ¾ÈµÉ °æ¿ì. GM level ÀÌ»óÀÏ °æ¿ì Á¶°Ç ¹«½Ã.
//
if ( m_dwUserLvl < USER_GM3 ) return S_OK;
}
// Note : ¹ö½º ƼÄÏÀÌ ÀÖ´ÂÁö °Ë»ç.
//
SINVENITEM* pITEM_TICKET = m_cInventory.FindItem ( ITEM_TICKET );
if ( !pITEM_TICKET )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMBUS_TAKE_TICKET") );
return S_OK;
}
// Note : ¹ö½º ½ÂÂ÷.
//
GLMSG::SNETPC_REQ_BUS NetMsg;
NetMsg.wPosX = pITEM_TICKET->wPosX;
NetMsg.wPosY = pITEM_TICKET->wPosY;
NetMsg.dwNPC_ID = dwNpcID;
NetMsg.dwSTATION_ID = dwSTATION;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// Note : Åýà ½ÂÂ÷ ¿äû.
HRESULT GLCharacter::ReqTaxiStation ( WORD wPosX, WORD wPosY, int nSelectMap, int nSelectStop )
{
// Note : Á¤·ùÀå id°¡ Á¤È®ÇÑÁö °Ë»ç.
//
STAXI_MAP* pTaxiMap = GLTaxiStation::GetInstance().GetTaxiMap ( nSelectMap );
if ( !pTaxiMap )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMTAXI_TAKE_MAPFAIL") );
return S_OK;
}
STAXI_STATION* pStation = pTaxiMap->GetStation( nSelectStop );
if ( !pStation )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMTAXI_TAKE_STATIONFAIL") );
return S_OK;
}
SMAPNODE *pNODE = GLGaeaClient::GetInstance().FindMapNode(SNATIVEID(pStation->dwMAPID));
if ( !pNODE )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMTAXI_TAKE_MAPFAIL") );
return S_OK;
}
EMREQFAIL emReqFail(EMREQUIRE_COMPLETE);
GLLevelFile cLevelFile;
BOOL bOk = cLevelFile.LoadFile ( pNODE->strFile.c_str(), TRUE, NULL );
if ( !bOk ) return S_OK;
SLEVEL_REQUIRE* pRequire = cLevelFile.GetLevelRequire ();
emReqFail = pRequire->ISCOMPLETE ( this );
if ( emReqFail != EMREQUIRE_COMPLETE )
{
CInnerInterface &cINTERFACE = CInnerInterface::GetInstance();
switch ( emReqFail )
{
case EMREQUIRE_LEVEL:
{
if( pRequire->m_signLevel == EMSIGN_FROMTO )
{
cINTERFACE.PrintMsgTextDlg( NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_LEVEL2"),
pRequire->m_wLevel,
pRequire->m_wLevel2 );
}else{
std::string strSIGN = ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signLevel].c_str());
if( RANPARAM::emSERVICE_TYPE == EMSERVICE_THAILAND )
{
cINTERFACE.PrintMsgTextDlg( NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_LEVEL"),
strSIGN.c_str(),
pRequire->m_wLevel );
}
else
{
cINTERFACE.PrintMsgTextDlg( NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_LEVEL"),
pRequire->m_wLevel,
strSIGN.c_str() );
}
}
}
break;
case EMREQUIRE_ITEM:
{
SITEM *pItem = GLItemMan::GetInstance().GetItem ( pRequire->m_sItemID );
if ( pItem )
{
cINTERFACE.PrintMsgTextDlg
(
NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_ITEM"),
pItem->GetName()
);
}
}
break;
case EMREQUIRE_SKILL:
{
PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( pRequire->m_sSkillID );
if ( pSkill )
{
cINTERFACE.PrintMsgTextDlg
(
NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_SKILL"),
pSkill->GetName()
);
}
}
break;
case EMREQUIRE_LIVING:
{
std::string strSIGN = ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signLiving].c_str());
cINTERFACE.PrintMsgTextDlg
(
NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_PREMIUM"),
pRequire->m_nLiving,
strSIGN.c_str() // 3
);
}
break;
case EMREQUIRE_BRIGHT:
{
std::string strSIGN = ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signBright].c_str());
cINTERFACE.PrintMsgTextDlg
(
NS_UITEXTCOLOR::DISABLE,
ID2GAMEINTEXT("EMREQUIRE_REBORN"),
pRequire->m_nBright,
strSIGN.c_str()
);
}
break;
case EMREQUIRE_QUEST_COM:
{
CString strQUEST = "quest";
GLQUEST *pQUEST = GLQuestMan::GetInstance().Find ( pRequire->m_sComQuestID.dwID );
if ( pQUEST ) strQUEST = pQUEST->GetTITLE();
cINTERFACE.PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQUIRE_QUEST_COM"), strQUEST.GetString() );
}
break;
case EMREQUIRE_QUEST_ACT:
{
CString strQUEST = "quest";
GLQUEST *pQUEST = GLQuestMan::GetInstance().Find ( pRequire->m_sComQuestID.dwID );
if ( pQUEST ) strQUEST = pQUEST->GetTITLE();
cINTERFACE.PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQUIRE_QUEST_ACT"), strQUEST.GetString() );
}
break;
default:
cINTERFACE.PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("MAP_REQUIRE_FAIL") );
break;
};
// Note : Ãⱸ »ç¿ë ±ÇÇÑÀÌ ¾ÈµÉ °æ¿ì. GM level ÀÌ»óÀÏ °æ¿ì Á¶°Ç ¹«½Ã.
//
if ( m_dwUserLvl < USER_GM3 ) return S_OK;
}
// Note : Åýà īµå°¡ ÀÖ´ÂÁö °Ë»ç.
//
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem || pItem->sBasicOp.emItemType != ITEM_TAXI_CARD )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMTAXI_TAKE_TICKET") );
return E_FAIL;
}
LONGLONG lnCharge = GetCalcTaxiCharge( nSelectMap, nSelectStop );
if ( m_lnMoney < lnCharge )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMTAXI_TAKE_MONEY") );
return S_FALSE;
}
// Note : ¹ö½º ½ÂÂ÷.
//
GLMSG::SNETPC_REQ_TAXI NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NetMsg.dwSelectMap = nSelectMap;
NetMsg.dwSelectStop = nSelectStop;
NetMsg.dwGaeaID = m_dwGaeaID;
NETSEND ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqLoudSpeaker ( const char* szChat, SITEMLINK* pItemLink )
{
WORD wPosX(0), wPosY(0);
if ( m_dwUserLvl < USER_GM3 )
{
SINVENITEM* pINVENITEM = m_cInventory.FindItem ( ITEM_LOUDSPEAKER );
if ( !pINVENITEM )
{
// Note : È®¼º±â ¾ÆÀÌÅÛÀÌ Á¸Á¦ÇÏÁö ¾Ê½À´Ï´Ù.
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMCHAT_LOUDSPEAKER_NOITEM") );
return S_OK;
}
if ( m_sPMarket.IsOpen() )
{
DWORD wTurn = m_cInventory.CountTurnItem( pINVENITEM->sItemCustom.sNativeID );
DWORD wMarketTurn = m_sPMarket.GetItemTurnNum( pINVENITEM->sItemCustom.sNativeID ) ;
if ( wTurn <= wMarketTurn )
{
// Note : È®¼º±â ¾ÆÀÌÅÛÀÌ Á¸Á¦ÇÏÁö ¾Ê½À´Ï´Ù.
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMCHAT_LOUDSPEAKER_NOITEM") );
return S_OK;
}
}
wPosX = pINVENITEM->wPosX;
wPosY = pINVENITEM->wPosY;
}
// Note : È®¼º±â »ç¿ë ¿äû.
//
GLMSG::SNETPC_CHAT_LOUDSPEAKER NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
if ( pItemLink )
NetMsg.sITEMLINK = *pItemLink;
StringCchCopy ( NetMsg.szMSG, CHAT_MSG_SIZE+1, szChat );
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqPMarketTitle ( const char* szTitle )
{
if ( m_sPMarket.IsOpen() ) return S_FALSE;
// Note : Ãʱâȸ¦ ÇàÇÑ´Ù.
m_sPMarket.DoMarketClose();
// Note : ŸÀÌÆ² ÁöÁ¤ ¿äû.
//
GLMSG::SNETPC_PMARKET_TITLE NetMsg;
StringCchCopy ( NetMsg.szPMarketTitle, CHAT_MSG_SIZE+1, szTitle );
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqPMarketRegItem ( WORD wPosX, WORD wPosY, LONGLONG dwMoney, DWORD dwNum ) // Vend Price Max Increased | 07-27-2013 |
{
if ( m_sPMarket.IsOpen() ) return S_FALSE;
SINVENITEM *pINVENITEM = m_cInventory.GetItem ( wPosX, wPosY );
if ( !pINVENITEM ) return S_FALSE;
// Note : µî·ÏÇÒ ¼ö ÀÖ´Â Çѵµ¸¦ ³Ñ¾î¼°í ÀÖ½À´Ï´Ù.
if ( m_sPMarket.GetItemNum() >= GLPrivateMarket::EMMAX_SALE_NUM )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMPMARKET_REGITEM_FB_MAXNUM") );
return S_FALSE;
}
SNATIVEID nidITEM = pINVENITEM->sItemCustom.sNativeID;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( nidITEM );
if ( !pITEM ) return S_FALSE;
// °Å·¡¿É¼Ç
if ( !pINVENITEM->sItemCustom.IsWrap() )
{
if ( !pITEM->sBasicOp.IsEXCHANGE() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg (
NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMPMARKET_REGITEM_FB_NOSALE") );
return S_FALSE;
}
if ( pINVENITEM->sItemCustom.IsNonDrop() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg (
NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMPMARKET_REGITEM_FB_NOSALE") );
return S_FALSE;
}
}
// ÆÖÄ«µåÀÌ¸é¼ ÆÖÀÌ È°¼ºÈ µÇ¾î ÀÖÀ¸¸é »óÁ¡¿¡ µî·ÏÇÒ ¼ö ¾ø´Ù.
if ( pITEM->sBasicOp.emItemType == ITEM_PET_CARD )
{
// µé°íÀÖ´Â ¾ÆÀÌÅÛÀÌ ÆÖÄ«µåÀÌ¸ç ÆÖÀÌ È°¼ºÈ µÇ¾î ÀÖÀ¸¸é
GLPetClient* pMyPet = GLGaeaClient::GetInstance().GetPetClient ();
if ( pMyPet->IsVALID () && pINVENITEM->sItemCustom.dwPetID == pMyPet->m_dwPetID )
{
return E_FAIL;
}
}
if ( pITEM->sBasicOp.emItemType == ITEM_VEHICLE && pINVENITEM->sItemCustom.dwVehicleID != 0 )
{
return E_FAIL;
}
// Note : ÀÌ¹Ì µî·ÏµÈ ¾ÆÀÌÅÛÀÎÁö °Ë»ç.
bool bREGPOS = m_sPMarket.IsRegInvenPos ( SNATIVEID(wPosX,wPosY) );
if ( bREGPOS )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMPMARKET_REGITEM_FB_REGITEM") );
return S_FALSE;
}
// Note : °ãħ °¡´ÉÀÏ °æ¿ì µ¿ÀÏÇÑ Á¾·ùÀÇ ¾ÆÀÌÅÛÀÌ ÀÌ¹Ì µî·ÏµÇ¾î ÀÖ´ÂÁö °Ë»ç.
if ( pITEM->ISPILE() )
{
bool bREG = m_sPMarket.IsRegItem ( nidITEM );
if ( bREG )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMPMARKET_REGITEM_FB_REGITEM") );
return S_FALSE;
}
// Note : ¼ÒÁöÇϰí ÀÖ´Â °³¼ö ¸¹Å ÆÇ¸Å °¡´É.
DWORD dwTURN = m_cInventory.CountTurnItem ( nidITEM );
if ( dwNum >= dwTURN )
{
dwNum = dwTURN;
}
}
if ( !pITEM->ISPILE() )
{
dwNum = 1;
}
SNATIVEID sSALEPOS;
bool bPOS = m_sPMarket.FindInsertPos ( nidITEM, sSALEPOS );
if ( !bPOS )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMPMARKET_REGITEM_FB_MAXNUM") );
return S_FALSE;
}
GLMSG::SNETPC_PMARKET_REGITEM NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NetMsg.dwMoney = dwMoney;
NetMsg.dwNum = dwNum;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqPMarketDisItem ( WORD wPosX, WORD wPosY )
{
if ( m_sPMarket.IsOpen() ) return S_FALSE;
SNATIVEID sSALEPOS(wPosX,wPosY);
const SSALEITEM* pSALEITEM = m_sPMarket.GetItem ( sSALEPOS );
if ( !pSALEITEM ) return S_FALSE;
GLMSG::SNETPC_PMARKET_DISITEM NetMsg;
NetMsg.sSALEPOS = sSALEPOS;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqPMarketOpen ()
{
if ( m_sPMarket.IsOpen() ) return S_FALSE;
// Note : ÆÇ¸Å¿ëÀ¸·Î µî·ÏÇÑ ¾ÆÀÌÅÛÀÌ
if ( m_sPMarket.GetItemNum() == 0 )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMPMARKET_OPEN_FB_EMPTY") );
return S_FALSE;
}
if ( m_wPMPosX==USHRT_MAX ) return S_FALSE;
if ( m_wPMPosY==USHRT_MAX ) return S_FALSE;
// Note : °³ÀλóÁ¡ °³¼³ ¿äû.
GLMSG::SNETPC_PMARKET_OPEN NetMsg;
NetMsg.wPosX = m_wPMPosX;
NetMsg.wPosY = m_wPMPosY;
NETSENDTOFIELD ( &NetMsg );
m_wPMPosX = (USHRT_MAX);
m_wPMPosY = (USHRT_MAX);
return S_OK;
}
HRESULT GLCharacter::ReqPMarketClose ()
{
if ( !m_sPMarket.IsOpen() ) return S_FALSE;
m_sPMarket.DoMarketClose();
GLMSG::SNETPC_PMARKET_CLOSE NetMsg;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqPMarketInfo ( DWORD dwGaeaID )
{
PGLCHARCLIENT pCLIENT = GLGaeaClient::GetInstance().GetChar ( dwGaeaID );
if ( !pCLIENT ) return S_FALSE;
bool bOPEN = pCLIENT->m_sPMarket.IsOpen();
if ( !bOPEN )
{
return S_FALSE;
}
// Note : Á¤º¸ Àü¼Û ¿äûÀü Á¾Àü Á¤º¸´Â ¸®¼Â.
pCLIENT->m_sPMarket.DoMarketInfoRelease();
// Note : Á¤º¸ Àü¼Û ¿äû.
GLMSG::SNETPC_PMARKET_ITEM_INFO NetMsg;
NetMsg.dwGaeaID = dwGaeaID;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqPMarketInfoRelease ( DWORD dwGaeaID )
{
PGLCHARCLIENT pCLIENT = GLGaeaClient::GetInstance().GetChar ( dwGaeaID );
if ( !pCLIENT ) return S_FALSE;
pCLIENT->m_sPMarket.DoMarketInfoRelease();
// ´Ù¸¥»ç¶÷ °³ÀλóÁ¡À» ´ÝÀ¸¸é Àӽà ¼ö½ÅµÈ ÆÖÄ«µå Á¤º¸µµ Á¦°ÅÇØÁØ´Ù.
m_mapPETCardInfoTemp.clear();
m_mapVEHICLEItemInfoTemp.clear();
return S_OK;
}
HRESULT GLCharacter::ReqPMarketBuy ( DWORD dwGaeaID, WORD wPosX, WORD wPosY, DWORD dwNum )
{
PGLCHARCLIENT pCLIENT = GLGaeaClient::GetInstance().GetChar ( dwGaeaID );
if ( !pCLIENT ) return S_FALSE;
SNATIVEID sSALEPOS(wPosX,wPosY);
const SSALEITEM* pSALEITEM = pCLIENT->m_sPMarket.GetItem ( sSALEPOS );
if ( !pSALEITEM ) return S_FALSE;
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pSALEITEM->sITEMCUSTOM.sNativeID );
if ( !pITEM ) return S_FALSE;
if ( pSALEITEM->bSOLD )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMPMARKET_BUY_FB_SOLD") );
return S_FALSE;
}
if ( !pITEM->ISPILE() )
{
dwNum = 1;
}
if ( pSALEITEM->dwNUMBER < dwNum )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMPMARKET_BUY_FB_NUM") );
return S_FALSE;
}
if ( m_lnMoney < (dwNum*pSALEITEM->llPRICE) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMPMARKET_BUY_FB_LOWMONEY") );
return S_FALSE;
}
WORD wINVENX = pITEM->sBasicOp.wInvenSizeX;
WORD wINVENY = pITEM->sBasicOp.wInvenSizeY;
BOOL bITEM_SPACE(FALSE);
if ( pITEM->ISPILE() )
{
WORD wPILENUM = pITEM->sDrugOp.wPileNum;
SNATIVEID sNID = pITEM->sBasicOp.sNativeID;
WORD wREQINSRTNUM = (WORD) dwNum;
bITEM_SPACE = m_cInventory.ValidPileInsrt ( wREQINSRTNUM, sNID, wPILENUM, wINVENX, wINVENY );
}
else
{
WORD wPosX(0), wPosY(0);
bITEM_SPACE = m_cInventory.FindInsrtable ( wINVENX, wINVENY, wPosX, wPosY );
}
if ( !bITEM_SPACE )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMPMARKET_BUY_FB_NOINVEN") );
return E_FAIL;
}
GLMSG::SNETPC_PMARKET_BUY NetMsg;
NetMsg.dwGaeaID = dwGaeaID;
NetMsg.dwNum = dwNum;
NetMsg.sSALEPOS = sSALEPOS;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqClubNew ( DWORD dwNpcID, const char* szClubName )
{
if ( szClubName==NULL ) return S_FALSE;
if ( m_dwGuild!=CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_NEW_FB_ALREADY") );
return S_FALSE;
}
if ( !GLPartyClient::GetInstance().GetMaster() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_NEW_FB_NOTMASTER") );
return S_FALSE;
}
if ( GLPartyClient::GetInstance().GetMemberNum() < GLCONST_CHAR::dwCLUB_PARTYNUM )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_NEW_FB_NOTMEMBER"), GLCONST_CHAR::dwCLUB_PARTYNUM );
return S_FALSE;
}
if ( !szClubName || (strlen(szClubName) == 0) )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_NEW_FB_FAIL") );
return S_FALSE;
}
if ( m_wLevel < GLCONST_CHAR::sCLUBRANK[0].m_dwMasterLvl )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_NEW_FB_MASTER_LVL"), GLCONST_CHAR::sCLUBRANK[0].m_dwMasterLvl );
return S_FALSE;
}
if ( m_nLiving < int ( GLCONST_CHAR::sCLUBRANK[0].m_dwLivingPoint ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_NEW_FB_AVER_LIVING"), GLCONST_CHAR::sCLUBRANK[0].m_dwLivingPoint );
return S_FALSE;
}
if ( m_lnMoney < GLCONST_CHAR::sCLUBRANK[0].m_dwPay )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_NEW_FB_NOTMONEY"), GLCONST_CHAR::sCLUBRANK[0].m_dwPay );
return S_FALSE;
}
CString strTEMP( szClubName );
#ifdef TH_PARAM
// ű¹¾î ¹®ÀÚ Á¶ÇÕ Ã¼Å©
if ( !m_pCheckString ) return S_FALSE;
if ( !m_pCheckString(strTEMP) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_NEW_FB_THAICHAR_ERROR"));
return S_FALSE;
}
#endif
#ifdef VN_PARAM
// º£Æ®³² ¹®ÀÚ Á¶ÇÕ Ã¼Å©
if( STRUTIL::CheckVietnamString( strTEMP ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_NEW_FB_VNCHAR_ERROR"));
return S_FALSE;
}
#endif
BOOL bFILTER0 = STRUTIL::CheckString( strTEMP );;
BOOL bFILTER1 = CRanFilter::GetInstance().NameFilter ( szClubName );
if( bFILTER0 || bFILTER1 || ( strTEMP != szClubName ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_NEW_FB_BADNAME"), szClubName );
return S_FALSE;
}
GLMSG::SNET_CLUB_NEW NetMsg;
NetMsg.dwNpcID = dwNpcID;
StringCchCopy ( NetMsg.szClubName, CHAR_SZNAME, szClubName );
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqClubRank ( DWORD dwNpcID )
{
if ( m_dwGuild==CLUB_NULL )
{
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
return S_FALSE;
}
if ( m_sCLUB.m_dwRank >= (GLCONST_CHAR::dwMAX_CLUBRANK-1) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_RANK_FB_MAX") );
return S_FALSE;
}
DWORD dwRANK = m_sCLUB.m_dwRank + 1;
if ( m_wLevel < GLCONST_CHAR::sCLUBRANK[dwRANK].m_dwMasterLvl )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_RANK_FB_MASTER_LVL"), GLCONST_CHAR::sCLUBRANK[dwRANK].m_dwMasterLvl );
return S_FALSE;
}
if ( m_nLiving < int ( GLCONST_CHAR::sCLUBRANK[dwRANK].m_dwLivingPoint ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_RANK_FB_AVER_LIVING"), GLCONST_CHAR::sCLUBRANK[dwRANK].m_dwLivingPoint );
return S_FALSE;
}
if ( m_lnMoney < GLCONST_CHAR::sCLUBRANK[dwRANK].m_dwPay )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_RANK_FB_NOTMONEY"), GLCONST_CHAR::sCLUBRANK[dwRANK].m_dwPay );
return S_FALSE;
}
GLMSG::SNET_CLUB_RANK NetMsg;
NetMsg.dwNpcID = dwNpcID;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqClubDissolution ()
{
if ( m_dwGuild==CLUB_NULL )
{
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
return S_FALSE;
}
if ( m_sCLUB.IsAlliance() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_DIS_FB_ALLIANCE") );
return S_FALSE;
}
if ( m_sCLUB.GetAllBattleNum() > 0 )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_DIS_FB_CLUBBATTLE") );
return S_FALSE;
}
GLMSG::SNET_CLUB_DISSOLUTION NetMsg;
NETSEND(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqClubDissolutionCancel ()
{
if ( m_dwGuild==CLUB_NULL )
{
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
return S_FALSE;
}
GLMSG::SNET_CLUB_DISSOLUTION NetMsg;
NetMsg.bCANCEL = true;
NETSEND(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqClubJoin ( DWORD dwGaeaID )
{
if ( m_dwGuild==CLUB_NULL )
{
return S_FALSE;
}
if ( !m_sCLUB.IsMemberFlgJoin(m_dwCharID) )
{
return S_FALSE;
}
if ( m_sCLUB.GetAllBattleNum() > 0 )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_MEMBER_REQ_FB_CLUBBATTLE") );
return S_FALSE;
}
GLMSG::SNET_CLUB_MEMBER_REQ NetMsg;
NetMsg.dwGaeaID = dwGaeaID;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqClubJoinAns ( DWORD dwMaster, bool bOK )
{
GLMSG::SNET_CLUB_MEMBER_REQ_ANS NetMsg;
NetMsg.dwMaster = dwMaster;
NetMsg.bOK = bOK;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqClubMemberDel ( DWORD dwMember )
{
if ( m_dwGuild==CLUB_NULL )
{
return S_FALSE;
}
if ( !m_sCLUB.IsMemberFlgKick(m_dwCharID) )
{
return S_FALSE;
}
if ( m_sCLUB.m_dwMasterID==dwMember )
{
return S_FALSE;
}
GLMSG::SNET_CLUB_MEMBER_DEL NetMsg;
NetMsg.dwMember = dwMember;
NETSEND(&NetMsg);
return S_OK;
}
// Note : Ŭ·´ ¸¶½ºÅÍ ±ÇÇÑ À§ÀÓ
HRESULT GLCharacter::ReqClubAuthority ( DWORD dwMember )
{
if ( m_dwGuild==CLUB_NULL ) return S_FALSE;
if ( !m_sCLUB.IsMaster( m_dwCharID ) ) return S_FALSE;
if ( m_sCLUB.m_dwMasterID==dwMember ) return S_FALSE;
// Ŭ·´¿ø È®ÀÎ
GLCLUBMEMBER* pMember = m_sCLUB.GetMember( dwMember );
if ( !pMember ) return S_FALSE;
// Á¢¼Ó ¿©ºÎ È®ÀÎ
if ( !pMember->bONLINE )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_AUTHORITY_REQ_FB_NOONLINE") );
return S_FALSE;
}
// µ¿¸Í ¿©ºÎ
if ( m_sCLUB.IsAlliance() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_AUTHORITY_REQ_FB_ALLIANCE") );
return S_FALSE;
}
// Ŭ·´¹èƲ ¿©ºÎ
if ( m_sCLUB.GetAllBattleNum() > 0 )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_AUTHORITY_REQ_FB_CLUBBATTLE") );
return S_FALSE;
}
// ´ë·Ã ¿©ºÎ
if ( m_sCONFTING.emTYPE != EMCONFT_NONE )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_AUTHORITY_REQ_FB_CONFING") );
return S_FALSE;
}
GLMSG::SNET_CLUB_AUTHORITY_REQ NetMsg;
NetMsg.dwMember = dwMember;
NETSEND(&NetMsg);
return S_OK;
}
// Note : Ŭ·´ ¸¶½ºÅÍ ±ÇÇÑ À§ÀÓ ´äº¯
HRESULT GLCharacter::ReqClubAuthorityAns ( bool bOK )
{
GLMSG::SNET_CLUB_AUTHORITY_REQ_ANS NetMsgAns;
NetMsgAns.bOK = bOK;
NETSEND(&NetMsgAns);
return S_OK;
}
HRESULT GLCharacter::ReqClubMarkInfo ( DWORD dwClubID, DWORD dwMarkVer )
{
if ( dwMarkVer==0 ) return S_FALSE;
// Note : Ŭ¶óÀÌ¾ðÆ® ¹öÀü°ú ºñ±³.
//
DWORD dwServerID = GLGaeaClient::GetInstance().GetCharacter()->m_dwServerID;
bool bVALID = DxClubMan::GetInstance().IsValidData ( dwServerID, dwClubID, dwMarkVer );
if ( bVALID ) return S_FALSE;
// Note : Ŭ·´ ¸¶Å© °»½Å ¿äû.
GLMSG::SNET_CLUB_MARK_INFO NetMsgInfo;
NetMsgInfo.dwClubID = dwClubID;
NETSEND(&NetMsgInfo);
return S_OK;
}
HRESULT GLCharacter::ReqClubMarkChange ( const char* szFileName )
{
if ( !szFileName ) return E_FAIL;
// Note : ÆÄÀÏ¿¡¼ Àоî¿À±â.
LPDWORD pMarkColor(NULL);
BOOL bOK = DxClubMan::GetInstance().LoadClubMark ( szFileName, pMarkColor );
if ( !bOK )
{
CInnerInterface::GetInstance().PrintConsoleTextDlg ( ID2GAMEINTEXT("CLUB_LOADMARK_FAIL"), szFileName );
return E_FAIL;
}
// Note : Ŭ·´ ¸¶Å© °»½Å ¿äû.
GLMSG::SNET_CLUB_MARK_CHANGE NetMsgChange;
memcpy ( NetMsgChange.aryMark, pMarkColor, sizeof(DWORD)*EMCLUB_MARK_SX*EMCLUB_MARK_SY);
NETSEND(&NetMsgChange);
return S_OK;
}
HRESULT GLCharacter::ReqClubNick ( const char* szNickName )
{
if ( !szNickName ) return S_FALSE;
//if ( strlen(szNickName)==0 ) return S_FALSE;
CString strTEMP = szNickName;
#ifdef TH_PARAM
// ű¹¾î ¹®ÀÚ Á¶ÇÕ Ã¼Å©
if ( !m_pCheckString ) return S_FALSE;
if ( !m_pCheckString(strTEMP) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_MEMBER_NICK_FB_THAICHAR_ERROR"));
return S_FALSE;
}
#endif
#ifdef VN_PARAM
// º£Æ®³² ¹®ÀÚ Á¶ÇÕ Ã¼Å©
if( STRUTIL::CheckVietnamString( strTEMP ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_MEMBER_NICK_FB_VNCHAR_ERROR"));
return S_FALSE;
}
#endif
BOOL bFILTER0 = STRUTIL::CheckString( strTEMP );
BOOL bFILTER1 = CRanFilter::GetInstance().NameFilter ( szNickName );
if ( bFILTER0 || bFILTER1 )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_MEMBER_NICK_FB_BADNAME") );
return S_FALSE;
}
// Note : Ŭ·´ ¸â¹ö º°¸í.
GLMSG::SNET_CLUB_MEMBER_NICK NetMsg;
StringCchCopy ( NetMsg.szNick, CHAR_SZNAME, szNickName );
NETSEND(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqClubSecede ()
{
if ( m_dwGuild==CLUB_NULL )
{
return S_FALSE;
}
// Note : Ŭ·´ÀåÀº Å»Å𸦠ÇÒ¼ö ¾ø´Ù.
if ( m_sCLUB.IsMaster(m_dwCharID) )
{
return S_FALSE;
}
GLMSG::SNET_CLUB_MEMBER_SECEDE NetMsg;
NETSEND(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqCDCertify (DWORD dwNpcID )
{
if ( m_dwGuild==CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCDCERTIFY_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsMemberFlgCDCertify(m_dwCharID) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCDCERTIFY_NOTMASTER") );
return S_FALSE;
}
PLANDMANCLIENT pLand = GLGaeaClient::GetInstance().GetActiveMap();
if ( !pLand )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCDCERTIFY_FAIL") );
return S_FALSE;
}
PGLCROWCLIENT pCROW = pLand->GetCrow(dwNpcID);
if ( !pCROW )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCDCERTIFY_FAIL") );
return S_FALSE;
}
GLMSG::SNET_CLUB_CD_CERTIFY NetMsg;
NetMsg.dwNpcID = dwNpcID;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqDetectAP ( BOOL bDetect, DWORD dwCharID )
{
GLMSG::SNET_AP_DT NetMsg;
NetMsg.bDetect = bDetect;
NetMsg.dwCharID = dwCharID;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqDetectWPE ( BOOL bDetect, DWORD dwCharID )
{
if ( m_dwCharID!=dwCharID ) return S_FALSE;
if ( !bDetect ) return S_FALSE;
if ( bDetect ) m_bDisconnect = TRUE;
return S_OK;
}
HRESULT GLCharacter::ReqGuidCommission ( DWORD dwNPCID, float fRATE )
{
if ( m_dwGuild==CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMGUIDCOMMISSION_FB_NOTCLUB") );
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMGUIDCOMMISSION_FB_NOTCLUB") );
return S_FALSE;
}
PLANDMANCLIENT pLand = GLGaeaClient::GetInstance().GetActiveMap();
if ( !pLand )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMGUIDCOMMISSION_FB_FAIL") );
return S_FALSE;
}
PGLCROWCLIENT pCROW = pLand->GetCrow(dwNPCID);
if ( !pCROW )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMGUIDCOMMISSION_FB_FAIL") );
return S_FALSE;
}
if ( fRATE < 0 )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMGUIDCOMMISSION_FB_RANGE") );
return S_FALSE;
}
if ( fRATE > GLCONST_CHAR::fMAX_COMMISSION )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMGUIDCOMMISSION_FB_RANGE") );
return S_FALSE;
}
GLMSG::SNET_CLUB_GUID_COMMISSION NetMsg;
NetMsg.fCommission = fRATE;
NETSEND(&NetMsg);
return S_OK;
}
// Note : Ŭ·´ °øÁö.
HRESULT GLCharacter::ReqClubNotice ( const char* szClubNotice )
{
if ( m_dwGuild==CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_NOTICE_FB_FAIL") );
return S_FALSE;
}
if ( !m_sCLUB.IsMemberFlgNotice(m_dwCharID) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_NOTICE_FB_NOTMATER") );
return S_FALSE;
}
GLMSG::SNET_CLUB_NOTICE_REQ NetMsg;
StringCchCopy ( NetMsg.szNotice, EMCLUB_NOTICE_LEN+1, szClubNotice );
NETSEND(&NetMsg);
return S_OK;
}
// Note : Ŭ·´ ºÎ¸¶ ¼³Á¤.
HRESULT GLCharacter::ReqClubSubMaster ( DWORD dwCharID, DWORD dwClubFlag )
{
if ( m_dwGuild==CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUBSUBMASTER_FB_FAIL") );
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUBSUBMASTER_FB_NOTMASTER") );
return S_FALSE;
}
GLMSG::SNET_CLUB_SUBMASTER NetMsg;
NetMsg.dwCharID = dwCharID;
NetMsg.dwFlags = dwClubFlag;
NETSEND(&NetMsg);
return S_OK;
}
// Note : Ŭ·´ ¿¬ÇÕ ¿äû.
HRESULT GLCharacter::ReqClubAlliance ( DWORD dwGaeaID )
{
PGLCHARCLIENT pCHAR_REQ = GLGaeaClient::GetInstance().GetChar ( dwGaeaID );
if ( !pCHAR_REQ )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_REQ_FB_FAIL") );
return S_FALSE;
}
DWORD dwCharID = pCHAR_REQ->GetCharData().dwCharID;
if ( m_dwGuild==CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_REQ_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_REQ_FB_NOTMASTER") );
return S_FALSE;
}
if ( !pCHAR_REQ->IsClubMaster() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_REQ_FB_TARNOTMASTER") );
return S_FALSE;
}
if ( m_sCLUB.IsAlliance() && !m_sCLUB.IsChief() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_REQ_FB_NOTCHIEF") );
return S_FALSE;
}
if ( m_sCLUB.IsRegDissolution() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_REQ_FB_DISSOLUTION") );
return S_FALSE;
}
if ( m_sCLUB.GetAllBattleNum() > 0 )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_REQ_FB_CLUBBATTLE") );
return S_FALSE;
}
GLMSG::SNET_CLUB_ALLIANCE_REQ NetMsg;
NetMsg.dwCharID = dwCharID;
NETSEND(&NetMsg);
return S_OK;
}
// Note : Ŭ·´ µ¿¸Í ¿äû ´äº¯.
HRESULT GLCharacter::ReqClubAllianceAns ( DWORD dwChiefCharID, bool bOK )
{
GLMSG::SNET_CLUB_ALLIANCE_REQ_ANS NetMsgAns;
NetMsgAns.dwChiefCharID = dwChiefCharID;
NetMsgAns.bOK = bOK;
NETSEND(&NetMsgAns);
return S_OK;
}
// Note : Ŭ·´ µ¿¸Í Å»Åð ¿äû.
HRESULT GLCharacter::ReqClubAllianceSec ()
{
if ( m_dwGuild==CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_SEC_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_SEC_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsAlliance() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_SEC_FB_ALLIANCE") );
return S_FALSE;
}
if ( m_sCLUB.IsChief() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_SEC_FB_FAIL") );
return S_FALSE;
}
if ( m_sCLUB.GetAllBattleNum() > 0 )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_SEC_FB_BATTLE") );
return S_FALSE;
}
GLMSG::SNET_CLUB_ALLIANCE_SEC_REQ NetMsg;
NETSEND(&NetMsg);
return S_OK;
}
// Note : Ŭ·´ µ¿¸Í Á¦¸í ¿äû.
HRESULT GLCharacter::ReqClubAllianceDel ( DWORD dwClubID )
{
if ( m_dwGuild==CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_DEL_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_DEL_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsAlliance() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_DEL_FB_NOTCHIEF") );
return S_FALSE;
}
if ( !m_sCLUB.IsChief() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_DEL_FB_NOTCHIEF") );
return S_FALSE;
}
if ( m_sCLUB.GetAllBattleNum() > 0 )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_DEL_FB_BATTLE") );
return S_FALSE;
}
GLMSG::SNET_CLUB_ALLIANCE_DEL_REQ NetMsg;
NetMsg.dwDelClubID = dwClubID;
NETSEND(&NetMsg);
return S_OK;
}
// Note : Ŭ·´ µ¿¸Í ÇØÃ¼ ¿äû.
HRESULT GLCharacter::ReqClubAllianceDis ()
{
if ( m_dwGuild==CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_DIS_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_DIS_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsAlliance() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_DIS_FB_NOTCHIEF") );
return S_FALSE;
}
if ( !m_sCLUB.IsChief() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_DIS_FB_NOTCHIEF") );
return S_FALSE;
}
if ( m_sCLUB.GetAllBattleNum() > 0 )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_ALLIANCE_DIS_FB_BATTLE") );
return S_FALSE;
}
GLMSG::SNET_CLUB_ALLIANCE_DIS_REQ NetMsg;
NETSEND(&NetMsg);
return S_OK;
}
// Note : Ŭ·´ ¹èƲ ¿äû.
HRESULT GLCharacter::ReqClubBattle ( DWORD dwGaeaID, DWORD dwTime )
{
if ( !GLCONST_CHAR::bCLUB_BATTLE )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_FAIL") );
return S_FALSE;
}
PGLCHARCLIENT pCHAR_REQ = GLGaeaClient::GetInstance().GetChar ( dwGaeaID );
if ( !pCHAR_REQ )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_FAIL") );
return S_FALSE;
}
if ( m_sCONFTING.emTYPE != EMCONFT_NONE )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_CONFT") );
return S_FALSE;
}
DWORD dwCharID = pCHAR_REQ->GetCharData().dwCharID;
if ( m_dwGuild==CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_NOTMASTER") );
return S_FALSE;
}
if ( !pCHAR_REQ->IsClubMaster() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_TARNOTMASTER") );
return S_FALSE;
}
if ( m_sCLUB.IsAllianceGuild( pCHAR_REQ->GETCLUBID() ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_ALLIANCE") );
return S_FALSE;
}
if ( m_sCLUB.IsRegDissolution() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_DISSOLUTION") );
return S_FALSE;
}
if ( m_sCLUB.IsBattle( pCHAR_REQ->GETCLUBID() ) || m_sCLUB.IsBattleReady( pCHAR_REQ->GETCLUBID() ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_ALREADY") );
return S_FALSE;
}
if ( m_sCLUB.IsBattleAlliance( pCHAR_REQ->GETALLIANCEID() ) || m_sCLUB.IsBattleReady( pCHAR_REQ->GETALLIANCEID() ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_ALREADY2") );
return S_FALSE;
}
if ( dwTime < GLCONST_CHAR::dwCLUB_BATTLE_TIMEMIN )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE
, ID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_TIMEMIN")
, GLCONST_CHAR::dwCLUB_BATTLE_TIMEMIN / 60
, GLCONST_CHAR::dwCLUB_BATTLE_TIMEMIN % 60);
return S_FALSE;
}
if ( dwTime > GLCONST_CHAR::dwCLUB_BATTLE_TIMEMAX )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE
, ID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_TIMEMAX")
, GLCONST_CHAR::dwCLUB_BATTLE_TIMEMAX / 60
, GLCONST_CHAR::dwCLUB_BATTLE_TIMEMAX % 60);
return S_FALSE;
}
GLMSG::SNET_CLUB_BATTLE_REQ NetMsg;
NetMsg.dwCharID = dwCharID;
NetMsg.dwBattleTime = dwTime;
NETSEND(&NetMsg);
return S_OK;
}
// Note : µ¿¸Í ¹èƲ ¿äû.
HRESULT GLCharacter::ReqAllianceBattle ( DWORD dwGaeaID, DWORD dwTime )
{
DWORD dwCharID;
PGLCHARCLIENT pCHAR_REQ;
if ( !GLCONST_CHAR::bCLUB_BATTLE || !GLCONST_CHAR::bCLUB_BATTLE_ALLIANCE )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_FAIL") );
return S_FALSE;
}
pCHAR_REQ = GLGaeaClient::GetInstance().GetChar ( dwGaeaID );
if ( !pCHAR_REQ )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_FAIL") );
return S_FALSE;
}
if ( m_sCONFTING.emTYPE != EMCONFT_NONE )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_CONFT") );
return S_FALSE;
}
dwCharID = pCHAR_REQ->GetCharData().dwCharID;
if ( m_dwGuild==CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_NOTMASTER") );
return S_FALSE;
}
if ( !pCHAR_REQ->IsClubMaster() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_TARNOTMASTER") );
return S_FALSE;
}
if ( m_sCLUB.IsAllianceGuild( pCHAR_REQ->GETCLUBID() ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_ALLIANCE") );
return S_FALSE;
}
if ( !pCHAR_REQ->IsAllianceMaster() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_TARNOTMASTER") );
return S_FALSE;
}
if ( m_sCLUB.IsRegDissolution() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_DISSOLUTION") );
return S_FALSE;
}
if ( m_sCLUB.IsBattle( pCHAR_REQ->GETCLUBID() ) || m_sCLUB.IsBattleReady( pCHAR_REQ->GETCLUBID() ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_ALREADY") );
return S_FALSE;
}
if ( m_sCLUB.IsBattleAlliance( pCHAR_REQ->GETALLIANCEID() ) || m_sCLUB.IsBattleReady( pCHAR_REQ->GETALLIANCEID() ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_ALREADY2") );
return S_FALSE;
}
if ( dwTime < GLCONST_CHAR::dwCLUB_BATTLE_TIMEMIN )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE
, ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_TIMEMIN")
, GLCONST_CHAR::dwCLUB_BATTLE_TIMEMIN / 60
, GLCONST_CHAR::dwCLUB_BATTLE_TIMEMIN % 60);
return S_FALSE;
}
if ( dwTime > GLCONST_CHAR::dwCLUB_BATTLE_TIMEMAX )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE
, ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_TIMEMAX")
, GLCONST_CHAR::dwCLUB_BATTLE_TIMEMAX / 60
, GLCONST_CHAR::dwCLUB_BATTLE_TIMEMAX % 60);
return S_FALSE;
}
GLMSG::SNET_ALLIANCE_BATTLE_REQ NetMsg;
NetMsg.dwCharID = dwCharID;
NetMsg.dwBattleTime = dwTime;
NETSEND(&NetMsg);
return S_OK;
}
// Note : Ŭ·´ ¹èƲ ¿äû ´äº¯.
HRESULT GLCharacter::ReqClubBattleAns ( DWORD dwChiefCharID, bool bOK )
{
GLMSG::SNET_CLUB_BATTLE_REQ_ANS NetMsgAns;
NetMsgAns.dwClubCharID = dwChiefCharID;
NetMsgAns.bOK = bOK;
NETSEND(&NetMsgAns);
return S_OK;
}
// Note : Ŭ·´ ¹èƲ ¿äû ´äº¯.
HRESULT GLCharacter::ReqAllianceBattleAns ( DWORD dwChiefCharID, bool bOK )
{
GLMSG::SNET_ALLIANCE_BATTLE_REQ_ANS NetMsgAns;
NetMsgAns.dwClubCharID = dwChiefCharID;
NetMsgAns.bOK = bOK;
NETSEND(&NetMsgAns);
return S_OK;
}
// Note : Ŭ·´ ¹èƲ ÈÞÀü ¿äû.
HRESULT GLCharacter::ReqClubBattleArmistice( DWORD dwCLUBID )
{
if ( m_dwGuild==CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_ARMISTICE_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_ARMISTICE_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsBattle( dwCLUBID ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_ARMISTICE_FB_NOBATTLE") );
return S_FALSE;
}
if ( !m_sCLUB.IsBattleStop( dwCLUBID ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_ARMISTICE_FB_DISTIME") );
return S_FALSE;
}
GLMSG::SNET_CLUB_BATTLE_ARMISTICE_REQ NetMsg;
NetMsg.dwClubID = dwCLUBID;
NETSEND(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqAllianceBattleArmistice( DWORD dwCLUBID )
{
if ( m_dwGuild==CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_ARMISTICE_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_ARMISTICE_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsAlliance() || !m_sCLUB.IsChief() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_ARMISTICE_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsBattleAlliance( dwCLUBID ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_ALLIANCE_ARMISTICE_FB_NOBATTLE") );
return S_FALSE;
}
if ( !m_sCLUB.IsBattleStop( dwCLUBID ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_ARMISTICE_FB_DISTIME") );
return S_FALSE;
}
GLMSG::SNET_ALLIANCE_BATTLE_ARMISTICE_REQ NetMsg;
NetMsg.dwClubID = dwCLUBID;
NETSEND(&NetMsg);
return S_OK;
}
// Note : Ŭ·´ ¹èƲ ÈÞÀü ´äº¯.
HRESULT GLCharacter::ReqClubBattleArmisticeAns( DWORD dwCLUBID, bool bOK )
{
GLMSG::SNET_CLUB_BATTLE_ARMISTICE_REQ_ANS NetMsgAns;
NetMsgAns.dwClubID = dwCLUBID;
NetMsgAns.bOK = bOK;
NETSEND(&NetMsgAns);
return S_OK;
}
// Note : µ¿¸Í ¹èƲ ÈÞÀü ´äº¯.
HRESULT GLCharacter::ReqAllianceBattleArmisticeAns( DWORD dwCLUBID, bool bOK )
{
GLMSG::SNET_ALLIANCE_BATTLE_ARMISTICE_REQ_ANS NetMsgAns;
NetMsgAns.dwClubID = dwCLUBID;
NetMsgAns.bOK = bOK;
NETSEND(&NetMsgAns);
return S_OK;
}
// Note : Ŭ·´ ¹èƲ Ç׺¹ ¿äû.
HRESULT GLCharacter::ReqClubBattleSubmission ( DWORD dwCLUBID )
{
if ( m_dwGuild==CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_SUBMISSION_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_SUBMISSION_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsBattle( dwCLUBID ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_SUBMISSION_FB_NOBATTLE") );
return S_FALSE;
}
if ( !m_sCLUB.IsBattleStop( dwCLUBID ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMCLUB_BATTLE_SUBMISSION_FB_DISTIME") );
return S_FALSE;
}
GLMSG::SNET_CLUB_BATTLE_SUBMISSION_REQ NetMsg;
NetMsg.dwClubID = dwCLUBID;
NETSEND(&NetMsg);
return S_OK;
}
// Note : µ¿¸Í ¹èƲ Ç׺¹ ¿äû.
HRESULT GLCharacter::ReqAllianceBattleSubmission ( DWORD dwCLUBID )
{
if ( m_dwGuild==CLUB_NULL )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_SUBMISSION_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsMaster(m_dwCharID) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_SUBMISSION_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsAlliance() || !m_sCLUB.IsChief() )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_SUBMISSION_FB_NOTMASTER") );
return S_FALSE;
}
if ( !m_sCLUB.IsBattleAlliance( dwCLUBID ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_SUBMISSION_FB_NOBATTLE") );
return S_FALSE;
}
if ( !m_sCLUB.IsBattleStop( dwCLUBID ) )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMALLIANCE_BATTLE_SUBMISSION_FB_DISTIME") );
return S_FALSE;
}
GLMSG::SNET_ALLIANCE_BATTLE_SUBMISSION_REQ NetMsg;
NetMsg.dwClubID = dwCLUBID;
NETSEND(&NetMsg);
return S_OK;
}
bool GLCharacter::IsKEEP_CLUB_STORAGE ( DWORD dwCHANNEL )
{
if ( m_sCLUB.m_dwID==CLUB_NULL ) return false;
if ( m_sCLUB.m_dwMasterID!=m_dwCharID ) return false;
if ( !m_sCLUB.m_bVALID_STORAGE ) return false;
if ( m_sCLUB.m_dwRank < dwCHANNEL ) return false;
return true;
}
// Note : â°í Á¤º¸¸¦ ¼¹ö¿¡ ¿äû.
HRESULT GLCharacter::ReqGetClubStorage ()
{
if ( !IsValidBody() ) return S_FALSE;
if ( m_sCLUB.m_dwID==CLUB_NULL ) return S_FALSE;
if ( m_sCLUB.m_dwMasterID!=m_dwCharID ) return S_FALSE;
// Note : ÀÌ¹Ì Ã¢°í Á¤º¸°¡ À¯È¿ÇÏ´Ù¸é ¹«½Ã.
if ( !m_sCLUB.m_bVALID_STORAGE )
{
// Note : ¼¹ö¿¡ ¿äû.
// ÀÌ ¸Þ½ÃÁö Àü¼Û ÈÄ ¼¹öÂÊ¿¡¼ Ŭ·´ÀÇ ¼öÀÍ °»½ÅÀ» ¿äûÇÑ´Ù.
GLMSG::SNET_CLUB_GETSTORAGE NetMsg;
NETSENDTOFIELD ( &NetMsg );
}
else
{
// Note : Ŭ·´ÀÇ ¼öÀÍ °»½Å ¿äû.
GLMSG::SNET_CLUB_INCOME_RENEW NetMsgReNew;
NETSENDTOFIELD ( &NetMsgReNew );
}
return S_OK;
}
// Note : â°í ¾ÆÀÌÅÛ µé¶§, ³õÀ»¶§, ±³È¯ÇÒ¶§, ÇÕÄ¥¶§.
HRESULT GLCharacter::ReqClubStorageTo ( DWORD dwChannel, WORD wPosX, WORD wPosY )
{
GASSERT(MAX_CLUBSTORAGE>dwChannel);
if ( MAX_CLUBSTORAGE<=dwChannel ) return false;
if ( !IsValidBody() ) return S_FALSE;
if ( ValidWindowOpen() ) return S_FALSE;
if ( !IsKEEP_CLUB_STORAGE(dwChannel) ) return S_FALSE;
// °Å·¡ ¿É¼Ç È®ÀÎ
if ( VALID_HOLD_ITEM () )
{
SITEM *pITEM = GLItemMan::GetInstance().GetItem ( GET_HOLD_ITEM().sNativeID );
if ( !pITEM ) return S_FALSE;
if ( pITEM ) return S_FALSE;
// °Å·¡¿É¼Ç
if ( GET_HOLD_ITEM().bWrap!= true )
{
if ( !pITEM->sBasicOp.IsEXCHANGE() ) return S_FALSE;
if ( GET_HOLD_ITEM().bNonDrop!= false ) return S_FALSE;
}
}
SINVENITEM* pInvenItem = m_sCLUB.m_cStorage[dwChannel].FindPosItem ( wPosX, wPosY );
if ( !VALID_HOLD_ITEM () && !pInvenItem ) return E_FAIL;
if ( VALID_HOLD_ITEM () && pInvenItem )
{
#if defined(VN_PARAM) //vietnamtest%%%
if ( GET_HOLD_ITEM().bVietnamGainItem ) return E_FAIL;
#endif
GLMSG::SNET_CLUB_STORAGE_EX_HOLD NetMsg;
NetMsg.dwChannel = dwChannel;
NetMsg.wPosX = pInvenItem->wPosX;
NetMsg.wPosY = pInvenItem->wPosY;
NETSENDTOFIELD ( &NetMsg );
}
else if ( pInvenItem )
{
GLMSG::SNET_CLUB_STORAGE_TO_HOLD NetMsg;
NetMsg.dwChannel = dwChannel;
NetMsg.wPosX = pInvenItem->wPosX;
NetMsg.wPosY = pInvenItem->wPosY;
NETSENDTOFIELD ( &NetMsg );
}
else if ( VALID_HOLD_ITEM () )
{
#if defined(VN_PARAM) //vietnamtest%%%
if ( GET_HOLD_ITEM().bVietnamGainItem ) return E_FAIL;
#endif
// Note : ¸Þ½ÃÁö ¼Û½ÅÀü¿¡ À¯È¿ÇÒÁö¸¦ ¹Ì¸® °Ë»çÇÔ.
//
SITEM* pItem = GLItemMan::GetInstance().GetItem ( GET_HOLD_ITEM().sNativeID );
GASSERT(pItem&&"¾ÆÀÌÅÆ ´ëÀÌÅͰ¡ Á¸Á¦ÇÏÁö ¾ÊÀ½");
BOOL bOk = m_sCLUB.m_cStorage[dwChannel].IsInsertable ( pItem->sBasicOp.wInvenSizeX, pItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk )
{
// ÀιêÀÌ °¡µæÂþÀ½.
return E_FAIL;
}
GLMSG::SNET_CLUB_HOLD_TO_STORAGE NetMsg;
NetMsg.dwChannel = dwChannel;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
}
return E_FAIL;
}
bool GLCharacter::IsClubStorageSplitItem ( DWORD dwChannel, WORD wPosX, WORD wPosY )
{
GASSERT(MAX_CLUBSTORAGE>dwChannel);
if ( MAX_CLUBSTORAGE<=dwChannel ) return false;
if ( !IsValidBody() ) return false;
if ( ValidWindowOpen() ) return false;
if ( !IsKEEP_CLUB_STORAGE(dwChannel) ) return false;
SINVENITEM* pInvenItem = m_sCLUB.m_cStorage[dwChannel].FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return false;
// Note : ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿À±â.
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
GASSERT(pItem&&"¾ÆÀÌÅÆ ´ëÀÌÅͰ¡ Á¸Á¦ÇÏÁö ¾ÊÀ½");
bool bSPLIT(false);
bSPLIT = ( pItem->ISPILE() );
if ( !bSPLIT ) return false;
bSPLIT = ( pInvenItem->sItemCustom.wTurnNum>1 );
return bSPLIT;
}
// Note : â°í - °ãħ ¾ÆÀÌÅÛ ºÐ¸®.
HRESULT GLCharacter::ReqClubStorageSplit ( DWORD dwChannel, WORD wPosX, WORD wPosY, WORD wSplitNum )
{
if ( !IsClubStorageSplitItem(dwChannel,wPosX,wPosY) ) return E_FAIL;
SINVENITEM* pInvenItem = m_sCLUB.m_cStorage[dwChannel].FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return false;
if ( pInvenItem->sItemCustom.wTurnNum <= wSplitNum )
{
return E_FAIL;
}
// Note : ¾ÆÀÌÅÛ ºÐ¸® ¸Þ½ÃÁö Àü¼Û.
GLMSG::SNET_CLUB_STORAGE_SPLIT NetMsg;
NetMsg.dwChannel = dwChannel;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NetMsg.wSplit = wSplitNum;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
// Note : â°í µ· ³Ö±â.
HRESULT GLCharacter::ReqClubStorageSaveMoney ( LONGLONG lnMoney )
{
if( m_sCLUB.m_dwID==CLUB_NULL ) return E_FAIL;
if( m_sCLUB.m_dwMasterID!=m_dwCharID ) return E_FAIL;
if( !m_sCLUB.m_bVALID_STORAGE ) return E_FAIL;
//#if !defined(KR_PARAM) && !defined(KRT_PARAM)
// if( m_lnMoney%UINT_MAX < lnMoney ) return E_FAIL;
//#endif
if ( m_lnMoney < lnMoney ) return E_FAIL;
if ( ValidWindowOpen() ) return E_FAIL;
GLMSG::SNET_CLUB_STORAGE_SAVE_MONEY NetMsg;
NetMsg.lnMoney = lnMoney;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// Note : â°í µ· »©³»±â.
HRESULT GLCharacter::ReqClubStorageDrawMoney ( LONGLONG lnMoney )
{
if ( m_sCLUB.m_dwID==CLUB_NULL ) return E_FAIL;
if ( m_sCLUB.m_dwMasterID!=m_dwCharID ) return E_FAIL;
if ( !m_sCLUB.m_bVALID_STORAGE ) return E_FAIL;
//#if !defined(KR_PARAM) && !defined(KRT_PARAM)
// if ( m_sCLUB.m_lnStorageMoney%UINT_MAX < lnMoney ) return E_FAIL;
//#endif
if ( m_sCLUB.m_lnStorageMoney < lnMoney ) return E_FAIL;
if ( ValidWindowOpen() ) return E_FAIL;
GLMSG::SNET_CLUB_STORAGE_DRAW_MONEY NetMsg;
NetMsg.lnMoney = lnMoney;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqGarbageOpen()
{
InitGarbageData();
OpenGarbage();
return S_OK;
}
HRESULT GLCharacter::ReqGarbageMoveItem()
{
if( m_sPreInventoryItem.VALID() )
{
// ¼Õ¿¡ µç ¾ÆÀÌÅÛÀÌ ÀåÂø ¾ÆÀÌÅÛÀ̾î¾ß ¹Ù²Ü ¼ö ÀÖ´Ù
SITEMCUSTOM sPreItem = GET_PREHOLD_ITEM();
SITEM* pItem = GLItemMan::GetInstance().GetItem( sPreItem.sNativeID );
// ÆÖÄ«µåÀϰæ¿ì
if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD )
{
GLPetClient* pMyPet = GLGaeaClient::GetInstance().GetPetClient ();
if ( pMyPet && pMyPet->IsVALID () && sPreItem.dwPetID == pMyPet->m_dwPetID )
{
m_sPreInventoryItem.RESET();
return E_FAIL;
}
}
// disabled garbage basicop on item to make all item default deletable by garbage item
//if( pItem && pItem->sBasicOp.IsGarbage() )
//{
m_sGarbageItem.SET( m_sPreInventoryItem.wPosX, m_sPreInventoryItem.wPosY );
//}
m_sPreInventoryItem.RESET();
}
return S_OK;
}
HRESULT GLCharacter::ReqGarbageResult()
{
if( !m_sGarbageItem.VALID() )
return S_FALSE;
GLMSG::SNET_GARBAGE_RESULT NetMsg;
NetMsg.wPosX = m_sGarbageItem.wPosX;
NetMsg.wPosY = m_sGarbageItem.wPosY;
NETSENDTOFIELD( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqGarbageClose()
{
InitGarbageData();
CloseGarbage();
return S_OK;
}
const SITEMCUSTOM& GLCharacter::GET_GARBAGE_ITEM() // ITEMREBUILD_MARK
{
static SITEMCUSTOM sItemCustom;
sItemCustom.sNativeID = NATIVEID_NULL();
if( !m_sGarbageItem.VALID() )
return sItemCustom;
SINVENITEM* pResistItem = m_cInventory.GetItem( m_sGarbageItem.wPosX, m_sGarbageItem.wPosY );
if( !pResistItem )
return sItemCustom;
sItemCustom = pResistItem->sItemCustom;
return sItemCustom;
}
VOID GLCharacter::InitGarbageData()
{
m_sGarbageItem.RESET();
m_sPreInventoryItem.RESET();
}
void GLCharacter::ReqRetrieveMobInMap() //Request Crow List NaJDeV
{
CInnerInterface::GetInstance().GetLargeMapWindow()->ClearMobList();
GLMSG::SNETPC_REQ_CROWLIST_FLD NetMsg;
NetMsg.dwGaeaID = m_dwGaeaID;
NETSEND ( &NetMsg );
}
void GLCharacter::ReqDisableSkill( DWORD dwSKILL, SNATIVEID sKILLID ) //disable skill effect NaJDeV
{
if ( dwSKILL > SKILLFACT_SIZE ) return;
PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( sKILLID.wMainID, sKILLID.wSubID );
if ( !pSkill ) return;
if ( pSkill->m_sBASIC.emIMPACT_SIDE == SIDE_ENERMY ) return;
GLMSG::SNETPC_REQ_DISABLESKILLEFF NetMsg;
NetMsg.dwSKILL = dwSKILL;
NETSENDTOFIELD ( &NetMsg );
}
HRESULT GLCharacter::ReqRebuildOpen() //sealed card
{
InitRebuildData();
OpenRebuild();
GLMSG::SNET_REBUILD_RESULT NetMsg;
NetMsg.emResult = EMREBUILD_RESULT_OPEN;
NETSENDTOFIELD( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqRebuildMoveItem() //sealed card
{
GLMSG::SNET_REBUILD_MOVE_ITEM NetMsg;
if( m_sPreInventoryItem.VALID() )
{
SITEMCUSTOM sPreItem = GET_PREHOLD_ITEM();
SITEM* pItem = GLItemMan::GetInstance().GetItem( sPreItem.sNativeID );
if( pItem && pItem->sBasicOp.emItemType == ITEM_SUIT )
{
if( strlen( pItem->sRandomOpt.szNAME ) > 3 )
{
NetMsg.wPosX = m_sPreInventoryItem.wPosX;
NetMsg.wPosY = m_sPreInventoryItem.wPosY;
}
}
m_sPreInventoryItem.RESET();
}
NETSENDTOFIELD( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqRebuildResult( SITEMSEALDATA pData1, SITEMSEALDATA pData2 ) //sealed card
{
if( !m_sRebuildItem.VALID() )
return S_FALSE;
if( m_i64RebuildInput != m_i64RebuildCost || m_lnMoney < m_i64RebuildCost )
{
CInnerInterface::GetInstance().PrintMsgTextDlg( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT( "EMREBUILD_RESULT_MONEY" ) );
return E_FAIL;
}
GLMSG::SNET_REBUILD_RESULT NetMsg;
NetMsg.dwNPCID = m_dwNPCID;
NetMsg.emResult = EMREBUILD_RESULT_SUCCESS;
NetMsg.Data1 = pData1;
NetMsg.Data2 = pData2;
NETSENDTOFIELD( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqRebuildInputMoney( LONGLONG i64InputMoney ) //sealed card
{
GLMSG::SNET_REBUILD_INPUT_MONEY NetMsg;
NetMsg.i64InputMoney = (LONGLONG)max( 0, i64InputMoney );
NetMsg.i64InputMoney = (LONGLONG)min( NetMsg.i64InputMoney, m_lnMoney );
NETSENDTOFIELD( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqRebuildClose() //sealed card
{
InitRebuildData();
CloseRebuild();
GLMSG::SNET_REBUILD_RESULT NetMsg;
NetMsg.emResult = EMREBUILD_RESULT_CLOSE;
NETSENDTOFIELD( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqRebuildMoveSeal() //sealed card
{
GLMSG::SNET_REBUILD_MOVE_SEAL NetMsg;
if( m_sPreInventoryItem.VALID() )
{
SITEMCUSTOM sCustom = GET_REBUILD_ITEM();
if ( !sCustom.sNativeID.IsValidNativeID() )
{
CInnerInterface::GetInstance().PrintConsoleText( "Insert item first and then try again." );
m_sPreInventoryItem.RESET();
return E_FAIL;
}
SITEMCUSTOM sPreItem = GET_PREHOLD_ITEM();
SITEM* pItem = GLItemMan::GetInstance().GetItem( sPreItem.sNativeID );
if( pItem && pItem->sBasicOp.emItemType == ITEM_SEALED_CARD )
{
NetMsg.wPosX = m_sPreInventoryItem.wPosX;
NetMsg.wPosY = m_sPreInventoryItem.wPosY;
}
m_sPreInventoryItem.RESET();
}
NETSENDTOFIELD( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqUsePetCard ( WORD wPosX, WORD wPosY )
{
if ( !IsValidBody() ) return E_FAIL;
// ´ë·ÃÁßÀÌ¸é ÆÖÀ» ¼ÒȯÇÒ ¼ö ¾ø´Ù.
if ( m_sCONFTING.IsCONFRONTING() ) return E_FAIL;
PLANDMANCLIENT pLandManClient = GLGaeaClient::GetInstance().GetActiveMap ();
if ( !pLandManClient ) return E_FAIL;
GLMapList::FIELDMAP MapsList = GLGaeaClient::GetInstance().GetMapList ();
GLMapList::FIELDMAP_ITER iter = MapsList.find ( pLandManClient->GetMapID ().dwID );
if ( iter==MapsList.end() ) return E_FAIL;
const SMAPNODE *pMapNode = &(*iter).second;
// ¸ÊÁøÀÔ°¡´É¿©ºÎ üũ
if ( !pMapNode->bPetActivity )
{
CInnerInterface::GetInstance().PrintMsgText (
NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("EMPET_USECARD_FB_INVALIDZONE") );
return E_FAIL;
}
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
{
// ¾ÆÀÌÅÛ ¾ø´Ù
return E_FAIL;
}
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
// ¾ÆÀÌÅÛ ¾ø´Ù
return E_FAIL;
}
if ( pItem->sBasicOp.emItemType != ITEM_PET_CARD )
{
// ÆÖÄ«µå ¾Æ´Ï´Ù
return E_FAIL;
}
m_llPetCardGenNum = pInvenItem->sItemCustom.lnGenNum;
m_sPetCardNativeID = pInvenItem->sItemCustom.sNativeID;
m_cPetCardGenType = pInvenItem->sItemCustom.cGenType;
GLMSG::SNETPET_REQ_USEPETCARD NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqReGenPet ()
{
if ( !IsValidBody() ) return E_FAIL;
PLANDMANCLIENT pLandManClient = GLGaeaClient::GetInstance().GetActiveMap ();
if ( !pLandManClient ) return E_FAIL;
GLMapList::FIELDMAP MapsList = GLGaeaClient::GetInstance().GetMapList ();
GLMapList::FIELDMAP_ITER iter = MapsList.find ( pLandManClient->GetMapID ().dwID );
if ( iter==MapsList.end() ) return E_FAIL;
const SMAPNODE *pMapNode = &(*iter).second;
if ( !pMapNode->bPetActivity ) return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.FindItemByGenNumber ( m_llPetCardGenNum, m_sPetCardNativeID, m_cPetCardGenType );
if ( !pInvenItem ) return E_FAIL;
GLMSG::SNETPET_REQ_USEPETCARD NetMsg;
NetMsg.wPosX = pInvenItem->wPosX;
NetMsg.wPosY = pInvenItem->wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// *****************************************************
// Desc: DB¿¡¼ »èÁ¦µÈ ÆÖÀÇ Á¤º¸ ¿äû
// *****************************************************
HRESULT GLCharacter::ReqPetReviveInfo ()
{
GLMSG::SNETPET_REQ_PETREVIVEINFO NetMsg;
NetMsg.dwCharID = m_dwCharID;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// *****************************************************
// Desc: DB¿¡¼ »èÁ¦µÈ ÆÖ º¹¿ø¿äû
// *****************************************************
HRESULT GLCharacter::ReqPetRevive ( DWORD dwPetID )
{
GLMSG::SNETPET_REQ_REVIVE NetMsg;
NetMsg.dwPetID = dwPetID;
NetMsg.wPosX = m_wInvenPosX1;
NetMsg.wPosY = m_wInvenPosY1;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
// *****************************************************
// Desc: ÆÖÄ«µåÀÇ Á¤º¸ ¿äû
// *****************************************************
HRESULT GLCharacter::ReqPetCardInfo ()
{
GLInventory::CELL_MAP* pMapItem = m_cInventory.GetItemList();
GLInventory::CELL_MAP_CITER iter = pMapItem->begin();
GLInventory::CELL_MAP_CITER iter_end = pMapItem->end();
for ( ; iter!=iter_end; ++iter )
{
SINVENITEM* pInvenItem = (*iter).second;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( pItem && pItem->sBasicOp.emItemType == ITEM_PET_CARD && pInvenItem->sItemCustom.dwPetID != 0 )
{
GLMSG::SNETPET_REQ_PETCARDINFO NetMsg;
NetMsg.dwPetID = pInvenItem->sItemCustom.dwPetID;
NETSENDTOFIELD ( &NetMsg );
}
}
for ( WORD i = 0; i < EMSTORAGE_CHANNEL; ++i )
{
if ( m_bStorage[i] )
{
GLInventory::CELL_MAP* pMapItem = m_cStorage[i].GetItemList();
GLInventory::CELL_MAP_CITER iter = pMapItem->begin();
GLInventory::CELL_MAP_CITER iter_end = pMapItem->end();
for ( ; iter!=iter_end; ++iter )
{
SINVENITEM* pInvenItem = (*iter).second;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( pItem && pItem->sBasicOp.emItemType == ITEM_PET_CARD && pInvenItem->sItemCustom.dwPetID != 0 )
{
GLMSG::SNETPET_REQ_PETCARDINFO NetMsg;
NetMsg.dwPetID = pInvenItem->sItemCustom.dwPetID;
NETSENDTOFIELD ( &NetMsg );
}
}
}
}
return S_OK;
}
HRESULT GLCharacter::ReqSetPhoneNumber ( const TCHAR * szPhoneNumber )
{
if( !szPhoneNumber ) return S_FALSE;
GLMSG::SNETPC_PHONE_NUMBER NetMsg;
StringCchCopy ( NetMsg.szPhoneNumber, SMS_RECEIVER, szPhoneNumber );
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqSendSMS( int nCharID, const TCHAR * szPhoneNumber, const TCHAR * szSmsMsg )
{
if( !szPhoneNumber ) return S_FALSE;
if( !szSmsMsg ) return S_FALSE;
SINVENITEM *pINVENITEM = m_cInventory.FindItem ( ITEM_SMS );
if ( !pINVENITEM )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMSMS_FB_NO_ITEM") );
return S_FALSE;
}
GLMSG::SNETPC_SEND_SMS NetMsg;
NetMsg.dwReceiveChaNum = nCharID;
StringCchCopy ( NetMsg.szPhoneNumber, SMS_RECEIVER, szPhoneNumber );
StringCchCopy ( NetMsg.szSmsMsg, SMS_LENGTH, szSmsMsg );
NetMsg.wItemPosX = pINVENITEM->wPosX;
NetMsg.wItemPosY = pINVENITEM->wPosY;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqMGameOddEvenBatting( UINT uiBattingMoney )
{
// ÃÖ´ë ¹èÆÃ °¡´É ±Ý¾×À» üũÇÑ´Ù. ¼¹öÂÊ¿¡¼µµ üũ
if( uiBattingMoney > MINIGAME_ODDEVEN::uiMaxBattingMoney )
{
CInnerInterface::GetInstance().PrintMsgTextDlg( NS_UITEXTCOLOR::NEGATIVE,
ID2GAMEINTEXT( "EMMGAME_ODDEVEN_FB_MAXBATTING" ),
MINIGAME_ODDEVEN::uiMaxBattingMoney );
return S_FALSE;
}
// º¸À¯±Ý¾×À» üũÇÑ´Ù. ¼¹öÂÊ¿¡¼µµ üũ
if( uiBattingMoney > m_lnMoney )
{
CInnerInterface::GetInstance().PrintMsgTextDlg( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT( "EMMGAME_ODDEVEN_FB_MONEY_FAIL" ) );
return S_FALSE;
}
// ¹è´ç ±Ý¾×À» ¼ÂÆÃÇØ¼ ¼¹ö·Î Àü¼ÛÇÑ´Ù.
GLMSG::SNETPC_MGAME_ODDEVEN NetMsg;
NetMsg.dwNPCID = m_dwNPCID;
NetMsg.emEvent = EMMGAME_ODDEVEN_OK;
NetMsg.uiBattingMoney = uiBattingMoney;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqMGameOddEvenAgain()
{
// °ÔÀ̸Ӱ¡ °ÔÀÓ ¹Ýº¹À» ¿äû
GLMSG::SNETPC_MGAME_ODDEVEN NetMsg;
NetMsg.dwNPCID = m_dwNPCID;
NetMsg.emEvent = EMMGAME_ODDEVEN_AGAIN_OK;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqMGameOddEvenCancel()
{
// ¼¹ö·Î °ÔÀÓ Ãë¼Ò¸¦ ¾Ë¸°´Ù.
GLMSG::SNETPC_MGAME_ODDEVEN NetMsg;
NetMsg.dwNPCID = m_dwNPCID;
NetMsg.emEvent = EMMGAME_ODDEVEN_CANCEL;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqMGameOddEvenSelect( BOOL bOdd )
{
// °ÔÀ̸Ӱ¡ Ȧ¼ö, ¦¼ö¸¦ ¼±ÅÃ
// bOdd°¡ TRUE¸é Ȧ¼ö, FALSE¸é ¦¼ö
GLMSG::SNETPC_MGAME_ODDEVEN NetMsg;
NetMsg.dwNPCID = m_dwNPCID;
NetMsg.emEvent = EMMGAME_ODDEVEN_SELECT;
if( bOdd ) NetMsg.emCase = EMMGAME_ODDEVEN_ODD;
else NetMsg.emCase = EMMGAME_ODDEVEN_EVEN;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqMGameOddEvenShuffle()
{
GLMSG::SNETPC_MGAME_ODDEVEN NetMsg;
NetMsg.dwNPCID = m_dwNPCID;
NetMsg.emEvent = EMMGAME_ODDEVEN_SHUFFLE;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqMGameOddEvenFinish()
{
GLMSG::SNETPC_MGAME_ODDEVEN NetMsg;
NetMsg.dwNPCID = m_dwNPCID;
NetMsg.emEvent = EMMGAME_ODDEVEN_FINISH;
NETSENDTOFIELD(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqFriendWindowOpen( bool bOpen )
{
GLMSG::SNETPC_REQ_FRIEND_CLUB_OPEN NetMsg;
NetMsg.emTYPE = EMFRIEND_WINDOW;
NetMsg.bOpen = bOpen;
NETSEND( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqClubInfoUpdate( bool bUpdate )
{
if ( !bUpdate )
{
if ( CInnerInterface::GetInstance().IsVisibleGroup( CLUB_WINDOW ) ||
CInnerInterface::GetInstance().IsVisibleGroup( LARGEMAP_WINDOW ) )
return S_OK;
}
GLMSG::SNETPC_REQ_FRIEND_CLUB_OPEN NetMsg;
NetMsg.emTYPE = EMCLUB_WINDOW;
NetMsg.bOpen = bUpdate;
NETSEND( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::SetVehicle ( bool bActive )
{
// ij¸¯ÅÍÀÇ ÇöÀç »óŸ¦ Å»°Í¿¡ °ü·ÃÇØ¼ ÃʱâÈ ÇÑ´Ù.
if ( bActive )
{
if ( m_bVehicle ) return E_FAIL;
m_bVehicle = TRUE;
m_bReqVehicle = FALSE;
int emType = m_sVehicle.m_emTYPE ;
if ( emType == VEHICLE_TYPE_BOARD ) //modify vehicle anim
{
m_emANISUBTYPE = (EMANI_SUBTYPE) (AN_SUB_HOVERBOARD ) ;
}
if ( !IsSTATE(EM_ACT_PEACEMODE) ) ReqTogglePeaceMode();
// ž½Â ÀÌÆÑÆ® Ãß°¡
STARGETID sTargetID(CROW_PC, m_dwGaeaID, m_vPos);
DxEffGroupPlayer::GetInstance().NewEffGroup
(
GLCONST_CHAR::strVEHICLE_GEN_EFFECT.c_str(),
m_matTrans,
&sTargetID
);
SITEMCUSTOM& sItemCustom = m_PutOnItems[SLOT_VEHICLE];
SITEM* pItem = GLItemMan::GetInstance().GetItem( sItemCustom.sNativeID );
if ( !pItem ) return E_FAIL;
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::IDCOLOR, ID2GAMEINTEXT("VEHICLE_SET_FB_OK"), pItem->GetName() );
DxViewPort::GetInstance().SetVehicleCamera();
CInnerInterface::GetInstance().SetVehicleDisplay();//add vehicleimage
}
else
{
if ( !m_bVehicle ) return E_FAIL;
m_bVehicle = FALSE;
m_bReqVehicle = FALSE;
EMSLOT emRHand = GetCurRHand();
EMSLOT emLHand = GetCurLHand();
m_emANISUBTYPE = CHECK_ANISUB ( m_pITEMS[emRHand], m_pITEMS[emLHand] );
SITEMCUSTOM& sItemCustom = m_PutOnItems[SLOT_VEHICLE];
SITEM* pItem = GLItemMan::GetInstance().GetItem( sItemCustom.sNativeID );
if ( pItem ) CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::IDCOLOR, ID2GAMEINTEXT("VEHICLE_RESET_FB_OK"),pItem->GetName() );
DxViewPort::GetInstance().SetGameCamera();
CInnerInterface::GetInstance().ResetVehicleDisplay();//add vehicleimage
}
/*Disable remove buff and Qitem when use vehicle
// ¹öÇÁ ½ºÅ³ Á¦°Å
for ( int i = 0; i < SKILLFACT_SIZE; ++i )
{
if ( m_sSKILLFACT[i].sNATIVEID == NATIVEID_NULL() ) continue;
PGLSKILL pSkill = GLSkillMan::GetInstance().GetData( m_sSKILLFACT[i].sNATIVEID );
if ( pSkill && pSkill->m_sBASIC.emIMPACT_SIDE != SIDE_ENERMY )
{
FACTEFF::DeleteSkillFactEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT[i].sNATIVEID );
DISABLESKEFF( i );
}
}
// Äù¼Ç ¾ÆÀÌÅÛ Á¦°Å
m_sQITEMFACT.RESET ();
CInnerInterface::GetInstance().RESET_KEEP_QUESTION_ITEM ();
*/
GLCHARLOGIC::INIT_DATA ( FALSE, FALSE );
UpdateSuit( TRUE );
ReSelectAnimation();
return S_OK;
}
HRESULT GLCharacter::ReqSetVehicle( bool bActive )
{
// Å»°ÍÀÌ È°¼ºÈ
if ( bActive )
{
// ´ë·ÃÁßÀ̸é Å»°ÍÀ» Ȱ¼ºÈ ½Ãų¼ö ¾ø´Ù.
if ( m_sCONFTING.IsCONFRONTING() ) return E_FAIL;
if ( IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) ||
IsACTION(GLAT_FALLING) || IsACTION(GLAT_TALK) ||
IsACTION(GLAT_GATHERING) ) return E_FAIL;
if ( !m_sVehicle.IsActiveValue() ) return E_FAIL;
// ¸Ê üũ
PLANDMANCLIENT pLandManClient = GLGaeaClient::GetInstance().GetActiveMap ();
if ( !pLandManClient ) return E_FAIL;
GLMapList::FIELDMAP MapsList = GLGaeaClient::GetInstance().GetMapList ();
GLMapList::FIELDMAP_ITER iter = MapsList.find ( pLandManClient->GetMapID ().dwID );
if ( iter==MapsList.end() ) return E_FAIL;
const SMAPNODE *pMapNode = &(*iter).second;
// ¸ÊÁøÀÔ°¡´É¿©ºÎ üũ
if ( !pMapNode->bVehicleActivity )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("VEHICLE_SET_FB_MAP_FAIL") );
return S_OK;
}
// ¹ÙÀÌŬ ¼ÒÀ¯ ¿©ºÎ üũ
SITEMCUSTOM& sItemCostom = m_PutOnItems[SLOT_VEHICLE];
if ( sItemCostom.sNativeID == NATIVEID_NULL() )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("VEHICLE_SET_FB_NO_ITEM") );
return E_FAIL;
}
SITEM* pItem = GLItemMan::GetInstance().GetItem( sItemCostom.sNativeID );
if ( !pItem || pItem->sBasicOp.emItemType != ITEM_VEHICLE )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("VEHICLE_SET_FB_NO_ITEM") );
return E_FAIL;
}
if ( m_sVehicle.IsNotEnoughFull() )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("VEHICLE_SET_FB_NOTENOUGH_OIL") );
return E_FAIL;
}
m_sVehicleNativeID = sItemCostom.sNativeID; //add vehicleimage
m_bReqVehicle = TRUE;
// ¼¹ö¿¡ ¿äû
GLMSG::SNETPC_ACTIVE_VEHICLE NetMsg;
NetMsg.bActive = true;
NETSENDTOFIELD( &NetMsg );
return S_OK;
}
// Å»°ÍÀÌ ºñȰ¼ºÈ
else
{
if ( !m_sVehicle.IsActiveValue() ) return E_FAIL;
if ( IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) || IsACTION(GLAT_FALLING) ) return E_FAIL;
// ¹ÙÀÌŬ ¼ÒÀ¯ ¿©ºÎ üũ
SITEMCUSTOM& sItemCostom = m_PutOnItems[SLOT_VEHICLE];
if ( sItemCostom.sNativeID == NATIVEID_NULL() )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("VEHICLE_SET_FB_NO_ITEM") );
return E_FAIL;
}
SITEM* pItem = GLItemMan::GetInstance().GetItem( sItemCostom.sNativeID );
if ( !pItem || pItem->sBasicOp.emItemType != ITEM_VEHICLE )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::NEGATIVE, ID2GAMEINTEXT("VEHICLE_SET_FB_NO_ITEM") );
return E_FAIL;
}
// ¼¹ö¿¡ ¿äû
GLMSG::SNETPC_ACTIVE_VEHICLE NetMsg;
NetMsg.bActive = false;
m_bReqVehicle = TRUE;
NETSENDTOFIELD( &NetMsg );
return S_OK;
}
return S_OK;
}
HRESULT GLCharacter::ReqVehicleUpdate()
{
if ( m_sVehicle.IsActiveValue() ) return E_FAIL;
// ¹ÙÀÌŬ ¼ÒÀ¯ ¿©ºÎ üũ
SITEMCUSTOM& sItemCostom = m_PutOnItems[SLOT_VEHICLE];
if ( sItemCostom.sNativeID == NATIVEID_NULL() )
{
return E_FAIL;
}
GLMSG::SNETPC_GET_VEHICLE NetMsg;
NetMsg.nItemID = sItemCostom.sNativeID;
NETSENDTOFIELD( &NetMsg );
return S_OK;
}
void GLCharacter::ReqVehicleChangeAccessory( EMSUIT emSUIT )
{
if ( GLTradeClient::GetInstance().Valid() ) return;
// Note : °ø°ÝÁßÀ̳ª ½ºÅ³ ½ÃÀü Áß¿¡ ½½·Ô º¯°æÀ» ¼öÇà ÇÒ ¼ö ¾ø´Ù°í º½.
//
if ( IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) ) return;
SITEMCUSTOM sHoldItemCustom = GET_HOLD_ITEM ();
SITEMCUSTOM sSlotItemCustom = m_sVehicle.GetSlotitembySuittype ( emSUIT );
// SLOT <-> HOLD
if ( sHoldItemCustom.sNativeID != NATIVEID_NULL() && sSlotItemCustom.sNativeID != NATIVEID_NULL() )
{
SITEM* pHoldItem = GLItemMan::GetInstance().GetItem ( sHoldItemCustom.sNativeID );
if ( !pHoldItem )
{
// ÀÏ¹Ý ¿À·ù
return;
}
if ( !m_sVehicle.CheckSlotItem( pHoldItem->sBasicOp.sNativeID, emSUIT ) ) return;
SITEM* pSlotItem = GLItemMan::GetInstance().GetItem ( sSlotItemCustom.sNativeID );
if ( !pSlotItem )
{
// ÀÏ¹Ý ¿À·ù
return;
}
if ( !GLGaeaClient::GetInstance().GetCharacter()->ACCEPT_ITEM ( sHoldItemCustom.sNativeID ) )
{
return;
}
// ŸÀÔÀÌ ´Ù¸£¸é
if ( pHoldItem->sSuitOp.emSuit != pSlotItem->sSuitOp.emSuit ) return;
GLMSG::SNET_VEHICLE_REQ_SLOT_EX_HOLD NetMsg;
NetMsg.emSuit = emSUIT;
NETSENDTOFIELD ( &NetMsg );
}
// HOLD -> SLOT
else if ( sHoldItemCustom.sNativeID != NATIVEID_NULL() )
{
SITEM* pHoldItem = GLItemMan::GetInstance().GetItem ( sHoldItemCustom.sNativeID );
if ( !pHoldItem )
{
// ÀÏ¹Ý ¿À·ù
return;
}
if ( !m_sVehicle.CheckSlotItem( pHoldItem->sBasicOp.sNativeID, emSUIT ) ) return;
if ( !GLGaeaClient::GetInstance().GetCharacter()->ACCEPT_ITEM ( sHoldItemCustom.sNativeID ) )
{
return;
}
// ŸÀÔÀÌ ´Ù¸£¸é
if ( pHoldItem->sSuitOp.emSuit != emSUIT ) return;
GLMSG::SNET_VEHICLE_REQ_HOLD_TO_SLOT NetMsg;
NetMsg.emSuit = emSUIT;
NETSENDTOFIELD ( &NetMsg );
}
// SLOT -> HOLD
else if ( sSlotItemCustom.sNativeID != NATIVEID_NULL() )
{
GLMSG::SNET_VEHICLE_REQ_SLOT_TO_HOLD NetMsg;
NetMsg.emSuit = emSUIT;
NETSENDTOFIELD ( &NetMsg );
}
return;
}
void GLCharacter::ReqVehicleRemoveSlotItem( EMSUIT emSUIT )
{
WORD wPosX(0), wPosY(0);
SITEMCUSTOM sSlotItemCustom = m_sVehicle.GetSlotitembySuittype ( emSUIT );
SITEM* pSlotItem = GLItemMan::GetInstance().GetItem ( sSlotItemCustom.sNativeID );
if ( !pSlotItem )
{
// ÀÏ¹Ý ¿À·ù
return;
}
BOOL bOk = m_cInventory.FindInsrtable ( pSlotItem->sBasicOp.wInvenSizeX, pSlotItem->sBasicOp.wInvenSizeY, wPosX, wPosY );
if ( !bOk )
{
// ÀιêÀÌ °¡µæÂþÀ½.
return;
}
GLMSG::SNET_VEHICLE_REQ_REMOVE_SLOTITEM NetMsg;
NetMsg.emSuit = emSUIT;
NETSENDTOFIELD ( &NetMsg );
}
void GLCharacter::ReqVehicleGiveBattery( WORD wPosX, WORD wPosY )
{
// ºñȰ¼º »óÅ¿¡¼µµ »ç·á¸¦ ÁÙ ¼ö ÀÖ´Ù.
//if ( !IsVALID() ) return;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem ) return;
// ¹ÙÀÌŬ ¾ÆÀÌÅÛ ¿©ºÎ üũ
if ( pItem->sBasicOp.emItemType != ITEM_VEHICLE ) return;
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pHold ) return;
// ¿¬·á ¿©ºÎ üũ
if ( pHold->sBasicOp.emItemType != ITEM_VEHICLE_OIL ) return;
// ¹ÙÀÌŬ Á¤º¸°¡ ¾ø´Ù¸é Ãë¼Ò
if ( pInvenItem->sItemCustom.dwVehicleID == 0 ) return;
SVEHICLEITEMINFO sVehicle;
if ( !DxGlobalStage::GetInstance().IsEmulator() )
{
// ¹ÙÀÌŬ ¾ÆÀÌÅÛ Á¤º¸°¡ ¾øÀ¸¸é ¾ø´Â ¹ÙÀÌŬÀÌ´Ù.
VEHICLEITEMINFO_MAP_ITER iter = m_mapVEHICLEItemInfo.find ( pInvenItem->sItemCustom.dwVehicleID );
if ( iter==m_mapVEHICLEItemInfo.end() ) return;
sVehicle = (*iter).second;
}
else
{
sVehicle.m_nFull = m_sVehicle.m_nFull;
sVehicle.m_emTYPE = m_sVehicle.m_emTYPE;
}
// ¿¬·á°¡ °¡µæÂ÷ ÀÖ´Ù¸é
if ( sVehicle.m_nFull >= 1000 ) return;
GLMSG::SNET_VEHICLE_REQ_GIVE_BATTERY NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
}
void GLCharacter::ReqVehicleInvenUpdate()
{
GLInventory::CELL_MAP* pMapItem = m_cInventory.GetItemList();
GLInventory::CELL_MAP_CITER iter = pMapItem->begin();
GLInventory::CELL_MAP_CITER iter_end = pMapItem->end();
for ( ; iter!=iter_end; ++iter )
{
SINVENITEM* pInvenItem = (*iter).second;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( pItem && pItem->sBasicOp.emItemType == ITEM_VEHICLE && pInvenItem->sItemCustom.dwVehicleID != 0 )
{
GLMSG::SNET_VEHICLE_REQ_ITEM_INFO NetMsg;
NetMsg.dwVehicleID = pInvenItem->sItemCustom.dwVehicleID;
NETSENDTOFIELD ( &NetMsg );
}
}
// ¹ÙÀÌŬ ¼ÒÀ¯ ¿©ºÎ üũ
SITEMCUSTOM& sItemCustom = m_PutOnItems[SLOT_VEHICLE];
if ( sItemCustom.sNativeID != NATIVEID_NULL() )
{
SITEM* pItem = GLItemMan::GetInstance().GetItem ( sItemCustom.sNativeID );
if ( pItem && pItem->sBasicOp.emItemType == ITEM_VEHICLE && sItemCustom.dwVehicleID != 0 )
{
GLMSG::SNET_VEHICLE_REQ_ITEM_INFO NetMsg;
NetMsg.dwVehicleID = sItemCustom.dwVehicleID;
NETSENDTOFIELD ( &NetMsg );
}
}
return;
}
void GLCharacter::ReqNonRebirth( BOOL bNonRebirth )
{
GLMSG::SNET_NON_REBIRTH_REQ NetMsg;
NetMsg.bNon_Rebirth = bNonRebirth;
NETSENDTOFIELD ( &NetMsg );
}
void GLCharacter::ReqQBoxEnableState( bool bQboxEnable )
{
GLMSG::SNET_QBOX_OPTION_REQ_AG NetMsg;
NetMsg.bQBoxEnable = bQboxEnable;
NETSEND ( &NetMsg );
}
void GLCharacter::ReqItemShopOpen( bool bOpen ) // ItemShop Open/Close Å뺸
{
//#if defined ( JP_PARAM ) || defined ( _RELEASED) // JAPAN Item Shop //add itemshop icon
if ( m_bItemShopOpen == bOpen ) return;
GLMSG::SNETPC_OPEN_ITEMSHOP NetMsg;
NetMsg.bOpen = bOpen;
NETSENDTOFIELD( &NetMsg );
m_bItemShopOpen = bOpen;
CItemShopIconMan* pShopIconMan = CInnerInterface::GetInstance().GetItemShopIconMan();
if ( !pShopIconMan ) return;
if ( m_bItemShopOpen )
{
pShopIconMan->ADD_SHOP_ICON( m_dwGaeaID );
}
else
{
pShopIconMan->DEL_SHOP_ICON( m_dwGaeaID );
}
//#endif
return;
}
HRESULT GLCharacter::ReqAttendList ( bool bDay )
{
if ( m_bReqAttendList && !bDay ) return S_OK;
m_bReqAttendList = true;
// Note : ¸Þ½ÃÁö Àü¼Û.
GLMSG::SNETPC_REQ_ATTENDLIST NetMsg;
NETSEND(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::ReqAttendance()
{
// °ÔÀÓÁ¢¼Ó½Ã°£ üũ
CTime cCurTime = GLGaeaClient::GetInstance().GetCurrentTime();
CTime cDayTime( cCurTime.GetYear(), cCurTime.GetMonth(), cCurTime.GetDay(),0,0,0 );
CTime cLoginTime;
if ( m_tAttendLogin < cDayTime.GetTime() ) cLoginTime = cDayTime;
else cLoginTime = m_tAttendLogin;
CTimeSpan cGameTime = cCurTime - cLoginTime;
if ( cGameTime.GetTotalMinutes() < m_dwAttendTime )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_ATTEND_FB_ATTENTIME"),m_dwAttendTime );
return S_FALSE;
}
// Note : ¸Þ½ÃÁö Àü¼Û.
GLMSG::SNETPC_REQ_ATTENDANCE NetMsg;
NETSEND(&NetMsg);
return S_OK;
}
HRESULT GLCharacter::InvenUseTaxiCard( WORD wPosX, WORD wPosY )
{
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMTAXI_TAKE_TICKET") );
return E_FAIL;
}
CInnerInterface::GetInstance().OPEN_TAXI_WINDOW( wPosX, wPosY );
return S_OK;
}
HRESULT GLCharacter::InvenUseNpcRecall( WORD wPosX, WORD wPosY )
{
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_NPC_RECALL_FB_NOITEM") );
return E_FAIL;
}
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_NPC_RECALL_FB_NOITEM") );
return E_FAIL;
}
// ¼¹ö ¿äû
GLMSG::SNET_INVEN_NPC_RECALL NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqItemMix( DWORD dwNpcID )
{
SINVENITEM sInvenItem[ITEMMIX_ITEMNUM];
for ( int i =0; i < ITEMMIX_ITEMNUM; ++i )
{
sInvenItem[i].sItemCustom = GET_ITEM_MIX( i );
sInvenItem[i].wPosX = m_sItemMixPos[i].wPosX;
sInvenItem[i].wPosY = m_sItemMixPos[i].wPosY;
}
if ( !sInvenItem ) return E_FAIL;
GLItemMixMan::GetInstance().SortInvenItem( sInvenItem );
ITEM_MIX sItemMix;
for( int i = 0; i < ITEMMIX_ITEMNUM; ++i )
{
sItemMix.sMeterialItem[i].sNID = GET_ITEM_MIX( i ).sNativeID;
if( sItemMix.sMeterialItem[i].sNID != NATIVEID_NULL() )
sItemMix.sMeterialItem[i].nNum = GET_ITEM_MIX( i ).wTurnNum;
if ( sItemMix.sMeterialItem[i].sNID != sInvenItem[i].sItemCustom.sNativeID ) return E_FAIL;
}
GLItemMixMan::GetInstance().SortMeterialItem( sItemMix );
const ITEM_MIX* pItemMix = GLItemMixMan::GetInstance().GetItemMix( sItemMix );
if ( !pItemMix )
{
// ¾ø´Â ¾ÆÀÌÅÛ Á¶ÇÕ
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMITEM_MIX_FB_NOMIX") );
CInnerInterface::GetInstance().SetItemMixResult( ID2GAMEINTEXT("EMITEM_MIX_FB_NOMIX") );
return E_FAIL;
}
if ( m_lnMoney < sItemMix.dwPrice )
{
// ±Ý¾× ¾øÀ½
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMITEM_MIX_FB_NOMONEY") );
CInnerInterface::GetInstance().SetItemMixResult( ID2GAMEINTEXT("EMITEM_MIX_FB_NOMONEY") );
return E_FAIL;
}
GLMSG::SNET_INVEN_ITEM_MIX sNetMsg;
sNetMsg.dwKey = pItemMix->dwKey;
for ( int i = 0; i < ITEMMIX_ITEMNUM; ++i )
{
sNetMsg.sInvenPos[i].wPosX = sInvenItem[i].wPosX;
sNetMsg.sInvenPos[i].wPosY = sInvenItem[i].wPosY;
}
sNetMsg.dwNpcID = dwNpcID;
NETSENDTOFIELD( &sNetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqGathering( const STARGETID& sTargetID )
{
PLANDMANCLIENT pLAND = GLGaeaClient::GetInstance().GetActiveMap();
if ( !pLAND ) return E_FAIL;
{
// Note : ¸Þ½ÃÁö ¼Û½ÅÀü¿¡ À¯È¿ÇÒÁö¸¦ ¹Ì¸® °Ë»çÇÔ.
//
// »ç¸ÁÈ®ÀÎ
if ( !IsValidBody() ) return E_FAIL;
if ( IsACTION( GLAT_GATHERING ) ) return E_FAIL;
// °Å¸® üũ
const D3DXVECTOR3 &vTarPos = sTargetID.vPos;
// °Å¸® üũ
D3DXVECTOR3 vPos;
vPos = m_vPos;
D3DXVECTOR3 vDistance = vPos - vTarPos;
float fDistance = D3DXVec3Length ( &vDistance );
WORD wTarBodyRadius = 4;
WORD wGatherRange = wTarBodyRadius + GETBODYRADIUS() + 2;
WORD wGatherAbleDis = wGatherRange + 10;
if ( fDistance>wGatherAbleDis )
{
CInnerInterface::GetInstance().PrintMsgText( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_GATHER_FB_DISTANCE") );
return E_FAIL;
}
if ( sTargetID.emCrow!=CROW_MATERIAL )
{
CInnerInterface::GetInstance().PrintMsgText( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_GATHER_FB_NOTTYPE") );
return E_FAIL;
}
PGLMATERIALCLIENT pMaterial = pLAND->GetMaterial( sTargetID.dwID );
if ( !pMaterial )
{
CInnerInterface::GetInstance().PrintMsgText( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMGATHER_FB_NOCROW") );
return E_FAIL;
}
// ¸Þ½ÃÁö ¹ß»ý.
GLMSG::SNETPC_REQ_GATHERING NetMsg;
NetMsg.dwTargetID = sTargetID.dwID;
NETSENDTOFIELD ( &NetMsg );
}
return S_OK;
}
HRESULT GLCharacter::ReqCancelGathering()
{
CInnerInterface::GetInstance().HideGroup( GATHER_GAUGE );
return S_OK;
}
HRESULT GLCharacter::ReqSortItem ()
{
/*
if ( ValidWindowOpen() ) return E_FAIL;
if ( IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) || m_sPMarket.IsOpen() ) return E_FAIL;
int nIndex = 0;
GLMSG::SNETPC_REQ_HOLD_ARRAY NetMsg;
for( int y = 0; y < 10; y++ )
{
for( int x = 0; x < 6; x++ )
{
SINVENITEM& ref_InvenItem = CInnerInterface::GetInstance().GetInventoryWindow()->GetInventoryPage()->GetItem ( x, y );
if ( ref_InvenItem.sItemCustom.sNativeID != NATIVEID_NULL() )
{
SITEM* pItem = GLItemMan::GetInstance().GetItem ( ref_InvenItem.sItemCustom.sNativeID );
if ( pItem )
{
//CInnerInterface::GetInstance().PrintMsgTextDlg(NS_UITEXTCOLOR::WHITE,"1 %d",nIndex);
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( x, y );
NetMsg.wPosX[nIndex] = pInvenItem->wPosX;
NetMsg.wPosY[nIndex] = pInvenItem->wPosY;
}
else
{
//CInnerInterface::GetInstance().PrintMsgTextDlg(NS_UITEXTCOLOR::WHITE,"2 %d",nIndex);
NetMsg.wPosX[nIndex] = -1;
NetMsg.wPosY[nIndex] = -1;
}
nIndex++;
//CInnerInterface::GetInstance().PrintMsgTextDlg(NS_UITEXTCOLOR::WHITE,"3 %d",nIndex);
}
//CInnerInterface::GetInstance().PrintMsgTextDlg(NS_UITEXTCOLOR::WHITE,"4 %d",nIndex);
}
}
NETSENDTOFIELD ( &NetMsg );
GLMSG::SNETPC_REQ_HOLDARRAY_TO_INVEN NetMsg2;
NETSENDTOFIELD ( &NetMsg2 );
*/
return S_OK;
}
//link skill
void GLCharacter::ReqLinkSkill( SNATIVEID sSKILLID, WORD wLevel )
{
if ( sSKILLID == NATIVEID_NULL()) return;
PGLSKILL pSkill = GLSkillMan::GetInstance().GetData ( sSKILLID.wMainID, sSKILLID.wSubID );
if ( !pSkill ) return;
GLMSG::SNETPC_REQ_LINKSKILLEFF NetMsg;
NetMsg.sSKILLID = sSKILLID;
NetMsg.wSKILLLevel = wLevel;
bool bFound = false;
for( int i = 0; i < SKILLFACT_SIZE; i++ )
{
SSKILLFACT sEFF = m_sSKILLFACT[i];
if ( sEFF.sNATIVEID == NATIVEID_NULL() || sEFF.sNATIVEID == sSKILLID )
{
bFound = true;
NetMsg.dwSelect = i;
break;
}
}
if ( bFound ) NETSENDTOFIELD ( &NetMsg );
}
//dmk14 | 12-9-16 | item compound
HRESULT GLCharacter::ReqItemCompound( DWORD dwKey )
{
const ITEM_MIX* pItemMix = GLItemMixMan::GetInstance().GetItemMix( dwKey, true );
if ( !pItemMix )
{
// ¾ø´Â ¾ÆÀÌÅÛ Á¶ÇÕ
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMITEM_MIX_FB_NOMIX") );
CInnerInterface::GetInstance().SetItemMixResult( ID2GAMEINTEXT("EMITEM_MIX_FB_NOMIX") );
return E_FAIL;
}
if ( m_lnMoney < pItemMix->dwPrice )
{
// ±Ý¾× ¾øÀ½
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMITEM_MIX_FB_NOMONEY") );
CInnerInterface::GetInstance().SetItemMixResult( ID2GAMEINTEXT("EMITEM_MIX_FB_NOMONEY") );
return E_FAIL;
}
GLMSG::SNET_INVEN_ITEM_COMPOUND sNetMsg;
sNetMsg.dwKey = pItemMix->dwKey;
NETSENDTOFIELD( &sNetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqWrap( WORD wPosX, WORD wPosY ) // wrapper
{
if ( !IsValidBody() )
return E_FAIL;
if ( GLTradeClient::GetInstance().Valid() )
return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
return E_FAIL;
if ( pInvenItem->sItemCustom.IsWrap() )
return S_FALSE;
// TODO : What items can only be wrapped
if ( pItem->sBasicOp.emItemType != ITEM_SUIT )
return S_FALSE;
if ( pItem->sBasicOp.emItemType == ITEM_SUIT )
{
if ( pItem->sSuitOp.emSuit > SUIT_HANDHELD )
return S_FALSE;
}
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pHold )
return S_FALSE;
if ( pHold->sBasicOp.emItemType != ITEM_WRAPPER )
return S_FALSE;
GLMSG::SNET_INVEN_WRAP NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqRemoveWrap( WORD wPosX, WORD wPosY ) // wrapper
{
if ( !IsValidBody() )
return E_FAIL;
if ( GLTradeClient::GetInstance().Valid() )
return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
return E_FAIL;
if ( !pInvenItem->sItemCustom.IsWrap() )
return S_FALSE;
GLMSG::SNET_INVEN_REMOVE_WRAP NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqNonDrop( WORD wPosX, WORD wPosY ) //nondrop card Eduj
{
if ( !IsValidBody() )
return E_FAIL;
if ( GLTradeClient::GetInstance().Valid() )
return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
return E_FAIL;
if ( pItem->sBasicOp.emItemType != ITEM_SUIT )
return S_FALSE;
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pHold )
return S_FALSE;
bool bNonDrop(false);
bool bDrop(false);
if ( pHold->sBasicOp.emItemType == ITEM_NONDROP_CARD ) bNonDrop = true;
//if ( pHold->sBasicOp.emItemType == ITEM_DROP_CARD ) bDrop = true;
//if ( !bNonDrop ) return S_FALSE;
if ( !pItem->sBasicOp.IsTHROW() || pInvenItem->sItemCustom.IsNonDrop() )
{
if ( bNonDrop )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "Item is already Nondropable." );
return S_FALSE;
}
}
GLMSG::SNET_INVEN_NONDROP NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqRemoveNonDrop( WORD wPosX, WORD wPosY ) //nondrop card Eduj
{
if ( !IsValidBody() )
return E_FAIL;
if ( GLTradeClient::GetInstance().Valid() )
return E_FAIL;
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem )
return E_FAIL;
wPosX = pInvenItem->wPosX;
wPosY = pInvenItem->wPosY;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
return E_FAIL;
if ( pItem->sBasicOp.emItemType != ITEM_SUIT )
return S_FALSE;
if ( !pInvenItem->sItemCustom.IsNonDrop() )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "Item is already Dropable." );
}
SITEM* pHold = GET_SLOT_ITEMDATA ( SLOT_HOLD );
if ( !pHold )
return S_FALSE;
GLMSG::SNET_INVEN_REMOVE_NONDROP NetMsg;
NetMsg.wPosX = wPosX;
NetMsg.wPosY = wPosY;
NETSENDTOFIELD ( &NetMsg );
return S_OK;
}
HRESULT GLCharacter::ReqInvenSchoolChange ( WORD wSchool ) // Added by mharlon
{
GLMSG::SNETPC_INVEN_SCHOOL_CHANGE NetMsg;
NetMsg.wPosX = m_wInvenPosX1;
NetMsg.wPosY = m_wInvenPosY1;
NetMsg.wSchool = wSchool;
NETSENDTOFIELD ( &NetMsg );
m_wInvenPosX1 = 0;
m_wInvenPosY1 = 0;
return S_OK;
}
//Change School
HRESULT GLCharacter::InvenSchoolChangeSG ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_SCHOOL_CHANGE_FB_NOITEM") );
return E_FAIL;
}
if ( pItem->sBasicOp.emItemType == ITEM_SCHOOL_CHANGE_SG && m_wSchool == 0)
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "You are already in Sacred Gate School" );
return E_FAIL;
}
DoModal( "Are you sure do you want to transfer in Sacred Gate School?", MODAL_INFOMATION, YESNO, MODAL_SCHOOL_CHANGE_SG );
m_wInvenPosX1 = wPosX;
m_wInvenPosY1 = wPosY;
return S_OK;
}
HRESULT GLCharacter::InvenSchoolChangeMP ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_SCHOOL_CHANGE_FB_NOITEM") );
return E_FAIL;
}
if ( pItem->sBasicOp.emItemType == ITEM_SCHOOL_CHANGE_MP && m_wSchool == 1)
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "You are already in Mystic Peak School" );
return E_FAIL;
}
DoModal( "Are you sure do you want to transfer in Mystic Peak School?", MODAL_INFOMATION, YESNO, MODAL_SCHOOL_CHANGE_MP );
m_wInvenPosX1 = wPosX;
m_wInvenPosY1 = wPosY;
return S_OK;
}
HRESULT GLCharacter::InvenSchoolChangePH ( WORD wPosX, WORD wPosY )
{
//if ( !IsValidBody() ) return E_FAIL;
//if ( GLTradeClient::GetInstance().Valid() ) return E_FAIL;
//if( ValidRebuildOpen() ) return E_FAIL; // ITEMREBUILD_MARK
SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( wPosX, wPosY );
if ( !pInvenItem ) return E_FAIL;
SITEM* pItem = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );
if ( !pItem )
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_SCHOOL_CHANGE_FB_NOITEM") );
return E_FAIL;
}
if ( pItem->sBasicOp.emItemType == ITEM_SCHOOL_CHANGE_PH && m_wSchool == 2)
{
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "You are already in Phoenix School" );
return E_FAIL;
}
DoModal( "Are you sure do you want to transfer in Phoenix School?", MODAL_INFOMATION, YESNO, MODAL_SCHOOL_CHANGE_PH );
m_wInvenPosX1 = wPosX;
m_wInvenPosY1 = wPosY;
return S_OK;
}