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

С4 Drop  [Решено]

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

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

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

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

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

С4 Drop

Сообщение MayroN » 03 сен 2019, 12:27

Ума не могу приложить:
Дропнутое Оружие удаляеться через время
Но почему Дропнутая Бомба сразу удаляеться с Земли на Линуксе?
Прошу помощи,что-бы оставалась всегда лежать...

P.S.На Виндовсе всё впорядке ( не удаляеться )
Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
 
#define STEP 10.0
#define VERTICAL_SPEED 20.0
#define HORISONTAL_SPEED 60.0
 
#define EXCLUDE_BOMB
 
enum 
(+= 1) {
   STATUS_NONE = 0,
   STATUS_EFFECT,
   STATUS_KILL
}
 
new g_CvarTimeout
;
 
#if defined EXCLUDE_BOMB
   #include <cstrike>
   new giStartEnt, giMaxEntities
#endif
 
public plugin_init
() {
   register_plugin("Remove Drop Weapon", "0.3", "GordonFreeman & F@nt0M");
   register_forward(FM_SetModel, "CWeaponBox_SetModel")
   RegisterHam(Ham_Think,"weaponbox","fw_WeaponBoxThink")
        RegisterHam(Ham_Think, "item_thighpack", "fw_WeaponBoxThink")
   RegisterHam(Ham_Think,"weapon_shield","fw_WeaponBoxThink")
   g_CvarTimeout = register_cvar("weapon_time", "30.0");
#if defined EXCLUDE_BOMB
   giStartEnt = get_maxplayers() + 1
   giMaxEntities 
= global_get( glb_maxEntities )
#endif
}
 
public CWeaponBox_SetModel
(const ent) {
   if(!pev_valid(ent))
      return FMRES_IGNORED;
    
   static szClassName
[32]
   pev(ent, pev_classname, szClassName, charsmax(szClassName))
       
   if
(equal(szClassName, "weaponbox"))   {
#if defined EXCLUDE_BOMB
         new i
         for
( i = giStartEnt; i < giMaxEntities; i++ ) {
            // search for an entity that is owned by the weaponbox, this should be a weapon_* entity
            if( pev_valid(i) && pev( i, pev_owner ) == ent ) {
               if( cs_get_weapon_id(i) == CSW_C4 )
                  return FMRES_IGNORED;
               else
                  break
;
            }
         }
#endif
      set_pev(ent, pev_impulse, STATUS_NONE);
      set_pev(ent, pev_nextthink, get_gametime() + get_pcvar_float(g_CvarTimeout));   
   
}
   else if(equal(szClassName, "item_thighpack"))   {
      set_pev(ent, pev_impulse, STATUS_NONE);
      set_pev(ent, pev_nextthink, get_gametime() + get_pcvar_float(g_CvarTimeout));   
   
}
   else if(equal(szClassName, "weapon_shield"))   {
      set_task( 0.1, "ChangeNextThinkTime", ent )
   }
    
   return FMRES_IGNORED
;
}
 
public ChangeNextThinkTime
( const ent ) {
   /* 100 ms is too big time comparing with server FPS.
      So we must make sure that shield entity still exists. */
       
   if
( pev_valid(ent) ) {
      static szClassName[32]
      pev(ent, pev_classname, szClassName, charsmax(szClassName))
      if(equal(szClassName, "weapon_shield"))   {
         set_pev(ent, pev_impulse, STATUS_NONE);
         set_pev(ent, pev_nextthink, get_gametime() + get_pcvar_float(g_CvarTimeout));
      }
   }
}
 
public fw_WeaponBoxThink
(ent) {
   if (!pev_valid(ent)) {
      return HAM_IGNORED;
   }
    
   switch
(pev(ent, pev_impulse))   {
      case STATUS_NONE:{
         set_pev(ent, pev_movetype, MOVETYPE_FLY);
         set_pev(ent, pev_solid, SOLID_NOT);
         set_pev(ent, pev_rendermode, kRenderTransAlpha);
          
         set_pev
(ent, pev_renderamt, 100.0);
         set_pev(ent, pev_velocity, Float:{0.0, 0.0, VERTICAL_SPEED});
         set_pev(ent, pev_avelocity, Float:{0.0, HORISONTAL_SPEED, 0.0})
         set_pev(ent, pev_impulse, STATUS_EFFECT);      
      
}
      case STATUS_EFFECT:   {
         if (pev(ent, pev_renderamt) > 0.0) {
            set_pev(ent, pev_renderamt, floatmax(0.0, pev(ent, pev_renderamt) - STEP));
         } else {
            set_pev(ent, pev_flags, FL_KILLME);
            set_pev(ent, pev_impulse, STATUS_KILL);
         }
      }
   }
    
   set_pev
(ent,pev_nextthink,get_gametime() + 0.1)
    
   return HAM_SUPERCEDE
;
}
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: С4 Drop

Сообщение Leonidddd » 25 сен 2019, 09:55

MayroN, я точно не уверен, но у cs_get_weapon_id оффсет мог сдвинуться под линь, модуль давно не поддерживали и, возможно, никто на это не обращал прежде внимания, попробуйте использовать fakemeta либо же reapi.

UPD:
Аналог функции от Вы должны зарегистрироваться, чтобы видеть ссылки.. xPaw уже сталкивался с этим как раз-таки на линуксе и были проблемы.

Код: Выделить всё
#define EXTRAOFFSET_WEAPONS            4
#define OFFSET_WEAPONTYPE            43
#define cs_get_weapon_id(%1) get_pdata_int(%1,OFFSET_WEAPONTYPE,EXTRAOFFSET_WEAPONS)  
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2557
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 192 раз.
Поблагодарили: 718 раз.

Re: С4 Drop

Сообщение MayroN » 26 сен 2019, 22:49

Leonidddd,
Я еще более глубже проверил и там и там.
Оказываеться,что на Виндовсе Бомба все же удаляеться,но через раз ( тоесть выкинул - не удаляеться, подобрал ,выкинул - удаляеться ,но не сразу ,а вместе с оружием по квару.

На линуксе удаляеться сразу.

Эсли добавить это
Код: Выделить всё
#if defined EXCLUDE_BOMB
         new i
         for
( i = giStartEnt; i < giMaxEntities; i++ ) {
            // search for an entity that is owned by the weaponbox, this should be a weapon_* entity
            if( pev_valid(i) && pev( i, pev_owner ) == ent ) {
               if( cs_get_weapon_id(i) == CSW_C4 )
                  return FMRES_IGNORED;
               else
                  break
;
            }
         }
#endif    

в
Код: Выделить всё
public fw_WeaponBoxThink(ent)

То на Линуксе уже ,так как и на Виндовсе через раз удаляеться ( по квару вместе с оружием )

А что тогда делать с етими оффсетами?
Просто добавить в начало исхода и попробовать?
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: С4 Drop

Сообщение Leonidddd » 28 сен 2019, 02:02

MayroN, какая же жесть в том коде, я просто ещё не обращал внимания на цикл тот при проверке.. там достаточно сделать проверку на мировую модель c4 и игнорировать её. Тем более, в FM_SetModel есть второй аргумент - это путь выставляемой модели.
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2557
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 192 раз.
Поблагодарили: 718 раз.

Re: С4 Drop

Сообщение Vaqtincha » 28 сен 2019, 07:51

А исходники регейма для кого ? Посмотреть, изучит не будем этот механизм ? Бомба (пачка) тоже веапонбокс (у всех боксов установлен CWeaponBox :: Kill() который удаляет ее)
но после создании (если в нем упакован weapon_c4) указывается уже другой CWeaponBox :: BombThink() который отправляет игрокам местоположение бомбы.

Об этом даже незнал альфа разработчик-адмен из гей кс
Вы должны зарегистрироваться, чтобы видеть ссылки.

От других то что ждать ?

Добавлено спустя 1 минуту 42 секунды:
Сразу удаляется на лине потому что он каким то образом вызывает сразу цинк Kill (особенность лина ?) не смотря на суперсид.

Добавлено спустя 3 минуты 58 секунд:
Код плагина гауно и в нем утечка.

Добавлено спустя 5 минут 3 секунды:
Ворох если ты это читаешь то не забудь скрин делать и отправить на свой гоуночат.
админгандонсоси
Аватара пользователя
Vaqtincha
 
Сообщения: 277
Зарегистрирован: 28 мар 2018, 15:05
Забанен
Благодарил (а): 8 раз.
Поблагодарили: 53 раз.

Re: С4 Drop

Сообщение Leonidddd » 28 сен 2019, 09:00

Vaqtincha, полегче, что за эмоциональные высказывания? Далеко не каждый может прочитать движковый код. Да и про любой код можно так сказать, что он говно и прочее, но почему-то во всем СНГ коммьюнити единицы тех, кто реально может сказать, почему,что там не так, пусть хоть многие и прекрасно знают ответ, а ещё меньше - решение/ответ.

MayroN, для удаления дропнутого оружия можно использовать код что-то на подобии:
Код: Выделить всё
register_touch( "weaponbox" , "worldspawn" , "WeaponboxWorldTouch" );


такс, полагаю необходимо без реапи.. ну, попробуем так удалять все, кроме с4:

Код: Выделить всё
public WeaponboxWorldTouch( iWeaponbox , iWorld )
{

    if(pev_valid(iWeaponbox)){

        new szModel[64]; pev(iWeaponbox, pev_model, szModel, charsmax(szModel));
        if(!equal("models/w_backpack.mdl", szModel)){

            call_think( iWeaponbox );

        }else{

            entity_set_int(iWeaponbox, EV_INT_movetype, MOVETYPE_FLY);

            new Float:origin[3];
            entity_get_vector(iWeaponbox, EV_VEC_origin, origin);
            origin[2] += 5.0;
            entity_set_origin(iWeaponbox, origin);

            return PLUGIN_HANDLED;
        }
    }
    return PLUGIN_CONTINUE;
}


Не могу дать каких-либо гарантий в работе кода, не тестировал, но по идее так избежим соприкосновения с землей как бы чуть приподнимая и выставляя флаг левитации.
Последний раз редактировалось Leonidddd 28 сен 2019, 15:08, всего редактировалось 1 раз.
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2557
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 192 раз.
Поблагодарили: 718 раз.

Re: С4 Drop

Сообщение Vaqtincha » 28 сен 2019, 09:46

Leonidddd,
entity_set_int
( iWeaponbox, EV_INT_movetype , entity_get_int
( iWeaponbox, EV_INT_movetype ) |
MOVETYPE_FLY );

в мовтипа не хранят биты
админгандонсоси
Аватара пользователя
Vaqtincha
 
Сообщения: 277
Зарегистрирован: 28 мар 2018, 15:05
Забанен
Благодарил (а): 8 раз.
Поблагодарили: 53 раз.

Re: С4 Drop

Сообщение Leonidddd » 28 сен 2019, 15:09

Vaqtincha, поправил.
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2557
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 192 раз.
Поблагодарили: 718 раз.

Re: С4 Drop

Сообщение MayroN » 28 сен 2019, 22:32

Vaqtincha, Leonidddd,
Спасибо.
Попробуем.
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: С4 Drop

Сообщение MayroN » 23 ноя 2019, 16:56

Leonidddd,
Пробовал я с Оффсетами и с Вашим примером и того -не работает.
Удаляет всё оружие включая Бомбу.
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

След.

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

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

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