library SKSE_Elys_Uncapper;
{$R *.res}
uses
Windows, SysUtils, IniFiles, Classes;
type
PluginHandle = Longword;
SKSEInterface = packed record
skseVersion: Longword;
runtimeVersion: Longword;
editorVersion: Longword;
isEditor: Longword;
QueryInterface: procedure(id: Longword); cdecl;
GetPluginHandle: function: PluginHandle; cdecl;
end;
PluginInfo = packed record
const
kInfoVersion: Longword = 1;
var
infoVersion: Longword;
name: PAnsiChar;
version: Longword;
end;
TPerkByLevel = record
Level: Word;
Perks: Byte;
end;
const
kPluginHandle_Invalid = $FFFFFFFF;
SKYRIM_VER = $030A0000;
SKSE_VER = $01040020;
PLUGIN_VER = $01050040;
oPLAYER = Pointer($01570334);
AlterationID = 18;
ArcheryID = 8;
AlchemyID = 16;
ConjurationID = 19;
BlockID = 9;
LightArmorID = 12;
DestructionID = 20;
HeavyArmorID = 11;
LockpickingID = 14;
EnchantingID = 23;
OneHandedID = 6;
PickpocketID = 13;
IllusionID = 21;
SmithingID = 10;
SneakID = 15;
RestorationID = 22;
TwoHandedID = 7;
SpeechID = 17;
var
Enabled: Boolean = False;
SkillEffectFormulasCap: Single;
FixSneakOver100CheckCode: packed Array [0 .. 5] of Byte = (
$9E, // sahf
$9B, // wait
$DF, $E0, // fstsw ax
$90, // nop
$73 // jae
);
SkillCaps: packed Array [6 .. 23] of Single;
SkillMults: Array [6 .. 23] of Single;
PerksPerLevel: Array of TPerkByLevel;
LastValidedSkill: Longword;
CurrentSkillCap : Single;
CurrentSkillLevel : Single;
pSkillCapPatch: Pointer;
pSkillCapPatch2: Pointer;
SLParam1, SLParam2 : Single;
GetActorLevel: function(a1, a2: Integer; This: Pointer): Word; cdecl;
CalculateExpForNextLevel: function( SkillLevel, SLParam1, SLParam2 : Single ): Single; cdecl;
sub_650A70: function(a1, a2, a3 : Longint; a4, a5: PSingle): Byte; cdecl;
function Overwrite(Address[color=#666600]:[/color][color=#000000] [/color][color=#660066]Pointer[/color][color=#666600];[/color][color=#000000] [/color][color=#660066]Data[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Pointer[/color][color=#666600];[/color][color=#000000] [/color][color=#660066]Size[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Longword[/color][color=#666600]):[/color][color=#000000] [/color][color=#660066]Boolean[/color][color=#666600];[/color]
[color=#000088]var[/color]
[color=#000000] [/color][color=#660066]OldFlag[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Longword[/color][color=#666600];[/color]
[color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#000088]False[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#660066]VirtualProtect[/color][color=#666600]([/color][color=#660066]Address[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]Size[/color][color=#666600],[/color][color=#000000] PAGE_EXECUTE_READWRITE[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]@OldFlag[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#660066]Move[/color][color=#666600]([/color][color=#660066]Data[/color][color=#666600]^,[/color][color=#000000] [/color][color=#660066]Address[/color][color=#666600]^,[/color][color=#000000] [/color][color=#660066]Size[/color][color=#666600])[/color]
[color=#000000] [/color][color=#000088]else[/color]
[color=#000000] [/color][color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]MessageBox[/color][color=#666600]([/color][color=#006666]0[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'SKSE [/color][color=red][color=#008800]Elys[/color][/color][color=#008800] Uncapper could not modify Skyrim in memory. PLEASE CLOSE THE GAME NOW TO AVOID POTENTIAL GAME INCONSISTANCIES OR CORRUPTION'[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'Error'[/color][color=#666600],[/color][color=#000000] MB_ICONERROR[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#000088]True[/color][color=#666600];[/color]
[color=#000088]end[/color][color=#666600];[/color]
[color=#000088]function[/color][color=#000000] [/color][color=#660066]SetFF15Call[/color][color=#666600]([/color][color=#660066]Address[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Pointer[/color][color=#666600];[/color][color=#000000] [/color][color=#660066]Target[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Pointer[/color][color=#666600]):[/color][color=#000000] [/color][color=#660066]Boolean[/color][color=#666600];[/color]
[color=#000088]var[/color]
[color=#000000] [/color][color=#660066]Jmp[/color][color=#666600]:[/color][color=#000000] packed record
[/color][color=#660066]Code[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Word[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Target[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Pointer[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]Jmp[/color][color=#666600].[/color][color=#660066]Code[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] $15FF[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Jmp[/color][color=#666600].[/color][color=#660066]Target[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Target[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Overwrite[/color][color=#666600]([/color][color=#660066]Address[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]@Jmp[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]6[/color][color=#666600]);[/color]
[color=#000088]end[/color][color=#666600];[/color]
[color=#660066]Function[/color][color=#000000] [/color][color=#660066]ReplaceE8CallTarget[/color][color=#666600]([/color][color=#660066]Caller[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]PByte[/color][color=#666600];[/color][color=#000000] [/color][color=#660066]Target[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Pointer[/color][color=#666600]):[/color][color=#000000] [/color][color=#660066]Boolean[/color][color=#666600];[/color]
[color=#000088]var[/color]
[color=#000000] [/color][color=#660066]Address[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Longword[/color][color=#666600];[/color]
[color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]Address[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Longword[/color][color=#666600]([/color][color=#660066]Target[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]-[/color][color=#000000] [/color][color=#660066]Longword[/color][color=#666600]([/color][color=#660066]Caller[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]-[/color][color=#000000] [/color][color=#006666]5[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Overwrite[/color][color=#666600]([/color][color=#660066]Pointer[/color][color=#666600]([/color][color=#660066]Caller[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]),[/color][color=#000000] [/color][color=#006666]@Address[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]4[/color][color=#666600]);[/color]
[color=#000088]end[/color][color=#666600];[/color]
[color=#000088]function[/color][color=#000000] hook_650A70[/color][color=#666600]([/color][color=#000000]a1[/color][color=#666600],[/color][color=#000000] a2[/color][color=#666600],[/color][color=#000000] a3 [/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Longint[/color][color=#666600];[/color][color=#000000] a4[/color][color=#666600],[/color][color=#000000] a5[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]PSingle[/color][color=#666600]):[/color][color=#000000] [/color][color=#660066]Byte[/color][color=#666600];[/color][color=#000000] cdecl[/color][color=#666600];[/color]
[color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] sub_650A70[/color][color=#666600]([/color][color=#000000]a1[/color][color=#666600],[/color][color=#000000] a2[/color][color=#666600],[/color][color=#000000] a3[/color][color=#666600],[/color][color=#000000] a4[/color][color=#666600],[/color][color=#000000] a5[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SLParam1[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] a4[/color][color=#666600]^;[/color]
[color=#000000] [/color][color=#660066]SLParam2[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] a5[/color][color=#666600]^[/color]
[color=#000088]end[/color][color=#666600];[/color]
[color=#000088]function[/color][color=#000000] [/color][color=#660066]IncreasePerkPool[/color][color=#666600]([/color][color=#660066]NewValue[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Byte[/color][color=#666600]):[/color][color=#000000] [/color][color=#660066]Pointer[/color][color=#666600];[/color][color=#000000] stdcall[/color][color=#666600];[/color][color=#000000] [/color][color=#880000]// thiscall[/color]
[color=#000088]const[/color]
[color=#000000] [/color][color=#660066]PerkOffset[/color][color=#000000] [/color][color=#666600]=[/color][color=#000000] $6C9[/color][color=#666600];[/color][color=#000000] [/color][color=#880000]// offset to update with each new Skyrim version[/color]
[color=#000088]var[/color]
[color=#000000] [/color][color=#660066]This[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]PByte[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Level[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Word[/color][color=#666600];[/color]
[color=#000000] i[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Integer[/color][color=#666600];[/color]
[color=#000000] b[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Integer[/color][color=#666600];[/color]
[color=#000088]begin[/color]
[color=#000000] [/color][color=#000088]asm[/color]
[color=#000000] push ecx [/color][color=#880000]// Thiscall fix (Useless in this case but better safe than sorry)[/color]
[color=#000000] mov [/color][color=#660066]This[/color][color=#666600],[/color][color=#000000] ecx
[/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Level[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]GetActorLevel[/color][color=#666600]([/color][color=#006666]0[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]Pointer[/color][color=#666600]([/color][color=#000000]oPLAYER[/color][color=#666600]^));[/color][color=#000000] [/color][color=#880000]// Pointer to Player[/color]
[color=#000000] b[/color][color=#666600]:=[/color][color=#000000] [/color][color=#666600]-[/color][color=#006666]1[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]for[/color][color=#000000] i [/color][color=#666600]:=[/color][color=#000000] [/color][color=#006666]0[/color][color=#000000] to [/color][color=#660066]High[/color][color=#666600]([/color][color=#660066]PerksPerLevel[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]do[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#660066]Level[/color][color=#000000] [/color][color=#666600]<[/color][color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#000000]i[/color][color=#666600]].[/color][color=#660066]Level[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#000088]break[/color]
[color=#000000] [/color][color=#000088]else[/color][color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#660066]Level[/color][color=#000000] [/color][color=#666600]=[/color][color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#000000]i[/color][color=#666600]].[/color][color=#660066]Level[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#000088]begin[/color]
[color=#000000] b [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#000000]i[/color][color=#666600]].[/color][color=#660066]Perks[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]break[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]end[/color]
[color=#000000] [/color][color=#000088]else[/color]
[color=#000000] b [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#000000]i[/color][color=#666600]].[/color][color=#660066]Perks[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] b [/color][color=#666600]>=[/color][color=#000000] [/color][color=#006666]0[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] b [/color][color=#666600]:=[/color][color=#000000] [/color][color=#666600]([/color][color=#660066]This[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#660066]PerkOffset[/color][color=#666600])^[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] b
[/color][color=#000088]else[/color]
[color=#000000] b [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]NewValue[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#660066]This[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#660066]PerkOffset[/color][color=#666600])^[/color][color=#000000] [/color][color=#666600]<[/color][color=#000000] b [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#666600]([/color][color=#660066]This[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#660066]PerkOffset[/color][color=#666600])^[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] b[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]This[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]asm[/color]
[color=#000000] pop ecx [/color][color=#880000]// Thiscall fix (Useless in this case but better safe than sorry)[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000088]end[/color][color=#666600];[/color]
[color=#000088]function[/color][color=#000000] [/color][color=#660066]IncreaseSkillExp[/color][color=#666600]([/color][color=#000000]f[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Single[/color][color=#666600]):[/color][color=#000000] [/color][color=#660066]Pointer[/color][color=#666600];[/color][color=#000000] stdcall[/color][color=#666600];[/color][color=#000000] [/color][color=#880000]// thiscall[/color]
[color=#000088]var[/color]
[color=#000000] [/color][color=#660066]This[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]PByte[/color][color=#666600];[/color]
[color=#000088]begin[/color]
[color=#000000] [/color][color=#000088]asm[/color]
[color=#000000] push ecx [/color][color=#880000]// Thiscall fix (Useless in this case but better safe than sorry)[/color]
[color=#000000] mov [/color][color=#660066]This[/color][color=#666600],[/color][color=#000000] ecx
[/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#660066]PSingle[/color][color=#666600]([/color][color=#660066]This[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]8[/color][color=#666600])^[/color][color=#000000] [/color][color=#666600]=[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]and[/color][color=#000000] [/color][color=#666600]([/color][color=#660066]CurrentSkillLevel[/color][color=#000000] [/color][color=#666600]<[/color][color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]LastValidedSkill[/color][color=#666600]])[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]PSingle[/color][color=#666600]([/color][color=#660066]This[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]4[/color][color=#666600])^[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]PSingle[/color][color=#666600]([/color][color=#660066]This[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]8[/color][color=#666600])^[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]PSingle[/color][color=#666600]([/color][color=#660066]This[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]4[/color][color=#666600])^[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#660066]CalculateExpForNextLevel[/color][color=#666600]([/color][color=#660066]CurrentSkillLevel[/color][color=#666600]+[/color][color=#006666]1[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]SLParam1[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]SLParam2[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]PSingle[/color][color=#666600]([/color][color=#660066]This[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]4[/color][color=#666600])^[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]PSingle[/color][color=#666600]([/color][color=#660066]This[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]4[/color][color=#666600])^[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] f [/color][color=#666600]*[/color][color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]LastValidedSkill[/color][color=#666600]];[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]This[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]asm[/color]
[color=#000000] pop ecx [/color][color=#880000]// Thiscall fix (Useless in this case but better safe than sorry)[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000088]end[/color][color=#666600];[/color]
[color=#000088]function[/color][color=#000000] [/color][color=#660066]GetSkill[/color][color=#666600]([/color][color=#000000]i[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Longword[/color][color=#666600]):[/color][color=#000000] [/color][color=#660066]Longword[/color][color=#666600];[/color][color=#000000] cdecl[/color][color=#666600];[/color]
[color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] i [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]6[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]LastValidedSkill[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Result[/color][color=#666600];[/color]
[color=#000088]end[/color][color=#666600];[/color]
[color=#000088]function[/color][color=#000000] [/color][color=#660066]IsValidSkill[/color][color=#666600]([/color][color=#660066]Skill[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Longword[/color][color=#666600]):[/color][color=#000000] [/color][color=#660066]Longbool[/color][color=#666600];[/color][color=#000000] cdecl[/color][color=#666600];[/color]
[color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#666600]([/color][color=#660066]Skill[/color][color=#000000] [/color][color=#666600]>=[/color][color=#000000] [/color][color=#006666]6[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]and[/color][color=#000000] [/color][color=#666600]([/color][color=#660066]Skill[/color][color=#000000] [/color][color=#666600]<[/color][color=#000000] [/color][color=#006666]24[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]LastValidedSkill[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Skill[/color]
[color=#000088]end[/color][color=#666600];[/color]
[color=#000000]procedure [/color][color=#660066]SkillCapPatch[/color][color=#666600];[/color]
[color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]CurrentSkillCap[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]LastValidedSkill[/color][color=#666600]];[/color]
[color=#000000] [/color][color=#000088]asm[/color]
[color=#000000] fld [/color][color=#660066]CurrentSkillCap[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000088]end[/color][color=#666600];[/color]
[color=#000000]procedure [/color][color=#660066]SkillCapPatch2[/color][color=#666600];[/color]
[color=#000088]asm[/color]
[color=#000000] mov eax[/color][color=#666600],[/color][color=#000000] [/color][color=#666600][[/color][color=#000000]ebp[/color][color=#666600]-[/color][color=#006666]4[/color][color=#666600]][/color]
[color=#000000] mov [/color][color=#660066]CurrentSkillLevel[/color][color=#666600],[/color][color=#000000] eax
jmp [/color][color=#660066]SkillCapPatch[/color]
[color=#000088]end[/color][color=#666600];[/color]
[color=#000088]function[/color][color=#000000] [/color][color=#660066]InitOptions[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Boolean[/color][color=#666600];[/color]
[color=#000088]const[/color]
[color=#000000] INI_ERROR [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]'Error: Skyrim_[/color][color=red][color=#008800]Elys[/color][/color][color=#008800]_Uncapper.ini'[/color][color=#666600];[/color]
[color=#000000] IS_INVALID_VALUE [/color][color=#666600]=[/color][color=#000000] [/color][color=#008800]' is not a valid value for '[/color][color=#666600];[/color]
[color=#000000] MAX_LEVEL [/color][color=#666600]=[/color][color=#000000] [/color][color=#006666]10000[/color][color=#666600];[/color]
[color=#000088]var[/color]
[color=#000000] [/color][color=#660066]Filename[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]String[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]IniFile[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]TMemIniFile[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Strings[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]TStringList[/color][color=#666600];[/color]
[color=#000000] i[/color][color=#666600],[/color][color=#000000] j[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Integer[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Level[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Integer[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Perks[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Integer[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]PerksPerLevelIndex[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Integer[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]function[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#000088]const[/color][color=#000000] name[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]String[/color][color=#666600];[/color][color=#000000] [/color][color=#660066]Default[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Integer[/color][color=#666600]):[/color][color=#000000] [/color][color=#660066]Integer[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]var[/color]
[color=#000000] idx[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Integer[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]begin[/color]
[color=#000000] idx [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]IndexOfName[/color][color=#666600]([/color][color=#660066]Name[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] idx [/color][color=#666600]<[/color][color=#000000] [/color][color=#006666]0[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Default[/color]
[color=#000000] [/color][color=#000088]else[/color][color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#660066]TryStrToInt[/color][color=#666600]([/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]ValueFromIndex[/color][color=#666600][[/color][color=#000000]idx[/color][color=#666600]],[/color][color=#000000] [/color][color=#660066]Result[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]and[/color][color=#000000] [/color][color=#666600]([/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]>=[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]and[/color][color=#000000] [/color][color=#666600]([/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]<=[/color][color=#000000] MAX_LEVEL[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Default[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]MessageBox[/color][color=#666600]([/color][color=#006666]0[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]PChar[/color][color=#666600]([/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]ValueFromIndex[/color][color=#666600][[/color][color=#000000]idx[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] IS_INVALID_VALUE [/color][color=#666600]+[/color][color=#000000] [/color][color=#660066]Name[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#008800]'.'[/color][color=#666600]),[/color][color=#000000] INI_ERROR[/color][color=#666600],[/color][color=#000000] MB_ICONERROR[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]function[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#000088]const[/color][color=#000000] name[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]String[/color][color=#666600];[/color][color=#000000] [/color][color=#660066]Default[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Single[/color][color=#666600]):[/color][color=#000000] [/color][color=#660066]Single[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]var[/color]
[color=#000000] idx[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Integer[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]begin[/color]
[color=#000000] idx [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]IndexOfName[/color][color=#666600]([/color][color=#660066]Name[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] idx [/color][color=#666600]<[/color][color=#000000] [/color][color=#006666]0[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Default[/color]
[color=#000000] [/color][color=#000088]else[/color][color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#660066]TryStrToFloat[/color][color=#666600]([/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]ValueFromIndex[/color][color=#666600][[/color][color=#000000]idx[/color][color=#666600]],[/color][color=#000000] [/color][color=#660066]Result[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]and[/color][color=#000000] [/color][color=#666600]([/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]>=[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]and[/color][color=#000000] [/color][color=#666600]([/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]<=[/color][color=#000000] MAX_LEVEL[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Default[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]MessageBox[/color][color=#666600]([/color][color=#006666]0[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]PChar[/color][color=#666600]([/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]ValueFromIndex[/color][color=#666600][[/color][color=#000000]idx[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] IS_INVALID_VALUE [/color][color=#666600]+[/color][color=#000000] [/color][color=#660066]Name[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#008800]'.'[/color][color=#666600]),[/color][color=#000000] INI_ERROR[/color][color=#666600],[/color][color=#000000] MB_ICONERROR[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]function[/color][color=#000000] [/color][color=#660066]SafeReadBool[/color][color=#666600]([/color][color=#000088]const[/color][color=#000000] name[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]String[/color][color=#666600];[/color][color=#000000] [/color][color=#660066]Default[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Boolean[/color][color=#666600]):[/color][color=#000000] [/color][color=#660066]Boolean[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]var[/color]
[color=#000000] idx[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]Integer[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]begin[/color]
[color=#000000] idx [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]IndexOfName[/color][color=#666600]([/color][color=#660066]Name[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] idx [/color][color=#666600]<[/color][color=#000000] [/color][color=#006666]0[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Default[/color]
[color=#000000] [/color][color=#000088]else[/color][color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#000088]not[/color][color=#000000] [/color][color=#660066]TryStrToBool[/color][color=#666600]([/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]ValueFromIndex[/color][color=#666600][[/color][color=#000000]idx[/color][color=#666600]],[/color][color=#000000] [/color][color=#660066]Result[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Default[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]MessageBox[/color][color=#666600]([/color][color=#006666]0[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]PChar[/color][color=#666600]([/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]ValueFromIndex[/color][color=#666600][[/color][color=#000000]idx[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] IS_INVALID_VALUE [/color][color=#666600]+[/color][color=#000000] [/color][color=#660066]Name[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#008800]'.'[/color][color=#666600]),[/color][color=#000000] INI_ERROR[/color][color=#666600],[/color][color=#000000] MB_ICONERROR[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#000088]True[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]SetLength[/color][color=#666600]([/color][color=#660066]Filename[/color][color=#666600],[/color][color=#000000] MAX_PATH [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]GetModuleFileNameW[/color][color=#666600]([/color][color=#660066]HInstance[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]@Filename[/color][color=#666600][[/color][color=#006666]1[/color][color=#666600]],[/color][color=#000000] MAX_PATH [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]IniFile[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]TMemIniFile[/color][color=#666600].[/color][color=#660066]Create[/color][color=#666600]([/color][color=#660066]ExtractFilePath[/color][color=#666600]([/color][color=#660066]Filename[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#008800]'SKSE_[/color][color=red][color=#008800]Elys[/color][/color][color=#008800]_Uncapper.ini'[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]PerksPerLevelIndex[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]try[/color]
[color=#000000] [/color][color=#660066]Strings[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]TStringList[/color][color=#666600].[/color][color=#660066]Create[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]try[/color]
[color=#000000] [/color][color=#660066]FormatSettings[/color][color=#666600].[/color][color=#660066]DecimalSeparator[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#008800]'.'[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]SetLength[/color][color=#666600]([/color][color=#660066]TrueBoolStrs[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]2[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]TrueBoolStrs[/color][color=#666600][[/color][color=#006666]0[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#008800]'True'[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]TrueBoolStrs[/color][color=#666600][[/color][color=#006666]1[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#008800]'1'[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]SetLength[/color][color=#666600]([/color][color=#660066]FalseBoolStrs[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]2[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]FalseBoolStrs[/color][color=#666600][[/color][color=#006666]0[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#008800]'False'[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]FalseBoolStrs[/color][color=#666600][[/color][color=#006666]1[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#008800]'0'[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]IniFile[/color][color=#666600].[/color][color=#660066]ReadSectionValues[/color][color=#666600]([/color][color=#008800]'General'[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]Strings[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]Enabled[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadBool[/color][color=#666600]([/color][color=#008800]'bEnabled'[/color][color=#666600],[/color][color=#000000] [/color][color=#000088]False[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillEffectFormulasCap[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iSkillEffectFormulasCap'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]Clear[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]IniFile[/color][color=#666600].[/color][color=#660066]ReadSectionValues[/color][color=#666600]([/color][color=#008800]'SkillCaps'[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]Strings[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]AlterationID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iAlteration'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]ArcheryID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iArchery'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]AlchemyID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iAlchemy'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]ConjurationID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iConjuration'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]BlockID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iBlock'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]LightArmorID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iLightArmor'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]DestructionID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iDestruction'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]HeavyArmorID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iHeavyArmor'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]LockpickingID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iLockpicking'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]EnchantingID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iEnchanting'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]OneHandedID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iOneHanded'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]PickpocketID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iPickpocket'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]IllusionID[/color][color=#666600]]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iIllusion'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]SmithingID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iSmithing'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]SneakID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iSneak'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]RestorationID[/color][color=#666600]]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iRestoration'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]TwoHandedID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iTwoHanded'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillCaps[/color][color=#666600][[/color][color=#660066]SpeechID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadInteger[/color][color=#666600]([/color][color=#008800]'iSpeech'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]100[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]Clear[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]IniFile[/color][color=#666600].[/color][color=#660066]ReadSectionValues[/color][color=#666600]([/color][color=#008800]'SkillExpGainMults'[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]Strings[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]AlterationID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fAlteration'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]ArcheryID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fArchery'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]AlchemyID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fAlchemy'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]ConjurationID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fConjuration'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]BlockID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fBlock'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]LightArmorID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fLightArmor'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]DestructionID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fDestruction'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]HeavyArmorID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fHeavyArmor'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]LockpickingID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fLockpicking'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]EnchantingID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fEnchanting'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]OneHandedID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fOneHanded'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]PickpocketID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fPickpocket'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]IllusionID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fIllusion'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]SmithingID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fSmithing'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]SneakID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fSneak'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]RestorationID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fRestoration'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]TwoHandedID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fTwoHanded'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SkillMults[/color][color=#666600][[/color][color=#660066]SpeechID[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]SafeReadFloat[/color][color=#666600]([/color][color=#008800]'fSpeech'[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]Clear[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]IniFile[/color][color=#666600].[/color][color=#660066]ReadSectionValues[/color][color=#666600]([/color][color=#008800]'PerksPerLevelAndAbove'[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]Strings[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]SetLength[/color][color=#666600]([/color][color=#660066]PerksPerLevel[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]Count[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]For[/color][color=#000000] i [/color][color=#666600]:=[/color][color=#000000] [/color][color=#006666]0[/color][color=#000000] to [/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]Count[/color][color=#000000] [/color][color=#666600]-[/color][color=#000000] [/color][color=#006666]1[/color][color=#000000] [/color][color=#000088]do[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#660066]TryStrToInt[/color][color=#666600]([/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]Names[/color][color=#666600][[/color][color=#000000]i[/color][color=#666600]],[/color][color=#000000] [/color][color=#660066]Level[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]and[/color][color=#000000] [/color][color=#666600]([/color][color=#660066]Level[/color][color=#000000] [/color][color=#666600]>[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]and[/color][color=#000000] [/color][color=#666600]([/color][color=#660066]Level[/color][color=#000000] [/color][color=#666600]<=[/color][color=#000000] MAX_LEVEL[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#660066]TryStrToInt[/color][color=#666600]([/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]ValueFromIndex[/color][color=#666600][[/color][color=#000000]i[/color][color=#666600]],[/color][color=#000000] [/color][color=#660066]Perks[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]and[/color][color=#000000] [/color][color=#666600]([/color][color=#660066]Perks[/color][color=#000000] [/color][color=#666600]>=[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]and[/color][color=#000000] [/color][color=#666600]([/color][color=#660066]Perks[/color][color=#000000] [/color][color=#666600]<=[/color][color=#000000] [/color][color=#006666]255[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#660066]PerksPerLevelIndex[/color][color=#666600]].[/color][color=#660066]Level[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Level[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#660066]PerksPerLevelIndex[/color][color=#666600]].[/color][color=#660066]Perks[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Perks[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Inc[/color][color=#666600]([/color][color=#660066]PerksPerLevelIndex[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#000088]end[/color]
[color=#000000] [/color][color=#000088]else[/color]
[color=#000000] [/color][color=#660066]MessageBox[/color][color=#666600]([/color][color=#006666]0[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]PChar[/color][color=#666600]([/color][color=#660066]Strings[/color][color=#666600][[/color][color=#000000]i[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#008800]' is not a correct Perks value for [PerksPerLevelAndAbove].'[/color][color=#666600]),[/color][color=#000000] INI_ERROR[/color][color=#666600],[/color][color=#000000] MB_ICONERROR[/color][color=#666600])[/color]
[color=#000000] [/color][color=#000088]else[/color]
[color=#000000] [/color][color=#660066]MessageBox[/color][color=#666600]([/color][color=#006666]0[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]PChar[/color][color=#666600]([/color][color=#660066]Strings[/color][color=#666600][[/color][color=#000000]i[/color][color=#666600]][/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#008800]' is not a correct Level value for [PerksPerLevelAndAbove].'[/color][color=#666600]),[/color][color=#000000] INI_ERROR[/color][color=#666600],[/color][color=#000000] MB_ICONERROR[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#000088]finally[/color]
[color=#000000] [/color][color=#660066]Strings[/color][color=#666600].[/color][color=#660066]Free[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]SetLength[/color][color=#666600]([/color][color=#660066]PerksPerLevel[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]PerksPerLevelIndex[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#000088]for[/color][color=#000000] j [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]High[/color][color=#666600]([/color][color=#660066]PerksPerLevel[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]-[/color][color=#000000] [/color][color=#006666]1[/color][color=#000000] downto [/color][color=#006666]1[/color][color=#000000] [/color][color=#000088]do[/color]
[color=#000000] [/color][color=#000088]for[/color][color=#000000] i [/color][color=#666600]:=[/color][color=#000000] [/color][color=#006666]0[/color][color=#000000] to j [/color][color=#000088]do[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#000000]i[/color][color=#666600]].[/color][color=#660066]Level[/color][color=#000000] [/color][color=#666600]>[/color][color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#000000]i [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]].[/color][color=#660066]Level[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]Level[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#000000]i[/color][color=#666600]].[/color][color=#660066]Level[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Perks[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#000000]i[/color][color=#666600]].[/color][color=#660066]Perks[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#000000]i[/color][color=#666600]].[/color][color=#660066]Level[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#000000]i [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]].[/color][color=#660066]Level[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#000000]i[/color][color=#666600]].[/color][color=#660066]Perks[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#000000]i [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]].[/color][color=#660066]Perks[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#000000]i [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]].[/color][color=#660066]Level[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Level[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]PerksPerLevel[/color][color=#666600][[/color][color=#000000]i [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]].[/color][color=#660066]Perks[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Perks[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]except[/color]
[color=#000000] [/color][color=#660066]MessageBox[/color][color=#666600]([/color][color=#006666]0[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'SKSE [/color][color=red][color=#008800]Elys[/color][/color][color=#008800] Uncapper encountered an error while attempting to read SKSE_[/color][color=red][color=#008800]Elys[/color][/color][color=#008800]_Uncapper.ini. The plugin is not enabled'[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'Error'[/color][color=#666600],[/color][color=#000000] MB_ICONERROR[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#000088]False[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]IniFile[/color][color=#666600].[/color][color=#660066]Free[/color][color=#666600];[/color]
[color=#000088]end[/color][color=#666600];[/color]
[color=#660066]Function[/color][color=#000000] [/color][color=#660066]SKSEPlugin_Query[/color][color=#666600]([/color][color=#000088]const[/color][color=#000000] skse[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]SKSEInterface[/color][color=#666600];[/color][color=#000000] [/color][color=#000088]var[/color][color=#000000] [/color][color=#660066]Info[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]PluginInfo[/color][color=#666600]):[/color][color=#000000] [/color][color=#660066]Boolean[/color][color=#666600];[/color][color=#000000] cdecl[/color][color=#666600];[/color]
[color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]Info[/color][color=#666600].[/color][color=#000000]infoVersion [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]PluginInfo[/color][color=#666600].[/color][color=#000000]kInfoVersion[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Info[/color][color=#666600].[/color][color=#000000]name [/color][color=#666600]:=[/color][color=#000000] [/color][color=#008800]'SKSE_[/color][color=red][color=#008800]Elys[/color][/color][color=#008800]_Uncapper'[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Info[/color][color=#666600].[/color][color=#000000]version [/color][color=#666600]:=[/color][color=#000000] PLUGIN_VER[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#000088]False[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] skse[/color][color=#666600].[/color][color=#000000]isEditor [/color][color=#666600]<>[/color][color=#000000] [/color][color=#006666]0[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] skse[/color][color=#666600].[/color][color=#000000]skseVersion [/color][color=#666600]<[/color][color=#000000] SKSE_VER [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]MessageBox[/color][color=#666600]([/color][color=#006666]0[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'SKSE [/color][color=red][color=#008800]Elys[/color][/color][color=#008800] Uncapper requires SKSE Version 1.4.2 or higher.'[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'Error: Plugin not enabled'[/color][color=#666600],[/color][color=#000000] MB_ICONERROR[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] skse[/color][color=#666600].[/color][color=#000000]runtimeVersion [/color][color=#666600]<>[/color][color=#000000] SKYRIM_VER [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]MessageBox[/color][color=#666600]([/color][color=#006666]0[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'SKSE [/color][color=red][color=#008800]Elys[/color][/color][color=#008800] Uncapper only supports Skyrim Version 1.3.10.'[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]'Error: Plugin not enabled'[/color][color=#666600],[/color][color=#000000] MB_ICONERROR[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#000088]True[/color][color=#666600];[/color]
[color=#000088]end[/color][color=#666600];[/color]
[color=#660066]Function[/color][color=#000000] [/color][color=#660066]SKSEPlugin_Load[/color][color=#666600]([/color][color=#000088]const[/color][color=#000000] skse[/color][color=#666600]:[/color][color=#000000] [/color][color=#660066]SKSEInterface[/color][color=#666600]):[/color][color=#000000] [/color][color=#660066]Boolean[/color][color=#666600];[/color][color=#000000] cdecl[/color][color=#666600];[/color]
[color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#000088]False[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]If[/color][color=#000000] [/color][color=#000088]not[/color][color=#000000] [/color][color=#660066]InitOptions[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#000088]not[/color][color=#000000] [/color][color=#660066]Enabled[/color][color=#000000] [/color][color=#000088]then[/color]
[color=#000000] [/color][color=#000088]begin[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#000088]True[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]end[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]GetActorLevel[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Pointer[/color][color=#666600]([/color][color=#000000]$00A512D0[/color][color=#666600]);[/color][color=#000000] [/color][color=#880000]// Don't forget to update the call used with new Player pointer[/color]
[color=#000000] [/color][color=#660066]CalculateExpForNextLevel[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Pointer[/color][color=#666600]([/color][color=#000000]$0088DB20[/color][color=#666600]);[/color]
[color=#000000] sub_650A70 [/color][color=#666600]:=[/color][color=#000000] [/color][color=#660066]Pointer[/color][color=#666600]([/color][color=#000000]$00650A70[/color][color=#666600]);[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#000088]not[/color][color=#000000] [/color][color=#660066]ReplaceE8CallTarget[/color][color=#666600]([/color][color=#660066]PByte[/color][color=#666600]([/color][color=#000000]$0088DCE3[/color][color=#666600]),[/color][color=#000000] [/color][color=#006666]@IsValidSkill[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color][color=#000000] [/color][color=#880000]// IsValidSkill[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#000088]not[/color][color=#000000] [/color][color=#660066]ReplaceE8CallTarget[/color][color=#666600]([/color][color=#660066]PByte[/color][color=#666600]([/color][color=#000000]$0088DA62[/color][color=#666600]),[/color][color=#000000] [/color][color=#006666]@GetSkill[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color][color=#000000] [/color][color=#880000]// GetSKill[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] pSkillCapPatch [/color][color=#666600]:=[/color][color=#000000] [/color][color=#006666]@SkillCapPatch[/color][color=#666600];[/color]
[color=#000000] pSkillCapPatch2 [/color][color=#666600]:=[/color][color=#000000] [/color][color=#006666]@SkillCapPatch2[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#000088]not[/color][color=#000000] [/color][color=#660066]SetFF15Call[/color][color=#666600]([/color][color=#660066]PByte[/color][color=#666600]([/color][color=#006666]@CalculateExpForNextLevel[/color][color=#666600])+[/color][color=#006666]9[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]@pSkillCapPatch[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color][color=#000000] [/color][color=#880000]// Skill Exp Curve Cap[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#000088]not[/color][color=#000000] [/color][color=#660066]SetFF15Call[/color][color=#666600]([/color][color=#660066]Pointer[/color][color=#666600]([/color][color=#000000]$0088DE80[/color][color=#666600]),[/color][color=#000000] [/color][color=#006666]@pSkillCapPatch[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color][color=#000000] [/color][color=#880000]// Skill Cap[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#000088]not[/color][color=#000000] [/color][color=#660066]SetFF15Call[/color][color=#666600]([/color][color=#660066]Pointer[/color][color=#666600]([/color][color=#000000]$0088DD27[/color][color=#666600]),[/color][color=#000000] [/color][color=#006666]@pSkillCapPatch2[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color][color=#000000] [/color][color=#880000]// Skill Cap 2[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#000088]not[/color][color=#000000] [/color][color=#660066]ReplaceE8CallTarget[/color][color=#666600]([/color][color=#660066]PByte[/color][color=#666600]([/color][color=#000000]$0088DD6A[/color][color=#666600]),[/color][color=#000000] [/color][color=#006666]@hook_650A70[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color][color=#000000] [/color][color=#880000]// sub_650A70 hook;[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#000088]not[/color][color=#000000] [/color][color=#660066]ReplaceE8CallTarget[/color][color=#666600]([/color][color=#660066]PByte[/color][color=#666600]([/color][color=#000000]$009EA32D[/color][color=#666600]),[/color][color=#000000] [/color][color=#006666]@IncreasePerkPool[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color][color=#000000] [/color][color=#880000]// Perk Management. Dont forget update offset inside function[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#000088]not[/color][color=#000000] [/color][color=#660066]ReplaceE8CallTarget[/color][color=#666600]([/color][color=#660066]PByte[/color][color=#666600]([/color][color=#000000]$0088DE74[/color][color=#666600]),[/color][color=#000000] [/color][color=#006666]@IncreaseSkillExp[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color][color=#000000] [/color][color=#880000]// Skill Exp Mult[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#000088]not[/color][color=#000000] [/color][color=#660066]Overwrite[/color][color=#666600]([/color][color=#660066]Pointer[/color][color=#666600]([/color][color=#000000]$006537A8[/color][color=#666600]),[/color][color=#000000] [/color][color=#006666]@SkillEffectFormulasCap[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]4[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color][color=#000000] [/color][color=#880000]// Uncap formulas[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#000088]if[/color][color=#000000] [/color][color=#000088]not[/color][color=#000000] [/color][color=#660066]Overwrite[/color][color=#666600]([/color][color=#660066]Pointer[/color][color=#666600]([/color][color=#000000]$007D2024[/color][color=#666600]),[/color][color=#000000] [/color][color=#006666]@FixSneakOver100CheckCode[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]6[/color][color=#666600])[/color][color=#000000] [/color][color=#000088]then[/color][color=#000000] [/color][color=#880000]// Sneak Formula Cap Fix[/color]
[color=#000000] [/color][color=#660066]Exit[/color][color=#666600];[/color]
[color=#000000] [/color][color=#660066]Result[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] [/color][color=#000088]True[/color][color=#666600];[/color]
[color=#000088]end[/color][color=#666600];[/color]
[color=#000000]exports
[/color][color=#660066]SKSEPlugin_Query[/color][color=#666600],[/color][color=#000000] [/color][color=#660066]SKSEPlugin_Load[/color][color=#666600];[/color]
[color=#000088]begin [/color]
[color=#000088]end[/color][color=#666600].[/color]