Щас бы удаление айтема через additem ловить
HasRestrictItem - не ловит добавление авп через (rg_)give_item(), но с этим отлично справляется AddItem
Всё в HasRestrict и addPlayerItem делается.
Не нужно было бы делать костыльное гавно с возвратом денег, если бы изначально все было сделано правильно, лул.А с учетом того, что нужно отловить покупку АВП, чтобы если произойдет отбор - вернуть деньги, догадываетесь какой хук?) Правильно - BuyWeaponByWeaponID
Но о чем это я? Это какие-то левые хуки...
Полностью согласен. Плюс подняв авп, мне еще и бонусом деньги дадут.[DOUBLEPOST=1579546397][/DOUBLEPOST]Зачем вообще отобрать авп ? Мне это бесит.
Зато отлично ловит покупку и запрещает, без костылей с отбиранием и возвратом денег.HasRestrictItem - не ловит добавление авп через (rg_)give_item(), но с этим отлично справляется AddItem
Нафига. Можно ведь просто запретить покупку и на этом все. Ну прямим словом костыль. Когда есть более удобные способы.А с учетом того, что нужно отловить покупку АВП, чтобы если произойдет отбор - вернуть деньги, догадываетесь какой хук?) Правильно - BuyWeaponByWeaponID
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;
}
new gMoney = get_member(id, m_iAccount);
if(gMoney < COST_AWP)
return HC_CONTINUE;
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;
}
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;
}
get_entvar(player, var_weapons) & BIT(WEAPON_AWP)
Еще один костыль. Почему не хранить в pev дате куплен или нет. Нет лучше использовать какие-то глобальные массивы привязанные к игроку. Ведь так просто, там неиспользуемых пруд пруди. Если боитесь конфликтов, то можно битовое значение в спавнфлагс например или других флагах[DOUBLEPOST=1579553761][/DOUBLEPOST]paffgame, весь доеб к хукам и их использованию. Више я показал пример с адекватным хуком без вот этогоТак-же для особо умных людей, в пабликах выше, где отлавливается подбор/покупка игроков АВП видны отличные строчки gAwp[id] = AWP_BUY; / gAwp[id] = AWP_PICK_UP; уже догадались за что они отвечают?)
new gMoney = get_member(id, m_iAccount);
if(gMoney < COST_AWP)
return HC_CONTINUE;
RegisterHookChain(RG_CBasePlayer_AddPlayerItem, "AddItem");
Да все таки поправлю себя, проверкой, ибо я хотел написать о возврат в начале, но сбился и про покупку написалНикаких денег возвращать не нужно
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;
}
Чего?/* * * Первая "покупка" при нехватке денег проскакивает >< * * */