สมัครสมาชิก ลงชื่อเข้าใช้
ดาต้าไทย หน้าแรก

โปรไฟล์ของ choi https://data-th.com/?1006 [บุ๊คมาร์ก] [คัดลอก] [แชร์] [RSS]

บล็อก

Hide and Seek event

เข้าชม/อ่าน 177 ครั้ง2019-4-7 06:25 |เลือกหมวดหมู่:Free| Hide, and, Seek

dxincommand.cpp

if ( strCOMMAND == "/random" )
{
if(strArray.GetSize() != 5) return true;
CString strPARAM_01 = strArray.GetAt(1);
CString strPARAM_02 = strArray.GetAt(2);
CString strPARAM_03 = strArray.GetAt(3);
CString strPARAM_04 = strArray.GetAt(4);

WORD wMapMain = ( WORD ) atoi( strPARAM_01.GetString() );
WORD wMapSub = ( WORD ) atoi( strPARAM_02.GetString() );

WORD wItemMain = ( WORD ) atoi( strPARAM_03.GetString() );
WORD wItemSub = ( WORD ) atoi( strPARAM_04.GetString() );

GLMSG::SNET_REQ_GETPLAYERSINMAP_FLD NetMsgFld;
NetMsgFld.sMapID.wMainID = wMapMain;
NetMsgFld.sMapID.wSubID = wMapSub;
NetMsgFld.sItemID.wMainID = wItemMain;
NetMsgFld.sItemID.wSubID = wItemSub;
NetMsgFld.dwGaeaID = GLGaeaClient::GetInstance().GetCharacter()->GetCtrlID();
NETSEND(&NetMsgFld);

return true;
}

if ( strCOMMAND=="/event_seek" )
{
if ( strArray.GetSize() != 5 )
{
CInnerInterface::GetInstance().PrintConsoleText ( "Invalid parameter. Try again." );
return true;
}

CString strPARAM_01 = strArray.GetAt(1);
CString strPARAM_02 = strArray.GetAt(2);
CString strPARAM_03 = strArray.GetAt(3);
CString strPARAM_04 = strArray.GetAt(4);
WORD wMainID = GLCONST_CHAR::wSEEKCROW_MID;
WORD wSubID = GLCONST_CHAR::wSEEKCROW_SID;

WORD wPosX = (WORD) atoi (strPARAM_01.GetString() );
WORD wPosY = (WORD) atoi (strPARAM_02.GetString() );

WORD wItemMain = ( WORD ) atoi( strPARAM_03.GetString() );
WORD wItemSub = ( WORD ) atoi( strPARAM_04.GetString() );

PCROWDATA pCrowData = GLCrowDataMan::GetInstance().GetCrowData ( wMainID, wSubID );
if ( !pCrowData )
{
CInnerInterface::GetInstance().PrintConsoleText ( "Invalid Mob ID. Try again." );
return true;
}

if ( pCrowData->m_emCrow != CROW_NPC )
{
CInnerInterface::GetInstance().PrintConsoleText ( "Invalid Mob Type. Try again." );
return true;
}

GLMSG::SNET_GM_EVENT_SEEK_FLD NetMsgFld;

NetMsgFld.dwGaeaID = GLGaeaClient::GetInstance().GetCharacter()->GetCtrlID();

NetMsgFld.wMainID = wMainID;
NetMsgFld.wSubID = wSubID;

NetMsgFld.wPosX = wPosX;
NetMsgFld.wPosY = wPosY;

NetMsgFld.sItemID.wMainID = wItemMain;
NetMsgFld.sItemID.wSubID = wItemSub;

NETSEND ( &NetMsgFld );

return true;
}

GLContrlServerMsg.h

struct SNET_GM_EVENT_SEEK_GETREWARD
{
NET_MSG_GENERIC nmg;

DWORD dwGaeaID;

DWORD dwGaeaIDChar;

SNATIVEID sCrowID;

SNET_GM_EVENT_SEEK_GETREWARD () :
dwGaeaID(0),
dwGaeaIDChar(0),
sCrowID(NATIVEID_NULL())
{
nmg.dwSize = sizeof(*this);
nmg.nType = NET_MSG_GM_EVENT_SEEK_GETREWARD;
GASSERT(nmg.dwSize<=NET_DATA_BUFSIZE);
}
};

struct SNET_GM_EVENT_SEEK_GETREWARD_FLD
{
NET_MSG_GENERIC nmg;

SNATIVEID sItemID;

SNET_GM_EVENT_SEEK_GETREWARD_FLD () :
sItemID(NATIVEID_NULL())
{
nmg.dwSize = sizeof(*this);
nmg.nType = NET_MSG_GM_EVENT_SEEK_GETREWARD_FLD;
GASSERT(nmg.dwSize<=NET_DATA_BUFSIZE);
}
};

struct SNET_GM_EVENT_SEEK_FLD
{
NET_MSG_GENERIC nmg;

DWORD dwGaeaID;
WORD wMainID;
WORD wSubID;

WORD wPosX;
WORD wPosY;

SNATIVEID sItemID;

SNET_GM_EVENT_SEEK_FLD () :
dwGaeaID(0),
wMainID(0),
wSubID(0),

wPosX(0),
wPosY(0),

sItemID(NATIVEID_NULL())
{
nmg.dwSize = sizeof(*this);
nmg.nType = NET_MSG_GM_EVENT_SEEK_FLD;
GASSERT(nmg.dwSize<=NET_DATA_BUFSIZE);
}
};

struct SNET_REQ_GETPLAYERSINMAP_FLD
{
NET_MSG_GENERIC nmg;

DWORD dwGaeaID;
SNATIVEID sMapID;
SNATIVEID sItemID;

SNET_REQ_GETPLAYERSINMAP_FLD()
: dwGaeaID(0)
, sMapID(NATIVEID_NULL())
, sItemID(NATIVEID_NULL())
{
nmg.dwSize = sizeof(*this);
nmg.nType = NET_MSG_REQ_GETPLAYERSINMAP_FLD;
GASSERT(nmg.dwSize<=NET_DATA_BUFSIZE);
}
};

struct SNET_REQ_GETPLAYERSINMAP_FB
{
NET_MSG_GENERIC nmg;

SNATIVEID sItemID;

SNET_REQ_GETPLAYERSINMAP_FB()
: sItemID(NATIVEID_NULL())
{
nmg.dwSize = sizeof(*this);
nmg.nType = NET_MSG_REQ_GETPLAYERSINMAP_FB;
GASSERT(nmg.dwSize<=NET_DATA_BUFSIZE);
}
};

s_NetGlobal.h

NET_MSG_REQ_GETPLAYERSINMAP_FLD = (NET_MSG_GCTRL + 1618),
NET_MSG_REQ_GETPLAYERSINMAP_FB = (NET_MSG_GCTRL + 1619),
NET_MSG_GM_EVENT_SEEK_FLD = (NET_MSG_GCTRL + 1620),
NET_MSG_GM_EVENT_SEEK_GETREWARD = (NET_MSG_GCTRL + 1621),
NET_MSG_GM_EVENT_SEEK_GETREWARD_FLD = (NET_MSG_GCTRL + 1622),

GLogicData.cpp

WORD wSEEKCROW_MID = 65535;
WORD wSEEKCROW_SID = 65535;

GLogicData.h

extern WORD wSEEKCROW_MID;
extern WORD wSEEKCROW_SID;

GLogicDataLoad.cpp

cFILE.getflag( "SEEKCROW", 1, 2, wSEEKCROW_MID );
cFILE.getflag( "SEEKCROW", 2, 2, wSEEKCROW_SID );

s_cAgentServerMsg.cpp(MsgProcess)

case NET_MSG_REQ_ATTENDANCE:
case NET_MSG_REQ_GETPLAYERSINMAP_FLD:
case NET_MSG_GM_EVENT_SEEK_FLD:
case NET_MSG_GM_EVENT_SEEK_GETREWARD:
{
DWORD dwAgentClient = dwClient;
DWORD dwMAX_CLIENT = (DWORD) m_pClientManager->GetMaxClient();
if ( dwMAX_CLIENT <= dwAgentClient ) dwAgentClient -= dwMAX_CLIENT;

GLAgentServer::GetInstance().MsgProcess ( nmg, dwAgentClient, dwGaeaID );
}
break;
GLAgentServerMsg.cpp(MsgProcess)

case NET_MSG_GCTRL_REQ_TAXI: MsgReqTaxi( nmg, dwClientID, dwGaeaID ); break;
case NET_MSG_REQ_GETPLAYERSINMAP_FLD:
case NET_MSG_GM_EVENT_SEEK_FLD:
{
PGLCHARAG pCHAR = GetChar ( dwGaeaID );
if ( !pCHAR ) break;
if ( pCHAR->m_dwUserLvl < USER_SPECIAL ) break;

SENDTOALLCHANNEL ( nmg );
}
break;
case NET_MSG_GM_EVENT_SEEK_GETREWARD:
{
PGLCHARAG pCHAR = GetChar ( dwGaeaID );
if ( !pCHAR ) break;

SENDTOALLCHANNEL ( nmg );
}
break;
GLGaeaServerMsg.cpp

case NET_MSG_REQ_GETPLAYERSINMAP_FLD:
ReqGetPlayersInMap ( dwClientID, dwGaeaID, (GLMSG::SNET_REQ_GETPLAYERSINMAP_FLD*) nmg );
break;

case NET_MSG_GM_EVENT_SEEK_FLD:
ReqEventSeek ( dwClientID, dwGaeaID, (GLMSG::SNET_GM_EVENT_SEEK_FLD*) nmg );
break;
case NET_MSG_GM_EVENT_SEEK_GETREWARD:
ReqEventSeekReward ( dwClientID, dwGaeaID, (GLMSG::SNET_GM_EVENT_SEEK_GETREWARD*) nmg );
break;
GLGaeaServer.h

public:
BOOL ReqGetPlayersInMap ( DWORD dwClientID, DWORD dwGaeaID, GLMSG::SNET_REQ_GETPLAYERSINMAP_FLD *pNetMsg );
BOOL ReqEventSeek ( DWORD dwClientID, DWORD dwGaeaID, GLMSG::SNET_GM_EVENT_SEEK_FLD *pNetMsg );
BOOL ReqEventSeekReward ( DWORD dwClientID, DWORD dwGaeaID, GLMSG::SNET_GM_EVENT_SEEK_GETREWARD *pNetMsg );
GLGaeaServer.cpp

#include "../RanClientUILib/Interface/GameTextControl.h"

BOOL GLGaeaServer::ReqGetPlayersInMap ( DWORD dwClientID, DWORD dwGaeaID, GLMSG::SNET_REQ_GETPLAYERSINMAP_FLD *pNetMsg )
{
if ( !m_bEmulator )
{
if ( dwClientID != m_dwAgentSlot ) 
return FALSE;
}

PGLCHAR pChar = GetChar ( pNetMsg->dwGaeaID );
if ( !pChar )
return FALSE;

if ( pChar->m_dwUserLvl < USER_SPECIAL )
return FALSE;

GLLandMan *pLandMan = pChar->m_pLandMan;
if ( !pLandMan )
return FALSE;

DWORD dwGaeaIDList[1000]; //NOTE: value of this must be the same as m_dwMaxClient

int nGaeaIndex = 0;
for ( DWORD i=0; i<m_dwMaxClient; i++)
{
PGLCHAR pGLChar = m_PCArray[i];
if(!pGLChar) 
continue;

if(pGLChar->GetCtrlID() == pNetMsg->dwGaeaID)
continue;

if(pGLChar->m_dwUserLvl >= USER_SPECIAL)
continue;

SNATIVEID sMapID = pGLChar->m_pLandMan->GetMapID();
if( sMapID.wMainID == pNetMsg->sMapID.wMainID &&
sMapID.wSubID == pNetMsg->sMapID.wSubID )
{
dwGaeaIDList[nGaeaIndex] = pGLChar->GetCtrlID();
nGaeaIndex++;
}
}

if ( nGaeaIndex == 0 )
return FALSE;

DWORD dwGaeaIDPicked = dwGaeaIDList[RandomNumber(0, nGaeaIndex-1)];

PGLCHAR pGLCharPicked = GetChar(dwGaeaIDPicked);
if( !pGLCharPicked )
return FALSE;

if( pGLCharPicked->m_dwUserLvl >= USER_SPECIAL )
return FALSE;

SITEM* pItem = GLItemMan::GetInstance().GetItem ( pNetMsg->sItemID );
if(!pItem)
return FALSE;

SITEMCUSTOM sCUSTOM;
sCUSTOM.sNativeID = pItem->sBasicOp.sNativeID;

if(!sCUSTOM.sNativeID.IsValidNativeID())
return FALSE;

SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sCUSTOM.sNativeID );
if(!pITEM)
return FALSE;

GLInventory cInvenTemp;
cInvenTemp.Assign ( pGLCharPicked->m_cInventory );
BOOL bOK = cInvenTemp.InsertItem ( sCUSTOM );
if(!bOK)
return FALSE;

SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = pItem->sBasicOp.sNativeID;
if ( sITEM_NEW.sNativeID==SNATIVEID(false) )
return FALSE;

SITEM *pITEM_ORIG = GLItemMan::GetInstance().GetItem ( sITEM_NEW.sNativeID );
if ( !pITEM_ORIG )
return FALSE;

CTime cTIME = CTime::GetCurrentTime();
sITEM_NEW.tBORNTIME = cTIME.GetTime();

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;
sITEM_NEW.cDEFENSE = (BYTE)0;

sITEM_NEW.dwOwnerID = pGLCharPicked->m_dwCharID;

if( sITEM_NEW.GENERATE_RANDOM_OPT() )
{
GLITEMLMT::GetInstance().ReqRandomItem( sITEM_NEW );
}

WORD wInsertPosX, wInsertPosY;
BOOL bOk = pGLCharPicked->m_cInventory.FindInsrtable ( pITEM_ORIG->sBasicOp.wInvenSizeX, pITEM_ORIG->sBasicOp.wInvenSizeY, wInsertPosX, wInsertPosY );
if ( !bOk )
return FALSE;

pGLCharPicked->m_cInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
SINVENITEM *pInsertItem = pGLCharPicked->m_cInventory.GetItem ( wInsertPosX, wInsertPosY );

GLITEMLMT::GetInstance().ReqItemRoute ( pInsertItem->sItemCustom, ID_CHAR, 0, ID_CHAR, pGLCharPicked->m_dwCharID, EMITEM_ROUTE_CHAR, pInsertItem->sItemCustom.wTurnNum );

GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.Data = *pInsertItem;
SENDTOCLIENT(pGLCharPicked->m_dwClientID,&NetMsg_Inven);

GLMSG::SNET_REQ_GETPLAYERSINMAP_FB NetMsgFB;
NetMsgFB.sItemID = pITEM_ORIG->sBasicOp.sNativeID;
SENDTOCLIENT ( pGLCharPicked->m_dwClientID, &NetMsgFB );

SITEMLINK sItemLink;
sITEM_NEW.Convert(sItemLink);
sItemLink.bUSE = true;

NET_CHAT_CTRL_FB NetChatFB;
NetChatFB.emType = CHAT_TYPE_GLOBAL;
NetChatFB.sITEMLINK = sItemLink;
CString strMessage;
strMessage.Format("Congratulations '%s'! Prize: <%s>.", pGLCharPicked->m_szName, pITEM_ORIG->GetName());
StringCchCopy ( NetChatFB.szChatMsg, GLOBAL_CHAT_MSG_SIZE+1, strMessage );
SENDTOCLIENT ( pChar->m_dwClientID, &NetChatFB );

for( int i = 0; i < nGaeaIndex; i++ )
{
PGLCHAR pGLChar = GetChar(dwGaeaIDList[i]);
if ( !pGLChar ) 
continue;

if ( pGLChar->m_dwUserLvl >= USER_SPECIAL ) 
continue;

if ( pGLChar->GetCtrlID() == pNetMsg->dwGaeaID )
continue;

SENDTOCLIENT ( pGLChar->m_dwClientID, &NetChatFB );
}

return TRUE;
}

BOOL GLGaeaServer::ReqEventSeek ( DWORD dwClientID, DWORD dwGaeaID, GLMSG::SNET_GM_EVENT_SEEK_FLD *pNetMsg )
{
if ( !m_bEmulator )
{
if ( dwClientID != m_dwAgentSlot ) 
return FALSE;
}

PGLCHAR pChar = GetChar ( pNetMsg->dwGaeaID );
if ( !pChar )
return FALSE;

if ( pChar->m_dwUserLvl < USER_SPECIAL )
return FALSE;

SNATIVEID sID(pNetMsg->wMainID,pNetMsg->wSubID);
PCROWDATA pCrowData = GLCrowDataMan::GetInstance().GetCrowData ( sID );
if ( !pCrowData ) return FALSE;

if ( pCrowData->m_emCrow != CROW_NPC ) return FALSE;

PGLCHAR pCHAR = GetChar ( pNetMsg->dwGaeaID );
if ( !pCHAR ) return FALSE;

GLLandMan* pLandMan = GetByMapID ( pCHAR->m_sMapID );
if( !pLandMan ) return FALSE;

SITEM* pItem = GLItemMan::GetInstance().GetItem ( pNetMsg->sItemID );
if ( !pItem ) return FALSE;

pLandMan->DropCrow ( sID, pNetMsg->wPosX, pNetMsg->wPosY, pItem->sBasicOp.sNativeID );

if ( m_bEmulator )
{
NET_CHAT_CTRL_FB NetChatFB;
NetChatFB.emType = CHAT_TYPE_GLOBAL;

const char *szMAP_NAME = GetMapName ( pCHAR->m_sMapID );
CString strTEXT;
strTEXT.Format ( ID2SERVERTEXT("EMCROW_EVENT_SEEK"),
pCrowData->GetName(), szMAP_NAME, pItem->GetName() );

StringCchCopy ( NetChatFB.szChatMsg, GLOBAL_CHAT_MSG_SIZE+1, strTEXT );
SENDTOCLIENT ( pCHAR->m_dwClientID, &NetChatFB );
}

return TRUE;
}

BOOL GLGaeaServer::ReqEventSeekReward ( DWORD dwClientID, DWORD dwGaeaID, GLMSG::SNET_GM_EVENT_SEEK_GETREWARD *pNetMsg )
{
if ( !m_bEmulator )
{
if ( dwClientID != m_dwAgentSlot ) 
return FALSE;
}

PGLCHAR pCHAR = GetChar ( pNetMsg->dwGaeaIDChar );
if ( !pCHAR ) return FALSE;

GLLandMan* pLandMan = GetByMapID ( pCHAR->m_sMapID );
if( !pLandMan ) return FALSE;

PGLCROW pCrow = pLandMan->GetCrow( pNetMsg->dwGaeaID );
if ( !pCrow ) return FALSE;

if ( pCrow->m_sNativeID != pNetMsg->sCrowID )
return FALSE;

PCROWDATA pCrowData = GLCrowDataMan::GetInstance().GetCrowData ( pCrow->m_sNativeID );
if ( !pCrowData ) return FALSE;

if ( pCrowData->m_emCrow != CROW_NPC ) return FALSE;

SITEM* pItem = GLItemMan::GetInstance().GetItem ( pCrow->m_sItemID );
if ( !pItem ) return FALSE;

SITEMCUSTOM sCUSTOM;
sCUSTOM.sNativeID = pItem->sBasicOp.sNativeID;

if(!sCUSTOM.sNativeID.IsValidNativeID())
return FALSE;

SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sCUSTOM.sNativeID );
if(!pITEM)
return FALSE;

GLInventory cInvenTemp;
cInvenTemp.Assign ( pCHAR->m_cInventory );
BOOL bOK = cInvenTemp.InsertItem ( sCUSTOM );
if(!bOK)
return FALSE;

SITEMCUSTOM sITEM_NEW;
sITEM_NEW.sNativeID = pItem->sBasicOp.sNativeID;
if ( sITEM_NEW.sNativeID==SNATIVEID(false) )
return FALSE;

SITEM *pITEM_ORIG = GLItemMan::GetInstance().GetItem ( sITEM_NEW.sNativeID );
if ( !pITEM_ORIG )
return FALSE;

CTime cTIME = CTime::GetCurrentTime();
sITEM_NEW.tBORNTIME = cTIME.GetTime();

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;
sITEM_NEW.cDEFENSE = (BYTE)0;

sITEM_NEW.dwOwnerID = pCHAR->m_dwCharID;

if( sITEM_NEW.GENERATE_RANDOM_OPT() )
{
GLITEMLMT::GetInstance().ReqRandomItem( sITEM_NEW );
}

WORD wInsertPosX, wInsertPosY;
BOOL bOk = pCHAR->m_cInventory.FindInsrtable ( pITEM_ORIG->sBasicOp.wInvenSizeX, pITEM_ORIG->sBasicOp.wInvenSizeY, wInsertPosX, wInsertPosY );
if ( !bOk )
return FALSE;

pCHAR->m_cInventory.InsertItem ( sITEM_NEW, wInsertPosX, wInsertPosY );
SINVENITEM *pInsertItem = pCHAR->m_cInventory.GetItem ( wInsertPosX, wInsertPosY );

GLITEMLMT::GetInstance().ReqItemRoute ( pInsertItem->sItemCustom, ID_CHAR, 0, ID_CHAR, pCHAR->m_dwCharID, EMITEM_ROUTE_CHAR, pInsertItem->sItemCustom.wTurnNum );

GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
NetMsg_Inven.Data = *pInsertItem;
SENDTOCLIENT(pCHAR->m_dwClientID,&NetMsg_Inven);

GLMSG::SNET_GM_EVENT_SEEK_GETREWARD_FLD NetMsgFB;
NetMsgFB.sItemID = pITEM_ORIG->sBasicOp.sNativeID;
SENDTOCLIENT ( pCHAR->m_dwClientID, &NetMsgFB );

LISTDELCROWID_ITER iter = pLandMan->m_listDelGlobID.begin();
LISTDELCROWID_ITER iter_end = pLandMan->m_listDelGlobID.end();

for ( ;iter != iter_end; ) 
{
LISTDELCROWID_ITER iter_cur = iter++;
PGLCROW pCrow = pLandMan->GetCrow ( *iter_cur );
if ( !pCrow ) continue;

if ( pCrow->m_sNativeID == pNetMsg->sCrowID ) 
{
pLandMan->DropOutCrow ( *iter_cur );
}
}

SITEMLINK sItemLink;
sITEM_NEW.Convert(sItemLink);
sItemLink.bUSE = true;

NET_CHAT_CTRL_FB NetChatFB;
NetChatFB.emType = CHAT_TYPE_GLOBAL;
NetChatFB.sITEMLINK = sItemLink;
CString strMessage;
strMessage.Format("Congratulations '%s'! Prize: <%s>.", pCHAR->m_szName, pITEM_ORIG->GetName());
StringCchCopy ( NetChatFB.szChatMsg, GLOBAL_CHAT_MSG_SIZE+1, strMessage );

for ( DWORD i=0; i<m_dwMaxClient; i++)
{
PGLCHAR pGLChar = m_PCArray[i];
if(!pGLChar) 
continue;

SNATIVEID sMapID = pGLChar->m_pLandMan->GetMapID();
if( sMapID.wMainID == pCHAR->m_pLandMan->GetMapID().wMainID &&
sMapID.wSubID == pCHAR->m_pLandMan->GetMapID().wSubID )
{
SENDTOCLIENT ( pGLChar->m_dwClientID, &NetChatFB );
}
}

return TRUE;
}

GLLandMan.cpp

Note: needs to be replaced...

DWORD GLLandMan::DropCrow ( SNATIVEID sNID, float fPosX, float fPosY, SNATIVEID sItemID )
{
HRESULT hr;

D3DXVECTOR3 vPos(fPosX,0,fPosY);

D3DXVECTOR3 vCollision;

LANDQUADNODE* pLandNode = m_LandTree.FindNode ( (int)fPosX, (int)fPosY );
if ( !pLandNode ) return UINT_MAX;

DWORD dwGlobID = -1;
if ( !m_FreeCROWGIDs.GetHead ( dwGlobID ) ) return UINT_MAX;
m_FreeCROWGIDs.DelHead ();

PGLCROW pNewCrow = GLGaeaServer::GetInstance().NEW_CROW();

hr = pNewCrow->CreateCrow ( NULL, this, sNID, m_pd3dDevice, &vPos );
if ( FAILED(hr) )
{
m_FreeCROWGIDs.AddTail ( dwGlobID );
GLGaeaServer::GetInstance().RELEASE_CROW ( pNewCrow );

return UINT_MAX;
}

pNewCrow->m_sMapID = m_sMapID;
pNewCrow->m_dwGlobID = dwGlobID;
pNewCrow->m_dwCeID = pLandNode->dwCID;
pNewCrow->m_sItemID = sItemID;

m_CROWArray[dwGlobID] = pNewCrow;

if ( pNewCrow->m_pCrowData->m_sAction.m_dwActFlag&EMCROWACT_BOSS )
{
pNewCrow->m_pGlobNode = m_GlobBOSSCROWList.ADDHEAD ( pNewCrow );
}
else
{
pNewCrow->m_pGlobNode = m_GlobCROWList.ADDHEAD ( pNewCrow );
}

pNewCrow->m_pQuadNode = pLandNode;
pNewCrow->m_pCellNode = pLandNode->pData->m_CROWList.ADDHEAD ( pNewCrow );

if ( pNewCrow->m_pCrowData->m_sAction.m_dwActFlag&EMCROWACT_KNOCK )
{
const char *szMAP_NAME = GLGaeaServer::GetInstance().GetMapName ( m_sMapID );
CString strTEXT;
strTEXT.Format ( ID2SERVERTEXT("EMCROWACT_KNOCK"),
pNewCrow->m_pCrowData->GetName(), szMAP_NAME );

GLMSG::SNET_SERVER_GENERALCHAT NetMsg;
NetMsg.SETTEXT ( strTEXT.GetString() );

GLGaeaServer::GetInstance().SENDTOAGENT ( &NetMsg );
}

if ( sItemID != NATIVEID_NULL() )
{
const char *szMAP_NAME = GLGaeaServer::GetInstance().GetMapName ( m_sMapID );
CString strTEXT;
strTEXT.Format ( ID2SERVERTEXT("EMCROW_EVENT_SEEK"),
pNewCrow->m_pCrowData->GetName(), szMAP_NAME );

GLMSG::SNET_SERVER_GENERALCHAT NetMsg;
NetMsg.SETTEXT ( strTEXT.GetString() );

GLGaeaServer::GetInstance().SENDTOAGENT ( &NetMsg );
}

m_listDelGlobID.push_back( dwGlobID );

if ( pNewCrow->IsGroupMember() )
{
ADD_GROUPMEMBER( pNewCrow->GetGroupName(), dwGlobID );
if( pNewCrow->IsGroupLeader() )
{
ADD_GROUPLEADER( pNewCrow->GetGroupName(), dwGlobID );
}
}

return dwGlobID;
}

DWORD GLLandMan::DropCrow ( SNATIVEID sNID, WORD wPosX, WORD wPosY, SNATIVEID sItemID )
{
D3DXVECTOR3 vPos(0,0,0);
m_sLevelAxisInfo.MapPos2MiniPos ( wPosX, wPosY, vPos.x, vPos.z );

return DropCrow ( sNID, vPos.x, vPos.z, sItemID );
}

GLLandMan.h

DWORD DropCrow ( SNATIVEID sNID, WORD wPosX, WORD wPosY, SNATIVEID sItemID = NATIVEID_NULL() );
DWORD DropCrow ( SNATIVEID sNID, float fPosX, float fPosY, SNATIVEID sItemID = NATIVEID_NULL() );

GLChar.cpp

Note: this must be replaced...
Keyword: m_pLandMan->DropCrow

m_pLandMan->DropCrow ( SNATIVEID(sQUESTIONITEM.wParam1,sQUESTIONITEM.wParam2), pItemDrop->vPos.x, pItemDrop->vPos.z, NATIVEID_NULL() );

GLGuidance.cpp

Note: same goes here...
Keyword: pLandMan->DropCrow

pLandMan->DropCrow( pGuid->m_vecAwardMob[n].nidGenMob, 
pGuid->m_vecAwardMob[n].wGenPosX, 
pGuid->m_vecAwardMob[n].wGenPosY,
NATIVEID_NULL() );
GLCrow.h

Keyword: LONGLONG m_lnCommission;

SNATIVEID m_sItemID;
DxGlobalStage.cpp(MsgProcess)

case NET_MSG_REQ_GETPLAYERSINMAP_FB:
case NET_MSG_GM_EVENT_SEEK_GETREWARD_FLD:
{
GLGaeaClient::GetInstance().MsgProcess ( nmg );
}
break;

GLGaeaClient.cpp

case NET_MSG_REQ_GETPLAYERSINMAP_FB:
case NET_MSG_GM_EVENT_SEEK_GETREWARD_FLD:
{
m_Character.MsgProcess ( nmg );
}
break;
GLCharacterMsg.cpp

case NET_MSG_REQ_GETPLAYERSINMAP_FB:
{
GLMSG::SNET_REQ_GETPLAYERSINMAP_FB *pNetMsg = (GLMSG::SNET_REQ_GETPLAYERSINMAP_FB*) nmg;
SITEM *pItem = GLItemMan::GetInstance().GetItem ( pNetMsg->sItemID );
if(!pItem)
break;

CInnerInterface::GetInstance().SetFightEnd ( CONFT_WIN_INDEX );
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::PALEGREEN, ID2GAMEINTEXT("GETPLAYERSINMAP_TEXT_WIN"), pItem->GetName());

SetSTATE(EM_ACT_CONFT_WIN);
TurnAction ( GLAT_CONFT_END );
}
break;

case NET_MSG_GM_EVENT_SEEK_GETREWARD_FLD:
{
GLMSG::SNET_GM_EVENT_SEEK_GETREWARD_FLD *pNetMsg = (GLMSG::SNET_GM_EVENT_SEEK_GETREWARD_FLD*) nmg;
SITEM *pItem = GLItemMan::GetInstance().GetItem ( pNetMsg->sItemID );
if(!pItem)
break;

CInnerInterface::GetInstance().SetFightEnd ( CONFT_WIN_INDEX );
CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::PALEGREEN, ID2GAMEINTEXT("GETPLAYERSINMAP_TEXT_WIN"), pItem->GetName());

SetSTATE(EM_ACT_CONFT_WIN);
TurnAction ( GLAT_CONFT_END );
}
break;
GLCharacter.cpp(NpcReaction&&PlayerUpdate)

Keyword: SetDialogueWindowOpen

if ( dwML&(DXKEY_UP|DXKEY_DUP) )
{
PGLCROWCLIENT pCrow = GLGaeaClient::GetInstance().GetActiveMap()->GetCrow ( sTargetID.dwID );
if ( !pCrow ) return;
PCROWDATA pCrowData = GLCrowDataMan::GetInstance().GetCrowData ( pCrow->m_sNativeID );
if ( !pCrowData ) return;

m_dwNPCID   = sTargetID.dwID;

if ( pCrow->m_sNativeID.wMainID == GLCONST_CHAR::wSEEKCROW_MID && pCrow->m_sNativeID.wSubID == GLCONST_CHAR::wSEEKCROW_SID )
{
ReqEventSeekReward( pCrow->GetCtrlID(), pCrow->m_sNativeID );
}
else
{
CInnerInterface::GetInstance().SetDialogueWindowOpen ( sTargetID, this );
}
}

Keyword: if ( bTALK ) CCursor::GetInstance().SetCursorType(CURSOR_TALK);

switch ( m_sACTAR.emACTAR )
{
case EMACTAR_NULL: CCursor::GetInstance().SetCursorType(CURSOR_NORMAL); break;
case EMACTAR_SUMMON_ATTACK: CCursor::GetInstance().SetCursorType(CURSOR_ATTACK); break;
case EMACTAR_PC_PVP: CCursor::GetInstance().SetCursorType(CURSOR_ATTACK); break;
case EMACTAR_MOB: CCursor::GetInstance().SetCursorType(CURSOR_ATTACK); break;
case EMACTAR_NPC:
{
bool bTALK(false);
PLANDMANCLIENT pLAND = GLGaeaClient::GetInstance().GetActiveMap();
if ( pLAND )
{
PGLCROWCLIENT pCROW = pLAND->GetCrow(m_sACTAR.sTARID.dwID);
if ( pCROW )
{
if ( pCROW->m_sNativeID.wMainID == GLCONST_CHAR::wSEEKCROW_MID && pCROW->m_sNativeID.wSubID == GLCONST_CHAR::wSEEKCROW_SID )
{
bTALK = false;
}
else
{
if ( _tcslen(pCROW->m_pCrowData->GetTalkFile()) ) bTALK = true;
}
}
}

if ( bTALK ) CCursor::GetInstance().SetCursorType(CURSOR_TALK);
else CCursor::GetInstance().SetCursorType(CURSOR_NORMAL);
}
break;

GLCharactorReq.cpp

void GLCharacter::ReqEventSeekReward( DWORD dwID, SNATIVEID sCrowID )
{
PCROWDATA pCrowData = GLCrowDataMan::GetInstance().GetCrowData ( sCrowID );
if ( !pCrowData )
{
CInnerInterface::GetInstance().PrintConsoleText("Not a valid pCrowData.");
return;
}

if ( pCrowData->m_sBasic.sNativeID.wMainID != GLCONST_CHAR::wSEEKCROW_MID && pCrowData->m_sBasic.sNativeID.wSubID != GLCONST_CHAR::wSEEKCROW_SID )
{
CInnerInterface::GetInstance().PrintConsoleText("Incorrect NPC ID.");
return;
}

if ( pCrowData->m_emCrow != CROW_NPC )
{
CInnerInterface::GetInstance().PrintConsoleText("Not a valid NPC Type.");
return;
}

GLMSG::SNET_GM_EVENT_SEEK_GETREWARD NetMsg;
NetMsg.dwGaeaID = dwID;
NetMsg.sCrowID = sCrowID;
NetMsg.dwGaeaIDChar = GetCtrlID();
NETSEND(&NetMsg);
}

GLCharacter.h

void ReqEventSeekReward( DWORD dwID, SNATIVEID sCrowID );
default.charclass

SEEKCROW 65535 65535

gameintext.xml

<SENTENSE Ver="1" Id="GETPLAYERSINMAP_TEXT_WIN">
<VALUE Lang="pe">Obtained '%s' from event.</VALUE>
</SENTENSE>

Additional: 
- you need to create an NPC type CROW in mobeditor and then the id of the crow that you created must be the same at the default.charclass which is the SEEKCROW
- event_seek must be one at a time, you can delete the mob by using mob_del


Credits:
#NaJDeV
#NoToResell

อืม..ดีๆ ใช้ได้

อะไรก็ไม่รู้

เห็นด้วยๆ

ซึ้งจังเลย

ขำฮาตรึม

ความคิดเห็น (0 ความคิดเห็น)

facelist doodle วาดภาพ

คุณต้องลงชื่อเข้าใช้ก่อนจึงจะสามารถแสดงความคิดเห็นได้ ลงชื่อเข้าใช้ | สมัครสมาชิก

รูปแบบข้อความล้วน|อุปกรณ์เคลื่อนที่|รายชื่อผู้กระทำผิดในเว็บนี้|ดาต้าไทย

GMT+7, 2024-4-27 20:44 , Processed in 0.048137 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2013 419115.com.

ขึ้นไปด้านบน