Лимит на покупку Щита

Сообщения
445
Реакции
76
Помог
4 раз(а)
BlackSignature, видимо мы не поняли друг друга. Суть: Допустим, я купил Щит и выброшу его, т.е. в руках Щита нет и я могу его заново приобрести.
18 Янв 2019
BlackSignature, Если g_eCvar[CVAR__LIMIT_PER_TEAM] >= Допустимого (не зависимо: в руках он или на земле), то не даст даже закупить предмет
 
Сообщения
1,175
Реакции
2,144
Помог
57 раз(а)
WILL_BE,
WILL_BE, RG_CBasePlayer_HasRestrictItem работает и на поднятие и на выдачу и на екипировку. Не сработает при выдаче сторонним плагином.
Можно хоть 100 щитов купить (пока позволяет лимит) и выбросить. И что? Иметь на руках (поднять, купить) можно не больше лимита на команду. Если нужно приделать учёт покупки, т.е. чтобы игрок не мог купить больше 1 щита в раунде, то это не проблема, и делается на коленке. Но лично я не вижу в этом смысла.
 
Сообщения
445
Реакции
76
Помог
4 раз(а)
BlackSignature, Вот меня и нужно направить в нужное русло, дабы g_eCvar[CVAR__LIMIT_PER_TEAM] так же имел свою "силу" и в закупке
 
Сообщения
1,175
Реакции
2,144
Помог
57 раз(а)
WILL_BE, Ну дык надо заменить iCurrentLimitPerTeam на g_eCvar[CVAR__LIMIT_PER_TEAM]
 
Сообщения
445
Реакции
76
Помог
4 раз(а)
BlackSignature, Да это все давно сделано, я говорю, вы меня видимо не понимаете, вроде доходчивого объясняю ситуацию
18 Янв 2019
Если Щит куплен и лежит на земле, т.е. на руках его нет, но он куплен и на земле, в этом случае МОЖНО приобрести еще один Щит, и так сколько угодно, лишь бы Щит не был у кого-либо на руках. Нужно как-то сделать и на закуп лимит - не зависимо от На руках ли щит или же на Земле. Т.е. Строго по g_eCvar[CVAR__LIMIT_PER_TEAM]
 
Сообщения
1,175
Реакции
2,144
Помог
57 раз(а)
WILL_BE, Я понял. В этом нет смысла. Хоть 100 щитов игроки купят методом купил+бросил, на руках будет ровно столько, сколько позволяет иметь лимит (без учёта посторонних способов выдачи). Поднять с земли щит сверх лимита не выйдет.

Но если это нужно сделать, то это либо поиск щитов в мире по факту обращения к проверке на лимит, либо кеш. В данном случае лучше уже сделать кеш.
 
Сообщения
1,175
Реакции
2,144
Помог
57 раз(а)
WILL_BE, ну требуется что? Посчитать кол-во щитов на руках + кол-во щитов на земле. Если сумма больше лимита на команду, то купить нельзя. Соотвественно, при дропе щита надо повысить счётчик щитов не земле, при подъёме счётчик понизить. Благодаря счётчику (кеш) нам не надо при каждом обращении делать пересчёт щитов на земле.

Тут вопрос, как определить, к какой команде относится лежащий на земле щит. Либо сразу к обеим, либо к той, игрок которой его выкинул.
18 Янв 2019
Чисто теоретически можно вообще не делать пересчёт. Купил игрок щит = +1 к счётчику команды. Не важно что потом с этим щитом будет. В конце раунда зануление. Для паблика сгодится. Метод неаккуратный, но зато до безобразия простой.
 
Сообщения
288
Реакции
226
Помог
6 раз(а)
WILL_BE, чтобы в начале раунда получать актуальное значение количества щитов
 
Сообщения
445
Реакции
76
Помог
4 раз(а)
BlackSignature, ох, сложновато :dntknw: Ладно, пока нет таких знаний. Сколько будет стоить, данная Работа с Объяснением:
WILL_BE, ну требуется что? Посчитать кол-во щитов на руках + кол-во щитов на земле. Если сумма больше лимита на команду, то купить нельзя. Соотвественно, при дропе щита надо повысить счётчик щитов не земле, при подъёме счётчик понизить. Благодаря счётчику (кеш) нам не надо при каждом обращении делать пересчёт щитов на земле.

Тут вопрос, как определить, к какой команде относится лежащий на земле щит. Либо сразу к обеим, либо к той, игрок которой его выкинул.
18 Янв 2019
Чисто теоретически можно вообще не делать пересчёт. Купил игрок щит = +1 к счётчику команды. Не важно что потом с этим щитом будет. В конце раунда зануление. Для паблика сгодится. Метод неаккуратный, но зато до безобразия простой.
20 Янв 2019
Посмотрел код из соседней темы, примерно так у меня получилось: в OnHasRestrictItem_Pre
Код:
new TeamName:iPlayerTeam = get_member(id, m_iTeam)
if(++g_iLimit[_:iPlayerTeam] > g_eCvar[CVAR__LIMIT_PER_TEAM])
    {
        rg_send_audio(id, SOUND__TUTOR_MSG)
        client_print_color(id, print_team_default, "[^4Shield Limit^1] Достигнуто ^3максимальное ^1количество ^4Щитов ^1на команду ^1[^3%d^1/^3%d^1]", iTeamMatesWithShield, g_eCvar[CVAR__LIMIT_PER_TEAM])
        SetHookChainReturn(ATYPE_INTEGER, true);
        return HC_SUPERCEDE;
    }
Далее обнуление
Код:
public OnNewRound_Pre(iPlayer) {
    arrayset(_:g_fLastFailTime, 0, sizeof(g_fLastFailTime))
    arrayset(g_iLimit[iPlayer], 0, sizeof(g_iLimit[]))
}
 
Сообщения
1,175
Реакции
2,144
Помог
57 раз(а)
WILL_BE, Счётчик покупок надо начислять только если игрок может купить щит: надо проверять, хватает ли у него денег, и скорее всего ещё надо проверять, нет ли у него уже щита. Если проверки не делать, можно вхолостую навызывать хук, по факту щит не получив, но при этом лимит будет достигнут. Ну и в новом раунде счётчик сбросился, окей. А как насчёт щитов, которые уже на руках у игроков? При таком раскладе они не будут учтены в лимите покупок. Нужно пересчёт сделать. Ну и если не ограничивать подбор щитов по ходу раунда, возможно нужно ещё отбирать излишек у игроков в новом раунде. Не обязательно, но можно. Я бы забил и сделал проще. Как уже сделал в примере с лимитом AWP. Я бы просто переделал его, и этого бы хватило. Не понимаю, какую цель вы преследуете, и зачем.

Как вообще реализуется покупка, если щит могут купить только контры?
 
Последнее редактирование:

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

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