SER[G]ANT Опубликовано 22 октября, 2015 Поделиться Опубликовано 22 октября, 2015 (изменено) Cheat Engine 6.5 RC2 Изменения по сравнению с RC1 Changes/fixes: * When using dissect data with mono you now get a choice if you wish to use it. Including options for always or never. (Always is the old behaviour) * Fixed PE dissection on live targets * Added " symbols around strings in the disassembler. (mov eax,"blabla" will show as "bla bla" mov eax,addresswithblabla will show as ["bla bla"] ) * fixed the simple float value with between scans * the plugin system memorybrowser context popup callback now also provides a "show" parameter (if the version is 6 or higher). * The rip relative scanner now has an option to also return the addresses of 5+ byte jmp and call instructions. (so also useful for 32-bit) * Added getInternet() to return an Internet class object you can use to download pages with. (If you don't like it add "getInternet=nil" to main.lua) * Added setLayeredAttributes(Key, Alpha, Flags) to the wincontrol class. (In win8 it can be used on controls as well, but in win7 only on forms) * Added the Handle property to the WinControl class (Hopefully I can get a new years release (+/- the 7 days after release of minor patches)) (I havn't changed the read/write* functions related to symbols. That may cause unpredicted behaviour in existing scripts) Known bug: Simple float values has no effect on next scan Русификатор подходящий под RC2https://dl.dropboxusercontent.com/u/50323360/gh/ce_ru/6.5/ru_RU.rar Изменено 30 декабря, 2015 пользователем SER[G]ANT 4 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 22 октября, 2015 Поделиться Опубликовано 22 октября, 2015 Вышла первая бета версия Cheat Engine 6.5ANT'], спасибо за добрые вести!!!Скоро и релиз. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 22 октября, 2015 Поделиться Опубликовано 22 октября, 2015 Спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
CuBiC Опубликовано 22 октября, 2015 Поделиться Опубликовано 22 октября, 2015 Спасибо, завтра буду рядом с компьютером - обязательно установлю, попробую.. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 22 октября, 2015 Поделиться Опубликовано 22 октября, 2015 (изменено) Всё бы не чего, да плагины не пашут на нем... Да ну и ладно, и без них сойдет,всё равно давно уже ими не пользуюсь... В ручную правлю то, что может изменится.Руссификатор вошел как надо прям от 6.4 - хотя тут и не велика разница то между ними... Может звук хотя бы будет проигрывать без совместимость с win 7 а то уже как то под достало везде подписывать о этой совместимости.Проверил сейчас и всё норм - совместимость ставить не надо теперь под десяткой. И не то размер трейнера стал больше или мне кажется... Ранее готовый упаковывался по х32 в 2.8 mg а теперь пустой проект упаковывает уже в 2.9 интересно... Кто бы ещо намекнул байту о том, что бы сделал бы он - что бы файлы можно было бы добавлять кучей(выделил 20 штук и сразу добавил) а не по одному торкать... Это на пример анимацию в трейнер добавлять хорошо, когда кадров по 40 штук и так далее. Изменено 22 октября, 2015 пользователем LIRW Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 22 октября, 2015 Автор Поделиться Опубликовано 22 октября, 2015 (изменено) DB многое менял\добавлял + перешёл на новую версию lua. Так что да, большинство плагинов не будут работать, скорее всего. Просто нужно подождать обновление плагинов. Со звуком там какая проблема была.Для проигрывания использовалась библиотека uFMOD, которая сама по себе нормально работает и в win8, и в win10. Но т.к. она компилировалась только по x86, то DB пришлось сделать посредника в виде XMPlayer.exe. И вот на Windows 8 и выше XMPlayer.exe не работал. Теперь же xmplayer.exe убран, а uFMOD заменён на mikmod, который нормально работает на всех системах. Кстати, теперь можно проигрывать ни только .xm файлы, но и .mod, .it А то что вес трейнера вырос, оно и понятно. Трейнер включает в себя .exe Cheat Engine и нужные для его работы файлы, которые с каждой версией всё прибавляют в кол-ве и весе.Как по мне, так DB не очень озабочен по поводу CE-трейнеров и его размера, проще говоря - пофиг (Тот же xmplayer был убран только сейчас, а не с релизом Win8). "что бы файлы можно было бы добавлять кучей"Так можно же. Насчёт русификатора. Он будет обновлён сразу после релиза 6.5 ну или сейчас можешь скачать отсюда http://forum.gamehacklab.ru/files/file/21-cheat-engine/ (правда это не окончательная его версия) Изменено 22 октября, 2015 пользователем SER[G]ANT Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 22 октября, 2015 Поделиться Опубликовано 22 октября, 2015 На 100kb размер трейнеров прибавился... А то что музон добавлять и другого формата можно - это хорошо... Хотя между ними особого размера то не ощутимо. Хотя разок был у меня mod файл и пихать стал его в СЕ,а не тут то было... пришлось конвертировать его в xm и размер прибавился с 10-20 kb а для такого то вида файла это уже многовато.Для СЕ я имею введу это не ощутимо с трейнром в 3 mg на максимальном сжатии (не CE ным встроенным) Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 23 октября, 2015 Поделиться Опубликовано 23 октября, 2015 Была у меня давно хардкорная мысль - сжать (хоть тем же UPX) СЕшные файлы (которые лежат в директории установленного СЕ), которые генератор СЕ кидает в трейнер, и собрать трейнер заново. По идее, вес трейнера на выходе должен быть намного меньше, хотя не ручаюсь, что не будет каких-то ошибок. Если интересно - можешь попробовать. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 23 октября, 2015 Поделиться Опубликовано 23 октября, 2015 Я Алекс наверное с годик уже не жал стандартным СЕ ным упаковщиком... Жал разными и выигровал было до полутра мегабайта в размере.Но потом эти пакеры стали детектится антивирусом и пришлось уйти на обычный пе компакт. В нем есть плагин написанный кем то под х64 и он жал уже файл под 2.5 mg... До выхода СЕ в версии 6.5 тут размер уже бегает в промежутке между 100-150 kb (ну на столько и прибавился вес трейнера) В общем пустой проект стал размером больше, чем уже готовый на 100-150 kb Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 23 октября, 2015 Поделиться Опубликовано 23 октября, 2015 Не слышал о таком, чтобы UPX кем-то детектился, как вирус. Некоторые антивирусы (как правило - самые бестолковые) определают программу, упакованную UPX-ом, как "Packed", но ни один антивирь из тех, что юзеры чаще используют - на UPX не ругается. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 23 октября, 2015 Поделиться Опубликовано 23 октября, 2015 (изменено) Да понаставят всякой дребидени и вот потом начинается. UPX по моему встроен в СЕ от того что он бесплатен и автор как бы не упрекнет DB за то, что то использует его в своих наработках... До этого я ииспользовал китайский упаковщик, жал очень прям не плохо и выигрывал даже у пе компакта. Но как и писал уже, люди жаловаться начали, что мол вирус там, не качает у них... Ну и из за этого пришлось сменить его,а через буквально недели 2 - Касперский стал его детектить(этот китайский упаковщик): естественно как пакер которым можно что то заныкать в файл. Называется он NsPack v3.7 Мне как бы без разницы чем упаковывать файл, лишь бы размер его уменьшить, так как 4 mg по дефолту СЕ для трейнера много... Хотя я видел и по 50 мегабайт трейнеры и не чего люди вроде бы в комментариях этим не упрекали. Изменено 23 октября, 2015 пользователем LIRW Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 23 октября, 2015 Поделиться Опубликовано 23 октября, 2015 uPack. Хотя некоторые упоротые антивирусы тоже ложное срабатывание на нем допускают. Ссылка на комментарий Поделиться на другие сайты Поделиться
CuBiC Опубликовано 23 октября, 2015 Поделиться Опубликовано 23 октября, 2015 Я лично перестал заморачиваться по поводу упаковщика - выкладываю не сжатые версии трейнеров.. Пусть лучше люди нормально пользуются, чем будут опасаться ругательств антивируса! Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 23 октября, 2015 Поделиться Опубликовано 23 октября, 2015 Из новых окон я увидел только окно, которое ищет изменённые права регионов памяти (ну и наверно блоков памяти). Из визуальных изменений вроде больше ничего. Много изменений по Lua функционалу. Могу выделить 8 моментов. Появились функции работы с локализацией Брейкпоинт можно связывать с Lua функцией (теперь это не одна общая функция) Класс DissectCode я надеюсь теперь позволяет получить список адресов определенных инструкций, если не из всех, то из большинства найденных (прыжки, условные прыжки, вызовы) Новые классы по работе со структурами Новый класс TreeView. С его помощью можно попарсить трейслоги, т.к. они в TreeView компонентах Календарик появился. Мелочь, а приятно. Дату и время сохранить в нужном моменте. setUserRegistryEnvironmentVariable(name, string) позволит запомнить название и строковый параметр в "историю". Если надо будет прочитать, то getUserRegistryEnvironmentVariable(name): string. stringToMD5String(string): Returns an md5 hash string. Позволит данные строки прохешировать в md5. Например, первые 255 байт текстуры переводим в строку и хешируем. Запоминаем эту текстуру по хешу. Есть новое по dbvm и dbk, но практическое применение их не очень понимаю. Это что-то типа двойной отладки, т.е. отладки отладки. Более полное описание "нового" собрал по памяти из main.lua. Некоторые классы уже были, но в них новые функции. В общем кому интересно. Могут попадаться и старые функции, т.к. не помню точно. reloadSettingsFromRegistry(): This will cause cheat engine to reload the settings from the registry and apply themgetTranslationFolder(): Returns the path of the current translation files. Empty if there is no translation going onloadPOFile(path): Loads a .PO file used for translationtranslate(string): Returns a translation of the string. Returns the same string if it can't be foundtranslateID(translationid: string, originalstring: string OPTIONAL): Returns a translation of the string iderrorOnLookupFailure(state): If set to true (default) address lookups in stringform will raise an error if it can not be looked up. This includes symbolnames that are not defined and pointers that are bad. If set to false it will return 0 in those cases(Useful for pointers that don't work 100% of the time)6.4+:Returns the original stategetUserRegistryEnvironmentVariable(name): string - Returns the environment variable stored in the user registry environmentsetUserRegistryEnvironmentVariable(name, string) - Sets the environment variable stored in the user registry environmentbroadcastEnvironmentUpdate() : Call this when you've changed the environment variables in the registry. This will cause at least the shell to update so you don't have to reboot. (It's always recommended to reboot though)stringToMD5String(string): Returns an md5 hash string from the provided stringregisterFormAddNotification(function(form)): Registers a function to be called when a form is attached to ce's form list. This is useful for extentions that add new functionality to certain existing forms. It returns an object you can use with unregisterFormAddNotificationunregisterFormAddNotification(Object)getSettingsForm(): Returns the main settings formgetLuaEngine() : Returns the lua engine form object (Creates it if needed)reinitializeDotNetSymbolhandler(modulename OPTIONAL): Reinitializes only the DotNet part of the symbol list. (E.g After an ILCode has been JITed) (6.4+)registerAutoAssemblerCommand(command, function(parameters, syntaxcheckonly)): Registers an auto assembler command to call the specified function. The command will be replaced by the string this function returns when executed. The function can be called twice. Once for syntax check and symbol lookup(1), and the second time for actual execution by the assembler(2) if it has not been removed in phase1.Note: The callback function can return multiple valuesNil, 'String': Will raise an error with the given stringMultilineString: Replaces the line in the script with the given strings.If the function returns nil, and as secondary parameter a string, this will make the auto assembler fail with that errorunregisterAutoAssemblerCommand(command)registerSymbolLookupCallback(function(string):integer, location): ID 6.4+Registers a function to be called when a a symbol is parsedLocation determines at what part of the symbol lookup the function is calledslStart: The very start of a symbol lookup. Before tokenizationslNotInt: Called when it has been determined it's not a hexadecimal only string. Before tokenization--The following locations can be called multiple times for one string as they are called for each token and appended tokenslNotModule: Called when it has been determined the current token is not a modulenameslNotUserdefinedSymbol: Called when it has been determined it's not a userdefined symbolslNotSymbol: Called when it has been determined it's not a symbol in the symbollistslFailure: Called when it has no clue what the given string isNote: slNotSymbol and slFailure are similar, but failure comes only if there's no token after the current token that can be concatenated. Else slNotSymbol will loop several times till all tokens make up the full stringReturn an Integer with the corresponding address if you found it. Nil or 0 if you didn't.unregisterSymbolLookupCallback(ID): Removes the callbackregisterAddressLookupCallback(function(integer):string): IDRegisters a function to be called when the name of an address is requestedunregisterAddressLookupCallback(ID): Removes the callbackregisterStructureDissectOverride(function(structure, baseaddress): table):same as onAutoGuess, but is called by the structure dissect window when the user chooses to let cheat engine guess the structure for him.Use the structure object to fill it inReturn true if you have filled it in, or false or nil if you did notTip: Use inputQuery to ask the user the size if your function doesn't do that automaticallyunregisterStructureDissectOverride(ID)registerStructureNameLookup(function(address): name, address OPTIONAL):Registers a function to be called when dissect data asks the user for the name of a new structure define. If you have code that can look up the name of a structure, and perhaps also the real starting point, you can use this to improve the data dissection.unregisterStructureNameLookup(ID)registerAssembler(function(address, instruction):bytetable)Registers a function to be called when the single line assembler is invoked to convert an instruction to a list of bytesReturn a bytetable with the specific bytes, or nil if you wish to let another function, or the original x86 assembler to assemble itunregisterAssembler(ID): Unregisters the registered assemblerregisterAutoAssemblerPrologue(function(script, syntaxcheck))Registers a function to be called when the auto assembler is about to parse an auto assembler script. The script you get is after the [ENABLE] and [DISABLE] tags have been used to strip the script to the according one, but before comment stripping and trimming has occuredscript is a Strings object which when changed has direct effect to the scriptunregisterAutoAssemblerPrologue(ID)registerCustomTypeLua(typename, bytecount, bytestovaluefunction, valuetobytesfunction, isFloat)Registers a Custom type based on lua functionsThe bytes to value function should be defined as "function bytestovalue (b1,b2,b3,b4)" and return an integer as resultThe value to bytes function should be defined as "function valuetobytes (integer)" and return the bytes it should writeregisterCustomTypeAutoAssembler(script)Registers a custom type based on an auto assembler script. The script must allocate an "ConvertRoutine" and "ConvertBackRoutine"onAutoGuess(function) :Registers an function to be called whenever autoguess is used to predict a variable typefunction override (address, ceguess): Return the variable type you want it to be. If no change, just return ceguessdebug_getCurrentDebuggerInterface() : Returns the current debuggerinterface used (1=windows, 2=VEH 3=Kernel, nil=no debugging active)debug_canBreak(): Returns true if there is a possibility the target can stop in a breakpoint. 6.4+debug_getBreakpointList(): Returns a lua table containing all the breakpoint addressesdebug_addThreadToNoBreakList(threadid): This will cause breakpoints on the provided thread to be ignoreddebug_removeThreadFromNoBreakList(threadid): removed the threadid from the listdebug_setBreakpoint(address, size OPTIONAL, trigger OPTIONAL, breakpointmethod OPTIONAL, functiontocall() OPTIONAL) : sets a breakpoint of a specific size at the given address. if trigger is bptExecute then size is ignored. If trigger is ignored then it will be of type bptExecute, which obviously also ignores the size then as welldebug_setBreakpoint(address, size OPTIONAL, trigger OPTIONAL, functiontocall() OPTIONAL)debug_setBreakpoint(address, functiontocall() OPTIONAL)getHeader(address) : Gets the userdefined header at the specified addresssetHeader(address) : Sets the userdefined header at the specified addressregisterBinUtil(config) Registers a binutils toolset with CE (for assembling and disassembling in other cpu instruction sets)config is a table containing several fields that describe the tools, and lets you specify extra parametersName : The displayed name in the binutils menu in memviewDescription: The description for this toolsetArchitecture: used by the objdump -m 'architecture' (required)ASParam : extra parameters to pass on to AS (optional)LDParam : extra parameters to pass on to LDOBJDUMPParam: extra parameters to pass on to OBJDUMPOnDisassemble: a lua function that gets called each time an address is disassembled. The return value will be passed on to OBJDUMPPath: filepath to the binutils setPrefix: prefix (e.g: "arm-linux-androideabi-")DisassemblerCommentChar: Depending on which target you're disassembling, the comment character can be different. (ARM=";" x86='#' )--------Settings classThis class can be used to read out and set settings of cheat engine and of plugins, and store your own dataglobal functionsgetSettings(path Optional): Settings - Returns a settings object. If path is nil it will points to the Cheat Engine main settings (Registry) . If name is provides the settings currently accessed will be the one at the subkey providedNote: Keep in mind that it returns a new object each call, even if he same name is used multiple timespropertiesPath: string - Gets/Sets the current subkey (nil if main)Value[]: A table access into the settings. e.g: Value["Count"]=12methods----SymbolList classThis class can be used to look up an address to a symbolname, and a symbolname to an addressIt can also be registered with the internal symbol handler of cheat engineThis class makes use of a special "Symbol" table construction that contains size and optionally other dataSymbol Table:modulename: stringsearchkey: stringaddress: integersymbolsize: integerGlobal functionscreateSymbolList() : Creates an empty symbollistPropertiesMethodsclear()getSymbolFromAddress(address) : Searches the list for the given address. The address does not have to match the exact address. As long as it falls withing the rangegetSymbolFromString(searchkey)addSymbol(modulename, searchkey, address, symbolsize, skipAddressToSymbolLookup OPTIONAL, extradata OPTIONAL)Adds a symbol to the symbollistextradata is a table which can be used to fill in a return type and parameters for function calls. It has the following fields:returntype: stringparameters: stringdeleteSymbol(searchkey)deleteSymbol(address)register() : Registers the current symbol list with the symbol handlerunregister(): Unregisters the current symbol list from the symbol handler------DissectCode class: (Inheritance: Object)getDissectCode() : Creates or returns the current code DissectCode objectproperties:methods:clear() : Clears all datadissect(modulename) : Dissects the memory of a moduledissect(base,size) : Dissect the specified memory regionaddReference(fromAddress, ToAddress, type, OPTIONAL isstring):Adds a reference. Type can be jtCall, jtUnconditional, jtConditional, jtMemoryIn case of rtMemory setting isstring to true will add it to the referenced strings listdeleteReference(fromAddress, ToAddress)getReferences(address) : Returns a table containing the addresses that reference this address and the typegetReferencedStrings(): Returns a table of addresses and their strings that have been referenced. Use getReferences to find out which addresses that aresaveToFile(filename)loadFromFile(filename)--------Disassembler Class (Inheritance: Object)createDisassembler() - Creates a disassembler object that can be used to disassemble an instruction and at the same time get more datagetDefaultDisassembler() - Returns the default disassembler object used by a lot of ce's disassembler routinesgetVisibleDisassembler() - Returns the disassembler used by the disassemblerview. Special codes are: {H}=Hex value {R}=Register {S}=Symbol {N}=Nothing specialregisterGlobalDisassembleOverride(function(sender: Disassembler, address: integer, LastDisassembleData: Table): opcode, description): Same as Disassembler.OnDisassembleOverride, but does it for all disassemblers, including newly created ones. Tip: Check the sender to see if you should use syntax highlighting codes or notThis function returns an ID you can pass on to unregisterGlobalDisassembleOverride() 6.4+unregisterGlobalDisassembleOverride(id)propertiesLastDisassembleData : TableOnDisassembleOverride: function(sender: Disassembler, address: integer, LastDisassembleData: Table): opcode, descriptionsyntaxhighlighting: boolean : This property is set if the syntax highlighting codes are accepted or notMethodsdisassemble(address): Disassembles the given instruction and returns the opcode. It also fills in a LastDisassembleData recorddecodeLastParametersToString() : Returns the unedited "Comments" information. Does not display userdefined commentsgetLastDisassembleData() : Returns the LastDisassembleData table.The table is build-up as follow:address: integer - The address that was disassembledopcode: string - The opcode without parametersparameters: string - The parametersdescription: string - The description of this opcodebytes: table - A table containing the bytes this instruction consists of (1.. )modrmValueType: DisAssemblerValueType - Defines the type of the modrmValue field (dvtNone=0, dvtAddress=1, dvtValue=2)modrmValue: Integer - The value that the modrm specified. modrmValueType defines what kind of valueparameterValueType: DisAssemblerValueTypeparameterValue: Integer - The value that the parameter part specifiedisJump: boolean - Set to true if the disassembled instruction can change the EIP/RIP (not ret)isCall: boolean - Set to true if it's a CallisRet: boolean - Set to true if it's a RetisConditionalJump: boolean - Set to true if it's a conditional jump---------Structure class related functions:getStructureCount(): Returns the number of Global structures. (Global structures are the visible structures)getStructure(index): Returns the Structure object at the given indexcreateStructure(name): Returns an empty structure object (Not yet added to the Global list. Call structure.addToGlobalStructureList manually)----------StructureFrm class:createStructureForm(address)properties:Column[index]: structColumn - Fetches a structColumn object from the structure formGroup[index]: structGroup - Fetches a structGroup object from the structure formmethods:structChange() : Forces a refreshaddColumn(): Adds a new column in the currently focuses group and returns it's structColumn objectaddGroup(): Adds a new group and returns the structGroup object-----------------structColumn class:properties:Address: integer - The current addressAddressText: string - Gets/sets the visual addressFocused: boolean - Gets/sets the focused statemethods:focus(): focuses the current column---------structGroup class:properties:name: string - gets the current namebox: Groupbox - Gets the groupbox objectcolumnCount: integer- Gets the number of columns in the groupcolumns[index]: structColumn - Returns the specific structColumn objectmethods:addColumns(): Adds a new columns to the specific group and returns it's structColumn objecy------------------------structure class: (Inheritance: Object)Properties:Name: String - The name of the structureSize: Integer - The number of bytes between the last element and the start. ReadOnlyCount: Integer - Number of elements in the structure. ReadOnlyElement[]: structureElement - Returns the structure element at the given index. ReadonlyMethods:getName(): Returns the namesetName(name): Sets the namegetElement(index): Returns a structureElement object (Changing offsets can change the index)getElementByOffset(offset): Returns a structureElement object where the specified offset is at least the requested offsetaddElement(): Adds a new blank structureElement and returns itautoGuess(baseaddresstoguessfrom, offset, size)fillFromDotNetAddress(address, changeName): Fills the structure with the layout gathered from querying .NET. If changeName is true, the structure will take the name of the .NET class. (6.4+)beginUpdate(): Call this when you want to make multiple updates to a structure. It will speed up the update processendUpdate(): Call this when doneaddToGlobalStructureList(): Add this to the list of structures for the user to select from. (Global structures will get saved to the table)removeFromGlobalStructureList(): Remove from the list of structures.---------------StructureElement class: (Inheritance: Object)Properties:Owner: structure - The structure this element belongs to. ReadonlyOffset: integer - The offset of this elementName: string - The name of this elementVartype: integer - The variable type of this elementChildStruct: structure - If not nil this element is a pointer to the structure defined hereChildStructStart: integer - The number of bytes inside the provided childstruct. (E.g: It might point to offset 10 of a certain structure)Bytesize: integer - The number of bytes of this element. Readonly for basic types, writable for types that require a defined length like strings and array of bytesMethods:getOwnerStructure(): Returns the structure this element belongs togetOffset(): Returns the offset of this elementsetOffset(offset): Sets the offset of this elementgetName(): Returns the name of this elementsetName(name): Sets the name of this element (tip: Leave blank if you only want to set the name of the variable)getVartype(): Returns the variable type of this element (check Variable types in defines.lua)setVartype(vartype)getChildStruct()setChildStruct(structure)getChildStructStart()setChildStructStart(offset)getBytesize(): Gets the bytesize of the element. Usually returns the size of the type, except for string and aobsetBytesize(size): sets the bytesize for types that are affected (string, aob)-----------Application Class: (Inheritance: CustomApplication->Component->Object)propertiesTitle: The title of cheat engine in the barmethodsbringToFront(): Shows the cheat engine app------------Calendar Class: (Inheritance: WinControl->Control->Component->Object)createCalendar(owner): Creates a Calendar class object which belongs to the given owner. Owner can be any object inherited from WinControl. Valid date is between "September 14, 1752" and "December 31, 9999"propertiesDate: string - current date of the Calendar, format: yyyy-mm-ddDateTime: number - days since December 30, 1899methodsgetDateLocalFormat - returns current date of the Calendar, format: ShortDateFormat from OS local settings----------Полное описание следующих классов не буду приводитьListview сlassTreeNode classTreeNodes class... Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 24 октября, 2015 Автор Поделиться Опубликовано 24 октября, 2015 (изменено) Я, помню, попросил DB сделать возможность перевода строк из скриптов в папке autorun. И чуть позже появились "функции работы с локализацией".Возможно эта функция отвечает за этоtranslate(string): Returns a translation of the string. Returns the same string if it can't be foundНо не пойму как её применить. Ладно бы если это было translate(оригинал;перевод), а так, не понятно Изменено 24 октября, 2015 пользователем SER[G]ANT Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 24 октября, 2015 Поделиться Опубликовано 24 октября, 2015 print(translate('Open'))print('Путь текущего файла перевода ' .. getTranslationFolder())--Примеры переводаprint(translate('Close'))print(translate('Yes'))print(translateID('addresslist.rswhatvaluetochangethisto'))Если выпонить код, то выведетПуть текущего файла перевода C:\Program Files (x86)\Cheat Engine 6.5\languages\ru_RU\ Открыть Закрыть Да на какое значение изменить? translate() и translateID() возвращает перевод того "*.po" файла, который загружен.Это значит если хотим перевести с английского на русский, то надо чтобы был загружен русский "*.po".Если хотим русского на английский сразу и без перезагрузки CE, то похоже никак не сделать. Потому что loadPOFile(getCheatEngineDir()..'languages\\cheatengine-x86_64.po') не работает, язык только в ini переключать и перезагружать CE. В общем с русского на английский у меня не получилось получить перевод. Надо писать парсер двух .po файлов на lua, больше никак. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 26 октября, 2015 Поделиться Опубликовано 26 октября, 2015 Сейчас заметил одни баг. Трейнер нельзя запустить после того, как запущена уже игра. Ошибка в луа будет. Ну это бета и как бы что то от неё ожидать полноценного то и не стояло.Мне просто попадались игры на движках вроде вольфенштейна первого и на пример hl ,амнезия и тому подобных.. И всегда надо было запускать трейнер уже после запуска игры, не аттачился что то он нормально к процессу, а в этом я не пробовал ещо,но думаю это дело поправили.. Щас вот исправлял трейнер и запустил его уже после запуска игры и вылезла ошибка луа, без всего - просто окно луа с выполнением,а так бы и не заметил данной проблемы. Вчера я на это не обратил внимания - подумал баг какой то,а сегодня ситуация повторилась. Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 26 октября, 2015 Автор Поделиться Опубликовано 26 октября, 2015 отправил репорт Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 26 октября, 2015 Поделиться Опубликовано 26 октября, 2015 отправил репортОна просто висит,её можно закрыть и пользоваться трейнером дальше,но опять же это баг - так не должно быть. А то что отправил - спасибо Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 26 октября, 2015 Автор Поделиться Опубликовано 26 октября, 2015 А у меня другая проблема, музыка не прекращает играть. А Если выбрать прекращение проигрывания, когда трейнер теряет фокус, то ещё и луа ошибки сыпятся. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 26 октября, 2015 Поделиться Опубликовано 26 октября, 2015 У меня Сержант с музыкой нормально всё. Я уже наверное трейнеров 5 сделал на бета СЕ и такой проблемы не замечал. Ну у каждого как бы свои они,в смысле ошибки то... Из за версии win тоже наверное могут быть... Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 29 октября, 2015 Автор Поделиться Опубликовано 29 октября, 2015 Вышла вторая бэта, ссылку обновил. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 30 октября, 2015 Поделиться Опубликовано 30 октября, 2015 Вышла вторая бэта, ссылку обновил.Попробуем, спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 1 ноября, 2015 Поделиться Опубликовано 1 ноября, 2015 (изменено) Вышла вторая бэта, ссылку обновил. Закачивает почему то Beta 1 а не Beta 2 или нужно орентироваться по rev2149 Изменено 1 ноября, 2015 пользователем Dison Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 1 ноября, 2015 Поделиться Опубликовано 1 ноября, 2015 Закачивает почему то Beta 1 а не Beta 2 или нужно орентироваться по rev2149Я кстати тоже об этом подумал поставил,включил,а там написано бета 1 - я ещо подумал, может перепутал со старой бетой exe файл, но нет - дата создания была разной Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения