1. r1nk0 Пользователь

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

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

    Код (Unknown Language):
    1. #include <amxmodx>
    2. #include <engine>
    3. #include <hamsandwich>
    4.  
    5. public plugin_init()
    6. {
    7.    register_plugin("Parachute", "1.0", "maeStro");
    8.    RegisterHam(Ham_ObjectCaps, "player", "FwdHamObjectCaps");
    9. }
    10.  
    11. public FwdHamObjectCaps(id)
    12. {
    13.    if (!is_user_alive(id)||get_entity_flags(id) & FL_ONGROUND) return;
    14.    static Float:velocity[3];
    15.    entity_get_vector(id, EV_VEC_velocity, velocity);
    16.    if(velocity[2] < 0)
    17.    {
    18.       velocity[2] = (velocity[2] + 40.0 < -100) ? velocity[2] + 40.0 : -100.0;
    19.       entity_set_vector(id, EV_VEC_velocity, velocity);
    20.    }
    21. }
    и

    Код (Unknown Language):
    1. #include <amxmodx>
    2. #include <engine>
    3.  
    4. public plugin_init()
    5. {
    6.    register_plugin("Parachute", "1.0", "maeStro");
    7. }
    8.  
    9. public client_PreThink(id)
    10. {
    11.    if(!is_user_alive(id)) return;
    12.    if(get_user_button(id) & IN_USE)
    13.    {
    14.       if(get_entity_flags(id) & FL_ONGROUND) return;
    15.       static Float:velocity[3];
    16.       entity_get_vector(id, EV_VEC_velocity, velocity);
    17.       if(velocity[2] < 0)
    18.       {
    19.          velocity[2] = (velocity[2] + 40.0 < -100) ? velocity[2] + 40.0 : -100.0;
    20.          entity_set_vector(id, EV_VEC_velocity, velocity);
    21.       }
    22.    }
    23. }
    Второй вариант похуже как сказал Safety1st.
    Смысл был запилить покупной парашют с командой в чат или консоль.
    Получилось что то типа этого.

    Код (Unknown Language):
    1. #include <amxmodx>
    2. #include <engine>
    3.  
    4. new parachute_available[33] = false
    5.  
    6. public plugin_init()
    7. {
    8.    register_plugin("Parachute", "1.0", "maeStro");
    9.    register_clcmd( "say /parachute", "buy_parachute") //команда для покупки в чат /parachute
    10. }
    11.  
    12. public buy_parachute(id)
    13. {
    14.    parachute_available[id] = true
    15. }
    16.  
    17. public client_PreThink(id)
    18. {
    19.    if(!is_user_alive(id)) return;
    20.    if ((get_user_button(id) & IN_USE) && parachute_available[id])
    21.    {
    22.       if(get_entity_flags(id) & FL_ONGROUND) return;
    23.       static Float:velocity[3];
    24.       entity_get_vector(id, EV_VEC_velocity, velocity);
    25.       if(velocity[2] < 0)
    26.       {
    27.          velocity[2] = (velocity[2] + 40.0 < -100) ? velocity[2] + 40.0 : -100.0;
    28.          entity_set_vector(id, EV_VEC_velocity, velocity);
    29.       }
    30.    }
    31. }
    32.  
    33. public client_disconnect(id)
    34. {
    35.    parachute_available[id] = false //при выходе обнуляем покупку
    36. }
    37.  
    38. public client_death(killer,victim)
    39. {
    40.    parachute_available[victim] = false //при смерти обнуляем покупку
    41. }
    С вариантом похуже,хотелось бы с первым вариантом конечно.
    Но тут я непонимаю как добавить проверку куплен парашют или нет.

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

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

    Код (Unknown Language):
    1. public resetscore(id)
    2. {
    3.    if(!is_user_connected(id)) return PLUGIN_HANDLED
    4.  
    5.    new deaths = get_user_deaths(id)
    6.    new money = cs_get_user_money(id)
    7.      
    8.    if(get_pcvar_num(g_Enable) == 1)
    9.    {
    10.       if(deaths == 0)
    11.       {
    12.          client_printcolor(id, "%L", LANG_SERVER, "NO_HAVE_DEATHS")
    13.      
    14.          return PLUGIN_HANDLED
    15.       }
    16.       if(get_pcvar_num(g_ResetMoney))
    17.       {
    18.        
    19.          if(money > get_pcvar_num(iMoneyToReset))
    20.          {
    21.             cs_set_user_money(id, money - get_pcvar_num(iMoneyToReset))
    22.            
    23.             hasReset[id] = true
    24.            
    25.          }
    26.            
    27.          else
    28.          {
    29.             client_printcolor(id, "%L", LANG_SERVER, "NO_MONEY_TO_RESET")
    30.             client_printcolor(id, "%L", LANG_SERVER, "MSG_INF_NO_MONEY", money)
    31.             client_printcolor(id, "%L", LANG_SERVER, "MSG_INF_NO_MONEY2", get_pcvar_num(iMoneyToReset))
    32.        
    33.             return PLUGIN_HANDLED
    34.          }
    35.       }
    36.        
    37.       set_user_frags(id, 0)
    38.       cs_set_user_deaths(id, 0)
    39.        
    40.       client_printcolor(id, "%L", LANG_SERVER, "RESETSCORE")
    41.        
    42.       if(hasReset[id])
    43.       {
    44.          client_printcolor(id, "%L", LANG_SERVER, "MINUS_MONEY", get_pcvar_num(iMoneyToReset))
    45.        
    46.          hasReset[id] = false
    47.       }
    48.        
    49.       return PLUGIN_HANDLED
    50.    }
    51.  
    52.    else
    53.    {
    54.       client_printcolor(id, "%L", LANG_SERVER, "RESETSCORE_NOT_ENABLED")
    55.      
    56.       return PLUGIN_HANDLED
    57.    }
    58.      
    59.    return PLUGIN_CONTINUE
    60. }
    bonus.ini

    Код (Unknown Language):
    1. <call>
    2. plugin = resetscore.amxx
    3. name = LANG_AES_RS
    4. function = resetscore
    5. points = 1
     
  2. Phantom Команда форума

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

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

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

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

    Регистрация:
    27.02.15
    Сообщения:
    1.684
    Симпатии:
    790
    Пол:
    Мужской
    Telegram:
    ph4nt0m
    PHP:
    1. public FwdHamObjectCaps(id)
    2. {
    3.    if (!is_user_alive(id)||get_entity_flags(id) & FL_ONGROUND & parachute_available[id]) return;
    4.    static Float:velocity[3];
    5.    entity_get_vector(id, EV_VEC_velocity, velocity);
    6.    if(velocity[2] < 0)
    7.    {
    8.       velocity[2] = (velocity[2] + 40.0 < -100) ? velocity[2] + 40.0 : -100.0;
    9.       entity_set_vector(id, EV_VEC_velocity, velocity);
    10.    }
    11. }
    :D. Вот
    PHP:
    1. public FwdHamObjectCaps(id)
    2. {
    3.     if(!is_user_alive(id)||get_entity_flags(id) & FL_ONGROUND) return;
    4.     if(parachute_available[id])
    5.     {
    6.         static Float:velocity[3];
    7.         entity_get_vector(id, EV_VEC_velocity, velocity);
    8.         if(velocity[2] < 0)
    9.         {
    10.             velocity[2] = (velocity[2] + 40.0 < -100) ? velocity[2] + 40.0 : -100.0;
    11.             entity_set_vector(id, EV_VEC_velocity, velocity);
    12.         }
    13.     }
    14. }
    15.  
     
    r1nk0 нравится это.
  6. r1nk0 Пользователь

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

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

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

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

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

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

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

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