Сегодня будем делать сохранение координатов игрока при выходе из игры (спавн на том же месте где был до выхода из игры).
Возьмём простую регистрацию, и ко всем переменным игрока добавим:
Code: Select all
Float:pPos_x,
Float:pPos_y,
Float:pPos_z//последняя строка без запятой
В public OnPlayerConnect(playerid)
Code: Select all
PlayerInfo[playerid][pPos_x] = 1069.552490;//меняйте на свои
PlayerInfo[playerid][pPos_y] = 1045.621459;
PlayerInfo[playerid][pPos_z] = 10.159700;
В public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]), после строки:
Code: Select all
ini_setInteger(iniFile, "NHouse", 0);
добавим координаты первоначального спавна игрока (при регистрации):
Code: Select all
ini_setFloat(iniFile, "Pos_x", 1069.552490); // Запишем позицию спавна игрока в файл.
ini_setFloat(iniFile, "Pos_y", 1045.621459);//меняйте на свои
ini_setFloat(iniFile, "Pos_z", 10.159700);
В этом же паблике, после строки:
Code: Select all
ini_getInteger(iniFile,"NHouse",PlayerInfo[playerid][pNHouse]);
добавим:
Code: Select all
ini_getFloat(iniFile, "Pos_x", PlayerInfo[playerid][pPos_x]);//при авторизации
ini_getFloat(iniFile, "Pos_y", PlayerInfo[playerid][pPos_y]); // Запишем позицию игрока из файла в переменную.
ini_getFloat(iniFile, "Pos_z", PlayerInfo[playerid][pPos_z]);
И в stock SaveAccount(playerid), после строки:
Code: Select all
ini_setInteger(iniFile, "NHouse", PlayerInfo[playerid][pNHouse]);
добавим:
Code: Select all
ini_setFloat(iniFile, "Pos_x", PlayerInfo[playerid][pPos_x]); //при выходе из игры - запись в файл
ini_setFloat(iniFile, "Pos_y", PlayerInfo[playerid][pPos_y]);
ini_setFloat(iniFile, "Pos_z", PlayerInfo[playerid][pPos_z]);
Создадим stock
Code: Select all
stock UpdatePlayerPosition(playerid)//Сохранение (узнать) позиция игрока
{
PlayerInfo[playerid][phealth] = health;
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
PlayerInfo[playerid][pPos_x] = x;
PlayerInfo[playerid][pPos_y] = y;
PlayerInfo[playerid][pPos_z] = z;
return true;
}
Теперь сделаем чтоб позиция сохранялась при Disconne'кте. В моде находим public OnPlayerDisconnect(playerid,reason) и в него вставляем функцию сохранения позиции
Code: Select all
UpdatePlayerPosition(playerid);
и при смерти - в public OnPlayerDeath(playerid, killerid, reason) так же добавим:
Code: Select all
UpdatePlayerPosition(playerid);//где погиб там и спавн
И напоследок, в public OnPlayerSpawn(playerid)
Code: Select all
SetPlayerPos(playerid,PlayerInfo[playerid][pPos_x],PlayerInfo[playerid][pPos_y],PlayerInfo[playerid][pPos_z]);
Вот и всё!