Нужна помощь в написании плагина

Hideki

Участник
Сообщения
15
Реакции
7
Пишу свой плагин для сервера, в начале раунда вип игроку выдаються кулаки(CS GO), мне никак не удаеться выполнить проверку, на наличие кулаков у данного игрока, таким образом, если человек выживает, т. е. не теряет кулаки, то они начинают стакаться, то есть выдаються вторые третие и т. д.

Текущий код:
if(bIsVIP && VIP_IsClientFeatureUse(iClient, g_sFeature))
    {
        EquipPlayerWeapon(iClient, GivePlayerItem(iClient, "weapon_fists"));
    }
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Проще говоря, вы просите написать за вас плагин, потому что это: EquipPlayerWeapon(iClient, GivePlayerItem(iClient, "weapon_fists")); - перебор 🤔
 

Hideki

Участник
Сообщения
15
Реакции
7
Проще говоря, вы просите написать за вас плагин, потому что это: EquipPlayerWeapon(iClient, GivePlayerItem(iClient, "weapon_fists")); - перебор 🤔
Мне надо лишь узнатть как проверть есть ли у игрока кулаки, в случае с шприцом можно сделать так getEntProp(iClient, Prop_Data, "m_iAmmo", _, 21) == 0, но как быть с кулаками я не знаю
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
Мне надо лишь узнатть как проверть есть ли у игрока кулаки, в случае с шприцом можно сделать так getEntProp(iClient, Prop_Data, "m_iAmmo", _, 21) == 0, но как быть с кулаками я не знаю
C++:
bool HasFists(int iClient)
{
    int weapon;
    char szWeapon[32];
    while((weapon = GetPlayerWeaponSlot(iClient, CS_SLOT_KNIFE)) != -1)
    {
        GetEdictClassname(weapon, szWeapon, sizeof(szWeapon));
        if (!strcmp(szWeapon[7], "fists"))
        {
            return true;
        }
    }
    return false;
}
как-то так (не тестил)
 

Hideki

Участник
Сообщения
15
Реакции
7
C++:
bool HasFists(int iClient)
{
    int weapon;
    char szWeapon[32];
    while((weapon = GetPlayerWeaponSlot(iClient, CS_SLOT_KNIFE)) != -1)
    {
        GetEdictClassname(weapon, szWeapon, sizeof(szWeapon));
        if (!strcmp(szWeapon[7], "fists"))
        {
            return true;
        }
    }
    return false;
}
как-то так (не тестил)
Не работает, и в начале каждого раунда начинаеться отсчет автоотключнения и длиться несколько секунд, после все становиться нормально
 

Hideki

Участник
Сообщения
15
Реакции
7
а как используешь?
C++:
bool HasFists(int iClient)
{
    int weapon;
    char szWeapon[32];
    while((weapon = GetPlayerWeaponSlot(iClient, CS_SLOT_KNIFE)) != -1)
    {
        GetEdictClassname(weapon, szWeapon, sizeof(szWeapon));
        if (!strcmp(szWeapon[7], "fists"))
        {
            return true;
        }
    }
    return false;
}

public void VIP_OnPlayerSpawn(int iClient, int iTeam, bool bIsVIP)
{
   
    if(bIsVIP && VIP_IsClientFeatureUse(iClient, g_sFeature) && HasFists(iClient))
    {
        EquipPlayerWeapon(iClient, GivePlayerItem(iClient, "weapon_fists"));
    }
        return Plugin_Handled;
}
 
Последнее редактирование:

Someone

Участник
Сообщения
1,933
Реакции
1,653
C++:
bool HasFists(int iClient)
{
    int weapon;
    char szWeapon[32];
    while((weapon = GetPlayerWeaponSlot(iClient, CS_SLOT_KNIFE)) != -1)
    {
        GetEdictClassname(weapon, szWeapon, sizeof(szWeapon));
        if (!strcmp(szWeapon[7], "fists"))
        {
            return true;
        }
    }
    return false;
}
как-то так (не тестил)
А разве цикл не будет бесконечным, если у него не будет кулаков ?
Ты ведь проверяешь на наличие кулаков, а если их нет, то GetPlayerWeaponSlot(iClient, CS_SLOT_KNIFE) всегда будет != -1.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #11
Это я понял, исправил но оно так же не работает и в начале раунда серв виснет
отладку добавь
Ты ведь проверяешь на наличие кулаков, а если их нет, то GetPlayerWeaponSlot(iClient, CS_SLOT_KNIFE) всегда будет != -1.
пока оружие в слоте CS_SLOT_KNIFE != -1
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #12
а стоп туплю. там откуда копировал все оружия из слота удалялись.
да. надо по другому чуток
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #14
Я что-то туплю, так и не понял что написать надо
C++:
bool HasFists(int iClient)
{
    int m_hMyWeapons = FindSendPropOffs("CBasePlayer", "m_hMyWeapons");
    char szWeapon[32];
    for(int i = 0, iWeapon; i < 128; i += 4)
    {
        iWeapon = GetEntDataEnt2(iClient, m_hMyWeapons + i);

        if(iWeapon != -1 && IsValidEdict(iWeapon) && IsValidEntity(iWeapon))
        {
            GetEdictClassname(iWeapon, szWeapon, sizeof(szWeapon));
            if (!strcmp(szWeapon[7], "fists"))
            {
                return true;
            }
        }
    }

    return false;
}
 

Hideki

Участник
Сообщения
15
Реакции
7
C++:
bool HasFists(int iClient)
{
    int m_hMyWeapons = FindSendPropOffs("CBasePlayer", "m_hMyWeapons");
    char szWeapon[32];
    for(int i = 0, iWeapon; i < 128; i += 4)
    {
        iWeapon = GetEntDataEnt2(iClient, m_hMyWeapons + i);

        if(iWeapon != -1 && IsValidEdict(iWeapon) && IsValidEntity(iWeapon))
        {
            GetEdictClassname(iWeapon, szWeapon, sizeof(szWeapon));
            if (!strcmp(szWeapon[7], "fists"))
            {
                return true;
            }
        }
    }

    return false;
}
Все работает, большое спасибо
 
Сверху Снизу