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

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

  • Страница 2 из 2
  • «
  • 1
  • 2
SDKCall проблема
sssw Дата: Пятница, 08.08.2014, 18:00:28 | Сообщение # 16
Сообщений: 123
Репутация: 14 [ +/- ]
Цитата serm ()
А чем smac wallhak поможет ???

GetBonePosition поможет увеличить точность.

Эти пин**** намутили в своих солюшинах чтоб что-то скомпилировать нужно ***.
 
serm Дата: Пятница, 08.08.2014, 18:08:11 | Сообщение # 17
Сообщений: 137
Репутация: 7 [ +/- ]
Цитата sssw ()
GetBonePosition поможет увеличить точность.

Эти пин**** намутили в своих солюшинах чтоб что-то скомпилировать нужно ***.


Я согласен будет лучше если получать позицию bone но эту функцию так же доставать как и GetAttachment ... Есть еще 1 хукер dhook
но я не очень понял в документации как с ним работать .

Ужас какой-то.
WS может ты знаешь как решить проблемку ?

Хотя врятли он в тему вникать станет .


Сообщение отредактировал serm - Пятница, 08.08.2014, 18:11:19
 
_wS_ Дата: Пятница, 08.08.2014, 22:04:09 | Сообщение # 18
Я как-то пробовал SDKCall и когда понял насколько оно мутно, отложил, и до сих пор.. =) Основная причина наверно из-за того, что не представляю как определять сигнатуры для WIN (просто тест сервер на win), инфы об этом почти нет, если есть - недостаточно или устарела.
 
sssw Дата: Пятница, 08.08.2014, 22:37:36 | Сообщение # 19
Сообщений: 123
Репутация: 14 [ +/- ]
Всё просто берёшь копируешь байты ищешь в IDA функцию по имени копируешь её байты и ставишь их (учитывая маску).
На YouTube есть туториал.
 
serm Дата: Суббота, 09.08.2014, 15:14:00 | Сообщение # 20
Сообщений: 137
Репутация: 7 [ +/- ]
Цитата _wS_ ()
Я как-то пробовал SDKCall и когда понял насколько оно мутно, отложил, и до сих пор.. =) Основная причина наверно из-за того, что не представляю как определять сигнатуры для WIN (просто тест сервер на win), инфы об этом почти нет, если есть - недостаточно или устарела.

Цитата sssw ()
Всё просто берёшь копируешь байты ищешь в IDA функцию по имени копируешь её байты и ставишь их (учитывая маску).
На YouTube есть туториал.


Дело в том что я и так работаю с этой программой уже долго время .
Я умею тащить сигнатуры lin (я примерно знаю как win вытаскивать вот только не как не получается их в нормальном порядке поставить ) умею offset вытаскивать на lin и win .

с sdkcall уже более менее знаком .

В связи с тем что не могу вытащить win сигнатуру (Беру хост forteam на 3 дня - 35 руб (Там есть недоработка , после окончания трех дней можно еще 15 пользоваться)) так вот там и провожу тесты .

Мне нужна эта функция получения attachment (Если вы пожелаете я могу скинуть видео - для чего нужна функция).

Так что если хотите я даже предоставлю данные от хоста где вы сможете протестить на linux . Если нужны сигнатуры тоже я могу выложить . Так же могу выложить список тех или иных функций из server.dll

Сегодня постараюсь понять как win сигнатуры вытаскивать .

Ну так что согласны помочь ? (Я думаю вы тоже заинтересованны в этой функции)

Добавлено (09.08.2014, 13:27:08)
---------------------------------------------
Код

#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
#include <cstrike>
#include <sdkhooks>

new Handle:hGameConf, Handle:hTest;

public OnPluginStart(){
      hGameConf = LoadGameConfigFile("plugin.offests");
      StartPrepSDKCall(SDKCall_Entity);
      PrepSDKCall_SetFromConf(hGameConf, SDKConf_Signature, "GetAttachment");
      PrepSDKCall_AddParameter(SDKType_PlainOldData , SDKPass_Plain);
   PrepSDKCall_AddParameter(SDKType_Vector , SDKPass_ByValue);
   PrepSDKCall_AddParameter(SDKType_QAngle , SDKPass_ByValue);
      PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain);
      hTest = EndPrepSDKCall();
        
      RegConsoleCmd("test",test);
}
        
public Action:test(client,Args){
      new Float:f_pos[3], Float:f_ang[3];

      new z=SDKCall(hTest, client, 12, f_pos, f_ang);
      PrintToChatAll("%f %f %f", f_pos[0], f_pos[1], f_pos[2]);
}


Код

"Games"
{
      "cstrike"
      {
          "Signatures"
          {
     "GetAttachment"
              {
                  "library"    "server"
                  "linux"        "@_ZN14CBaseAnimating13GetAttachmentEiR6VectorR6QAngle"
              }
          }
      }
}


Результат тот же . Хотя на am написали что в этом проблема . У функции GetAttachment 3 значения , а добавляю одно (В первом посте видно) .

Добавлено (09.08.2014, 15:14:00)
---------------------------------------------
Попробовал даже так
Код

#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_Signature, "GetAttachment");
      PrepSDKCall_AddParameter(SDKType_PlainOldData , SDKPass_Plain);
   PrepSDKCall_SetReturnInfo(SDKType_Vector , SDKPass_ByValue);
   PrepSDKCall_SetReturnInfo(SDKType_QAngle , SDKPass_ByValue);
      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, "forward"), f_pos, f_ang);
      PrintToChatAll("%f %f %f", f_pos[0], f_pos[1], f_pos[2]);
}


Должно вернуть 2 значения вот и я попытался 2 retrun установить


Сообщение отредактировал serm - Суббота, 09.08.2014, 15:14:24
 
sssw Дата: Суббота, 09.08.2014, 17:05:00 | Сообщение # 21
Сообщений: 123
Репутация: 14 [ +/- ]
"hLookupAttachment" разве не для прилипания?
А так в CBaseAnimation несколько GetAttachment'о с разными параметрами и они вызывают друг друга.
Я бы вчера разобрался но вложение исходники подбили желание.

P.s Пойду сервер поставлю.


Сообщение отредактировал sssw - Суббота, 09.08.2014, 18:10:31
 
serm Дата: Воскресенье, 10.08.2014, 15:36:43 | Сообщение # 22
Сообщений: 137
Репутация: 7 [ +/- ]
Цитата sssw ()
"hLookupAttachment" разве не для прилипания?
А так в CBaseAnimation несколько GetAttachment'о с разными параметрами и вызывая друг друга.
Я бы вчера разобрался но вложение исходники подбили желание.

P.s Пойду сервер поставлю.

Я объясню .

Там штуки 4 GetAttachment
Первые 2
Это
GetAttachment("Тут название атачмента") - Его использовать без index attachment (Он находится внутри самой функции)
GetAttachment("Тут название атачмента" "Тут 3 типа vector") - Тут скорее всего для манипуляций чтобы сразы происходило вычисление с заданными коррекциями .

А вторые 2 тоже самое но
GetAttachment("Тут уже вычисленный index атачмента")
GetAttachment("Тут уже вычисленный index атачмента" "Тут 3 типа vector")

Добавлено (09.08.2014, 17:47:04)
---------------------------------------------
Мне интересно , matix3x4_t можно ли его воссоздать в sp например вот так new Float:matrix[3][4] Ведь по сути получается тоже самое

http://mathworld.wolfram.com/images/eps-gif/Matrix_1000.gif

И сразу напрямую править через
Код

MatrixGetColumn(matrix3x4_t  const&,int,Vector &)

new Float:matrix[3][4];
new Float:f_Pos[3];
for(new i=0; i<2; i++) MatrixGetColumn(matrix,i,f_Pos[i]);


Только маловероятно что sdk примет такой вид массива matrix

Добавлено (10.08.2014, 08:53:37)
---------------------------------------------
На форуме am мне помогли .
Дали функцию
Код

#pragma semicolon 1   

#include <sourcemod>   
#include <sdktools>   

new Handle:hGameConf, Handle:hTest, Handle:hLookupAttachment;   


Но возвращается
Код

attachment = 11
0.000000 0.000000 0.000000


Без координат

Добавлено (10.08.2014, 15:36:43)
---------------------------------------------
Ну так что WS ты хоть сможешь помочь идейкой как реализовать , думаю опыта у тебя поболее .


Сообщение отредактировал serm - Четверг, 14.08.2014, 14:53:46
 
_wS_ Дата: Воскресенье, 10.08.2014, 16:18:05 | Сообщение # 23
Ну если даже владелец SM тебе помочь не может =) У меня в SDKCall почти нет опыта. Если этот вариант не работает, все просто, пробуй другие, пусть и не такие удобные (главное чтобы работало) - тебе же нужно координаты получить эти, есть плагины "Hats" и там пара формул.
 
serm Дата: Воскресенье, 10.08.2014, 16:33:08 | Сообщение # 24
Сообщений: 137
Репутация: 7 [ +/- ]
Цитата _wS_ ()
Ну если даже владелец SM тебе помочь не может =) У меня в SDKCall почти нет опыта. Если этот вариант не работает, все просто, пробуй другие, пусть и не такие удобные (главное чтобы работало) - тебе же нужно координаты получить эти, есть плагины "Hats" и там пара формул.

В hats все довольно банально берешь позицию головы и сам все подкручиваешь . Ладно дальше сам буду разбираться .
 
_wS_ Дата: Понедельник, Сегодня, 21:41:00 | Сообщение # 25
Самому сейчас понадобилось, искал решение и в итоге на свой же форум и закинуло :)
Прошло всего 12 лет noidea
Даю код, который у меня работает, вдруг кто будет искать.
Вместо Vip_GetSymbolAddress вы можете использовать gamedata файл + gameconf.GetAddress (пример есть здесь).
Тестировал в CSS:34 и у меня по muzzle_flash ничего не находит.
Открыл w_rif_m4a1.mdl в Half-Life Model Viewer и увидел в Attachments слева имена "1" и "2" и они работают.
Это наверно в CSS:OB и выше там уже muzzle_flash.

Код
Handle g_hGetAttachment;

public void OnPluginStart()
{
    // bool CBaseAnimating::GetAttachment( const char *szName, Vector &absOrigin, QAngle &absAngles )
    Address base_address = Vip_GetSymbolAddress("_ZN14CBaseAnimating13GetAttachmentEPKcR6VectorR6QAngle");
    if (!base_address) {
        SetFailState("!base_address");
    }

    StartPrepSDKCall(SDKCall_Entity);

    if (!PrepSDKCall_SetAddress(base_address)) {
        SetFailState("!PrepSDKCall_SetAddress");
    }

    PrepSDKCall_SetReturnInfo(SDKType_Bool, SDKPass_Plain);

    PrepSDKCall_AddParameter(SDKType_String, SDKPass_Pointer);
    PrepSDKCall_AddParameter(SDKType_Vector, SDKPass_ByRef, 0, VENCODE_FLAG_COPYBACK);
    PrepSDKCall_AddParameter(SDKType_QAngle, SDKPass_ByRef, 0, VENCODE_FLAG_COPYBACK);

    if (!(g_hGetAttachment = EndPrepSDKCall())) {
        SetFailState("!EndPrepSDKCall");
    }

    RegConsoleCmd("at", OnCmd_at);
}

static Action OnCmd_at(int client, int args)
{
    if (client < 1) {
        return Plugin_Handled;
    }

    if (args < 1)
    {
        PrintToConsole(client, "at \"muzzle_flash or other attachment name\"");
        return Plugin_Handled;
    }

    int ents[2];
    ents[0] = GetEntPropEnt(client, Prop_Data, "m_hViewModel");
    ents[1] = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");

    char names[][] =
    {
        "m_hViewModel",
        "m_hActiveWeapon",
    };

    float v[3];
    float a[3];

    for (int i = 0; i < sizeof(ents); ++i) {
        if (SDKCall(g_hGetAttachment, ents[i], "1", v, a)) {
            PrintToChat(client, "%s\nvec: %.1f %.1f %.1f\nang: %.1f %.1f %.1f", names[i], v[0], v[1], v[2], a[0], a[1], a[2]);
        } else {
            PrintToChat(client, "%s !SDKCall", names[i]);
        }
    }

    if (ents[0] == -1 && ents[1] == -1) {
        PrintToChat(client, "Be alive with weapons in your hands");
    }

    return Plugin_Handled;
}


Для m_hViewModel (predicted_viewmodel, v_) - позиция одна.
Для m_hActiveWeapon (оружие в руках, w_) - другая.

Тут уже тоже думать нужно.
Если хочется, например, выстрелить лучом от кончика пушки, то тот, кто держит оружие увидит начало луча одно (у себя на клиенте), а другие другое (игроки в мире). Это нужно один луч показать клиенту, а другой - всем остальным - морока. Могу в чем-то ошибаться, не всё протестировал.

Weapon_ShootPosition - фгня, возвращающая то же, что и GetClientEyePosition.
 
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск: