'Corrupt Spawn' - Players crash sometimes when they spawn.
#1

Title says all, it seems completely random and unless they are remotely ajailed, they crash.
FORUM MESSED UP INDENTATION.
pawn Код:
//OnPlayerConnect
public OnPlayerConnect(playerid)
{
    TogglePlayerSpectating(playerid, 1);
   
    SetPlayerCameraPos(playerid, -1213.5516,1827.4061,45.1303);
    SetPlayerCameraLookAt(playerid, -754.6612,1489.2018,25.0138);
    InterpolateCameraPos(playerid, -1213.5516,1827.4061,45.1303,-754.6612,1489.2018,25.0138, 90000, CAMERA_MOVE);
   
    SetPlayerColor(playerid, 0xFFFFFFFF);
    SetPlayerTime(playerid, THrs, TMins);
   
    UpdateDynamic3DTextLabelText(DeathLabel[playerid], -1, " ");
    DestroyDynamic3DTextLabel(DeathLabel[playerid]);
   
    Streamer_ToggleAllItems(playerid, 0, 0);
   
    if(IsPlayerNPC(playerid))
    {
        SetSpawnInfo(playerid, -1, 4, 379.7936,-2032.1964,7.8301,92.7040, 0,0,0,0,0,0);
        SpawnPlayer(playerid);
        return 1;
    }
        if(!IsPlayerNPC(playerid))
        {
            CreateColorSelectionDialog(playerid);
        }
        DestroyDynamic3DTextLabel(DeathLabel[playerid]);
        TogglePlayerControllable(playerid, 0);
       
        if(!IsPlayerNPC(playerid))
        {
            if(!IsARPName(playerid))
            {
                SendClientMessage(playerid, COLOUR_RED, "Invalid RP Name - Please reconnect with a name that does not contain numbers or invalid characters.");
                SendClientMessage(playerid, COLOUR_RED, "Examples of invalid characters: '[' '.' '/' '#' etc.");
                SetTimerEx("KickPlayer", 200,false,"i",playerid);
            }
        }
           
        new query[256];
        SetPlayerSkillLevel(playerid, 1, 998);
        format(query, sizeof(query), "%s has connected to the server.", GetNameEx(playerid));
        foreach(Player, i)
        {
            if(AdminLevel[i] > 0)
            {
                SendClientMessage(i, COLOUR_LIGHTRED, query);
            }
        }

        new playerip[24];
        GetPlayerIp(playerid, playerip, sizeof(playerip));
        format(query, sizeof(query), "SELECT * FROM `bans` WHERE `ip` = '%s'", playerip);
        mysql_tquery(dbHandle, query, "IsPlayerBanned", "i", playerid);
       
        for(new n=0; n<13; n++)
        PlayerTempWeap[playerid][n] = 0;
        PlayerUsingTempWep[playerid] = 0;
        SetPlayerSkillLevel(playerid, 0, 998);
       

        SetPlayerColor(playerid, COLOUR_WHITE);
        TextDrawHideForPlayer(playerid, speed[playerid]);
        TextDrawHideForPlayer(playerid, fuel[playerid]);

        PreloadAnimLib(playerid,"BOMBER");
        PreloadAnimLib(playerid,"RAPPING");
        PreloadAnimLib(playerid,"SHOP");
        PreloadAnimLib(playerid,"BEACH");
        PreloadAnimLib(playerid,"SMOKING");
        PreloadAnimLib(playerid,"ON_LOOKERS");
        PreloadAnimLib(playerid,"DEALER");
        PreloadAnimLib(playerid,"CRACK");
        PreloadAnimLib(playerid,"CARRY");
        PreloadAnimLib(playerid,"COP_AMBIENT");
        PreloadAnimLib(playerid,"PARK");
        PreloadAnimLib(playerid,"INT_HOUSE");
        PreloadAnimLib(playerid,"FOOD");
        PreloadAnimLib(playerid,"GANGS");
        PreloadAnimLib(playerid,"ped");
        PreloadAnimLib(playerid,"FAT");
        PreloadAnimLib(playerid, "PYTHON");
        PreloadAnimLib(playerid, "MEDIC");
        PreloadAnimLib(playerid, "DODGE");
        PreloadAnimLib(playerid, "GRAFFITI");
        PreloadAnimLib(playerid, "KNIFE");
        PreloadAnimLib(playerid,"SWORD");

        //SaveWeapons(playerid);
   
    return 1;
}
pawn Код:
//LoadAccount
            new skin = 0;
            switch(PlayerSkinSlot[playerid])
            {
                case 0:
                {
                    skin = 1;
                }
                case 1:
                {
                    skin = CSlot1[playerid];
                }
                case 2:
                {
                    skin = CSlot2[playerid];
                }
                case 3:
                {
                    skin = CSlot3[playerid];
                }
                case 4:
                {
                    skin = FSkin[playerid];
                }
            }

            SpawnSkin[playerid] = skin;
            SetPlayerVirtualWorld(playerid, LastVW[playerid]);
            SetPlayerInterior(playerid, LastInt[playerid]);
            switch(UsingSpawn[playerid])
            {
                case 0:
                {
                    SetSpawnInfo(playerid, 0, SpawnSkin[playerid], LastX[playerid], LastY[playerid]+1, LastZ[playerid]+0.8,0, 0,0,0,0,0,0);
                    SpawnPlayer(playerid);
                    SetPlayerPos(playerid, LastX[playerid]+0.5, LastY[playerid]+0.5, LastZ[playerid]+0.5);
     
                    SetCameraBehindPlayer(playerid);
                    LoadObjectsForPlayer(playerid);
                    SendClientMessage(playerid, COLOUR_GREY, "You are spawning at your last position, to change this use /changespawn.");
                }
                case 1:
                {
                    SetSpawnInfo(playerid, 0, skin,SpawnX[Faction[playerid]], SpawnY[Faction[playerid]], SpawnZ[Faction[playerid]],90, 0,0,0,0,0,0);
                    SpawnPlayer(playerid);
                    LoadObjectsForPlayer(playerid);
                    SetCameraBehindPlayer(playerid);
                    SendClientMessage(playerid, COLOUR_GREY, "You are spawning at your last faction spawn, to change this use /changespawn.");
                }
                case 2:
                {
                    for(new hs = 1; hs < MAX_HOUSES; hs++)
                    {
                        if(HouseOwner[hs] == PlayerSQLID[playerid])
                        {
                            SetSpawnInfo(playerid, 0, skin, HouseEntX[hs], HouseEntY[hs], HouseEntZ[hs], 90, 0,0,0,0,0,0);
                            SpawnPlayer(playerid);
                            SetCameraBehindPlayer(playerid);
                            SendClientMessage(playerid, COLOUR_GREY, "You are spawning at your house, to change this use /changespawn.");
                            break;
                        }
                    }
                }
            }
Spawning player ^
Reply
#2

Do you can post OnPlayerSpawn Callback ??
Reply
#3

pawn Код:
public OnPlayerSpawn(playerid)
{
    if(IsPlayerNPC(playerid)) //Checks if the player that just spawned is an NPC.
    {
        new npcname[MAX_PLAYER_NAME];
//----------------------------------NPC
        GetPlayerName(playerid, npcname, sizeof(npcname));
        if(!strcmp(npcname,"Reacher",true))
         {//
            SetPlayerSkin(playerid, 60);
        }
    }
    else
    {
        //SetPlayerPos(playerid, LastX[playerid]+0.2, LastY[playerid]+0.2, LastZ[playerid]+0.5);
        if(SpawnSkin[playerid] < 1)
        {
            SetPlayerSkin(playerid, 1);
        }
        if(SpawnSkin[playerid] > 0)
        {
            SetPlayerSkin(playerid, SpawnSkin[playerid]);
        }
        if(LastX[playerid] == 0 || LastY[playerid] == 0 || LastZ[playerid] == 0)
        {
            SetPlayerPos(playerid, -76.6801,1144.8685,19.7422);
            SetPlayerSkin(playerid, SpawnSkin[playerid]);
        }
        SetPlayerSkillLevel(playerid, WEAPONSKILL_SAWNOFF_SHOTGUN, 998);
        SetPlayerSkillLevel(playerid, WEAPONSKILL_PISTOL, 998);
        SetPlayerSkillLevel(playerid, WEAPONSKILL_PISTOL_SILENCED, 999);
        SetPlayerSkillLevel(playerid, WEAPONSKILL_DESERT_EAGLE, 999);
        SetPlayerSkillLevel(playerid, WEAPONSKILL_SHOTGUN, 999);
        SetPlayerSkillLevel(playerid, WEAPONSKILL_SPAS12_SHOTGUN, 999);
        SetPlayerSkillLevel(playerid, WEAPONSKILL_MICRO_UZI, 999);
        SetPlayerSkillLevel(playerid, WEAPONSKILL_MP5, 999);
        SetPlayerSkillLevel(playerid, WEAPONSKILL_AK47, 999);
        SetPlayerSkillLevel(playerid, WEAPONSKILL_M4, 999);
        SetPlayerSkillLevel(playerid, WEAPONSKILL_SNIPERRIFLE, 999);
        UpdateDynamic3DTextLabelText(DeathLabel[playerid], -1, " ");
        DestroyDynamic3DTextLabel(DeathLabel[playerid]);
        GivePlayerWeaponEx(playerid);
        ClearAnimations(playerid);
        TextDrawShowForPlayer(playerid,Servt);
        TextDrawShowForPlayer(playerid,txtTimeDisp);
    }
    return 1;
}
Reply
#4

Quote:

if(SpawnSkin[playerid] < 1 && LastX[playerid] == 0 && LastY[playerid] == 0 && LastZ[playerid] == 0 )
{
SetPlayerSkin(playerid, 1);
}
else if(SpawnSkin[playerid] > 0 && LastX[playerid] == 0 && LastY[playerid] == 0 && LastZ[playerid] == 0 )
{
SetPlayerPos(playerid, -76.6801,1144.8685,19.7422);
SetPlayerSkin(playerid, SpawnSkin[playerid]);
}

try this

i think this means LastX[playerid] == 0 && LastY[playerid] == 0 && LastZ[playerid] == 0 <---- First Time join ? if is it then that code is good else idk

EDIT : little touch
Reply
#5

Thanks, I'm not sure this will help but I appreciate it.
Reply
#6

Show me CreateColorSelectionDialog(playerid) function
Reply
#7

It's in an .inc.
Reply
#8

I had this vexing problem, is that if you do not have the "AddPlayerClass" SetSpawnInfo function and use of one or another crashea to spawnear, you must be a bug, I guess.

When you add and delete SetSpawnInfo AddPlayerClass seeks to use well the SpawnPlayer and TogglePlayerSpectating.

Greetings.
Reply
#9

I dont understand
Reply
#10

If you do not have "AddPlayerClass" in OnGameModeInit ...

Код:
public OnGameModeInit()
{
AddPlayerClass(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
// ...
}
And finally, erase everything related to the SetSpawnInfo function and other functions used to replace (SetPlayerPos, SetPlayerSkin, GivePlayerWeapon ...)

Try this and tells how it goes.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)