• Страница 1 из 1
  • 1
[Урок] Сохранение позиции игрока при выходе из игры
Roliks Дата: Среда, 09.01.2013, 19:32 | Сообщение # 1 | Сообщить о нерабочей теме


Аватар для Roliks

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

Надеюсь вам этот урок помог.
  • Страница 1 из 1
  • 1
Поиск: