<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="19">
  <Files>
    <luaret.lua Encoding="Ascii85">wHf[y,ctJT57?tOAhHFL8rq0:Z4OAIq-mS(3KZL,:==:kFQ6ql)IQKRC?szv(EJ0SJyH{Y$!/36)ju0r$M@l6:l{TXtI6b;ud@jPKflf!?j:#2Rm5=T/+dGy#W!Cwwrq-_(dP#qHs=RTzDz[Bs*rR9/$_xPvX*65vB]w3#GPb-f+Byzs75Su$)CgW+qKVIY,WNl#[{:_IjdOQ0+5X)4Ffz=j}+k:O/BX.;gsUbo;$YiQq?*Y5JvWhWMM%nmsughU@*f1r[,GL6TE_]DA2I7Nb!L[Jc%oLbAJA2m4=YG/xBY0?g_zOJXcDtKty}E:*#W_mmi{bdW?GMSJLCVDF9cdYFV8-7pphrY9$K7Z{{GRvZ{,PtalONdrd+:1,A?Rl_N[[Y.QX4kQu;/.rd{MLy^qmgI2/Tm{Fn#P0K#elQxFc+1zQ?EF#y!/sHA38+qRXm{=Cuc=d=zikm5)iJAxdzXZJKv_8SIT7wgF_2UUL7?f=HG^fdJ4i3SXEeR^FwY[.WZsi^LAIqPb*k0RG.*{?FngWvsnsKWz!jIl+sV,c90$-qp3qlq!(;(l!#Q!_fPp32e$sj0ZNBW^cR,oj)z(1^mT!%^LOMZFrA1+g[B_N29T:9$xj^JQ3%.EnG^!M1SOmNp[*73f#Y!:Tr)$IQGN-QlQ.$^cmR]ZzNsAdsnJUf7QlUd_yA7}I.ERNYQ6gmRmRvKwGk3Si_SUl7,#1mpU]s]r!36Kz4co1Vzmbny#Z:I%Ci^vh;q7l!idI5q0#-3)cd!xDVE$_GfLqlujk]@Ghq/DpA#t8Sf8APSfsVgllU86eY:uUuy#{Ed_Z5aHvubzd_NdzC=1vVEbyrtY+!g=pD0hm}?12)g%V,UVWRKp2#S=L@{R0=+ht44lFn.m#)WvgI@pgG{cr(o*m^885DX/CH;e*VFIj)QH.V#asFTt[#a61bWXiKz.)gI.7,mDSJ1]=9:i*/1_WZz?QgC{PBInn3h=c4XKj7Gidz1(}U*GK{JrPAvh?I6m}EgwB9XKNSLhT{@C;8osSOeZ=c#F3n(3A#zeXmGzEogMN!*G!mdqoQ}QELkEijonru5d9+ZIZYvI^DGV.}gE?RLTe?GtQ)bC/YOMVGsBcK!90b1;V{-vZi]D/vBJdql+5hq{,/cItEyJoxIN+c4$X8i]AE_147JLWadP.-Sh]R@f1/)V$#XQ+:*s,7%:PY/FQf3=}?B?#=IM*nWKsE;j%[f9]wu@;]jtwX@E8U.L]/wcfm2jgHt96-!.^28imG)AUE.W%.B!{jO:LtRo4*}bBSI1%7JEw:6e:YS7U8,R_f$}lrJ%63mVbrS+nq8nXdu}%dgx)0ii$Q7Vxk6Fia{-4Z?F7${H$%g[6N9PC)gck8ksju8P/4g{?1YK-ygxvTI^hO/WIzIcA7Bo6SAdT./UE)zf2F.%r7P3!/Q5(T/=Zw2]88ZLu5Fm{8GFj+;r@J$O61(*t^$dNu_{OWHlNd@ED{,NbjTs),R9{jiq3bX9,*}l$hPCW[yt-Yl^ldR8VS(}*Nx,kL)WAN*zIhr$sAxTe)SE^dM([{Rjk]3uG6.$Y5R{ouI2T$;IP*9m!S^ow.TZB78Sq+C%Q{Or+P(WVli^l]8JOo%]R{(R9{k[,M@d/4jJZARW=.3DF]8bFq_jU8Z5ocWIF9-6HU@:p$^.RUW1n3%Yt-[S*,kM4@AYSyhf-,+].+Nu]W..:eAZFQD%pcLjrKojKd)!XDKsIXceS_aJ^2rzs+.Rre.__[m5rYH5o4(RWS?Dx/u%K#7+wpQU3[?,*LcZJj@TL0pu8fbI?(oh]%;rKe?[kt27.f3=htm+],[Vz9pbb)yz%6U}mXXh[UH)/gF9OfprZdIj^j@Vpi0_/j$Hmj8D52aD%f41}RXpY^Q[]50_Z?Q+d@6:9*}QaCqi6;n135SF2mvVE/{5+]FWprw4(cO+nl}OM*5*YH$_@G*[//X/w@e5dO8agUZD_njwG{$.quuz{3XPGQ$^[bkL!ZgF}mke-:1h.G-8C?L5TgDcY(X%@HIkb(bhOJruRrFrwh-KtUF.eS4RMG$+mAiSf#,4A6^5lkK?]8!b9VV#CD@AV)v5Ec=W+TECPdE18RjH;.E/6%4@5uL-j@NL{sUU)cW6F!d[DdimS?Eb[*H*Gru?Y2RxppLL5TL!nD$=TOCxr-yy9$:R:eyb2(/XuqVv:cCIO^SK3;5AEv3!Py}u93Zo45/r.Q+f0kr1XY[My]1l:-eJgADA({e:Al6cY8qO+V]4A7it+:aZ#qST!O5Hs:6ugh0:;4%cM!vhUu?_JRr%6{Bb[9-qT*8@zVsOj3@#%1:J+Dkp1g@A7}sKhx5XDtw.!9E!O1anV4s4;d[6veub)lrdvzxvCF^DAmm/_-L!aOJKIAJN1l}T38fNr[)bZkcUk_yvPaLk+I+(Ct$J$OOB$LiH]!.dHRxg1c+h1:{cP_R*5VBM/xm=Pmc2E?QxP@@3zo)KDUPmo+IzLABw3P-KN8iSY5L4[)vT]sF?S2ct@6FEte[=_N!F+1],fQZv@iCEJ-CWx5YMl,mW{RnA(2dMjXi(!]ycuoyFab^I2bk{.Nqu($w0o^Mb6Y!H0).P/r0/Ga-k7aN6c6IvD7fu4TlK/a,*9fShlOBd]}m+AB70_$0L/VjoS9g:,TWZ#o9o_a0dI^Fc3U#Lr}sL5Q?7_:H_.i{OZM;P/og##=epoNuO_!OR7DT-7:Ron*?H(zl6i7AbiTj$?l0l8]Nmz(5kfG^.i(q-8+T-+]j#^y4#pc^?*wzs;-mF]:Es=ifVSo{n=C{VrX-5:H6D@v9AwZjJjN_lf2P-?nArzA8UQSJI}$Gms$1?Cm.uKPu,qYis_?yEx{)=.wcP@juaBSG]#]f*8_hKR@/2m4GdE7%4X_Af[J[MRI9=(_jFOjfB!5zf$740!(qX76-s,NiNiFCbZ0F2@s^bbdH.eoU*[YF,_6VY5%f+w*V7o^*pwHmnyk*e1V,@hX=#@40_5g^Togg,W2,DrzLCHUGM0DJ}[ud]33C:wLSm6AB</luaret.lua>
  </Files>
  <CheatEntries>
    <CheatEntry>
      <ID>0</ID>
      <Description>"load luaret"</Description>
      <LastState/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{$lua}
if syntaxcheck==true then return '' end
--

-- common function
function loadTableFile(n,mode)
  local hdr = 'loadTableFile: '
  assert(type(n)=='string',hdr.."input should be a string -"..tostring(n).." of "..type(n))
  local m = assert(findTableFile(n),hdr.."can't find table file -"..n).Stream
  m = assert(readStringLocal(m.Memory,m.Size),hdr.."can't read content -"..n)
  if type(mode)~='boolean' then return m end
  m = assert(loadstring(m,n),hdr.."lua script load fail -"..n)
  return mode and m() or m
end


loadTableFile("luaret.lua",true)


{$asm}

[ENABLE]

[DISABLE]

</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>1</ID>
          <Description>"delayed lua call"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>
{$lua}
if syntaxcheck==true then return '' end
if DelayCB==nil then
  DelayCB = {
    cb = {},
    reset = function(self) self.cb = {} return self end,
    add = function(self,f) self.cb[1+#self.cb] = f return self end,
    fire = function(self,n)
      n = type(n)~='number' and 1 or n
      local t = createTimer()
      t.Interval = n
      t.OnTimer = function(sender)
        sender.Destroy()
        for i=1,#self.cb do pcall(self.cb[i]) end
        self:reset()
      end
      return self
    end
  }
end


{$asm}

[ENABLE]

//LuaRet(DelayCB:reset():add(function() showMessage('Start') end))

alloc(mem,1024)
registerSymbol(mem)

Eval(memAddr,readProcessMemory)  // readProcessMemory is a readied symbol, but mem is not. So we delayed to call getAddress('mem') in next line
// memAddr in next line will be textually replace with what memAddr defined, which is the hex-string-address of readProcessMemory
_(DelayCB:add(function() showMessage(string.format(' readProcessMemory : memAddr , mem : %X',getAddress('mem')))end))


_(DelayCB:add(function() getAddressList().getMemoryRecordByDescription('delayed lua call').Active=false showMessage('Self De-Activated???') end))

LuaRet(DelayCB:add(function() showMessage('END')end))
 
LuaRet(DelayCB:fire())
[DISABLE]

dealloc(mem)
unregistersymbol(mem)

</AssemblerScript>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
