Перейти к содержанию

Как использовать отдельно, одни и те же клавиши для трех адресов?


Razi

Рекомендуемые сообщения

Dison,  Я не сказал, что не доволен. я только тестировал и сказал, что есть вот такие нюансы. Ранее уже благодарил человека, и говорил, что сам бы такого не сделал. Учиться, я начал потихоньку с туториалов от MasterGH, И вообще, я впервые в жизни увидел такие скрипты дней 5 назад. Что ты хочешь, чтоб я все сразу умел и не задавал вопросов.

AntonVitalievich,  У меня версия CE 6.4. Но и так попробую.


Garik66,  Спасибо,

это как раз тоже обучение на практике.

AntonVitalievich, с пустыми скриптами работает нормально. Оказывается я все правильно делал. Надо будет еще проверить, наверно с моими скриптами идет какой-то конфликт.

Изменено пользователем Razi
Ссылка на комментарий
Поделиться на другие сайты

Обращаться к записям в таблице 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 trainers

Use the genreric hotkey class if you wish to create your own hotkeys

properties

Owner: 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 pressed

OnPostHotkey: function(sender) - Function to be called when a hotkey has been pressed and the action has been performed

methods

doHotkey: Executes the hotkey as if it got triggered by the keyboard

---------------------------------------------------

MemoryRecord Class:

The memoryrecord objects are the entries you see in the addresslist

properties

ID: Integer - Unique ID

Index: Integer - The index ID for this record. 0 is top. (ReadOnly)

Description: string- The description of the memory record

Address: string - Get/set the interpretable address string. Useful for simple address settings.

OffsetCount: integer - The number of offsets. Set to 0 for a normal address

Offset[] : integer - Array to access each offset

CurrentAddress: integer - The address the memoryrecord points to

Type: ValueType - The variable type of this record. See vtByte to vtCustom

If the type is vtString then the following properties are available:

String.Size: Number of characters in the string

String.Unicode: boolean

If the type is vtBinary then the following properties are available

Binary.Startbit: First bit to start reading from

Binary.Size : Number of bits

If the type is vtByteArray then the following properties are available

Aob.Size : Number of bytes

CustomTypeName: String - If the type is vtCustomType this will contain the name of the CustomType

Script: String - If the type is vtAutoAssembler this will contain the auto assembler script

Value: string - The value in stringform.

Selected: boolean - Set to true if selected (ReadOnly)

Active: boolean - Set to true to activate/freeze, false to deactivate/unfreeze

Color: integer

ShowAsHex: boolean - Self explanatory

ShowAsSigned: boolean - Self explanatory

AllowIncrease: boolean - Allow value increasing, unfreeze will reset it to false

AllowDecrease: boolean - Allow value decreasing, unfreeze will reset it to false

Count: Number of children

Child[index] : Array to access the child records

[index] = Child[index]

HotkeyCount: integer - Number of hotkeys attached to this memory record

Hotkey[] : Array to index the hotkeys

OnActivate: 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 children

methods

getDescription()

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 offsets

setAddress(string) : Sets the interpretable address string, and if offsets are provided make it a pointer

getOffsetCount(): Returns the number of offsets for this memoryrecord

setOffsetCount(integer): Lets you set the number of offsets

getOffset(index) : Gets the offset at the given index

setOffset(index, value) : Sets the offset at the given index

getCurrentAddress(): 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 record

getHotkey(index): Returns the hotkey from the hotkey array

getHotkeyByID(integer): Returns the hotkey with the given id

global events

function 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)

properties

Count: Integer - The number of records in the table

SelCount: integer- The number of records that are selected

SelectedRecord: MemoryRecord - The main selected record

MemoryRecord[]: MemoryRecord - Array to access the individial memory records

[] = MemoryRecord - Default accessor

methods

getCount()

getMemoryRecord(index)

getMemoryRecordByDescription(description): returns a MemoryRecord object

getMemoryRecordByID(ID)

createMemoryRecord() : creates an generic cheat table entry and add it to the list

getSelectedRecords(): Returns a table containing all the selected records

doDescriptionChange() : Will show the GUI window to change the description of the selected entry

doAddressChange() : Will show the GUI window to change the address of the selected entry

doTypeChange() : Will show the GUI window to change the type of the selected entries

doValueChange() : Will show the GUI window to change the value of the selected entries

getSelectedRecord() : Gets the main selected memoryrecord

setSelectedRecord(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 ссылки (глобальные), последние ссылаются на что-то постоянно пока не будут nil

5) объекты на которые ссылаются перменные, бывает, надо уничтожать или не создавать повторно. Если создать, например, таймер и связать его с функцией, то эта функция будет вызываться по интервалу постоянно. А если этот таймер по пунктам 2,3,4 будет создан не так как задумано и не будет выключен или уничтожен, то он скорее всего будет мешать что-то делать.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

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-ый скрипт.

Класс. После изменений все заработало так как надо. :-D

Изменено пользователем Razi
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Dison, К тому же ты обвиняешь меня, одного, в действиях всех новичков. Понимаю, что может накипело. Но, я не отвечаю за дела других людей.

 

Да все нормально, не бери в голову с меня плюсик тебе.

Видишь поковырялся разобрался и все у тебя получилось... :-D

Ссылка на комментарий
Поделиться на другие сайты

Dison,  Та я просто аргументировал.

 

AntonVitalievich, Все таки пригодилась в итоге ваша кнопка numpad 0, без нее было бы труднее догадаться, как улучшить скрипт. И кстати этот Lua скрипт по переключению весьма полезная вещь, можно нажатием одной клавиши вписывать разные значения в одном адресе или сразу нескольких адресах.

Ссылка на комментарий
Поделиться на другие сайты

AntonVitalievich, Все таки пригодилась в итоге ваша кнопка numpad 0, без нее было бы труднее догадаться, как улучшить скрипт. И кстати этот Lua скрипт по переключению весьма полезная вещь, можно нажатием одной клавиши вписывать разные значения в одном адресе или сразу нескольких адресах.

Понятно.

Ссылка на комментарий
Поделиться на другие сайты

Если честно, то про автоматическую замену в адресах я раньше только мечтал, а про то, что в этой теме, считал, что это практически невозможно. И про такое даже и не мечтал. И для меня, это не просто чит, какой-то там, это целая система управления. Так что вы AntonVitalievich, и Garik66, совершили необыкновенную вещь, в моем понимании.

Изменено пользователем Razi
Ссылка на комментарий
Поделиться на другие сайты

Короче, по задаче в этой темы лучше по индексам, а не по именам...  

MasterGH, лучше по Index (по-моему в любом случае).

Просто сегодня экспериментировал с табличкой (с этой).

Сперва не воспринимались пробелы в названии скрипта, потом, как оказалось, после перезагрузки, русские названия скриптов СЕ тоже портит ставя туда ???? и LUA-скрипт перестаёт работать, пришлось переименовывать все названия скриптов на английский. А по Индексу было бы гораздо всё проще и быстрее сделать..

Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.