Narek
Компетентный
Здравствуйте, при авторизации на сервере, особенно если вы являетесь лидером организации, или в больнице и ваше место спавна находится в кастомном интерьере, возникает проблема: иногда игрок появляется под текстурами и падает с неба. Предположительно, это связано с тем, что текстуры интерьера не успевают загружаться. Сейчас сделал так вызываю
PlayerSpawn() дважды после авторизации, и со второго раза(если первый раз не грузится) спавнюсь нормально(хотя редко и это не помогает). Как это можно исправить? Допустим проверить интерьер загружен или нет, есть еще такое предположение что с виртуальным миром что то не так но я не уверен.
мод Аrizona RP
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;
}
