И так многим интересно как сделать так чтобы где игрок вышел из игры,там же при входе он и появится.
На эту тему я решил поискать немного информации,нашёл не плохой урок,от Extazy.
Смотрите.
И так первое что вам нужно добавить 3 переменных которые будут записываться в аккаунт пользователя.
(!)Если у вас нет регистрации,ничего не выйдет!
(!)Этот мануал написан для ГФ модов,но оптимизировать можно под что угодно,главное чтобы была регистрация.
Цитата
И так находим конструкцию enum pInfo в своём моде,и в конец добавляем
Код
Float:pCordX,
Float:pCordY,
Float:pCordZ,
Цитата
Далее в OnPlayerRegister добавляем строку
Код
format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordX]);fwrite(hFile, var);
format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordY]);fwrite(hFile, var);
format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordZ]);fwrite(hFile, var);
Поясняю: Тут мы делаем чтобы при создании аккаунта в него добавились нужные нам переменные.
Цитата
Далее в OnPlayerUpdate добавляем аналогичный код
Код
format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordX]);fwrite(hFile, var);
format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordY]);fwrite(hFile, var);
format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordZ]);fwrite(hFile, var);
Поясняю: Тут мы делаем чтобы переменные записывались в аккаунт
Цитата
И в OnPlayerLogin добавляем
Код
if( strcmp( key , "CordinataX" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCordX] = strval( val ); }
if( strcmp( key , "CordinataY" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCordY] = strval( val ); }
if( strcmp( key , "CordinataZ" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCordZ] = strval( val ); }
Поясняю: Тут мы извлекаем значение переменных из файла
Цитата
Далее в OnGameModeInit добавляем бесконечный таймер,который будет получать позиции игроков
Код
SetTimer("SavePlayerPos",1000,1);
Цитата
Далее создадим сам паблик
Код
public SavePlayerPos()
{
new Float:x,Float:y,Float:z;
//используем цикл
for(new i = 0;i , MAX_PLAYERS;i++)
{
GetPlayerPos(i,px,py,pz);//Получаем позицию игрока
PlayerInfo[i][pCordX] = px;//записываем x
PlayerInfo[i][pCordY] = py;//записываем y
PlayerInfo[i][pCordZ] = pz;//записываем z
}
}
И не забудьте добавить форвард,в начало кода
Ну и наконец при спавне игрока,устанавливаем ему эти координаты.
Цитата
Это ставим в OnPlayerSpawn
Код
forward SavePlayerPos();
Код
x = PlayerInfo[i][pCordX];
y = PlayerInfo[i][pCordY];
z = PlayerInfo[i][pCordZ];
SetPlayerPos(playerid, x,y,z);//Установим координаты из переменной
SetPlayerFacingAngle(playerid, 360.0);
В принципе можно убрать все спавны фракциям,и добавить условия только зарегистрирован или нет,и если нет то ставить другую позицию.
Но это уже нюансы.
Автор: Extazy.
Надеюсь вам этот урок помог.