Пользователи, просматривающие тему (Пользователей: 0, Гостей: 0)

  1. r1nk0

    Регистрация:
    09.03.15
    Сообщения:
    234
    Симпатии:
    22
    Пол:
    Мужской
    Так как на cs-net.ua не помогли,может быть тут...

    Есть 2 плагина парашюта

    Код:
    #include <amxmodx>
    #include <engine>
    #include <hamsandwich>
    
    public plugin_init()
    {
       register_plugin("Parachute", "1.0", "maeStro");
       RegisterHam(Ham_ObjectCaps, "player", "FwdHamObjectCaps"); 
    }
    
    public FwdHamObjectCaps(id)
    {
       if (!is_user_alive(id)||get_entity_flags(id) & FL_ONGROUND) return;
       static Float:velocity[3];
       entity_get_vector(id, EV_VEC_velocity, velocity);
       if(velocity[2] < 0)
       {
          velocity[2] = (velocity[2] + 40.0 < -100) ? velocity[2] + 40.0 : -100.0;
          entity_set_vector(id, EV_VEC_velocity, velocity);
       }
    }
    и

    Код:
    #include <amxmodx>
    #include <engine>
    
    public plugin_init()
    {
       register_plugin("Parachute", "1.0", "maeStro");
    }
    
    public client_PreThink(id)
    {
       if(!is_user_alive(id)) return;
       if(get_user_button(id) & IN_USE)
       {
          if(get_entity_flags(id) & FL_ONGROUND) return;
          static Float:velocity[3];
          entity_get_vector(id, EV_VEC_velocity, velocity);
          if(velocity[2] < 0)
          {
             velocity[2] = (velocity[2] + 40.0 < -100) ? velocity[2] + 40.0 : -100.0;
             entity_set_vector(id, EV_VEC_velocity, velocity);
          }
       }
    }
    Второй вариант похуже как сказал Safety1st.
    Смысл был запилить покупной парашют с командой в чат или консоль.
    Получилось что то типа этого.

    Код:
    #include <amxmodx>
    #include <engine>
    
    new parachute_available[33] = false
    
    public plugin_init()
    {
       register_plugin("Parachute", "1.0", "maeStro");
       register_clcmd( "say /parachute", "buy_parachute") //команда для покупки в чат /parachute
    }
    
    public buy_parachute(id)
    {
       parachute_available[id] = true
    }
    
    public client_PreThink(id)
    {
       if(!is_user_alive(id)) return;
       if ((get_user_button(id) & IN_USE) && parachute_available[id])
       {
          if(get_entity_flags(id) & FL_ONGROUND) return;
          static Float:velocity[3];
          entity_get_vector(id, EV_VEC_velocity, velocity);
          if(velocity[2] < 0)
          {
             velocity[2] = (velocity[2] + 40.0 < -100) ? velocity[2] + 40.0 : -100.0;
             entity_set_vector(id, EV_VEC_velocity, velocity);
          }
       }
    }
    
    public client_disconnect(id)
    {
       parachute_available[id] = false //при выходе обнуляем покупку
    }
    
    public client_death(killer,victim)
    {
       parachute_available[victim] = false //при смерти обнуляем покупку
    }
    С вариантом похуже,хотелось бы с первым вариантом конечно.
    Но тут я непонимаю как добавить проверку куплен парашют или нет.

    Код:
    public FwdHamObjectCaps(id)
    {
       if (!is_user_alive(id)||get_entity_flags(id) & FL_ONGROUND & parachute_available[id]) return;
       static Float:velocity[3];
       entity_get_vector(id, EV_VEC_velocity, velocity);
       if(velocity[2] < 0)
       {
          velocity[2] = (velocity[2] + 40.0 < -100) ? velocity[2] + 40.0 : -100.0;
          entity_set_vector(id, EV_VEC_velocity, velocity);
       }
    }
    Так не работает,парашют есть,даже если ты его не купил.

    Но плагин работает с вторым вариантом.
    Собственно вопрос,правильно ли вообще код написано,ибо у меня сомнения большие.
    И немогу почему не вызывается функция покупки public buy_parachute(id) через AES как это указано в инструкции,когда например с плагина resetscore,можно легко вызвать типа.

    Код:
    public resetscore(id)
    {
       if(!is_user_connected(id)) return PLUGIN_HANDLED
      
       new deaths = get_user_deaths(id)
       new money = cs_get_user_money(id)
         
       if(get_pcvar_num(g_Enable) == 1)
       {
          if(deaths == 0)
          {
             client_printcolor(id, "%L", LANG_SERVER, "NO_HAVE_DEATHS")
         
             return PLUGIN_HANDLED
          }
          if(get_pcvar_num(g_ResetMoney))
          {
            
             if(money > get_pcvar_num(iMoneyToReset))
             {
                cs_set_user_money(id, money - get_pcvar_num(iMoneyToReset))
               
                hasReset[id] = true
               
             }
               
             else
             {
                client_printcolor(id, "%L", LANG_SERVER, "NO_MONEY_TO_RESET")
                client_printcolor(id, "%L", LANG_SERVER, "MSG_INF_NO_MONEY", money)
                client_printcolor(id, "%L", LANG_SERVER, "MSG_INF_NO_MONEY2", get_pcvar_num(iMoneyToReset))
            
                return PLUGIN_HANDLED 
             }
          }
            
          set_user_frags(id, 0)
          cs_set_user_deaths(id, 0)
            
          client_printcolor(id, "%L", LANG_SERVER, "RESETSCORE")
            
          if(hasReset[id])
          {
             client_printcolor(id, "%L", LANG_SERVER, "MINUS_MONEY", get_pcvar_num(iMoneyToReset))
            
             hasReset[id] = false
          }
            
          return PLUGIN_HANDLED
       }
      
       else
       {
          client_printcolor(id, "%L", LANG_SERVER, "RESETSCORE_NOT_ENABLED")
         
          return PLUGIN_HANDLED
       }
         
       return PLUGIN_CONTINUE
    }
    bonus.ini

    Код:
    <call>
    plugin = resetscore.amxx
    name = LANG_AES_RS
    function = resetscore
    points = 1
     
  2. Phantom Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.979
    Симпатии:
    944
    Пол:
    Мужской
    Telegram:
    ph4nt0m
    r1nk0, parachute_available[33] булевой должен быть, а не целочисленный, вроде как
     
  3. neygomon Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    8.573
    Симпатии:
    4.654
    Пол:
    Мужской
    parachute_available[id]
    ты проверяешь если куплен парашют то не давать пользоваться :D
     
  4. r1nk0

    Регистрация:
    09.03.15
    Сообщения:
    234
    Симпатии:
    22
    Пол:
    Мужской
    ну плагин как он есть сейчас,работает,но он в худшей вариации как я понял и функция не вызывается,точнее вызывается если

    Код:
    public buy_parachute(id)
    {
       parachute_available[id] = true
       return PLUGIN_HANDLED
    }
    но я не уверен что правильно вообще это все,так как не шарю :D
    --- добавлено 15.11.15 ---
    Код:
    public client_PreThink(id)
    {
       if(!is_user_alive(id)) return; \\ если юзер живой то продолжить типа.
       if ((get_user_button(id) & IN_USE) && parachute_available[id]) Если кнопка юза нажата и парашют куплен то типа выполняется сам код парашюта.
       {
    ну я как тут пытался сделать,ну по логике просто)
     
  5. Phantom Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.979
    Симпатии:
    944
    Пол:
    Мужской
    Telegram:
    ph4nt0m
    PHP:
    public FwdHamObjectCaps(id)
    {
       if (!
    is_user_alive(id)||get_entity_flags(id) & FL_ONGROUND parachute_available[id]) return;
       static 
    Float:velocity[3];
       
    entity_get_vector(idEV_VEC_velocityvelocity);
       if(
    velocity[2] < 0)
       {
          
    velocity[2] = (velocity[2] + 40.0 < -100) ? velocity[2] + 40.0 : -100.0;
          
    entity_set_vector(idEV_VEC_velocityvelocity);
       }
    }
    :D. Вот
    PHP:
    public FwdHamObjectCaps(id)
    {
        if(!
    is_user_alive(id)||get_entity_flags(id) & FL_ONGROUND) return;
        if(
    parachute_available[id])
        {
            static 
    Float:velocity[3];
            
    entity_get_vector(idEV_VEC_velocityvelocity);
            if(
    velocity[2] < 0)
            {
                
    velocity[2] = (velocity[2] + 40.0 < -100) ? velocity[2] + 40.0 : -100.0;
                
    entity_set_vector(idEV_VEC_velocityvelocity);
            }
        }
    }
     
    r1nk0 нравится это.
  6. r1nk0

    Регистрация:
    09.03.15
    Сообщения:
    234
    Симпатии:
    22
    Пол:
    Мужской
    Код:
    public client_PreThink(id)
    {
       if(!is_user_alive(id)) return; \\ если юзер живой то продолжить типа.
       if ((get_user_button(id) & IN_USE) && parachute_available[id]) Если
       {
    ну я как тут пытался сделать,ну по логике просто типа.
    Работает,а как быть с вот этой частью? как правильно

    Код:
    public buy_parachute(id)
    {
       parachute_available[id] = true \\ так функция вызывается нормально в AES 
       return PLUGIN_HANDLED
    }
    или
    Код:
    public buy_parachute(id)
    {
       parachute_available[id] = true \\ а так нет
    }
     
  7. Phantom Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.979
    Симпатии:
    944
    Пол:
    Мужской
    Telegram:
    ph4nt0m
    r1nk0, ну как вызывается, так и оставь
     
  8. r1nk0

    Регистрация:
    09.03.15
    Сообщения:
    234
    Симпатии:
    22
    Пол:
    Мужской
    ну это понятно,я имею ввиду правильно это или нет.
     
  9. Phantom Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.979
    Симпатии:
    944
    Пол:
    Мужской
    Telegram:
    ph4nt0m
    r1nk0, не знаю, если честно. Я с return PLUGIN_CONTINUE/HANDLED так и не подружился
     
  10. r1nk0

    Регистрация:
    09.03.15
    Сообщения:
    234
    Симпатии:
    22
    Пол:
    Мужской
    ну походу нужно,ибо только так нормально вызывается функция как и должна.но я опять же не уверен так непонял описание,особенно

    PLUGIN_HANDLED - Плагин останавливает операцию и плагины следующих ниже в plugins.ini не будут вызваны.
     
  11. neygomon Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    8.573
    Симпатии:
    4.654
    Пол:
    Мужской
    r1nk0, plugin_continue - выходит из функции, при этом другие плагины могут перехватить и обработать тоже
    plugin_handled - блокирует дальнейшее выполнение в других плагинах
     
    r1nk0 нравится это.