<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="42">
  <CheatEntries>
    <CheatEntry>
      <ID>46</ID>
      <Description>"Enable Mono"</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
LaunchMonoDataCollector()
{$asm}
 
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>35</ID>
          <Description>"don't spend money"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>define(address,Wallet:Withdraw+1e)
define(bytes,2B C6 89 47 28)

[ENABLE]
assert(address,bytes)
address:
  nop
  nop

[DISABLE]

address:
  db bytes
  // sub eax,esi

dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Wallet:Withdraw+1e

Wallet:Withdraw+5: 57                             - push rdi
Wallet:Withdraw+6: 48 8B F9                       - mov rdi,rcx
Wallet:Withdraw+9: 48 8B F2                       - mov rsi,rdx
Wallet:Withdraw+c: 48 63 47 28                    - movsxd  rax,dword ptr [rdi+28]
Wallet:Withdraw+10: 2B C6                          - sub eax,esi
Wallet:Withdraw+12: 85 C0                          - test eax,eax
Wallet:Withdraw+14: 7D 04                          - jnl Wallet:Withdraw+1a
Wallet:Withdraw+16: 33 C0                          - xor eax,eax
Wallet:Withdraw+18: EB 29                          - jmp Wallet:Withdraw+43
Wallet:Withdraw+1a: 48 63 47 28                    - movsxd  rax,dword ptr [rdi+28]
// ---------- INJECTING HERE ----------
Wallet:Withdraw+1e: 2B C6                          - sub eax,esi
// ---------- DONE INJECTING  ----------
Wallet:Withdraw+20: 89 47 28                       - mov [rdi+28],eax
Wallet:Withdraw+23: 48 8B CF                       - mov rcx,rdi
Wallet:Withdraw+26: 48 8B D6                       - mov rdx,rsi
Wallet:Withdraw+29: 48 83 EC 20                    - sub rsp,20
Wallet:Withdraw+2d: 49 BB 40 A3 72 0A 00 00 00 00  - mov r11,Wallet:AnnounceWithdrawEvent
Wallet:Withdraw+37: 41 FF D3                       - call r11
Wallet:Withdraw+3a: 48 83 C4 20                    - add rsp,20
Wallet:Withdraw+3e: B8 01 00 00 00                 - mov eax,00000001
Wallet:Withdraw+43: 48 8D 65 F0                    - lea rsp,[rbp-10]
Wallet:Withdraw+47: 5F                             - pop rdi
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>51</ID>
          <Description>"no Cooldown for spells"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>// since the address is not accepted by CE when using it for a full injection
// with CE7.4, there are two ways: exchange the monoscript.lua with a version
// patched by DarkByte or using THIS way, shown to me by kaizerv :)

[ENABLE]
alloc(newmem,$1000,Player+SkillState:StartCooldownTimer)

label(code)

newmem:
  cmp rcx,0
  je code
  mov rax,[rcx+40]
  cmp rax,0
  je code
  mov [rax+38],5
code:
  ret

Player+SkillState:StartCooldownTimer:
jmp newmem

[DISABLE]

Player+SkillState:StartCooldownTimer:
  db 55 48 8B EC 57

dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Player+SkillState:StartCooldownTimer

4EEFA5FC: 01 50 00              - add [rax+00],edx
4EEFA5FF: 00 00                 - add [rax],al
4EEFA601: 00 E8                 - add al,ch
4EEFA603: F9                    - stc 
4EEFA604: 59                    - pop rcx
4EEFA605: 59                    - pop rcx
4EEFA606: B9 04 50 3D 9F        - mov ecx,9F3D5004
4EEFA60B: 33 00                 - xor eax,[rax]
4EEFA60D: 00 00                 - add [rax],al
4EEFA60F: 00                    - db 00 
// ---------- INJECTING HERE ----------
Player+SkillState:StartCooldownTimer: 55                    - push rbp
// ---------- DONE INJECTING  ----------
Player+SkillState:StartCooldownTimer+1: 48 8B EC              - mov rbp,rsp
Player+SkillState:StartCooldownTimer+4: 57                    - push rdi
Player+SkillState:StartCooldownTimer+5: 41 54                 - push r12
Player+SkillState:StartCooldownTimer+7: 48 83 EC 30           - sub rsp,30
Player+SkillState:StartCooldownTimer+b: 48 8B F9              - mov rdi,rcx
Player+SkillState:StartCooldownTimer+e: F3 0F 11 4D D8        - movss [rbp-28],xmm1
Player+SkillState:StartCooldownTimer+13: 4C 89 45 D0           - mov [rbp-30],r8
Player+SkillState:StartCooldownTimer+17: 0F B6 87 9C 00 00 00  - movzx eax,byte ptr [rdi+0000009C]
Player+SkillState:StartCooldownTimer+1e: 85 C0                 - test eax,eax
Player+SkillState:StartCooldownTimer+20: 74 16                 - je Player+SkillState:StartCooldownTimer+38
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>25</ID>
          <Description>"Get Address of Player"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
LaunchMonoDataCollector()
{$asm}

alloc(players,4)
// label(players)

players:
readmem(GameController:Update+14,4)

registersymbol(players)
[DISABLE]
dealloc(players)
unregistersymbol(players)

//code from here till the end of the code will be used to disable the cheat
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>26</ID>
              <Description>"List of Players (Player[])"</Description>
              <ShowAsHex>1</ShowAsHex>
              <ShowAsSigned>0</ShowAsSigned>
              <GroupHeader>1</GroupHeader>
              <Address>players</Address>
              <Offsets>
                <Offset>0</Offset>
                <Offset>0</Offset>
              </Offsets>
              <CheatEntries>
                <CheatEntry>
                  <ID>27</ID>
                  <Description>"Player 1"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <GroupHeader>1</GroupHeader>
                  <Address>+20</Address>
                  <Offsets>
                    <Offset>0</Offset>
                  </Offsets>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>28</ID>
                      <Description>"Health"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <GroupHeader>1</GroupHeader>
                      <Address>+40</Address>
                      <Offsets>
                        <Offset>0</Offset>
                      </Offsets>
                      <CheatEntries>
                        <CheatEntry>
                          <ID>29</ID>
                          <Description>"Invulnerable (0=off, 1=on)"</Description>
                          <DropDownList ReadOnly="1" DescriptionOnly="1" DisplayValueAsItem="1">0:Off
1:On
</DropDownList>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>0000FF</Color>
                          <VariableType>Byte</VariableType>
                          <Address>+1c4</Address>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>30</ID>
                          <Description>"HealthStat"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <GroupHeader>1</GroupHeader>
                          <Address>+c8</Address>
                          <Offsets>
                            <Offset>0</Offset>
                          </Offsets>
                          <CheatEntries>
                            <CheatEntry>
                              <ID>31</ID>
                              <Description>"Current Health"</Description>
                              <ShowAsSigned>0</ShowAsSigned>
                              <Color>0000FF</Color>
                              <VariableType>Float</VariableType>
                              <Address>+28</Address>
                            </CheatEntry>
                            <CheatEntry>
                              <ID>32</ID>
                              <Description>"MaxHealth"</Description>
                              <ShowAsSigned>0</ShowAsSigned>
                              <VariableType>Float</VariableType>
                              <Address>+2c</Address>
                            </CheatEntry>
                          </CheatEntries>
                        </CheatEntry>
                      </CheatEntries>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>54</ID>
      <Description>"Wallet"</Description>
      <ShowAsSigned>0</ShowAsSigned>
      <GroupHeader>1</GroupHeader>
      <Address>"mono.dll"+00296BC8</Address>
      <Offsets>
        <Offset>0</Offset>
        <Offset>B8</Offset>
        <Offset>240</Offset>
        <Offset>20</Offset>
      </Offsets>
      <CheatEntries>
        <CheatEntry>
          <ID>55</ID>
          <Description>"Gold"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>+28</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>56</ID>
          <Description>"BlueShells"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>-38</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
