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!
Код:
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;
}
Every return 0 could be problem.
Also, I don't recommend using OnPlayerUpdate for that. I'd make another timer and re-do it, just my opinion/2 cents.
Never return '0' in the callback 'OnPlayerUpdate', it will stop player updates, therefore players will appear as if they were pause on your screen.
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