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

BackPack [ Дым ]  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

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

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

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

BackPack [ Дым ]

Сообщение MayroN » 27 мар 2020, 13:46

Решил реализовать давнюю идею - поставить дым на лежачей пачке
Сам дым выглядит вот так

А поставить нужно на backpack :-D


После долгих попыток набросал такой вот код с плагинов
В игре - ноль емоций
Просьба проверить по Коду,что не так / что упустил / что не добавил
Спасибо за помощь :thumbs_up
Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <csx>

#define PLUGIN  "Backpack Smoke"
#define VERSION "1.0"
#define AUTHOR  "MayroN"

#define BACKPACK "models/models_wc/w_backpack.mdl"

#define TASK 8631

new Float:OriginBackpack[3]

new g_szSmokeSprites[ 6 ]

public plugin_init()
{
    register_plugin("Backpack Smoke", "1.0", "MayroN");
    
    register_forward
(FM_SetModel, "SetModelBackpack");
    register_forward(FM_Think, "BackpackThink");
    register_forward(FM_Touch, "BackpackTouch");
    register_logevent("round_new", 2, "1=Round_Start");
    register_logevent("round_end", 2, "1=Round_End");
    register_logevent("round_end", 2, "1&Restart_Round_");
}

public plugin_precache()
{
    precache_model(BACKPACK)

    g_szSmokeSprites[ 0 ] = precache_model( "sprites/gas_puff_01y.spr" )
    g_szSmokeSprites[ 1 ] = precache_model( "sprites/gas_puff_01r.spr" )
    g_szSmokeSprites[ 2 ] = precache_model( "sprites/gas_puff_01b.spr" )
    g_szSmokeSprites[ 3 ] = precache_model( "sprites/gas_puff_01g.spr" )
    g_szSmokeSprites[ 4 ] = precache_model( "sprites/gas_puff_01m.spr" )
    g_szSmokeSprites[ 5 ] = precache_model( "sprites/gas_puff_01o.spr" )
}

public BackpackTouch(touched, ent)
{
    if(!pev_valid(ent))
        return FMRES_IGNORED
    
    static xClassName
[32]
    pev(ent, pev_classname, xClassName, charsmax(xClassName))
    
    if
(equal(xClassName, "weaponbox") || equal(xClassName, "models/models_wc/w_backpack.mdl"))

    return FMRES_IGNORED

}

public BackpackThink(ent)
{
    if(!pev_valid(ent))
        return FMRES_IGNORED
    
    static xClassName
[32]
    pev(ent, pev_classname, xClassName, charsmax(xClassName))
    
    if
(!equal(xClassName, "models/models_wc/w_backpack.mdl"))
        return FMRES_IGNORED

    static xWpn
    xWpn 
= pev(ent, pev_iuser1)

    if(!pev_valid(xWpn))
    {
        set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME)

        return FMRES_SUPERCEDE
    
}

    set_pev(ent, pev_nextthink, get_gametime())

        remove_task(TASK)

    return FMRES_IGNORED
}

public SetModelBackpack(ent, model[])
{
    if(!pev_valid(ent) || !equali(model, "models/models_wc/w_backpack.mdl"))
        return FMRES_IGNORED

    static xClassName
[32]
    pev(ent, pev_classname, xClassName, charsmax(xClassName))

    if(!equal(xClassName, "weaponbox"))
        return FMRES_IGNORED

    static BackPack
    BackPack 
= engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))

    if(!pev_valid(BackPack))
        return FMRES_IGNORED

        set_task
(1.0, "backpack_timer", TASK, "", 0, "b")

    return FMRES_IGNORED
}

public backpack_timer()
{
    smoke_on_c4(3)
}

public round_new()
{
    remove_task(TASK)
}

public round_end()
{
    remove_task(TASK)
}

public smoke_on_c4(color)
{
    message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
    write_byte( TE_FIREFIELD );
    engfunc( EngFunc_WriteCoord, OriginBackpack[ 0 ] );
    engfunc( EngFunc_WriteCoord, OriginBackpack[ 1 ] );
    engfunc( EngFunc_WriteCoord, OriginBackpack[ 2 ] );
    write_short( 2 );
    write_short( g_szSmokeSprites[ color ] );
    write_byte( 2 );
    write_byte( TEFIRE_FLAG_ALLFLOAT | TEFIRE_FLAG_ALPHA );
    write_byte( 20 ); // life ?
    message_end();
}
МультиМод CS 83.222.97.124:27015

Аватара пользователя
MayroN
 
Сообщения: 570
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 133 раз.
Поблагодарили: 53 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: На которых говорю...

Re: BackPack [ Дым ]

Сообщение Leonidddd » 27 мар 2020, 14:01

MayroN, для оси z прибавь там 10-20 юнитов, там потестишь и посмотришь как лучше.
Код: Выделить всё
OriginBackpack] += 20.0
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2393
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 185 раз.
Поблагодарили: 671 раз.

Re: BackPack [ Дым ]

Сообщение MayroN » 27 мар 2020, 14:27

Leonidddd,
Да да ,это я уже учитывал на будущее, ибо сейчас дымок с самой земли парует
МультиМод CS 83.222.97.124:27015

Аватара пользователя
MayroN
 
Сообщения: 570
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 133 раз.
Поблагодарили: 53 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: На которых говорю...

Re: BackPack [ Дым ]

Сообщение Leonidddd » 27 мар 2020, 15:31

MayroN, у вас в коде координаты бомбы нигде не получаются, как дым вообще работает? В BackpackTouch вообще ничего не происходит судя по коду, кроме получения класснейма.
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2393
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 185 раз.
Поблагодарили: 671 раз.

Re: BackPack [ Дым ]

Сообщение MayroN » 27 мар 2020, 15:52

Leonidddd
Я так понимаю нужно ещё это и куда его?
Бомба выкинута:
Код: Выделить всё
new bomb = fm_find_ent_by_class(-1, "weapon_c4")
if (bomb && pev(bomb, pev_owner) > get_maxplayers())
МультиМод CS 83.222.97.124:27015

Аватара пользователя
MayroN
 
Сообщения: 570
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 133 раз.
Поблагодарили: 53 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: На которых говорю...

Re: BackPack [ Дым ]

Сообщение Leonidddd » 27 мар 2020, 20:09

MayroN, там может быть ещё дропнутая ж бомба.. не то. Вы должны зарегистрироваться, чтобы видеть ссылки. и через игрока в момент установки координаты получай из события(как получить индекс игрока там описано)
Код: Выделить всё
    register_logevent("logevent_function_p", 3, "2=Planted_The_Bomb"); 
Либо в FM_SETMODEL получай координаты бомбы и тесть.
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2393
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 185 раз.
Поблагодарили: 671 раз.

Re: BackPack [ Дым ]

Сообщение MayroN » 28 мар 2020, 00:27

Leonidddd,
Ладно, пойдём по более лёгкому.
Теперь осталось получить координаты Брошенной Бомбы ( я так из той статьи не понял,как это сделать ),ато дым постоянно лупит в центре карты...

Код: Выделить всё
public get_origin_backpack()
{
    static entity; entity = -1
    while 
((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", "grenade")))
    {
        pev(entity, pev_origin, OriginBackpack)
    }
}

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

#define TASK_BACKPACK 85390

new Float:OriginBackpack[3], g_szSmokeSprites

public plugin_init
()
{
    register_plugin("Backpack Smoke", "1.0", "Leo_[BH]");
    
    register_logevent
("Bomb_Drop", 3, "2=Dropped_The_Bomb");
    register_logevent("Bomb_Got", 3, "2=Got_The_Bomb"); 
    register_logevent
("round_new", 2, "1=Round_Start");
}

public plugin_precache()
{
    g_szSmokeSprites = precache_model( "sprites/gas_puff_01g.spr" );
}

public round_new()
{
    remove_task(TASK_BACKPACK)
}

public Bomb_Drop(id)
{
       if(!is_user_connected(id) && !is_user_alive(id))
       {
         get_origin_backpack()
         set_task(1.0, "backpack_timer", TASK_BACKPACK, "", 0, "b")
       }
}

public Bomb_Got(id)
{
        remove_task(TASK_BACKPACK)
}

public backpack_timer()
{
    smoke_on_backpack()
}

public get_origin_backpack()
{
    static entity; entity = -1
    while 
((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", "grenade")))
    {
        pev(entity, pev_origin, OriginBackpack)
    }
}
    

public smoke_on_backpack
()
{
    message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
    write_byte( TE_FIREFIELD );
    engfunc( EngFunc_WriteCoord, OriginBackpack[ 0 ] );
    engfunc( EngFunc_WriteCoord, OriginBackpack[ 1 ] );
    engfunc( EngFunc_WriteCoord, OriginBackpack[ 2 ] );
    write_short( 2 );
    write_short( g_szSmokeSprites );
    write_byte( 2 );
    write_byte( TEFIRE_FLAG_ALLFLOAT | TEFIRE_FLAG_ALPHA );
    write_byte( 20 ); // life ?
    message_end();
}
МультиМод CS 83.222.97.124:27015

Аватара пользователя
MayroN
 
Сообщения: 570
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 133 раз.
Поблагодарили: 53 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: На которых говорю...

Re: BackPack [ Дым ]

Сообщение httpeace// » 28 мар 2020, 05:05

Зачем координаты, отлавливай когда бомба уже дропнута и прописывай ей спрайт. Если тебе нужен спрайт в момент установки, то через ивент бомб плент уже делай, а по окончанию раунда сбрасывай.
Не они создали это насилие, они родились в нем, и если музыка завтра исчезнет - убийства не прекратятся.
________________________________
>> В ЛС НЕ ПОМОГАЮ.
Аватара пользователя
httpeace//
 
Сообщения: 179
Зарегистрирован: 01 окт 2013, 14:31
Откуда: Владивосток
Благодарил (а): 51 раз.
Поблагодарили: 15 раз.
Языки программирования: pawn,
lua
(начинающий)

Re: BackPack [ Дым ]

Сообщение MayroN » 28 мар 2020, 13:41

httpeace//,
А,ну да,когда уже дропнута -это и нужно.
Вот как раз из событием установленной Бомбы - дым работает правильно ( подача из под Бомбы )
А дропнутой - по центру карты.
И это всё с той функцией так
get_origin_backpack()
МультиМод CS 83.222.97.124:27015

Аватара пользователя
MayroN
 
Сообщения: 570
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 133 раз.
Поблагодарили: 53 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: На которых говорю...

Re: BackPack [ Дым ]

Сообщение Leonidddd » 28 мар 2020, 14:12

MayroN, не прочитали полностью статью, значит. Там же черным по-белому написано, если бомба дропнута, то юзай поиск а ля
Код: Выделить всё
    new weapbox, bomb = fm_find_ent_by_class(-1, "weapon_c4")
    if (bomb && (weapbox = pev(bomb, pev_owner)) > get_maxplayers())
             pev(bomb, pev_origin, OriginBackpack);
 

в момент
Код: Выделить всё
register_logevent("logevent_function_p"3"2=Dropped_The_Bomb"); 

с задержкой там пол сек или секунду, пока долетит..

Если установлена - то как у тебя в примере.
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2393
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 185 раз.
Поблагодарили: 671 раз.

След.

Вернуться в Скриптинг

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 1