ReHLDS/ReAPI AWPoff

Vaqtincha

aggressive
Разработчик
Скриптер
Регистрация
28 Янв 2018
Сообщения
960
Симпатии
681
Пол
Мужской
Зачем вообще отобрать авп ? Мне это бесит. Не логично. Проще не допустить игроку взять авп при любых обстоятельствах если у него команде превышен лимит.
 

paffgame

D0L64E6
Разработчик
Регистрация
9 Июн 2017
Сообщения
154
Симпатии
84
Пол
Мужской
Telegram
@paffgame
Vaqtincha, отбор авп происходит только при одном условии - при достижении онлайна, при котором авп запрещена.
 

Vaqtincha

aggressive
Разработчик
Скриптер
Регистрация
28 Янв 2018
Сообщения
960
Симпатии
681
Пол
Мужской
Зачем вообще что либо запрещать ?
 

paffgame

D0L64E6
Разработчик
Регистрация
9 Июн 2017
Сообщения
154
Симпатии
84
Пол
Мужской
Telegram
@paffgame
Vaqtincha, чтобы можно было нарушать запреты :Gamer4:
 

Vaqtincha

aggressive
Разработчик
Скриптер
Регистрация
28 Янв 2018
Сообщения
960
Симпатии
681
Пол
Мужской
paffgame, Серьезно если. Проще чутка ухудшить характеристики авп. Напр. nextattack, nextsecattack или меньше урона/патронов в магазине[DOUBLEPOST=1579431400][/DOUBLEPOST]Или не выдавать вознаграждение/фрагов за убийство с авп.
 

paffgame

D0L64E6
Разработчик
Регистрация
9 Июн 2017
Сообщения
154
Симпатии
84
Пол
Мужской
Telegram
@paffgame
Vaqtincha, вообще конечно можно и так сделать.
просто как-то даже не думал в таком ключе
 

serji

Пользователь
Регистрация
5 Дек 2019
Сообщения
8
Симпатии
1
ну тогда и смерти епт не считайте, давайте всю кс переделаем
 

Vaqtincha

aggressive
Разработчик
Скриптер
Регистрация
28 Янв 2018
Сообщения
960
Симпатии
681
Пол
Мужской
serji, кто мешает ? да возьми и делай свой мод.
 

d3m37r4

Скриптер
Постоялец
Регистрация
8 Июн 2017
Сообщения
742
Симпатии
393
Пол
Мужской
Telegram
@dmitry_isakow
paffgame, ясно, ага, щас бы самому себе противоречить.
Щас бы удаление айтема через additem ловить
HasRestrictItem - не ловит добавление авп через (rg_)give_item(), но с этим отлично справляется AddItem
Всё в HasRestrict и addPlayerItem делается.

А с учетом того, что нужно отловить покупку АВП, чтобы если произойдет отбор - вернуть деньги, догадываетесь какой хук?) Правильно - BuyWeaponByWeaponID
Но о чем это я? Это какие-то левые хуки...
Не нужно было бы делать костыльное гавно с возвратом денег, если бы изначально все было сделано правильно, лул.
 

paffgame

D0L64E6
Разработчик
Регистрация
9 Июн 2017
Сообщения
154
Симпатии
84
Пол
Мужской
Telegram
@paffgame
d3m37r4, я не знаю чем Вы смотрели код плагина, но фишка с возватом денег здесь только одна: если авп у игрока отбирается в конце раунда из-за низкого онлайна - возвращаются деньги.
В ОСТАЛЬНЫХ случаях покупка/получение авп блокируется без костылей :eek:
 

d3m37r4

Скриптер
Постоялец
Регистрация
8 Июн 2017
Сообщения
742
Симпатии
393
Пол
Мужской
Telegram
@dmitry_isakow
paffgame, это, видимо, и есть "необъективность решений и извилистый подход к задаче". Понимаю.
 

paffgame

D0L64E6
Разработчик
Регистрация
9 Июн 2017
Сообщения
154
Симпатии
84
Пол
Мужской
Telegram
@paffgame
d3m37r4, полностью согласен :Victory:
 

fantom

Разработчик
Регистрация
11 Июн 2017
Сообщения
426
Симпатии
293
Пол
Мужской
Зачем вообще отобрать авп ? Мне это бесит.
Полностью согласен. Плюс подняв авп, мне еще и бонусом деньги дадут.[DOUBLEPOST=1579546397][/DOUBLEPOST]
HasRestrictItem - не ловит добавление авп через (rg_)give_item(), но с этим отлично справляется AddItem
Зато отлично ловит покупку и запрещает, без костылей с отбиранием и возвратом денег.
А с учетом того, что нужно отловить покупку АВП, чтобы если произойдет отбор - вернуть деньги, догадываетесь какой хук?) Правильно - BuyWeaponByWeaponID
Нафига. Можно ведь просто запретить покупку и на этом все. Ну прямим словом костыль. Когда есть более удобные способы.
 

paffgame

D0L64E6
Разработчик
Регистрация
9 Июн 2017
Сообщения
154
Симпатии
84
Пол
Мужской
Telegram
@paffgame
fantom, Вы вообще код смотирте перед тем как говорить что-либо?

Погнали нахй собсна.

Итак, отлов покупки АВП "биз кастылий" (я тут где-то денежки вовзращаю хмхмх):
C++:
RegisterHookChain(RG_BuyWeaponByWeaponID, "BuyWeaponByWeaponID");

public BuyWeaponByWeaponID(id, WeaponIdType:weaponID){
    if(weaponID != WEAPON_AWP || !is_user_valid(id) || gAwp[id] > AWP_NONE)
        return HC_CONTINUE;
      
    new gMoney = get_member(id, m_iAccount);
    if(gMoney < COST_AWP)
        return HC_CONTINUE;
  
    if(check_awp(id)){
        gAwp[id] = AWP_BUY;
        return HC_CONTINUE;
    }
  
    SetHookChainReturn(ATYPE_INTEGER, true);
    return HC_SUPERCEDE;
}

Ах. да, чтоита????
C++:
    new gMoney = get_member(id, m_iAccount);

    if(gMoney < COST_AWP)

        return HC_CONTINUE;
А это вот уже костыль, ибо BuyWeaponByWeaponID, когда я тестил, вызывался иногда когда нехватало денег для покупки.


Отлов и блокирвока поулчения АВП любым другим способом:
C++:
RegisterHookChain(RG_CBasePlayer_AddPlayerItem, "AddItem");

public AddItem(id, pItem){
    if(get_member(pItem, m_iId) != WEAPON_AWP || gAwp[id] > AWP_NONE || !is_user_valid(id))
        return HC_CONTINUE;
  
    if(check_awp(id)){
        gAwp[id] = AWP_PICK_UP;
        return HC_CONTINUE;
    }
  
    SetHookChainReturn(ATYPE_INTEGER, false);
    return HC_SUPERCEDE;
}

И теперь САМАЯ ВАЖНАЯ часть нашей программы, "возвращение костыльных денег":

Без имени-1.png
В конце раунда, проверяется, ниже ли онлайн на сервере чем указано в кваре, и если НИЖЕ, то начинает отбирать АВП у людей, которые её успели купить/подобрать, и если АВП куплена - денежка возвращается :eek:

Так-же для особо умных людей, в пабликах выше, где отлавливается подбор/покупка игроков АВП видны отличные строчки gAwp[id] = AWP_BUY; / gAwp[id] = AWP_PICK_UP; уже догадались за что они отвечают?)
 

fantom

Разработчик
Регистрация
11 Июн 2017
Сообщения
426
Симпатии
293
Пол
Мужской
paffgame, и еще раз костыль с хуком BuyWeaponByWeaponID. А если скидка на авп в магазине для випов? Вот так нужно делать
Код:
public CBasePlayer_HasRestrictItem_Pre(const id, const ItemID:item, const ItemRestType:type) {
    if (/*если не авп или авп и разрешено выходим*/) {
        return HC_CONTINUE;
    }

    if (type == ITEM_TYPE_BUYING) {
        // оповещаем игрока что купить не возможно.
        // Можно еще и при подьеме оповещать, но нужно учесть несколько раз вызов тача
    }

    SetHookChainReturn(ATYPE_BOOL, true);
    return HC_SUPERCEDE;
}
Все. Таким образом покупка у нас запрещена. Никаких денег возвращать не нужно. Также тач с оружием на карте проверили и с выброшенным также. Плюс ко всему еще экипировку при спавне также проверяем, но можно опустить.

А вот хук для выдачи авп всякими випками и прочими плагинами
Код:
public CBasePlayer_AddPlayerItem_Pre(const id, const item) {
   if (/*если не авп или авп и разрешено выходим*/) {
        return HC_CONTINUE;
    }

    // оповещаем игрока что не возможно получить авп.
    SetHookChainReturn(ATYPE_INTEGER, false);
    return HC_SUPERCEDE;
}
Стоит также учесть что после покупки будет вызван также CBasePlayer_AddPlayerItem. Это легко решается либо временным хранением результата с ид игрока, ид итема и результатом ровно на 1 кадр, либо отключением и включением хука. И все 2 хука всего лишь.

Остается только решить вопрос с говновипками которые не проверяют валидность итема после выдачи. Но тут как говорится проблемы тех кто пользуется ими, а не лимитера. Также для проверки есть ли авп у игрока легко использовать битовую маску
Код:
get_entvar(player, var_weapons) & BIT(WEAPON_AWP)
Итого у нас код сокращается в двое, нет дурацкого выбрасывания АВП и возврат денег. Нам все это не нужно.
 

paffgame

D0L64E6
Разработчик
Регистрация
9 Июн 2017
Сообщения
154
Симпатии
84
Пол
Мужской
Telegram
@paffgame
fantom, да ебаный в рот, нет там возврата денег при покупке.
Я видимо тупой, не понимаю до чего вы все доебались.

Покажите мне костыли в моем коде, чтобы я понял.
 

fantom

Разработчик
Регистрация
11 Июн 2017
Сообщения
426
Симпатии
293
Пол
Мужской
Так-же для особо умных людей, в пабликах выше, где отлавливается подбор/покупка игроков АВП видны отличные строчки gAwp[id] = AWP_BUY; / gAwp[id] = AWP_PICK_UP; уже догадались за что они отвечают?)
Еще один костыль. Почему не хранить в pev дате куплен или нет. Нет лучше использовать какие-то глобальные массивы привязанные к игроку. Ведь так просто, там неиспользуемых пруд пруди. Если боитесь конфликтов, то можно битовое значение в спавнфлагс например или других флагах[DOUBLEPOST=1579553761][/DOUBLEPOST]paffgame, весь доеб к хукам и их использованию. Више я показал пример с адекватным хуком без вот этого
Код:
new gMoney = get_member(id, m_iAccount);
    if(gMoney < COST_AWP)
        return HC_CONTINUE;
Который и так есть в коде.
И это для тача веапонбокса или оружия на карте
Код:
RegisterHookChain(RG_CBasePlayer_AddPlayerItem, "AddItem");
Причем оно успешно пропадет с карты, так как будет подьем и потом запрет.[DOUBLEPOST=1579553838][/DOUBLEPOST]
Никаких денег возвращать не нужно
Да все таки поправлю себя, проверкой, ибо я хотел написать о возврат в начале, но сбился и про покупку написал
 

paffgame

D0L64E6
Разработчик
Регистрация
9 Июн 2017
Сообщения
154
Симпатии
84
Пол
Мужской
Telegram
@paffgame
fantom, вот вам мой кусочек из 1.3 версии :) [сейчас в закрепе 1.4.3]


C++:
public RestrictItem(id, ItemID:item, ItemRestType:type){
    if(item != ITEM_AWP || !is_user_valid(id) || gAwp[id] != AWP_NONE || type != ITEM_TYPE_BUYING)
        return HC_CONTINUE;
 
    /* * * Первая "покупка" при нехватке денег проскакивает >< * * */
    const COST_AWP = 4750;
    new gMoney = get_member(id, m_iAccount);
    if(gMoney < COST_AWP)
        return HC_CONTINUE;
    /* * * Можете удалить этот "чудофикс", если он вам не нравится * * */
 
    gAwp[id] = AWP_BUY;
 
    if(check_awp(id, false))
        return HC_CONTINUE;
 
    gAwp[id] = AWP_NONE;
 
    SetHookChainReturn(ATYPE_INTEGER, true);
    return HC_SUPERCEDE;
}
Ваш любимый HasRestrictItem..
Я не знаю, мб он сейчас подправлен в реапи, я не чекал обновлений, и не знаю какая сейчас обстановка там с апишкой.
но тогда и в harestrictitem был такой косячок

А HasRestrictItem заменил на BuyWeaponByWeaponID из-за того что вторрой хук срабатывает онли при покупке

Даже олд исход приложу.
 

Вложения

paffgame

D0L64E6
Разработчик
Регистрация
9 Июн 2017
Сообщения
154
Симпатии
84
Пол
Мужской
Telegram
@paffgame
, когда я тестил - было так, иначе бы я это даже не добавлял в исход
Не ну ок, если я ошибся - я каюсь
Но добавлял я это не просто так
 
Сверху Снизу