Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 31.03.2009, 11:15   #1
Местный
 
Аватар для Sherman
 
Регистрация: 24.04.2008
Сообщений: 364
Сказал Спасибо: 15
Имеет 116 спасибок в 83 сообщенях
Sherman пока неопределено
По умолчанию Данные о скилах из клиента

Предисловие. Работая над небольшим проектиком мне потребовалось иметь данные о скиллах. Перепробовав варианты с ini и ресурсами, и осозновая что мой проект работает в адресном пространстве клиента, был написан этот модуль.

Код:
unit UserData;
interface

uses
  Windows, SysUtils, Classes;


type
 TMSData = record
    name	          :	pWideChar;
    b1    	        :	integer;
    b2	            :	integer;
    description	    :	pWideChar;
    b3	            :	integer;
    b4	            :	integer;
    id	            :	integer;
    level	          :	integer;
    oper_type	      :	integer;
    mp_consume	    :	integer;
    hp_consume	    :	integer;
    cast_range	    :	integer;
    cast_style	    :	integer;
    hit_time	      :	double;
    is_magic	      :	integer;
    ani_char	      :	integer;
    desc	          :	integer;
    icon_name	      :	integer;
    extra_eff	      :	integer;
    desc_add1	      :	pWideChar;
    b5	            :	integer;
    b6	            :	integer;
    desc_add2	      :	pWideChar;
    b7	            :	integer;
    b8	            :	integer;
    is_ench	        :	integer;
    ench_skill_id	  :	integer;
    UNK_0	          :	integer;
    UNK_1	          :	integer;
end;
pMSData = ^TMSData;


procedure EngineGetMSData;cdecl; external 'engine.dll' name '?GetMSData@FL2GameData@@QAEPAUFL2MagicSkillData@@HH@Z';
procedure EngineDL2FName; cdecl; external 'engine.dll' name '??DL2FName@@QBEPBGXZ';

function DL2FName(Skill:pMSData):PWideChar; cdecl;
function GetMSData(SkillID,SkillLvl:integer):pMSData;  cdecl;

var
 Engine:cardinal;

implementation

function DL2FName(Skill:pMSData):PWideChar; cdecl;
asm
  mov EAX, Skill
  lea ECX,dword ptr DS:[EAX+$48]
  call EngineDL2FName
  mov Result, EAX
end;

function GetMSData(SkillID,SkillLvl:integer):pMSData;  cdecl;
asm
  mov EAX,[SkillLvl]
  mov ECX,[SkillID]
  push EAX
  push ECX
  mov ECX,[Engine]
  add ECX,$6F31B8
  call EngineGetMSData
  mov Result, EAX
end;

initialization
 Engine:=GetModuleHandle('engine.dll');

end.
функция GetMSData возвращает указатель на структуру описания скила в клиенте.

DL2FName возвращает имя текстуры иконки.

Engine - адрес ImageBase "Engine.dll"

Код:
  mov ECX,[Engine]
  add ECX,$6F31B8
Тут я упростил, смысл - добратся до адреса по которому начинаются данные о скилах в клиенте, в таблице экспорта оно обьявлено как :
=>6F31B8 .data Export ?GL2GameData@@3VFL2GameData@@A

ЗЫ. мой проект заточен для С4, для дальнейших хроник экспортируемые ф-ции могут лежать в других dll, но в любом случае в папке system клиента

Добавлено через 31 минуту
xor, тут говорят что ты умеешь из клиента программно иконки вытаскивать. Можно пример увидеть?

Последний раз редактировалось Sherman, 31.03.2009 в 11:39. Причина: Добавлено сообщение
Sherman вне форума   Ответить с цитированием
За это сообщение Sherman нажился 2 спасибками от:
Старый 31.03.2009, 14:21   #2
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Sherman, почитай это http://coderx.ru/showthread.php?t=76
там я давал ссылки на модуль для дельфи для работы с utx файлами и в двух сообщениях приводил примеры его использования
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 31.03.2009, 15:26   #3
Местный
 
Аватар для Sherman
 
Регистрация: 24.04.2008
Сообщений: 364
Сказал Спасибо: 15
Имеет 116 спасибок в 83 сообщенях
Sherman пока неопределено
По умолчанию

Читать utx это скучно и избыточно в моем случае. Мой инъект в процессе клиента, мне ф-ции получения текстуры нужны самого клиента. Зачем дублировать то что уже написано когда я работаю в клиенте. Буду искать. )

По первой ссылке кстати лежат сорсы для работы с utx UT3, включая Lineage II
Впринципе если не получится получить с помощью самого клиента это тоже вариант.

Последний раз редактировалось Sherman, 31.03.2009 в 15:34.
Sherman вне форума   Ответить с цитированием
Старый 31.03.2009, 15:36   #4
Местный
 
Регистрация: 11.03.2008
Сообщений: 529
Сказал Спасибо: 10
Имеет 111 спасибок в 71 сообщенях
Xa4ik пока неопределено
По умолчанию

Если важен результат а не процес, можно использывать аксесовскую базу с картинками от L2informer.
Xa4ik вне форума   Ответить с цитированием
Старый 31.03.2009, 15:42   #5
Местный
 
Аватар для Sherman
 
Регистрация: 24.04.2008
Сообщений: 364
Сказал Спасибо: 15
Имеет 116 спасибок в 83 сообщенях
Sherman пока неопределено
По умолчанию

Не... это совсем суровый вариант. Вариант использования utx еще куда не шло, но вот привлечение детища M$ это зло
Sherman вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 22:53.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!