washnn wrote: ↑Mon Jul 26, 2021 3:49 pmThanks bro it worked here
Geo wrote: ↑Fri Jul 02, 2021 12:00 amYea yea yea. New interface classes were made and my table is trying to compile methods in them which is causing the crash. The new interface class names are "INamedValue", "IContainer`2", and "IContainerExtension". Not sure how to implement a way to check if the class is an interface and I don't want to make more weird work-arounds. So two things you can do to fix it yourself is to edit the Create Global Classes/Fields/Methods script under the Setup section and change the 4th argument, a boolean, to false so it doesn't suppress the issues so you can see what's not working before the crash:Then, still on my ModifyAllGlobalClassesFieldsMethods function, the last few arguments are the excluded namespace, class, and method names respectively. You can add "INamedValue", "IContainer" into the excluded class names so it'll skip those.Code: Select all
assemblyId = mono_getAssemblyFromName("AnotherChronicle") if assemblyId then local imageId = mono_getImageFromAssembly(assemblyId) ModifyAllGlobalClassesFieldsMethods(imageId, false, false, --> false <--, true, true, {excluded namespaces}, {excluded classes}, {excluded methods}) end
Your Chronicle
Re: Your Chronicle
How did you make it work; I'm a bit new to this.
Re: Your Chronicle
Same boat. This is just gibberish to me. If you have the time to write out how to fix it, why not just fix it and upload it? Or someone else fix it and upload the fix version
----
I didn't get it to work, I think. It still crashes. But at least now I got an error now, that I have no understanding of:
Code: Select all
IReincarnationAction.ReincarnationAction failed to compile.
- ApeDemon66
- Expert Cheater
- Posts: 226
- Joined: Sat Mar 03, 2018 7:31 am
- Reputation: 180
Re: Your Chronicle
I don't want to because the design template I've made for my table continues to have issues with new interface classes being created.
IReincarnationAction is the class and ReincarnationAction is the method. The naming convention for interface classes is to have an "I" at the beginning of the class name. The issue is that the method in that class can't be compiled since the class is just an interface. You canJirodyne wrote: ↑Mon Aug 09, 2021 6:53 am... at least now I got an error now, that I have no understanding of:
Code: Select all
IReincarnationAction.ReincarnationAction failed to compile.
either exclude the class or method name with the instructions I gave before and writing one of those names in the appropriate area of the my script's function.
Re: Your Chronicle
Thanks Geo. Fixed and works for steam version:
Code: Select all
<?xml version="1.0" encoding="utf-8"?><CheatTable CheatEngineTableVersion="34"><CheatEntries><CheatEntry><ID>1</ID><Description>"Geo Stuff"</Description><Options moHideChildren="1" moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/><VariableType>Auto Assembler Script</VariableType><AssemblerScript Async="1">{$lua}
if syntaxcheck then return end
[ENABLE]
if not process or not enumModules()[1] then error("Process was not selected or is nil.") end
local starttime=os.time()
local count = 0
while not miMonoTopMenuItem or not miMonoTopMenuItem.miMonoActivate or miMonoTopMenuItem.miMonoActivate.Visible == false do
count = count + 1
sleep(1)
if count >= 5000 then return end
end
miDotNetInfoClick(miMonoTopMenuItem)
if monopipe and monopipe.IL2CPP then
if not monoSymbolList then
error("Mono cannot enum symbols.")
return
end
local MonoSymbolEnumTimeout=0
while (not monoSymbolList or monoSymbolList.FullyLoaded == nil or monoSymbolList.FullyLoaded == false) do
MonoSymbolEnumTimeout=MonoSymbolEnumTimeout+1
if MonoSymbolEnumTimeout>20000 then break end
sleep(1)
end
if (not monoSymbolList or monoSymbolList.FullyLoaded == nil or monoSymbolList.FullyLoaded == false) then
error("Mono features are not working.")
return
end
else
local MonoSymbolEnumTimeout=0
while monoBase == nil or monobase == 0 or monopipe.Connected == false do
MonoSymbolEnumTimeout=MonoSymbolEnumTimeout+1
if MonoSymbolEnumTimeout>20000 then break end
sleep(1)
end
if monoBase==nil or monobase==0 or monopipe.Connected == false then
error("Mono features are not working.")
return
end
end
if monopipe and monoBase then showMessage("Mono features are available.") end
getLuaEngine().close()
[DISABLE]
{$asm}
</AssemblerScript><CheatEntries><CheatEntry><ID>2</ID><Description>"Setup"</Description><Options moHideChildren="1" moManualExpandCollapse="1" moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/><GroupHeader>1</GroupHeader><CheatEntries><CheatEntry><ID>3</ID><Description>"Create Global Classes/Fields/Methods"</Description><Options moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/><VariableType>Auto Assembler Script</VariableType><AssemblerScript Async="1">[ENABLE]
{$lua}
if syntaxcheck then return end
local assemblyId = mono_getAssemblyFromName("Assembly-CSharp")
if assemblyId then
local imageId = mono_getImageFromAssembly(assemblyId)
ModifyAllGlobalClassesFieldsMethods(imageId, false, false, true, true, true, {}, {}, {})
end
assemblyId = mono_getAssemblyFromName("AnotherChronicle")
if assemblyId then
local imageId = mono_getImageFromAssembly(assemblyId)
ModifyAllGlobalClassesFieldsMethods(imageId, false, false, false, true, true, {"Tree", "Utility", "QuestSpace", "NAdditionalEffect", "AHA_Domain", "AnnounceSectionNameSpace", "Envy"}, {"IEatAbilityCtrl", "Eat_Ability", "LevelEffect", "ISloth", "IShortcut", "IAutomatedShortcut", "Achievement", "ActionContainer", "CheckActions", "Formation", "IBulkDealing", "NextAlly_Target", "IBattleEffect", "IListLocation_BattleEffect", "IBattleUnitTarget", "IDeepCopy", "IBestiary", "ICompleteCondition", "IConsumeItem", "Dealing", "IDrop", "Ally", "BattleUnit", "Base_", "IDungeon", "IEnemy", "ISkill", "IBaseStats", "IMagStats", "IToReset", "IEffect", "ILevelFactor", "ISkillUICtrl", "IPartyTemplate", "Default_", "EnumCtrl", "FilterToggle", "OfflineBonusWriter", "FolderInfo", "IHighlight", "IAnnounce", "COMP_PACKER", "ISetSource", "IRestriction", "IComponent", "IDetail", "IInteractable", "IClick", "IHoverAction", "IToggleClick", "IOnlyAction", "ISetActive", "IReleaseComplete", "IPaid", "ICalculateMethod", "IFilter", "IJudgeToFilter", "Filter_Tag", "JudgeTagFilter", "FilteredSetActive", "ILevel", "IUICtrl", "ISliderAction", "IIncreaseAmount", "ICooldown", "IMonoSeparated", "INeed", "IStats", "ISentenceTranslator", "ILuckBonusInfo", "IMonthlyRewardInfo", "INew", "LevelOfflineUnit", "IOfflineBonus", "IInitCostFactor", "ICompleteEffefctFactor", "IIntervalFactor", "IWholeAmount", "IAgent", "IAgentAccepter", "IGetTime", "IRankUpFunction", "IResource", "IRight", "IRubyIteminfo", "Sorted_SetActive", "IChronicleInfo", "IHistory", "IUIState", "IUnlock", "Narou1", "IAnimation", "ILog", "Conditional", "IIdleAction", "SingletonPopUp", "ISeedsHolder", "saveClass", "SavableArray", "SaveManager", "SaveSelectManager", "ISaveLocation", "SaveElement", "ISaveExecutor", "SingletonMonoBehaviour", "UsefulMethod", "UsefulStatic", "Button_Tree", "TemplateList", "ForeignWords", "ICondition", "DLC", "IIntDateRepository", "IClearDateEvent", "GameEvent_Dungeon", "INamedValue", "IContainer"}, {"AscendedAction", "CreateSkillCombination"})
end
assemblyId = mono_getAssemblyFromName("ACTk.Runtime")
if assemblyId then
local imageId = mono_getImageFromAssembly(assemblyId)
ModifyAllGlobalClassesFieldsMethods(imageId, false, true, true, true, true, {"Genuine"}, {"ACTkDetectorBase", "KeepAliveBehaviour"}, {"crypt"})
end
local assemblies = mono_enumAssemblies()
for _, assembly in ipairs(assemblies) do
local imageId = mono_getImageFromAssembly(assembly)
local assemblyName = mono_image_get_name(imageId)
ModifyAllGlobalClassesFieldsMethods(imageId, false, true, true, true, false, {"UniRx"}, {"ConfiguredValueTaskAwaiter", "Awaiter", "Entry", "ConditionalElement", "OnNextNotification", "Aggregate", "CombineLatest", "ContinueWith", "DistinctUntilChanged", "FromEventPattern", "FromEvent", "Last", "Pairwise", "Sample", "Scan", "Single", "Throttle", "TreeSubSet", "Node", "Slot", "Mutables", "GroupKeyData", "Boxed"}, {})
end
local assemblyId = mono_getAssemblyFromName("mscorlib")
if assemblyId then
local imageId = mono_getImageFromAssembly(assemblyId)
local classId = mono_image_findClass(imageId, "System", "IntPtr")
if classId then
local methodId = mono_class_findMethod(classId, "get_Size")
if methodId then
local addr = mono_compile_method(methodId)
if not _System then _System = {} end
if not _System.IntPtr then _System.IntPtr = {} end
_System.IntPtr.get_Size = addr
end
end
end
unregisterSymbol("_System.IntPtr.size")
autoAssemble([[
aobscanregion(_System.IntPtr.size,_System.IntPtr.get_Size,_System.IntPtr.get_Size+10,B8)
registersymbol(_System.IntPtr.size)
]])
_System.IntPtr.size = readInteger(GetAddress("_System.IntPtr.size")+1)
unregisterSymbol("_System.IntPtr.size")
collectgarbage()
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
local assemblyId = mono_getAssemblyFromName("Assembly-CSharp.dll")
if assemblyId then
local imageId = mono_getImageFromAssembly(assemblyId)
ModifyAllGlobalClassesFieldsMethods(imageId, true, false, true, true, true, {}, {}, {})
end
local assemblies = mono_enumAssemblies()
for _, assembly in ipairs(assemblies) do
local imageId = mono_getImageFromAssembly(assembly)
local assemblyName = mono_image_get_name(imageId)
ModifyAllGlobalClassesFieldsMethods(imageId, true, true, true)
end
if _System and _System.IntPtr then _System.IntPtr.size = nil end
collectgarbage()
{$asm}
</AssemblerScript></CheatEntry></CheatEntries></CheatEntry><CheatEntry><ID>4</ID><Description>"Addresses"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><GroupHeader>1</GroupHeader><CheatEntries><CheatEntry><ID>5</ID><Description>"BASE"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><ShowAsSigned>0</ShowAsSigned><GroupHeader>1</GroupHeader><Address>BASE.staticAddress</Address><CheatEntries><CheatEntry><ID>6</ID><Description>"Main"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><ShowAsSigned>0</ShowAsSigned><GroupHeader>1</GroupHeader><Address>+0</Address><Offsets><Offset>0</Offset></Offsets><CheatEntries><CheatEntry><ID>7</ID><Description>"Rsc"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><ShowAsSigned>0</ShowAsSigned><GroupHeader>1</GroupHeader><Address>+Main.rsc</Address><Offsets><Offset>0</Offset></Offsets><CheatEntries><CheatEntry><ID>8</ID><Description>"Get Resource By Kind"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><VariableType>Auto Assembler Script</VariableType><AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
CreateStringInputForm("BASEMainRscResourcesResourceIndexByKind", "Choose Resource", "Input the Resource Type:", false, nil, nil, function(var, varName)
local resourceKindArray = {"nothing", "exp", "action", "stamina", "mp", "fire", "water", "wind", "earth", "thunder", "ice", "light", "dark", "inspiration", "movement", "habit", "will", "gold", "destiny", "rune", "runeStone", "blessing", "woodenStatue", "goddessStatue", "stoneStatue", "statueOfMuscle", "seaBreezeAmulet", "shrine", "weed", "herb", "mandragora", "flower", "wreath", "medicine", "potion", "elixir", "spiritWater", "holyWater", "fairyDrop", "goddessBlessing", "wood", "firewood", "stone", "scrapMetal", "rareMetal", "steel", "mithril", "pelt", "leather", "durableLeather", "muddy_mucus", "dung", "manure", "stench", "smellySachet", "magicFiber", "dragonClaw", "dragonLiver", "physicalpoint", "magicalpoint", "specialpoint", "wheat", "bread", "mushroom", "apple", "slimeJelly", "wine", "fish", "salt", "olive", "honey", "milk", "butter", "egg", "beef", "pork", "chicken", "mysteriousMeat", "bakedApple", "beefSteak", "porkSteak", "chickenSteak", "meatFestival", "grilledFish", "anchovySandwich", "honeyToast", "honeyApple", "butterToast", "mushroomSaute", "creamStew", "meunier", "baconEgg", "iceCream", "dessertCarnival", "ruby", "sapphire", "emerald", "topaz", "rustySword", "holySword", "engagementRing", "artificialArm", "sin_gluttony", "sin", "guildPoint", "cactus", "palm", "elasticLeather", "desertSaute", "cactusSteak", "driedFruit", "warriorPoint", "sorcererPoint", "tamerPoint", "ePoint1", "ePoint2", "potato", "corn", "griffonFeather", "paper", "book", "bakedPotato", "cornSoup"}
local address = readPointer(BASE.staticAddress)
address = readPointer(address + Main.rsc)
address = readPointer(address + ResourceCtrl.resources)
local baseArrayAddr = address
local count = readInteger(address + _System.IntPtr.size*3)
local found = false
local kind = var
for i=0,count do
address = readPointer(baseArrayAddr + i*_System.IntPtr.size + _System.IntPtr.size*4)
if address and address > 0 then
local kindIndex = readInteger(address + Resource.kind) + 1
if resourceKindArray[kindIndex] == kind then
found = true
formVariables[varName] = i
break
end
end
end
if not found then
formVariables[varName] = 0
showMessage("Resource Kind not found.")
end
end)
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
formVariables.BASEMainRscResourcesResourceIndexByKind = nil
{$asm}
</AssemblerScript><CheatEntries><CheatEntry><ID>9</ID><Description>"Resource"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><ShowAsSigned>0</ShowAsSigned><GroupHeader>1</GroupHeader><Address>+ResourceCtrl.resources</Address><Offsets><Offset>0</Offset><Offset>+formVariables.BASEMainRscResourcesResourceIndexByKind*_System.IntPtr.size+_System.IntPtr.size*4</Offset></Offsets><CheatEntries><CheatEntry><ID>10</ID><Description>"Kind"</Description><DropDownList DescriptionOnly="1" DisplayValueAsItem="1">0:nothing
1:exp
2:action
3:stamina
4:mp
5:fire
6:water
7:wind
8:earth
9:thunder
10:ice
11:light
12:dark
13:inspiration
14:movement
15:habit
16:will
17:gold
18:destiny
19:rune
20:runeStone
21:blessing
22:woodenStatue
23:goddessStatue
24:stoneStatue
25:statueOfMuscle
26:seaBreezeAmulet
27:shrine
28:weed
29:herb
30:mandragora
31:flower
32:wreath
33:medicine
34:potion
35:elixir
36:spiritWater
37:holyWater
38:fairyDrop
39:goddessBlessing
40:wood
41:firewood
42:stone
43:scrapMetal
44:rareMetal
45:steel
46:mithril
47:pelt
48:leather
49:durableLeather
50:muddy_mucus
51:dung
52:manure
53:stench
54:smellySachet
55:magicFiber
56:dragonClaw
57:dragonLiver
58:physicalpoint
59:magicalpoint
60:specialpoint
61:wheat
62:bread
63:mushroom
64:apple
65:slimeJelly
66:wine
67:fish
68:salt
69:olive
70:honey
71:milk
72:butter
73:egg
74:beef
75:pork
76:chicken
77:mysteriousMeat
78:bakedApple
79:beefSteak
80:porkSteak
81:chickenSteak
82:meatFestival
83:grilledFish
84:anchovySandwich
85:honeyToast
86:honeyApple
87:butterToast
88:mushroomSaute
89:creamStew
90:meunier
91:baconEgg
92:iceCream
93:dessertCarnival
94:ruby
95:sapphire
96:emerald
97:topaz
98:rustySword
99:holySword
100:engagementRing
101:artificialArm
102:sin_gluttony
103:sin
104:guildPoint
105:cactus
106:palm
107:elasticLeather
108:desertSaute
109:cactusSteak
110:driedFruit
111:warriorPoint
112:sorcererPoint
113:tamerPoint
114:ePoint1
115:ePoint2
116:potato
117:corn
118:griffonFeather
119:paper
120:book
121:bakedPotato
122:cornSoup
</DropDownList><ShowAsSigned>0</ShowAsSigned><VariableType>4 Bytes</VariableType><Address>+Resource.kind</Address></CheatEntry></CheatEntries></CheatEntry></CheatEntries></CheatEntry></CheatEntries></CheatEntry><CheatEntry><ID>11</ID><Description>"S"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><ShowAsSigned>0</ShowAsSigned><GroupHeader>1</GroupHeader><Address>+Main.S</Address><Offsets><Offset>0</Offset></Offsets><CheatEntries><CheatEntry><ID>12</ID><Description>"Get Current Resource By Kind"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><VariableType>Auto Assembler Script</VariableType><AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
CreateStringInputForm("BASEMainSCurrentResourceIndexByKind", "Choose Resource", "Input the Resource Type:", false, nil, nil, function(var, varName)
local resourceKindArray = ResourceKind.enumTable
local address = readPointer(BASE.staticAddress)
address = readPointer(address + Main.S)
address = readPointer(address + Save.current_resource)
local baseArrayAddr = address
local count = readInteger(address + _System.IntPtr.size*3)
local found = false
local kind = var
for i=0,count do
if resourceKindArray[i+1] == kind then
found = true
formVariables[varName] = i
break
end
end
if not found then
formVariables[varName] = 0
showMessage("Resource Kind not found.")
end
end)
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
formVariables.BASEMainSCurrentResourceIndexByKind = nil
{$asm}
</AssemblerScript><CheatEntries><CheatEntry><ID>13</ID><Description>"Value"</Description><ShowAsSigned>0</ShowAsSigned><VariableType>Double</VariableType><Address>+Save.current_resource</Address><Offsets><Offset>formVariables.BASEMainSCurrentResourceIndexByKind*8+_System.IntPtr.size*4</Offset></Offsets></CheatEntry></CheatEntries></CheatEntry><CheatEntry><ID>14</ID><Description>"Get Permanent Resource By Kind (Obscured)"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><VariableType>Auto Assembler Script</VariableType><AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
CreateStringInputForm("BASEMainSPermanentResourceActIndexByKind", "Choose Resource", "Input the Resource Type:", false, nil, nil, function(var, varName)
local resourceKindArray = PermanentResourceKind.enumTable
local address = readPointer(BASE.staticAddress)
address = readPointer(address + Main.S)
address = readPointer(address + Save.value_PermanentResource_act)
local baseArrayAddr = address
local count = readInteger(address + _System.IntPtr.size*3)
local found = false
local kind = var
for i=0,count do
if resourceKindArray[i+1] == kind then
found = true
formVariables[varName] = i
break
end
end
if not found then
formVariables[varName] = 0
showMessage("Resource Kind not found.")
end
end)
{$asm}
[DISABLE]
{$lua}
if syntaxcheck then return end
formVariables.BASEMainSPermanentResourceActIndexByKind = nil
{$asm}
</AssemblerScript><CheatEntries><CheatEntry><ID>15</ID><Description>"Value"</Description><ShowAsSigned>0</ShowAsSigned><VariableType>Double</VariableType><Address>+Save.value_PermanentResource_act</Address><Offsets><Offset>formVariables.BASEMainSPermanentResourceActIndexByKind*8*6+_System.IntPtr.size*4-CodeStage.AntiCheat.ObscuredTypes.ObscuredDouble.currentCryptoKey+CodeStage.AntiCheat.ObscuredTypes.ObscuredDouble.fakeValue</Offset></Offsets></CheatEntry></CheatEntries></CheatEntry></CheatEntries></CheatEntry></CheatEntries></CheatEntry></CheatEntries></CheatEntry></CheatEntries></CheatEntry><CheatEntry><ID>16</ID><Description>"Scripts"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><GroupHeader>1</GroupHeader><CheatEntries><CheatEntry><ID>17</ID><Description>"Permanent Resource Force Purchasable"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><VariableType>Auto Assembler Script</VariableType><AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
RegisterGlobalMethod("PermanentRsc_Dealing.CanPurchase")
{$asm}
aobscanregion(Permanent_Resource_Force_Purchasable,PermanentRsc_Dealing.CanPurchase,PermanentRsc_Dealing.CanPurchase+5000,66 * * * 0F 86 * * * * 33 C0 EB)
Permanent_Resource_Force_Purchasable+04:
db 90 E9
registersymbol(Permanent_Resource_Force_Purchasable)
unregistersymbol(PermanentRsc_Dealing.CanPurchase)
[DISABLE]
Permanent_Resource_Force_Purchasable+04:
db 0F 86
unregistersymbol(Permanent_Resource_Force_Purchasable)
</AssemblerScript></CheatEntry></CheatEntries></CheatEntry></CheatEntries></CheatEntry></CheatEntries><UserdefinedSymbols/><LuaScript>function cycleFullCompact(sender, force)
local state = not(compactMenuItem.Caption == 'Compact View')
if force~=nil
then state = not force
end
compactMenuItem.Caption = state and 'Compact View' or 'Full View'
getMainForm().Splitter1.Visible = state
getMainForm().Panel4.Visible = state
getMainForm().Panel5.Visible = state
end
function addCompactMenu()
if compactMenuItem and compactMenuItem.Exists then return end
local menuItems = getMainForm().Menu.Items
compactMenuItem = createMenuItem(menuItems)
menuItems.add(compactMenuItem)
compactMenuItem.Caption = 'Compact View'
compactMenuItem.OnClick = cycleFullCompact
compactMenuItem.Exists = true
end
addCompactMenu()
function readIntegerSigned(addr)
local val=readInteger(addr)
local sign=bAnd(val,0x80000000)
return sign==0 and val or val-0x100000000
end
function readByteSigned(addr)
local val=readBytes(addr, 1, false)
local sign=bAnd(val,0x80)
return sign==0 and val or val-0x100
end
function mono_getAssemblyFromName(assemblyName)
local assemblyIds = mono_enumAssemblies()
if not assemblyIds then return nil end
for _, assemblyId in ipairs(assemblyIds) do
local imageId = mono_getImageFromAssembly(assemblyId)
local name = mono_image_get_name(imageId)
if name == assemblyName then
return assemblyId
end
end
return nil
end
function CreateGlobalDelimitedVariable(varString, delimiter, removeStrings)
local var = _G
if not delimiter then delimiter = '.' end
local nameParts = {}
for part in string.gmatch(varString, "([^" .. delimiter .. "]+)") do
local partName = part
if removeStrings then
for i, rs in pairs(removeStrings) do
partName = partName:gsub(rs, "")
end
end
table.insert(nameParts, partName)
end
for i, part in ipairs(nameParts) do
if not var[part] then var[part] = {} end
var = var[part]
end
return var
end
function RegisterMonoMethodAddress(classNamespace, className, methodName, delimiter, createGlobal)
if not delimiter then delimiter = '.' end
local mId = mono_findMethod(classNamespace, className, methodName)
if mId == 0 then
mId = mono_findMethod("", className, methodName)
local errorMsg = "Cannot find the " .. className .. delimiter .. methodName .. " method to register"
if mId == 0 then error(errorMsg) end
if classNamespace ~= string.match(mono_class_getFullName(mono_method_getClass(mId)), "(.*)[" .. delimiter .. "]") then error(errorMsg) end
end
local mAddr = mono_compile_method(mId)
if mAddr then
local symbolName = classNamespace .. delimiter .. className .. delimiter .. methodName
if not classNamespace or classNamespace == '' then symbolName = className .. delimiter .. methodName end
if createGlobal then
if not classNamespace or classNamespace == '' then _G[className][methodName] = mAddr
else
local varName = classNamespace .. delimiter .. className
local gVar = CreateGlobalDelimitedVariable(varName, delimiter)
gVar[methodName] = mAddr
end
end
unregisterSymbol(symbolName)
registerSymbol(symbolName, mAddr, true)
return mAddr
end
return nil
end
function RegisterGlobalMethod(varString, delimiter, removeStrings)
if not delimiter then delimiter = '.' end
if not varString:find(delimiter) then return end
local methodName = string.match(varString, ".*[" .. delimiter .. "](.*)")
local classFullName = string.match(varString, "(.*)[" .. delimiter .. "]")
local className = classFullName
local classNamespace = ""
local baseVar = nil
if classFullName:find("["..delimiter.."]") then
className = string.match(classFullName, ".*[" .. delimiter .. "](.*)")
classNamespace = string.match(classFullName, "(.*)[" .. delimiter .. "]")
baseVar = CreateGlobalDelimitedVariable(classFullName, delimiter, removeStrings)
else
if not _G[classFullName] then
_G[classFullName] = {}
end
baseVar = _G[classFullName]
end
unregisterSymbol(varString)
if not baseVar[methodName] then
RegisterMonoMethodAddress(classNamespace, className, methodName, delimiter, true)
else
registerSymbol(varString, baseVar[methodName], true)
end
end
function ModifyAllGlobalClassesFieldsMethods(imageId, remove, safe, suppress, createFields, createMethods, excludedNamespaces, excludedClassNames, excludedMethodNames)
if not imageId then return end
local excludedClassIds = {}
local classIds = mono_image_enumClasses(imageId)
for i, class in ipairs(classIds) do
if class.class and class.class > 0 then
if not tableContainsValue(excludedClassIds, classId) then
ModifyGlobalClassesFieldsMethods(class.class, imageId, remove, safe, suppress, createFields, createMethods, excludedNamespaces, excludedClassNames, excludedMethodNames)
end
table.insert(excludedClassIds, class.class)
end
end
end
function ModifyGlobalClassesFieldsMethods(classId, imageId, remove, safe, suppress, createFields, createMethods, excludedNamespaces, excludedClassNames, excludedMethodNames)
if not classId or classId == 0 then return end
if createFields == nil then createFields = true end
if assemblyName == '' then assemblyName = nil end
if not excludedClassIds then excludedClassIds = {} end
local className = mono_class_getName(classId)
local classFullName = mono_class_getFullName(classId)
local classNamespace = mono_class_getNamespace(classId)
local excluded = false
local var = _G
if (not classNamespace or classNamespace == '') and classFullName ~= className then
classNamespace = string.match(classFullName, "(.*)[.]")
end
if classNamespace and classNamespace ~= '' then
excluded = stringFoundInTable(classNamespace, excludedNamespaces)
if excluded then return end
classNamespace = classNamespace:gsub("^(System)", "_System")
var = CreateGlobalDelimitedVariable(classNamespace, '.', {"`1", "`"})
else
local nestedClassParentIdList = {}
if mono_class_getNestingType then
local nestedClassParentId = mono_class_getNestingType(classId)
while nestedClassParentId and nestedClassParentId > 0 do
table.insert(nestedClassParentIdList, 1, nestedClassParentId)
nestedClassParentId = mono_class_getNestingType(classId)
end
end
if nestedClassParentIdList[1] then classNamespace = mono_class_getNamespace(nestedClassParentIdList[1]) end
for i, parentClassId in pairs(nestedClassParentIdList) do
local parentClassName = mono_class_getName(parentClassId)
parentClassName = parentClassName:gsub("`1", ""):gsub("`", "")
if not var[parentClassName] then var[parentClassName] = {} end
var = var[parentClassName]
end
end
if not className then return end
local classVarName = className:gsub("`1", ""):gsub("`", ""):gsub("<", ""):gsub(">", "")
excluded = stringFoundInTable(className, excludedClassNames)
if not excluded then if className:find("c__Iterator") or className:find("Enumerator") then excluded = true end end
if remove or excluded then
var[classVarName] = nil
return
end
table.insert(excludedClassIds, classId)
if var == _G and classVarName == "type" and type(var[classVarName]) == "function" then classVarName = "_" .. classVarName end
if var[classVarName] and type(var[classVarName]) ~= "table" then var[classVarName] = nil end
local domain = mono_enumDomains()[1]
local staticFieldAddr = 0
if safe and className:find("[`<>]") then
staticFieldAddr = 0
else
staticFieldAddr = mono_class_getStaticFieldAddress(domain, classId)
end
if not staticFieldAddr and not suppress then
print(className .. " failed to read static address.")
end
if not var[classVarName] then var[classVarName] = {} end
var[classVarName].staticAddress = staticFieldAddr
if createFields then
CreateGlobalFields(classId, var, classVarName)
end
if createMethods then
CreateGlobalMethods(classId, var, classVarName, className, classNamespace, excludedMethodNames, suppress)
end
end
function CreateGlobalFields(classId, rootVar, className)
for i, field in ipairs(mono_class_enumFields(classId, true)) do
local fieldName = field.name
if field.name:find("<") and field.name:find(">") then
fieldName = string.match(field.name, "<(%w+)>")
elseif field.name:find("[<>]") then
fieldName = field.name:gsub("<", ""):gsub(">", "")
end
if not fieldName then fieldName = field.name end
if fieldName ~= "" then rootVar[className][fieldName] = field.offset end
local parentClass = mono_class_getParent(classId)
if (field.monotype == MONO_TYPE_ENUM) or (parentClass and parentClass > 0 and mono_class_getFullName(parentClass) == "System.Enum") then
if fieldName ~= "enumSeperatorCharArray" and fieldName ~= "enumSeperator" and fieldName ~= "value__" then
if not rootVar[className].enumTable then rootVar[className].enumTable = {} end
if not tableContainsValue(rootVar[className].enumTable, fieldName) then
table.insert(rootVar[className].enumTable, fieldName)
end
end
end
end
end
function CreateGlobalMethods(classId, rootVar, className, oClassName, classNamespace, excludedMethodNames, suppress)
for i, method in ipairs(mono_class_enumMethods(classId)) do
excluded = stringFoundInTable(method.name, excludedMethodNames)
if not excluded then
local methodAddr = mono_compile_method(method.method)
if (not methodAddr or methodAddr == 0) and not suppress then
if classNamespace and classNamespace ~= '' then
print(classNamespace .. '.' .. oClassName .. '.' .. method.name .. " failed to compile.")
else
print(oClassName .. '.' .. method.name .. " failed to compile.")
end
return
end
local methodName = method.name
local count = 2
while rootVar[className][methodName] and rootVar[className][methodName] ~= methodAddr do
methodName = method.name .. count
count = count + 1
end
rootVar[className][methodName] = methodAddr
end
end
end
function stringFoundInTable(str, strTable)
if strTable and strTable ~= {} then
for i, s in ipairs(strTable) do
if str:lower():find(s:lower()) then
return true
end
end
end
return false
end
function tableContainsValue(tbl, val)
if tbl and tbl ~= {} then
for _,v in pairs(tbl) do
if v == val then
return true
end
end
end
return false
end
function CreateStringInputForm(varName, formName, labelText, numbersOnly, width, height, func)
width = width or 180
height = height or 80
if not formVariables then formVariables = {} end
formVariables[varName] = nil
local form = CreateBaseForm(formName, labelText, width, height)
local text_box = createEdit(form)
text_box.setTop(form.Height - 60)
text_box.Width = form.Width - 20
text_box.anchorSideLeft.control=form
text_box.anchorSideLeft.side=asrCenter
local OK_Button = createButton(form)
OK_Button.setTop(form.Height - 30)
OK_Button.Width = form.Width - 20
OK_Button.Caption = 'OK'
OK_Button.anchorSideLeft.control=form
OK_Button.anchorSideLeft.side=asrCenter
OK_Button.onClick = function()
if numbersOnly == true then
local num = tonumber(text_box.Text)
if num then
formVariables[varName] = num
else
formVariables[varName] = 0
end
else formVariables[varName] = text_box.Text end
if func then func(formVariables[varName], varName) end
form.hide()
end
end
function CreateDropdownForm(varName, itemArray, formName, labelText, width, height, func)
if not formVariables then formVariables = {} end
formVariables[varName] = nil
local form = CreateBaseForm(formName, labelText, width, height)
local slot_box = createComboBox(form)
slot_box.setTop(form.Height - 30)
slot_box.Width = form.Width - 20
slot_box.anchorSideLeft.control=form
slot_box.anchorSideLeft.side=asrCenter
for _, item in ipairs(itemArray) do
slot_box.items.add(item)
end
slot_box.onChange = function()
formVariables[varName] = slot_box.ItemIndex
if func then func(formVariables[varName], varName, itemArray[hexItemIndex]) end
form.hide()
end
end
function CreateBaseForm(formName, labelText, width, height)
width = width or 180
height = height or 50
local form = createForm()
m=getmetatable(form)
m.__autodestroy=true
local label = createLabel(form)
form.centerScreen()
form.Width = width
form.Height = height
label.anchorSideLeft.control=form
label.anchorSideLeft.side=asrCenter
label.Width = form.Width - 20
control_setCaption(form, formName)
control_setCaption(label, labelText)
return form
end
</LuaScript></CheatTable>
Re: Your Chronicle
eduroner wrote: ↑Fri Aug 27, 2021 1:45 pmThanks Geo. Fixed and works for steam version:
Code: Select all
<?xml version="1.0" encoding="utf-8"?><CheatTable CheatEngineTableVersion="34"><CheatEntries><CheatEntry><ID>1</ID><Description>"Geo Stuff"</Description><Options moHideChildren="1" moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/><VariableType>Auto Assembler Script</VariableType><AssemblerScript Async="1">{$lua} if syntaxcheck then return end [ENABLE] if not process or not enumModules()[1] then error("Process was not selected or is nil.") end local starttime=os.time() local count = 0 while not miMonoTopMenuItem or not miMonoTopMenuItem.miMonoActivate or miMonoTopMenuItem.miMonoActivate.Visible == false do count = count + 1 sleep(1) if count >= 5000 then return end end miDotNetInfoClick(miMonoTopMenuItem) if monopipe and monopipe.IL2CPP then if not monoSymbolList then error("Mono cannot enum symbols.") return end local MonoSymbolEnumTimeout=0 while (not monoSymbolList or monoSymbolList.FullyLoaded == nil or monoSymbolList.FullyLoaded == false) do MonoSymbolEnumTimeout=MonoSymbolEnumTimeout+1 if MonoSymbolEnumTimeout>20000 then break end sleep(1) end if (not monoSymbolList or monoSymbolList.FullyLoaded == nil or monoSymbolList.FullyLoaded == false) then error("Mono features are not working.") return end else local MonoSymbolEnumTimeout=0 while monoBase == nil or monobase == 0 or monopipe.Connected == false do MonoSymbolEnumTimeout=MonoSymbolEnumTimeout+1 if MonoSymbolEnumTimeout>20000 then break end sleep(1) end if monoBase==nil or monobase==0 or monopipe.Connected == false then error("Mono features are not working.") return end end if monopipe and monoBase then showMessage("Mono features are available.") end getLuaEngine().close() [DISABLE] {$asm} </AssemblerScript><CheatEntries><CheatEntry><ID>2</ID><Description>"Setup"</Description><Options moHideChildren="1" moManualExpandCollapse="1" moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/><GroupHeader>1</GroupHeader><CheatEntries><CheatEntry><ID>3</ID><Description>"Create Global Classes/Fields/Methods"</Description><Options moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/><VariableType>Auto Assembler Script</VariableType><AssemblerScript Async="1">[ENABLE] {$lua} if syntaxcheck then return end local assemblyId = mono_getAssemblyFromName("Assembly-CSharp") if assemblyId then local imageId = mono_getImageFromAssembly(assemblyId) ModifyAllGlobalClassesFieldsMethods(imageId, false, false, true, true, true, {}, {}, {}) end assemblyId = mono_getAssemblyFromName("AnotherChronicle") if assemblyId then local imageId = mono_getImageFromAssembly(assemblyId) ModifyAllGlobalClassesFieldsMethods(imageId, false, false, false, true, true, {"Tree", "Utility", "QuestSpace", "NAdditionalEffect", "AHA_Domain", "AnnounceSectionNameSpace", "Envy"}, {"IEatAbilityCtrl", "Eat_Ability", "LevelEffect", "ISloth", "IShortcut", "IAutomatedShortcut", "Achievement", "ActionContainer", "CheckActions", "Formation", "IBulkDealing", "NextAlly_Target", "IBattleEffect", "IListLocation_BattleEffect", "IBattleUnitTarget", "IDeepCopy", "IBestiary", "ICompleteCondition", "IConsumeItem", "Dealing", "IDrop", "Ally", "BattleUnit", "Base_", "IDungeon", "IEnemy", "ISkill", "IBaseStats", "IMagStats", "IToReset", "IEffect", "ILevelFactor", "ISkillUICtrl", "IPartyTemplate", "Default_", "EnumCtrl", "FilterToggle", "OfflineBonusWriter", "FolderInfo", "IHighlight", "IAnnounce", "COMP_PACKER", "ISetSource", "IRestriction", "IComponent", "IDetail", "IInteractable", "IClick", "IHoverAction", "IToggleClick", "IOnlyAction", "ISetActive", "IReleaseComplete", "IPaid", "ICalculateMethod", "IFilter", "IJudgeToFilter", "Filter_Tag", "JudgeTagFilter", "FilteredSetActive", "ILevel", "IUICtrl", "ISliderAction", "IIncreaseAmount", "ICooldown", "IMonoSeparated", "INeed", "IStats", "ISentenceTranslator", "ILuckBonusInfo", "IMonthlyRewardInfo", "INew", "LevelOfflineUnit", "IOfflineBonus", "IInitCostFactor", "ICompleteEffefctFactor", "IIntervalFactor", "IWholeAmount", "IAgent", "IAgentAccepter", "IGetTime", "IRankUpFunction", "IResource", "IRight", "IRubyIteminfo", "Sorted_SetActive", "IChronicleInfo", "IHistory", "IUIState", "IUnlock", "Narou1", "IAnimation", "ILog", "Conditional", "IIdleAction", "SingletonPopUp", "ISeedsHolder", "saveClass", "SavableArray", "SaveManager", "SaveSelectManager", "ISaveLocation", "SaveElement", "ISaveExecutor", "SingletonMonoBehaviour", "UsefulMethod", "UsefulStatic", "Button_Tree", "TemplateList", "ForeignWords", "ICondition", "DLC", "IIntDateRepository", "IClearDateEvent", "GameEvent_Dungeon", "INamedValue", "IContainer"}, {"AscendedAction", "CreateSkillCombination"}) end assemblyId = mono_getAssemblyFromName("ACTk.Runtime") if assemblyId then local imageId = mono_getImageFromAssembly(assemblyId) ModifyAllGlobalClassesFieldsMethods(imageId, false, true, true, true, true, {"Genuine"}, {"ACTkDetectorBase", "KeepAliveBehaviour"}, {"crypt"}) end local assemblies = mono_enumAssemblies() for _, assembly in ipairs(assemblies) do local imageId = mono_getImageFromAssembly(assembly) local assemblyName = mono_image_get_name(imageId) ModifyAllGlobalClassesFieldsMethods(imageId, false, true, true, true, false, {"UniRx"}, {"ConfiguredValueTaskAwaiter", "Awaiter", "Entry", "ConditionalElement", "OnNextNotification", "Aggregate", "CombineLatest", "ContinueWith", "DistinctUntilChanged", "FromEventPattern", "FromEvent", "Last", "Pairwise", "Sample", "Scan", "Single", "Throttle", "TreeSubSet", "Node", "Slot", "Mutables", "GroupKeyData", "Boxed"}, {}) end local assemblyId = mono_getAssemblyFromName("mscorlib") if assemblyId then local imageId = mono_getImageFromAssembly(assemblyId) local classId = mono_image_findClass(imageId, "System", "IntPtr") if classId then local methodId = mono_class_findMethod(classId, "get_Size") if methodId then local addr = mono_compile_method(methodId) if not _System then _System = {} end if not _System.IntPtr then _System.IntPtr = {} end _System.IntPtr.get_Size = addr end end end unregisterSymbol("_System.IntPtr.size") autoAssemble([[ aobscanregion(_System.IntPtr.size,_System.IntPtr.get_Size,_System.IntPtr.get_Size+10,B8) registersymbol(_System.IntPtr.size) ]]) _System.IntPtr.size = readInteger(GetAddress("_System.IntPtr.size")+1) unregisterSymbol("_System.IntPtr.size") collectgarbage() {$asm} [DISABLE] {$lua} if syntaxcheck then return end local assemblyId = mono_getAssemblyFromName("Assembly-CSharp.dll") if assemblyId then local imageId = mono_getImageFromAssembly(assemblyId) ModifyAllGlobalClassesFieldsMethods(imageId, true, false, true, true, true, {}, {}, {}) end local assemblies = mono_enumAssemblies() for _, assembly in ipairs(assemblies) do local imageId = mono_getImageFromAssembly(assembly) local assemblyName = mono_image_get_name(imageId) ModifyAllGlobalClassesFieldsMethods(imageId, true, true, true) end if _System and _System.IntPtr then _System.IntPtr.size = nil end collectgarbage() {$asm} </AssemblerScript></CheatEntry></CheatEntries></CheatEntry><CheatEntry><ID>4</ID><Description>"Addresses"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><GroupHeader>1</GroupHeader><CheatEntries><CheatEntry><ID>5</ID><Description>"BASE"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><ShowAsSigned>0</ShowAsSigned><GroupHeader>1</GroupHeader><Address>BASE.staticAddress</Address><CheatEntries><CheatEntry><ID>6</ID><Description>"Main"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><ShowAsSigned>0</ShowAsSigned><GroupHeader>1</GroupHeader><Address>+0</Address><Offsets><Offset>0</Offset></Offsets><CheatEntries><CheatEntry><ID>7</ID><Description>"Rsc"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><ShowAsSigned>0</ShowAsSigned><GroupHeader>1</GroupHeader><Address>+Main.rsc</Address><Offsets><Offset>0</Offset></Offsets><CheatEntries><CheatEntry><ID>8</ID><Description>"Get Resource By Kind"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><VariableType>Auto Assembler Script</VariableType><AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end CreateStringInputForm("BASEMainRscResourcesResourceIndexByKind", "Choose Resource", "Input the Resource Type:", false, nil, nil, function(var, varName) local resourceKindArray = {"nothing", "exp", "action", "stamina", "mp", "fire", "water", "wind", "earth", "thunder", "ice", "light", "dark", "inspiration", "movement", "habit", "will", "gold", "destiny", "rune", "runeStone", "blessing", "woodenStatue", "goddessStatue", "stoneStatue", "statueOfMuscle", "seaBreezeAmulet", "shrine", "weed", "herb", "mandragora", "flower", "wreath", "medicine", "potion", "elixir", "spiritWater", "holyWater", "fairyDrop", "goddessBlessing", "wood", "firewood", "stone", "scrapMetal", "rareMetal", "steel", "mithril", "pelt", "leather", "durableLeather", "muddy_mucus", "dung", "manure", "stench", "smellySachet", "magicFiber", "dragonClaw", "dragonLiver", "physicalpoint", "magicalpoint", "specialpoint", "wheat", "bread", "mushroom", "apple", "slimeJelly", "wine", "fish", "salt", "olive", "honey", "milk", "butter", "egg", "beef", "pork", "chicken", "mysteriousMeat", "bakedApple", "beefSteak", "porkSteak", "chickenSteak", "meatFestival", "grilledFish", "anchovySandwich", "honeyToast", "honeyApple", "butterToast", "mushroomSaute", "creamStew", "meunier", "baconEgg", "iceCream", "dessertCarnival", "ruby", "sapphire", "emerald", "topaz", "rustySword", "holySword", "engagementRing", "artificialArm", "sin_gluttony", "sin", "guildPoint", "cactus", "palm", "elasticLeather", "desertSaute", "cactusSteak", "driedFruit", "warriorPoint", "sorcererPoint", "tamerPoint", "ePoint1", "ePoint2", "potato", "corn", "griffonFeather", "paper", "book", "bakedPotato", "cornSoup"} local address = readPointer(BASE.staticAddress) address = readPointer(address + Main.rsc) address = readPointer(address + ResourceCtrl.resources) local baseArrayAddr = address local count = readInteger(address + _System.IntPtr.size*3) local found = false local kind = var for i=0,count do address = readPointer(baseArrayAddr + i*_System.IntPtr.size + _System.IntPtr.size*4) if address and address > 0 then local kindIndex = readInteger(address + Resource.kind) + 1 if resourceKindArray[kindIndex] == kind then found = true formVariables[varName] = i break end end end if not found then formVariables[varName] = 0 showMessage("Resource Kind not found.") end end) {$asm} [DISABLE] {$lua} if syntaxcheck then return end formVariables.BASEMainRscResourcesResourceIndexByKind = nil {$asm} </AssemblerScript><CheatEntries><CheatEntry><ID>9</ID><Description>"Resource"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><ShowAsSigned>0</ShowAsSigned><GroupHeader>1</GroupHeader><Address>+ResourceCtrl.resources</Address><Offsets><Offset>0</Offset><Offset>+formVariables.BASEMainRscResourcesResourceIndexByKind*_System.IntPtr.size+_System.IntPtr.size*4</Offset></Offsets><CheatEntries><CheatEntry><ID>10</ID><Description>"Kind"</Description><DropDownList DescriptionOnly="1" DisplayValueAsItem="1">0:nothing 1:exp 2:action 3:stamina 4:mp 5:fire 6:water 7:wind 8:earth 9:thunder 10:ice 11:light 12:dark 13:inspiration 14:movement 15:habit 16:will 17:gold 18:destiny 19:rune 20:runeStone 21:blessing 22:woodenStatue 23:goddessStatue 24:stoneStatue 25:statueOfMuscle 26:seaBreezeAmulet 27:shrine 28:weed 29:herb 30:mandragora 31:flower 32:wreath 33:medicine 34:potion 35:elixir 36:spiritWater 37:holyWater 38:fairyDrop 39:goddessBlessing 40:wood 41:firewood 42:stone 43:scrapMetal 44:rareMetal 45:steel 46:mithril 47:pelt 48:leather 49:durableLeather 50:muddy_mucus 51:dung 52:manure 53:stench 54:smellySachet 55:magicFiber 56:dragonClaw 57:dragonLiver 58:physicalpoint 59:magicalpoint 60:specialpoint 61:wheat 62:bread 63:mushroom 64:apple 65:slimeJelly 66:wine 67:fish 68:salt 69:olive 70:honey 71:milk 72:butter 73:egg 74:beef 75:pork 76:chicken 77:mysteriousMeat 78:bakedApple 79:beefSteak 80:porkSteak 81:chickenSteak 82:meatFestival 83:grilledFish 84:anchovySandwich 85:honeyToast 86:honeyApple 87:butterToast 88:mushroomSaute 89:creamStew 90:meunier 91:baconEgg 92:iceCream 93:dessertCarnival 94:ruby 95:sapphire 96:emerald 97:topaz 98:rustySword 99:holySword 100:engagementRing 101:artificialArm 102:sin_gluttony 103:sin 104:guildPoint 105:cactus 106:palm 107:elasticLeather 108:desertSaute 109:cactusSteak 110:driedFruit 111:warriorPoint 112:sorcererPoint 113:tamerPoint 114:ePoint1 115:ePoint2 116:potato 117:corn 118:griffonFeather 119:paper 120:book 121:bakedPotato 122:cornSoup </DropDownList><ShowAsSigned>0</ShowAsSigned><VariableType>4 Bytes</VariableType><Address>+Resource.kind</Address></CheatEntry></CheatEntries></CheatEntry></CheatEntries></CheatEntry></CheatEntries></CheatEntry><CheatEntry><ID>11</ID><Description>"S"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><ShowAsSigned>0</ShowAsSigned><GroupHeader>1</GroupHeader><Address>+Main.S</Address><Offsets><Offset>0</Offset></Offsets><CheatEntries><CheatEntry><ID>12</ID><Description>"Get Current Resource By Kind"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><VariableType>Auto Assembler Script</VariableType><AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end CreateStringInputForm("BASEMainSCurrentResourceIndexByKind", "Choose Resource", "Input the Resource Type:", false, nil, nil, function(var, varName) local resourceKindArray = ResourceKind.enumTable local address = readPointer(BASE.staticAddress) address = readPointer(address + Main.S) address = readPointer(address + Save.current_resource) local baseArrayAddr = address local count = readInteger(address + _System.IntPtr.size*3) local found = false local kind = var for i=0,count do if resourceKindArray[i+1] == kind then found = true formVariables[varName] = i break end end if not found then formVariables[varName] = 0 showMessage("Resource Kind not found.") end end) {$asm} [DISABLE] {$lua} if syntaxcheck then return end formVariables.BASEMainSCurrentResourceIndexByKind = nil {$asm} </AssemblerScript><CheatEntries><CheatEntry><ID>13</ID><Description>"Value"</Description><ShowAsSigned>0</ShowAsSigned><VariableType>Double</VariableType><Address>+Save.current_resource</Address><Offsets><Offset>formVariables.BASEMainSCurrentResourceIndexByKind*8+_System.IntPtr.size*4</Offset></Offsets></CheatEntry></CheatEntries></CheatEntry><CheatEntry><ID>14</ID><Description>"Get Permanent Resource By Kind (Obscured)"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><VariableType>Auto Assembler Script</VariableType><AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end CreateStringInputForm("BASEMainSPermanentResourceActIndexByKind", "Choose Resource", "Input the Resource Type:", false, nil, nil, function(var, varName) local resourceKindArray = PermanentResourceKind.enumTable local address = readPointer(BASE.staticAddress) address = readPointer(address + Main.S) address = readPointer(address + Save.value_PermanentResource_act) local baseArrayAddr = address local count = readInteger(address + _System.IntPtr.size*3) local found = false local kind = var for i=0,count do if resourceKindArray[i+1] == kind then found = true formVariables[varName] = i break end end if not found then formVariables[varName] = 0 showMessage("Resource Kind not found.") end end) {$asm} [DISABLE] {$lua} if syntaxcheck then return end formVariables.BASEMainSPermanentResourceActIndexByKind = nil {$asm} </AssemblerScript><CheatEntries><CheatEntry><ID>15</ID><Description>"Value"</Description><ShowAsSigned>0</ShowAsSigned><VariableType>Double</VariableType><Address>+Save.value_PermanentResource_act</Address><Offsets><Offset>formVariables.BASEMainSPermanentResourceActIndexByKind*8*6+_System.IntPtr.size*4-CodeStage.AntiCheat.ObscuredTypes.ObscuredDouble.currentCryptoKey+CodeStage.AntiCheat.ObscuredTypes.ObscuredDouble.fakeValue</Offset></Offsets></CheatEntry></CheatEntries></CheatEntry></CheatEntries></CheatEntry></CheatEntries></CheatEntry></CheatEntries></CheatEntry></CheatEntries></CheatEntry><CheatEntry><ID>16</ID><Description>"Scripts"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><GroupHeader>1</GroupHeader><CheatEntries><CheatEntry><ID>17</ID><Description>"Permanent Resource Force Purchasable"</Description><Options moHideChildren="1" moDeactivateChildrenAsWell="1"/><VariableType>Auto Assembler Script</VariableType><AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end RegisterGlobalMethod("PermanentRsc_Dealing.CanPurchase") {$asm} aobscanregion(Permanent_Resource_Force_Purchasable,PermanentRsc_Dealing.CanPurchase,PermanentRsc_Dealing.CanPurchase+5000,66 * * * 0F 86 * * * * 33 C0 EB) Permanent_Resource_Force_Purchasable+04: db 90 E9 registersymbol(Permanent_Resource_Force_Purchasable) unregistersymbol(PermanentRsc_Dealing.CanPurchase) [DISABLE] Permanent_Resource_Force_Purchasable+04: db 0F 86 unregistersymbol(Permanent_Resource_Force_Purchasable) </AssemblerScript></CheatEntry></CheatEntries></CheatEntry></CheatEntries></CheatEntry></CheatEntries><UserdefinedSymbols/><LuaScript>function cycleFullCompact(sender, force) local state = not(compactMenuItem.Caption == 'Compact View') if force~=nil then state = not force end compactMenuItem.Caption = state and 'Compact View' or 'Full View' getMainForm().Splitter1.Visible = state getMainForm().Panel4.Visible = state getMainForm().Panel5.Visible = state end function addCompactMenu() if compactMenuItem and compactMenuItem.Exists then return end local menuItems = getMainForm().Menu.Items compactMenuItem = createMenuItem(menuItems) menuItems.add(compactMenuItem) compactMenuItem.Caption = 'Compact View' compactMenuItem.OnClick = cycleFullCompact compactMenuItem.Exists = true end addCompactMenu() function readIntegerSigned(addr) local val=readInteger(addr) local sign=bAnd(val,0x80000000) return sign==0 and val or val-0x100000000 end function readByteSigned(addr) local val=readBytes(addr, 1, false) local sign=bAnd(val,0x80) return sign==0 and val or val-0x100 end function mono_getAssemblyFromName(assemblyName) local assemblyIds = mono_enumAssemblies() if not assemblyIds then return nil end for _, assemblyId in ipairs(assemblyIds) do local imageId = mono_getImageFromAssembly(assemblyId) local name = mono_image_get_name(imageId) if name == assemblyName then return assemblyId end end return nil end function CreateGlobalDelimitedVariable(varString, delimiter, removeStrings) local var = _G if not delimiter then delimiter = '.' end local nameParts = {} for part in string.gmatch(varString, "([^" .. delimiter .. "]+)") do local partName = part if removeStrings then for i, rs in pairs(removeStrings) do partName = partName:gsub(rs, "") end end table.insert(nameParts, partName) end for i, part in ipairs(nameParts) do if not var[part] then var[part] = {} end var = var[part] end return var end function RegisterMonoMethodAddress(classNamespace, className, methodName, delimiter, createGlobal) if not delimiter then delimiter = '.' end local mId = mono_findMethod(classNamespace, className, methodName) if mId == 0 then mId = mono_findMethod("", className, methodName) local errorMsg = "Cannot find the " .. className .. delimiter .. methodName .. " method to register" if mId == 0 then error(errorMsg) end if classNamespace ~= string.match(mono_class_getFullName(mono_method_getClass(mId)), "(.*)[" .. delimiter .. "]") then error(errorMsg) end end local mAddr = mono_compile_method(mId) if mAddr then local symbolName = classNamespace .. delimiter .. className .. delimiter .. methodName if not classNamespace or classNamespace == '' then symbolName = className .. delimiter .. methodName end if createGlobal then if not classNamespace or classNamespace == '' then _G[className][methodName] = mAddr else local varName = classNamespace .. delimiter .. className local gVar = CreateGlobalDelimitedVariable(varName, delimiter) gVar[methodName] = mAddr end end unregisterSymbol(symbolName) registerSymbol(symbolName, mAddr, true) return mAddr end return nil end function RegisterGlobalMethod(varString, delimiter, removeStrings) if not delimiter then delimiter = '.' end if not varString:find(delimiter) then return end local methodName = string.match(varString, ".*[" .. delimiter .. "](.*)") local classFullName = string.match(varString, "(.*)[" .. delimiter .. "]") local className = classFullName local classNamespace = "" local baseVar = nil if classFullName:find("["..delimiter.."]") then className = string.match(classFullName, ".*[" .. delimiter .. "](.*)") classNamespace = string.match(classFullName, "(.*)[" .. delimiter .. "]") baseVar = CreateGlobalDelimitedVariable(classFullName, delimiter, removeStrings) else if not _G[classFullName] then _G[classFullName] = {} end baseVar = _G[classFullName] end unregisterSymbol(varString) if not baseVar[methodName] then RegisterMonoMethodAddress(classNamespace, className, methodName, delimiter, true) else registerSymbol(varString, baseVar[methodName], true) end end function ModifyAllGlobalClassesFieldsMethods(imageId, remove, safe, suppress, createFields, createMethods, excludedNamespaces, excludedClassNames, excludedMethodNames) if not imageId then return end local excludedClassIds = {} local classIds = mono_image_enumClasses(imageId) for i, class in ipairs(classIds) do if class.class and class.class > 0 then if not tableContainsValue(excludedClassIds, classId) then ModifyGlobalClassesFieldsMethods(class.class, imageId, remove, safe, suppress, createFields, createMethods, excludedNamespaces, excludedClassNames, excludedMethodNames) end table.insert(excludedClassIds, class.class) end end end function ModifyGlobalClassesFieldsMethods(classId, imageId, remove, safe, suppress, createFields, createMethods, excludedNamespaces, excludedClassNames, excludedMethodNames) if not classId or classId == 0 then return end if createFields == nil then createFields = true end if assemblyName == '' then assemblyName = nil end if not excludedClassIds then excludedClassIds = {} end local className = mono_class_getName(classId) local classFullName = mono_class_getFullName(classId) local classNamespace = mono_class_getNamespace(classId) local excluded = false local var = _G if (not classNamespace or classNamespace == '') and classFullName ~= className then classNamespace = string.match(classFullName, "(.*)[.]") end if classNamespace and classNamespace ~= '' then excluded = stringFoundInTable(classNamespace, excludedNamespaces) if excluded then return end classNamespace = classNamespace:gsub("^(System)", "_System") var = CreateGlobalDelimitedVariable(classNamespace, '.', {"`1", "`"}) else local nestedClassParentIdList = {} if mono_class_getNestingType then local nestedClassParentId = mono_class_getNestingType(classId) while nestedClassParentId and nestedClassParentId > 0 do table.insert(nestedClassParentIdList, 1, nestedClassParentId) nestedClassParentId = mono_class_getNestingType(classId) end end if nestedClassParentIdList[1] then classNamespace = mono_class_getNamespace(nestedClassParentIdList[1]) end for i, parentClassId in pairs(nestedClassParentIdList) do local parentClassName = mono_class_getName(parentClassId) parentClassName = parentClassName:gsub("`1", ""):gsub("`", "") if not var[parentClassName] then var[parentClassName] = {} end var = var[parentClassName] end end if not className then return end local classVarName = className:gsub("`1", ""):gsub("`", ""):gsub("<", ""):gsub(">", "") excluded = stringFoundInTable(className, excludedClassNames) if not excluded then if className:find("c__Iterator") or className:find("Enumerator") then excluded = true end end if remove or excluded then var[classVarName] = nil return end table.insert(excludedClassIds, classId) if var == _G and classVarName == "type" and type(var[classVarName]) == "function" then classVarName = "_" .. classVarName end if var[classVarName] and type(var[classVarName]) ~= "table" then var[classVarName] = nil end local domain = mono_enumDomains()[1] local staticFieldAddr = 0 if safe and className:find("[`<>]") then staticFieldAddr = 0 else staticFieldAddr = mono_class_getStaticFieldAddress(domain, classId) end if not staticFieldAddr and not suppress then print(className .. " failed to read static address.") end if not var[classVarName] then var[classVarName] = {} end var[classVarName].staticAddress = staticFieldAddr if createFields then CreateGlobalFields(classId, var, classVarName) end if createMethods then CreateGlobalMethods(classId, var, classVarName, className, classNamespace, excludedMethodNames, suppress) end end function CreateGlobalFields(classId, rootVar, className) for i, field in ipairs(mono_class_enumFields(classId, true)) do local fieldName = field.name if field.name:find("<") and field.name:find(">") then fieldName = string.match(field.name, "<(%w+)>") elseif field.name:find("[<>]") then fieldName = field.name:gsub("<", ""):gsub(">", "") end if not fieldName then fieldName = field.name end if fieldName ~= "" then rootVar[className][fieldName] = field.offset end local parentClass = mono_class_getParent(classId) if (field.monotype == MONO_TYPE_ENUM) or (parentClass and parentClass > 0 and mono_class_getFullName(parentClass) == "System.Enum") then if fieldName ~= "enumSeperatorCharArray" and fieldName ~= "enumSeperator" and fieldName ~= "value__" then if not rootVar[className].enumTable then rootVar[className].enumTable = {} end if not tableContainsValue(rootVar[className].enumTable, fieldName) then table.insert(rootVar[className].enumTable, fieldName) end end end end end function CreateGlobalMethods(classId, rootVar, className, oClassName, classNamespace, excludedMethodNames, suppress) for i, method in ipairs(mono_class_enumMethods(classId)) do excluded = stringFoundInTable(method.name, excludedMethodNames) if not excluded then local methodAddr = mono_compile_method(method.method) if (not methodAddr or methodAddr == 0) and not suppress then if classNamespace and classNamespace ~= '' then print(classNamespace .. '.' .. oClassName .. '.' .. method.name .. " failed to compile.") else print(oClassName .. '.' .. method.name .. " failed to compile.") end return end local methodName = method.name local count = 2 while rootVar[className][methodName] and rootVar[className][methodName] ~= methodAddr do methodName = method.name .. count count = count + 1 end rootVar[className][methodName] = methodAddr end end end function stringFoundInTable(str, strTable) if strTable and strTable ~= {} then for i, s in ipairs(strTable) do if str:lower():find(s:lower()) then return true end end end return false end function tableContainsValue(tbl, val) if tbl and tbl ~= {} then for _,v in pairs(tbl) do if v == val then return true end end end return false end function CreateStringInputForm(varName, formName, labelText, numbersOnly, width, height, func) width = width or 180 height = height or 80 if not formVariables then formVariables = {} end formVariables[varName] = nil local form = CreateBaseForm(formName, labelText, width, height) local text_box = createEdit(form) text_box.setTop(form.Height - 60) text_box.Width = form.Width - 20 text_box.anchorSideLeft.control=form text_box.anchorSideLeft.side=asrCenter local OK_Button = createButton(form) OK_Button.setTop(form.Height - 30) OK_Button.Width = form.Width - 20 OK_Button.Caption = 'OK' OK_Button.anchorSideLeft.control=form OK_Button.anchorSideLeft.side=asrCenter OK_Button.onClick = function() if numbersOnly == true then local num = tonumber(text_box.Text) if num then formVariables[varName] = num else formVariables[varName] = 0 end else formVariables[varName] = text_box.Text end if func then func(formVariables[varName], varName) end form.hide() end end function CreateDropdownForm(varName, itemArray, formName, labelText, width, height, func) if not formVariables then formVariables = {} end formVariables[varName] = nil local form = CreateBaseForm(formName, labelText, width, height) local slot_box = createComboBox(form) slot_box.setTop(form.Height - 30) slot_box.Width = form.Width - 20 slot_box.anchorSideLeft.control=form slot_box.anchorSideLeft.side=asrCenter for _, item in ipairs(itemArray) do slot_box.items.add(item) end slot_box.onChange = function() formVariables[varName] = slot_box.ItemIndex if func then func(formVariables[varName], varName, itemArray[hexItemIndex]) end form.hide() end end function CreateBaseForm(formName, labelText, width, height) width = width or 180 height = height or 50 local form = createForm() m=getmetatable(form) m.__autodestroy=true local label = createLabel(form) form.centerScreen() form.Width = width form.Height = height label.anchorSideLeft.control=form label.anchorSideLeft.side=asrCenter label.Width = form.Width - 20 control_setCaption(form, formName) control_setCaption(label, labelText) return form end </LuaScript></CheatTable>
Whoa! How do you get this to work?
- ApeDemon66
- Expert Cheater
- Posts: 226
- Joined: Sat Mar 03, 2018 7:31 am
- Reputation: 180
Re: Your Chronicle
A Cheat Table is an xml document and, instead of uploading a file, they copied and pasted all the text that was inside. To use it, I guess you could open your current Cheat Table file in a text editor, select everything, then overwrite it with the text he provided.
Re: Your Chronicle
Thank you very much!Geo wrote: ↑Fri Aug 27, 2021 5:06 pmA Cheat Table is an xml document and, instead of uploading a file, they copied and pasted all the text that was inside. To use it, I guess you could open your current Cheat Table file in a text editor, select everything, then overwrite it with the text he provided.
-
- What is cheating?
- Posts: 1
- Joined: Fri Sep 03, 2021 2:07 am
- Reputation: 0
Re: Your Chronicle
Arrrrrrr, I can't figure this out at all. All I want is to be able to play this game with pseudo unlimited rubies or bronze chests. If anyone can make this happen with a new game save I'd appreciate it.
-
- Noobzor
- Posts: 5
- Joined: Sat Mar 21, 2020 5:36 am
- Reputation: 6
Re: Your Chronicle
Struggling here too. Using Geo's latest upload from May 20th, Cheat Engine 7.2 and the Steam version of Your Chronicle:
1) Game was crashing.
2) I modified the script as Geo instructed (changed the boolean from true to false and added INamedValue and IContainer to the excluded class list). Game was still crashing, but with Jirodyne's error message about ReincarnationAction.
3) I added IReincarnationAction to the excluded class list and ReincarnationAction to the excluded method list. Game is still crashing, but with this new error:
IBigCalculateMehod.HowMuchIncreaseLevel failed to compile.
Next step?
Thanks in advance.
1) Game was crashing.
2) I modified the script as Geo instructed (changed the boolean from true to false and added INamedValue and IContainer to the excluded class list). Game was still crashing, but with Jirodyne's error message about ReincarnationAction.
3) I added IReincarnationAction to the excluded class list and ReincarnationAction to the excluded method list. Game is still crashing, but with this new error:
IBigCalculateMehod.HowMuchIncreaseLevel failed to compile.
Next step?
Thanks in advance.
- ApeDemon66
- Expert Cheater
- Posts: 226
- Joined: Sat Mar 03, 2018 7:31 am
- Reputation: 180
Re: Your Chronicle
And this is why I stopped doing it myself. It's essentially the same thing as you did before, but now there's another one you gotta do. "IBigCalculateMehod" is the class name and "HowMuchIncreaseLevel " is the method name. Put them in the appropriate exclusion areas and you should be good to go.arkenstonish wrote: ↑Sun Sep 05, 2021 3:20 pmI added IReincarnationAction to the excluded class list and ReincarnationAction to the excluded method list. Game is still crashing, but with this new error:
IBigCalculateMehod.HowMuchIncreaseLevel failed to compile.
Next step?
Side Note: in the cheat table's lua script (the script that sets everything up when you open it), I preemptively put code that would potentially work for Cheat Engine 7.3, but it doesn't after I tested it. So either don't update Cheat Engine or edit the script accordingly.
-
- Novice Cheater
- Posts: 19
- Joined: Mon Nov 27, 2017 12:48 am
- Reputation: 1
Re: Your Chronicle
does anyone know how to hack in more rubies? I can't find it. that or chest would be appreciated. and does anyone have a corrected table I could use? I have next to no experience with the script aspect of CE and its confusing me trying to figure it out.
-
- Noobzor
- Posts: 5
- Joined: Sat Mar 21, 2020 5:36 am
- Reputation: 6
Re: Your Chronicle
Hello Geo,Geo wrote: ↑Sun Sep 05, 2021 4:54 pm
And this is why I stopped doing it myself. It's essentially the same thing as you did before, but now there's another one you gotta do. "IBigCalculateMehod" is the class name and "HowMuchIncreaseLevel " is the method name. Put them in the appropriate exclusion areas and you should be good to go.
I didn't had time to fiddle with this since I last posted, and to make things easier, a new game update hit a few days ago
Tried to fix it this morning and here's where I stand. After each entry added to the class/method exclusion list, the script finds another error. So in order I got:
1) IBigCalculateMethod.HowMuchIncreaseLevel failed to compile.
2) ICache.DeleteCache failed to compile
3) IMultipleStatsBreakdown.GetAddValue failed to compile.
4) BaseStatsBreakdown.GetSummary failed to compile.
5) IBigWholeAmount.WholeAmount failed to compile.
6) Translation.TemplateContainer`1..ctor failed to compile.
7a) IFloor.MakeFloor failed to compile.
7b) Translation.TemplateContainer`1..ctor failed to compile.
8a) IBuyAmountRepository.get_Amount failed to compile.
8b) Translation.TemplateContainer`1..ctor failed to compile.
8c) <>c__DisplayClass0_0..ctor failed to compile.
8d) <>c__6`2..cctor failed to compile.
8e) <>c__7`2..cctor failed to compile.
8f) Translation.template..ctor failed to compile.
...where 8a to 8f means that those errors appeared at the same time. (same for 7a-7b)
First question: Entry 4), there is no "I" in front of BaseStatsBreakdown. I still treated it as a class, was I right?
Second question: Entries 6/7b/8b are repeating, since just typing it "as is" doesn't seem to work, which is not surprising. The method's name seems to be abbreviated or something. How do I find the correct method name to exclude? Similar thing happens with 8f.
Third question: Entry 8a looks fine, but no idea what is going on in entries 8c to 8e. (far from the usual Class.Method error)
Thanks for any help.
- ApeDemon66
- Expert Cheater
- Posts: 226
- Joined: Sat Mar 03, 2018 7:31 am
- Reputation: 180
Re: Your Chronicle
Yes, you're right. The "I" in a class name is just a conventional way of naming the class when it's specifically an interface class. If the method is failing to compile and is causing the game to crash, just do what you gotta do with my instructions.arkenstonish wrote: ↑Tue Sep 14, 2021 3:12 pmFirst question: (BaseStatsBreakdown.GetSummary), there is no "I" in front of BaseStatsBreakdown. I still treated it as a class, was I right?
So there's actually three things of importance with these. The namespace, class name, and method name. The previous ones you've worked with only showed the class name and method name because they were internal classes of the dll/assembly. However, with these, they are given a namespace named "Translation". You can put that name in the namespace exclusion area to take care of all of them. Another thing of importance is a namespace can have multiple "." in the name. Example: SuperDuper.Translation.TemplateContainer`1..ctorarkenstonish wrote: ↑Tue Sep 14, 2021 3:12 pmSecond question: Entries (Translation.TemplateContainer`1..ctor)/(Translation.TemplateContainer`1..ctor)/(Translation.TemplateContainer`1..ctor) are repeating, since just typing it "as is" doesn't seem to work, which is not surprising. The method's name seems to be abbreviated or something. How do I find the correct method name to exclude? Similar thing happens with (Translation.template..ctor).
Edit: Oh, and, if you're curious about the method's name, it has a "." in it. ".ctor". I wouldn't recommend excluding this method name as it''s used in many of the classes and I can't remember if one of my setup scripts is using one of them to find an instance.
These are actually pretty simple, but look strange. "<>c__7`2" and "<>c__DisplayClass0_0" are the class names being used. I think you can exclude them if you want, but it's possible they are failing to compile and still allow the game to run normally. See if you can ignore them. Otherwise, try excluding them. You can also put only a part of the name in the exclusion area, like so: "<>c__", if necessary.arkenstonish wrote: ↑Tue Sep 14, 2021 3:12 pmThird question: Entry (IBuyAmountRepository.get_Amount) looks fine, but no idea what is going on in entries (<>c__DisplayClass0_0..ctor) to (<>c__7`2..cctor failed). (far from the usual Class.Method error)
-
- Noobzor
- Posts: 5
- Joined: Sat Mar 21, 2020 5:36 am
- Reputation: 6
Re: Your Chronicle
Adding "Translation" into the namespace exclusion area was the last step. You were right about the "<>c__" classes, they still show up if you don't exclude them but the game doesn't crash and the table works.
Ideally my ruby count wouldn't stand at -300K but eh... I didn't do the work so no complaint here! Thanks Geo.
Also, there is a very rare monster (mimic) whose research only drops from gold chests. You need a monster's research to be able to enlist it as your ally. So if anyone comes up with a way to "adjust" the chests counter, that would be great
-
- Novice Cheater
- Posts: 19
- Joined: Mon Nov 27, 2017 12:48 am
- Reputation: 1
Re: Your Chronicle
bump to the adjusting chest totals, and if someone manages to get the table working again i would appreciate a post, cause this is official way, way over my head, i checked out about halfway through on what arkenstonish said originally
Who is online
Users browsing this forum: Google Adsense [Bot], Majestic-12 [Bot], Neobleak, osenbeichan, reskoil, softstar, tanarg, XZS, zonozonozono