shape1
shape2
shape3
shape4
shape7
shape8

Сохранение позиции игрока при выходе из игры.


Статус
Закрыто для дальнейших ответов.

iPsTrange

Освоившийся
Пользователь
19.07.2014
137
46
0
И так многим интересно как сделать так чтобы где игрок вышел из игры,там же при входе он и появится.

На эту тему я решил поискать немного информации,нашёл не плохой урок,от 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);
Далее создадим сам паблик .

Код:
forward SavePlayerPos();public SavePlayerPos(){    new Float:px,Float:py,Float:pz;    //используем цикл    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

Код:
SetPlayerPos(playerid, PlayerInfo[playerid][pCordX],PlayerInfo[playerid][pCordY],PlayerInfo[playerid][pCordZ]);//Установим координаты из переменной  SetPlayerFacingAngle(playerid, 360.0);
В принципе можно убрать все спавны фракциям,и добавить условия только зарегистрирован или нет,и если нет то ставить другую позицию.

Но это уже нюансы.

Автор: Extazy.
Исправление ошибок: @Vlad_Trifonov
Думаю все понятно.Это хороший урок,это система много кому требуется,удачи вам.

 
Последнее редактирование модератором:

Krutihine

Участник
Пользователь
10.07.2014
546
187
0
Скриптер
Класс

Супер, но надо добавить сохранение Вирт мира и интерьера! Я то сделал, но новичкам предупреждение...

~~~[pInt] = GetPlayerInterior(playerid);

~~~[pWorld] = GetPlayerVirtualWorld(playerid);
 
Последнее редактирование модератором:
Статус
Закрыто для дальнейших ответов.