Логин  Пароль 
 запомнить меня 




Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2
Изучение структуры данных КР2ДП 
Автор Сообщение
Сотрудник СНК-Games
Сообщений: 6390

Аватар пользователя
Символ творца. За разработку утилиты "Микроскоп", значительно облегчившей создание чемпионатных генераций КР2.

Шаман без бубна
Сообщение 10.07.2011, 08:40
Обновление экрана - это хорошо и весьма полезно, но в данном конкретном случае возможно было бы проще дернуть функцию Ether? (это функция для создание мессаг из игровых скриптов, в файле commands.txt, который ты мне присылал, она есть; аргументы - тип сообщения, его ID (мешанина из цифр и букв обычно), текст, и ссылки на корабли, если нужно)

И еще, можешь попробовать найти функцию генерации (или обновления) графического объекта корабля? Речь идет о следующем - внешний вид корабля определяется типом корпуса, но если его менять - внешний вид сам не поменяется. Для игрока это произойдет только если снять корпус, а потом надеть обратно, для ИИ - вообще никогда.

В принципе, в графическом объекте сидит одна управляющая строка (ссылка на нее в смещении 24 от начала графического объекта), изменив которую, можно привесить кораблю вообще любой скин, но она применяется только при свертке/разворачивании игры, либо при S/L. В идеале хотелось бы иметь возможность дернуть ее принудительно.

Сейчас, чтобы как-то это обходить, в скриптере есть громоздкая ShipSetSkin, которая правит сам графический объект (причем только если игроку корабль не виден в данный момент), но эта штука является самой глюкоопасной из всего, что в этом скриптере есть. Поэтому, очень хотелось бы найти игровую функцию, которая бы это делала как надо. Попробуешь?


  
 
Новичок
Сообщений: 7

Аватар пользователя

Кодер
Сообщение 10.07.2011, 16:18
Сделаю, ну как всегда ... очень похожа 0x0063A818 ... снимает камуфляж чего то пишет в шкуру ..
PS В неё передаётся лишь один параметр - это корабль (не корпус а корабль)
PSS Щас попробую написать DLL вылететь в космос и поменять тип корпуса ... о результатах позже

Добавлено спустя 41 мин. 16 сек.:
Так - всё получилось единственное но ... требуется ещё одна функция ибо после выполнения этой корабль пропадает, но стоит зайти в меню "Корабль" он появляется и уже другой - новенький ) что ж будем думать

Изображение Изображение

Добавлено спустя 16 мин. 15 сек.:
Скорее всего ответ где то в 0x005B4E04


  
 
Сотрудник СНК-Games
Сообщений: 6390

Аватар пользователя
Символ творца. За разработку утилиты "Микроскоп", значительно облегчившей создание чемпионатных генераций КР2.

Шаман без бубна
Сообщение 10.07.2011, 17:42
Здорово, можно будет наконец убрать ту бандуру и поставить одну строчку вызова функции :lasos-happy:

А насчет обновления, 006A6374 из предыдущего примера обновляет только мессаги, основной экран не трогает? В принципе, даже без этого все отлично, если менять шкурку только когда корабль вне поля зрения игрока (а менять на виду все равно как-то странно будет).


  
 
Новичок
Сообщений: 7

Аватар пользователя

Кодер
Сообщение 13.07.2011, 02:15
Подумав я решил ... ммм ... сложновато постоянно метаться из игры писать новую DLL что бы что то проверить ... скажем так есть концепт одного проекта позволяющий манипулировать с ресурсами игры как хочется - тестировать новые возможности - тестировать новые процедуры ... пока всё только на бумажке и в голове но возможно всё осуществится и Коварду это понравится


  
 
Новичок
Сообщений: 7

Аватар пользователя

Кодер
Сообщение 26.10.2014, 13:08
И так вот небольшой кусочек кода - позволяющий осуществить перехват, а в последствии и вызов, функции (добавки сообщений в трей по правому клику на планете)

Подходит только для Space Rangers HD A War Apart (в коде есть комментарий для правки на "Перезагрузку")

ЗЫ Так же DDetours может перехватывать функции относящиеся к различным классам

Исходный код :
Код:
library sr2;

uses
    Windows
  , SysUtils
  , DDetours // https://code.google.com/p/delphi-detours-library/
  ;

{$R *.res}

var
  dwThrdHack: Dword = 0;
  dwThrdMain: Dword = 0;
  dwThrdKeys: Dword = 0;
  CALL: Boolean = False;

  Trampoline: function(
    p0: Integer;
    p1: Integer;
    p2: Integer;
    p3: WideString): Integer;

  dwLoadOffset: Dword;

function TrampolineFunc(
  p0: Integer;
  p1: Integer;
  p2: Integer;
  p3: WideString): Integer;
begin
  OutputDebugString(PWideChar(p3));
  Result := Trampoline(p0, p1, p2, p3);
end;

Function FuncKeys(const LPVOID: variant): Boolean;
begin
  while (True) do
  begin
    if (GetAsyncKeyState(VK_END) <> 0) then
      CALL := True;
    sleep(100);
  end;
end;

function FuncMain(const LPVOID: variant): Boolean;
begin
  while (True) do
  begin
    asm
      pushad;
    end;
    if CALL then
    begin
      OutputDebugString('FPS');
      CALL := False;
    end;
    sleep(100);
    asm
      popad;
    end;
  end;
end;

Function HackThread(): Dword;
var
  cHandle: Cardinal;
begin
  repeat
    sleep(500);
  until (dwThrdMain = 0);

  dwLoadOffset := GetModuleHandle(nil);
  Dec(dwLoadOffset, $400000);

  @Trampoline := InterceptCreate(Pointer($0051DD38 + dwLoadOffset), @TrampolineFunc); //  для SR2 что ковырял Ковард - $006B67BC

  CreateThread(nil, 0, @FuncKeys, nil, 0, dwThrdKeys);
  CreateThread(nil, 0, @FuncMain, nil, 0, dwThrdMain);
  Result := 0;
end;

procedure DllMain(reason: Integer);
begin
  case reason of
    DLL_PROCESS_ATTACH:
      begin
        CreateThread(nil, 0, @HackThread, nil, 0, dwThrdHack);
      end;
    DLL_PROCESS_DETACH:
      begin
        if dwThrdMain <> 0 then CloseHandle(dwThrdMain);
        if dwThrdKeys <> 0 then CloseHandle(dwThrdKeys);
      end;
  end;
end;

begin
  OutputDebugString('inject');
  DisableThreadLibraryCalls(hInstance);
  DllProc := @DllMain;
  DllProc(DLL_PROCESS_ATTACH);
end.

Актуально?!


  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 35 ] 
Перейти:  

Найти:
На страницу Пред.  1, 2

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения
©2003-2017, CHK-Games.
Правила форума | Политика приватности
Powered by slightly modified phpBB © phpBB Group
Дизайн Вячеслава Трушкина
Плюшки и фишки by Bret, zavron_lb & ru_maniac
Лучше всего смотрится в 1024x768 и выше

Почта для жалоб и уведомлений // Abuse mail: ru_maniac@snk-games.ru
Russian or English only, please. Requests in any other language will be ignored.

[ Время генерации : 0.077 с. | Запросов к БД: 23 ]