Русское сообщество по скриптингу

Скриптинг с C4 бомбой

Статьи или фрагменты кода для новичков и уже опытных скриптеров по AMXX.

Модератор: Chuvi

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только обучающему материалу по AMX Mod X.

Скриптинг с C4 бомбой

Сообщение DJ_WEST » 08 сен 2009, 10:15

Автор: VEN

Перед тем, как начать, вы должны быть знакомы с основами AMXX скриптинга. Здесь используется функции из "Вы должны зарегистрироваться, чтобы видеть ссылки.". Чтобы получить индекс игрока (только внутри ""logevent_function_p"), необходимо использовать:
Код: Выделить всё

stock get_loguser_index
()
{
    new loguser[80], name[32]
    read_logargv(0, loguser, 79)
    parse_loguser(loguser, name, 31)
 
    return get_user_index
(name)
}
 
 

К примеру:
Код: Выделить всё

public logevent_function_p
() 
{
    new id = get_loguser_index()
    // Код
}  


1. Игрок/бомба
Бомба выкинута/у игрока:
Код: Выделить всё

    if 
(fm_find_ent_by_class(-1, "weapon_c4"))
 


Бомба выкинута:
Код: Выделить всё

    new bomb 
= fm_find_ent_by_class(-1, "weapon_c4")
    if (bomb && pev(bomb, pev_owner) > get_maxplayers()) 


Бомба у игрока/кто несет:
Код: Выделить всё
    new carrier = 0, ownerent, bomb = fm_find_ent_by_class(-1, "weapon_c4")
    if (bomb && (ownerent = pev(bomb, pev_owner)) <= get_maxplayers())
        carrier = ownerent
    if 
(carrier) // у нас есть владелец бомбы
    else // у нас нет владельца   


Указанный игрок имеет бомбу?
Код: Выделить всё
    if (user_has_weapon(id, CSW_C4)) // метод №1
    if (pev(id, pev_weapons) & (1<<CSW_C4)) // метода №2
    if (fm_find_ent_by_owner(-1, "weapon_c4", id)) // метод №3   


Передать бомбу от одного игрока другому:
Код: Выделить всё
    fm_transfer_user_gun(carrier, recipient, CSW_C4) // возвращает true при успешном выполнении   


Как заставить игрока выкинуть бомбу:
Код: Выделить всё
    engclient_cmd(id, "drop", "weapon_c4") 


Как удалить лежащую на земле бомбу:
Код: Выделить всё
    new weapbox, bomb = fm_find_ent_by_class(-1, "weapon_c4")
    if (bomb && (weapbox = pev(bomb, pev_owner)) > get_maxplayers()) 
    
{
        dllfunc(DLLFunc_Think, weapbox) // удаляет объекты weaponbox + weapon_c4
        // удаляет красную точку на радаре
        message_begin(MSG_ALL, get_user_msgid("BombPickup"))
        message_end()
    } 


Как дать бомбу игроку:
Код: Выделить всё
    fm_give_item(id, "weapon_c4")
    // используйте cs_set_user_plant(id), чтобы разрешить игроку минировать бомбу   


Как удалить бомбу у игрока:
Код: Выделить всё
    engclient_cmd(id, "weapon_c4")
    cs_set_user_bpammo(id, CSW_C4, 0)
    engclient_cmd(id, "lastinv")
    // удаляем HUD иконку бомбы
    message_begin(MSG_ONE, get_user_msgid("StatusIcon"), _, id)
    write_byte(0)
    write_string("c4")
    message_end() 


Бомба установлена/как удалить установленную бомбу:
Код: Выделить всё
    new bomb
    if 
((bomb = fm_find_ent_by_model(-1, "grenade", "models/w_c4.mdl"))) 
    
{
        // бомбу установлена
        fm_remove_entity(bomb) // удалить установленную бомбу
    }  


2. Выкинуть/взять
Событие, когда игрок появился с бомбой:
Код: Выделить всё
    register_logevent("logevent_function_p", 3, "2=Spawned_With_The_Bomb") 


Бомба выкинута (включает событие, когда игрок вышел с сервера или умер):
Код: Выделить всё
    register_logevent("logevent_function_p", 3, "2=Dropped_The_Bomb")
    // используйте is_user_alive/is_user_connected для проверки подключен/живой ли игрок   


Бомба поднята (кроме события появления игрока):
Код: Выделить всё
    register_logevent("logevent_function_p", 3, "2=Got_The_Bomb") 


Бомба получена (включает события появления игрока и give_item):
Код: Выделить всё
    register_event("WeapPickup", "event_function", "be", "1=6")  


3. Минирование/разминирование
Событие начала минирования бомбы:
Код: Выделить всё
    register_event("BarTime", "event_function", "be", "1=3") 


Бомба установлена:
Код: Выделить всё
    register_logevent("logevent_function_p", 3, "2=Planted_The_Bomb") 


Событие начала разминирования бомбы:
Код: Выделить всё
    register_event("BarTime", "event_function", "be", "1=5", "1=10") 


Событие начала разминирования бомбы (без щипцов):
Код: Выделить всё
    register_logevent("logevent_function_p", 3, "2=Begin_Bomb_Defuse_Without_Kit") 


Событие начала разминирования бомбы (с щипцами):
Код: Выделить всё
    register_logevent("logevent_function_p", 3, "2=Begin_Bomb_Defuse_With_Kit") 


Бомба разминирована:
Код: Выделить всё
    register_logevent("logevent_function_p", 3, "2=Defused_The_Bomb") 


Событие отмены минирования/разминирования бомбы (вы должны быть уверены, что минирование/разминирование бомбы в процессе) :
Код: Выделить всё
    register_event("BarTime", "event_function", "b", "1=0") 


Событие спасения цели:
Код: Выделить всё
    register_logevent("logevent_function", 6, "3=Target_Saved")  


4. Взрыв
Цель взорвана раньше окончания раунда:
Код: Выделить всё
    register_logevent("logevent_function", 6, "3=Target_Bombed") 


Событие взрыва бомбы (раньше/позже окончания раунда):
Код: Выделить всё
    register_event("23", "event_function", "a", "1=17", "6=-105", "7=17") 


Игрок убит от взрыва бомбы (не сработает, если игрок был убил от объекта env_explosion):
Код: Выделить всё
    public client_death(killer, victim, wpnindex, hitplace, TK) 
    
{
        if (wpnindex == CSW_C4)
    }  


5. Цель (место закладки бомбы)
Игрок находится на месте установки бомбы (func_bomb_target):
Код: Выделить всё
    // Примечание: нет хорошего способа определения находится ли игрок в info_bomb_target
    new target = -1, class[] = "func_bomb_target", bool:is_inside = false
    while 
((target = fm_find_ent_by_class(target, class)))
    {
        if (!fm_boxents_distance(index, target)) 
        
{
            is_inside = true
            break
        
}
    }
    if (is_inside) 


Карта содержит места закладки бомбы:
Код: Выделить всё
    if (fm_find_ent_by_class(-1, "func_bomb_target") || fm_find_ent_by_class(-1, "info_bomb_target")) 


Как удалить место закладки бомбы:
Код: Выделить всё
    new target = -1, classname[] = "func_bomb_target"
    while ((target = fm_find_ent_by_class(target, classname)))
        fm_remove_entity(target)
    classname = "info_bomb_target"
    while ((target = fm_find_ent_by_class(target, classname)))
        fm_remove_entity(target)  
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Re: Скриптинг с C4 бомбой

Сообщение tempo » 05 авг 2016, 14:06

а как удалить, убрать бомбу из игры вообще можно ли это ?
Аватара пользователя
tempo
 
Сообщения: 198
Зарегистрирован: 19 фев 2016, 15:23
Благодарил (а): 60 раз.
Поблагодарили: 9 раз.
Опыт программирования: Около года

Re: Скриптинг с C4 бомбой

Сообщение L4D2 » 06 авг 2016, 17:15

tempo писал(а):а как удалить, убрать бомбу из игры вообще можно ли это ?

Вы должны зарегистрироваться, чтобы видеть ссылки. ... groka.html

==============================================
|| Пишу не большие плагины под заказ: Заказ онлайн (Кликабельно)
|| Ссылка на официальный топик: заказ плагинов.
|| Желаешь оставить отзыв: тебе сюда(кликни).
==============================================
Аватара пользователя
L4D2
 
Сообщения: 792
Зарегистрирован: 25 июн 2011, 19:26
Благодарил (а): 240 раз.
Поблагодарили: 100 раз.
Языки программирования: Counter-Strike 1.6

Re: Скриптинг с C4 бомбой

Сообщение ArKaNeMaN » 13 июл 2017, 19:34

Подскажите как удалить уже установленную бомбу... способ в теме почему-то не работает
Аватара пользователя
ArKaNeMaN
 
Сообщения: 105
Зарегистрирован: 03 авг 2016, 20:28
Благодарил (а): 26 раз.
Поблагодарили: 11 раз.
Опыт программирования: Около года
Языки программирования: AMXX
PHP
JS

Re: Скриптинг с C4 бомбой

Сообщение zhorzh78 » 13 июл 2017, 20:26

Код: Выделить всё
// если бомба установлена

const m_bIsC4     = 385    
new GrenadeEntity 
= FM_NULLENT

while((GrenadeEntity = engfunc(EngFunc_FindEntityByString, GrenadeEntity, "classname", "grenade")))
{
    if(pev_valid(GrenadeEntity) && get_pdata_bool(GrenadeEntity, m_bIsC4))
    {
        //удаляем.. fm_remove_entity
        break
    
}
Аватара пользователя
zhorzh78
 
Сообщения: 91
Зарегистрирован: 26 фев 2014, 10:07
Благодарил (а): 1 раз.
Поблагодарили: 23 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn (AMXX)

Re: Скриптинг с C4 бомбой

Сообщение артист666 » 13 июл 2017, 23:04

Удалить бомбу с карты вообще(из игрового процесса):

Код: Выделить всё
#include <amxmodx>
#include <fakemeta>

new g_forwads

public plugin_init
()
{
    unregister_forward(FM_Spawn, g_forwads)
}
public plugin_natives()
{
    g_forwads = register_forward(FM_Spawn, "ent_spawn")
}
public ent_spawn(ent)
{
    if(!pev_valid(ent)) return FMRES_IGNORED
    
    static classname
[33]; pev(ent, pev_classname, classname, charsmax(classname))

    if(equal(classname, "func_bomb_target") || equal(classname, "info_bomb_target"))
    {
        engfunc(EngFunc_RemoveEntity, ent)
        return FMRES_SUPERCEDE
    
}
    return FMRES_IGNORED


Удалить установленную бомбу:

Код: Выделить всё
#include <amxmodx>
#include <fakemeta>

public plugin_init()
{
    register_forward(FM_SetModel, "set_model"1)
}
public set_model(ent, model[])
{
    if(!equal(model, "models/w_c4.mdl")) return
    
    engfunc
(EngFunc_RemoveEntity, ent)
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Скриптинг с C4 бомбой

Сообщение MaG_i » 29 дек 2017, 19:12

Подскажите пожалуйста как заблокировать звук пикания у бомбы, хочу заменить на свои.
Аватара пользователя
MaG_i
 
Сообщения: 97
Зарегистрирован: 14 апр 2011, 18:05
Благодарил (а): 36 раз.
Поблагодарили: 4 раз.
Опыт программирования: Меньше месяца
Языки программирования: Counter-Strike 1.6

Пред.

Вернуться в Статьи / фрагменты кода

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11