- Поддерживаемые игры
-
- CS: GO
Этот плагин не несет изменений в игру, он создан для упрощения скриптерам получения класса оружия
Данный плагин позволяет получить точный, достоверный и безошибочный класс оружия, когда это играет большую роль
Плагин является лишь утилитой, библиотекой для сторонних плагинов
API Данного плагина:
Плагин является лишь утилитой, библиотекой для сторонних плагинов
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
Здесь исправленный код
Как видите, достаточно заменить лишь одну функцию, чтобы все исправить
Но если игрок будет держать 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)
Для проверки функционала библиотеки достаточно использовать:
Результат с Glock:
Результат с ножом террориста:
Результат с MP5-SD:
Пояснение результата:
Первая строка означает, что выдает функция GetEntityClassname
Вторая - функция нашей библиотеки - GetWeaponName
Третья - получение Definition Index по классу оружия
Четвертая - Получение класса оружия по Definition Index
Пятая - Выход функции GetClientWeapon, которому точно можно верить
Шестая - проверка функции StripKnifeName на класс ножа (Только второй скрин)
- 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:
Результат с ножом террориста:
Результат с MP5-SD:
Пояснение результата:
Первая строка означает, что выдает функция GetEntityClassname
Вторая - функция нашей библиотеки - GetWeaponName
Третья - получение Definition Index по классу оружия
Четвертая - Получение класса оружия по Definition Index
Пятая - Выход функции GetClientWeapon, которому точно можно верить
Шестая - проверка функции StripKnifeName на класс ножа (Только второй скрин)
Используйте вместо этого данный код от @Someone :
- Требования
-
Sourcemod 1.7