void CPartyMng::AddConnection( CPlayer* pPlayer ) { CParty* pParty; CMclAutoLock Lock( m_AddRemoveLock ); pParty = GetParty( pPlayer->m_uPartyId ); if( pParty ) { int i = pParty->FindMember( pPlayer->uKey ); if( i < 0 ) { pPlayer->m_uPartyId = 0; return; } pParty->m_aMember[i].m_bRemove = FALSE; pParty->m_nReferens--; BEFORESENDDUAL( ar, PACKETTYPE_ADDPLAYERPARTY, DPID_UNKNOWN, DPID_UNKNOWN ); ar << pPlayer->m_uPartyId << pPlayer->uKey; SEND( ar, &g_dpCoreSrvr, DPID_ALLPLAYERS ); } else pPlayer->m_uPartyId = 0; }
void vClient::SendWCWantedReward(u_long idPlayer, u_long idAttacker, char* szFormat, DWORD dwWorldID, const D3DXVECTOR3& vPos, int nLayer) { BEFORESENDDUAL(ar, 34603162, -1, -1 ); ar << idPlayer << idAttacker << dwWorldID << vPos; ar.WriteString(szFormat); ar << nLayer; SEND( ar, addrCoreClient, 1 ); }
void CGuildHouseDBCtrl::SendGuildHouse( DPID dpId ) { if( !GuildHouseMng->IsEmpty() ) { BEFORESENDDUAL( ar, PACKETTYPE_GUILDHOUSE_LOAD, DPID_UNKNOWN, DPID_UNKNOWN ); GuildHouseMng->Serialize( ar ); SEND( ar, CDPTrans::GetInstance(), dpId ); } }
void CGuildHouseDBCtrl::RemoveGuildHouse( DWORD dwGuildId ) { if( GetQueryObject()->Execute( "usp_GuildHouse_Delete '%02d', '%06d'", g_appInfo.dwSys, dwGuildId ) ) GuildHouseMng->RemoveGuildHouse( dwGuildId ); BEFORESENDDUAL( arOut, PACKETTYPE_GUILDHOUSE_REMOVE, DPID_UNKNOWN, DPID_UNKNOWN ); arOut << dwGuildId; SEND( arOut, CDPTrans::GetInstance(), DPID_ALLPLAYERS ); }
void CGuildHouseDBCtrl::RunDefaultPacket( CAr & ar, DPID dpId ) { DWORD dwGuildId; int nPacketType, nIndex; GH_Fntr_Info gfi; ar >> dwGuildId >> nPacketType >> nIndex; gfi.Serialize( ar ); CGuildHouseBase* pGuildHouse = GuildHouseMng->GetGuildHouse( dwGuildId ); if( pGuildHouse ) { BOOL bResult = FALSE; if( ExcuteQuery( dwGuildId, pGuildHouse, nPacketType, gfi, nIndex ) ) bResult = pGuildHouse->OnGuildHousePacket( nPacketType, gfi, nIndex ); if( bResult ) dpId = DPID_ALLPLAYERS; BEFORESENDDUAL( arOut, PACKETTYPE_GUILDHOUSE_PACKET, DPID_UNKNOWN, DPID_UNKNOWN ); arOut << bResult << dwGuildId; arOut << nPacketType << nIndex; gfi.Serialize( arOut ); SEND( arOut, CDPTrans::GetInstance(), dpId ); } }
void CGuildHouseDBCtrl::CreateGuildHouse( CAr & ar, DPID dpId ) { DWORD dwPlayerId, dwGuildId; ar >> dwPlayerId >> dwGuildId; BOOL bResult = FALSE; CQuery* pQuery = GetQueryObject(); BEFORESENDDUAL( arCreate, PACKETTYPE_GUILDHOUSE_BUY, DPID_UNKNOWN, DPID_UNKNOWN ); { arCreate << dwPlayerId << dwGuildId; CGuildHouseBase* pGuildHouse = GuildHouseMng->MakeGuildHouse( dwGuildId, WI_GUILDHOUSE_SMALL ); if( pGuildHouse ) { pGuildHouse->SetUpkeeptime( time_null() + ( UPKEEP_DAY_TIME * 7 ) ); // 기본 유지기간을 제공한다. if( pQuery->Execute( "usp_GuildHouse_Insert '%02d', '%06d', %d, %d", g_appInfo.dwSys, dwGuildId, WI_GUILDHOUSE_SMALL, pGuildHouse->GetUpkeepTime() ) // DB에 추가 성공 && GuildHouseMng->AddGuildHouse( dwGuildId, pGuildHouse ) ) { arCreate << TRUE; dpId = DPID_ALLPLAYERS; // 모든 월드 서버로 전송한다. GH_Fntr_Info gfi( II_GHOU_FUR_NPC_TELEPORTER, TRUE, pGuildHouse->GetTeleporterPos(), 0.0f, ( UPKEEP_DAY_TIME * 7 ) ); if( ExcuteQuery( dwGuildId, pGuildHouse, GUILDHOUSE_PCKTTYPE_LISTUP, gfi, NULL_ID ) ) pGuildHouse->OnGuildHousePacket( GUILDHOUSE_PCKTTYPE_LISTUP, gfi, NULL_ID ); pGuildHouse->SerializeAllInfo( arCreate ); } else { arCreate << FALSE; SAFE_DELETE( pGuildHouse ); } } else arCreate << FALSE; } SEND( arCreate, CDPTrans::GetInstance(), dpId ); }
void CPartyMng::RemoveConnection( CPlayer* pPlayer ) { if( pPlayer->m_uPartyId == 0 ) return; CParty* pParty; CMclAutoLock Lock( m_AddRemoveLock ); pParty = GetParty( pPlayer->m_uPartyId ); if( pParty ) { int i = pParty->FindMember( pPlayer->uKey ); if( i < 0 ) return; pParty->m_aMember[i].m_tTime = CTime::GetCurrentTime(); pParty->m_aMember[i].m_bRemove = TRUE; pParty->m_nReferens++; BEFORESENDDUAL( ar, PACKETTYPE_REMOVEPLAYERPARTY, DPID_UNKNOWN, DPID_UNKNOWN ); ar << pPlayer->m_uPartyId << pPlayer->uKey; SEND( ar, &g_dpCoreSrvr, DPID_ALLPLAYERS ); #if __VER >= 12 // __PARSKILL1001 090917 mirchang - 파스킬 아이템 수정 if( pParty->m_nModeTime[PARTY_PARSKILL_MODE] ) g_dpCoreSrvr.SendSetPartyMode( pParty->m_uPartyId, PARTY_PARSKILL_MODE, FALSE ); #endif // __PARSKILL1001 090917 mirchang - 파스킬 아이템 수정 if( i == 0 ) { bool fRemoveParty = true; for( int j = 1; j < pParty->m_nSizeofMember; j++ ) { if( pParty->m_aMember[j].m_bRemove == FALSE ) { fRemoveParty = false; pParty->SwapPartyMember( 0, j ); break; } } #if __VER >= 12 // __PARSKILL1001 //12차 파스킬 아이템 수정 world,core,neuz for( int k = 0 ; k < MAX_PARTYMODE ; k++ ) { if( pParty->m_nModeTime[k] ) { if( k == PARTY_PARSKILL_MODE) continue; pParty->m_nModeTime[k] = 0; } } #endif //__PARSKILL1001 //12차 파스킬 아이템 수정 world,core,neuz if( fRemoveParty ) { CPlayer* pPlayer; for( j = 0; j < pParty->m_nSizeofMember; j++ ) { pPlayer = g_PlayerMng.GetPlayer( pParty->GetPlayerId( j ) ); if( pPlayer ) pPlayer->m_uPartyId = 0; } DeleteParty( pParty->m_uPartyId ); } } } }