[WallShotBlocking] Помогите добавить проверку на игрока

Сообщения
20
Реакции
-1
Помогите добавить проверку на игрока по стим айди в плагин WallShotBlocking
Пытаюсь сделать, чтобы нельзя было прострелить сквозь стены конкретного игрока, но не уверен, как получать id с помощью const iEnt, как сейчас - не работает
Ниже я закомментировал код, где пытаюсь получить с помощью цикла, плагин в таком случае блокирует прострелы для всех
 

Вложения

Последнее редактирование:
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
lowamxx, в RG_IsPenetrableEntity_Pre третьим аргументом передается айди простреливающего
Код:
--get_user_authid(iEnt, authid, charsmax(authid));
++get_user_authid(pAttacker, authid, charsmax(authid));
 
Сообщения
20
Реакции
-1
Code_0xABC, тогда будет наоборот, что только он не может простреливать никого сквозь стены :)
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
lowamxx, а тебе нужно, что бы только он мог простеливать?
 
Сообщения
20
Реакции
-1
Code_0xABC, нет, мне надо, чтобы только его никто не мог прострелить, иммунитет сделать от простреливаний для 1 игрока
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
lowamxx, не понятно твое обьяснение
если сделать прострел только для определенного стимид, то
Код:
public RG_IsPenetrableEntity_Pre(const Float:fVecStart[3],const Float:fVecEnd[3],const pAttacker,const iEnt) {
    static authid[25];
    get_user_authid(pAttacker, authid, charsmax(authid));

    if(strcmp("STEAM_1:0:1974332000", authid) != 0 && Is_ShootThrough(pAttacker)) {
        SetHookChainReturn(ATYPE_BOOL,false);
        return HC_SUPERCEDE;
    }

    return HC_CONTINUE;
}
если прострелы запретить для определенного стимид, то
Код:
public RG_IsPenetrableEntity_Pre(const Float:fVecStart[3],const Float:fVecEnd[3],const pAttacker,const iEnt) {
    static authid[25];
    get_user_authid(pAttacker, authid, charsmax(authid));

    if(!strcmp("STEAM_1:0:1974332000", authid) && Is_ShootThrough(pAttacker)) {
        SetHookChainReturn(ATYPE_BOOL,false);
        return HC_SUPERCEDE;
    }

    return HC_CONTINUE;
}
 
Сообщения
20
Реакции
-1
Code_0xABC, прострелы должны работать во всех случаях, кроме случая, если простреливают определенного игрока - если он жертва, т.е. в get_user_authid надо получать id жертвы
 
Последнее редактирование:
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
lowamxx, теперь понятнее, тебе надо в Is_ShootThrough, создать условие, еcли класснeйм iEnt player и потом создать условие, где проверишь сам стимид, и там уже вернешь false

Не проверял
Код:
/**
    История изменений:
        1.0 (16.03.2022) by b0t.
            - Первый релиз;
       
        2.0 (16.03.2022) by b0t.
            - Отказ от старой проверки в пользу 'RG_IsPenetrableEntity';
            - Блокировать прострел сквозь объекты, которые нельзя разрушить;
                *Исключение: двери;
*/

new const VERSION[] = "2.0";

#include <amxmodx>
#include <reapi>

#define IsPlayer(%0)        (1<=%0<=MaxClients)

public plugin_init() {
    register_plugin("WallShotBlocking",VERSION,"b0t.");
    RegisterHookChain(RG_IsPenetrableEntity,"RG_IsPenetrableEntity_Pre", .post = false);
}

public RG_IsPenetrableEntity_Pre(const Float:fVecStart[3],const Float:fVecEnd[3],const pAttacker,const iEnt) {
    if(Is_ShootThrough(iEnt)) {
        SetHookChainReturn(ATYPE_BOOL,false);
        return HC_SUPERCEDE;
    }

    return HC_CONTINUE;
}

stock bool:Is_ShootThrough(const iEnt) {
    if(IsPlayer(iEnt)) {
        static authid[25];
        get_user_authid(iEnt, authid, charsmax(authid));

        if(!strcmp("STEAM_1:0:1974332000", authid))
            return true;
    }

    return false;
}
 
Последнее редактирование:
Сообщения
20
Реакции
-1
@Code_0xABC,не получится так, тут во-первых нет проверок на попадания в стену, во вторых IsPlayer(iEnt) я так понимаю считает, когда напрямую попадаешь в игрока, т.к. изначально стоит проверка if(IsPlayer(iEnt) return false; сейчас данный код должен просто блокировать попадания в игрока независимо, где он находится
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Он должен по сути блокировать, если в кого стреляли с таким стимид, то прострела не будет, не проверял
 
Сообщения
20
Реакции
-1
Code_0xABC, ну так да, проверку то ты убрал на попадание сквозь стену :) сложность в получении id для victim, когда сквозь стену попадаешь
 
Сообщения
20
Реакции
-1
Code_0xABC, по-моему это так только в случае прямого попадания, иначе бы не было проверки на IsPlayer(iEnt) по умолчанию в плагине, по логике изначально получается, если попали в игрока - ничего не происходит, здесь вообще неизвестно, как id жертвы получать
 
Последнее редактирование:

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

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