<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="42">
  <CheatEntries>
    <CheatEntry>
      <ID>0</ID>
      <Description>"Compact Mode"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
--https://forum.cheatengine.org/viewtopic.php?t=570055
LuaCall(function cycleFullCompact(sender,force) local state = not(compactmenuitem.Caption == 'Compact View Mode'); if force~=nil then state = not force end; compactmenuitem.Caption = state and 'Compact View Mode' or 'Full View Mode'; getMainForm().Splitter1.Visible = state; getMainForm().Panel4.Visible    = state; getMainForm().Panel5.Visible    = state; end; function addCompactMenu() if compactmenualreadyexists then return end; local parent = getMainForm().Menu.Items; compactmenuitem = createMenuItem(parent); parent.add(compactmenuitem); compactmenuitem.Caption = 'Compact View Mode'; compactmenuitem.OnClick = cycleFullCompact; compactmenualreadyexists = 'yes'; end; addCompactMenu(); cycleFullCompact(nil,true))

[DISABLE]
LuaCall(cycleFullCompact(nil,false))
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>1</ID>
      <Description>"Enable / 啟用"</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
--if syntaxcheck then return end;if process==nil then ShowMessage('Process is not selected.')elseif readInteger(process)==0 then ShowMessage('Process cannot be opened.')else if monopipe~=nil and monopipe.ProcessID~=getOpenedProcessID()then monopipe.destroy()monopipe=nil end;if monopipe==nil then LaunchMonoDataCollector()end end;AuthorName='fd01071ec5'TablePostUrl='13431d5d64d03c52b75e48ec4034045a0fcfe966f4e79c54ac9a35e00b5c01aa8fdc2f1dcc8a1fb8ae58ecd967a1'FooterLogoFileName='62ba7dcf16c1b33ce6d141df48a0f09698'AddLicenseLabel=true;LicenseName='9abf9508b3c9ba'LicenseFileName='57f0f0c2aa4b945f19129c'Key53=9875711438865098;Key14=1380;function deco(a)local b,c=Key53,16384+Key14;return a:gsub('%x%x',function(d)local e=b%8589934592;local f=(b-e)/8589934592;local g=f%128;d=tonumber(d,16)local h=(d+(f-g)/128)*(2*g+1)%256;b=e*c+f+d+h;return string.char(h)end)end;AuthorName=deco(AuthorName)FooterLogoFileName=deco(FooterLogoFileName)LicenseName=deco(LicenseName)LicenseFileName=deco(LicenseFileName)TablePostUrl=deco(TablePostUrl)function tableFilePackageLoader(i,j)local k=findTableFile(j)if k then local l=k.getData()if l then local m=readStringLocal(l.memory,l.size)if m then local n,o=pcall(load,m,j)if not n then error(o,2)end;return o(i,j)end end end;error(string.format('Error loading table module: %s : %s',i,j),2)end;function tableFilePackageSearcher(i)local p=''local q={i..'.lua',i..'.init.lua'}local k,j;for r,s in ipairs(q)do k=findTableFile(s)if k then j=s;break else p=p..string.format("\n\tno table file '%s'",s)end end;if k and j then return tableFilePackageLoader,j end;return p end;if not TABLE_LUA_PACKAGE_SEARCHER_LOADED then if RELEASE_MODE then table.insert(package.searchers,2,tableFilePackageSearcher)else table.insert(package.searchers,tableFilePackageSearcher)end;TABLE_LUA_PACKAGE_SEARCHER_LOADED=true end;if not REQUIRE_BYPASS_LOADED then local t=require;function require(i)if REREQUIRE or RerequireList and RerequireList[i]then package.loaded[i]=false end;local n,o=pcall(t,i)if n then return o else local p=o:gsub('\n','\r\n'):gsub('.dllC:\\',".dll'\r\n\tno file 'C:\\")error(p,2)end end;REQUIRE_BYPASS_LOADED=true end;require('OCTLogoFooter');thetick=0;Timer1=createTimer()Timer1.Interval=60000;Timer1.OnTimer=function(a)thetick=thetick+1;if thetick==180 then addOCTFooter(true)end end
if syntaxcheck then
    return
end
mono_activate()

{$asm}
define(CellPhoneControlAddPlayerMoneyProc,"CellPhoneControl:AddPlayerMoney")
define(PayslipControlSetListProc, "PayslipControl:SetList")
define(ReplenishProcessControlFill15MoveNextProc, "ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext")
//ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+259
define(UketsukeCheckOutManagerDoMakeChangeProc, "UketsukeCheckOutManager:DoMakeChange")


registersymbol(CellPhoneControlAddPlayerMoneyProc)
registersymbol(PayslipControlSetListProc)
registersymbol(ReplenishProcessControlFill15MoveNextProc)
registersymbol(UketsukeCheckOutManagerDoMakeChangeProc)

[DISABLE]
{$lua}
if syntaxcheck then return end;if not syntaxcheck then mono_deactivate() end

{$asm}
unregistersymbol(*)
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>3</ID>
          <Description>"Get money 取得持有金錢"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Meowjiro.exe
  Version: 
  Date   : 2022-11-10
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanregion(INJECT_GET_DATA_FROM_CELLPHOLE,CellPhoneControlAddPlayerMoneyProc+73, CellPhoneControlAddPlayerMoneyProc+93,89 48 38 48 8B 45 A8 48 8B 40) // should be unique
alloc(newmem,$1000,INJECT_GET_DATA_FROM_CELLPHOLE)

label(code)
label(return)
label(i_base_cellphone_data_addr)

newmem:
  mov [i_base_cellphone_data_addr], rax
  db EB 3B 54
  db 68 69 73 20 74
  db 61 62 6C 65 20 63 6F 6D 65 73 20 66 72 6F 6D 20 68 74
  db 74 70 73 3A 2F
  db 2F 6F 70 65 6E 63 68 65
  db 61 74 74 61 62 6C 65 73
  db 2E 63 6F 6D
  db 20 2F 20 43 45 20 37 2E 34 2B
code:
  mov [rax+38],ecx
  mov rax,[rbp-58]
  jmp return
align 10 cc
  i_base_cellphone_data_addr:
  dq 0

INJECT_GET_DATA_FROM_CELLPHOLE:
  jmp newmem
  nop 2
return:
registersymbol(INJECT_GET_DATA_FROM_CELLPHOLE)
registersymbol(i_base_cellphone_data_addr)

[DISABLE]

INJECT_GET_DATA_FROM_CELLPHOLE:
  db 89 48 38 48 8B 45 A8

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: CellPhoneControl:AddPlayerMoney+83

CellPhoneControl:AddPlayerMoney+54: E9 31 01 00 00                 - jmp CellPhoneControl:AddPlayerMoney+18a
CellPhoneControl:AddPlayerMoney+59: 48 B8 20 07 A1 97 FD 01 00 00  - mov rax,000001FD97A10720
CellPhoneControl:AddPlayerMoney+63: 83 38 00                       - cmp dword ptr [rax],00
CellPhoneControl:AddPlayerMoney+66: 48 B8 20 07 A1 97 FD 01 00 00  - mov rax,000001FD97A10720
CellPhoneControl:AddPlayerMoney+70: 48 8B 40 10                    - mov rax,[rax+10]
CellPhoneControl:AddPlayerMoney+74: 48 8B D0                       - mov rdx,rax
CellPhoneControl:AddPlayerMoney+77: 83 38 00                       - cmp dword ptr [rax],00
CellPhoneControl:AddPlayerMoney+7a: 48 63 48 38                    - movsxd  rcx,dword ptr [rax+38]
CellPhoneControl:AddPlayerMoney+7e: 03 CE                          - add ecx,esi
CellPhoneControl:AddPlayerMoney+80: 83 3A 00                       - cmp dword ptr [rdx],00
// ---------- INJECTING HERE ----------
CellPhoneControl:AddPlayerMoney+83: 89 48 38                       - mov [rax+38],ecx
// ---------- DONE INJECTING  ----------
CellPhoneControl:AddPlayerMoney+86: 48 8B 45 A8                    - mov rax,[rbp-58]
CellPhoneControl:AddPlayerMoney+8a: 48 8B 40 58                    - mov rax,[rax+58]
CellPhoneControl:AddPlayerMoney+8e: 48 8B D5                       - mov rdx,rbp
CellPhoneControl:AddPlayerMoney+91: 48 83 C2 C8                    - add rdx,-38
CellPhoneControl:AddPlayerMoney+95: 48 8B C8                       - mov rcx,rax
CellPhoneControl:AddPlayerMoney+98: 83 38 00                       - cmp dword ptr [rax],00
CellPhoneControl:AddPlayerMoney+9b: 66 66 90                       - nop 3
CellPhoneControl:AddPlayerMoney+9e: 49 BB 30 58 EE 4C FD 01 00 00  - mov r11,System.Collections.Generic.List`1[T_REF]:GetEnumerator
CellPhoneControl:AddPlayerMoney+a8: 41 FF D3                       - call r11
CellPhoneControl:AddPlayerMoney+ab: E9 5E 00 00 00                 - jmp CellPhoneControl:AddPlayerMoney+10e
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>4</ID>
              <Description>"Active: open cellphone@Home / 啟用方式：於家中打開手機"</Description>
              <Color>8000FF</Color>
              <GroupHeader>1</GroupHeader>
            </CheatEntry>
            <CheatEntry>
              <ID>5</ID>
              <Description>"Money"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>FF8080</Color>
              <VariableType>4 Bytes</VariableType>
              <Address>i_base_cellphone_data_addr</Address>
              <Offsets>
                <Offset>38</Offset>
              </Offsets>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>6</ID>
          <Description>"Pay slip multiplier / 薪資單金額倍率"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Meowjiro.exe
  Version: 
  Date   : 2022-11-10
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanregion(INJECT_SET_PAYSLIP,PayslipControlSetListProc+775,PayslipControlSetListProc+975,41 03 C8 83 3A 00) // should be unique
alloc(newmem,$1000,INJECT_SET_PAYSLIP)

label(code)
label(return)
label(vf_payslip_multi)

newmem:
  cmp r8d, 0
  jle code
  cvtsi2ss xmm15, r8d
  vmovss xmm14, [vf_payslip_multi]
  vmulss xmm15, xmm15, xmm14
  cvtss2si r8d, xmm15

code:
  add ecx,r8d
  cmp dword ptr [rdx],00
  jmp return
align 10 cc
  vf_payslip_multi:
  dd (float)3.33


INJECT_SET_PAYSLIP:
  jmp newmem
  nop
return:
registersymbol(INJECT_SET_PAYSLIP)
registersymbol(vf_payslip_multi)
[DISABLE]

INJECT_SET_PAYSLIP:
  db 41 03 C8 83 3A 00

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: PayslipControl:SetList+875

PayslipControl:SetList+840: 48 8B 00                       - mov rax,[rax]
PayslipControl:SetList+843: FF 90 D8 02 00 00              - call qword ptr [rax+000002D8]
PayslipControl:SetList+849: 4C 8B 85 68 FF FF FF           - mov r8,[rbp-00000098]
PayslipControl:SetList+850: 48 B8 20 07 A1 97 FD 01 00 00  - mov rax,000001FD97A10720
PayslipControl:SetList+85a: 83 38 00                       - cmp dword ptr [rax],00
PayslipControl:SetList+85d: 48 B8 20 07 A1 97 FD 01 00 00  - mov rax,000001FD97A10720
PayslipControl:SetList+867: 48 8B 40 10                    - mov rax,[rax+10]
PayslipControl:SetList+86b: 48 8B D0                       - mov rdx,rax
PayslipControl:SetList+86e: 83 38 00                       - cmp dword ptr [rax],00
PayslipControl:SetList+871: 48 63 48 38                    - movsxd  rcx,dword ptr [rax+38]
// ---------- INJECTING HERE ----------
PayslipControl:SetList+875: 41 03 C8                       - add ecx,r8d
// ---------- DONE INJECTING  ----------
PayslipControl:SetList+878: 83 3A 00                       - cmp dword ptr [rdx],00
PayslipControl:SetList+87b: 89 48 38                       - mov [rax+38],ecx
PayslipControl:SetList+87e: 48 8B 86 A8 00 00 00           - mov rax,[rsi+000000A8]
PayslipControl:SetList+885: 48 89 85 78 FF FF FF           - mov [rbp-00000088],rax
PayslipControl:SetList+88c: 48 B8 20 07 A1 97 FD 01 00 00  - mov rax,000001FD97A10720
PayslipControl:SetList+896: 83 38 00                       - cmp dword ptr [rax],00
PayslipControl:SetList+899: 48 B8 20 07 A1 97 FD 01 00 00  - mov rax,000001FD97A10720
PayslipControl:SetList+8a3: 48 8B 40 10                    - mov rax,[rax+10]
PayslipControl:SetList+8a7: 48 8B C8                       - mov rcx,rax
PayslipControl:SetList+8aa: 83 39 00                       - cmp dword ptr [rcx],00
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>7</ID>
              <Description>"Multiplier / 倍率數"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>Float</VariableType>
              <Address>vf_payslip_multi</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>10</ID>
          <Description>"Replenishment speed / 上架速度加速"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript Async="1">{ Game   : Meowjiro.exe
  Version: 
  Date   : 2022-11-10
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanregion(INJECT_FILL_GOOD_SPEED_MULTI,ReplenishProcessControlFill15MoveNextProc+239,ReplenishProcessControlFill15MoveNextProc+279,F2 0F 58 C1 F2 0F 5A E8 F3 41 0F 11 6F) // should be unique
alloc(newmem,$1000,INJECT_FILL_GOOD_SPEED_MULTI)

label(code)
label(return)
label(vf_fgood_speed_multi)

newmem:
  vmovsd xmm14, [vf_fgood_speed_multi]
  vmulsd xmm1, xmm1, xmm14

code:
  addsd xmm0,xmm1
  cvtsd2ss xmm5,xmm0
  jmp return
align 10 cc
  vf_fgood_speed_multi:
  dq (double)5

INJECT_FILL_GOOD_SPEED_MULTI:
  jmp newmem
  nop 3
return:
registersymbol(INJECT_FILL_GOOD_SPEED_MULTI)
registersymbol(vf_fgood_speed_multi)

[DISABLE]

INJECT_FILL_GOOD_SPEED_MULTI:
  db F2 0F 58 C1 F2 0F 5A E8

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+267

ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+239: 48 8B C8                       - mov rcx,rax
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+23c: 48 8B 55 80                    - mov rdx,[rbp-80]
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+240: 83 38 00                       - cmp dword ptr [rax],00
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+243: 66 66 90                       - nop 3
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+246: 49 BB 00 72 59 9D D7 01 00 00  - mov r11,UnityEngine.SpriteRenderer:set_size
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+250: 41 FF D3                       - call r11
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+253: F3 41 0F 10 47 34              - movss xmm0,[r15+34]
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+259: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+25d: F3 41 0F 10 4F 38              - movss xmm1,[r15+38]
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+263: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
// ---------- INJECTING HERE ----------
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+267: F2 0F 58 C1                    - addsd xmm0,xmm1
// ---------- DONE INJECTING  ----------
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+26b: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+26f: F3 41 0F 11 6F 34              - movss [r15+34],xmm5
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+275: 48 63 46 24                    - movsxd  rax,dword ptr [rsi+24]
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+279: 83 F8 03                       - cmp eax,03
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+27c: 0F 85 FE 00 00 00              - jne ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+380
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+282: F3 41 0F 10 47 34              - movss xmm0,[r15+34]
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+288: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+28c: F3 0F 10 0D 4C 05 00 00        - movss xmm1,[ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+7e0]
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+294: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
ReplenishProcessControl+&lt;Fill&gt;d__15:MoveNext+298: 66 0F 2F C8                    - comisd xmm1,xmm0
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>11</ID>
              <Description>"Multiplier"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>Double</VariableType>
              <Address>vf_fgood_speed_multi</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>12</ID>
          <Description>"Fast change made on checkout / 快速找零"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Meowjiro.exe
  Version: 
  Date   : 2022-11-10
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanregion(INJECT_CHECKOUT_PROC,UketsukeCheckOutManagerDoMakeChangeProc+34,UketsukeCheckOutManagerDoMakeChangeProc+54,41 89 87 30 01 00 00 EB) // should be unique
alloc(newmem,$1000,INJECT_CHECKOUT_PROC)

label(code)
label(return)
label(i_base_checkout_addr)
label(is_fastchange_enabled)

newmem:
  mov [i_base_checkout_addr], r15

  cmp dword ptr [is_fastchange_enabled], 1
  jne code
  push r14
  push r13
  //push rax
  push rdx
  mov r13d, [r15+0000012C]
  mov r14d, [r15+00000124]
  sub r13d, r14d
  mov eax, r13d

  pop rdx
  //pop rax
  pop r13
  pop r14

code:
  mov [r15+00000130],eax
  jmp return
align 10 cc
  i_base_checkout_addr:
  dq 0
  is_fastchange_enabled:
  dd 1

INJECT_CHECKOUT_PROC:
  jmp newmem
  nop 2
return:
registersymbol(INJECT_CHECKOUT_PROC)
registersymbol(i_base_checkout_addr)
registersymbol(is_fastchange_enabled)
[DISABLE]

INJECT_CHECKOUT_PROC:
  db 41 89 87 30 01 00 00

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: UketsukeCheckOutManager:DoMakeChange+44

UketsukeCheckOutManager:DoMakeChange+16: 4C 89 45 E0                    - mov [rbp-20],r8
UketsukeCheckOutManager:DoMakeChange+1a: 49 8B 8F E0 00 00 00           - mov rcx,[r15+000000E0]
UketsukeCheckOutManager:DoMakeChange+21: 48 8D 64 24 00                 - lea rsp,[rsp+00]
UketsukeCheckOutManager:DoMakeChange+26: 49 BB 00 F5 5F 9D D7 01 00 00  - mov r11,AudioSFXControl:PlayAudio
UketsukeCheckOutManager:DoMakeChange+30: 41 FF D3                       - call r11
UketsukeCheckOutManager:DoMakeChange+33: 0F B6 45 E0                    - movzx eax,byte ptr [rbp-20]
UketsukeCheckOutManager:DoMakeChange+37: 85 C0                          - test eax,eax
UketsukeCheckOutManager:DoMakeChange+39: 74 12                          - je UketsukeCheckOutManager:DoMakeChange+4d
UketsukeCheckOutManager:DoMakeChange+3b: 49 63 87 30 01 00 00           - movsxd  rax,dword ptr [r15+00000130]
UketsukeCheckOutManager:DoMakeChange+42: 03 C7                          - add eax,edi
// ---------- INJECTING HERE ----------
UketsukeCheckOutManager:DoMakeChange+44: 41 89 87 30 01 00 00           - mov [r15+00000130],eax
// ---------- DONE INJECTING  ----------
UketsukeCheckOutManager:DoMakeChange+4b: EB 10                          - jmp UketsukeCheckOutManager:DoMakeChange+5d
UketsukeCheckOutManager:DoMakeChange+4d: 49 63 87 30 01 00 00           - movsxd  rax,dword ptr [r15+00000130]
UketsukeCheckOutManager:DoMakeChange+54: 2B C7                          - sub eax,edi
UketsukeCheckOutManager:DoMakeChange+56: 41 89 87 30 01 00 00           - mov [r15+00000130],eax
UketsukeCheckOutManager:DoMakeChange+5d: 49 8B 87 80 00 00 00           - mov rax,[r15+00000080]
UketsukeCheckOutManager:DoMakeChange+64: 49 63 97 30 01 00 00           - movsxd  rdx,dword ptr [r15+00000130]
UketsukeCheckOutManager:DoMakeChange+6b: 48 8B C8                       - mov rcx,rax
UketsukeCheckOutManager:DoMakeChange+6e: 83 38 00                       - cmp dword ptr [rax],00
UketsukeCheckOutManager:DoMakeChange+71: 48 8D 64 24 00                 - lea rsp,[rsp+00]
UketsukeCheckOutManager:DoMakeChange+76: 49 BB 90 DA 46 A0 D7 01 00 00  - mov r11,CashierMonitorControl:SetMadeChangeValue
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>19</ID>
              <Description>"Usage: receive all cash, just pay 1 dollar change / 收完錢後，如需找零，找1元即可"</Description>
              <Color>8000FF</Color>
              <GroupHeader>1</GroupHeader>
            </CheatEntry>
            <CheatEntry>
              <ID>20</ID>
              <Description>"Fast change enabled? / 啟用快速找零?"</Description>
              <DropDownList DisplayValueAsItem="1">0:No
1:Yes
</DropDownList>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>4 Bytes</VariableType>
              <Address>is_fastchange_enabled</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>18</ID>
              <Description>"+Info"</Description>
              <Options moHideChildren="1"/>
              <GroupHeader>1</GroupHeader>
              <CheatEntries>
                <CheatEntry>
                  <ID>13</ID>
                  <Description>"TotalPriceOfAllProducts"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>i_base_checkout_addr</Address>
                  <Offsets>
                    <Offset>124</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>14</ID>
                  <Description>"CustomerPaidTotal"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>i_base_checkout_addr</Address>
                  <Offsets>
                    <Offset>128</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>15</ID>
                  <Description>"RecevicedTotal"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>i_base_checkout_addr</Address>
                  <Offsets>
                    <Offset>12C</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>16</ID>
                  <Description>"MadeChange"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>i_base_checkout_addr</Address>
                  <Offsets>
                    <Offset>130</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>17</ID>
                  <Description>"ScanProductPrice"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>i_base_checkout_addr</Address>
                  <Offsets>
                    <Offset>134</Offset>
                  </Offsets>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>8</ID>
      <Description>"Meowjiro /  https://opencheattables.com  /  CE 7.4+"</Description>
      <Color>400080</Color>
      <GroupHeader>1</GroupHeader>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
  <Comments>UketsukeCheckOutManager:DoMakeChange+44 
</Comments>
  <LuaScript>--[[
Redefine mono search with special char like + or &lt;, &gt;
Source: mece @ https://opencheattables.org/viewtopic.php?f=20&amp;t=613
]]
--------------------------------------------------------------------------------
function init_DotNetInfo()
  -- I didn't found a better way to access "dotnetinfo.lua" local functions
  miDotNetInfoClick(getMainForm()) -- opens ".Net Info" form
  df.Hide() -- hides just opened ".Net Info" form
end
--------------------------------------------------------------------------------
function mono_findClassEx(namespace, classname)
  if namespace==nil then
    print("[mono_findClassEx]: Invalid parameters!" .. namespace .. "." .. classname)
  else
    if classname==nil then
      classname=namespace
      namespace=''
    end
    if DataSource.Domains==nil then
      --print("[mono_findClassEx]: DataSource is not initialized! Open .Net Info once")
      init_DotNetInfo()
    end
    for _, Domain in ipairs(DataSource.Domains) do
      if Domain.Images == nil then
        DataSource.getImages(Domain)
      end
      for _, Image in ipairs(Domain.Images) do
        if Image.Classes == nil then
          Image.Classes = {}
          Image.Classes.Busy = true
          DataSource.getClasses(Image)
          Image.Classes.Busy = nil
        end
        for _, Class in ipairs(Image.Classes) do
          if Class.FullName == classname then return Class.Handle end
        end
      end
    end
  end
  return nil
end
--------------------------------------------------------------------------------
function mono_findMethodEx(namespace, classname, methodname)
  if namespace==nil or classname==nil then
    print("[mono_findMethodEx]: Invalid parameters! " .. namespace .. "." .. classname .. ":" .. methodname)
  else
    if methodname==nil then
      methodname=classname
      classname=namespace
      namespace=''
    end
    local class = mono_findClassEx(namespace, classname)
    if class==nil or class==0 then
      print("[mono_findMethodEx]: Class not found! " .. namespace .. "." .. classname)
    else
      return mono_class_findMethod(class, methodname)
    end
  end
  return nil
end
--------------------------------------------------------------------------------
function mono_symbolLookupCallbackEx(symbol)
  local namespace, classname, methodname = SplitDotNetName(symbol)
  if symbol:match('[()%[%]]')~=nil then return nil end --no formulas/indexer
  if (methodname=='') or (classname=='') then
    --print("[mono_symbolLookupCallbackEx]: Invalid parameters! " .. namespace .. "." .. classname .. ":" .. methodname)
  else
    if monopipe == nil or monopipe.IL2CPP then
      --print("[mono_symbolLookupCallbackEx]: Unable to use mono features.")
    else
      local method = mono_findMethodEx(namespace, classname, methodname)
      if method==nil or method==0 then
        print("[mono_symbolLookupCallbackEx]: Method not found! " .. namespace .. "." .. classname .. ":" .. methodname)
      else
        local methodaddress = mono_compile_method(method)
        if methodaddress == nil or methodaddress == 0 then
          print("[mono_symbolLookupCallbackEx]: mono_compile_method error!")
        else
          return methodaddress
        end
      end
    end
  end
  return nil
end
--------------------------------------------------------------------------------
function mono_activate()
  if getOpenedProcessID()==0 then
    print("[mono_activate]: No process opened!")
  else
    if monopipe ~= nil and monopipe.ProcessID ~= getOpenedProcessID() then
        monopipe.OnTimeout()
        monopipe = nil
    end
    if monopipe==nil and LaunchMonoDataCollector()==0 then
      print("[mono_activate]: LaunchMonoDataCollector error!")
    else
      if mono_SymbolLookupID~=nil then
        unregisterSymbolLookupCallback(mono_SymbolLookupID)
        mono_SymbolLookupID=nil
      end
      mono_SymbolLookupID=registerSymbolLookupCallback(mono_symbolLookupCallbackEx, slNotSymbol)
    end
  end
end
--------------------------------------------------------------------------------
function mono_deactivate()
  if monopipe then
    monopipe.OnTimeout()
  end
end
--------------------------------------------------------------------------------
-- Scans the memory near &lt;mono_symbol&gt; for &lt;aob&gt; and returns it's address
function mono_AOBScanUnique(aob,mono_symbol)
  local result = nil
  local mono_address = mono_symbolLookupCallbackEx(mono_symbol)
  if mono_address == nil then
    print("[mono_AOBScanUnique]: Mono symbol not found! " .. mono_symbol)
  else
    local ji = mono_getJitInfo(mono_address)
    local start = ji.code_start -- Method start address
    local stop = start + ji.code_size -- Size of the method

    local protectionFlags = "*X*C*W"
    local alignmentType = fsmNotAligned
    local alignmentParam = nil
    local isHexadecimalInput = true
    local isNotABinaryString = true
    local isunicodescan = false
    local iscasesensitive = false
    local ms = createMemScan()

	  ms.firstScan(soExactValue, vtByteArray, nil, aob, nil, start, stop,
      protectionFlags, alignmentType, alignmentParam,
      isHexadecimalInput, isNotABinaryString, isunicodescan, iscasesensitive)
	  ms.waitTillDone()
	  local fl = createFoundList(ms)
    fl.initialize()
    if ms.FoundList.getCount()==0 then
      print("[mono_aobscan]: AOB [" .. aob .. "] not found near " .. mono_symbol)
    else
      if fl.getCount()&gt;1 then
        print("[mono_aobscan]: AOB [" .. aob .. "] is not unique near " .. mono_symbol)
      else
        result = fl[0]
      end
    end
    fl.deinitialize()
	  ms.destroy()
  end
	return result
end
--------------------------------------------------------------------------------
-- Registers &lt;new_symbol&gt; for &lt;aob&gt; near &lt;mono_symbol&gt; with &lt;offset&gt; if needed
function mono_register(new_symbol, aob, mono_symbol, offset)
  if offset == nil then offset = 0 end
  local aob_address = mono_AOBScanUnique(aob, mono_symbol)
  unregisterSymbol(new_symbol)
  if aob_address ~= nil then
    registerSymbol(new_symbol,tonumber(aob_address,16)+offset)
  end
end
--------------------------------------------------------------------------------

function mono_symbolLookupCallback(symbol)
  --if debug_canBreak() then return nil end
  if symbol:match('[()%[%]]')~=nil then return nil end --no formulas/indexer
  if monopipe == nil then return nil end
  if monopipe.IL2CPP then return nil end


  local methodname=''
  local classname=''
  local namespace=''

  local ss=mono_splitSymbol(symbol)
  methodname=ss.methodname
  classname=ss.classname
  namespace=ss.namespace

  if (methodname~='') and (classname~='') then
    local method=mono_findMethod(namespace, classname, methodname)
    if (method==0) then
      return nil
    end

    local methodaddress=mono_compile_method(method)
    if (methodaddress~=0) then
      return methodaddress
    end

  end

  --still here,
  return nil

end
</LuaScript>
</CheatTable>
