08.11.2013, 15:56
Сделал, чтобы игрок после смерти спавнился в больнице, и столкнулся с тем, что игрок может умереть несколько раз подряд. Причём это случается не всегда, иногда умирает нормально, иногда 2 или 3 раза, и только потом спавнится.
Если верить логам, то OnPlayerSpawn и OnPlayerDeath вызываются 1 раз. В чём же проблема?
Вот код:
OnPlayerDeath
OnPlayerSpawn
Spawn(playerid)
Если верить логам, то OnPlayerSpawn и OnPlayerDeath вызываются 1 раз. В чём же проблема?
Вот код:
OnPlayerDeath
PHP код:
public OnPlayerDeath(playerid, killerid, reason)
{
if(GLOBAL_DEBUG) printf(" | OnPlayerDeath(%d,%d,%d)",playerid, killerid, reason);
SetPVarInt(playerid,"K_Times",GetPVarInt(playerid,"K_Times") + 1);
if(GetPVarInt(playerid,"K_Times") > 1) return Cheat_Kick(playerid,ACC_FAKE_KILL); //больше одной смерти перед спавном - кик
BloodPlayer[playerid] = 0;
gBlood[playerid] = 0;
PZ_Robit[playerid] = 0;
PZ_Money[playerid] = 0;
PZ_Vz9l[playerid] = 0;
Cuffed[playerid] = 0;
SetPlayerWeather(playerid,ServerWeather);
SetPlayerDrunkLevel(playerid,0);
Drugs_Time[playerid] = 0;
TextDrawHideForPlayer(playerid, ZVision);
SetPVarInt(playerid, "PlayerInAFK", -2);
if(IsAGang(playerid) && killerid != INVALID_PLAYER_ID)
{
new zone = GZ_GetPlayerZone(playerid);
if(zone != -1 && GZInfo[zone][zBattle] == 1)
{
new frak;
if(Player[playerid][pLeader] != 0) frak = Player[playerid][pLeader];
else frak = Player[playerid][pFraka];
if(frak == GZInfo[zone][zBF1]) GZKill[GZInfo[zone][zBF2]]++;
else if(frak == GZInfo[zone][zBF2]) GZKill[GZInfo[zone][zBF1]]++;
}
}
if(Player[playerid][pWanted] > 0 && killerid !=INVALID_PLAYER_ID)
{
if(Player[killerid][pFraka] == 1 || Player[killerid][pFraka] == 2 || Player[killerid][pLeader] == 1 || Player[killerid][pLeader] == 2)
{
new string[120];
Player[playerid][pJailTime] = (Player[playerid][pWanted]*60);
Player[playerid][pWanted] = 0;
T_SetPlayerPos(playerid,264.1919,76.8498,1001.0391);
SetPlayerInterior(playerid,6);
ResetPlayerWeapons(playerid);
format(string,sizeof(string),"Вы были посажены в тюрьму на %d секунд!",Player[playerid][pJailTime]);
SendClientMessage(playerid,0xa13838AA,string);
format(string,sizeof(string),"Вы посадили %s в тюрьму на %d секунд!",PlayerName(playerid),Player[playerid][pJailTime]);
SendClientMessage(killerid,0xa13838AA,string);
}
}
PlayerDead[playerid] = true;
return 1;
}
PHP код:
public OnPlayerSpawn(playerid)
{
if(GLOBAL_DEBUG) printf("CALLBACK | OnPlayerSpawn(%d)",playerid);
if(Player[playerid][pLog] == 0) {T_Kick(playerid);return 1;}
SetPVarInt(playerid, "PlayerInAFK", 0);
if(animload[playerid] == false)
{
PreloadAnimLib(playerid,"BOMBER");
PreloadAnimLib(playerid,"CHAINSAW");
PreloadAnimLib(playerid,"RAPPING");
PreloadAnimLib(playerid,"SHOP");
PreloadAnimLib(playerid,"BEACH");
PreloadAnimLib(playerid,"SMOKING");
PreloadAnimLib(playerid,"FOOD");
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,"CRIB");
PreloadAnimLib(playerid,"ROB_BANK");
PreloadAnimLib(playerid,"JST_BUISNESS");
PreloadAnimLib(playerid,"PED");
PreloadAnimLib(playerid,"OTB");
PreloadAnimLib(playerid,"INT_SHOP");
animload[playerid] = true;
}
SetPVarInt(playerid,"K_Times",0);
/*BloodPlayer[playerid] = 0;
gBlood[playerid] = 0;
TextDrawHideForPlayer(playerid, ZVision);*/
for(new i;i<MAX_GANGZONE;i++)
{
GangZoneShowForPlayer(playerid, GZZone[i], GZ_GetColor(GZInfo[i][zFraction]));
if(GZInfo[i][zBattle]) GangZoneFlashForPlayer(playerid,i,GZ_COLOR_CAPTURE);
}
Spawn(playerid);
Color(playerid);
PHP код:
stock Spawn(playerid)
{
if(Player[playerid][pJailTime] > 0)
{
Spawn_GiveHP(playerid);
T_SetPlayerPos(playerid,264.1919,76.8498,1001.0391);
SetPlayerInterior(playerid,6);
if(Player[playerid][pFraka] == 0 && Player[playerid][pLeader] == 0) SetPlayerSkin(playerid,Player[playerid][pSkin]);
else SetPlayerSkin(playerid,Player[playerid][pFSkin]);
return 1;
}
if(PlayerDead[playerid]) // Больница
{
SetPlayerHP(playerid,10.0);
new rand = random(sizeof(MEDIC_SPAWN_CORD));
T_SetPlayerPos(playerid,MEDIC_SPAWN_CORD[rand][0],MEDIC_SPAWN_CORD[rand][1],MEDIC_SPAWN_CORD[rand][2]+0.2,MEDIC_SPAWN_CORD[rand][3],1,1,true);
SetCameraBehindPlayer(playerid);
if(Player[playerid][pFraka] == 0 && Player[playerid][pLeader] == 0) SetPlayerSkin(playerid,Player[playerid][pSkin]);
else
{
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
return 1;
}
Spawn_GiveHP(playerid);
if(Player[playerid][pHouse] !=0 && Player[playerid][pSpawn] == 0)
{
new hid = Player[playerid][pHouse];
T_SetPlayerPos(playerid,House[hid][hVhodX],House[hid][hVhodY],House[hid][hVhodZ]);
SetPlayerInterior(playerid,House[hid][hInt]);
SetPlayerVirtualWorld(playerid,House[hid][hWord]);
if(Player[playerid][pFraka] == 0 && Player[playerid][pLeader] == 0)SetPlayerSkin(playerid,Player[playerid][pSkin]);
else SetPlayerSkin(playerid,Player[playerid][pFSkin]);
SetCameraBehindPlayer(playerid);
return 1;
}
if(Player[playerid][pOtel] != 0)
{
if(hotel_CheckTimeEject(playerid))
{
SpawnPlayer(playerid);
return 1;
}
new class_ = hotel_RoomGetClass(Player[playerid][pOtel]);
if(class_ == HOTEL_ROOM_ECONOMY)
{
T_SetPlayerPos(playerid,2233.6099,-1115.2574,1050.8828,0,5,Player[playerid][pOtel]);
HOTEL_PLAYER_BLOCK[playerid] = HOTEL_ROOM_ECONOMY;
SetCameraBehindPlayer(playerid);
}
else if(class_ == HOTEL_ROOM_MEDIUM)
{
T_SetPlayerPos(playerid,2282.91, -1140.29, 1050.91,0,11,Player[playerid][pOtel]);
HOTEL_PLAYER_BLOCK[playerid] = HOTEL_ROOM_MEDIUM;
SetCameraBehindPlayer(playerid);
}
else if(class_ == HOTEL_ROOM_LUX)
{
T_SetPlayerPos(playerid,2217.54, -1076.29, 1050.52,0,1,Player[playerid][pOtel]);
HOTEL_PLAYER_BLOCK[playerid] = HOTEL_ROOM_LUX;
SetCameraBehindPlayer(playerid);
}
HOTEL_PLAYER_IN[playerid] = true;
HOTEL_PLAYER_LEVEL[playerid] = hotel_RoomGetLevel(Player[playerid][pOtel]);
if(Player[playerid][pFraka] == 0 && Player[playerid][pLeader] == 0) SetPlayerSkin(playerid,Player[playerid][pSkin]);
else SetPlayerSkin(playerid,Player[playerid][pFSkin]);
return 1;
}
if(Player[playerid][pFraka] ==0 || Player[playerid][pLeader] ==0)
{
new rpos = random(sizeof(Bomj_Spawn)-1);
T_SetPlayerPos(playerid,Bomj_Spawn[rpos][0],Bomj_Spawn[rpos][1],Bomj_Spawn[rpos][2],Bomj_Spawn[rpos][3]);
SetPlayerInterior(playerid,0);
SetPlayerSkin(playerid,Player[playerid][pSkin]);
}
if(Player[playerid][pFraka] ==1 || Player[playerid][pLeader] ==1)//Мусора
{
T_SetPlayerPos(playerid,251.7674,68.6941,1003.6406);
SetPlayerInterior(playerid,6);
SetPlayerVirtualWorld(playerid,0);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
if(Player[playerid][pFraka] ==2 || Player[playerid][pLeader] ==2)//ФБР
{
T_SetPlayerPos(playerid,233.2321,112.7241,1003.2257);
SetPlayerInterior(playerid,10);
SetPlayerVirtualWorld(playerid,0);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
if(Player[playerid][pFraka] ==3 || Player[playerid][pLeader] ==3)//Армия
{
T_SetPlayerPos(playerid,-1346.8604,491.0497,11.2027);
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
if(Player[playerid][pFraka] ==4 || Player[playerid][pLeader] ==4)//Медики
{
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
T_SetPlayerPos(playerid,1135.9084,-1349.1273,-91.0731,359.7142,1,1,true);
}
if(Player[playerid][pFraka] ==6 || Player[playerid][pLeader] ==6)//Мэрия
{
T_SetPlayerPos(playerid,360.8573,205.4836,1008.3828);
SetPlayerInterior(playerid,3);
SetPlayerVirtualWorld(playerid,0);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
if(Player[playerid][pFraka] ==5 || Player[playerid][pLeader] ==5)//Инструкторы
{
T_SetPlayerPos(playerid,-2023.9537,-118.5002,1035.1719);
SetPlayerInterior(playerid,3);
SetPlayerVirtualWorld(playerid,1);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
if(Player[playerid][pFraka] ==7 || Player[playerid][pLeader] ==7)//San news
{
T_SetPlayerPos(playerid,652.0999,-1331.6232,-38.1789,31.3103,1,1,true);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
if(Player[playerid][pFraka] ==8 || Player[playerid][pLeader] ==8)//Grove
{
T_SetPlayerPos(playerid,2492.6389,-1710.2410,1014.7422);
SetPlayerInterior(playerid,3);
SetPlayerVirtualWorld(playerid,0);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
if(Player[playerid][pFraka] ==9 || Player[playerid][pLeader] ==9)//Rifa
{
T_SetPlayerPos(playerid,2806.9536,-1166.6899,1025.5703);
SetPlayerInterior(playerid,8);
SetPlayerVirtualWorld(playerid,0);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
if(Player[playerid][pFraka] ==10 || Player[playerid][pLeader] ==10)//Ballas
{
T_SetPlayerPos(playerid,228.5867,1153.6051,1082.6168);
SetPlayerInterior(playerid,4);
SetPlayerVirtualWorld(playerid,0);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
if(Player[playerid][pFraka] ==11 || Player[playerid][pLeader] ==11)//Vagos
{
T_SetPlayerPos(playerid,299.3129,302.4451,999.1484);
SetPlayerInterior(playerid,4);
SetPlayerVirtualWorld(playerid,0);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
if(Player[playerid][pFraka] ==12 || Player[playerid][pLeader] ==12)//Aztec
{
T_SetPlayerPos(playerid,265.5839,1295.0334,1080.2578);
SetPlayerInterior(playerid,4);
SetPlayerVirtualWorld(playerid,0);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
if(Player[playerid][pFraka] ==13 || Player[playerid][pLeader] ==13)//Байкеры
{
T_SetPlayerPos(playerid,508.5804,-85.3123,998.9609);
SetPlayerInterior(playerid,11);
SetPlayerVirtualWorld(playerid,0);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
if(Player[playerid][pFraka] ==14 || Player[playerid][pLeader] ==14)//LCN
{
T_SetPlayerPos(playerid,448.5494,1405.8173,1084.3047);
SetPlayerInterior(playerid,2);
SetPlayerVirtualWorld(playerid,0);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
if(Player[playerid][pFraka] ==15 || Player[playerid][pLeader] ==15)//Yaki
{
T_SetPlayerPos(playerid,1265.9303,-795.3159,1084.0078);
SetPlayerInterior(playerid,5);
SetPlayerVirtualWorld(playerid,0);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
if(Player[playerid][pFraka] ==16 || Player[playerid][pLeader] ==16)//R M
{
T_SetPlayerPos(playerid,30.8725,1340.9081,1088.8750);
SetPlayerInterior(playerid,10);
SetPlayerVirtualWorld(playerid,0);
SetPlayerSkin(playerid,Player[playerid][pFSkin]);
}
SetCameraBehindPlayer(playerid);
return 1;
}