[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
[Pawno-Урок] Сохранение позиции игрока при выходе из игры
Дата: 12.12.2012, Среда, 14:14:51 | Сообщение # $NUMBER
Группа: Пользователи
Сообщений: 163
Репутация: 374+
И так многим интересно как сделать так чтобы где игрок вышел из игры,там же при входе он и появится.
На эту тему я решил поискать немного информации,нашёл не плохой урок,от Extazy.
Смотрите.

И так первое что вам нужно добавить 3 переменных которые будут записываться в аккаунт пользователя.
(!)Если у вас нет регистрации,ничего не выйдет!
(!)Этот мануал написан для ГФ модов,но оптимизировать можно под что угодно,главное чтобы была регистрация.

И так находим конструкцию enum pInfo в своём моде,и в конец добавляем:
Code
Float:pCordX,    
Float:pCordY,    
Float:pCordZ,

Далее в OnPlayerRegister добавляем строку:
Code
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 добавляем аналогичный код:
Code
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 добавляем:
Code
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 добавляем бесконечный таймер,который будет получать позиции игроков
Code
SetTimer("SavePlayerPos",1000,1);

Далее создадим сам паблик:
Code
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    
}    
}

И не забудьте добавить форвард,в начало кода:
Code
forward SavePlayerPos();

Ну и наконец при спавне игрока,устанавливаем ему эти координаты.
Это ставим в OnPlayerSpawn:
Code
x = PlayerInfo[i][pCordX];    
y = PlayerInfo[i][pCordY];    
z = PlayerInfo[i][pCordZ];    
              SetPlayerPos(playerid, x,y,z);//Установим координаты из переменной    
           SetPlayerFacingAngle(playerid, 360.0);

В принципе можно убрать все спавны фракциям,и добавить условия только зарегистрирован или нет,и если нет то ставить другую позицию.
Автор: Extazy.
Дата: 14.12.2012, Пятница, 16:39:30 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 491
Репутация: 0+
Ну и код...
Дата: 15.12.2012, Суббота, 00:45:57 | Сообщение # $NUMBER
Группа: VIP
Сообщений: 1021
Репутация: 815+
psycho-saw, Хороший оптимизированный код. в ем проблема ? -_-
Дата: 15.12.2012, Суббота, 11:58:35 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 491
Репутация: 0+
Tailer, нубо-гф код, в чём проблема? Выдрано откуда то вроде..
Дата: 15.12.2012, Суббота, 14:10:12 | Сообщение # $NUMBER
Группа: VIP
Сообщений: 1021
Репутация: 815+
psycho-saw, Это превосходный код!
  • Страница 1 из 1
  • 1
Поиск: