| 
 
 
	
		
		
			| SDKCall проблема |  |  |  | 
| serm | Дата: Пятница, 08.08.2014, 08:16:21 | Сообщение # 1 |  |   
|  |  | Сообщений: 137 Репутация: 7 [ +/- ]
 |  | Здравствуйте . У меня проблема возникла с SDKCall
 
 Нужно получить позицию attachment
 
 код
 
 Код  #pragma semicolon 1
 
 #include <sourcemod>
 #include <sdktools>
 #include <cstrike>
 #include <sdkhooks>
 
 new Handle:hGameConf, Handle:hTest, Handle:hLookupAttachment;
 
 public OnPluginStart(){
 hGameConf = LoadGameConfigFile("plugin.offests");
 StartPrepSDKCall(SDKCall_Entity);
 PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "GetAttachment");
 PrepSDKCall_AddParameter(SDKType_PlainOldData , SDKPass_Plain);
 PrepSDKCall_SetReturnInfo(SDKType_Vector, SDKPass_Plain);
 hTest = EndPrepSDKCall();
 
 StartPrepSDKCall(SDKCall_Entity);
 PrepSDKCall_SetFromConf(hGameConf, SDKConf_Signature, "LookupAttachment");
 PrepSDKCall_AddParameter(SDKType_String, SDKPass_Pointer);
 PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain);
 hLookupAttachment = EndPrepSDKCall();
 
 RegConsoleCmd("test",test);
 }
 
 public Action:test(client,Args){
 new Float:f_pos[3], Float:f_ang[3];
 
 SDKCall(hTest, client, SDKCall(hLookupAttachment, client, "muzzle_flash"), f_pos, f_ang);
 //    SDKCall(hTest, client, 12, f_pos, f_ang); // Если у когото из вас ос windows раскомментируйте эту строчку
 PrintToChatAll("%f %f %f", f_pos[0], f_pos[1], f_pos[2]);
 }
 
 gamedata
 
 
 Код  "Games"
 {
 "cstrike"
 {
 "Offsets"
 {
 "GetAttachment"
 {
 "windows" "204"
 "linux" "205"
 }
 }
 "Signatures"
 {
 "LookupAttachment"
 {
 "library"    "server"
 "linux"        "@_ZN14CBaseAnimating16LookupAttachmentEPKc"
 }
 }
 }
 }
 
 Что в итоге у меня либо сервер крашится либо получаю позицию 0.0 0.0 0.0
 
 Я уже пробовал
 
 Код  PrepSDKCall_SetReturnInfo(SDKType_Vector, SDKType_QAngle, SDKPass_ByValue);
 
Т.к. мне должно вернуться 2 значения float:f_pos[3] float:f_ang[3]
 
 Но все так же краш сервера .
 
 Использую
 
 Код  GetAttachment( int attachment, Vector &origin, QAngle &angles );
 
 Оффсеты и сигнатуры 100% правильные .
 
 Помогите кто может .
 Добавлено (08.08.2014, 08:16:21)---------------------------------------------
 Ну так что , знает ктонибудь ?
 |  |  |  |  |  | 
| BarD | Дата: Пятница, 08.08.2014, 08:57:21 | Сообщение # 2 |  |   
|  |  | Сообщений: 943 Репутация: 137 [ +/- ]
 |  | Неа, извини. Вообще не понимаю, о чем тут речь... |  |  |  |  |  | 
| serm | Дата: Пятница, 08.08.2014, 10:53:30 | Сообщение # 3 |  |   
|  |  | Сообщений: 137 Репутация: 7 [ +/- ]
 |  | Ужас никто нигде помочь не может   На am не помогают тут я думаю тоже никто не работал с sdkcall
 Как выкручиваться не знаю .
 
 Может кто знает альтернативную функцию ? Чтобы можно было получить позицию Attachment ну или Bone модели ?
 |  |  |  |  |  | 
| Darkeneez | Дата: Пятница, 08.08.2014, 12:43:56 | Сообщение # 4 |  |   
|  |  | Сообщений: 221 Репутация: 18 [ +/- ]
 |  | Цитата serm (  ) Ужас никто нигде помочь не может Переводчиком умеешь пользоваться?
 Суть проблемы выкладываешь сюда https://forums.alliedmods.net/forumdisplay.php?f=107
 |  |  |  |  |  | 
| serm | Дата: Пятница, 08.08.2014, 12:56:03 | Сообщение # 5 |  |   
|  |  | Сообщений: 137 Репутация: 7 [ +/- ]
 |  | Цитата Darkeneez (  ) Переводчиком умеешь пользоваться? Суть проблемы выкладываешь сюда https://forums.alliedmods.net/forumdisplay.php?f=107
Да я вроде и сам анг. знаю вот тема почитай
 https://forums.alliedmods.net/showthread.php?p=2179905
 Добавлено (08.08.2014, 12:56:03)---------------------------------------------
 Там тоже жмутся люди особо помочь не стараются .
 |  |  |  |  |  | 
| sssw | Дата: Пятница, 08.08.2014, 13:20:15 | Сообщение # 6 |  |   
|  |  | Сообщений: 123 Репутация: 14 [ +/- ]
 |  | Кроме нулей получить нельзя. Если так нужны координаты нужно вызывать кадры физики из client.dll заставить движок передавать на него дельту а потом с него рипать значение. 
 
 Сообщение отредактировал sssw - Пятница, 08.08.2014, 13:27:44 |  |  |  |  |  | 
| serm | Дата: Пятница, 08.08.2014, 14:54:22 | Сообщение # 7 |  |   
|  |  | Сообщений: 137 Репутация: 7 [ +/- ]
 |  | Цитата sssw (  ) Кроме нулей получить нельзя. Если так нужны координаты нужно вызывать кадры физики из client.dll заставить движок передавать на него дельту а потом с него рипать значение.Надеюсь что ты понял мой выше поставленный вопрос .
 Мне нужно именно получить координаты атачмента . В движке есть масса функций GetAttachment думаю самая разумная из них это CBaseAnimating т.к. она связанна напрямую с анимациями .
 Далее я беру сигнатуру этой функции , в данный момент я могу получить сигнатуру linux . win сигнатуру я не умею правильно выписывать .
 Вот сигнатура функции
 
 Код  CBaseAnimating::GetAttachment(int, Vector &, QAngle &)
 _ZN14CBaseAnimating13GetAttachmentEPKcR6VectorR6QAngle
 
 Подключив все это в gamedata я вызываю sdkcall и вроде бы должен получить ответ но увы чаще всего идет краш .
 
 Я смотрел массу примеров реализации на c++ через расширения sourcemod там все довольно просто они вычисляют это все через matrix которая подключается вместе с классами фиг знает где (Скорее всего с самом sourcemod классе)
 
 Ты говоришь вызывать кадры физики client.dll для чего ? Ведь сервер обрабатывает все динамические анимации внутри себя а не на клиенте (За исключением ragdoll - как то так) . Следовательно мне проще будет получить координаты из server.dll чем с клиента .
 
 И в конец я же могу например через sdkcall взять координаты игрока ... его угол обзора ... И все вызвать так же через сигнатуры и все работает , почему же здесь такая заноза .
 
 Еще я видел пример в c++ расширении что вызывается функция как то так
 
 Код  GetAttachment(int, Vector &)
 
То есть без направления . Но функциях в server.dll этого не нашел .
 
 Так вот я ссылаюсь на то что при вызове функции sdkcall мне должно вернуть 2 значения , а принять можно только одно
 
 Код  PrepSDKCall_SetReturnInfo(SDKType_Vector, SDKPass_ByValue);
 
Я пробовал так
 
 Код  PrepSDKCall_SetReturnInfo(SDKType_Vector, SDKType_QAngle, SDKPass_ByValue);
 
 Но я думаю так нельзя, да и сервер падает .
 
 Так вот теперь скажите может где то я не так понимаю , или что то не правильно в коде ?
 
 Сообщение отредактировал serm - Пятница, 08.08.2014, 14:55:51 |  |  |  |  |  | 
| sssw | Дата: Пятница, 08.08.2014, 15:13:03 | Сообщение # 8 |  |   
|  |  | Сообщений: 123 Репутация: 14 [ +/- ]
 |  | Я тоже побывал делать это для себя но провалился. А для чего анимация апартаментов на сервере? Поверь её там просто нету (возможно), ну высылал бы сервер координаты аттачьмента вместо информации аттачмента чтобы получилась каша можно передать скорость у будет все ок. (ЗАЧЕМ Я ЭТО НАПИСАЛ ХЗ). 
 Есть плагин который получает наконечник оружия игрока muzzle посмотри его. (CS:S Laser Tag Plugin)
 
 Так только ShootPosition (.
 
 Код "Games" {
 "cstrike"
 {
 "Offsets"
 {
 "Weapon_ShootPosition"
 {
 "windows"    "221"
 "linux"  "222"
 }
 }
 }
 }
 
 
 Сообщение отредактировал sssw - Пятница, 08.08.2014, 15:18:42 |  |  |  |  |  | 
| serm | Дата: Пятница, 08.08.2014, 16:06:41 | Сообщение # 9 |  |   
|  |  | Сообщений: 137 Репутация: 7 [ +/- ]
 |  | Цитата sssw (  ) Я тоже побывал делать это для себя но провалился. А для чего анимация апартаментов на сервере? Поверь её там просто нету (возможно), ну высылал бы сервер координаты аттачьмента вместо информации аттачмента чтобы получилась каша можно передать скорость у будет все ок. (ЗАЧЕМ Я ЭТО НАПИСАЛ ХЗ). 
 Есть плагин который получает наконечник оружия игрока muzzle посмотри его.
Да я видел такую функцию weapon_shoot_position ? Тоже через сервер sdkcall вызывают .
 
 Нет дело в другом смотри есть такое расширение https://forums.alliedmods.net/showthread.php?t=161331
 Его видели походу все скриптеры и я уверен множество людей пытались такое сделать .
 
 Дело в том что там используются все эти функции GetAttachment и GetBonePosition вот , на видео ясно видно что лучи у vortigaunt
 Исходят прямо из attachment на модели (Я проверял через model viewer) ... Следовательно эту позицию вытянуть можно с сервера . http://www.youtube.com/watch?v=HCXe5Z0uWL0#t=143 Вот этот участок видео .
 
 Ну а можно ли например создать гранату weapon_grenade или какой-нибудь другой проп . Приаттачить (SetAttachment) ее к модели и например попытаться получить координату этой гранаты ? Или как-нибудь еще ?
 Добавлено (08.08.2014, 15:24:47)---------------------------------------------
 Даа я видел этот плагин , но для этого есть отдельная функция и сигнатура
 Добавлено (08.08.2014, 15:25:42)---------------------------------------------
 Скажи sssw ты пробовал работать с sdkcall ?
 Добавлено (08.08.2014, 16:06:41)---------------------------------------------
 Сейчас копался в c++ исходниках мода того . Там я заметил часто упоминается функция MatrixGetColumn
 Проверил , походу MatrixGetColumn возвращает Float значение (как бы по частям) позицию .
 Т.к. в исходниках используется вот эта функция
 
 Код  Vector columns[3];
 int i;
 
 for ( i = 0; i < 3; i++ )
 {
 MatrixGetColumn( matrix, i, columns[i] );
 }
 
Получают они положение attachment
 Вот сама функция и сигнатура
 
 Код  MatrixGetColumn(matrix3x4_t  const&, int, Vector &) // matrix3x4_t  какое-то значение // int это переменная x y или z // Vector соответственно часть позиции в значении Float
 
 _Z15MatrixGetColumnRK11matrix3x4_tiR6Vector
 
 Так вот я посмотрел matrix3x4_t на valve developer там ничего интересного нет только описание общей функции MatrixGetColumn ...
 
 Может кто-нибудь знает что за переменная matrix3x4_t ??
 |  |  |  |  |  | 
| sssw | Дата: Пятница, 08.08.2014, 16:22:42 | Сообщение # 10 |  |   
|  |  | Сообщений: 123 Репутация: 14 [ +/- ]
 |  | http://www.gamedev.ru/code/articles/faq_matrix_quat#chto_takoe_matritsa_ 
 
 Сообщение отредактировал sssw - Пятница, 08.08.2014, 16:23:09 |  |  |  |  |  | 
| serm | Дата: Пятница, 08.08.2014, 16:29:09 | Сообщение # 11 |  |   
|  |  | Сообщений: 137 Репутация: 7 [ +/- ]
 |  | Цитата sssw (  ) http://www.gamedev.ru/code/articles/faq_matrix_quat#chto_takoe_matritsa_Ох и что же с ней делать тогда .
 Что туда заносить index attachment и index клиента ... Или что
 |  |  |  |  |  | 
| sssw | Дата: Пятница, 08.08.2014, 16:32:31 | Сообщение # 12 |  |   
|  |  | Сообщений: 123 Репутация: 14 [ +/- ]
 |  | Цитата serm (  ) matrix3x4Посмотри внимательней ведь лучи это tmpEntity и там уже должен быть готовый отсылаемый Vector. просто посмотри как его получают.
 |  |  |  |  |  | 
| serm | Дата: Пятница, 08.08.2014, 16:45:31 | Сообщение # 13 |  |   
|  |  | Сообщений: 137 Репутация: 7 [ +/- ]
 |  | Цитата sssw (  ) Посмотри внимательней ведь лучи это tmpEntity и там уже должен быть готовый отсылаемый Vector. просто посмотри как его получают.
 Код  Vector hand;
 GetAttachment(VORTIGAUNT_LEFT_CLAW, hand);
 
VORTIGAUNT_LEFT_CLAW это string значение left_hand - название аттачмента
 Vector hand Это тоже самое что и Float:hand[3]
 Далее
 
 Код  te->BeamPoints(filter, 0, &hand, &tr.endpos, m_nBeamLaser, 0, 0, 0, 0.5f, 5.0f, 10.0f, 0, 17.0f, 100, 255, 100, 255, 20);
 
hand Что еще раз подтверждает hand это позиция
 
 Далее по ветке я смотрю
 
 Код  //-----------------------------------------------------------------------------
 // Purpose: Returns the world location and world angles of an attachment
 // Input  : attachment index
 // Output :     location and angles
 //-----------------------------------------------------------------------------
 bool CAnimating::GetAttachment ( int iAttachment, Vector &absOrigin, QAngle &absAngles )
 {
 matrix3x4_t attachmentToWorld;
 
 bool bRet = GetAttachment( iAttachment, attachmentToWorld );
 MatrixAngles( attachmentToWorld, absAngles, absOrigin );
 return bRet;
 }
 
Добавлено (08.08.2014, 16:45:31)---------------------------------------------
 
 Код MatrixAngles(matrix3x4_t  const&, Quaternion &, Vector &) _Z12MatrixAnglesRK11matrix3x4_tR10QuaternionR6Vector
 
https://code.google.com/p/sourcemod-npc-in-css/source/browse/Monster/npc_vortigaunt.cpp#1234
 |  |  |  |  |  | 
| sssw | Дата: Пятница, 08.08.2014, 16:47:16 | Сообщение # 14 |  |   
|  |  | Сообщений: 123 Репутация: 14 [ +/- ]
 |  | Сделай своё расширение или нужно чтобы всё-всё было в плагине? Я бы просто сделал простое расширение для своего плагина.
 Кстати это можно применить в smac_wallhack для повышение точности, правда CPU расплавиться.
 
 
 Сообщение отредактировал sssw - Пятница, 08.08.2014, 16:49:43 |  |  |  |  |  | 
| serm | Дата: Пятница, 08.08.2014, 17:04:44 | Сообщение # 15 |  |   
|  |  | Сообщений: 137 Репутация: 7 [ +/- ]
 |  | Цитата sssw (  ) Сделай своё расширение или нужно чтобы всё-всё было в плагине? Я бы просто сделал простое расширение для своего плагина.
Я бы и не против но я еще не достаточно умен для этого .
 
 Я уже попутно начал делать расширение .
 Я уже скачал Microsoft Visual Studio Настроил его . Подключил все нужные библиотеки . Проверил работоспособность скомпилировав чужое расширение . Все работает на ура .
 
 Первая проблема . Все объявленные функции в расширении должны где-то быть расписаны .
 Так же как и в sourcemod .
 
 Код  
 public OnPluginStart(){
 StartFunction(); // Она должна быть где-то прописана
 }
 
 
 Так же и в c++ Получается нужно найти эту функцию или класс и также подключить #include
 На данный момент я проверил
 
 
 Код  Vector absOrigin;
 Vector absAngles;
 matrix3x4_t attachmentToWorld;
 MatrixAngles( attachmentToWorld, absAngles, absOrigin ); // Нужно найти класс и подключить
 
 Но я не нашел эту функцию вообще в том моде (Проект)
 http://vk.cc/2Rf0eY (Короткая ссылка)
 
 Добавлено (08.08.2014, 17:03:10)
 ---------------------------------------------
 А чем smac wallhak поможет ???
 
 Добавлено (08.08.2014, 17:04:44)
 ---------------------------------------------
 sssw Умеешь на c++ кодить ? Если да то напиши мне ,я мог бы заплатить за готовое расширение (Сколько нынче это стоит 200 или 500 или сколько я просто не знаю)?
 
 Сообщение отредактировал serm - Пятница, 08.08.2014, 17:09:06 |  |  |  |  |  
 |