Проверить именно первый слот игрока.

oleg_nelasy

Участник
Сообщения
664
Реакции
46
C#:
       foreach (var player in Utilities.GetPlayers()
            .Where(p => p.Connected == PlayerConnectedState.PlayerConnected)
            .Where(p => p.PlayerPawn.Value?.TeamNum == (byte)CsTeam.Terrorist))
        {
            var playerPawn = player.PlayerPawn.Value!;
            var weaponServices = player.PlayerPawn.Value!.WeaponServices;
            if (weaponServices is null) continue;

            var activeWeapon = weaponServices.ActiveWeapon;
            if (activeWeapon is null || activeWeapon.Value is null) continue;
        
            if (activeWeapon.Value.DesignerName == "weapon_awp")
            {
                awpCountTeamT++;
            }
        }
Сейчас проверяет активное оружие но если человек будет держать пистолет или нож то пропустит авп. Помогите пожалуйста переделать код чтоб проверяло именно первый слот не зависимо от того что в руках у игрока.
 

Tomiks

Участник
Сообщения
419
Реакции
288
Там из WeaponServices можно получить MyWeapons если не путаю и проитерировать в цикле и так ты переберёшь всё оружие
 

Tomiks

Участник
Сообщения
419
Реакции
288
@Tomiks, Мне бы пример. MyWeapons видел но так и не понял как правильно вытащить оружие из первого слота.
C#:
foreach (var weapon in player.PlayerPawn.Value!.WeaponServices!.MyWeapons)
{
    if (weapon is { IsValid: true, Value.IsValid: true })
    {
        if(wpn.Value.AttributeManager.Item.ItemDefinitionIndex == (int)ItemDefinition.AWP)
        {
            // у игрока есть авп
        }
    }
}
Вроде так примерно
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
@Tomiks, Попробовал применить твое решение.
C#:
public HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info)
    {
        int awpCountTeamT = 0;

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

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

        Server.PrintToChatAll($"Игроков c авп {awpCountTeamT} в команде терористов");
        return HookResult.Continue;
    }

НЕ совсем понял что такое wpn?
wpn не существует
 

Tomiks

Участник
Сообщения
419
Реакции
288
@Tomiks, Попробовал применить твое решение.
C#:
public HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info)
    {
        int awpCountTeamT = 0;

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

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

        Server.PrintToChatAll($"Игроков c авп {awpCountTeamT} в команде терористов");
        return HookResult.Continue;
    }

НЕ совсем понял что такое wpn?
wpn не существует
wpn на weapon замени, пропустил случайно
 
Сверху Снизу