-
Постов
2 999 -
Зарегистрирован
-
Победитель дней
129
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные MasterGH
-
-
Скорее всего, проблема совместимости и её нужно сначала определить
Можно проверить формат поинтера. Внимание на формат поинтера с кавычками и без "game.exe+ " и game.exe+.
Можно проверить на совместимость. Создать таблицу с нуля на 6.8.1. На 6.8.1 попробуй сделать новую таблицу и руками забить такие же данные как в 6.7
12 часов назад, Alex2411 сказал:когда выделяешь в таблице темно синий цвет полосы как поменять ?
Писать DarkByte на его форум. Скорее всего, просто так его не изменить. Нет опций, не нашел ничего на Lua для этого. На Lazarus и Delphi есть примеры замены цвета на ListBox-е на обработчике "ListBox1DrawItem"
Спойлерprocedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); begin with ListBox1.Canvas do begin if odFocused in State then Brush.Color := clHighlight else Brush.Color := clWindow; FillRect(ARect); TextOut(ARect.left, ARect.Top, Listbox1.Items[Index]); if odFocused in State then DrawFocusRect(ARect); end end;
Открывать исходники Cheat Engine и разбираться как вообще это делается, а потом думать как это сделать в текущей версии CE. Проще спросить у DarkByte
-
2 часа назад, Alex2411 сказал:
в таблице не изменяються значения когда они изменилсь в игре. в 6.7
1. Повторить баг с программой gtutorial-i386.exe на версиях CE 6.7: с cheatengine-x86_64.exe и с cheatengine-i386.exe
2. Прислать ссылки на две таблицы
Дальше посмотрим...
-
Есть еще способ — автоматизировать действия пользователя. За пару секунд или более при старте системы само все настроится и закроется. Любой язык программирования + WinAPI или подходящие программы по автоматизации действий для Windows
-
В 02.07.2018 в 18:14, Ceyzer сказал:
Абсолютно бестолковое видео для новичков
Я предлагаю Вам писать негативные сообщения модератору или администрации, или через кнопку жалоба. Не нужно авторам видео, статей читать этот негатив.
Предлагаю смотреть на правила форума. Там ничего не написано про Ваши замечания.
- 1
-
5 часов назад, mrPTyshnik сказал:
2017.4.2f2
Последний модуль для unity-2017.3.0. Ждать появления здесь
Можешь сам пропатчить или собрать под 2017.4.2f2, сравнивая модули. Я без понятия что и как там. Надо разбираться
5 часов назад, mrPTyshnik сказал:я никогда не юзал dnSpy для отладки игр на Unity. CE(mono dissector) + анализ ASCHARP.dll вот и все.
С CE monodessector понятно. А вот ASCHARP.dll в первый раз вижу. К сожалению, не нагуглил ничего
-
4 часа назад, srg91 сказал:
Поэтому можно попробовать поставить обычный Python, проверить что в нём работает asyncio, доустановить нужные AirtestIDE модули и указать его как основной для AirtestIDE.
Поставил. Логи
СпойлерСпойлер"C:\AirtestIDE\AirtestIDE" runner "C:\AirtestIDE\Scripts Poco\DELETE.air" --log "C:\Users\Andrew\AppData\Local\Temp\AirtestIDE\scripts\85cd626315484cdf6cffe357149cae40" ============================================================ [Start running..] add sys.path: ['C:\\Python27\\Lib'] do not connect device save log in 'C:\Users\Andrew\AppData\Local\Temp\AirtestIDE\scripts\85cd626315484cdf6cffe357149cae40' ====================================================================== [Finished] ERROR: setUpClass (app.widgets.code_runner.ide_launcher.AirtestIDECase) ---------------------------------------------------------------------- Traceback (most recent call last): File "airtest\cli\runner.py", line 28, in setUpClass File "airtest\cli\runner.py", line 133, in setup_by_args File "airtest\core\api.py", line 105, in auto_setup File "airtest\core\api.py", line 62, in connect_device File "airtest\core\api.py", line 31, in init_device File "airtest\core\helper.py", line 108, in import_device_cls File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 673, in _load_unlocked File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module File "airtest\core\android\android.py", line 10, in <module> File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 673, in _load_unlocked File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module File "airtest\core\android\ime.py", line 3, in <module> File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 673, in _load_unlocked File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module File "airtest\core\android\yosemite.py", line 3, in <module> File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 673, in _load_unlocked File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module File "airtest\utils\apkparser\__init__.py", line 1, in <module> File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 673, in _load_unlocked File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module File "airtest\utils\apkparser\apk.py", line 20, in <module> File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 673, in _load_unlocked File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module File "airtest\utils\apkparser\axmlprinter.py", line 23, in <module> File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 673, in _load_unlocked File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module File "xml\sax\saxutils.py", line 6, in <module> File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 673, in _load_unlocked File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module File "urllib\request.py", line 88, in <module> File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 673, in _load_unlocked File "e:\project\idepy3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module File "http\client.py", line 1218, in <module> File "C:\Python27\Lib\ssl.py", line 134 except socket_error, e: ^ SyntaxError: invalid syntax ---------------------------------------------------------------------- Ran 0 tests in 0.060s FAILED (errors=1) ============================================================
Я думаю мы с этой проблемой очень много времени и сил потратим. По этому забьем.
Я думаю, сделаю свою функцию ожидания распознавания картинки и в ней впишу try/catch и проверку на картинки случайных диалогов.
-
18 часов назад, srg91 сказал:
Напомни, пожалуйста, где взять приложение через которое ты запускаешь?
Есть версия и под Mac (последняя 0.1.3)
Запустил
import sys message = 'Executable: {}\nVersion: {}'.format(sys.executable, sys.version) raise Exception(message)
Результат
-
-
Привет. Запустил. Логи
СпойлерЦитата[Start running..]
do not connect device
save log in 'C:\Users\Andrew\AppData\Local\Temp\AirtestIDE\scripts\85cd626315484cdf6cffe357149cae40'
[12:09:22][DEBUG]<airtest.core.android.adb> C:\AirtestIDE\airtest\core\android\static\adb\windows\adb.exe devices
[12:09:22][DEBUG]<airtest.core.android.adb> C:\AirtestIDE\airtest\core\android\static\adb\windows\adb.exe devices
3.5.3 (v3.5.3:1880cb95a742, Jan 16 2017, 16:02:32) [MSC v.1900 64 bit (AMD64)]
----------------------------------------------------------------------
Ran 1 test in 0.303sOK
[Finished] -
Версия Python 3.5.3
В Python плохо шарю. Ищу варианты написания сопрограмм и предлагаю желающим помочь мне с кодом на Python
Исходник
Спойлер# -*- encoding=utf8 -*- __author__ = "gzliuxin" __title__ = "test script title" __desc__ = """ this is a test script. """ # install demo apk PKG = "com.NetEase.PocoDemo" if PKG not in device().list_app(): import os path = os.path.join(args.script, "poco-demo.apk") device().install_app(path) # restart app stop_app(PKG) start_app(PKG) wait(Template(file:///C:/AirtestIDE/Scripts Poco/unitydemo.air/tpl1522812811402.png, record_pos=(0.001, -0.084), resolution=(1920, 1080))) # init UnityPoco from poco.drivers.unity3d import UnityPoco poco = UnityPoco() poco(text="Start").click() poco(text="basic").click() # assert empty result = poco(type="Text", name="Text").get_text() assert_equal(bool(result), False) # input text poco(type="InputField").set_text("Hello World") sleep(1.0) # assert text result = poco(type="Text", name="Text").get_text() assert_equal(result, "Hello World") poco(text="Back").click()
Вопрос1. Как выполнять отдельной сопрограммой код ниже или любой другой на Python 3.5.3?
wait(Template(file:///C:/AirtestIDE/Scripts Poco/unitydemo.air/tpl1522812811402.png, record_pos=(0.001, -0.084), resolution=(1920, 1080))) if exists(Template(file:///C:/AirtestIDE/Scripts Poco/unitydemo.air/tpl1522812811402.png, record_pos=(0.001, -0.084), resolution=(1920, 1080))): poco(text="Start").click()
Попытка из Гугла
Спойлерimport asyncio @asyncio.coroutine def hello_world(): print("Hello World!") loop = asyncio.get_event_loop() # Blocking call which returns when the hello_world() coroutine is done loop.run_until_complete(hello_world()) loop.close()
Ошибка с импортом модуля:
Вопрос2. Как импортировать этот модуль? Или через другой код сопрограмм
-
Обновление Cheat Engine
СпойлерЦитатаJune 23 2018:Cheat Engine 6.8.1 Released:
Apparently 6.8 contained a couple of annoying bugs, so here's an update that should hopefully resolve most issues.
Also a few new features that can come handy
Download: Cheat Engine 6.8.1
Fixes:- Fixed several issues with the structure compare
- Fixed the commonality scanner from picking up unrelated registers for comparison
- Fixed speedhack hotkeys
- Fixed ultimap 1
- Fixed a bunch of random access violations
- Fixed Lua dissectCode.getStringReferences now also returns the string
- Fixed Lua breakpoints that specify a specific function
- Fixed Lua toAddress when the 2nd parameter is an address
- Fixed assembling xmm,m32
- Fixed issue when disassembling AVX instructions
- Fixed rightclicking r8-r9 in the registers window
- Fixed the plugin system for DBVM
- Fixed DBVM memory allocations when smaller than 4KB
- Additions and changes:
- Added translation strings for the all type settings
- You can now drop files into the auto assembler
- auto assembler commands allocnx (allocate no execute) and allocxo (allocate execute only)
- The memoryview windows's hexadecimalview now shows the allocationbase as well, and can be doubleclicked to go there
- Added support for mono dll's that do not export g_free
- Changed "make page writable" to multiple options
- Improved DBVM speed slightly
- Lua:
- added RemoteThread class object
- 1
-
7 часов назад, HaskyGame сказал:
взломать адрес жизни утки, но не могу его найти, и не понимаю как его вообще найти
В теории:
1. Поиск адреса брони или поиск адреса координаты, или поиск счетчиков вызовов call-ов через Ultimap о проигрышах;
2. Далее по коду до условия проигрыша. Исправить условие проигрыша
-
Много информации в этой теме и сложно разбираться без заголовков тем. Закрываю
-
2 часа назад, Razi сказал:
а запись тогда как делать в адрес в hex формате?
Если CE 6.8, то
Спойлерfor x = 1, 3 do local address = 0x009E93E0 + x * 4 local stringValue = CEEditsnowbt[x].Text local intValue = tonumber(stringValue) writeInteger(address, intValue) end
Если CE 6.7 и ниже
Спойлерfor x = 1, 3 do local address = 0x009E93E0 + x * 4 local stringValue = CEEditsnowbt[x].Text local intValue = tonumber(stringValue,16) writeInteger(address, intValue) end
В "CEEditsnowbt[x].Text" должна быть строка с префиксом "0x", т.е. "0x100" например
Предлагаю использовать пошаговую отладку Lua для разбора какие значения в каких переменных.
Спойлер- 1
-
Не такой команды
tonumer
В CE 6.8 не работает вариант
tonumber("0x9999",16). Работает tonumber("0x9999")
Спойлерfunction DecToHex(stringValue) return string.format('0x%08X', stringValue) end function HexToDec(stringValue) return tonumber(stringValue) end function CEButton1Click(sender) UDF1.CEEdit1.Text = DecToHex(100) end function CEButton2Click(sender) local value = HexToDec(UDF1.CEEdit1.Text) print(value) end
-
-
-
3 часа назад, Garik66 сказал:
А где хумор?
Спойлер- 1
-
На официальном сайте вышла 6.8
-
Не тестил, может не работать
-- "QQQQQQQXXXXXXXXX" двигаем 2-х байтовое значение вправо на 9, влево на 7 local address = 0x00241B70 local value = readSmallInteger(address) local firstParam = bShr(value, 9) local secondParam = bShl(value, 7) print("firstParam = ".. firstParam) print("secondParam = ".. secondParam)
-
18 часов назад, temtriss сказал:
Но по итогу игра получает FALSE всегда, даже для тех окон которые прятать не нужно. т.к. я не получаю заголовок окна.
В принципе работает и ладно, но очень хотелось бы разобратся почему так.
GetLastError показывает 2 кода
0x12 или 0x2
Судя по коду игра может всегда возвращать FALSE. Других return не видно. Возможно еще стоит написать обработчик исключения и вывод информации. Можно прогнать под пошаговой отладкой в отладчике
Коды ошибок при работе с файлами
-
3 часа назад, DieVis сказал:
Неужели таки, в 6.7 я этого не мог найти.
Верно
9 часов назад, SER[G]ANT сказал:Added a "revert to saved scan" option (lets you undo changes)
Added a "forgot scan" option (in case you forgot what you're doing)При сканировании
43 минуты назад, X86Jumps сказал:поиск в trace не пофиксили?
А что с ним не так было?
Работает фильтр на конечное условие и на поиск этого условия. На начальное условие не смотрел
Спойлер -
Изменения в Lua при сравнении файлов. Возможно позже напишу, что интересного можно делать в новой бета версии CE
СпойлерwritePointer(address,value) writePointerLocal(address,value) У enumModules(processid OPTIONAL): Name : String containing the modulename reinitializeSelfSymbolhandler(waittilldone: BOOLEAN OPTIONAL, default=TRUE): reinitializes the selfsymbolhandler. E.g when new modules have been loaded to CE process registerStructureAndElementListCallback(function StructureListCallback(), function elementlistcallback(id1,id2) ) : Registers a function to be called when a structure needs to be dissected function StructureListCallback() will be a function that returns an array of list of structures in table format the entries are build up as: name: string - name of the structure id1: integer - id you can use for whatever(e.g moduleid). It will be passed on to elementlistcallback when this structure is picked id2: integer - id you can use for whatever(e.g structureid inside the module). It will be passed on to elementlistcallback when this structure is picked function elementlistcallback(id1,id2) will be a function that returns an array of structure elements in table format the entries are build up as: name: string offset: integer vartype: variabletype (look up vtByte, vtWord, etc..) tip: If you return an empty table the structure will not be created. You can use this to create the structure layout yourself and register that instead unregisterStructureAndElementListCallback(ID) showSelectionList(title, caption, stringlist, allowCustomInput OPTIONAL): integer,string - Shows a menu with the given list. It returns the linenumber (starting at 0) and the selected string. Linenumber is -1 if the user was allowed to enter custom input getWindowlist(): Returns a table with the windowlist (pid - window caption ). The table is formatted as : {pid,{id,caption}} MainForm.OnProcessOpened: function(processid, processhandle, caption) - Define this if you want to be notified when a new process has been opened. Called only once from the main thread. It is recommended to use this instead of onOpenProcess cpuid(EAX,ECX): returns a table with CPUID info (EAX, EBX, ECX, EDX) gc_setPassive(state: boolean): enables/disables the passive garbage collector gc_setActive(state: boolean, interval: integer, minsize: integer): enables/disables the active garbage collector and lets you configure the interval and minimim size Form Class: (Inheritance: ScrollingWinControl->CustomControl->WinControl->Control->Component->Object) properties FormState: FormState string ReadOnly - The current state of the form. Possible values: fsCreating, fsVisible, fsShowing, fsModal, fsCreatedMDIChild, fsBorderStyleChanged, fsFormStyleChanged, fsFirstShow, fsDisableAutoSize ListItems class : (Inheritance: TObject) methods displayRect(code): returns the displayed rectangle of the listitem. code can be: drBounds(0), drIcon(1), drLabel(2), drSelectBounds(3) displayRectSubItem(code): returns the displayed rectangle of the listitem. code can be: drBounds(0), drIcon(1), drLabel(2), drSelectBounds(3) Stream Class methods readByte(): integer writeByte(integer) readWord(): integer writeWord(integer) readDword(): integer writeDword(integer) readQword(): integer writeQword(integer) MemoryRecord Class: properties AddressString: string - Get the address string shown in CE (ReadOnly) VarType: ValueType (string) - The variable type of this record. See vtByte to vtCustom Type: ValueType (number) - The variable type of this record. See vtByte to vtCustom CustomTypeName: String - If the type is vtCustom this will contain the name of the CustomType Options: String set - a string enclosed by square brackets filled with the options seperated by a comma. Valid options are: moHideChildren, moActivateChildrenAsWell, moDeactivateChildrenAsWell, moRecursiveSetValue, moAllowManualCollapseAndExpand, moManualExpandCollapse DropDownLinked: boolean - if dropdown list refers to list of another memory record eg. (memrec name) DropDownLinkedMemrec: string - Description of linked memrec or emptystring if not linked DropDownList : StringList - list of "value:description" lines, lists are still separate objects when linked, read-write DropDownReadOnly: boolean - true if 'Disallow manual user input' is set DropDownDescriptionOnly: boolean - self explanatory DisplayAsDropDownListItem: boolean - self explanatory DropDownCount: integer - equivalent to .DropDownList.Count DropDownValue[index] : Array to access values in DropDownList (ReadOnly) DropDownDescription[index] : Array to access Descriptions in DropDownList (ReadOnly) Parent: MemoryRecord - self explanatory StructureFrm class: createStructureForm(address, groupname OPTIONAL, structurename OPTIONAL) enumStructureForms() : returns a table of StructureFrm objects (can be useful for finding a structure window with the wanted structure) properties: MainStruct: structure - The currently selected structure ColumnCount: integer - the number of columns (columns=address) Column[index]: structColumn - Fetches a structColumn object from the structure form GroupCount: integer - The number of groups Group[index]: structGroup - Fetches a structGroup object from the structure form StructureElement class: (Inheritance: Object) Methods: getValue(address) : Gets the memory from the specified address and interprets it according to the element type setValue(address,value): Sets the memory at the specified address to the interpreted value according to the element type getValueFromBase(baseaddress): same as getValue but uses the offset to calculate the final address setValueFromBase(baseaddress,value): same as setValue but uses the offset to calculate the final address dbk_readMSR(msr): Reads the msr dbk_writeMSR(msr, msrvalue): Writes the msr dbk_executeKernelMemory(address, parameter) : Executes a routine from kernelmode (e.g a routine written there with auto assembler) parameter can be a value or an address. It's up to your code how it's handled dbvm_initialize(offloados:Boolean OPTIONAL, reason:String OPTIONAL) : Initializes the dbvm functions (dbk_initialize also calls this) offloados is a boolean that when set will offload the system onto dbvm if it's not yet running (and only IF the dbk driver is loaded) dbvm_readMSR(msr): See dbk_readMSR but then using dbvm dbvm_writeMSR(msr, value): See dbk_writeMSR dbvm_getCR4(): Returns the real Control Register 4 state dbvm_readPhysicalMemory(address, size): bytetable dbvm_writePhysicalMemory(address, size, bytetable) dbvm_watch_writes(PhysicalAddress, bytesize OPTIONAL, OPTIONS OPTIONAL, internalentrycount OPTIONAL) : Starts watching writes to the given address range OPTIONS is a binary field. (1 << 0): Log the same RIP multiple times (if different registers) (1 << 1): Ignore the size field and log everything in the specified page (1 << 2): Logs record the floating point state (1 << 3): Logs contain a 4KB stack snapshot (1 << 4): does nothing (1 << 5): If the number of recorded entries gets bigger than internalentrycount, grow the list instead of discarding the entries On success returns an ID to use with dbvm_watch_retrievelog and dbvm_watch_disable dbvm_watch_reads(PhysicalAddress, bytesize OPTIONAL, OPTIONS OPTIONAL, internalentrycount OPTIONAL) : see dbvm_watch_writes but then for reads and writes dbvm_watch_retrievelog(ID) : Returns an array of watch event data. (Context of the system at the time of the event, like registers) dbvm_watch_disable(ID) : Disables the watch operation dbvm_cloak_activate(physicalbase, virtualbase OPTIONAL): Hides an executable memory range (4096 bytes) from snooping eyes Note: It is recommended to cause a copy-on-write on the target first, else this will affect all processes that have this memory block loaded dbvm_cloak_deactivate(physicalbase): Disables the cloak and restores the executable memory to what the system thinks it is dbvm_cloak_readOriginal(physicalbase): Reads the memory that will get executed. On success returns a 4096 byte long bytetable (remember, lua indexes start at 1, so offset 0 is index 1) dbvm_cloak_writeOriginal(physicalbase, bytetable[4096]): Writes the memory that will get executed. dbvm_changeregonbp(physicaladdress, changereginfo, virtualaddress OPTIONAL): boolean sets a breakpoint at the given position. When a breakpoint hits the registers will be changed according to the changereginfo table changereginfo table: (set the field to nil, or don't define it, if you don't want to change it) newCF: integer/boolean (false=0, true=1) newPF: integer/boolean (false=0, true=1) newAF: integer/boolean (false=0, true=1) newZF: integer/boolean (false=0, true=1) newSF: integer/boolean (false=0, true=1) newOF: integer/boolean (false=0, true=1) newRAX: integer newRBX: integer newRCX: integer newRDX: integer newRSI: integer newRDI: integer newRBP: integer newRSP: integer newRIP: integer newR8: integer newR9: integer newR10: integer newR11: integer newR12: integer newR13: integer newR14: integer newR15: integer dbvm_log_cr3_start() : Tells DBVM to record (up to 512) unique CR3 values it encounters dbvm_log_cr3_stop() : Stops the logging and returns the results as a table getPhysicalAddressCR3(CR3, address): Looks up the physical address for the given virtual address in the given pagetable base. Returns nil if not paged readProcessMemoryCR3(CR3, address, size): Reads the virtual memory of the given process's CR3 value. Returns a bytetable on success, nil if fail to read (paged out) writeProcessMemoryCR3(CR3, address, bytetable): Reads the virtual memory of the given process's CR3 value createD3DHook(textureandcommandlistsize OPTIONAL, hookmessages OPTIONAL) methods enableConsole(virtualkey): Adds a (lua)console to the specific game. The given key will bring it up (0xc0=tilde(`~)) Disassembler Class (Inheritance: Object) Methods commentsoverride: string - If set, this will be the comments/LastParamatersToString result HotkeyHandlerThread(Inheritence: Thread) getHotkeyHandlerThread() : Returns the hotkey handler thread used internally by CE properties state: 0 ('htsActive')=Active , 1('htsMemrecOnly')=Memory records only, 2('htsNoMemrec')=Everything except memoryrecords, 3('htsDisabled')=disabled methods -
Карта сравнений (справа. на глаз изменений не более 20%)
-
1. Можно создать класс AutoScreenSize.cs через dnSpy внутри Assembly-CSharp.dll :
Спойлерusing System.Collections; using UnityEngine; public class AutoScreenSize : MonoBehaviour { private static bool forceResize = true; private static AutoScreenSize instance = null; private static int width = 1024; private static int height = 768; private static WaitForSeconds waitForSeconds = new WaitForSeconds(1f); private void Start() { if (instance != null) { Destroy(gameObject); return; } DontDestroyOnLoad(this); StartCoroutine(UpdateScreenMode()); } private IEnumerator UpdateScreenMode() { while (true) { if (Screen.fullScreen || (forceResize && (Screen.width != width || Screen.height != height))) { Screen.SetResolution(width, height, false); } yield return waitForSeconds; } } public static void InitComponent() { if(instance == null) { GameObject newGameObject = new GameObject("AutoScreenSize"); newGameObject.AddComponent<AutoScreenSize>(); } } }
2. Можно вызывать метод AutoScreenSize.InitComponent() из существующего метода Start() из существующего компонента, который есть в игре .
Если все правильно получилось сделать, то будет переход в оконный режим 1024x768, каждый раз, когда игра будет ставить полноэкранный режим.
Еще вариант. В теории можно сделать для любой игры на Unity на основе скрипта Cheat Engine, который внедряет C# dll в моно движок. Это скрипт где-то на форуме. На Lua останется написать выбор процесса Unity или запуск процесса по пути exe игры.
GUI CE
in Cheat Engine
Опубликовано
В функциях-обработчиках событий менять картинку на картинку: OnMouseEnter() и OnMouseLeave() на TCEImage компоненте.
Отказаться от панели
1. Использовать на форме TCEImage и прозрачность,
2. Использовать UDF1.DragNow() в обработчике OnMouse для TCEImage