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

  1. petrnikolae4

    Регистрация:
    22.03.15
    Сообщения:
    23
    Симпатии:
    1
    Пол:
    Мужской
    На данный момент стоит плагин stealthebomb:
    Плагин позволяет попросить у террора бомбу.
    Надо подойти к нему и нажать "использовать" - у него появится выбор шо делать :
    1)передать бомбу
    2)Не дать бомбу
    3)И, как я понял, послать куда подальше :) Игрока больше нельзя будет спрашивать.

    Но зачастую попадаются не только игроки забывающие основную задачу, но и упертые валенки которые не хотят бомбу отдавать. Помогите вырезать этот опросник что бы просто отнималась бомба.
    /* AMX Mod X
    * Steal the Bomb
    *
    * (c) Copyright 2006 by VEN/Satan
    *
    * This file is provided as is (no warranties)
    *
    * - to take the bomb:
    * - come close to the carrier (distance < 50, configurable)
    * - aim at the carrier
    * - USE the carrier (i.e. "+use" command which usually bound to the "E" key)
    * - appropriate barney speak sound would be played:
    * - for both persons: to indicate that menu is opened
    * - for recipient: to indicate that bomb queries is restricted by the current carrier
    * - bomb carrier's menu contains 3 items:
    * - 1. "Yes": transfers the bomb to the recipient (transfers, not just drops)
    * - 2. "No": refuses to transfer the bomb
    * - 3. "No, don't ask me again": refuses and disables menu queries for that carrier for the current round
    * - after selection appropriate barney speak sound would be played for recipient to indicate the carrier's choice
    * - menu display time is 7 seconds (configurable)
    * - if no menu item is selected while menu is opened, bomb would be transferred to the recipient automatically
    * - plugin will have no effect at non-bomb maps
    * - fakemeta module required
    *
    * Credits:
    * ^_^Satan^_^: Idea, original coding.
    * VEN: This coding :p
    *
    * Versions:
    * 3.2 - backpack transfer method improved
    * 3.1 - now it's not possible to "ask" if bomb is planting
    * now "ask" restriction clears after bomb drop
    * get carrier id method changed to more efficient one
    * 3.0 - now fakemeta module instead of engine required
    * prethink method changed to use-sound hook
    * some other changes
    */

    #include <amxmodx>
    #include <fakemeta>

    // plugin's main information
    #define PLUGIN_NAME "Steal the Bomb"
    #define PLUGIN_VERSION "3.2"
    #define PLUGIN_AUTHOR "VEN/Satan"

    #define MAX_DISTANCE 50
    #define MENU_TIME 7
    #define MENU_KEYS (1<<0)|(1<<1)|(1<<2)

    new MENU_HEADER[] = "Отдать бомбу?"
    new MENU_BODY[] = "\yОтдать бомбу?^n^n\w1. Отдать^n2. Не отдавать^n3. Не отдавать, и не спрашивать меня более^n"

    #define TASK_ID 594753
    #define TEAM_T 1

    #define IN_USE (1<<5)
    #define FL_ONGROUND (1<<9)

    new SOUND_MENU[] = "spk barney/thinking"
    new SOUND_YES[] = "spk barney/yup"
    new SOUND_NO[] = "spk barney/nope"
    new SOUND_DONT[] = "spk barney/dontaskme"

    new USE_SOUND[] = "common/wpn_denyselect.wav"

    new DROP[] = "drop"
    new WEAPON[] = "weapon_c4"
    new CLASSNAME[] = "classname"

    new g_stealer
    new g_carrier

    new bool:g_dontask
    new bool:g_planting

    new g_maxplayers

    public plugin_init() {
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)

    if (!engfunc(EngFunc_FindEntityByString, -1, CLASSNAME, "func_bomb_target"))
    return

    register_event("WeapPickup", "event_got_bomb", "be", "1=6")
    register_event("BarTime", "event_bar_time", "be")
    register_event("TextMsg", "clear", "bc", "2=#Game_bomb_drop")
    register_event("TextMsg", "clear", "a", "2=#Bomb_Planted")
    register_event("HLTV", "clear", "a", "1=0", "2=0")

    register_forward(FM_EmitSound, "forward_emit_sound")

    register_menucmd(register_menuid(MENU_HEADER), MENU_KEYS, "menu_give_bomb")

    g_maxplayers = get_maxplayers()
    }

    public forward_emit_sound(id, channel, sound[]) {
    if (id > g_maxplayers || !id || !equali(sound, USE_SOUND) || !g_carrier || g_planting || !is_user_alive(id) ||
    get_user_team(id) != TEAM_T || !(pev(id, pev_button) & IN_USE) || task_exists(TASK_ID))
    return FMRES_IGNORED

    new id2, body, Float:distance = get_user_aiming(id, id2, body)
    if (id2 != g_carrier || !is_user_alive(id2) || distance > MAX_DISTANCE)
    return FMRES_IGNORED

    if (g_dontask) {
    client_cmd(id, SOUND_DONT)
    return FMRES_SUPERCEDE
    }

    g_stealer = id
    set_task(float(MENU_TIME), "task_bomb_drop", TASK_ID)

    client_cmd(id, SOUND_MENU)
    client_cmd(id2, SOUND_MENU)
    show_menu(id2, MENU_KEYS, MENU_BODY, MENU_TIME)

    return FMRES_SUPERCEDE
    }

    public menu_give_bomb(id, key) {
    if (id != g_carrier || !check())
    return PLUGIN_HANDLED

    clear_task()

    switch (key) {
    case 0: {
    new stealer = g_stealer
    if (transfer())
    client_cmd(stealer, SOUND_YES)
    }
    case 1: {
    client_cmd(g_stealer, SOUND_NO)
    }
    case 2: {
    g_dontask = true
    client_cmd(g_stealer, SOUND_DONT)
    }
    }

    return PLUGIN_HANDLED
    }

    public task_bomb_drop() {
    if (!g_planting && check())
    transfer()
    }

    bool:check() {
    if (!is_user_alive(g_stealer) || !is_user_alive(g_carrier) || get_user_team(g_stealer) != TEAM_T)
    return false

    return true
    }

    bool:transfer() {
    new stealer = g_stealer
    engclient_cmd(g_carrier, DROP, WEAPON)
    new c4 = engfunc(EngFunc_FindEntityByString, -1, CLASSNAME, WEAPON)
    if (!c4)
    return false

    new backpack = pev(c4, pev_owner)
    if (backpack <= g_maxplayers)
    return false

    set_pev(backpack, pev_flags, pev(backpack, pev_flags) | FL_ONGROUND)
    dllfunc(DLLFunc_Touch, backpack, stealer)

    return true
    }

    clear_task() {
    if (task_exists(TASK_ID))
    remove_task(TASK_ID)
    }

    public event_got_bomb(id) {
    g_carrier = id
    }

    public event_bar_time(id) {
    if (id == g_carrier)
    g_planting = bool:read_data(1)
    }

    public clear() {
    clear_task()
    g_stealer = 0
    g_carrier = 0
    g_dontask = false
    g_planting = false
    }
     
  2. neygomon Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    8.581
    Симпатии:
    4.655
    Пол:
    Мужской
    petrnikolae4, нормально исходник выложи..
     
  3. petrnikolae4

    Регистрация:
    22.03.15
    Сообщения:
    23
    Симпатии:
    1
    Пол:
    Мужской
     

    Вложения:

  4. neygomon Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    8.581
    Симпатии:
    4.655
    Пол:
    Мужской
    petrnikolae4, как то так
     

    Вложения:

    petrnikolae4 нравится это.
  5. petrnikolae4

    Регистрация:
    22.03.15
    Сообщения:
    23
    Симпатии:
    1
    Пол:
    Мужской
    Спасибо большое
     
  6. Murder

    Регистрация:
    01.03.15
    Сообщения:
    254
    Симпатии:
    17
    Пол:
    Мужской
    Как добавить в этот плагин фраг доступа? Чтоб, админ мог только забирать бомбу?
     
  7. HoBu4oK VIP user

    Регистрация:
    28.02.15
    Сообщения:
    508
    Симпатии:
    77
    В таком случае, лучше чтобы бомбу можно было забирать без всяких вопросов
     
  8. Murder

    Регистрация:
    01.03.15
    Сообщения:
    254
    Симпатии:
    17
    Пол:
    Мужской
    Так так и есть, подбежал на "Е" нажал, и бомба твоя.
     
  9. Murder

    Регистрация:
    01.03.15
    Сообщения:
    254
    Симпатии:
    17
    Пол:
    Мужской
    Помогите добавить проверку на флаг.
    Код:
    #include <amxmodx>
    #include <fakemeta>
    
    // plugin's main information
    #define PLUGIN_NAME "Steal the Bomb"
    #define PLUGIN_VERSION "3.2"
    #define PLUGIN_AUTHOR "VEN/Satan"
    
    #define MAX_DISTANCE 50
    
    #define TASK_ID 594753
    #define TEAM_T 1
    
    #define IN_USE (1<<5)
    #define    FL_ONGROUND (1<<9)
    
    new SOUND_DONT[] = "spk barney/dontaskme"
    new USE_SOUND[] = "common/wpn_denyselect.wav"
    
    new DROP[] = "drop"
    new WEAPON[] = "weapon_c4"
    new CLASSNAME[] = "classname"
    
    new g_stealer
    new g_carrier
    
    new bool:g_dontask
    new bool:g_planting
    
    new g_maxplayers
    
    public plugin_init() {
        register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    
        if (!engfunc(EngFunc_FindEntityByString, -1, CLASSNAME, "func_bomb_target"))
            return
    
        register_event("WeapPickup", "event_got_bomb", "be", "1=6")
        register_event("BarTime", "event_bar_time", "be")
        register_event("TextMsg", "clear", "bc", "2=#Game_bomb_drop")
        register_event("TextMsg", "clear", "a", "2=#Bomb_Planted")
        register_event("HLTV", "clear", "a", "1=0", "2=0")
    
        register_forward(FM_EmitSound, "forward_emit_sound")
    
        g_maxplayers = get_maxplayers()
    }
    
    public forward_emit_sound(id, channel, sound[]) {
        if (id > g_maxplayers || !id || !equali(sound, USE_SOUND) || !g_carrier || g_planting || !is_user_alive(id) ||
        get_user_team(id) != TEAM_T || !(pev(id, pev_button) & IN_USE) || task_exists(TASK_ID))
            return FMRES_IGNORED
    
        new id2, body, Float:distance = get_user_aiming(id, id2, body)
        if (id2 != g_carrier || !is_user_alive(id2) || distance > MAX_DISTANCE)
            return FMRES_IGNORED
    
        if (g_dontask) {
            client_cmd(id, SOUND_DONT)
            return FMRES_SUPERCEDE
        }
    
        g_stealer = id
        set_task(0.1, "task_bomb_drop", TASK_ID)
        return FMRES_SUPERCEDE
    }
    
    public task_bomb_drop() {
        if (!g_planting && check())
            transfer()
    }
    
    bool:check() {
        if (!is_user_alive(g_stealer) || !is_user_alive(g_carrier) || get_user_team(g_stealer) != TEAM_T)
            return false
    
        return true
    }
    
    bool:transfer() {
        new stealer = g_stealer
        engclient_cmd(g_carrier, DROP, WEAPON)
        new c4 = engfunc(EngFunc_FindEntityByString, -1, CLASSNAME, WEAPON)
        if (!c4)
            return false
    
        new backpack = pev(c4, pev_owner)
        if (backpack <= g_maxplayers)
            return false
    
        set_pev(backpack, pev_flags, pev(backpack, pev_flags) | FL_ONGROUND)
        dllfunc(DLLFunc_Touch, backpack, stealer)
    
        return true
    }
    
    public event_got_bomb(id) {
        g_carrier = id
    }
    
    public event_bar_time(id) {
        if (id == g_carrier)
            g_planting = bool:read_data(1)
    }
    
    public clear() {
        remove_task(TASK_ID)
        g_stealer = 0
        g_carrier = 0
        g_dontask = false
        g_planting = false
    }
    За ранее спасибо
    :help:
     
  10. Phantom Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.980
    Симпатии:
    944
    Пол:
    Мужской
    Telegram:
    ph4nt0m
    Murder, уточни на какой флаг
     
  11. Murder

    Регистрация:
    01.03.15
    Сообщения:
    254
    Симпатии:
    17
    Пол:
    Мужской
    Phantom, ADMIN_LEVEL_G
     
  12. Phantom Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.980
    Симпатии:
    944
    Пол:
    Мужской
    Telegram:
    ph4nt0m
    Пробуй
    Код:
    #include <amxmodx>
    #include <fakemeta>
    
    #define PLUGIN_NAME "Steal the Bomb"
    #define PLUGIN_VERSION "3.2"
    #define PLUGIN_AUTHOR "VEN/Satan"
    
    #define MAX_DISTANCE    50
    #define FLAG        ADMIN_LEVEL_G
    
    #define TASK_ID 594753
    #define TEAM_T 1
    
    #define IN_USE (1<<5)
    #define    FL_ONGROUND (1<<9)
    
    new SOUND_DONT[] = "spk barney/dontaskme"
    new USE_SOUND[] = "common/wpn_denyselect.wav"
    
    new DROP[] = "drop"
    new WEAPON[] = "weapon_c4"
    new CLASSNAME[] = "classname"
    
    new g_stealer
    new g_carrier
    
    new bool:g_dontask
    new bool:g_planting
    
    new g_maxplayers
    
    public plugin_init()
    {
        register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    
        if(!engfunc(EngFunc_FindEntityByString, -1, CLASSNAME, "func_bomb_target")) return
    
        register_event("WeapPickup", "event_got_bomb", "be", "1=6")
        register_event("BarTime", "event_bar_time", "be")
        register_event("TextMsg", "clear", "bc", "2=#Game_bomb_drop")
        register_event("TextMsg", "clear", "a", "2=#Bomb_Planted")
        register_event("HLTV", "clear", "a", "1=0", "2=0")
    
        register_forward(FM_EmitSound, "forward_emit_sound")
    
        g_maxplayers = get_maxplayers()
    }
    
    public forward_emit_sound(id, channel, sound[])
    {
        if(id > g_maxplayers || !id || !equali(sound, USE_SOUND) || !g_carrier || g_planting || !is_user_alive(id) ||
        get_user_team(id) != TEAM_T || !(pev(id, pev_button) & IN_USE) || task_exists(TASK_ID))
            return FMRES_IGNORED
    
        new id2, body, Float:distance = get_user_aiming(id, id2, body)
        if(id2 != g_carrier || !is_user_alive(id2) || distance > MAX_DISTANCE)
            return FMRES_IGNORED
    
        if(g_dontask)
        {
            client_cmd(id, SOUND_DONT)
            return FMRES_SUPERCEDE
        }
        g_stealer = id
        set_task(0.1, "task_bomb_drop", TASK_ID)
        return FMRES_SUPERCEDE
    }
    
    public task_bomb_drop()
        if(get_user_flags(g_stealer) & FLAG && !g_planting && check()) transfer()
    
    bool:check()
    {
        if(!is_user_alive(g_stealer) || !is_user_alive(g_carrier) || get_user_team(g_stealer) != TEAM_T)
            return false
    
        return true
    }
    
    bool:transfer()
    {
        new stealer = g_stealer
        engclient_cmd(g_carrier, DROP, WEAPON)
        new c4 = engfunc(EngFunc_FindEntityByString, -1, CLASSNAME, WEAPON)
        if(!c4) return false
    
        new backpack = pev(c4, pev_owner)
        if(backpack <= g_maxplayers)
            return false
    
        set_pev(backpack, pev_flags, pev(backpack, pev_flags) | FL_ONGROUND)
        dllfunc(DLLFunc_Touch, backpack, stealer)
    
        return true
    }
    
    public event_got_bomb(id)
        g_carrier = id
    
    public event_bar_time(id)
    {
        if(id == g_carrier)
            g_planting = bool:read_data(1)
    }
    
    public clear()
    {
        remove_task(TASK_ID)
        g_stealer = 0
        g_carrier = 0
        g_dontask = false
        g_planting = false
    }
     
    Murder нравится это.
  13. Murder

    Регистрация:
    01.03.15
    Сообщения:
    254
    Симпатии:
    17
    Пол:
    Мужской
    Phantom, Спасибо большое , завтра попробую, тк в данный момент не могу проверить .
     
  14. Murder

    Регистрация:
    01.03.15
    Сообщения:
    254
    Симпатии:
    17
    Пол:
    Мужской
    Phantom, Еще раз спасибо, все работает.
     
  15. Sly

    Регистрация:
    17.11.15
    Сообщения:
    53
    Симпатии:
    25
    Пол:
    Мужской
    на карте de_kabul почему то не отнимает
     
  16. 2avar21n

    Регистрация:
    18.09.15
    Сообщения:
    71
    Симпатии:
    8
    Пол:
    Мужской
    VKcom:
    2AVAR21N
    у меня не корректно работает, чтобы бомбер не отвечал - бомба всё равно передаётся, а менюшка больше на фикцию похожа (ну на мой взгляд, хз я не кодер80lvl)
    конкретно на этой мапе не проверял, но на нём так же не корректо работает bad camper, если в настройках выставить, что кемперить нельзя только аттакующим, то он считает аттакуюшими CT. Мб это изза одного плента, хз )