Long-
02.03.2017, 15:08
Автор:
Long-
Командный процессор:
DC_CMD
Хранения данных:
Mysql r39-4
Информация:
Система подойдет для всех модов, так-же подойдет на разбор новичков этой системы.
Огромное спасибо DeimoS, помог мне увидеть ошибку в коде.
Если у вас есть более оптимизированный вариант кидайте его в комментарии, рассмотрим, и добавлю ваш вариант(Если конечно он лучше).
Критика так-же присутствует, только без мата/оскорбления и еще прочего что нарушает правило.
Особенности:
1.Не имеет не одного PVar'a.
2.Не имеет багов.
3.У автора данной системы прямые руки.(Но это не точно)
4.Все команды хорошо функционируют.
Создание WARP'a командой:
Ко всем глобальным переменным:
const WARP_LIST = 900;
const MAX_WARP_NAME = 10;
Команда:
CMD:setwarp(playerid, params[])
{
if (isnull(params))
return SendClientMessage(playerid,-1,!"Введите:/setwarp [name]");
new
Float:position_x,
Float:position_y,
Float:position_z;
if(!(1 < strlen(params) < MAX_WARP_NAME ))
return SendClientMessage(playerid,-1, !"[X] Названия варпа не может быть больше 10 символов или меньше 1");
GetPlayerPos(playerid, position_x, position_y, position_z);
static const mysql_string[] = "INSERT INTO `warps` (`name_warp`,`position_x`,`position_y`,`position_z`,`int`,`virtual_world`)\
VALUES ('%s','%f','%f','%f','%d','%d')";
new string;
format(string, sizeof(string), mysql_string, params, position_x, position_y, position_z, GetPlayerInterior(playerid), GetPlayerVirtualWorld(playerid));
mysql_function_query(connect,string,false,"","");
return 1;
}
[SIZE=1]Все варп успешно создан и занесен в нашу базу данных, проверку на админку я не ставил, если вам нужно воткните сами.
2.Сам телепорт по нашему WARP'y(Команда)
CMD:warp(playerid, params[])
{
if (isnull(params))
return SendClientMessage(playerid,-1, !"Введите:/warp [name]");
if(!(1 < strlen(params) < 10))
return SendClientMessage(playerid,-1, !"[X] Названия варпа не может быть больше 10 символов или меньше 1");
static const fmt_str[] = "SELECT * FROM `warps` WHERE `name_warp` = '%s'";
new string;
format(string, sizeof(string), fmt_str, params);
mysql_function_query(connect,string,true,!"LoadWarpName","ds",playerid,params);
return 1;
}
[SIZE=1]Теперь создадим наш коллбэк самого запроса:
forward LoadWarpName(playerid, warp[]);
public LoadWarpName(playerid, warp[])
{
if(!cache_get_row_count(connect))
return SendClientMessage(playerid, -1, "Такого WARP'a не существует.(Используйте /warps -> Warp List)");
new
fmt_str[33-2+10+3],
Float:position_x = cache_get_field_content_float(0, "position_x", connect),
Float:position_y = cache_get_field_content_float(0, "position_y", connect),
Float:position_z = cache_get_field_content_float(0, "position_z", connect),
interior = cache_get_field_content_int(0, "int", connect),
virtual_world = cache_get_field_content_int(0, "virtual_world", connect);
SetPlayerPos(playerid, position_x, position_y, position_z);
SetPlayerInterior(playerid, interior);
SetPlayerVirtualWorld(playerid, virtual_world);
format(fmt_str, sizeof(fmt_str), "Вы были телепортированы на варп [%s]", warp);
SendClientMessage(playerid, -1, fmt_str);
return 1;
}
Все телепорт успешно выполняется , вся система проверена.
3.Теперь удалим наш WARP (Команда)
CMD:deletewarp(playerid, params[])
{
if (isnull(params))
return SendClientMessage(playerid,-1, !"Введите:/deletewarp [name]");
if(!(1 < strlen(params) < 10))
return SendClientMessage(playerid,-1, !"[X] Названия варпа не может быть больше 10 символов или меньше 1");
static const mysql_fmt[] = "DELETE FROM `warps` WHERE `name_warp` = '%s'";
new string;
format(string, sizeof string, mysql_fmt, params);
mysql_function_query(connect,string,false,"","");
return 1;
}
[SIZE=1]Все удаления наше успешно выполнено, еще раз повторю все системы проверены, и работают.
Посмотреть список варпов(команда) и телепорт при их нажатии:
Сама команда:
CMD:warplist(playerid)
{
mysql_function_query(connect, "SELECT * FROM `warps`", true, "WarpList", "i", playerid);
return true;
}
В OnDialogResponse:
case WARP_LIST:
{
if(!response)return true;
static const fmt_str[] = "SELECT * FROM `warps` WHERE `name_warp` = '%s'";
new string;
format(string, sizeof(string), fmt_str, inputtext);
mysql_function_query(connect,string,true,"LoadWarpName","d",playerid);
}
forward WarpList(playerid);
public WarpList(playerid)
{
if(!cache_get_row_count(connect))
return SendClientMessage(playerid, -1, !"Созданных Варпов не найдено!");
const MAX_WARP = 50;
new name_warp[MAX_WARP_NAME],
str_fmt[MAX_WARP_NAME*MAX_WARP];
for(new i = 0; i < rows; i++)
{
cache_get_field_content(i,"name_warp", name_warp);
format(str_fmt, sizeof(str_fmt), "%s%s\n",str_fmt, name_warp);
}
ShowPlayerDialog(playerid,WARP_LIST,DIALOG_STYLE_LIST,"WarpList",str_fmt,"Выбрать","Выход");
return true;
}
[SIZE=1]Теперь в команде /warplist вы сможете посмотреть созданные варпы, а так же выбрать любой из них и сразу телепортироваться.
Немного еще информации:
Выложил свою старенькую работу, около 2-3 месяца назад писал.
Нашли какую то ошибку? Или более оптимизированный вариант? Напиши в комментарии.
Long-
Командный процессор:
DC_CMD
Хранения данных:
Mysql r39-4
Информация:
Система подойдет для всех модов, так-же подойдет на разбор новичков этой системы.
Огромное спасибо DeimoS, помог мне увидеть ошибку в коде.
Если у вас есть более оптимизированный вариант кидайте его в комментарии, рассмотрим, и добавлю ваш вариант(Если конечно он лучше).
Критика так-же присутствует, только без мата/оскорбления и еще прочего что нарушает правило.
Особенности:
1.Не имеет не одного PVar'a.
2.Не имеет багов.
3.У автора данной системы прямые руки.(Но это не точно)
4.Все команды хорошо функционируют.
Создание WARP'a командой:
Ко всем глобальным переменным:
const WARP_LIST = 900;
const MAX_WARP_NAME = 10;
Команда:
CMD:setwarp(playerid, params[])
{
if (isnull(params))
return SendClientMessage(playerid,-1,!"Введите:/setwarp [name]");
new
Float:position_x,
Float:position_y,
Float:position_z;
if(!(1 < strlen(params) < MAX_WARP_NAME ))
return SendClientMessage(playerid,-1, !"[X] Названия варпа не может быть больше 10 символов или меньше 1");
GetPlayerPos(playerid, position_x, position_y, position_z);
static const mysql_string[] = "INSERT INTO `warps` (`name_warp`,`position_x`,`position_y`,`position_z`,`int`,`virtual_world`)\
VALUES ('%s','%f','%f','%f','%d','%d')";
new string;
format(string, sizeof(string), mysql_string, params, position_x, position_y, position_z, GetPlayerInterior(playerid), GetPlayerVirtualWorld(playerid));
mysql_function_query(connect,string,false,"","");
return 1;
}
[SIZE=1]Все варп успешно создан и занесен в нашу базу данных, проверку на админку я не ставил, если вам нужно воткните сами.
2.Сам телепорт по нашему WARP'y(Команда)
CMD:warp(playerid, params[])
{
if (isnull(params))
return SendClientMessage(playerid,-1, !"Введите:/warp [name]");
if(!(1 < strlen(params) < 10))
return SendClientMessage(playerid,-1, !"[X] Названия варпа не может быть больше 10 символов или меньше 1");
static const fmt_str[] = "SELECT * FROM `warps` WHERE `name_warp` = '%s'";
new string;
format(string, sizeof(string), fmt_str, params);
mysql_function_query(connect,string,true,!"LoadWarpName","ds",playerid,params);
return 1;
}
[SIZE=1]Теперь создадим наш коллбэк самого запроса:
forward LoadWarpName(playerid, warp[]);
public LoadWarpName(playerid, warp[])
{
if(!cache_get_row_count(connect))
return SendClientMessage(playerid, -1, "Такого WARP'a не существует.(Используйте /warps -> Warp List)");
new
fmt_str[33-2+10+3],
Float:position_x = cache_get_field_content_float(0, "position_x", connect),
Float:position_y = cache_get_field_content_float(0, "position_y", connect),
Float:position_z = cache_get_field_content_float(0, "position_z", connect),
interior = cache_get_field_content_int(0, "int", connect),
virtual_world = cache_get_field_content_int(0, "virtual_world", connect);
SetPlayerPos(playerid, position_x, position_y, position_z);
SetPlayerInterior(playerid, interior);
SetPlayerVirtualWorld(playerid, virtual_world);
format(fmt_str, sizeof(fmt_str), "Вы были телепортированы на варп [%s]", warp);
SendClientMessage(playerid, -1, fmt_str);
return 1;
}
Все телепорт успешно выполняется , вся система проверена.
3.Теперь удалим наш WARP (Команда)
CMD:deletewarp(playerid, params[])
{
if (isnull(params))
return SendClientMessage(playerid,-1, !"Введите:/deletewarp [name]");
if(!(1 < strlen(params) < 10))
return SendClientMessage(playerid,-1, !"[X] Названия варпа не может быть больше 10 символов или меньше 1");
static const mysql_fmt[] = "DELETE FROM `warps` WHERE `name_warp` = '%s'";
new string;
format(string, sizeof string, mysql_fmt, params);
mysql_function_query(connect,string,false,"","");
return 1;
}
[SIZE=1]Все удаления наше успешно выполнено, еще раз повторю все системы проверены, и работают.
Посмотреть список варпов(команда) и телепорт при их нажатии:
Сама команда:
CMD:warplist(playerid)
{
mysql_function_query(connect, "SELECT * FROM `warps`", true, "WarpList", "i", playerid);
return true;
}
В OnDialogResponse:
case WARP_LIST:
{
if(!response)return true;
static const fmt_str[] = "SELECT * FROM `warps` WHERE `name_warp` = '%s'";
new string;
format(string, sizeof(string), fmt_str, inputtext);
mysql_function_query(connect,string,true,"LoadWarpName","d",playerid);
}
forward WarpList(playerid);
public WarpList(playerid)
{
if(!cache_get_row_count(connect))
return SendClientMessage(playerid, -1, !"Созданных Варпов не найдено!");
const MAX_WARP = 50;
new name_warp[MAX_WARP_NAME],
str_fmt[MAX_WARP_NAME*MAX_WARP];
for(new i = 0; i < rows; i++)
{
cache_get_field_content(i,"name_warp", name_warp);
format(str_fmt, sizeof(str_fmt), "%s%s\n",str_fmt, name_warp);
}
ShowPlayerDialog(playerid,WARP_LIST,DIALOG_STYLE_LIST,"WarpList",str_fmt,"Выбрать","Выход");
return true;
}
[SIZE=1]Теперь в команде /warplist вы сможете посмотреть созданные варпы, а так же выбрать любой из них и сразу телепортироваться.
Немного еще информации:
Выложил свою старенькую работу, около 2-3 месяца назад писал.
Нашли какую то ошибку? Или более оптимизированный вариант? Напиши в комментарии.