Razi Опубликовано 23 января, 2016 Автор Поделиться Опубликовано 23 января, 2016 (изменено) Dison, Я не сказал, что не доволен. я только тестировал и сказал, что есть вот такие нюансы. Ранее уже благодарил человека, и говорил, что сам бы такого не сделал. Учиться, я начал потихоньку с туториалов от MasterGH, И вообще, я впервые в жизни увидел такие скрипты дней 5 назад. Что ты хочешь, чтоб я все сразу умел и не задавал вопросов.AntonVitalievich, У меня версия CE 6.4. Но и так попробую.Garik66, Спасибо,это как раз тоже обучение на практике.AntonVitalievich, с пустыми скриптами работает нормально. Оказывается я все правильно делал. Надо будет еще проверить, наверно с моими скриптами идет какой-то конфликт. Изменено 23 января, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 23 января, 2016 Поделиться Опубликовано 23 января, 2016 Обращаться к записям в таблице CE можно разными способами. 1. По индексу2. По имени3. По связанным функциям горячих клавиш4. Из новых глобальных функций onMemRecPreExecute и onMemRecPostExecute Например, если что-то активировать, а перед этим выполнить Lua скрипт function onMemRecPreExecute(memoryrecord, newstate)print(memoryrecord.Description)endТо в консоли будет вывод надписи чита, который был активирован. Этот memoryrecord можно проверить на уникальное название, на номер индекса... Короче, по задаче в этой темы лучше по индексам, а не по именам... Ниже выделил жирным, что может подойти при написании скрипта, когда один скрипт вырубает другие. Но надо учитывать нюансы. Показать контент Цитата MemoryRecordHotkey Class: (Inheritance: object)The memoryrecord hotkey class is mainly readonly with the exception of the event properties to be used to automatically create trainersUse the genreric hotkey class if you wish to create your own hotkeyspropertiesOwner: MemoryRecord - The memoryrecord this hotkey belongs to (ReadOnly)ID: integer - Unique id of this hotkey (ReadOnly)Description: string - The description of this hotkey (ReadOnly)HotkeyString: string - The hotkey formatted as a string (ReadOnly)OnHotkey: function(sender) - Function to be called when a hotkey has just been pressedOnPostHotkey: function(sender) - Function to be called when a hotkey has been pressed and the action has been performedmethodsdoHotkey: Executes the hotkey as if it got triggered by the keyboard---------------------------------------------------MemoryRecord Class:The memoryrecord objects are the entries you see in the addresslistpropertiesID: Integer - Unique IDIndex: Integer - The index ID for this record. 0 is top. (ReadOnly)Description: string- The description of the memory recordAddress: string - Get/set the interpretable address string. Useful for simple address settings.OffsetCount: integer - The number of offsets. Set to 0 for a normal addressOffset[] : integer - Array to access each offsetCurrentAddress: integer - The address the memoryrecord points toType: ValueType - The variable type of this record. See vtByte to vtCustomIf the type is vtString then the following properties are available:String.Size: Number of characters in the stringString.Unicode: booleanIf the type is vtBinary then the following properties are availableBinary.Startbit: First bit to start reading fromBinary.Size : Number of bitsIf the type is vtByteArray then the following properties are availableAob.Size : Number of bytesCustomTypeName: String - If the type is vtCustomType this will contain the name of the CustomTypeScript: String - If the type is vtAutoAssembler this will contain the auto assembler scriptValue: string - The value in stringform.Selected: boolean - Set to true if selected (ReadOnly)Active: boolean - Set to true to activate/freeze, false to deactivate/unfreezeColor: integerShowAsHex: boolean - Self explanatoryShowAsSigned: boolean - Self explanatoryAllowIncrease: boolean - Allow value increasing, unfreeze will reset it to falseAllowDecrease: boolean - Allow value decreasing, unfreeze will reset it to falseCount: Number of childrenChild[index] : Array to access the child records[index] = Child[index]HotkeyCount: integer - Number of hotkeys attached to this memory recordHotkey[] : Array to index the hotkeysOnActivate: function(memoryrecord,before,currentstate):boolean - The function to call when the memoryrecord will change (or changed) Active to true. If before is true, not returning true will cause the activation to stop.OnDeactivate: function(memoryrecord,before,currentstate):boolean - The function to call when the memoryrecord will change (or changed) Active to false. If before is true, not returning true will cause the deactivation to stop.OnDestroy: function() - Called when the memoryrecord is destroyed.DontSave: boolean - Don't save this memoryrecord and it's childrenmethodsgetDescription()setDescription()getAddress() : Returns the interpretable addressstring of this record. If it is a pointer, it returns a second result as a table filled with the offsetssetAddress(string) : Sets the interpretable address string, and if offsets are provided make it a pointergetOffsetCount(): Returns the number of offsets for this memoryrecordsetOffsetCount(integer): Lets you set the number of offsetsgetOffset(index) : Gets the offset at the given indexsetOffset(index, value) : Sets the offset at the given indexgetCurrentAddress(): Returns the current address as an integer (the final result of the interpretable address and pointer offsets)appendToEntry(memrec): Appends the current memory record to the given memory recordgetHotkey(index): Returns the hotkey from the hotkey arraygetHotkeyByID(integer): Returns the hotkey with the given idglobal eventsfunction onMemRecPreExecute(memoryrecord, newstate BOOLEAN):If above function is defined it will be called before action* has been performed.Active property is about to change to newState.function onMemRecPostExecute(memoryrecord, newState BOOLEAN, succeeded BOOLEAN):If above function is defined it will be called after action*.Active property was supposed to change to newState.If 'succeeded' is true it means that Active state has changed and is newState.newState and succeeded are read only.*action can be: running auto assembler script (ENABLE or DISABLE section), freezing and unfreezing.----------------------------------------------Addresslist Class: (Inheritance: Panel->WinControl->Control->Component->Object)propertiesCount: Integer - The number of records in the tableSelCount: integer- The number of records that are selectedSelectedRecord: MemoryRecord - The main selected recordMemoryRecord[]: MemoryRecord - Array to access the individial memory records[] = MemoryRecord - Default accessormethodsgetCount()getMemoryRecord(index)getMemoryRecordByDescription(description): returns a MemoryRecord objectgetMemoryRecordByID(ID)createMemoryRecord() : creates an generic cheat table entry and add it to the listgetSelectedRecords(): Returns a table containing all the selected recordsdoDescriptionChange() : Will show the GUI window to change the description of the selected entrydoAddressChange() : Will show the GUI window to change the address of the selected entrydoTypeChange() : Will show the GUI window to change the type of the selected entriesdoValueChange() : Will show the GUI window to change the value of the selected entriesgetSelectedRecord() : Gets the main selected memoryrecordsetSelectedRecord(memrec) : Sets the currently selected memoryrecord. This will unselect all other entries 1) надо сначала запустить Lua скрипт. Будь он в таблице, будь он в папке авторана, будь он в трейнере.2) при добавлении вставок {$Lua} и {$Asm} в АА скрипты надо держать в голове, что есть три области: выше [enable] и [disable], между [enable] и [disable] и ниже [disable]. Самая высокая область активируется в любом случае при нажатии на запись.3) CE при добавлении таблицы проверяет и исполняет скрипт при этом вызывая область выше [enable] и [disable], между [enable] и [disable]. Может получится так, что скрипты выполнятся не тогда, когда задумано и работать будут не так как задумано.4) local ссылки и не local ссылки (глобальные), последние ссылаются на что-то постоянно пока не будут nil5) объекты на которые ссылаются перменные, бывает, надо уничтожать или не создавать повторно. Если создать, например, таймер и связать его с функцией, то эта функция будет вызываться по интервалу постоянно. А если этот таймер по пунктам 2,3,4 будет создан не так как задумано и не будет выключен или уничтожен, то он скорее всего будет мешать что-то делать. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 24 января, 2016 Автор Поделиться Опубликовано 24 января, 2016 (изменено) Dison, К тому же ты обвиняешь меня, одного, в действиях всех новичков. Понимаю, что может накипело. Но, я не отвечаю за дела других людей. Garik66, Еще с утра, добавил вам плюс к репутации за вчерашнюю помощь с скриптами. AntonVitalievich, Еще с утра, добавил вам плюс к репутации за изначально поданую идею. Еще немного поколдую с вашим скриптом.Отчет по скрипту:Упростил свои три скрипта, которые называются SCRIPTONE, SCRIPTTWO и т. д.И после этого игра вообще начала вылетать, но появился один плюс numpad 0 заработал так как нужно т.е. выключает любой скрипт из трех.Но все работало, если находясь на 3-ем скрипте нажимать numpad 0, влево, numpad 0, влево то перключалось нормально.Думал, что выход, это ставить метку от 0 до 4, где: Показать контент 0 - 1-ый скрипт включен, а остальные выключены,1 - три скрипта в false значении,2 - 2-ой скрипт включен3 - три скрипта в false4 - 3-ий скрипт включен Но просмотрев Lua скрипт, понял что инструкции выполняются поочередно. Пример: находясь на 3-ем скрипте (т.е. 3-ий скрипт включен) при нажатии влево, мы попадаем на инструкцию где сначала 1-ый скрипт в false, 2-ой скрипт в true, а 3-ий скрипт то у нас еще включен и вот почему был конфликт. Показать контент function scriptchangerone()if BUTTONCHECK.Value~="??" thenif BUTTONCHECK.Value=="0" thenSCRIPTONE.Active = trueSCRIPTTWO.Active = falseSCRIPTTHREE.Active = falseelseif BUTTONCHECK.Value~="??" thenif BUTTONCHECK.Value=="1" thenSCRIPTONE.Active = falseSCRIPTTWO.Active = trueSCRIPTTHREE.Active = falseendendendendendcreateHotkey("scriptchangerone", VK_LEFT) Поменял местами скрипты SCRIPTTWO и т.д. в коде вот так: Показать контент function scriptchangerone()if BUTTONCHECK.Value~="??" thenif BUTTONCHECK.Value=="0" thenSCRIPTTWO.Active = falseSCRIPTTHREE.Active = falseSCRIPTONE.Active = trueelseif BUTTONCHECK.Value~="??" thenif BUTTONCHECK.Value=="1" thenSCRIPTONE.Active = falseSCRIPTTHREE.Active = falseSCRIPTTWO.Active = trueendendendendendcreateHotkey("scriptchangerone", VK_LEFT)Теперь при включенном 3-ем скрипте при нажатии влево сначала проверяется, что 1-ый скрипт в false, дальше, что 3-ий скрипт в false (отключает 3-ий скрипт), теперь только включает 2-ой скрипт в true.При нажатии еще раз влево при включенном 2-ом скрипте сначала выключаются 2-ой, потом 3-ий, а потом включается 1-ый скрипт.Класс. После изменений все заработало так как надо. Изменено 24 января, 2016 пользователем Razi 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 24 января, 2016 Поделиться Опубликовано 24 января, 2016 В 24.01.2016 в 02:33, Razi сказал: Dison, К тому же ты обвиняешь меня, одного, в действиях всех новичков. Понимаю, что может накипело. Но, я не отвечаю за дела других людей. Да все нормально, не бери в голову с меня плюсик тебе.Видишь поковырялся разобрался и все у тебя получилось... Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 24 января, 2016 Автор Поделиться Опубликовано 24 января, 2016 Dison, Та я просто аргументировал. AntonVitalievich, Все таки пригодилась в итоге ваша кнопка numpad 0, без нее было бы труднее догадаться, как улучшить скрипт. И кстати этот Lua скрипт по переключению весьма полезная вещь, можно нажатием одной клавиши вписывать разные значения в одном адресе или сразу нескольких адресах. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 24 января, 2016 Поделиться Опубликовано 24 января, 2016 В 24.01.2016 в 13:25, Razi сказал: AntonVitalievich, Все таки пригодилась в итоге ваша кнопка numpad 0, без нее было бы труднее догадаться, как улучшить скрипт. И кстати этот Lua скрипт по переключению весьма полезная вещь, можно нажатием одной клавиши вписывать разные значения в одном адресе или сразу нескольких адресах.Понятно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 24 января, 2016 Автор Поделиться Опубликовано 24 января, 2016 (изменено) Если честно, то про автоматическую замену в адресах я раньше только мечтал, а про то, что в этой теме, считал, что это практически невозможно. И про такое даже и не мечтал. И для меня, это не просто чит, какой-то там, это целая система управления. Так что вы AntonVitalievich, и Garik66, совершили необыкновенную вещь, в моем понимании. Изменено 24 января, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 29 января, 2016 Поделиться Опубликовано 29 января, 2016 (изменено) В 23.01.2016 в 20:00, MasterGH сказал: Короче, по задаче в этой темы лучше по индексам, а не по именам... MasterGH, лучше по Index (по-моему в любом случае).Просто сегодня экспериментировал с табличкой (с этой).Сперва не воспринимались пробелы в названии скрипта, потом, как оказалось, после перезагрузки, русские названия скриптов СЕ тоже портит ставя туда ???? и LUA-скрипт перестаёт работать, пришлось переименовывать все названия скриптов на английский. А по Индексу было бы гораздо всё проще и быстрее сделать.. Изменено 29 января, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения