Перейти к содержанию
Авторизация  
#Kot

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

Рекомендуемые сообщения

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

 

  • Like 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Mr.DrYou97

Может и для мускула найдешь ? :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
#Kot

Может и для мускула найдешь ? :D

ыыы,поищу xd..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Mr.DrYou97

 

Может и для мускула найдешь ? :D

ыыы,поищу xd..

 

Буду благодарен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
#Kot

Может и для мускула найдешь ? :D

Попробуй,он должен для MySQL i MxINI i SQLite,вот могу точно сказать что для MxINI i SQLite-100% будет работать..Мускул тогда тож должен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Red_Devils

А не проще вместо таймера использовать калбэк OnPlayerDisconect? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
#Kot

А не проще вместо таймера использовать калбэк OnPlayerDisconect? 

Ну кто не хочет сервер нагружать таймерами сделает так.А кто нет сделает так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
TrollFace

Копипаст без обдумывания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
#Kot

Копипаст без обдумывания.

Я жи автора указал.Автор: Extazy.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Predator

+-ик твой!Мне как раз нужно для сервера

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Сереега
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);

В строчках где написано "CordinataX=%.1f\n" везде ставить в конце X ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
#Kot
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);

В строчках где написано "CordinataX=%.1f\n" везде ставить в конце X ?

 

YES

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.