10.09.2015, 22:24
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
11.09.2015, 01:08
(10.09.2015 18:41)igrik Wrote: [ -> ]Как обновлять/перерисовывать диалог на лету я так и не разобрался-> - это же thiscall, а слева от стрелки - this.
(17.07.2015 16:11)gamecreator Wrote: [ -> ]Ну и не забыть перерисовать диалог:!!SN:E7510525/1/-1; вызывает у меня вылет, тут видимо я не так что-то понял
hdlg->0x7299FD(-1
11.09.2015, 09:38
хех, клевое обозначение...
Но всё равно не работает. Скорее всего адрес не тот, либо нужны доп. параметры
Но всё равно не работает. Скорее всего адрес не тот, либо нужны доп. параметры
11.09.2015, 11:53
А можно пример кода и диалога? Потому что вникать что такое DL, если честно, сейчас не хочется.
11.09.2015, 12:22
Запаковано в виде мода. Скачать
Это диалоговое окно выбора режима битвы. Нападешь на монстра - появится это окно. На нажатие клавиши "7" происходит отрисовка диалога в других координатах. Клавиша "5" просто информация.
Это диалоговое окно выбора режима битвы. Нападешь на монстра - появится это окно. На нажатие клавиши "7" происходит отрисовка диалога в других координатах. Клавиша "5" просто информация.
11.09.2015, 15:11
А где вариант с thiscall, который не работает?
11.09.2015, 15:17
там же. строка 054. Записана так:
upd, и да, я пробовал и так !!SN:E7510525/2/-1; результат тот же = вылет
а еще:
upd, и да, я пробовал и так !!SN:E7510525/2/-1; результат тот же = вылет
а еще:
Spoiler (Click to View)
так !!SN:E7510525/0/-1;
и так!!SN:E7510525/1/68;, где 68-номер WoG диалога
и так!!SN:E7510525/2/68;, где 68-номер WoG диалога
и еще много чего, но всё с этим адресом
и так!!SN:E7510525/1/68;, где 68-номер WoG диалога
и так!!SN:E7510525/2/68;, где 68-номер WoG диалога
и еще много чего, но всё с этим адресом
11.09.2015, 15:24
Ну это я увидел. А где вариант с thiscall? Напоминаю:
Что конкретно неясно?
К слову, исправил на thiscall и всё заработало. Только старое изображение диалога осталось, наверное надо экран перерисовать сперва.
Quote: E #1 / #2 / ... up to 62 parameters; Execute external functionПервый аргумент - this (третий аргумент команды соответственно).
#1 = function address
#2 = calling conversion
0 - Pascal (use for all Angel.dll functions)
1 - Cdecl or Stdcall (use for WinAPI and the majority of other functions)
2 - ThisCall (use it only if you know, what you are doing)
3 - FastCall (the same as above, try to avoid)
Что конкретно неясно?
К слову, исправил на thiscall и всё заработало. Только старое изображение диалога осталось, наверное надо экран перерисовать сперва.
11.09.2015, 15:31
я исправил на thiscall, и у меня не работало, ни тогда, ни сейчас.
Почему я и обратился к тебе за помощью. У меня вылетает, и перепробовал я все что только мог, в том числе и thiscall
Почему я и обратился к тебе за помощью. У меня вылетает, и перепробовал я все что только мог, в том числе и thiscall
11.09.2015, 15:36
(11.09.2015 15:17)igrik Wrote: [ -> ]upd, и да, я пробовал и так !!SN:E7510525/2/-1; результат тот же = вылетТеперь понятно. Поясняю: thiscall - это вызов метода объекта (если ты знаком с ООП). Функции такого типа принимают дополнительный параметр this, указатель на сам объект. Синтаксис вызова thiscall:
а еще:
Spoiler (Click to View)так !!SN:E7510525/0/-1;
и так!!SN:E7510525/1/68;, где 68-номер WoG диалога
и так!!SN:E7510525/2/68;, где 68-номер WoG диалога
и еще много чего, но всё с этим адресом
Смотрим в описание функции:
(17.07.2015 16:11)gamecreator Wrote: [ -> ]hdlg->0x7299FD(-1)Функция имеет один параметр, но в дополнение является методом объекта диалога. Значит нужно передать ей адрес этого объекта. Смотрим снова в описание, как же получить сам диалог, тоесть объект:
(17.07.2015 16:11)gamecreator Wrote: [ -> ]Получить адрес диалога можно по номеру диалога:
hdlg = cdecl 0х729AD3(int32 id)
Или получить последний (текущий?) отображаемый диалог:
hdlg = [0x887650]
Понятно?
11.09.2015, 15:39
йок-макарёк. Теперь понятно. Спасибо!!!
Quote:Теперь понятно. Поясняю: thiscall - это вызов метода объекта (если ты знаком с ООП). Функции такого типа принимают дополнительный параметр this, указатель на сам объект. Синтаксис вызова thiscall:не знал. Получилось. Естественно осталось старое изображение диалога. Буду искать способы решения.
!!SN:Eфункция/2/this/параметры;
11.09.2015, 16:25
да)))) :D
23.10.2015, 18:57
gamecreator | feanor, подскажите плиз:
что такое "mip = int a4" и как его получить. Вообще въехать не могу блин!
и аналогичный вопрос по "__int64 PosMixed"
что такое "mip = int a4" и как его получить. Вообще въехать не могу блин!
Code:
0х00408ABF Enter2ObjectGamer(v2, a5, mip);
0х00408ABF car__thiscall Enter2ObjectGamer(int AdvManager, signed int a3, int a4)
и аналогичный вопрос по "__int64 PosMixed"
Code:
0x004A8160 void __thiscall Enter2ObjectMain(int AvdManager, _Hero_ *Hero, signed int Par1, __int64 PosMixed)
23.10.2015, 19:34
А, это. Это координаты.
Почему они у тебя внезапно int64 - не знаю.
Code:
inline int PackCoords(int x, int y, int l)
{
return (x & 0x3FF) + ((y & 0x3FF) << 16) + ((l & 0xF) << 26);
}
inline void UnpackCoords(int coords, int& x, int& y, int& l)
{
x = coords & 0x3FF;
y = (coords >> 16) & 0x3FF;
l = (coords >> 26) & 0xF;
}
Почему они у тебя внезапно int64 - не знаю.