[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
[FAQ] Сохранение позиции игрока
Дата: 02.06.2011, Четверг, 16:21:00 | Сообщение # $NUMBER
Группа: VIP
Сообщений: 1021
Репутация: 815+
В 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
Дата: 02.06.2011, Четверг, 16:42:35 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 627
Репутация: 361+
Quote (Tailer)
В OnPlayerSpawn перед return 1; Code SetPlayerSpawn(playerid); Ко всем new добавляем new FirstSpawn[MAX_PLAYERS]; И создаём паблик и соответственно форвард Codeforward UnsetFirstSpawn(playerid); public UnsetFirstSpawn(playerid) { FirstSpawn[playerid] = 0; } И ещё один паблик и форвард Codeforward 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; }

В public SetPlayerSpawn вместо спавна по фракам
Code
SetPlayerPos(playerid,PlayerInfo[playerid][pPos_x], PlayerInfo[playerid][pPos_y], PlayerInfo[playerid][pPos_z]);


И все! Зачем так попу то рвать? Скины сами скриптеры настроят)
  • Страница 1 из 1
  • 1
Поиск: