В enum pInfo, добавляем
Code
Float:pPos_x,
Float:pPos_y,
Float:pPos_z,
В puplic OnPlayerConnect, добавляем
Code
PlayerInfo[playerid][pPos_x] = 239.8503; // x координаты первого спавна
PlayerInfo[playerid][pPos_y] = 57.5682; // y координаты первого спавна
PlayerInfo[playerid][pPos_z] = 2.5167; // z координаты
В puplic OnPlayerRegister, добавляем
Code
if ((PlayerInfo[playerid][pPos_x]==0.0 && PlayerInfo[playerid][pPos_y]==0.0 && PlayerInfo[playerid][pPos_z]==0.0))
{
PlayerInfo[playerid][pPos_x] = 239.8503;
PlayerInfo[playerid][pPos_y] = 57.5682;
PlayerInfo[playerid][pPos_z] = 2.5167;
}
format(var, 64, "Pos_x=%.1f\n",PlayerInfo[playerid][pPos_x]);fwrite(hFile, var);
format(var, 64, "Pos_y=%.1f\n",PlayerInfo[playerid][pPos_y]);fwrite(hFile, var);
format(var, 64, "Pos_z=%.1f\n",PlayerInfo[playerid][pPos_z]);fwrite(hFile, var);
Далее, в public OnPlayerUpdate, вставляем вот это
Code
if ((PlayerInfo[playerid][pPos_x]==0.0 && PlayerInfo[playerid][pPos_y]==0.0 && PlayerInfo[playerid][pPos_z]==0.0))
{
PlayerInfo[playerid][pPos_x] = 239.8503;
PlayerInfo[playerid][pPos_y] = 57.5682;
PlayerInfo[playerid][pPos_z] = 2.5167;
}
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
PlayerInfo[playerid][pPos_x] = x;
PlayerInfo[playerid][pPos_y] = y;
PlayerInfo[playerid][pPos_z] = z;
format(var, 64, "Pos_x=%.1f\n",PlayerInfo[playerid][pPos_x]);fwrite(hFile, var);
format(var, 64, "Pos_y=%.1f\n",PlayerInfo[playerid][pPos_y]);fwrite(hFile, var);
format(var, 64, "Pos_z=%.1f\n",PlayerInfo[playerid][pPos_z]);fwrite(hFile, var);
В public OnPlayerLogin
Code
if( strcmp( key , "Pos_x" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pPos_x] = floatstr( val ); }
if( strcmp( key , "Pos_y" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pPos_y] = floatstr( val ); }
if( strcmp( key , "Pos_z" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pPos_z] = floatstr( val ); }
В OnPlayerLogin ищем строчку примерно такого содержания
Code
if(PlayerInfo[playerid][pReg] == 0)
{
}
И добавляем туда
Code
PlayerInfo[playerid][pPos_x] = 239.8503;// снова координаты первого появления
PlayerInfo[playerid][pPos_y] = 57.5682;
PlayerInfo[playerid][pPos_z] = 2.5167;
В этом же паблике перед SpawnPlayer(playerid);
Code
SetSpawnInfo(playerid, PlayerInfo[playerid][pTeam], PlayerInfo[playerid][pModel], PlayerInfo[playerid][pPos_x], PlayerInfo[playerid][pPos_y], PlayerInfo[playerid][pPos_z], 1.0, -1, -1, -1, -1, -1, -1);
В OnPlayerSpawn перед return 1;
Code
SetPlayerSpawn(playerid);
Ко всем new добавляем new FirstSpawn[MAX_PLAYERS];
И создаём паблик и соответственно форвард
Code
forward UnsetFirstSpawn(playerid);
public UnsetFirstSpawn(playerid)
{
FirstSpawn[playerid] = 0;
}
И ещё один паблик и форвард
Code
forward SetPlayerSpawn(playerid);
public SetPlayerSpawn(playerid)
{
if(IsPlayerConnected(playerid))
{
SetPlayerSkin(playerid, PlayerInfo[playerid][pChar]);
if(PlayerInfo[playerid][pCrashed] == 1)
{
if(FirstSpawn[playerid] == 1)
{
SetPlayerInterior(playerid,PlayerInfo[playerid][pInt]);
SetPlayerPos(playerid, PlayerInfo[playerid][pPos_x], PlayerInfo[playerid][pPos_y], PlayerInfo[playerid][pPos_z] + 1);
return 1;
}
}
}
return 1;
}
Автор Vovan228