Speed up the update time for dynamic objects?
#1

As the title sais. How do I do that?
Reply
#2

Do you mean draw distance?.

Then you can try to increase it.
Reply
#3

If you're using a streamer, and your objects are floors, change them to CreateObject so you don't fall through them. Your topic is pretty vague, though. I suggest telling us the specific issue you're having.
Reply
#4

Quote:
Originally Posted by Aerotactics
View Post
If you're using a streamer, and your objects are floors, change them to CreateObject so you don't fall through them. Your topic is pretty vague, though. I suggest telling us the specific issue you're having.
Ok basically OnPlayerEditDynamicObject does not update the object position quick enough. I tried upping the speed the object moves to a really high value. This did not solve my issue. I need it to get the correct updated position of the object as quick as I'm moving it so that I can detect if a player is surfing the object or not. Here's my code.

pawn Code:
new SurfObject[MAX_PLAYERS];
new Float:FirstPosX[MAX_PLAYERS],Float:FirstPosY[MAX_PLAYERS],Float:FirstPosZ[MAX_PLAYERS];
new Float:FirstOPosX[MAX_PLAYERS],Float:FirstOPosY[MAX_PLAYERS],Float:FirstOPosZ[MAX_PLAYERS];
new Float:FirstDistance[MAX_PLAYERS];
new Float:SecondPosX[MAX_PLAYERS],Float:SecondPosY[MAX_PLAYERS],Float:SecondPosZ[MAX_PLAYERS];
new Float:SecondOPosX[MAX_PLAYERS],Float:SecondOPosY[MAX_PLAYERS],Float:SecondOPosZ[MAX_PLAYERS];
new Float:SecondDistance[MAX_PLAYERS];
new SurfDetect[MAX_PLAYERS];
new SurfDetect2[MAX_PLAYERS];
new SurfDetectActive[MAX_PLAYERS];
pawn Code:
public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
    if(!IsValidDynamicObject(objectid)) return 0;
    MoveDynamicObject(objectid, x, y, z, 10000000, rx, ry, rz);
    if(SurfDetectActive[playerid] == 0)
    {
        SurfObject[playerid] = objectid;
        SurfDetect[playerid] = SetTimerEx("FirstSurfCheck", 1000, false, "i", playerid);
        SurfDetectActive[playerid] = 1;
        SendClientMessage(playerid, COLOR_YELLOW, "Edit has activated timer 1");
    }
    if(response == EDIT_RESPONSE_FINAL)
    {
        for(new i; i < sizeof(ObjectInfo); i++)
        {
            if(ObjectInfo[i][oCreated] == 0 && EditingObject[playerid] == -1)
            {
                new string[128];
                ObjectInfo[i][oVW] = GetPlayerVirtualWorld(playerid);
                ObjectInfo[i][oINT] = GetPlayerInterior(playerid);
                ObjectInfo[i][oX] = x;
                ObjectInfo[i][oY] = y;
                ObjectInfo[i][oZ] = z;
                ObjectInfo[i][oRX] = rx;
                ObjectInfo[i][oRY] = ry;
                ObjectInfo[i][oRZ] = rz;
                ObjectInfo[i][oCreated] = 1;
                SaveObjects();
                format(string, sizeof(string), "[OBJECT CREATE] ID %d | Name %s | SAVED", i, ObjectInfo[i][oName]);
                SendClientMessage(playerid, COLOR_ORANGE, string);
                DestroyDynamicObject(ObjectInfo[i][oObject]);
                ObjectInfo[i][oObject] = AddDynamicObject(ObjectInfo[i][oModel],ObjectInfo[i][oX],ObjectInfo[i][oY],ObjectInfo[i][oZ],ObjectInfo[i][oRX],ObjectInfo[i][oRY],ObjectInfo[i][oRZ],ObjectInfo[i][oVW],ObjectInfo[i][oINT], -1, 200.0);
                if(ObjectInfo[i][oChair] == 1)
                {
                    SendClientMessage(playerid, COLOR_GREY, "You were charged $400 for the chair");
                    GivePlayerCash(playerid, -400);
                }
                if(ObjectInfo[i][oBed] == 1)
                {
                    SendClientMessage(playerid, COLOR_GREY, "You were charged $450 for the bed");
                    GivePlayerCash(playerid, -450);
                }
                if(ObjectInfo[i][oTable] == 1)
                {
                    SendClientMessage(playerid, COLOR_GREY, "You were charged $150 for the table");
                    GivePlayerCash(playerid, -150);
                }
                if(ObjectInfo[i][oElectronic] == 1)
                {
                    SendClientMessage(playerid, COLOR_GREY, "You were charged $500 for the electronics");
                    GivePlayerCash(playerid, -500);
                }
                if(ObjectInfo[i][oCabinet] == 1)
                {
                    SendClientMessage(playerid, COLOR_GREY, "You were charged $250 for the cabinet");
                    GivePlayerCash(playerid, -250);
                }
                if(ObjectInfo[i][oKitchen] == 1)
                {
                    SendClientMessage(playerid, COLOR_GREY, "You were charged $300 for the kitchen furniture");
                    GivePlayerCash(playerid, -300);
                }
                if(ObjectInfo[i][oPicture] == 1)
                {
                    SendClientMessage(playerid, COLOR_GREY, "You were charged $80 for the picture");
                    GivePlayerCash(playerid, -80);
                }
                if(ObjectInfo[i][oDoor] == 1)
                {
                    SendClientMessage(playerid, COLOR_GREY, "You were charged $200 for the door");
                    GivePlayerCash(playerid, -200);
                }
                if(ObjectInfo[i][oSafe] == 1)
                {
                    SendClientMessage(playerid, COLOR_GREY, "You were charged $2000 for the safe");
                    GivePlayerCash(playerid, -2000);
                }
                if(ObjectInfo[i][oBath] == 1)
                {
                    SendClientMessage(playerid, COLOR_GREY, "You were charged $250 for the bathroom furniture");
                    GivePlayerCash(playerid, -250);
                }
                EditMode[playerid] = 0;
                SurfObject[playerid] = 0;
                SurfDetectActive[playerid] = 0;
                KillTimer(SurfDetect[playerid]);
                KillTimer(SurfDetect2[playerid]);
                FirstPosX[playerid] = 0; SecondPosX[playerid] = 0;
                FirstPosY[playerid] = 0; SecondPosY[playerid] = 0;
                FirstPosZ[playerid] = 0; SecondPosZ[playerid] = 0;
                FirstOPosX[playerid] = 0; SecondOPosX[playerid] = 0;
                FirstOPosY[playerid] = 0; SecondOPosY[playerid] = 0;
                FirstOPosZ[playerid] = 0; SecondOPosZ[playerid] = 0;
                FirstDistance[playerid] = 0; SecondDistance[playerid] = 0;
                return 1;
            }
            if(ObjectInfo[i][oCreated] == 1 && EditingObject[playerid] == i)
            {
                new string[128];
                ObjectInfo[i][oVW] = GetPlayerVirtualWorld(playerid);
                ObjectInfo[i][oINT] = GetPlayerInterior(playerid);
                ObjectInfo[i][oX] = x;
                ObjectInfo[i][oY] = y;
                ObjectInfo[i][oZ] = z;
                ObjectInfo[i][oRX] = rx;
                ObjectInfo[i][oRY] = ry;
                ObjectInfo[i][oRZ] = rz;
                ObjectInfo[i][oCreated] = 1;
                SaveObjects();
                format(string, sizeof(string), "[OBJECT EDIT] ID %d | Name %s | SAVED", i, ObjectInfo[i][oName]);
                SendClientMessage(playerid, COLOR_ORANGE, string);
                DestroyDynamicObject(ObjectInfo[i][oObject]);
                ObjectInfo[i][oObject] = AddDynamicObject(ObjectInfo[i][oModel],ObjectInfo[i][oX],ObjectInfo[i][oY],ObjectInfo[i][oZ],ObjectInfo[i][oRX],ObjectInfo[i][oRY],ObjectInfo[i][oRZ],ObjectInfo[i][oVW],ObjectInfo[i][oINT], -1, 200.0);
                EditingObject[playerid] = -1;
                EditMode[playerid] = 0;
                SurfObject[playerid] = 0;
                SurfDetectActive[playerid] = 0;
                KillTimer(SurfDetect[playerid]);
                KillTimer(SurfDetect2[playerid]);
                FirstPosX[playerid] = 0; SecondPosX[playerid] = 0;
                FirstPosY[playerid] = 0; SecondPosY[playerid] = 0;
                FirstPosZ[playerid] = 0; SecondPosZ[playerid] = 0;
                FirstOPosX[playerid] = 0; SecondOPosX[playerid] = 0;
                FirstOPosY[playerid] = 0; SecondOPosY[playerid] = 0;
                FirstOPosZ[playerid] = 0; SecondOPosZ[playerid] = 0;
                FirstDistance[playerid] = 0; SecondDistance[playerid] = 0;
                return 1;
            }
        }
    }
    if(response == EDIT_RESPONSE_CANCEL)
    {
        for(new i; i < sizeof(ObjectInfo); i++)
        {
            if(ObjectInfo[i][oCreated] == 0 && EditingObject[playerid] == -1)
            {
                DestroyDynamicObject(ObjectInfo[i][oObject]);
                SendClientMessage(playerid, COLOR_ORANGE, "[OBJECT CREATE] - Cancelled");
                ObjectInfo[i][oModel] = 0;
                ObjectInfo[i][oObject] = 0;
                ObjectInfo[i][oChair] = 0;
                ObjectInfo[i][oBed] = 0;
                ObjectInfo[i][oTable] = 0;
                ObjectInfo[i][oElectronic] = 0;
                ObjectInfo[i][oCabinet] = 0;
                ObjectInfo[i][oKitchen] = 0;
                ObjectInfo[i][oPicture] = 0;
                ObjectInfo[i][oDoor] = 0;
                ObjectInfo[i][oSafe] = 0;
                strdel(ObjectInfo[i][oName], 0, 20);
                EditMode[playerid] = 0;
                SurfObject[playerid] = 0;
                SurfDetectActive[playerid] = 0;
                KillTimer(SurfDetect[playerid]);
                KillTimer(SurfDetect2[playerid]);
                FirstPosX[playerid] = 0; SecondPosX[playerid] = 0;
                FirstPosY[playerid] = 0; SecondPosY[playerid] = 0;
                FirstPosZ[playerid] = 0; SecondPosZ[playerid] = 0;
                FirstOPosX[playerid] = 0; SecondOPosX[playerid] = 0;
                FirstOPosY[playerid] = 0; SecondOPosY[playerid] = 0;
                FirstOPosZ[playerid] = 0; SecondOPosZ[playerid] = 0;
                FirstDistance[playerid] = 0; SecondDistance[playerid] = 0;
                return 1;
            }
            if(ObjectInfo[i][oCreated] == 1 && EditingObject[playerid] == i)
            {
                DestroyDynamicObject(ObjectInfo[i][oObject]);
                ObjectInfo[i][oObject] = AddDynamicObject(ObjectInfo[i][oModel],ObjectInfo[i][oX],ObjectInfo[i][oY],ObjectInfo[i][oZ],ObjectInfo[i][oRX],ObjectInfo[i][oRY],ObjectInfo[i][oRZ],ObjectInfo[i][oVW],ObjectInfo[i][oINT], -1, 200.0);
                SendClientMessage(playerid, COLOR_ORANGE, "[OBJECT EDIT] - Cancelled");
                EditingObject[playerid] = -1;
                EditMode[playerid] = 0;
                SurfObject[playerid] = 0;
                SurfDetectActive[playerid] = 0;
                KillTimer(SurfDetect[playerid]);
                KillTimer(SurfDetect2[playerid]);
                FirstPosX[playerid] = 0; SecondPosX[playerid] = 0;
                FirstPosY[playerid] = 0; SecondPosY[playerid] = 0;
                FirstPosZ[playerid] = 0; SecondPosZ[playerid] = 0;
                FirstOPosX[playerid] = 0; SecondOPosX[playerid] = 0;
                FirstOPosY[playerid] = 0; SecondOPosY[playerid] = 0;
                FirstOPosZ[playerid] = 0; SecondOPosZ[playerid] = 0;
                FirstDistance[playerid] = 0; SecondDistance[playerid] = 0;
                return 1;
            }
        }
    }
    return true;
}
pawn Code:
forward FirstSurfCheck(playerid);
public FirstSurfCheck(playerid)
{
    new string[128];
    GetPlayerPos(playerid, FirstPosX[playerid], FirstPosY[playerid], FirstPosZ[playerid]);
    GetDynamicObjectPos(SurfObject[playerid], FirstOPosX[playerid], FirstOPosY[playerid], FirstOPosZ[playerid]);
    FirstDistance[playerid] = GetPlayerDistanceFromPoint(playerid, FirstOPosX[playerid], FirstOPosY[playerid], FirstOPosZ[playerid]);
    SurfDetect2[playerid] = SetTimerEx("SecondSurfCheck", 1000, false, "i", playerid);
    SendClientMessage(playerid, COLOR_YELLOW, "Timer 1 is active");
    format(string, sizeof(string), "Distance 1 = %f", FirstDistance[playerid]);
    SendClientMessage(playerid, COLOR_ORANGE, string);
}

forward SecondSurfCheck(playerid);
public SecondSurfCheck(playerid)
{
    new string[128];
    GetPlayerPos(playerid, SecondPosX[playerid], SecondPosY[playerid], SecondPosZ[playerid]);
    GetDynamicObjectPos(SurfObject[playerid], SecondOPosX[playerid], SecondOPosY[playerid], SecondOPosZ[playerid]);
    SecondDistance[playerid] = GetPlayerDistanceFromPoint(playerid, SecondOPosX[playerid], SecondOPosY[playerid], SecondOPosZ[playerid]);
    SendClientMessage(playerid, COLOR_YELLOW, "Timer 2 is active");
    format(string, sizeof(string), "Distance 2 = %f", SecondDistance[playerid]);
    SendClientMessage(playerid, COLOR_ORANGE, string);
    if(SecondDistance[playerid] == FirstDistance[playerid])
    {
        SendClientMessage(playerid, COLOR_YELLOW, "Distances matched");
        if(SecondPosX[playerid] != FirstPosX[playerid] || SecondPosY[playerid] != FirstPosY[playerid] || SecondPosZ[playerid] != FirstPosZ[playerid])
        {
            SendClientMessage(playerid, COLOR_YELLOW, "Player moved aswell");
            if(SecondOPosX[playerid] != FirstOPosX[playerid] || SecondOPosY[playerid] != FirstOPosY[playerid] || SecondOPosZ[playerid] != FirstOPosZ[playerid])
            {
                GameTextForPlayer(playerid, "~r~OBJECT SURFING DETECTED", 3000, 5);
                for(new i = 0; i < sizeof(HouseInfo); i++)
                {
                    if(GetPlayerVirtualWorld(playerid) == HouseInfo[i][EnterWorld] && GetPlayerInterior(playerid) == HouseInfo[i][EnterInterior])
                    {
                        SendClientMessage(playerid, COLOR_YELLOW, "Timer 2 has detected surfing");
                        SetPlayerPos(playerid, HouseInfo[i][hExitX], HouseInfo[i][hExitY], HouseInfo[i][hExitZ]);
                        SetTimerEx("CancelEditForPlayer", 1000, false, "i", playerid);
                        KillTimer(SurfDetect[playerid]);
                        KillTimer(SurfDetect2[playerid]);
                    }
                }
            }
            else
            {
                SendClientMessage(playerid, COLOR_YELLOW, "Timer 2 did not detect surfing");
                FirstPosX[playerid] = 0; SecondPosX[playerid] = 0;
                FirstPosY[playerid] = 0; SecondPosY[playerid] = 0;
                FirstPosZ[playerid] = 0; SecondPosZ[playerid] = 0;
                FirstOPosX[playerid] = 0; SecondOPosX[playerid] = 0;
                FirstOPosY[playerid] = 0; SecondOPosY[playerid] = 0;
                FirstOPosZ[playerid] = 0; SecondOPosZ[playerid] = 0;
                FirstDistance[playerid] = 0; SecondDistance[playerid] = 0;
                SurfDetect[playerid] = SetTimerEx("FirstSurfCheck", 1000, false, "i", playerid);
            }
        }
        else
        {
            SendClientMessage(playerid, COLOR_YELLOW, "Timer 2 did not detect surfing");
            FirstPosX[playerid] = 0; SecondPosX[playerid] = 0;
            FirstPosY[playerid] = 0; SecondPosY[playerid] = 0;
            FirstPosZ[playerid] = 0; SecondPosZ[playerid] = 0;
            FirstOPosX[playerid] = 0; SecondOPosX[playerid] = 0;
            FirstOPosY[playerid] = 0; SecondOPosY[playerid] = 0;
            FirstOPosZ[playerid] = 0; SecondOPosZ[playerid] = 0;
            FirstDistance[playerid] = 0; SecondDistance[playerid] = 0;
            SurfDetect[playerid] = SetTimerEx("FirstSurfCheck", 1000, false, "i", playerid);
        }
    }
    else
    {
        SendClientMessage(playerid, COLOR_YELLOW, "Timer 2 did not detect surfing");
        FirstPosX[playerid] = 0; SecondPosX[playerid] = 0;
        FirstPosY[playerid] = 0; SecondPosY[playerid] = 0;
        FirstPosZ[playerid] = 0; SecondPosZ[playerid] = 0;
        FirstOPosX[playerid] = 0; SecondOPosX[playerid] = 0;
        FirstOPosY[playerid] = 0; SecondOPosY[playerid] = 0;
        FirstOPosZ[playerid] = 0; SecondOPosZ[playerid] = 0;
        FirstDistance[playerid] = 0; SecondDistance[playerid] = 0;
        SurfDetect[playerid] = SetTimerEx("FirstSurfCheck", 1000, false, "i", playerid);
    }
}

forward CancelEditForPlayer(playerid);
public CancelEditForPlayer(playerid)
{
    SendClientMessage(playerid, COLOR_YELLOW, "Timer 2 has cancelled editing for player");
    CancelEdit(playerid);
}
It also gets stuck aswell if I move the object too fast it doesn't update the position. Really annoying. I'm sure this must be the update speed? Or the tickrate or something? I just don't know how to change it.
Reply
#5

Quote:
Originally Posted by Phil_Cutcliffe
View Post
Ok basically OnPlayerEditDynamicObject does not update the object position quick enough. I tried upping the speed the object moves to a really high value. This did not solve my issue. I need it to get the correct updated position of the object as quick as I'm moving it so that I can detect if a player is surfing the object or not. Here's my code.

(removed code to save space)

It also gets stuck aswell if I move the object too fast it doesn't update the position. Really annoying. I'm sure this must be the update speed? Or the tickrate or something? I just don't know how to change it.
THATS what your topic should have been. Don't be so vague when posting an issue here haha. Replace the thread topic with THAT post, and someone should be able to answer your issue with better results. Or just create a new thread.
Reply
#6

Quote:
Originally Posted by Aerotactics
View Post
THATS what your topic should have been. Don't be so vague when posting an issue here haha. Replace the thread topic with THAT post, and someone should be able to answer your issue with better results. Or just create a new thread.
So you have no idea? x(

Man this is so frustrating haha!
Reply
#7

Quote:
Originally Posted by Phil_Cutcliffe
View Post
So you have no idea? x(

Man this is so frustrating haha!
Nope, I don't use in-game object editors lol
Reply
#8

Quote:
Originally Posted by Aerotactics
View Post
Nope, I don't use in-game object editors lol
Well that sucks haha! (The fact you can't help me) I really need to fix this it's holding me back majorly. This damn furniture system is proving to be a real pain in the ass! xD

EDIT: Is there a way to put an object in a "no clip" state?
Reply
#9

Please refer to my comment on your other topic for the same issue (Dont double post please.)

https://sampforum.blast.hk/showthread.php?tid=497451
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)