Проверить: является ли энтити оружием?

Nova

Simple Project
Сообщения
262
Реакции
28
Можно ли как-то проверить, является ли сущность оружием, без использования GetEntityClassname, и получить название этого оружия?
Из-за античита все сущности на карте имеют имя prop_dynamic 🤔
 
Последнее редактирование:

Vit_ amin

Добрая душа
Сообщения
1,504
Реакции
660
C-подобный:
char szModelName[PLATFORM_MAX_PATH];
int iEntity = MaxClients + 1;

while ((iEntity = FindEntityByClassname(iEntity, "prop_dynamic")) != -1)
{
  GetEntPropString(iEntity, Prop_Data, "m_ModelName", szModelName, sizeof(szModelName));
  if (StrContains(szModelName, "weapon", false) == -1)
  {
      continue;
  }

  PrintToServer("Weapon Model: %s", szClassname);
}
 

Nova

Simple Project
Сообщения
262
Реакции
28
@Vit_ amin, не работает, так же возвращает prop_dynamic.

Попробовал другой способ:
C-подобный:
GetEntPropString(entity, Prop_Data, "m_ModelName", sBuffer, sizeof(sBuffer));
возвращает models/props/de_dust/du_crate_96x96.mdl.

Есть ещё какие-нибудь варианты?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #6
@Nova, там опечатка в коде выше. Оно печатает именно класснейм, не имя модели.
 

Vit_ amin

Добрая душа
Сообщения
1,504
Реакции
660
@Vit_ amin, не работает, так же возвращает prop_dynamic.

Попробовал другой способ:
C-подобный:
GetEntPropString(entity, Prop_Data, "m_ModelName", sBuffer, sizeof(sBuffer));
возвращает models/props/de_dust/du_crate_96x96.mdl.

Есть ещё какие-нибудь варианты?
Как у вас prop_dynamic (с моделью оружия - как вы указали выше), может иметь модели ящика ?
 

Nova

Simple Project
Сообщения
262
Реакции
28
@Vit_ amin, да мне тоже интересно 🙂

Навожу прицел на оружие, нажимаю E, срабатывает следующий код:
C-подобный:
public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{
    if (IsClientInGame(client) && IsPlayerAlive(client))
    {
        static iPrevButtons[MAXPLAYERS+1];
        
        if ((buttons & IN_USE) && !(iPrevButtons[client] & IN_USE))
        {
            new entity = GetClientAimTarget(client, false);
            
            if (entity > -1)
            {
                decl String:sBuffer[256];
                GetEntPropString(entity, Prop_Data, "m_ModelName", sBuffer, sizeof(sBuffer));
                PrintToChatAll("[SM] %s", sBuffer);
            }
        }
        
        iPrevButtons[client] = buttons;
    }
    
    return Plugin_Continue;
}
 

Vit_ amin

Добрая душа
Сообщения
1,504
Реакции
660
Потому что надо в данном случае проверять не NetProp
C-подобный:
m_ModelName
А проверять надо именно саму Entity
C-подобный:
public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
Если не ошибаюсь параметр
C-подобный:
&weapon
Это индекс оружия, через него можете смотреть Classname оружия
 

Nova

Simple Project
Сообщения
262
Реакции
28
Если не ошибаюсь параметр
C-подобный:
&weapon
Это индекс оружия, через него можете смотреть Classname оружия
Но это ведь индекс оружия, на которое игрок переключился. А мне надо сначала определить, является ли сущность, на которую смотрит игрок, оружием, и потом уже производить дальнейшие действия.
 

Vit_ amin

Добрая душа
Сообщения
1,504
Реакции
660
Но это ведь индекс оружия, на которое игрок переключился. А мне надо сначала определить, является ли сущность, на которую смотрит игрок, оружием, и потом уже производить дальнейшие действия.
В таком случае проверяйте сначала Classname Entity, куда игрок наводит свой прицел (возможно через цикл можно проверить получиться)
 

Nova

Simple Project
Сообщения
262
Реакции
28
@Vit_ amin, прогоняю цикл по всем сущностям, которые содержат weapon, затем вывожу сущность, на которую смотрю. Получается следующая картина:

Entity 63: weapon_knife
Entity 100: weapon_knife
Entity 102: weapon_hegrenade
Entity 103: weapon_usp
Entity 104: weapon_flashbang
Entity 105: weapon_scout
Entity 106: weapon_deagle
Entity 108: weapon_hegrenade
Entity 109: weapon_smokegrenade
Entity 111: weapon_deagle
Entity 119: weapon_flashbang
Entity 120: weapon_smokegrenade
Entity 335: game_weapon_manager
Entity: 96

96 - Сущность, на которую смотрю, это должно быть weapon_deagle, но в списке её нет.

Нашёл в чём проблема: античит каким-то чудом заменяет название всех сущностей на prop_dynamic, без понятия как и зачем.
 

Reg1oxeN

Участник
Сообщения
399
Реакции
314
@Reg1oxeN, сделал уже, но из-за античита не работает, вот и ищу альтернативный вариант определения оружия.
судя по тому что я увидел, тебе просто нужно воспользоваться правильным фильтром для трассировки
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
Определять по константам, в инклюдах есть константы у каждого оружия, если нет желания сверять длинные строковые значения.
Хотя я не уверен точно, там 2 вида должно быть(по идее), от первого лица и со стороны, т.е. оружие в руках - это один id, если не в руках - другой id, но это я так себе представляю.
Не экспериментировал, поэтому не буду утверждать что это верный вариант, но думаю рабочий и более быстрый.
 
Последнее редактирование:

DarkerZ

Участник
Сообщения
394
Реакции
175
может это чем-то поможет... оно запрещает подбирать любое оружие на карте(хоть на Е, хоть прикасанием)
C-подобный:
public void OnClientPutInServer(int iClient)
{
    SDKHook(iClient, SDKHook_WeaponCanUse, OnWeaponCanUse);
}

public Action OnWeaponCanUse(int iClient, int iWeapon)
{
    return Plugin_Handled;
}
 

Nova

Simple Project
Сообщения
262
Реакции
28
судя по тому что я увидел, тебе просто нужно воспользоваться правильным фильтром для трассировки
Спасибо, работает.
 
Сверху Снизу