Засчитывает оружие хотя его нет

oleg_nelasy

Участник
Сообщения
664
Реакции
46
C#:
    private HookResult OnEventItemPurchasePost(EventItemPurchase @event, GameEventInfo info)
    {
        int awpCountTeamT = 0;
        int awpCountTeamСT = 0;

        Server.PrintToChatAll($"Ирок {@event.Userid.PlayerName} купил оружие {@event.Weapon} в команде {@event.Userid.TeamNum}");

        foreach (var player in Utilities.GetPlayers()
            .Where(p => p.Connected == PlayerConnectedState.PlayerConnected)
            .Where(p => p.PlayerPawn.Value?.TeamNum == (byte)CsTeam.Terrorist || p.PlayerPawn.Value?.TeamNum == (byte)CsTeam.CounterTerrorist))
        {
            var playerPawn = player.PlayerPawn.Value!;
            var playerTeam = player.PlayerPawn.Value!.TeamNum;

            foreach (var weapon in playerPawn.WeaponServices!.MyWeapons)
            {
                if (weapon is { IsValid: true, Value.IsValid: true })
                {
                    if (weapon.Value.AttributeManager.Item.ItemDefinitionIndex == (int)ItemDefinition.AWP)
                    {
                        // у игрока есть авп
                        if (playerTeam == 2) awpCountTeamT++;
                        else if (playerTeam == 3) awpCountTeamСT++;
                    }
                }
            }
        }

        @event.Userid.PrintToChat($"awpCountTeamT = {awpCountTeamT} awpCountTeamСT = {awpCountTeamСT}");

        if ((@event.Weapon == "weapon_awp" && awpCountTeamT >= g_limitAWP && @event.Userid.TeamNum == 2) || (@event.Weapon == "weapon_awp" && awpCountTeamСT >= g_limitAWP && @event.Userid.TeamNum == 3))
        {
            statePurchasePlayers[@event.Userid.Index]!.IsBay = true;
        }

        return HookResult.Continue;
    }
Проблема следующая. При лимите в одно авп. Я покупаю авп все срабатывает авп в руках код отработал как надо. Но если я его выброшу и попробую купит новое awpCountTeamT или awpCountTeamСT будет равен 1 а не 0. хотя на момент покупки авп не у кого нет и значение должно быть равно 0.

Проблема явно в

C#:
            foreach (var weapon in playerPawn.WeaponServices!.MyWeapons)
            {
                if (weapon is { IsValid: true, Value.IsValid: true })
                {
                    if (weapon.Value.AttributeManager.Item.ItemDefinitionIndex == (int)ItemDefinition.AWP)
                    {
                        // у игрока есть авп
                        if (playerTeam == 2) awpCountTeamT++;
                        else if (playerTeam == 3) awpCountTeamСT++;
                    }
                }
            }
Почему-то если у тебя уже был куплен авп но ты его выбросил при покупке следующего засчитывает что у тебя авп есть хотя его нет даже если попробовать сменить оружие на другое все равно плюсует авп которого не у ког нет.
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
C#:
    private HookResult OnEventItemPurchasePost(EventItemPurchase @event, GameEventInfo info)
    {
        int awpCountTeamT = 0;
        int awpCountTeamСT = 0;

        Server.PrintToChatAll($"Ирок {@event.Userid.PlayerName} купил оружие {@event.Weapon} в команде {@event.Userid.TeamNum}");

        foreach (var player in Utilities.GetPlayers()
            .Where(p => p.Connected == PlayerConnectedState.PlayerConnected)
            .Where(p => p.PlayerPawn.Value?.TeamNum == (byte)CsTeam.Terrorist || p.PlayerPawn.Value?.TeamNum == (byte)CsTeam.CounterTerrorist))
        {
            var playerPawn = player.PlayerPawn.Value!;
            var playerTeam = player.PlayerPawn.Value!.TeamNum;

            foreach (var weapon in playerPawn.WeaponServices!.MyWeapons)
            {
                if (weapon is { IsValid: true, Value.IsValid: true })
                {
                    if (weapon.Value.AttributeManager.Item.ItemDefinitionIndex == (int)ItemDefinition.AWP)
                    {
                        // у игрока есть авп
                        if (playerTeam == 2) awpCountTeamT++;
                        else if (playerTeam == 3) awpCountTeamСT++;
                    }
                }
            }
        }

        @event.Userid.PrintToChat($"awpCountTeamT = {awpCountTeamT} awpCountTeamСT = {awpCountTeamСT}");

        if ((@event.Weapon == "weapon_awp" && awpCountTeamT >= g_limitAWP && @event.Userid.TeamNum == 2) || (@event.Weapon == "weapon_awp" && awpCountTeamСT >= g_limitAWP && @event.Userid.TeamNum == 3))
        {
            statePurchasePlayers[@event.Userid.Index]!.IsBay = true;
        }

        return HookResult.Continue;
    }
Проблема следующая. При лимите в одно авп. Я покупаю авп все срабатывает авп в руках код отработал как надо. Но если я его выброшу и попробую купит новое awpCountTeamT или awpCountTeamСT будет равен 1 а не 0. хотя на момент покупки авп не у кого нет и значение должно быть равно 0.

Проблема явно в

C#:
            foreach (var weapon in playerPawn.WeaponServices!.MyWeapons)
            {
                if (weapon is { IsValid: true, Value.IsValid: true })
                {
                    if (weapon.Value.AttributeManager.Item.ItemDefinitionIndex == (int)ItemDefinition.AWP)
                    {
                        // у игрока есть авп
                        if (playerTeam == 2) awpCountTeamT++;
                        else if (playerTeam == 3) awpCountTeamСT++;
                    }
                }
            }
Почему-то если у тебя уже был куплен авп но ты его выбросил при покупке следующего засчитывает что у тебя авп есть хотя его нет даже если попробовать сменить оружие на другое все равно плюсует авп которого не у ког нет.
Так тебе нужно при выбросе делать --

Или что должно происходить?
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Так тебе нужно при выбросе делать --

Или что должно происходить?
Должно быть ++. Должно подпитывается сколько авп в каждой команде в момент покупки. Но фокус в том что когда первый раз покупаешь все норм. Но если ты купленное оружие выбросишь и купишь новое то почему-то считает что у тебя уже есть это оружие хотя у игрока его нет. Поэтому засчитывает лишний ++ и начинаются проблемы.
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Должно быть ++. Должно подпитывается сколько авп в каждой команде в момент покупки. Но фокус в том что когда первый раз покупаешь все норм. Но если ты купленное оружие выбросишь и купишь новое то почему-то считает что у тебя уже есть это оружие хотя у игрока его нет. Поэтому засчитывает лишний ++ и начинаются проблемы.
Используй OnNextFrame или как оно там, в первом фрейме проверь, есть ли оружие, в следующем уже делай то что нужно
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Используй OnNextFrame или как оно там, в первом фрейме проверь, есть ли оружие, в следующем уже делай то что нужно
Можно пример как сделать проверку через OnNextFrame пожалуйста? То что я нашел не очень похоже на то что нужно.
И разве это не проверка на наличие оружия? if (weapon is { IsValid: true, Value.IsValid: true })
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Можно пример как сделать проверку через OnNextFrame пожалуйста? То что я нашел не очень похоже на то что нужно.
И разве это не проверка на наличие оружия? if (weapon is { IsValid: true, Value.IsValid: true })
Смысла от этой проверки кмк не особо много, т.к. если бы оружия не было - оно бы и не содержалось в этом массиве playerPawn.WeaponServices!.MyWeapons
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Смысла от этой проверки кмк не особо много, т.к. если бы оружия не было - оно бы и не содержалось в этом массиве playerPawn.WeaponServices!.MyWeapons
Понял.
Используй OnNextFrame или как оно там, в первом фрейме проверь, есть ли оружие, в следующем уже делай то что нужно
Можете показать пример?
 
Сверху Снизу