Unsyncing / Disappearing [+Rep]
#1

For some reason the players / vehicles desync then reappear after a few seconds. - Any help? Also let me know what you need me to show!
Reply
#2

OnPlayerUpdate probably
Reply
#3

See anything wrong in it :/?

Код:
public OnPlayerUpdate(playerid)
{
	static str[64], id = -1, keys[3], vehicleid;

	if (PlayerData[playerid][pKicked])
		return 0;

	if (GetPlayerWeapon(playerid) > 1 && (PlayerData[playerid][pHoldWeapon] > 0 || PlayerData[playerid][pMining] > 0))
	    SetPlayerArmedWeapon(playerid, 0);

	if (IsPlayerInAnyVehicle(playerid))
		vehicleid = GetPlayerVehicleID(playerid);
	else
	    vehicleid = INVALID_VEHICLE_ID;

	GetPlayerKeys(playerid, keys[0], keys[1], keys[2]);

	if (GetPlayerWeapon(playerid) != PlayerData[playerid][pWeapon])
	{
	    PlayerData[playerid][pWeapon] = GetPlayerWeapon(playerid);

		if (PlayerData[playerid][pWeapon] >= 1 && PlayerData[playerid][pWeapon] <= 45 && PlayerData[playerid][pWeapon] != 40 && PlayerData[playerid][pWeapon] != 2 && PlayerData[playerid][pGuns][g_aWeaponSlots[PlayerData[playerid][pWeapon]]] != GetPlayerWeapon(playerid) && !PlayerHasTazer(playerid) && !PlayerHasBeanBag(playerid) && PlayerData[playerid][pRangeBooth] == -1 && PlayerData[playerid][pCharacter] > 0)
		{
		    SendAdminAlert(COLOR_LIGHTRED, "[ADMIN]: %s has been banned for weapon hacks (%s).", ReturnName(playerid, 0), ReturnWeaponName(PlayerData[playerid][pWeapon]));
			Log_Write("logs/cheat_log.txt", "[%s] %s was banned for weapon hacks (%s).", ReturnDate(), ReturnName(playerid), ReturnWeaponName(PlayerData[playerid][pWeapon]));

			Blacklist_Add(PlayerData[playerid][pIP], PlayerData[playerid][pUsername], "Anticheat", "Weapon Hacks");
			Kick(playerid);

			return 0;
		}
	}
	if (GetPlayerMoney(playerid) != PlayerData[playerid][pMoney])
	{
	    ResetPlayerMoney(playerid);
	    GivePlayerMoney(playerid, PlayerData[playerid][pMoney]);
	}
	if (GetPlayerScore(playerid) != PlayerData[playerid][pPlayingHours])
	{
		SetPlayerScore(playerid, PlayerData[playerid][pPlayingHours]);
	}
	if (PlayerData[playerid][pWaypoint])
	{
	    format(str, sizeof(str), "~b~Waypoint:~w~ %s (%.2f meters)", PlayerData[playerid][pLocation], GetPlayerDistanceFromPoint(playerid, PlayerData[playerid][pWaypointPos][0], PlayerData[playerid][pWaypointPos][1], PlayerData[playerid][pWaypointPos][2]));
		PlayerTextDrawSetString(playerid, PlayerData[playerid][pTextdraws][69], str);
	}
	if (PlayerData[playerid][pMaskOn])
	{
		if (!PlayerData[playerid][pHideTags])
	    {
            foreach (new i : Player) {
				ShowPlayerNameTagForPlayer(i, playerid, 0);
			}
		    format(str, sizeof(str), "Mask_#%d", PlayerData[playerid][pMaskID]);
	        
	        PlayerData[playerid][pHideTags] = 1;
	        PlayerData[playerid][pNameTag] = CreateDynamic3DTextLabel(str, COLOR_WHITE, 0.0, 0.0, 0.2, 8.0, playerid, INVALID_VEHICLE_ID, 0, -1, -1);
	    }
	}
	if (!PlayerData[playerid][pMaskOn] && PlayerData[playerid][pHideTags])
	{
	    foreach (new i : Player) {
			ShowPlayerNameTagForPlayer(i, playerid, 1);
		}
		ResetNameTag(playerid);
	}
	if (IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
	{
	    if (IsSpeedoVehicle(vehicleid) && !PlayerData[playerid][pDisableSpeedo])
	    {
		    static
		        Float:fDamage,
		        Float:fSpeed,
		        Float:fVelocity[3];

	  		GetVehicleHealth(vehicleid, fDamage);
	  		GetVehicleVelocity(vehicleid, fVelocity[0], fVelocity[1], fVelocity[2]);

	  		fDamage = floatdiv(1000 - fDamage, 10) * 1.42999; // 1.33334;
 	  		fSpeed = floatmul(floatsqroot((fVelocity[0] * fVelocity[0]) + (fVelocity[1] * fVelocity[1]) + (fVelocity[2] * fVelocity[2])), 100.0);

			if (fDamage < 0.0) fDamage = 0.0;
			else if (fDamage > 100.0) fDamage = 100.0;

	        format(str, sizeof(str), "~r~Fuel:~w~ %d%c", CoreVehicles[vehicleid][vehFuel], '%');
			PlayerTextDrawSetString(playerid, PlayerData[playerid][pTextdraws][35], str);

			format(str, sizeof(str), "~r~Speed:~w~ %.0f mph", fSpeed);
			PlayerTextDrawSetString(playerid, PlayerData[playerid][pTextdraws][36], str);

			format(str, sizeof(str), "~r~Damage:~w~ %.0f/100%%", (fDamage > 100.0) ? (100.0) : (fDamage));
			PlayerTextDrawSetString(playerid, PlayerData[playerid][pTextdraws][37], str);

	        format(str, sizeof(str), "~r~Windows:~w~ %s", (CoreVehicles[vehicleid][vehWindowsDown]) ? ("Down") : ("Up"));
			PlayerTextDrawSetString(playerid, PlayerData[playerid][pTextdraws][38], str);
		}
		for (new i = 0; i != MAX_BARRICADES; i ++) if (BarricadeData[i][cadeExists] && BarricadeData[i][cadeType] == 1 && IsPlayerInRangeOfPoint(playerid, 3.0, BarricadeData[i][cadePos][0], BarricadeData[i][cadePos][1], BarricadeData[i][cadePos][2]))
		{
			static
			    tires[4];

			GetVehicleDamageStatus(vehicleid, tires[0], tires[1], tires[2], tires[3]);

			if (tires[3] != 1111) {
			    UpdateVehicleDamageStatus(vehicleid, tires[0], tires[1], tires[2], 1111);
			}
			break;
		}
	}
	switch (PlayerData[playerid][pHouseLights])
	{
	    case 0:
	    {
	        if ((id = House_Inside(playerid)) != -1 && !HouseData[id][houseLights])
			{
	        	PlayerData[playerid][pHouseLights] = true;
	            PlayerTextDrawShow(playerid, PlayerData[playerid][pTextdraws][62]);
	        }
	        else PlayerTextDrawHide(playerid, PlayerData[playerid][pTextdraws][62]);
	    }
	    case 1:
	    {
	        if ((id = House_Inside(playerid)) == -1 || (id != -1 && HouseData[id][houseLights]))
			{
	            PlayerData[playerid][pHouseLights] = false;
                PlayerTextDrawHide(playerid, PlayerData[playerid][pTextdraws][62]);
	        }
	    }
	}
	if (PlayerData[playerid][pDrinking] && GetPlayerSpecialAction(playerid) != SPECIAL_ACTION_DRINK_SPRUNK && !IsPlayerInAnyVehicle(playerid))
	{
 		DestroyProgressBar(PlayerData[playerid][pDrinkBar]);
 		PlayerData[playerid][pDrinking] = 0;
	}
	if ((id = Speed_Nearest(playerid)) != -1 && GetPlayerSpeed(playerid) > SpeedData[id][speedLimit] && GetPlayerState(playerid) == PLAYER_STATE_DRIVER && IsEngineVehicle(vehicleid) && !PlayerData[playerid][pSpeedTime])
	{
	    if (!IsACruiser(vehicleid) && !IsABoat(vehicleid) && !IsAPlane(vehicleid) && !IsAHelicopter(vehicleid))
	    {
	 		new price = 100 + floatround(GetPlayerSpeed(playerid) - SpeedData[id][speedLimit]);

	   		format(str, sizeof(str), "Speeding (%.0f/%.0f mph)", GetPlayerSpeed(playerid), SpeedData[id][speedLimit]);
	        SetTimerEx("HidePlayerBox", 500, false, "dd", playerid, _:ShowPlayerBox(playerid, 0xFFFFFF66));

			if (Ticket_Add(playerid, price, str) != -1)
			{
	    		format(str, sizeof(str), "You have received a ~r~%s~w~ speeding ticket.", FormatNumber(price));
	     		ShowPlayerFooter(playerid, str);
			}
			PlayerData[playerid][pSpeedTime] = 5;
		}
	}
	if (Detector_Nearest(playerid) != -1)
	{
		if (IsPlayerArmed(playerid) && gettime() > PlayerData[playerid][pDetectorTime])
		{
			PlayerData[playerid][pDetectorTime] = gettime() + 5;

			SendNearbyMessage(playerid, 30.0, COLOR_PURPLE, "** The metal detector sounds off. (( %s ))", ReturnName(playerid, 0));
			PlayerPlaySoundEx(playerid, 43000);
		}
	}
	if ((keys[0] & KEY_FIRE) && GetPlayerWeapon(playerid) == 42)
	{
        static
	        Float:fX,
	        Float:fY,
	        Float:fZ;

	    for (new i = 0; i < sizeof(g_aFireObjects); i ++)
	    {
			GetDynamicObjectPos(g_aFireObjects[i], fX, fY, fZ);

			if ((IsValidDynamicObject(g_aFireObjects[i]) && IsPlayerInRangeOfPoint(playerid, 4.0, fX, fY, fZ)) && ++ g_aFireExtinguished[i] == 32)
   			{
   			    SetTimerEx("DestroyWater", 2000, false, "d", CreateDynamicObject(18744, fX, fY, fZ - 0.2, 0.0, 0.0, 0.0));

      			DestroyDynamicObject(g_aFireObjects[i]);
	        	g_aFireExtinguished[i] = 0;
			}
		}
	}
	if ((keys[0] & KEY_FIRE) && (GetVehicleModel(GetPlayerVehicleID(playerid)) == 407 || GetVehicleModel(GetPlayerVehicleID(playerid)) == 544))
	{
	    static
	        Float:fX,
	        Float:fY,
	        Float:fZ,
			Float:fVector[3],
			Float:fCamera[3];

	    GetPlayerCameraFrontVector(playerid, fVector[0], fVector[1], fVector[2]);
	    GetPlayerCameraPos(playerid, fCamera[0], fCamera[1], fCamera[2]);

	    for (new i = 0; i < sizeof(g_aFireObjects); i ++)
	    {
			GetDynamicObjectPos(g_aFireObjects[i], fX, fY, fZ);

			if (IsValidDynamicObject(g_aFireObjects[i]) && IsPlayerInRangeOfPoint(playerid, 3050, fX, fY, fZ))
			{
				if (++g_aFireExtinguished[i] == 64 && DistanceCameraTargetToLocation(fCamera[0], fCamera[1], fCamera[2], fX, fY, fZ + 2.5, fVector[0], fVector[1], fVector[2]) < 12.0)
   				{
   			    	SetTimerEx("DestroyWater", 2000, false, "d", CreateDynamicObject(18744, fX, fY, fZ - 0.2, 0.0, 0.0, 0.0));

	      			DestroyDynamicObject(g_aFireObjects[i]);
		        	g_aFireExtinguished[i] = 0;
				}
		  	}
	    }
	}
	return 1;
}
Reply
#4

Every return 0 could be problem.

So this
pawn Код:
if (PlayerData[playerid][pKicked])//IDK what is it... maybe you aren't resetting this variable
        return 0;
or this
pawn Код:
if (PlayerData[playerid][pWeapon] >= 1 && PlayerData[playerid][pWeapon] <= 45 && PlayerData[playerid][pWeapon] != 40 && PlayerData[playerid][pWeapon] != 2 && PlayerData[playerid][pGuns][g_aWeaponSlots[PlayerData[playerid][pWeapon]]] != GetPlayerWeapon(playerid) && !PlayerHasTazer(playerid) && !PlayerHasBeanBag(playerid) && PlayerData[playerid][pRangeBooth] == -1 && PlayerData[playerid][pCharacter] > 0)
        {
            SendAdminAlert(COLOR_LIGHTRED, "[ADMIN]: %s has been banned for weapon hacks (%s).", ReturnName(playerid, 0), ReturnWeaponName(PlayerData[playerid][pWeapon]));
            Log_Write("logs/cheat_log.txt", "[%s] %s was banned for weapon hacks (%s).", ReturnDate(), ReturnName(playerid), ReturnWeaponName(PlayerData[playerid][pWeapon]));

            Blacklist_Add(PlayerData[playerid][pIP], PlayerData[playerid][pUsername], "Anticheat", "Weapon Hacks");
            Kick(playerid);

            return 0;//IDK why desync someone who is being kicked
        }
Reply
#5

So what should I try editing? - Can you give me an example.
Reply
#6

delete
pawn Код:
if (PlayerData[playerid][pKicked])//IDK what is it... maybe you aren't resetting this variable
        return 0;
and delete the return 0; in :
pawn Код:
if (PlayerData[playerid][pWeapon] >= 1 && PlayerData[playerid][pWeapon] <= 45 && PlayerData[playerid][pWeapon] != 40 && PlayerData[playerid][pWeapon] != 2 && PlayerData[playerid][pGuns][g_aWeaponSlots[PlayerData[playerid][pWeapon]]] != GetPlayerWeapon(playerid) && !PlayerHasTazer(playerid) && !PlayerHasBeanBag(playerid) && PlayerData[playerid][pRangeBooth] == -1 && PlayerData[playerid][pCharacter] > 0)
        {
            SendAdminAlert(COLOR_LIGHTRED, "[ADMIN]: %s has been banned for weapon hacks (%s).", ReturnName(playerid, 0), ReturnWeaponName(PlayerData[playerid][pWeapon]));
            Log_Write("logs/cheat_log.txt", "[%s] %s was banned for weapon hacks (%s).", ReturnDate(), ReturnName(playerid), ReturnWeaponName(PlayerData[playerid][pWeapon]));

            Blacklist_Add(PlayerData[playerid][pIP], PlayerData[playerid][pUsername], "Anticheat", "Weapon Hacks");
            Kick(playerid);

            return 0;
        }
so it should be
pawn Код:
if (PlayerData[playerid][pWeapon] >= 1 && PlayerData[playerid][pWeapon] <= 45 && PlayerData[playerid][pWeapon] != 40 && PlayerData[playerid][pWeapon] != 2 && PlayerData[playerid][pGuns][g_aWeaponSlots[PlayerData[playerid][pWeapon]]] != GetPlayerWeapon(playerid) && !PlayerHasTazer(playerid) && !PlayerHasBeanBag(playerid) && PlayerData[playerid][pRangeBooth] == -1 && PlayerData[playerid][pCharacter] > 0)
        {
            SendAdminAlert(COLOR_LIGHTRED, "[ADMIN]: %s has been banned for weapon hacks (%s).", ReturnName(playerid, 0), ReturnWeaponName(PlayerData[playerid][pWeapon]));
            Log_Write("logs/cheat_log.txt", "[%s] %s was banned for weapon hacks (%s).", ReturnDate(), ReturnName(playerid), ReturnWeaponName(PlayerData[playerid][pWeapon]));

            Blacklist_Add(PlayerData[playerid][pIP], PlayerData[playerid][pUsername], "Anticheat", "Weapon Hacks");
            Kick(playerid);

        }
Reply
#7

Also, I don't recommend using OnPlayerUpdate for that. I'd make another timer and re-do it, just my opinion/2 cents.
Reply
#8

Never return '0' in the callback 'OnPlayerUpdate', it will stop player updates, therefore players will appear as if they were pause on your screen.
Reply
#9

pawn Код:
if (PlayerData[playerid][pKicked])
        return 0;
What is this?
Reply
#10

Alright, I've tried everything of the above - it still seems to appear, it's like sometimes players disappear & re-appear multiple times ina row.

Could it be something with my vehicle respawn?? I've set it from 12000 to -1
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)