Current time: 07.12.2022, 04:58 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
ERA III
Author Message
wessonsm Offline

Posts: 782
Post: #2056

daemon_n, здесь скорость тоже важна.
Я думаю, костыли в виде ExecErmCmd будут замедлять выполнение кода, там надо еще строку распарсить, это нехилая воговская функция такая.
Я обрадовался, когда увидел "xoroshiro", он значительно быстрее вихря Мерсенна должен быть по тестам, которые есть в сети.
(This post was last modified: 06.09.2022 05:08 by wessonsm.)
06.09.2022 05:04
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 1960
Post: #2057

(06.09.2022 04:50)wessonsm Wrote:  Геройская random (0x50C7C0) его будет использовать или нет?

Если ЭРА ставит туда свой перехват прямо в самое начало, подменяя всю функцию целиком, значит наверняка использует. По крайней мере Тифон вызывает 50C7C0 довольно часто и в него, надеюсь, тоже идёт получение случайных чисел из берсеркерского генератора в era.dll.

(06.09.2022 04:55)daemon_n Wrote:  
wessonsm, 96-copy (Click to View)

Вообще не смешно, а грустно видеть подобный код. ExecErmCommand в плагинах - зло.
(This post was last modified: 06.09.2022 06:17 by XEPOMAHT.)
06.09.2022 06:08
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 15871
Post: #2058

Все геройские и воговские 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
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4148
Post: #2059

XEPOMAHT, wessonsm, куда чувство юмора делось ?166


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
06.09.2022 06:46
Visit this user's website Find all posts by this user Quote this message in a reply
Raistlin Away
Moderators

Posts: 1278
Post: #2060

Почему-то не работает функция WriteStrToIni(const char* Key, const char* Value, const char* SectionName, const char* FilePath). Просто не видит файл или не вызывается, похоже. При этом ReadStrFromIni может найти файл с таким же названием.


Создал новый глобальный мод: WoG Ultra Edition
14.09.2022 09:37
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4148
Post: #2061

Raistlin, в какой именно файл (путь) ты пытаешься писать?
Не забудь SaveIni


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
14.09.2022 09:51
Visit this user's website Find all posts by this user Quote this message in a reply
Raistlin Away
Moderators

Posts: 1278
Post: #2062

SaveIni? Это хто? 148

Quote:в какой именно файл (путь) ты пытаешься писать?
Файл лежит в папке с модом. Читается нормально.


Создал новый глобальный мод: WoG Ultra Edition
14.09.2022 10:33
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4148
Post: #2063

Raistlin, если я правильно помню, сохранить можно только в папку runtime и корень.

Метод назвал гипотетически. Суть в том, что файл надо сохранить после записи


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
14.09.2022 11:37
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 15871
Post: #2064

С какой-то версии запись в ini кэшируется в память. Иначе сотни записей в цикле изнасилуют жёсткий диск и ЦПУ.
Потому после всех записей достаточно вызвать function SaveIni (FilePath: pchar); stdcall для сброка кэша.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
14.09.2022 12:14
Find all posts by this user Quote this message in a reply
Raistlin Away
Moderators

Posts: 1278
Post: #2065

Большое спасибо! Все заработало.


Создал новый глобальный мод: WoG Ultra Edition
14.09.2022 17:21
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4148
Post: #2066

OnBattleStackObtainsTurn не срабатывает на старте боя (знаю, что там вызывается ф-ция поиска первого стэка из другого места, вот его и предлагаю захукать, тем самым добавив в общий пул)


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
13.10.2022 00:21
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 15871
Post: #2067

Да, неприятно. Это какое там место?


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
13.10.2022 08:40
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4148
Post: #2068

Berserker, из "Start Battle", кажется.
Позднее гляну адрес


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
13.10.2022 09:06
Visit this user's website Find all posts by this user Quote this message in a reply
Raistlin Away
Moderators

Posts: 1278
Post: #2069

(14.09.2022 12:14)Berserker Wrote:  С какой-то версии запись в ini кэшируется в память. Иначе сотни записей в цикле изнасилуют жёсткий диск и ЦПУ.
Потому после всех записей достаточно вызвать function SaveIni (FilePath: pchar); stdcall для сброка кэша.

Сейчас стало любопытно, а это применяется к прочтению данных из ini?


Создал новый глобальный мод: WoG Ultra Edition
13.10.2022 09:30
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 15871
Post: #2070

Нет, при чтении весь ini файл анализируется и сохраняется в памяти в виде карты ключ - значение. Повторные запросы на чтение не насилуют жёсткий диск вообще. Запись тоже идёт в памяти в этот словарь ключ-значение. Раньше после каждой записи весь файл на диске перезаписывался. Чтобы остановить это ужасное деяние, я добавил SaveIni.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
13.10.2022 09:31
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-2022 MyBB Group