Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » SDKCall проблема
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 [ +/- ]
Ужас никто нигде помочь не может grust
На 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
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » SDKCall проблема
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: