[HL2DM] Схватить подствол - можно ли?

iamdss

Участник
Сообщения
126
Реакции
12
В HL2DM подствольные гранаты не хватаются гравиганом. Возник вопрос - можно ли в принципе это реализовать плагином?
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
Возможно. Вроде как плагин EntControl (есть две версии - одна на с++, другая на sourcepawn), в нем вроде как реализован Gravity Gun. Если подствольную гранату возможно идентифицировать сурсмодом (функцией GetClientAimTarget() или при помощи TR_GetEntityIndex() (для примера работы с TraceRay см. плагины взаимодействия с предметами, например, props плагины или возможно это есть в том же EntControl), то тогда это возможно.
Хотя наверное можно сразу и через EntControl проверить, можно ли захватить, а затем просто аккуратно перенести код оттуда (ибо этот плагин большой) в свой плагин.
 

iamdss

Участник
Сообщения
126
Реакции
12
Спасибо, посмотрю плагин. Ответьте, пожалуйста, на маленький вопрос, если у плагина есть 2 версии и одна на С++, то не подскажете, где прочесть про написание плагинов на С++? А то я везде читал только о компиляции при помощи compile.exe, но нигде не видел руководства по компиляции в студии. На плюсах мне было бы в разы удобее...
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
Для плюсов очень мало статей и достаточно сложностей.
https://wiki.alliedmods.net/Writing_extensions - это вершина айсберга. От неё начинайте спускаться вниз, к настройке метамода (исходные коды, т.к. sourcemod "использует" их), затем к настройке SDK (metamod "использует" код от sdk). Так же стоит поискать мануалы, как установить всё это для MVS, благо они есть где-то на WIKI у SourceMod'а и MetaMod'а, но для старых версий VS.
 

iamdss

Участник
Сообщения
126
Реакции
12
Хорошо. Я написал такое:
C-подобный:
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 вообще странная ситуация - возвращает всегда ноль.
 
Последнее редактирование:

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
Syntax:
native GetClientAimTarget(client, bool:only_clients=true);
Если указать только клиента, тогда будет искать только клиентов (параметр only_clients). Необходимо второй параметр задать как false.
Во-вторых, я предупредил, что возможно и не получится таким образом захватить гранату.

C TR_GetEntityIndex вообще странная ситуация - возвращает всегда ноль.
Одну эту функцию вызвать недостаточно, необходимо сначала провести трассировку, а затем уже получать то, с чем она столкнулась. См. так же TR_TraceRayFilter(), TR_DidHit() и плагины, которые это используют.
 

iamdss

Участник
Сообщения
126
Реакции
12
Спасибо за уточнение, буду искать возможности. Отпишу.
 
Сверху Снизу