Перейти к содержанию
Авторизация  
krabik-1337@mail.ru

Спавн где вышел MYSQL

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

Полюбому никто не ответит ну да ладно, может кто знает.

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


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

Получаем текущею позицию через GetPlayerPos и сохраняем в переменную. После форматируем запрос в базу. При спавне персонажа загружаем. Чего сложного?

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


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

Слушай за сколько ты готов сделать это?

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


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

Я не беру заказы в данный момент времени.

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


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

static
Float:PlayerPos[MAX_PLAYERS][3];


В OnPlayerDisconnect

new
Float:x_dis,
Float:y_dis,
Float:z_dis;

GetPlayerPos(playerid, x_dis, y_dis, z_dis);

PlayerPos[playerid][0] = x_dis;
PlayerPos[playerid][1] = y_dis;
PlayerPos[playerid][2] = z_dis;

new str [150];
mysql_format(connects,str, 150, "UPDATE `accounts` SET `PosPlayerX` = '%f', `PosPlayerY` = '%f', `PosPlayerZ` = '%f' WHERE `pID` = '%d' LIMIT 1",PlayerPos[playerid][0], PlayerPos[playerid][1], PlayerPos[playerid][2], PlayerInfo[playerid][pID]);
mysql_function_query(connects, str, false, "", "");

При загрузке данных аккаунта

if(PlayerPos[playerid][0] != 0.0 && PlayerPos[playerid][1] != 0.0 && PlayerPos[playerid][2] != 0.0) return ShowPlayerDialog(playerid, 2000, DIALOG_STYLE_MSGBOX, !"Вернуться на место", !"Вы желаете вернуться на место, где вышли?", "Да", "Нет");

В OnPlayerDialogResponse

case 2000:
{
if(!response) return 1;
SendClientMessage(playerid, -1, !"Вы вернулись на место, где Вы вышли!");
SetPlayerPos(playerid, PlayerPos[playerid][0], PlayerPos[playerid][1], PlayerPos[playerid][2]);
}

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


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

@#Rips, в OnPlayerDisconnect данные позиции верны не всегда. Я и сам когда-то сохранял там. Скажу даже больше, неверны в большинстве случаев.

new
	Float:gPosX[MAX_PLAYERS],
	Float:gPosY[MAX_PLAYERS],
	Float:gPosZ[MAX_PLAYERS],
	
	TimerUpdatePos[MAX_PLAYERS]
;

#if !defined mysql_format_tquery
	stock string_mysql[1024];
#endif

// в авторизацию
TimerUpdatePos[playerid] = SetTimerEx("@UpdatePlayerPos", 1000*2, true, "i", playerid);

// в OnPlayerDisconnect
if(TimerUpdatePos[playerid] != -1){
	KillTimer(TimerUpdatePos[playerid]);
	TimerUpdatePos[playerid] = -1;
}

// в конец
@UpdatePlayerPos(playerid);
@UpdatePlayerPos(playerid)
{
	if(IsPlayerInBuilding(playerid)){
		return 0;
	}

	SavePlayerPos(playerid);
	return 1;
}

stock SavePlayerPos(playerid, bool:get = true){
	
	if(get){
		GetPlayerPos(playerid, gPosX[playerid], gPosY[playerid], gPosZ[playerid]);
	}
	
	#if !defined mysql_format_tquery
		#define mysql_format_tquery(%0,%1,%2)\
			mysql_tquery(%0,(format(string_mysql, sizeof string_mysql,%1,%2), string_mysql))
	#endif
	
	mysql_format_tquery(/* ид подключения к базе */, "UPDATE players_accounts SET posx = %f, posy = %f, posz = %f WHERE id = %d LIMIT 1", gPosX[playerid], gPosY[playerid], gPosZ[playerid], /*ид аккаунта*/);
	return 1;
}

stock IsPlayerInBuilding(playerid)
{
	new allow = _:false;
	
	allow |= GetPlayerVirtualWorld(playerid);
	allow |= GetPlayerInterior(playerid);
	
	return allow;
}

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


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

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

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

×

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

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