bool PUdpHeldItemAimedAction::DoAction() { u16 maxBroadcastDistance = 0; // parameter. PClient* nClient = mDecodeData->mClient; //PChar* tChar = nClient->GetChar(); // PCharCoordinates& nCharCoords = nClient->GetChar()->Coords; PMessage* tmpMsg; // IF APU SPELL //10: 03:be:00:1f:[02:00]:25:1a:[68:11:96:43]:[78:de:12:00:] = ???? //tmpMsg = MsgBuilder->BuildHeldItemUse3Msg( nClient, 0x1168, 0x4369, 0xde78, 0x0012 ); // unknwon use, unknown data (spells duration/delays ?) //nClient->SendUDPMessage(tmpMsg); //tmpMsg = MsgBuilder->BuildHeldItemUse2Msg( nClient->GetLocalID(), mTargetRawItemID ); // start spell invocation //ClientManager->UDPBroadcast( tmpMsg, nClient, maxBroadcastDistance ); // END IF APU SPELL tmpMsg = MsgBuilder->BuildHeldItemUseMsg( nClient->GetLocalID(), mWeaponId, mTargetRawItemID, mAiming, mTargetedHeight, 0 ); // 'score' is not broadcasted, but set to 0 ClientManager->UDPBroadcast( tmpMsg, nClient, maxBroadcastDistance, true ); // IF APU SPELL // After spell invocation delay // 03:8b:00:1f:[02:00]:2c:01:?[ae:bf]?:?[f5:45]?:[00:20:01:00]:[0e]: tmpMsg = MsgBuilder->BuildHeldItemUse4Msg( nClient->GetLocalID(), mTargetRawItemID, 0xaebf, 0x45f5, mTargetedHeight ); ClientManager->UDPBroadcast( tmpMsg, nClient, maxBroadcastDistance ); // END IF APUI SPELL //if ( gDevDebug ) Console->Print( "%s Handled item action toward target %d (0x%08x) weaponId=%d aiming=%d 'height'=%d 'score'=%d", Console->ColorText( CYAN, BLACK, "[DEBUG]" ), mTargetRawItemID, mTargetRawItemID, mWeaponId, mAiming, mTargetedHeight, mScore ); //mDecodeData->mMessage->Dump(); mDecodeData->mState = DECODE_ACTION_DONE | DECODE_FINISHED; return true; }
bool PUdpSync2::DoAction() { if (( mDecodeData->mState & DECODE_ACTION_READY ) && ( mDecodeData->mClientState->UDP.mState == PGameState::UDP::GUS_SYNC2 ) ) { PClient* nClient = mDecodeData->mClient; // Baseline message chunking & sending PMessage* BaselineMsg = MsgBuilder->BuildBaselineMsg( nClient ); nClient->FragmentAndSendUDPMessage( BaselineMsg, 0x19 ); // Sending "CharInfo3/Zoning2Msg" message // Removed because same as Zoning2Msg PMessage* Zoning2Msg = MsgBuilder->BuildZoning2Msg( nClient, mClientTime ); nClient->SendUDPMessage( Zoning2Msg ); mDecodeData->mClientState->UDP.mState = PGameState::UDP::GUS_SYNC3; nClient->SetZoning( false ); // If char is sitting (vhz zoning), send it now to client u32 nSeatableObjectId; u8 nSeatId; if( nClient->GetChar()->GetSeatInUse(&nSeatableObjectId, &nSeatId) ) { if( gDevDebug ) Console->Print( YELLOW, BLACK, "[DEBUG] PUdpSync2::DoAction : Char %d sitting on vhc id %d, seat %d", nClient->GetLocalID(), nSeatableObjectId, nSeatId ); PMessage* SittingMsg = MsgBuilder->BuildCharUseSeatMsg( nClient, nSeatableObjectId, nSeatId ); nClient->FillInUDP_ID(SittingMsg); nClient->SendUDPMessage( SittingMsg ); } //Temp: send Subway to client if in subway if ( nClient->GetChar()->GetLocation() == PWorlds::mNcSubwayWorldId ) { PMessage* SubwayMsg = MsgBuilder->BuildSubwaySpawnMsg( nClient, false ); nClient->SendUDPMessage( SubwayMsg ); SubwayMsg = MsgBuilder->BuildSubwaySpawnMsg( nClient, true ); nClient->SendUDPMessage( SubwayMsg ); } // Send spawned vehicles PWorld* CurrentWorld = Worlds->GetWorld( nClient->GetChar()->GetLocation() ); if ( CurrentWorld ) { PSpawnedVhcList* VhcList = CurrentWorld->GetSpawnedVehicules()->GetSpawnedVehicles(); PSpawnedVehicle* VhcEntry; PMessage* VhcMsg; while ( ! VhcList->empty() ) { VhcEntry = VhcList->front(); VhcList->pop(); if( gDevDebug ) Console->Print( YELLOW, BLACK, "[DEBUG] PUdpSync2::DoAction : Send info for vhc id %d", VhcEntry->GetLocalId() ); VhcMsg = MsgBuilder->BuildVhcPosUpdateMsg( VhcEntry ); nClient->FillInUDP_ID( VhcMsg ); nClient->SendUDPMessage( VhcMsg ); VhcMsg = MsgBuilder->BuildVhcInfoMsg( nClient, VhcEntry ); nClient->SendUDPMessage( VhcMsg ); } } // Dispatching info to & from other chars in zone int nbSent; nbSent = ClientManager->SendUDPZoneWelcomeToClient( nClient ); //Console->Print(GREEN, BLACK, " %d Welcome message were sent to client %d", nbSent, Client->GetIndex()); PMessage* HelloMsg = MsgBuilder->BuildCharHelloMsg( nClient ); nbSent = ClientManager->UDPBroadcast( HelloMsg, nClient ); //Console->Print(GREEN, BLACK, "Client %d: Hello message sent to %d chars", Client->GetIndex(), nbSent); // Send worldactors to client WorldActors->InitWorld( nClient ); // Send NPC information to client NPCManager->InitPlayer( nClient ); //Console->Print("OP Data inc"); Outposts->SendOPAreaData( nClient ); mDecodeData->mState = DECODE_ACTION_DONE | DECODE_FINISHED; return true; } else return false; }