Проверка оружия у игрока

Статус
В этой теме нельзя размещать новые ответы.

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Подскажите как проверить какое оружие и игрока в слоте 0 и отдельно в слоте 1

В моем случаи надо сделать проверку.


C-подобный:
if(если в слоте 1 "weapon_glock")
{
    тогда
    RemovePlayerItem(iClient, "weapon_glock");
    GivePlayerItem(iClient, "weapon_usp_silencer");
}

и

if(если в слоте 0 "weapon_ak47")
{
    тогда
    RemovePlayerItem(iClient, "weapon_ak47");
    GivePlayerItem(iClient, "weapon_m4a1");
}

Код максимально упростил чтобы передать самую суть.
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
if(GetPlayerWeaponSlot(iClient, 1) == "weapon_glock") бьет ошибку массив не индексирован
Сообщения автоматически склеены:

Извиняюсь функция интовая и возвращает индекс оружия может кто подсказать где посмотреть за каким оружием какой индекс закреплён?
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@oleg_nelasy, второй строкой ссылка как получить класс по индексу
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
C-подобный:
int IsWeaponInSlot(int iClient, int iSlot, const char[] sWeapon){
    int iWeapon = GetPlayerWeaponSlot(iClient, iSlot);
    if(iWeapon == -1){
        return -1;
    }
    
    char sClassname[32];
    GetEntityClassname(iWeapon, sClassname, sizeof(sClassname));
    
    if(strcmp(sClassname[7], sWeapon) == 0){
        return iWeapon;
    }
    
    return -1;
}

int iWeapon = IsWeaponInSlot(iClient, 1, "glock");
if(iWeapon != -1){
    RemovePlayerItem(iClient, iWeapon);
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Someone, только с гранатами так не прокатит.
Да и с тазером, вроде.
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
C-подобный:
В начале обьявил int iWeapon; char sClassname[32];

    iWeapon = GetPlayerWeaponSlot(iClient, 1);
    GetEntityClassname(iWeapon, sClassname, sizeof(sClassname));
                  
    PrintToChat(iClient, "GetPlayerWeaponSlot(iClient, 1) = %d sClassname = %s", GetPlayerWeaponSlot(iClient, 1), sClassname);
    if(sClassname == "weapon_glock")
    {
        RemovePlayerItem(iClient, g_getWeapPistols[iClient]);
        GivePlayerItem(iClient, "weapon_usp_silencer");
    }
на 7 строчке пишет ошибку error 033: array must be indexed (variable "-unknown-") при этом проверка выводит sClassname = weapon_glock
 
Последнее редактирование:

Vit_ amin

Добрая душа
Сообщения
1,504
Реакции
660
C-подобный:
В начале обьявил int iWeapon; char sClassname[32];

    iWeapon = GetPlayerWeaponSlot(iClient, 1);
    GetEntityClassname(iWeapon, sClassname, sizeof(sClassname));
                 
    PrintToChat(iClient, "GetPlayerWeaponSlot(iClient, 1) = %d sClassname = %s", GetPlayerWeaponSlot(iClient, 1), sClassname);
    if(sClassname == "weapon_glock")
    {
        RemovePlayerItem(iClient, g_getWeapPistols[iClient]);
        GivePlayerItem(iClient, "weapon_usp_silencer");
    }
на 7 строчке пишет ошибку error 033: array must be indexed (variable "-unknown-") при этом проверка выводит sClassname = weapon_glock
Потому что строчки сверяются набором массива (символ в символ) с помощью
C-подобный:
strcmp
StrContains
Но никак не сравнение integer значений
 

Nebraska

Участник
Сообщения
225
Реакции
293
если я правильно понял?
if(strcmp(sClassname, "weapon_glock"))
Да, только if(stcmp(sClassname, “weapon_glock”) == 0) или if(StrEqual(sClassname, “weapon_glock”)). Я привык использовать второй вариант, хотя в плане оптимизации первый будет лучше.
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Да, только if(stcmp(sClassname, “weapon_glock”) == 0) или if(StrEqual(sClassname, “weapon_glock”)). Я привык использовать второй вариант, хотя в плане оптимизации первый будет лучше.
если совпало возвращает 0?


C-подобный:
PrintToChat(iClient, "У вас в рукках %s %d", sClassname, strcmp(sClassname[7], "glock"));
if(strcmp(sClassname[7], "glock"))


C-подобный:
PrintToChat(iClient, "У вас в рукках %s %d", sClassname, strcmp(sClassname, "weapon_glock"));
if(strcmp(sClassname, "weapon_glock"))

в обоих случаях возвращает 0 хотя sClassname = weapon_glock
 
Последнее редактирование:

Nebraska

Участник
Сообщения
225
Реакции
293
если совпало возвращает 0?
да, в инете погугли эту функцию, она из c++, полно информации
Сообщения автоматически склеены:

если совпало возвращает 0?


C-подобный:
PrintToChat(iClient, "У вас в рукках %s %d", sClassname, strcmp(sClassname[7], "glock"));
if(strcmp(sClassname[7], "glock"))


C-подобный:
PrintToChat(iClient, "У вас в рукках %s %d", sClassname, strcmp(sClassname, "weapon_glock"));
if(strcmp(sClassname, "weapon_glock"))

в обоих случаях возвращает 0 хотя sClassname = weapon_glock
Ну так потому что в первом случае ты сравниваешь с 7 символа строку, считай “weapon_” ты уже не учитываешь. Так и должно быть.
 
Последнее редактирование:

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Обращайся, если что не понятно, все с этого начинали
хм у меня фокус
weapon_cz75a возвращает индекс weapon_p250
и weapon_usp_silencer возвращает weapon_hkp2000
с остальными пистолетами работает четко
Сообщения автоматически склеены:

C-подобный:
iPistolsIndex = GetPlayerWeaponSlot(iClient, 1);
GetEntityClassname(iPistolsIndex, sPistolsName, sizeof(sPistolsName));
PrintToChat(iClient, "Вы поменяли %s на weapon_glock strcmp = %d", sPistolsName, strcmp(sPistolsName, "weapon_usp_silencer"));
if(!strcmp(sPistolsName, "weapon_usp_silencer"))
{
    RemovePlayerItem(iClient, g_getWeapPistols[iClient]);
    GivePlayerItem(iClient, "weapon_glock");
}

Вместо weapon_usp_silencer получаю weapon_hkp2000

тоже самое


C-подобный:
iPistolsIndex = GetPlayerWeaponSlot(iClient, 1);
GetEntityClassname(iPistolsIndex, sPistolsName, sizeof(sPistolsName));
PrintToChat(iClient, "Индекс %s = %d", sPistolsName, iPistolsIndex);
PrintToChat(iClient, "Вы поменяли %s на weapon_tec9 strcmp = %d", sPistolsName, strcmp(sPistolsName, "weapon_cz75a"));
if(!strcmp(sPistolsName, "weapon_cz75a"))
{
    RemovePlayerItem(iClient, g_getWeapPistols[iClient]);
    GivePlayerItem(iClient, "weapon_tec9");
}

Вместо weapon_cz75aполучаю weapon_p250

все остальное оружие работает идеально
 
Последнее редактирование:

Nebraska

Участник
Сообщения
225
Реакции
293
хм у меня фокус
weapon_cz75a возвращает индекс weapon_p250
и weapon_usp_silencer возвращает weapon_hkp2000
с остальными пистолетами работает четко
Сообщения автоматически склеены:

C-подобный:
iPistolsIndex = GetPlayerWeaponSlot(iClient, 1);
GetEntityClassname(iPistolsIndex, sPistolsName, sizeof(sPistolsName));
PrintToChat(iClient, "Вы поменяли %s на weapon_glock strcmp = %d", sPistolsName, strcmp(sPistolsName, "weapon_usp_silencer"));
if(!strcmp(sPistolsName, "weapon_usp_silencer"))
{
    RemovePlayerItem(iClient, g_getWeapPistols[iClient]);
    GivePlayerItem(iClient, "weapon_glock");
}

Вместо weapon_usp_silencer получаю weapon_hkp2000

тоже самое


C-подобный:
iPistolsIndex = GetPlayerWeaponSlot(iClient, 1);
GetEntityClassname(iPistolsIndex, sPistolsName, sizeof(sPistolsName));
PrintToChat(iClient, "Индекс %s = %d", sPistolsName, iPistolsIndex);
PrintToChat(iClient, "Вы поменяли %s на weapon_tec9 strcmp = %d", sPistolsName, strcmp(sPistolsName, "weapon_cz75a"));
if(!strcmp(sPistolsName, "weapon_cz75a"))
{
    RemovePlayerItem(iClient, g_getWeapPistols[iClient]);
    GivePlayerItem(iClient, "weapon_tec9");
}

Вместо weapon_cz75aполучаю weapon_p250

все остальное оружие работает идеально
хм у меня фокус
weapon_cz75a возвращает индекс weapon_p250
и weapon_usp_silencer возвращает weapon_hkp2000
с остальными пистолетами работает четко
Сообщения автоматически склеены:

C-подобный:
iPistolsIndex = GetPlayerWeaponSlot(iClient, 1);
GetEntityClassname(iPistolsIndex, sPistolsName, sizeof(sPistolsName));
PrintToChat(iClient, "Вы поменяли %s на weapon_glock strcmp = %d", sPistolsName, strcmp(sPistolsName, "weapon_usp_silencer"));
if(!strcmp(sPistolsName, "weapon_usp_silencer"))
{
    RemovePlayerItem(iClient, g_getWeapPistols[iClient]);
    GivePlayerItem(iClient, "weapon_glock");
}

Вместо weapon_usp_silencer получаю weapon_hkp2000

тоже самое


C-подобный:
iPistolsIndex = GetPlayerWeaponSlot(iClient, 1);
GetEntityClassname(iPistolsIndex, sPistolsName, sizeof(sPistolsName));
PrintToChat(iClient, "Индекс %s = %d", sPistolsName, iPistolsIndex);
PrintToChat(iClient, "Вы поменяли %s на weapon_tec9 strcmp = %d", sPistolsName, strcmp(sPistolsName, "weapon_cz75a"));
if(!strcmp(sPistolsName, "weapon_cz75a"))
{
    RemovePlayerItem(iClient, g_getWeapPistols[iClient]);
    GivePlayerItem(iClient, "weapon_tec9");
}

Вместо weapon_cz75aполучаю weapon_p250

все остальное оружие работает идеально
хмм, даже не знаю, в коде, вроде как, все хорошо. я с cs:go никогда не имел дел, всегда на сурсе писал, может баг какой-то, я фиг знает...
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
хм у меня фокус
weapon_cz75a возвращает индекс weapon_p250
и weapon_usp_silencer возвращает weapon_hkp2000
с остальными пистолетами работает четко
Сообщения автоматически склеены:

C-подобный:
iPistolsIndex = GetPlayerWeaponSlot(iClient, 1);
GetEntityClassname(iPistolsIndex, sPistolsName, sizeof(sPistolsName));
PrintToChat(iClient, "Вы поменяли %s на weapon_glock strcmp = %d", sPistolsName, strcmp(sPistolsName, "weapon_usp_silencer"));
if(!strcmp(sPistolsName, "weapon_usp_silencer"))
{
    RemovePlayerItem(iClient, g_getWeapPistols[iClient]);
    GivePlayerItem(iClient, "weapon_glock");
}

Вместо weapon_usp_silencer получаю weapon_hkp2000

тоже самое


C-подобный:
iPistolsIndex = GetPlayerWeaponSlot(iClient, 1);
GetEntityClassname(iPistolsIndex, sPistolsName, sizeof(sPistolsName));
PrintToChat(iClient, "Индекс %s = %d", sPistolsName, iPistolsIndex);
PrintToChat(iClient, "Вы поменяли %s на weapon_tec9 strcmp = %d", sPistolsName, strcmp(sPistolsName, "weapon_cz75a"));
if(!strcmp(sPistolsName, "weapon_cz75a"))
{
    RemovePlayerItem(iClient, g_getWeapPistols[iClient]);
    GivePlayerItem(iClient, "weapon_tec9");
}

Вместо weapon_cz75aполучаю weapon_p250

все остальное оружие работает идеально
Там просто манипуляции нужно проделывать лишние.
Я делал небольшой набор функций, который может в CS:GO пригодится. (прикрепил)
Там можешь взять GetWeaponClassname.
 

Вложения

  • csgo_weapons_stocks.inc
    3.2 КБ · Просмотры: 36

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Там просто манипуляции нужно проделывать лишние.
Я делал небольшой набор функций, который может в CS:GO пригодится. (прикрепил)
Там можешь взять GetWeaponClassname.
Спасибо добавил еще проверки, плагин вроде работает идеально надеюсь иза этой чепухи нечего не сломается.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу