XEPOMAHT
Posts: 2356
|
(06.09.2022 04:50)wessonsm Wrote: Геройская random (0x50C7C0) его будет использовать или нет?
Если ЭРА ставит туда свой перехват прямо в самое начало, подменяя всю функцию целиком, значит наверняка использует. По крайней мере Тифон вызывает 50C7C0 довольно часто и в него, надеюсь, тоже идёт получение случайных чисел из берсеркерского генератора в era.dll.
(06.09.2022 04:55)daemon_n Wrote:
Code:
int _y = Era::y[22];
Era::ExecErmCommand("VRy22:R0/[min_val]/[max_val];");
int rand_value = Era::y[22];
Era::y[22] = _y;
Вообще не смешно, а грустно видеть подобный код. ExecErmCommand в плагинах - зло.
(This post was last modified: 06.09.2022 06:17 by XEPOMAHT.)
|
|
06.09.2022 06:08 |
|
Berserker
Posts: 16657
|
Все геройские и воговские rand(), random() используют движок Эры.
Code:
(* Replace Heroes PRNG with custom switchable PRNGs *)
ApiJack.StdSplice(Ptr($61841F), @Hook_SRand, ApiJack.CONV_CDECL, 1);
ApiJack.StdSplice(Ptr($61842C), @Hook_Rand, ApiJack.CONV_STDCALL, 0);
ApiJack.StdSplice(Ptr($50C7B0), @Hook_Tracking_SRand, ApiJack.CONV_THISCALL, 1);
ApiJack.StdSplice(Ptr($50C7C0), @Hook_RandomRange, ApiJack.CONV_FASTCALL, 2);
Не забывай только, что rand() ограничен 0..65535 и я это ограничение соблюдаю строго по канону С. А вот random(min, max) по адресу 50C7C0 не ограничен, его и использую, где можно. VR:R использует random(min, max) по адресу 50C7C0.
Code:
int Random(int ZLow,int ZHigh)
{
#include "templ.h"
__asm{
mov ecx,ZLow
mov edx,ZHigh
mov eax,0x50C7C0
call eax
mov IDummy,eax
}
RETURN(IDummy)
}
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|
|
06.09.2022 06:18 |
|
daemon_n
Posts: 4343
|
|
06.09.2022 06:46 |
|
daemon_n
Posts: 4343
|
|
14.09.2022 09:51 |
|
Berserker
Posts: 16657
|
|
14.09.2022 12:14 |
|
Raistlin
Posts: 1349
|
|
14.09.2022 17:21 |
|
Berserker
Posts: 16657
|
|
13.10.2022 08:40 |
|
daemon_n
Posts: 4343
|
|
13.10.2022 09:06 |
|
Berserker
Posts: 16657
|
|
13.10.2022 09:31 |
|