struct ApplyPlayerAnimationData { UINT16 wPlayerID ; UINT8 AnimLibLength ; std :: string AnimLib ; UINT8 AnimNameLength ; std :: string AnimName ; float fDelta ; bool loop ; bool lockx ; bool locky ; bool freeze ; UINT32 dTime ; } ; bool CALLBACK incomingRPC ( stRakNetHookParams * data ) { switch ( data -> packetId ) { case ScriptRPCEnumeration :: RPC_ScrApplyAnimation : { ApplyPlayerAnimationData applyPlayerAnimationData ; data -> bitStream -> Read ( applyPlayerAnimationData . wPlayerID ) ; data -> bitStream -> Read ( applyPlayerAnimationData . AnimLibLength ) ; applyPlayerAnimationData . AnimLib . resize ( ( size_t ) applyPlayerAnimationData . AnimLibLength , '\0' ) ; data -> bitStream -> Read ( ( PCHAR ) applyPlayerAnimationData . AnimLib . data ( ) , ( size_t ) applyPlayerAnimationData . AnimLibLength ) ; data -> bitStream -> Read ( applyPlayerAnimationData . AnimNameLength ) ; applyPlayerAnimationData . AnimName . resize ( ( size_t ) applyPlayerAnimationData . AnimNameLength , '\0' ) ; data -> bitStream -> Read ( ( PCHAR ) applyPlayerAnimationData . AnimName . data ( ) , ( size_t ) applyPlayerAnimationData . AnimNameLength ) ; data -> bitStream -> Read ( applyPlayerAnimationData . fDelta ) ; data -> bitStream -> Read ( applyPlayerAnimationData . loop ) ; data -> bitStream -> Read ( applyPlayerAnimationData . lockx ) ; data -> bitStream -> Read ( applyPlayerAnimationData . locky ) ; data -> bitStream -> Read ( applyPlayerAnimationData . freeze ) ; data -> bitStream -> Read ( applyPlayerAnimationData . dTime ) ; data -> bitStream -> ResetReadPointer ( ) ; SF -> getSAMP ( ) -> getChat ( ) -> AddChatMessage ( - 1 , "PlayerId: %d; AnimLib: %s; AnimName: %s; fDelta: %f; loop: %d; lockx: %d; locky: %d; freeze: %d; dTime: %d;" , applyPlayerAnimationData . wPlayerID , applyPlayerAnimationData . AnimLib . c_str ( ) , applyPlayerAnimationData . AnimName . c_str ( ) , applyPlayerAnimationData . fDelta , applyPlayerAnimationData . loop , applyPlayerAnimationData . lockx , applyPlayerAnimationData . locky , applyPlayerAnimationData . freeze , applyPlayerAnimationData . dTime ) ; SF -> getSAMP ( ) -> getChat ( ) -> AddChatMessage ( - 1 , "AnimLibLength: %d; AnimNameLength: %d;" , applyPlayerAnimationData . AnimLibLength , applyPlayerAnimationData . AnimNameLength ) ; break ; } } return true ; }
UINT16 wPlayerID = SF -> getSAMP ( ) -> getPlayers ( ) -> sLocalPlayerID ; INT8 AnimLibLength = 3 ; char AnimLib [ 4 ] = "PED" ; INT8 AnimNameLength = 10 ; char AnimName [ 11 ] = "WALK_DRUNK" ; float fDelta = 4.100000 ; bool loop = true ; bool lockx = true ; bool locky = true ; bool freeze = true ; INT32 dTime = 1 ; BitStream bs ; bs . Write ( wPlayerID ) ; bs . Write ( AnimLibLength ) ; bs . Write ( AnimLib , AnimLibLength ) ; bs . Write ( AnimNameLength ) ; bs . Write ( AnimName , AnimNameLength ) ; bs . Write ( fDelta ) ; bs . Write ( loop ) ; bs . Write ( lockx ) ; bs . Write ( locky ) ; bs . Write ( freeze ) ; bs . Write ( dTime ) ; SF -> getRakNet ( ) -> emulateRecvRPC ( ScriptRPCEnumeration :: RPC_ScrApplyAnimation , & bs ) ;