Current time: 14.12.2018, 22:46 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Исследование героев
» туториал(ы)
Author Message
gamecreator Offline
Administrators

Posts: 7146
Post: #766

Ну это я увидел. А где вариант с thiscall? Напоминаю:
Quote: E #1 / #2 / ... up to 62 parameters; Execute external function
#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)
Первый аргумент - this (третий аргумент команды соответственно).
Что конкретно неясно?

К слову, исправил на thiscall и всё заработало. Только старое изображение диалога осталось, наверное надо экран перерисовать сперва.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
11.09.2015 15:24
Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 1486
Post: #767

я исправил на thiscall, и у меня не работало, ни тогда, ни сейчас.

Почему я и обратился к тебе за помощью. У меня вылетает, и перепробовал я все что только мог, в том числе и thiscall


Скачать HoMM3 ERA 2.7.7 (Repack: Rus & HD) || (wogNativeDialogs)
11.09.2015 15:31
Visit this user's website Find all posts by this user Quote this message in a reply
gamecreator Offline
Administrators

Posts: 7146
Post: #768

(11.09.2015 15:17)igrik Wrote:  upd, и да, я пробовал и так !!SN:E7510525/2/-1; результат тот же = вылет
а еще:
Теперь понятно. Поясняю: thiscall - это вызов метода объекта (если ты знаком с ООП). Функции такого типа принимают дополнительный параметр this, указатель на сам объект. Синтаксис вызова thiscall:

Смотрим в описание функции:
(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]

Понятно?


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
11.09.2015 15:36
Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 1486
Post: #769

йок-макарёк. Теперь понятно. Спасибо!!!

Quote:Теперь понятно. Поясняю: thiscall - это вызов метода объекта (если ты знаком с ООП). Функции такого типа принимают дополнительный параметр this, указатель на сам объект. Синтаксис вызова thiscall:
!!SN:Eфункция/2/this/параметры;
не знал. Получилось. Естественно осталось старое изображение диалога. Буду искать способы решения.


Скачать HoMM3 ERA 2.7.7 (Repack: Rus & HD) || (wogNativeDialogs)
11.09.2015 15:39
Visit this user's website Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 3168
Post: #770

(11.09.2015 15:39)igrik Wrote:  йок-макарёк.
ёк же?! не?


11.09.2015 16:16
Visit this user's website Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 1486
Post: #771

да)))) 96


Скачать HoMM3 ERA 2.7.7 (Repack: Rus & HD) || (wogNativeDialogs)
11.09.2015 16:25
Visit this user's website Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 1486
Post: #772

gamecreator | feanor, подскажите плиз:
что такое "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)


Скачать HoMM3 ERA 2.7.7 (Repack: Rus & HD) || (wogNativeDialogs)
23.10.2015 18:57
Visit this user's website Find all posts by this user Quote this message in a reply
gamecreator Offline
Administrators

Posts: 7146
Post: #773

А, это. Это координаты.
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 - не знаю.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
23.10.2015 19:34
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 497
Post: #774

Щас посмотрю.
Есть mip, который указатель на тайл клетки, а есть пакованные координаты.

//здесь - да, пакованные координаты
(This post was last modified: 23.10.2015 19:39 by feanor.)
23.10.2015 19:37
Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 1486
Post: #775

это побитовый сдвиг с присваиванием? блин, для меня это темный лес, а можно разжевать для чайника


Скачать HoMM3 ERA 2.7.7 (Repack: Rus & HD) || (wogNativeDialogs)
23.10.2015 23:51
Visit this user's website Find all posts by this user Quote this message in a reply
gamecreator Offline
Administrators

Posts: 7146
Post: #776

Разве ты с флагами существ не работал?
Вообще у Миханика хорошо рассказано, в предисловии к справке по значениям OB:C. Недавно мелькала тут ссылка на дф2.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
24.10.2015 00:32
Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 1486
Post: #777

работал, но я всё равно не вижу связи. Ты хочешь сказать, что это вроде проверки &16 или |16?


Скачать HoMM3 ERA 2.7.7 (Repack: Rus & HD) || (wogNativeDialogs)
24.10.2015 00:56
Visit this user's website Find all posts by this user Quote this message in a reply
gamecreator Offline
Administrators

Posts: 7146
Post: #778

Да. Вот смотри, есть у тебя int:
Code:
□□□□ □□□□ □□□□ □□□□ □□□□ □□□□ □□□□ □□□□
Всего 32 двоичных цифры (то есть 32 бита).
Число твоё - это сумма: (x & 0x3FF) + ((y & 0x3FF) << 16) + ((l & 0xF) << 26).
0x3FF = 11 1111 1111 (10 бит)
0xF = 1111 (4 бита)
Это обычная маска, как в твоём &16.
Теперь смотришь на сдвиг. Значение сдвинуто влево на несколько бит, то есть все его цифры переместились на более старшие позиции. Если сдвинуто влево на 1 бит, то 0-й бит будет пустым, а значение будет начинаться с 1-го бита. Если сдвинуто на 2, то 0-й и 1-й биты пустые, значение начинается со 2-го и т.д.
Значит x начинается с 0-го бита, y - с 16-го, l - с 26-го:
Code:
- □□□□ □□□□ □□□□ □□□□ □□□□ □□□□ □□□□ □□□□
x                            11 1111 1111
y        11 1111 1111
l   11 11
Как видишь, они не пересекаются. Каждое значение на своём месте:
Code:
□□ll llyy yyyy yyyy □□□□ □□xx xxxx xxxx


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
24.10.2015 01:55
Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 1486
Post: #779

я въехал!!! Огромное, огромное мерси! И теперь знаю как это применить...
Ведь int = 4 байта = 32 бита жеж. Вуаля))


Скачать HoMM3 ERA 2.7.7 (Repack: Rus & HD) || (wogNativeDialogs)
24.10.2015 02:21
Visit this user's website Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 1486
Post: #780

Окно найма существ/боевых машин героем

Отписываюсь и там и там, ибо df2 имеет свойство не работать


Скачать HoMM3 ERA 2.7.7 (Repack: Rus & HD) || (wogNativeDialogs)
09.11.2015 19:09
Visit this user's website Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2018 MyBB Group