В HL2DM подствольные гранаты не хватаются гравиганом. Возник вопрос - можно ли в принципе это реализовать плагином?
Возможно. Вроде как плагин EntControl (есть две версии - одна на с++, другая на sourcepawn), в нем вроде как реализован Gravity Gun. Если подствольную гранату возможно идентифицировать сурсмодом (функцией GetClientAimTarget() или при помощи TR_GetEntityIndex() (для примера работы с TraceRay см. плагины взаимодействия с предметами, например, props плагины или возможно это есть в том же EntControl), то тогда это возможно. Хотя наверное можно сразу и через EntControl проверить, можно ли захватить, а затем просто аккуратно перенести код оттуда (ибо этот плагин большой) в свой плагин.
Спасибо, посмотрю плагин. Ответьте, пожалуйста, на маленький вопрос, если у плагина есть 2 версии и одна на С++, то не подскажете, где прочесть про написание плагинов на С++? А то я везде читал только о компиляции при помощи compile.exe, но нигде не видел руководства по компиляции в студии. На плюсах мне было бы в разы удобее...
Для плюсов очень мало статей и достаточно сложностей. https://wiki.alliedmods.net/Writing_extensions - это вершина айсберга. От неё начинайте спускаться вниз, к настройке метамода (исходные коды, т.к. sourcemod "использует" их), затем к настройке SDK (metamod "использует" код от sdk). Так же стоит поискать мануалы, как установить всё это для MVS, благо они есть где-то на WIKI у SourceMod'а и MetaMod'а, но для старых версий VS.
Хорошо. Я написал такое: Код: new ent = GetClientAimTarget(client); if (ent > 0) { decl String:clsName[128]; GetEntityClassname(ent, clsName, 128); PrintToChatAll("Enityname: %s", clsName); } Это вызывается в OnPlayerRunCmd, но не столь важно. Главное, что ent всегда равен -1, то есть, я ни на что не нацелен. Очень странно. Почему так? Добавлено через 9 минут C TR_GetEntityIndex вообще странная ситуация - возвращает всегда ноль.
Если указать только клиента, тогда будет искать только клиентов (параметр only_clients). Необходимо второй параметр задать как false. Во-вторых, я предупредил, что возможно и не получится таким образом захватить гранату. Одну эту функцию вызвать недостаточно, необходимо сначала провести трассировку, а затем уже получать то, с чем она столкнулась. См. так же TR_TraceRayFilter(), TR_DidHit() и плагины, которые это используют.