Иконка ресурса

Не поддерживается Weapon Identifier - Не использовать 1.0

Нет прав для скачивания
Обратите внимание: данный ресурс не поддерживается разработчиком.
Поддерживаемые игры
  1. CS: GO
Этот плагин не несет изменений в игру, он создан для упрощения скриптерам получения класса оружия
Данный плагин позволяет получить точный, достоверный и безошибочный класс оружия, когда это играет большую роль
Плагин является лишь утилитой, библиотекой для сторонних плагинов

API Данного плагина:
PHP:
/*
*
*    return m_iItemDefinitionIndex by weapon classname
*    return -1 if weapon is not found
*
*    Возвращает m_iItemDefinitionIndex по классу (названию) оружия
*    Вернет -1, если оружие не найдено
*
*/
native int GetWeaponDefByName(const char[] name)

/*
*
*    Returns weapon classname by m_iItemDefinitionIndex (overwrites second argument)
*    Second argument will be empty if def is invalid
*    Third argument is size of second argument
*
*    Возвращает класс (название) оружия по m_iItemDefinitionIndex (перезаписывает второй аргумент)
*    Второй аргумент будет опустошен, если def недействителен
*    Третий аргумент - размер второго аргумента
*
*/
native void GetWeaponNameByDef(int def, char[] name, int max)

/*
*
*    Returns weapon classname by weapon (overwrites second argument)
*    Second argument will be empty if weapon is invalid
*    Third argument is size of second argument
*
*    Возвращает класс (название) оружия по оружию(перезаписывает второй аргумент)
*    Второй аргумент будет опустошен, если оружие недействительно
*    Третий аргумент - размер второго аргумента
*
*/
stock void GetWeaponName(int weapon, char[] name, int max)
{
    if(!(0 < weapon < GetMaxEntities()) || !IsValidEntity(weapon))
    {
        ThrowError("Invalid entity")
        return
    }
    if(!HasEntProp(weapon, Prop_Send, "m_iItemDefinitionIndex"))
    {
        ThrowError("Entity is not weapon")
        return
    }
    int def = GetEntProp(weapon, Prop_Send, "m_iItemDefinitionIndex")
    GetWeaponNameByDef(def, name, max)
    if(!name[0])
        GetEntityClassname(weapon, name, max)
}

Простой код, который перевыдает игроку оружие с его рук (для пополнения патрон, например)
Но если игрок будет держать M4A1-S, а в инвентаре у него выбрана M4A4, то получит он M4A4, ведь GetEntityClassname вернет weapon_m4a1
PHP:
char classname[64]
int weapon = GetEntPropEnt(client, Prop_Data, "m_hActiveWeapon")
if(weapon == -1)
    return
GetEntityClassname(weapon, classname, sizeof classname)
RemovePlayerWeapon(client, weapon)
AcceptEntityInput(weapon, "kill")
GivePlayerItem(client, classname)

Здесь исправленный код
Как видите, достаточно заменить лишь одну функцию, чтобы все исправить
PHP:
char classname[64]
int weapon = GetEntPropEnt(client, Prop_Data, "m_hActiveWeapon")
if(weapon == -1)
    return
GetWeaponClassname(weapon, classname, sizeof classname)
RemovePlayerWeapon(client, weapon)
AcceptEntityInput(weapon, "kill")
GivePlayerItem(client, classname)
Для проверки функционала библиотеки достаточно использовать:
  • GetEntityClassname, выдающую ошибочный класс
  • Функции библиотеки
  • GetClientWeapon, возвращающий точный класс оружия благодаря движку, но возвращающий лишь оружие в руках, что не всегда удобно
Сам код:
PHP:
#include <widentifier>

public Plugin myinfo = {
    name = "WIdentifier test",
    author = "me",
    version = "test"
}

public void OnPluginStart()
{
    RegConsoleCmd("sm_what_is_it", CMD)
}

public Action CMD(int client, int args)
{
    int weapon = GetEntPropEnt(client, Prop_Data, "m_hActiveWeapon")
    if(weapon != -1)
    {
        // GetEntityClassname to verify (or unverify) weapon
        char classname[64]
        GetEntityClassname(weapon, classname, sizeof classname)
        PrintToChat(client, " \x04[WIdentifier]\x01 Sourcemod thinks that it is %s", classname)
  
        // GetWeaponName test
        char name[64]
        GetWeaponName(weapon, name, sizeof name)
        PrintToChat(client, " \x04[WIdentifier]\x01 WIdentifier thinks that it is %s", name)
  
        // GetWeaponDefByName test
        int def = GetWeaponDefByName(name)
        PrintToChat(client, " \x04[WIdentifier]\x01 Definition Index by name: %i", def)
  
        // GetWeaponNameByDef test
        GetWeaponNameByDef(def, name, sizeof name)
        PrintToChat(client, " \x04[WIdentifier]\x01 Name by definition index: %s", name)
  
        // Real name of weapon for verify
        char verify[64]
        GetClientWeapon(client, verify, sizeof verify)
        PrintToChat(client, " \x04[WIdentifier]\x01 Real name of weapon: %s", verify)

        char knife[64]
        strcopy(knife, sizeof knife, name)
        StripKnifeName(knife)
        PrintToChat(client, " \x04[WIdentifier]\x01 Knife-stripped name: %s", knife)
  
        if(!strcmp(name, classname))
        {
            PrintToChat(client, " \x04[WIdentifier]\x01 That's not good weapons for check different")
            PrintToChat(client, " \x04[WIdentifier]\x01 Check USP-S, CZ75a, MP5SD, Revolver, M4A1-S or any knife")
        }
    }
    else
        PrintToChat(client, " \x04[WIdentifier]\x01 Here is no weapon")
}

Результат с Glock:
1592006332686.png

Результат с ножом террориста:
1592052094545.png

Результат с MP5-SD:
1592006418521.png


Пояснение результата:
Первая строка означает, что выдает функция GetEntityClassname
Вторая - функция нашей библиотеки - GetWeaponName
Третья - получение Definition Index по классу оружия
Четвертая - Получение класса оружия по Definition Index
Пятая - Выход функции GetClientWeapon, которому точно можно верить
Шестая - проверка функции StripKnifeName на класс ножа (Только второй скрин)

Используйте вместо этого данный код от @Someone :
Требования
Sourcemod 1.7
  • Мне нравится
Реакции: Aztec и xMaZax
Автор
inklesspen
Скачивания
29
Просмотры
862
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя inklesspen

Поделиться ресурсом

Последние обновления

  1. Обновлен исходный код тестового плагина

    Ничего особенного
  2. Обновление библиотеки

    Добавлена функция StripKnifeName в widentifier.inc, чтобы исключить ножи инвентаря Оно...
Сверху