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 Его Темнейшество :j Команда форума

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

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

    Вложения:

  4. neygomon Его Темнейшество :j Команда форума

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

    Вложения:

    petrnikolae4 нравится это.
  5. petrnikolae4 Пользователь

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

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

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

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

    Регистрация:
    01.03.15
    Сообщения:
    254
    Симпатии:
    17
    Пол:
    Мужской
    Помогите добавить проверку на флаг.
    Код (Unknown Language):
    1. #include <amxmodx>
    2. #include <fakemeta>
    3.  
    4. // plugin's main information
    5. #define PLUGIN_NAME "Steal the Bomb"
    6. #define PLUGIN_VERSION "3.2"
    7. #define PLUGIN_AUTHOR "VEN/Satan"
    8.  
    9. #define MAX_DISTANCE 50
    10.  
    11. #define TASK_ID 594753
    12. #define TEAM_T 1
    13.  
    14. #define IN_USE (1<<5)
    15. #define    FL_ONGROUND (1<<9)
    16.  
    17. new SOUND_DONT[] = "spk barney/dontaskme"
    18. new USE_SOUND[] = "common/wpn_denyselect.wav"
    19.  
    20. new DROP[] = "drop"
    21. new WEAPON[] = "weapon_c4"
    22. new CLASSNAME[] = "classname"
    23.  
    24. new g_stealer
    25. new g_carrier
    26.  
    27. new bool:g_dontask
    28. new bool:g_planting
    29.  
    30. new g_maxplayers
    31.  
    32. public plugin_init() {
    33.     register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    34.  
    35.     if (!engfunc(EngFunc_FindEntityByString, -1, CLASSNAME, "func_bomb_target"))
    36.         return
    37.  
    38.     register_event("WeapPickup", "event_got_bomb", "be", "1=6")
    39.     register_event("BarTime", "event_bar_time", "be")
    40.     register_event("TextMsg", "clear", "bc", "2=#Game_bomb_drop")
    41.     register_event("TextMsg", "clear", "a", "2=#Bomb_Planted")
    42.     register_event("HLTV", "clear", "a", "1=0", "2=0")
    43.  
    44.     register_forward(FM_EmitSound, "forward_emit_sound")
    45.  
    46.     g_maxplayers = get_maxplayers()
    47. }
    48.  
    49. public forward_emit_sound(id, channel, sound[]) {
    50.     if (id > g_maxplayers || !id || !equali(sound, USE_SOUND) || !g_carrier || g_planting || !is_user_alive(id) ||
    51.     get_user_team(id) != TEAM_T || !(pev(id, pev_button) & IN_USE) || task_exists(TASK_ID))
    52.         return FMRES_IGNORED
    53.  
    54.     new id2, body, Float:distance = get_user_aiming(id, id2, body)
    55.     if (id2 != g_carrier || !is_user_alive(id2) || distance > MAX_DISTANCE)
    56.         return FMRES_IGNORED
    57.  
    58.     if (g_dontask) {
    59.         client_cmd(id, SOUND_DONT)
    60.         return FMRES_SUPERCEDE
    61.     }
    62.  
    63.     g_stealer = id
    64.     set_task(0.1, "task_bomb_drop", TASK_ID)
    65.     return FMRES_SUPERCEDE
    66. }
    67.  
    68. public task_bomb_drop() {
    69.     if (!g_planting && check())
    70.         transfer()
    71. }
    72.  
    73. bool:check() {
    74.     if (!is_user_alive(g_stealer) || !is_user_alive(g_carrier) || get_user_team(g_stealer) != TEAM_T)
    75.         return false
    76.  
    77.     return true
    78. }
    79.  
    80. bool:transfer() {
    81.     new stealer = g_stealer
    82.     engclient_cmd(g_carrier, DROP, WEAPON)
    83.     new c4 = engfunc(EngFunc_FindEntityByString, -1, CLASSNAME, WEAPON)
    84.     if (!c4)
    85.         return false
    86.  
    87.     new backpack = pev(c4, pev_owner)
    88.     if (backpack <= g_maxplayers)
    89.         return false
    90.  
    91.     set_pev(backpack, pev_flags, pev(backpack, pev_flags) | FL_ONGROUND)
    92.     dllfunc(DLLFunc_Touch, backpack, stealer)
    93.  
    94.     return true
    95. }
    96.  
    97. public event_got_bomb(id) {
    98.     g_carrier = id
    99. }
    100.  
    101. public event_bar_time(id) {
    102.     if (id == g_carrier)
    103.         g_planting = bool:read_data(1)
    104. }
    105.  
    106. public clear() {
    107.     remove_task(TASK_ID)
    108.     g_stealer = 0
    109.     g_carrier = 0
    110.     g_dontask = false
    111.     g_planting = false
    112. }
    За ранее спасибо
    :help:
     
  10. Phantom Команда форума

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

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

    Регистрация:
    27.02.15
    Сообщения:
    1.682
    Симпатии:
    789
    Пол:
    Мужской
    Telegram:
    ph4nt0m
    Пробуй
    Код (Unknown Language):
    1. #include <amxmodx>
    2. #include <fakemeta>
    3.  
    4. #define PLUGIN_NAME "Steal the Bomb"
    5. #define PLUGIN_VERSION "3.2"
    6. #define PLUGIN_AUTHOR "VEN/Satan"
    7.  
    8. #define MAX_DISTANCE    50
    9. #define FLAG        ADMIN_LEVEL_G
    10.  
    11. #define TASK_ID 594753
    12. #define TEAM_T 1
    13.  
    14. #define IN_USE (1<<5)
    15. #define    FL_ONGROUND (1<<9)
    16.  
    17. new SOUND_DONT[] = "spk barney/dontaskme"
    18. new USE_SOUND[] = "common/wpn_denyselect.wav"
    19.  
    20. new DROP[] = "drop"
    21. new WEAPON[] = "weapon_c4"
    22. new CLASSNAME[] = "classname"
    23.  
    24. new g_stealer
    25. new g_carrier
    26.  
    27. new bool:g_dontask
    28. new bool:g_planting
    29.  
    30. new g_maxplayers
    31.  
    32. public plugin_init()
    33. {
    34.     register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    35.  
    36.     if(!engfunc(EngFunc_FindEntityByString, -1, CLASSNAME, "func_bomb_target")) return
    37.  
    38.     register_event("WeapPickup", "event_got_bomb", "be", "1=6")
    39.     register_event("BarTime", "event_bar_time", "be")
    40.     register_event("TextMsg", "clear", "bc", "2=#Game_bomb_drop")
    41.     register_event("TextMsg", "clear", "a", "2=#Bomb_Planted")
    42.     register_event("HLTV", "clear", "a", "1=0", "2=0")
    43.  
    44.     register_forward(FM_EmitSound, "forward_emit_sound")
    45.  
    46.     g_maxplayers = get_maxplayers()
    47. }
    48.  
    49. public forward_emit_sound(id, channel, sound[])
    50. {
    51.     if(id > g_maxplayers || !id || !equali(sound, USE_SOUND) || !g_carrier || g_planting || !is_user_alive(id) ||
    52.     get_user_team(id) != TEAM_T || !(pev(id, pev_button) & IN_USE) || task_exists(TASK_ID))
    53.         return FMRES_IGNORED
    54.  
    55.     new id2, body, Float:distance = get_user_aiming(id, id2, body)
    56.     if(id2 != g_carrier || !is_user_alive(id2) || distance > MAX_DISTANCE)
    57.         return FMRES_IGNORED
    58.  
    59.     if(g_dontask)
    60.     {
    61.         client_cmd(id, SOUND_DONT)
    62.         return FMRES_SUPERCEDE
    63.     }
    64.     g_stealer = id
    65.     set_task(0.1, "task_bomb_drop", TASK_ID)
    66.     return FMRES_SUPERCEDE
    67. }
    68.  
    69. public task_bomb_drop()
    70.     if(get_user_flags(g_stealer) & FLAG && !g_planting && check()) transfer()
    71.  
    72. bool:check()
    73. {
    74.     if(!is_user_alive(g_stealer) || !is_user_alive(g_carrier) || get_user_team(g_stealer) != TEAM_T)
    75.         return false
    76.  
    77.     return true
    78. }
    79.  
    80. bool:transfer()
    81. {
    82.     new stealer = g_stealer
    83.     engclient_cmd(g_carrier, DROP, WEAPON)
    84.     new c4 = engfunc(EngFunc_FindEntityByString, -1, CLASSNAME, WEAPON)
    85.     if(!c4) return false
    86.  
    87.     new backpack = pev(c4, pev_owner)
    88.     if(backpack <= g_maxplayers)
    89.         return false
    90.  
    91.     set_pev(backpack, pev_flags, pev(backpack, pev_flags) | FL_ONGROUND)
    92.     dllfunc(DLLFunc_Touch, backpack, stealer)
    93.  
    94.     return true
    95. }
    96.  
    97. public event_got_bomb(id)
    98.     g_carrier = id
    99.  
    100. public event_bar_time(id)
    101. {
    102.     if(id == g_carrier)
    103.         g_planting = bool:read_data(1)
    104. }
    105.  
    106. public clear()
    107. {
    108.     remove_task(TASK_ID)
    109.     g_stealer = 0
    110.     g_carrier = 0
    111.     g_dontask = false
    112.     g_planting = false
    113. }
     
    Murder нравится это.
  13. Murder Пользователь

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

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

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

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