GetActorPos is not working or updating!
#1

Hello.
It seems that you can move actors and their original position does not change or update:



When I try to check for changes in position, nothing happens:
PHP Code:
#define Loop(%0,%1,%2) for(new %0 = %2; %0 < %1; %0++)
new ActorPos[MAX_ACTORS][4];
stock new_CreateActor(skin,Float:x,Float:y,Float:z,Float:a)
{
    new 
aid CreateActor(skin,x,y,z,a);
    
ActorPos[aid][0] = x,ActorPos[aid][1] = y,ActorPos[aid][2] = z,ActorPos[aid][3] = a;
    
SetActorVirtualWorld(aid0);
    
SetActorInvulnerable(aid1);
    return 
aid;
}
stock CheckActorPos()
{
    new 
Float:Pos[3];
    
Loop(i,GetActorPoolSize()+1,0)
    {
        if(
IsValidActor(i))
        {
            if(
GetActorVirtualWorld(i) == 0)
            {
                
GetActorPos(iPos[0], Pos[1], Pos[2]);
                if(
Pos[0] != ActorPos[i][0] || Pos[1] != ActorPos[i][1] || Pos[2] != ActorPos[i][2])
                {
                    
SetActorPos(iActorPos[i][0],ActorPos[i][1],ActorPos[i][2]);
                    
SetActorFacingAngle(iActorPos[i][3]);
                }
            }
        }
    }
    return 
1;

Reply
#2

You shouldn't use != or == operators with floats use >=, <=, <, > for comparisons. Anyways you are not even clear at all about your problem with no explanation of anything of what you are doing.
Reply
#3

Quote:
Originally Posted by Pottus
View Post
You shouldn't use != or == operators with floats use >=, <=, <, > for comparisons. Anyways you are not even clear at all about your problem with no explanation of anything of what you are doing.
I'm trying to say that I have a function that checks if the actor is not in the original position it was created (CheckActorPos ()), and if it is not, I try to put it back. According to my images, I move the actors but their current position is not updated, so for the server it is still in the original position.

And regarding comparison of values in float, I also use another function (GetDistanceBetweenPoints) and even so it seems that the position of the actor does not change:
PHP Code:
forward Float:GetDistanceBetweenPoints(Float:rx1,Float:ry1,Float:rz1,Float:rx2,Float:ry2,Float:rz2);
stock Float:GetDistanceBetweenPoints(Float:rx1,Float:ry1,Float:rz1,Float:rx2,Float:ry2,Float:rz2)
{
    return 
floatadd(floatadd(floatsqroot(floatpower(floatsub(rx1,rx2),2)),floatsqroot(floatpower(floatsub(ry1,ry2),2))),floatsqroot(floatpower(floatsub(rz1,rz2),2)));
}
stock CheckActorPos()
{
    new 
Float:Pos[3];
    
Loop(i,GetActorPoolSize()+1,0)
    {
        if(
IsValidActor(i))
        {
            if(
GetActorVirtualWorld(i) == 0)
            {
                
GetActorPos(iPos[0], Pos[1], Pos[2]);
                new 
Float:dist GetDistanceBetweenPoints(Pos[0], Pos[1], Pos[2],ActorPos[i][0],ActorPos[i][1],ActorPos[i][2]);
                if(
dist 0.0)
                {
                    
SetActorPos(iActorPos[i][0],ActorPos[i][1],ActorPos[i][2]);
                    
SetActorFacingAngle(iActorPos[i][3]);
                }
            }
        }
    }
    return 
1;

Reply
#4

The real bug is that actors aren't properly frozen on clients' screens and therefore they can be pushed away from their original position until they are restreamed or SetActorPos is used.
Reply
#5

The actor positions are synced only from the server to the client. If they are pushed away client-side or fall through the ground or similar it is not synced, therefore the server still holds the original position. This is not a bug as they were never meant to be synced from clients.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)