Ниже будут описаны основые функции и процедуры ERA. Более полная технической документации располагается в каталоге Игра\Tools\Era\, или же вы можете задать конкретные вопросы непосредственно на официальном форуме проекта.
PROCEDURE Hook (HandlerAddr: POINTER; HookType: INTEGER; PatchSize: INTEGER; CodeAddr: POINTER); STDCALL;
HookType = HOOKTYPE_BRIDGE
,
при котором низкоуровневый переходник к высокоуровневой функции будет сгенерирован автоматически.PROCEDURE Hook_X (Context: PHookHandlerArgs): LONGBOOL; STDCALL;
PROCEDURE ApiHook; STDCALL;
BRIDGE
),
что позволяет вызывать также и оригинальные функции, минуя установленные перехватчики.PROCEDURE ClearAllIniCache; STDCALL;
PROCEDURE ClearIniCache; STDCALL;
PROCEDURE ExecErmCmd (CmdStr: PCHAR); STDCALL;
ExecErmCmd('IF:L^Hello, World!^;');
PROCEDURE ExtractErm; STDCALL;
PROCEDURE FatalError (Err: PCHAR); STDCALL;
PROCEDURE FireEvent (EventName: PCHAR; {n} EventData: POINTER; DataSize: INTEGER); STDCALL;
EventData
указывает на блок параметров события (если есть), а DataSize
определяет размер этого блока.
Посредством данного механизма можно передавать обработчикам ценную информацию о событии.PROCEDURE FireErmEvent (EventID: INTEGER); STDCALL;
PROCEDURE ForceTxtUnload (Name: PCHAR); STDCALL;
FUNCTION GetButtonID (ButtonName: PCHAR): INTEGER; STDCALL;
Экран кнопки;Уникальное имя кнопки;DEF кнопки;X;Y;Ширина;Высота;Длинное описание;Короткое описание;Код горячей клавиши
, где[Экран кнопки]
может принимать одно из следующих значений:
Advmap
(для карты приключений)Town
(для города)Hero
(для экрана героя)Heroes
(для экрана встречи героев)Battle
(для экрана битвы)Dummy
(если кнопка не используется)Hero;SecSkills.ScrollUp;ScrollUp.def;300;303;12;44;sss.scroll_up;sss.scroll_up;38
PROCEDURE GetGameState (VAR GameState: TGameState); STDCALL;
FUNCTION GetRealAddr (Addr: POINTER): POINTER; STDCALL;
PROCEDURE KillThisProcess; STDCALL;
FUNCTION LoadImageAsPcx16 (FilePath, PcxName: PCHAR; Width, Height, MaxWidth, MaxHeight, ResizeAlg: INTEGER): {OU} Heroes.PPcx16Item; STDCALL;
FUNCTION LoadTxt (Name: PCHAR): {n} PTxtFile; STDCALL;
PROCEDURE NameColor (Color32: INTEGER; Name: PCHAR); STDCALL;
NameColor($000000, 'bl'); теперь можно использовать {~bl}...{~} для чёрного текста
FUNCTION PatchExists (Name: STRING): BOOLEAN; STDCALL;
FUNCTION PluginExists (Name: STRING): BOOLEAN; STDCALL;
FUNCTION ReadSavegameSection (DataSize: INTEGER; {n} Dest: POINTER; SectionName: PCHAR): INTEGER; STDCALL;
PROCEDURE WriteSavegameSection (DataSize: INTEGER; {n} Data: POINTER; SectionName: PCHAR); STDCALL;
FUNCTION ReadStrFromIni (Key, SectionName, FilePath, Res: PCHAR): BOOLEAN; STDCALL;
Res
. При первом же чтении ini-файл анализируется, кэшируется и дальнейшие запросы приводят к выборкам из ассоциативного массива,
которые происходят очень быстро и без обращения к жёсткому диску.FUNCTION WriteStrToIni (Key, Value, SectionName, FilePath: PCHAR): BOOLEAN; STDCALL;
FUNCTION RecallAPI (Context: PHookHandlerArgs; NumArgs: INTEGER): INTEGER; STDCALL;
PROCEDURE RedirectFile (OldFileName, NewFileName: PCHAR); STDCALL;
PROCEDURE GlobalRedirectFile (OldFileName, NewFileName: PCHAR); STDCALL;
PROCEDURE RedirectMemoryBlock (OldAddr: POINTER; BlockSize: INTEGER; NewAddr: POINTER); STDCALL;
PROCEDURE RegisterHandler (Handler: TEventHandler; EventName: PCHAR); STDCALL;
PROCEDURE ReloadErm; STDCALL;
PROCEDURE SaveEventParams; STDCALL;
PROCEDURE RestoreEventParams; STDCALL;
FUNCTION SaveIni (FilePath: PCHAR): BOOLEAN; STDCALL;
PROCEDURE WriteAtCode (Count: INTEGER; Src, Dst: POINTER); STDCALL;