#define RPC_ApplyAnimation 86 enum AnimsSyncEnum { s_is_anim, s_animlib[50], s_animname[50], Float:s_fDelta, s_loop, s_lockx, s_locky, s_freeze, s_time, s_forcesync }; new AnimsSync[MAX_PLAYERS][AnimsSyncEnum]; forward ApplyAnimationEx(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync); public ApplyAnimationEx(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync) { AnimsSync[playerid][s_is_anim] = true; format(AnimsSync[playerid][s_animlib], 50, "%s", animlib); format(AnimsSync[playerid][s_animname], 50, "%s", animname); AnimsSync[playerid][s_fDelta] = fDelta; AnimsSync[playerid][s_loop] = loop; AnimsSync[playerid][s_lockx] = lockx; AnimsSync[playerid][s_locky] = locky; AnimsSync[playerid][s_freeze] = freeze; AnimsSync[playerid][s_time] = time; AnimsSync[playerid][s_forcesync] = forcesync; //ApplyAnimation(playerid, animlib, "null", fDelta, loop, lockx, locky, freeze, time, forcesync); // Pre-load? ApplyAnimation(playerid, animlib, animname, fDelta, loop, lockx, locky, freeze, time, forcesync); } forward ClearAnimationsEx(playerid, forcesync); public ClearAnimationsEx(playerid, forcesync) { AnimsSync[playerid][s_is_anim] = false; ClearAnimations( playerid, forcesync ); } forward ApplyAnimationSync(playerid, toplayerid); public ApplyAnimationSync(playerid, toplayerid) { if ( AnimsSync[playerid][s_is_anim] && ! IsPlayerInAnyVehicle(playerid) ) { new BitStream:bsAnim = InitBitStream(); WriteToBitStream(bsAnim, BS_SHORT, playerid); WriteToBitStream(bsAnim, BS_CHAR, strlen(AnimsSync[playerid][s_animlib])); // anim lib len WriteToBitStream(bsAnim, BS_STRING, AnimsSync[playerid][s_animlib] ); // anim lib WriteToBitStream(bsAnim, BS_CHAR, strlen( AnimsSync[playerid][s_animname] )); // anim name len WriteToBitStream(bsAnim, BS_STRING, AnimsSync[playerid][s_animname] ); // anim name WriteToBitStream(bsAnim, BS_FLOAT, AnimsSync[playerid][s_fDelta] ); // fDelta WriteToBitStream(bsAnim, BS_BOOL, AnimsSync[playerid][s_loop] ); // loop WriteToBitStream(bsAnim, BS_BOOL, AnimsSync[playerid][s_lockx] ); // lockx WriteToBitStream(bsAnim, BS_BOOL, AnimsSync[playerid][s_locky] ); // locky WriteToBitStream(bsAnim, BS_BOOL, AnimsSync[playerid][s_freeze] ); // freeze WriteToBitStream(bsAnim, BS_UINT, AnimsSync[playerid][s_time] ); // time //WriteToBitStream(bsAnim, BS_CHAR, AnimsSync[playerid][s_forcesync] ); // forcesync // doesn't exists SendRPC(toplayerid, RPC_ApplyAnimation, bsAnim); // Pre-load? SendRPC(toplayerid, RPC_ApplyAnimation, bsAnim); } } // Sync public OnPlayerStreamIn(playerid, forplayerid) { ApplyAnimationSync( playerid, forplayerid ); ApplyAnimationSync( forplayerid, playerid ); return 1; }
It's only RC, it will most likely be fixed when more features are added for actors. There are many actor controls that are not added yet but do exist in GTA, I bet some will be added soon.
|
This problem exists for NPCs too though, and they've been in SA-MP for years.
|
public OnPlayerStreamIn(playerid)
{
SendCommand("/kcnrnpcanimation");
return 1;
}
public OnNPCSpawn()
{
SendCommand("/kcnrnpcanimation");
return 1;
}
![]() The 0.3.7 RC is a testing version for an update to SA-MP's 0.3 branch. The official release will come once the testing phase is complete. Updates: SA-MP 0.3.7 RC6-2 Optional server update - Fixes the DestroyActor() function. - Adds OnActorStreamIn/OnActorStreamOut. |