PDA

Просмотр полной версии : [Мануал] Сохранение позиции при выходе [ MySQL R7+ ]



Valera_Trefilov
21.10.2014, 18:21
#define TABLE_ACCOUNT ""
// таблица аккаунтов
#define PosX ""
// названия в структуре таблице колонки позиции по иксу
#define PosY ""
// названия в структуре таблице колонки позиции по игрику
#define PosZ ""
// названия в структуре таблице колонки позиции по зэт
#define Int ""
// названия в структуре таблице колонки интерьера
#define World ""
// названия в структуре таблице колонки вирт. мира
#define Name ""
// названия в структуре таблице колонки имя


В OnPlayerDisconnect ( Сохраняем значения )


stock SavePositionExit(playerid)
{
new Float: SavePosition[3],
query_string[128];

GetPlayerPos(playerid, SavePosition[0], SavePosition[1], SavePosition[2]);

format(query_string, sizeof(query_string),
"UPDATE "TABLE_ACCOUNT" SET `"PosX"` = '%f', `"PosY"` = '%f', `"PosZ"` = '%f', \
`"Int"` = '%d', `"World"` = '%d' WHERE `"Name"` = '%s'",
SavePosition[0],
SavePosition[1],
SavePosition[2],
GetPlayerInterior(playerid),
GetPlayerVirtualWorld(playerid));
mysql_function_query(connectionHandle, query_string, 0, "","");
}


В сток или функции , там где логинится игрок ( где нужно телепортировать игрока )


stock SetPositionExit(playerid)
{
SetPlayerPos(playerid,
cache_get_field_content_float(0,""PosX"",connectionHandle),
cache_get_field_content_float(0,""PosY"",connectionHandle),
cache_get_field_content_float(0,""PosZ"",connectionHandle));
SetPlayerVirtualWorld(playerid, cache_get_field_content_int(0,""World"",connectionHandle));
SetPlayerInterior(playerid, cache_get_field_content_int(0,""Int"",connectionHandle));
return 1;
}


Не-то чтобы баян.
Но вполне рабочая, и функциональная система. Которая работать будет под любой мод на MySQL.
Если вы что-то не поняли пишите в теме.


Перевел в инклуд. Ссылка: Кликабельно (http://rghost.ru/58758259)
Как использовать с инклудом:




#define TABLE_ACCOUNT "accounts"
#define PosX "PosX"
#define PosY "PosY"
#define PosZ "PosZ"
#define Int "Int"
#define World "World"
#define Name "player_name"
#include <t_teleport>

Макросы (#define) меняем на свои.

Там где вы хотите ТП игрока:


SetPositionExit(playerid);

wAx
22.10.2014, 20:47
Не знаю как по скорости, но на переменных выглядело бы лучше, это точно..


#define TABLE_ACCOUNT "" // таблица аккаунтов
#define PosX "" // названия в структуре таблице колонки позиции по иксу
#define PosY "" // названия в структуре таблице колонки позиции по игрику
#define PosZ "" // названия в структуре таблице колонки позиции по зэт
#define Int "" // названия в структуре таблице колонки интерьера
#define World ""// названия в структуре таблице колонки вирт. мира
#define Name "" // названия в структуре таблице колонки имя

Зачем все усложнять?

Valera_Trefilov
22.10.2014, 21:46
Не знаю как по скорости, но на переменных выглядело бы лучше, это точно..


#define TABLE_ACCOUNT "" // таблица аккаунтов
#define PosX "" // названия в структуре таблице колонки позиции по иксу
#define PosY "" // названия в структуре таблице колонки позиции по игрику
#define PosZ "" // названия в структуре таблице колонки позиции по зэт
#define Int "" // названия в структуре таблице колонки интерьера
#define World ""// названия в структуре таблице колонки вирт. мира
#define Name "" // названия в структуре таблице колонки имя

Зачем все усложнять?

Ну мало-ли ты новичек?

DeimoS
22.10.2014, 23:58
Не знаю как по скорости, но на переменных выглядело бы лучше, это точно..

А ещё проще было бы вызвать функции "cache_get_field_content..." напрямую в SetPlayerPos и т.п.

Valera_Trefilov
28.10.2014, 16:10
Обновлено.
Переписан код.
Также сделан инклуд для удобства.