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

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

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
  • Автор ресурса
  • #1
inklesspen добавил(а) новый ресурс:

Weapon Identifier - Позволяет получить достоверный класс оружия

Этот плагин не несет изменений в игру, он создан для упрощения скриптерам получения класса оружия

Данный плагин позволяет получить точный, достоверный и безошибочный класс оружия, когда это играет большую роль
Плагин является лишь утилитой, библиотекой для сторонних плагинов

API Данного плагина:
PHP:
/*
*
*    return m_iItemDefinitionIndex by weapon classname
*    return -1 if weapon is not found
*
*    Возвращает m_iItemDefinitionIndex по классу (названию) оружия
*...

Узнать больше об этом ресурсе...
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
  • Автор ресурса
  • #2
inklesspen обновил(а) ресурс Weapon Identifier новой записью:

Обновление библиотеки

Добавлена функция StripKnifeName в widentifier.inc, чтобы исключить ножи инвентаря
Оно конвертирует любой класс вида weapon_knife_* в weapon_knife, игнорируя weapon_knife_gg и weapon_knife_ghost
код функции:
PHP:
stock void StripKnifeName(char[] name)
{
    int len = strlen(name)
    if(len > 12 && !strncmp(name, "weapon_knife", 12))
    {
        if(!strcmp(name[12], "_gg") || !strcmp(name[12], "_ghost"))
            return
        name[12] = 0
    }
}

Пример использования:
PHP:
...

Узнать больше об этом обновлении...
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
inklesspen добавил(а) новый ресурс:

Weapon Identifier - Позволяет получить достоверный класс оружия



Узнать больше об этом ресурсе...
Вот только можно проще:

Накидал в инк, может кому пригодится.
C-подобный:
#if defined _csgo_weapons_stocks_included
 #endinput
#endif
#define _csgo_weapons_stocks_included

// by Someone [https://discord.gg/UfD3dSa]

/**
 * Returns the classname of a weapon.
 * @note Example output: "glock", "usp_silencer", "mp5sd", "bayonet", "knife_gut".
 * 
 * @param iWeapon        Index of weapon.
 * @param sClassname    Buffer to store the classname.
 * @param iLen            Maximum length of the buffer.
 * @error                Invalid weapon index.
 */
stock void GetWeaponClassname(int iWeapon, char[] sClassname, int iLen){
    static int iOffset = -1;
    if(iOffset == -1){
        iOffset = FindSendPropInfo("CWeaponCSBase", "m_iItemDefinitionIndex");
    }

    CS_WeaponIDToAlias(CS_ItemDefIndexToID(GetEntData(iWeapon, iOffset)), sClassname, iLen);
}

/**
 * Returns the classname of a weapon. Corrects knifes names. 
 * @note Example output: "glock", "usp_silencer", "mp5sd, "knife".
 * 
 * @param iWeapon        Index of weapon.
 * @param sClassname    Buffer to store the classname.
 * @param iLen            Maximum length of the buffer.
 * @error                Invalid weapon index.
 */
stock void GetWeaponClassnameEx(int iWeapon, char[] sClassname, int iLen){
    static int iOffset = -1;
    if(iOffset == -1){
        iOffset = FindSendPropInfo("CWeaponCSBase", "m_iItemDefinitionIndex");
    }

    if(IsWeaponKnife(iWeapon)){
        strcopy(sClassname, iLen, "knife");
        return;
    }

    CS_WeaponIDToAlias(CS_ItemDefIndexToID(GetEntData(iWeapon, iOffset)), sClassname, iLen);
}

/**
 * Returns defenition index of a weapon by name.
 * @note Example output: "glock", "usp_silencer", "mp5sd", "bayonet", "knife_gut".
 * 
 * @param iWeapon        Index of weapon.
 * @param sClassname    String containing the classname.
 * @error                Invalid weapon index.
 */
stock int GetWeaponDefByName(int iWeapon, const char[] sClassname){
    return CS_WeaponIDToItemDefIndex(CS_AliasToWeaponID(sClassname));
}

/**
 * Returns the classname of a weapon by defenition index.
 * @note Example output: "glock", "usp_silencer", "mp5sd, "knife".
 * 
 * @param iDef            Defenition index
 * @param sClassname    Buffer to store the classname.
 * @param iLen            Maximum length of the buffer.
 * @error                Invalid defenition index.
 */
stock void GetWeaponNameByDef(int iDef, char[] sClassname, int iLen){
    CS_WeaponIDToAlias(CS_ItemDefIndexToID(iDef), sClassname, iLen);
}

/**
 * Returns the classname of a weapon by defenition index. Corrects knifes names.
 * 
 * @param iDef            Defenition index
 * @param sClassname    Buffer to store the classname.
 * @param iLen            Maximum length of the buffer.
 * @error                Invalid defenition index.
 */
stock void GetWeaponNameByDefEx(int iDef, char[] sClassname, int iLen){
    CSWeaponID iID = CS_ItemDefIndexToID(iDef);
    if(iID == 50 || iID == 58 || iID == 59 || iID == 80 || iID > CSWeapon_MAX_WEAPONS_NO_KNIFES){
        strcopy(sClassname, iLen, "knife");
        return;
    }

    CS_WeaponIDToAlias(iID, sClassname, iLen);
}

/**
 * Checks if a weapons is a knife.
 * 
 * @param iWeapon        Index of weapon.r.
 * @error                Invalid weapon entity.
 * @return                true if knife, false otherwise.
 */
stock bool IsWeaponKnife(int iWeapon){
    char sClass[8];
    GetEntityNetClass(iWeapon, sClass, sizeof(sClass));
    return strncmp(sClass, "CKnife", 6) == 0;
}
 

Вложения

  • cstrike_test.sp
    803 байт · Просмотры: 12
  • csgo_weapons_stocks.inc
    3.2 КБ · Просмотры: 11

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
  • Автор ресурса
  • #5
Вот только можно проще:

Накидал в инк, может кому пригодится.
C-подобный:
#if defined _csgo_weapons_stocks_included
#endinput
#endif
#define _csgo_weapons_stocks_included

// by Someone [https://discord.gg/UfD3dSa]

/**
* Returns the classname of a weapon.
* @note Example output: "glock", "usp_silencer", "mp5sd", "bayonet", "knife_gut".
*
* @param iWeapon        Index of weapon.
* @param sClassname    Buffer to store the classname.
* @param iLen            Maximum length of the buffer.
* @error                Invalid weapon index.
*/
stock void GetWeaponClassname(int iWeapon, char[] sClassname, int iLen){
    static int iOffset = -1;
    if(iOffset == -1){
        iOffset = FindSendPropInfo("CWeaponCSBase", "m_iItemDefinitionIndex");
    }

    CS_WeaponIDToAlias(CS_ItemDefIndexToID(GetEntData(iWeapon, iOffset)), sClassname, iLen);
}

/**
* Returns the classname of a weapon. Corrects knifes names.
* @note Example output: "glock", "usp_silencer", "mp5sd, "knife".
*
* @param iWeapon        Index of weapon.
* @param sClassname    Buffer to store the classname.
* @param iLen            Maximum length of the buffer.
* @error                Invalid weapon index.
*/
stock void GetWeaponClassnameEx(int iWeapon, char[] sClassname, int iLen){
    static int iOffset = -1;
    if(iOffset == -1){
        iOffset = FindSendPropInfo("CWeaponCSBase", "m_iItemDefinitionIndex");
    }

    if(IsWeaponKnife(iWeapon)){
        strcopy(sClassname, iLen, "knife");
        return;
    }

    CS_WeaponIDToAlias(CS_ItemDefIndexToID(GetEntData(iWeapon, iOffset)), sClassname, iLen);
}

/**
* Returns defenition index of a weapon by name.
* @note Example output: "glock", "usp_silencer", "mp5sd", "bayonet", "knife_gut".
*
* @param iWeapon        Index of weapon.
* @param sClassname    String containing the classname.
* @error                Invalid weapon index.
*/
stock int GetWeaponDefByName(int iWeapon, const char[] sClassname){
    return CS_WeaponIDToItemDefIndex(CS_AliasToWeaponID(sClassname));
}

/**
* Returns the classname of a weapon by defenition index.
* @note Example output: "glock", "usp_silencer", "mp5sd, "knife".
*
* @param iDef            Defenition index
* @param sClassname    Buffer to store the classname.
* @param iLen            Maximum length of the buffer.
* @error                Invalid defenition index.
*/
stock void GetWeaponNameByDef(int iDef, char[] sClassname, int iLen){
    CS_WeaponIDToAlias(CS_ItemDefIndexToID(iDef), sClassname, iLen);
}

/**
* Returns the classname of a weapon by defenition index. Corrects knifes names.
*
* @param iDef            Defenition index
* @param sClassname    Buffer to store the classname.
* @param iLen            Maximum length of the buffer.
* @error                Invalid defenition index.
*/
stock void GetWeaponNameByDefEx(int iDef, char[] sClassname, int iLen){
    CSWeaponID iID = CS_ItemDefIndexToID(iDef);
    if(iID == 50 || iID == 58 || iID == 59 || iID == 80 || iID > CSWeapon_MAX_WEAPONS_NO_KNIFES){
        strcopy(sClassname, iLen, "knife");
        return;
    }

    CS_WeaponIDToAlias(iID, sClassname, iLen);
}

/**
* Checks if a weapons is a knife.
*
* @param iWeapon        Index of weapon.r.
* @error                Invalid weapon entity.
* @return                true if knife, false otherwise.
*/
stock bool IsWeaponKnife(int iWeapon){
    char sClass[8];
    GetEntityNetClass(iWeapon, sClass, sizeof(sClass));
    return strncmp(sClass, "CKnife", 6) == 0;
}
Странно, не видел никакого упоминания mp5sd в cstrike.inc, это тестировалось с ним?
 

Someone

Участник
Сообщения
1,933
Реакции
1,653

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
  • Автор ресурса
  • #7
Сверху Снизу