Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Warp System [new in samp industry]

Статус
В этой теме нельзя размещать новые ответы.

I'am Legend

Умник
Автор данной системы: I'am Legend
Помощь: DeimoS(Спасибо), Saibot(Спасибо)
Командный процессор:DC_CMD | ZCMD | DCMD
Хранения Данных:Mysql R39 X

[HR]Краткая информация:[/HR]​
[HR][/HR]

Система подойдет для всех модов, так-же подойдет на разбор новичков этой системы.​
Огромное спасибо DeimoS aka Eims, помог мне увидеть ошибку в коде.​
Если у вас есть более оптимизированный вариант кидайте его в комментарии, рассмотрим, и добавлю ваш вариант(Если конечно он лучше).​
Критика так-же присутствует, только без мата/оскорбления и еще прочего что нарушает правило.​

[HR]Особенности:[/HR]​
[HR][/HR]
  • 1.Не имеет не одного PVar'a.
  • 2.Не имеет багов.
  • 3.У автора данной системы прямые руки.
  • 4.Все команды хорошо функционируют.

[HR]1. Создания WARP'a(Команда)[/HR]​
[HR][/HR]

PHP:
CMD:setwarp(playerid, params[])
{
	if (isnull(params))
		return SendClientMessage(playerid,-1,!"Введите:/setwarp [name]");
	new
  		Float:position_x,
  		Float:position_y,
  		Float:position_z,
		int,
		virtual_world;

	if(!(1 < strlen(params) < 10))
	    return SendClientMessage(playerid,-1, !"[X] Названия варпа не может быть больше 10 символов или меньше 1");
	    
	GetPlayerPos(playerid, position_x, position_y, position_z);
	
	int = GetPlayerInterior(playerid);
	virtual_world = GetPlayerVirtualWorld(playerid);

	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[sizeof(mysql_string)-14+11+9+9+9+2*2];
	format(string, sizeof(string), mysql_string, params, position_x, position_y, position_z, int, virtual_world);
    mysql_function_query(connect,string,false,"","");

	return 1;
}

Все варп успешно создан и занесен в нашу базу данных, проверку на админку я не ставил, если вам нужно воткните сами.​

[HR]2.Сам телепорт по нашему WARP'y(Команда)[/HR]​
[HR][/HR]

PHP:
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[sizeof(fmt_str)-2+11];
	format(string, sizeof(string), fmt_str, params);
	
	mysql_function_query(connect,string,true,!"LoadWarpName","ds",playerid,params);
	return 1;
}
Теперь создадим наш коллбэк самого запроса:

PHP:
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);

	printf("position_x: %f, position_y: %f, position_z: %f, interior: %d, virtual_world: %d", position_x, position_y, position_z, interior, virtual_world);

    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;
}

Все телепорт успешно выполняется , вся система проверена, так-же я залогировал все действия.​

[HR]3.Теперь удалим наш WARP (Команда)[/HR]​
[HR][/HR]

PHP:
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[sizeof(mysql_fmt)-4+25];
	format(string, sizeof string, mysql_fmt, params);
	
	mysql_function_query(connect,string,false,"","");
	return 1;
}

Все удаления наше успешно выполнено, еще раз повторю все системы проверены, и работают.​

[HR]Посмотреть список варпов(команда):[/HR]​
[HR][/HR]

К глобальным переменным
PHP:
const WARP_LIST = 900;
const MAX_WARP_NAME = 10;
Сама команда
PHP:
CMD:warplist(playerid)
{
    mysql_function_query(connect, "SELECT * FROM `warps`", true, "@_WarpList", "i", playerid);
    return true;
}
В OnDialogResponse
PHP:
case WARP_LIST:
{
    if(!response)return true;
    static const fmt_str[] = "SELECT * FROM `warps` WHERE `name_warp` = '%s'";
    new string[sizeof(fmt_str)-2+MAX_WARP_NAME];
    format(string, sizeof(string), fmt_str, inputtext);
    mysql_function_query(connect,string,true,"LoadWarpName","ds",playerid,inputtext);
}
В конец мода
PHP:
@_WarpList(playerid);
@_WarpList(playerid)
{
    new rows, fields;
    cache_get_data(rows, fields);
    if(!rows)
        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;
}
Теперь в команде /warplist вы сможете посмотреть созданные варпы, а так же выбрать любой из них и сразу телепортироваться.​
Огромное спасибо Saibot!!​

[HR][/HR]
[HR][/HR]

При копировании на другие порталы указывайте обязательно автора!
Если увидели ошибку/или еще что пиши в комментарии, все обсудим.

[HR]Контакты:[/HR]​
[HR][/HR]

Skype: adminpgrp
VK: vk.com/dislikex​
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу