09.01.2017, 14:25
Credits: Whitetiger.
You should avoid using SetPlayerSkin anywhere in your code as it was detected to make players crash randomly.
To work around this issue you can do this:
You should avoid using SetPlayerSkin anywhere in your code as it was detected to make players crash randomly.
To work around this issue you can do this:
Code:
new bool:IgnoreSpawn[MAX_PLAYERS]; public OnPlayerConnect(playerid) { IgnoreSpawn[playerid] = false; return 1; } stock SetPlayerSkinFixed(playerid, skinid) { /* // If player is being spectated, force spectators to start spectating again. SetTimerEx("ForceRespectate", 1000, false, "i", playerid); */ // Store info before re-spawn new Float:Pos[4], Float:pHealth[2], CurrWep; CurrWep = GetPlayerWeapon(playerid); GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]); GetPlayerFacingAngle(playerid, Pos[3]); GetPlayerHealth(playerid,pHealth[0]); GetPlayerArmour(playerid,pHealth[1]); // Fixes vehicle bug if(IsPlayerInAnyVehicle(playerid)) SetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]+2); new Weapons[13][2]; for(new i = 0; i < 13; i++) GetPlayerWeaponData(playerid, i, Weapons[i][0], Weapons[i][1]); // Set spawn info and spawn player SetSpawnInfo(playerid, GetPlayerTeam(playerid), skinid, Pos[0], Pos[1], Pos[2]-0.4, Pos[3], 0, 0, 0, 0, 0, 0); IgnoreSpawn[playerid] = true; SpawnPlayer(playerid); // Set info back after re-spawn SetPlayerHealth(playerid, pHealth[0]); SetPlayerArmour(playerid, pHealth[1]); SetPlayerInterior(playerid, GetPlayerInterior(playerid)); SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(playerid)); for(new i = 0; i < 13; i ++) GivePlayerWeapon(playerid, Weapons[i][0], Weapons[i][1]); SetPlayerArmedWeapon(playerid, CurrWep); return 1; } public OnPlayerSpawn(playerid) { if(IgnoreSpawn[playerid]) { IgnoreSpawn[playerid] = false; return 1; } // All of your OnPlayerSpawn code goes here... return 1; }