Иконка ресурса

Wall Shot Blocking 2.0

Нет прав для скачивания
Сообщения
1,275
Реакции
2,257
Помог
57 раз(а)
b0t. привет. Ты тестируешь свои работы перед тем, как выкладывать? Я понимаю что релиз плагинов муторный, но куда деваться. Тем более тут плагин меньше 100 строк, странно выкладывать не проверив, когда суть теста это 1 проверка, нормально ли оно работает при стрельбе по цели через стену.

По коду:
Я вот вижу UTIL_IsWallShot() с булевым возвратом. Само имя функции подразумевает, что в случае атаки прострелом возвращается true, иначе возвращается false. У тебя же тут
Код:
    if(!UTIL_IsWallShot(pAttacker,pVictim))
        return HC_SUPERCEDE;
Код:
return (fFraction <= 1.0 || get_tr2(0, TR_pHit) == pVictim);
Ты понимаешь как работает fraction? Он 1.0 как раз когда трасса прошла от начала до конца без препятствий. У тебя же получается что атака не блочится и при простреле, и при прямой видимости. Трассу надо делать с IGNORE_MONSTERS чтоб скипнуть игроков (что у тебя и сделано, 4-ый аргумент единица) и проверять что fraction именно 1.0 - значит что по пути трассы нет преград.

Метод в принципе не очень хороший. Делается трасса 'морда атакера - пузо жертвы'. Что если пузо за стенкой, и торчат только ноги, или голова? И такое бывает.

Я советую метод переделать на хук RG_IsPenetrableEntity. Пропускаешь атаки сквозь игроков, возможно сквозь бьющиеся/полупрозрачные объекты как стекло на нюке, решётки там же, двери там же внизу. Остальное блочится, и вот тебе блок прострелов.
 

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
345
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Ты тестируешь свои работы перед тем, как выкладывать?
Хотелось бы ещё адекватное описание в 'Установка и настройка'.

Если у вас нету модуля 'reapi' закомментируйте инклюд на 11-й строчке
Человек побежал комментировать и не понимает что ему нужно сделать. Не говоря уже о том, что инклуд изначально закомментирован.
1647417207772.png
 
Сообщения
396
Реакции
218
Помог
13 раз(а)
BlackSignature, Да, проверяю. Эту уже моя невнимательность сыграла свою роль.
Изначально проверка подразумевала
Код:
return (fFraction == 1.0 || get_tr2(0, TR_pHit) == pVictim);
Хотел сделать настройку на толщину объекта... Но выяснил, что при разном удалении от стены, которую простреливаем выдаёт разные значения. Чем ближе нахожусь тем больше значение. 1.0 -- стреляем прямо по игроку.
Поэтому решил отказаться от задумки, но проверку(==) не вернул.
16 Мар 2022
RockTheStreet, не думаю, что все настолько глупы, что не видят другие строки по мимо той, что я указал.
В описании чёрным по белому написано, что если не требуется -- закомментировать. Значит если он уже закомментирован, то реапи использоваться не будет.
Но описание поправлю.
И да. Строка стоит верная, но как уже было обговорено в Telegram,при добавлении исходного кода на сайт удаляются пустые места
 

Вложения

Последнее редактирование:
Сообщения
2,288
Реакции
1,739
Помог
31 раз(а)
b0t., не простреливает любые стенки, двери, коробки?
 
Сообщения
396
Реакции
218
Помог
13 раз(а)
Pokemoshka,
Не простреливает все объекты которые нельзя разрушить. Исключение: Открывающиеся двери
Простреливает всё, что можно разрушить(выстрелом/ударом ножа): решётки,стёкла, коробки
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
b0t., лучше бы исключить при каждом шоте чек на класснэйм, а сделать это единожды:

Код:
/**
    История изменений:
        1.0 (16.03.2022) by b0t.
            - Первый релиз;
        
        2.0 (16.03.2022) by b0t.
            - Отказ от старой проверки в пользу 'RG_IsPenetrableEntity';
            - Блокировать прострел сквозь объекты, которые нельзя разрушить;
                *Исключение: двери;
*/
new const VERSION[] = "2.0";
#include <amxmodx>
#include <fakemeta>
#include <reapi>
#define IsPlayer(%0)        (1<=%0<=MaxClients)

enum _: { IGNORE = 0xA723, COLLISION, BREAKABLE }
new g_iFwdEntSpawn;

public plugin_precache() {
    g_iFwdEntSpawn = register_forward(FM_Spawn, "fw_Spawn", true);
}
public fw_Spawn(eEnt) {
    if(is_nullent(eEnt))
        return;
    
    if(FClassnameIs(eEnt,"func_door_rotating") || FClassnameIs(eEnt,"func_door"))
        set_entvar(eEnt, var_impulse, IGNORE);
    else if(FClassnameIs(eEnt,"func_wall"))
        set_entvar(eEnt, var_impulse, COLLISION);
    else if(FClassnameIs(eEnt,"func_breakable"))
        set_entvar(eEnt, var_impulse, BREAKABLE);           
}
public plugin_init() {
    register_plugin("WallShotBlocking",VERSION,"b0t.");
    RegisterHookChain(RG_IsPenetrableEntity,"RG_IsPenetrableEntity_Pre", .post = false);
    unregister_forward(FM_Spawn, g_iFwdEntSpawn, true)
}
public RG_IsPenetrableEntity_Pre(const Float:fVecStart[3],const Float:fVecEnd[3],const pAttacker,const iEnt) {
    client_print_color(pAttacker, print_team_default, "[%i]", Is_ShootThrough(iEnt));
    if(!Is_ShootThrough(iEnt))
        return HC_CONTINUE;
    SetHookChainReturn(ATYPE_BOOL,false);
    return HC_SUPERCEDE;
}
stock bool:Is_ShootThrough(const eEnt) {
    if(IsPlayer(eEnt))
        return false;
        
    switch(get_entvar(eEnt, var_impulse))
    {
        case IGNORE: return false;
        case COLLISION: return true;
        case BREAKABLE: if(Float:get_entvar(eEnt,var_takedamage) == DAMAGE_NO) return true;
    }
    
    return false;
}
И с проверкой IsPlayer не нужно чекать на клэсснэйм worldspawn, worldspawn проиндексирован как ноль.
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
Pokemoshka, там только при попадании в worldspawn блок шота. На картах некоторые стены в зависимости от ситуаций (например, для оптимизации) создаются энтитями, что тот плагин не учитывает.
 
Сообщения
94
Реакции
11
Провокация
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
bizon, твои попытки, способности, на старых версиях включительно бесполезны ?
 
Сообщения
396
Реакции
218
Помог
13 раз(а)
bizon, только сейчас подумал. А зачем вообще ловить func_door/func_door_rotating, если всё равно игнорим их.
И ещё вопрос касаемо спавна. Разве разрушаемые объекты не спавняться по новой каждый раунд? К примеру на "cs_assault", есть решётка в вентиляции. Если её разбить, то в новом раунде она вновь появится. Разве тогда ей установиться var_impulse?
Спасибо за подсказку. Чуть позже обновлю.
 
Сообщения
94
Реакции
11
Недопустимое поведение
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
RockTheStreet, хорошо верб**
Принял ? Сначала с Радиусом(Тимуром) опозорился., теперь тут жоп** шамкаешь лицемер (ещё и с админами, куда они смотрят ? Любовники походу) ? Как только у Макса(BlackSignature) начал вдруг плагины заказывать , весь сервак на нем плагины его! Так ты ещё решил по*ку админам уныть?какой же ты Стас ты опущенный, я говорил Тимуру в статус тебя пора как ты! Надо будут доказательства БУДУТ КТО ТЫ,а то слишком ты уверовал в себя ,ещё Паши напиши скальпелю чтоб подстраховал )) хитряк долбаный))
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
b0t., объекты func_breakable не удаляются при разрушении, они становится непроходимыми и невидимыми. В начале раунда эти два свойства изменяются вновь. А спавнятся они лишь единожды - при старте сервера.
Так что записанное entvars значение останется.
16 Мар 2022
bizon, твои попытки, способности, на старых версиях включительно бесполезны ?
Отнюдь. Это будет работать и на старых версиях.
 
Последнее редактирование:

R16

Сообщения
11
Реакции
0
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
У нас на сервере карты под заказ сделаны с «именем сервера»
В некоторых картах имеются прострелы, пояснять не буду, нудно и долго, Стоит ли ожидать обновления?
 

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
345
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Стоит ли ожидать обновления?
Конечно. Сейчас автор достанет гадальный шар, узнает что за карта и какие объекты там используются, и сразу же выложит обновление.
 
Сообщения
667
Реакции
143
Помог
11 раз(а)
Помню, я антипрострелы вшивал в карты: берешь энтити, например функбомбтаргет, делаешь его воллом, даешь ему рендерфх и рендермод нормал и фх_эмаунт 0, и перемещаешь в нужно место: например, на 1 юнит от прострелового браша, потом его копируешь и смещаешь на 1 юнит уже от 1го нашего волла. Т.е получалось идет браш+волл+волл, прострелов не было.
Главное, чтобы размер энтити функбомбтаргет, из которого мы делали волл, был не больше размера браша.
Хотя, если запариться, можно и пренебречь размерами энтити.
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
wood-grouse, "func_bomb_target" - триггер, не имеющий коллизию, обозначающий место, где возможна закладка бомбы.
"func-wall" - брашевый энтити-объект, имеющий коллизию, применяющийся для разнообразных задач. Его кардинальное отличие - он всегда твёрдый.
Как ты делаешь один энтити-объект из другого? я молчу об их несовместимости некоторых свойств. Покажи исходник карты, мне даже интересно как это выглядит.
"func_wall" - "worldspawn" - "func_wall" применяется в исключительных случаях, если размер "worldspawn" невозможно задать побольше, чтобы исключить прострел, при прохождении через два объекта прострел дальше исключается. Там есть какое-то значение для прострела, если размер браша по простреливаемой абсциссе < N, точно не помню.
 
Сообщения
667
Реакции
143
Помог
11 раз(а)
@bizon,чего? у тебя понимание есть, как устроены энтити на карте?
Дай мне любую карту с func_bomb_target, я тебе сделаю его волом и перемещу куда надо.
17 Мар 2022
А по поводу прострелов я функ_волл как пример взял.
Может, я из func_bomb_target делал функбрекэйбл, где давал материал анбрекейбл гласс + фхэмаунт 0 + флаг онли триггер.
Я чисто как пример привел, нужно поэкспериментировать с сущностями, если прострелы не убираются.
Но из сущности, типа func_bomb_target, можно получить функ_брекэйбл, волл, телепорт и т.д.
 

R16

Сообщения
11
Реакции
0
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу