Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 17

Тема: Warp System

  1. #1
    Аватар для Long-
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.11.2016
    Сообщений
    131
    Репутация:
    23 ±

    Warp System

    Автор: Long-
    Командный процессор: DC_CMD
    Хранения данных: Mysql r39-4


    Информация:



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



    Особенности:



    • 1.Не имеет не одного PVar'a.
    • 2.Не имеет багов.
    • 3.У автора данной системы прямые руки.(Но это не точно)
    • 4.Все команды хорошо функционируют.



    Создание WARP'a командой:



    Ко всем глобальным переменным:


    PHP код:
    const WARP_LIST 900;
    const 
    MAX_WARP_NAME 10
    Команда:


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

        if(!(
    strlen(params) < MAX_WARP_NAME ))
            return 
    SendClientMessage(playerid,-1, !"[X] Названия варпа не может быть больше 10 символов или меньше 1");
            
        
    GetPlayerPos(playeridposition_xposition_yposition_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[sizeof(mysql_string)-14+11+9+9+9+2*2];
        
    format(stringsizeof(string), mysql_stringparamsposition_xposition_yposition_zGetPlayerInterior(playerid), GetPlayerVirtualWorld(playerid));
        
    mysql_function_query(connect,string,false,"","");

        return 
    1;

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



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



    PHP код:
    CMD:warp(playeridparams[])
    {
        if (
    isnull(params))
            return 
    SendClientMessage(playerid,-1, !"Введите:/warp [name]");
        if(!(
    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(stringsizeof(string), fmt_strparams);
        
        
    mysql_function_query(connect,string,true,!"LoadWarpName","ds",playerid,params);
        return 
    1;

    Теперь создадим наш коллбэк самого запроса:


    PHP код:
    forward LoadWarpName(playeridwarp[]);
    public 
    LoadWarpName(playeridwarp[])
    {
        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(playeridposition_xposition_yposition_z);
        
    SetPlayerInterior(playeridinterior);
        
    SetPlayerVirtualWorld(playeridvirtual_world);

        
    format(fmt_strsizeof(fmt_str), "Вы были телепортированы на варп [%s]"warp);
        
    SendClientMessage(playerid, -1fmt_str);
        return 
    1;

    Все телепорт успешно выполняется , вся система проверена.



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



    PHP код:
    CMD:deletewarp(playeridparams[])
    {
        if (
    isnull(params))
            return 
    SendClientMessage(playerid,-1, !"Введите:/deletewarp [name]");
        if(!(
    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(stringsizeof stringmysql_fmtparams);
        
        
    mysql_function_query(connect,string,false,"","");
        return 
    1;

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



    Посмотреть список варпов(команда) и телепорт при их нажатии:



    Сама команда:


    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(stringsizeof(string), fmt_strinputtext);
        
    mysql_function_query(connect,string,true,"LoadWarpName","d",playerid);

    PHP код:
    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 
    0rowsi++)
        {
            
    cache_get_field_content(i,"name_warp"name_warp);
            
    format(str_fmtsizeof(str_fmt), "%s%s\n",str_fmtname_warp);
        }
        
    ShowPlayerDialog(playerid,WARP_LIST,DIALOG_STYLE_LIST,"WarpList",str_fmt,"Выбрать","Выход");
        return 
    true;

    Теперь в команде /warplist вы сможете посмотреть созданные варпы, а так же выбрать любой из них и сразу телепортироваться.



    Немного еще информации:



    Выложил свою старенькую работу, около 2-3 месяца назад писал.
    Нашли какую то ошибку? Или более оптимизированный вариант? Напиши в комментарии.
    Последний раз редактировалось Long-; 06.03.2017 в 13:44.

  2. #2
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Я один не понял для чего такая система?
    (В MTA подобное в админке видел, но там то понятно для чего, а тут тупо респавн или откат к старым коордам?)
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  3. #3
    Аватар для Long-
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.11.2016
    Сообщений
    131
    Репутация:
    23 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Я один не понял для чего такая система?
    (В MTA подобное в админке видел, но там то понятно для чего, а тут тупо респавн или откат к старым коордам?)
    Нет, данная система создает точку варпа.
    То бишь, пишем /createwarp на этом месте где стоит игрок создается точка которая будет записана в БД, далее можно телепортироваться к этой точке вводом /warplist , высвечивается диалог варпов, при нажатии на любой он телепортирует на то место где вы установили варп(по имени варпа телепорт)

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    В /warplist ты вызываешь функцию @_WarpList, но самой функции нет :)
    И логирование можно было бы убрать
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. #5
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Тут случаем не получится так что будет 2(или более) варпа с одинаковым именем?
    А то я вот проверок не вижу)
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  6. #6
    Аватар для Long-
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.11.2016
    Сообщений
    131
    Репутация:
    23 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    В /warplist ты вызываешь функцию @_WarpList, но самой функции нет :)
    И логирование можно было бы убрать
    Спасибо за подсказку, исправил.

    - - - Добавлено - - -

    Цитата Сообщение от vovandolg Посмотреть сообщение
    Тут случаем не получится так что будет 2(или более) варпа с одинаковым именем?
    А то я вот проверок не вижу)
    Да, верно, спасибо.
    Исправлю.

  7. #7
    Аватар для Guldan
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.11.2016
    Сообщений
    43
    Репутация:
    2 ±
    int = GetPlayerInterior(playerid);
    virtual_world = GetPlayerVirtualWorld(playerid);
    Зачем создавать лишние переменные? когда можно и без их

  8. #8
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от Guldan Посмотреть сообщение
    Зачем создавать лишние переменные? когда можно и без их
    Можно, но так он затраты по скорости выполнения уменьшает.
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  9. #9
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Можно, но так он затраты по скорости выполнения уменьшает.
    Каким образом? Переменные, впоследствии, используются лишь в одном месте (при форматировании диалога). Он лишь лишние переменные инициализирует и лишнюю запись проводит.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  10. #10
    Аватар для Long-
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.11.2016
    Сообщений
    131
    Репутация:
    23 ±
    Убрал лишние переменные, спасибо Guldan

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •