• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Проблема со спавном в кастомном интерьере(падаю с неба)

Narek

Компетентный
Здравствуйте, при авторизации на сервере, особенно если вы являетесь лидером организации, или в больнице и ваше место спавна находится в кастомном интерьере, возникает проблема: иногда игрок появляется под текстурами и падает с неба. Предположительно, это связано с тем, что текстуры интерьера не успевают загружаться. Сейчас сделал так вызываю
PlayerSpawn() дважды после авторизации, и со второго раза(если первый раз не грузится) спавнюсь нормально(хотя редко и это не помогает). Как это можно исправить? Допустим проверить интерьер загружен или нет, есть еще такое предположение что с виртуальным миром что то не так но я не уверен.

мод Аrizona RP
Код:
public OnPlayerLoginMysql(playerid) // не весь паблик
{
     SetTimerEx("PlayerSpawn", 3000, false, "i", playerid); // 2
     PlayerSpawn(playerid); //1
    return 1;
}
Код:
forward PlayerSpawn(playerid);
public PlayerSpawn(playerid)
{
    SettingSpawn(playerid);
    if(IsPlayerNPC(playerid)) return 1;
    if(IsPlayerInAnyVehicle(playerid))
    {
        new Float:X, Float:Y, Float:Z;
        GetPlayerPos(playerid, X, Y, Z);
        J_SetPlayerPos(playerid, X ,Y, Z);
        SetTimerEx("PlayerSpawn", 50, false, "i", playerid);
        return 1;
    }
    if(pTemp[playerid][SPECTPLAYER] == true) SpecPl(playerid, false);
    else SpawnPlayer(playerid);
    return 1;
}
Код:
stock SettingSpawn(playerid)
{
    if(IsPlayerNPC(playerid)) return 1;
    TogglePlayerControllable(playerid, true);
    new skin = GetSkinOfPlayer(playerid);

      if(PI[playerid][pHospital]>0 && !PI[playerid][pMember])
    {
        if(PI[playerid][pHealth]>5) J_SetPlayerHealth(playerid,PI[playerid][pHealth]);
           else J_SetPlayerHealth(playerid,20);
    }
    else
    {
        if(PI[playerid][pLevel]>1 && !PI[playerid][pMember])
        {
            PI[playerid][pHospital]=1;
            J_SetPlayerHealth(playerid,20);
            SendClientMessage(playerid,COLOR_WHITE,"{DFCFCF}[Ñîâåò] {FAAC58}Ñîñòîÿíèå çäîðîâüÿ ñëèøêîì íèçêîå! Íåîáõîäèìî âûëå÷èòüñÿ ó âðà÷à èëè èñïîëüçîâàòü àïòå÷êó!");
        }
    }
     if(PI[playerid][pJailTime] > 0)
    {
        new rand = random(2);
        if(PI[playerid][pPrison]==1)
        {
            SetPlayerVirtualWorld(playerid, 11);
            SetSpawnInfoEx(playerid, skin, JailPos[rand][0], JailPos[rand][1], JailPos[rand][2], 180.0);
        }
        else if(PI[playerid][pPrison]==2)
        {
            SetPlayerVirtualWorld(playerid, 12);
            SetSpawnInfoEx(playerid, skin, JailPos[rand][0], JailPos[rand][1], JailPos[rand][2], 180.0);
        }
        else if(PI[playerid][pPrison]==3)
        {
            SetPlayerVirtualWorld(playerid, 13);
            SetSpawnInfoEx(playerid, skin, JailPos[2][0], JailPos[2][1], JailPos[2][2], 180.0);
        }
        else
        {
            SetPlayerVirtualWorld(playerid, 11);
            SetSpawnInfoEx(playerid, skin, JailPos[rand][0], JailPos[rand][1], JailPos[rand][2], 180.0);
        }
        SetPlayerInterior(playerid, 6);
        J_SetPlayerHealth(playerid,100);
        return 1;
    }
    else if(PI[playerid][pDemorgan] > 0)
    {
        SetSpawnInfoEx(playerid, skin, -801.45, 2831.39, 1501.99, 180.0);
        J_SetPlayerHealth(playerid, 100);
        SetPlayerInterior(playerid, 6);
        SetPlayerVirtualWorld(playerid, 6);
        SetPlayerSkinEx(playerid, 268);
        return 1;
    }
     else if(PI[playerid][pHeal] > 0 && !PI[playerid][pMember])
    {
        if(!IsAArmy(playerid))
        {
            switch(random(3))
            {
                case 0: SetSpawnInfoEx(playerid, skin, 1169.9442,-1335.3043,1019.4198,358.9693);
                case 1: SetSpawnInfoEx(playerid, skin, 620.8149,-1263.0205,1024.3912,269.7074);
                   case 2: SetSpawnInfoEx(playerid, skin, 1169.4475,-1285.9355,1019.4117,179.9430);
               }
               TogglePlayerControllable(playerid, false);//ïèçäîñÿ
            SetTimerEx("@__UnFreez",3000, 0, "d", playerid);
            switch(PI[playerid][pHospCity])
            {
                case 1:
                {
                    SetPlayerVirtualWorld(playerid, 1);
                    SetPlayerInterior(playerid, 2);
                }
                case 2:
                {
                    SetPlayerVirtualWorld(playerid, 2);
                    SetPlayerInterior(playerid, 3);
                }
                default:
                {
                     SetPlayerVirtualWorld(playerid, 3);
                    SetPlayerInterior(playerid, 3);
                }
            }
        }
        else
        {
            if(GetTeamID(playerid) == TEAM_ARMY) SetSpawnInfoEx(playerid, skin, 477.0396, 873.4634, 1500.9648, 89.7077);
            if(GetTeamID(playerid) == TEAM_ARMYLV) SetSpawnInfoEx(playerid, skin, 1403.7043, 2239.7979, 1500.9758, 225.8291);
            if(GetTeamID(playerid) == TEAM_ARMYSF) SetSpawnInfoEx(playerid, skin, -263.9890, 782.6996, 1500.9608, 179.3103);
            SetPlayerVirtualWorld(playerid, 1);
              SetPlayerInterior(playerid, 2);
            return 1;
        }
        J_SetPlayerHealth(playerid,25);
        if(startlomka[playerid]==1)PI[playerid][pOldRepl]=0;
        return 1;
    }
    else//ñïàâí äîìà
    {
        if(PI[playerid][pDCTime] == 0)
        {
            SetPlayerInterior(playerid, 0);
            SetPlayerVirtualWorld(playerid, 0);
            if(PI[playerid][pLevel] < 3)
            {
                if(PI[playerid][pRace] == 0)
                {
                    SetSpawnInfoEx(playerid, skin, 1154.6621,-1769.7983,16.5938,1.5731);
                    return 1;
                }
            }
            else if(PI[playerid][pLevel] >= 1)
            {
                SetSpawnInfoEx(playerid, skin, 1154.6621,-1769.7983,16.5938,1.5731);
                return 1;
            }
        }
        if(PI[playerid][pDCTime] == 5)
          {
              //By Àâòîð ñèñòåìû
            if(pFam > 0)
            {
                if(FamilyInfo[pFam][fHouse] != -1)
                {
                    TogglePlayerControllable(playerid,false);
                    SetPlayerSkin(playerid, skin);
                    J_SetPlayerPos(playerid, famHouse[FamilyInfo[pFam][fHouse]][famHouse_Exit_X]+5.0, famHouse[FamilyInfo[pFam][fHouse]][famHouse_Exit_Y], famHouse[FamilyInfo[pFam][fHouse]][famHouse_Exit_Z]);
                    SetPlayerFacingAngle(playerid, 269.2998);
                    SetPlayerInterior(playerid, famHouse[FamilyInfo[pFam][fHouse]][famHouse_INT]);
                    SetPlayerVirtualWorld(playerid, (famHouse[FamilyInfo[pFam][fHouse]][famHouse_ID]+50));
                    SetTimerEx("UnFreez",3000, false, "d", playerid);
                    return 1;
                }
                else
                {
                    PI[playerid][pDCTime] = 0;
                    PlayerSpawn(playerid);
                }
            }
            else
            {
                PI[playerid][pDCTime] = 0;
                PlayerSpawn(playerid);
            }
          }
        if(PI[playerid][pDCTime]==1 && PI[playerid][pHouseKey] != -1)
        {
            if(GetString(HouseInfo[PI[playerid][pHouseKey]][hOwner],PN(playerid)))
            {
                HouseEntered[playerid] = PI[playerid][pHouseKey];
                SetSpawnInfoEx(playerid, skin, HouseInfo[PI[playerid][pHouseKey]][hExit_X],HouseInfo[PI[playerid][pHouseKey]][hExit_Y],HouseInfo[PI[playerid][pHouseKey]][hExit_Z],0.0);
                SetPlayerInterior(playerid,HouseInfo[PI[playerid][pHouseKey]][hInt]);
                SetPlayerVirtualWorld(playerid,PI[playerid][pHouseKey]+50);
                TogglePlayerControllable(playerid, false);//ïèçäîñÿ
                SetTimerEx("@__UnFreez",3000, 0, "d", playerid);
                return 1;
            }
            else
            {
                new s = GetHouseStyle(PI[playerid][pHouseKey]);
                for(new i;i < HouseRooms[s];i ++)
                {
                    if(GetString(HRoomOwner[PI[playerid][pHouseKey]][i],PN(playerid)))
                    {
                        HouseEntered[playerid] = PI[playerid][pHouseKey];
                        SetSpawnInfoEx(playerid, skin, HouseInfo[PI[playerid][pHouseKey]][hExit_X],HouseInfo[PI[playerid][pHouseKey]][hExit_Y],HouseInfo[PI[playerid][pHouseKey]][hExit_Z],0.0);
                        SetPlayerInterior(playerid,HouseInfo[PI[playerid][pHouseKey]][hInt]);
                        SetPlayerVirtualWorld(playerid,PI[playerid][pHouseKey]+50);
                        TogglePlayerControllable(playerid, false);//ïèçäîñÿ
                        SetTimerEx("@__UnFreez",3000, 0, "d", playerid);
                        return 1;
                    }
                }
            }
        }
        else if(PI[playerid][pDCTime]==2 && GetTeamID(playerid) != 0){
            SetPlayerFacingAngle(playerid,SpawnInfo[PI[playerid][pMember]][3]);
            SetPlayerInterior(playerid,SpawnIntWorld[PI[playerid][pMember]][0]);
            SetPlayerVirtualWorld(playerid,SpawnIntWorld[PI[playerid][pMember]][1]);
            SetSpawnInfoEx(playerid, skin, SpawnInfo[PI[playerid][pMember]][0], SpawnInfo[PI[playerid][pMember]][1], SpawnInfo[PI[playerid][pMember]][2], SpawnInfo[PI[playerid][pMember]][3]);
            TogglePlayerControllable(playerid, false);//ïèçäîñÿ
            SetTimerEx("@__UnFreez",3000, 0, "d", playerid);
            return 1;
        }
        else if(PI[playerid][pDCTime]==3)
        {
            SetSpawnInfoEx(playerid, skin, PI[playerid][pPos_X],PI[playerid][pPos_Y],PI[playerid][pPos_Z],PI[playerid][pPos_A]);
            SetPlayerVirtualWorld(playerid, 0);
            SetPlayerInterior(playerid, 0);
            TogglePlayerControllable(playerid, false);//ïèçäîñÿ
            SetTimerEx("@__UnFreez",3000, 0, "d", playerid);
            return 1;
        }
    }
    SetSpawnInfoEx(playerid, skin, 167.5974,-109.2371,1.5501,272.6516);
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);
    PI[playerid][pDCTime] = 0;
    //TogglePlayerControllable(playerid, false);// это я закоментил
    //SetTimerEx("@__UnFreez",3000, 0, "d", playerid); я  закоментил
    return 1;
}
 
Сверху Снизу