проверь место на жестком диске есть или нет.
попробуй вызвать ceregreset.exe и запустить ce и скрипт
попробуй переименовать перезаписать папки win32 и win64
Cheat Engine 7.5.rar
Проверь файл подкачки.
Проверь жесткий диск на битые сектора или на исправность.
если из этого ничего не получится пиши на форум CE, потому что я не знаю.
Сообщения
-
RE: Глюки се
-
RE: Глюки се
Пишут, что скрипт надо переписать.
Проверь alloc или загугли allocate neaby. -
RE: Защита Трейнера
Пользователь @Pitronic написал в Защита Трейнера:
Кстати этот вариант мне больше нравится. Нет необходимости во флагах.
Новый прием это хорошо. Еще лучше, если он будет работать. Посмотрю, как будет время в чем там ошибки. Попробуй не использовать aamaker, а генерировать стандартным шаблоном из ce в окне, где создаешь шаблоны aa.
-
RE: Телепорт на 10 слотов и на 3 типа данных (float, double, integer)
Сначала надо найти адрес через скан сигнатуры. Потом подставить адрес в
teleport_address и поставитт тип type_datateleport = Teleport:new(teleport_address, type_data)Потом использовать горячие клавиши для сохранения и загрузки
Управление горячими клавишами. ctrl+X - где X от 0 до 9 сохраняет позицию, shift + X загружает ранее сохраненную позицию
Просто это все писать надо и разбираться. Это жк не все так просто.
А мы сегодня с коллегами много работали на Unity и моя голова сегодня требует отдыха. Сейчас открывать CE и писать скрипты не получится. Наверно, только на выходных, либо на неделе. Но вопрос хороший. Код, который не понятно как применить это не очень хоршо. Поставил в todo.
-
RE: Собираем ссылки на разные источники
Попробуй другой браузер или кеш браузера почистить. Может поможет. Иногда ссылки кешируются и автоматически подставляются неверные.
-
RE: Телепорт на 10 слотов и на 3 типа данных (float, double, integer)
Конечно, возможно. Если заглянуть в документацию, то через чтение массива по адресу address, bytecount - количеству байт, и ReturnAsTable возвращаемая таблица.
readBytes(address,bytecount, ReturnAsTable ) : returns the bytes at the given address. If ReturnAsTable is true it will return a table instead of multiple bytes Reads the bytes at the given address and returns a table containing the read out bytes writeBytes(address, table) : Write the given bytes to the given address from a tableЯ думаю, пример можно найти в Интернете. Только у double байт побольше будет чем у других типов в этом скрипте
-
Различия между разделами "Блоги", "Статьи" и "Личный раздел"
"Блоги" — это свободный стиль, частные какие-то случаи и задачи, какие-то заметки, видео, файлы и т.п. Какие-то особенности для конкретной игры и решение проблемы. В общем менее важно, т.к. решение задачи в целом возможно, если знать общие приемы из раздела Статьи.
"Статьи "— это более строгий стиль. Как будто составляется руководство, по которому информация будет нужна часто, для общих случаев или информация, чтобы была под рукой. Могут быть и частные редкие случаи, когда их можно применить ко множеству задач и это может пригодится в целом.
"Фишки (приемы)" — некоторые специфичные приемы, которые могут пригодится или не пригодиться, по ситуации.
"Статьи других авторов" — бывают полезные статьи. Если нашлась интересная, то можно опубликовать ссылку на неё и может пару комментариев, что привлекло внимание в этой статье."Личный раздел" — специфичный раздел, который нужен больше вам самому, чем другим. Например, для обсуждения и обратной связи или для заметок. Может кто-то что-то прокомментирует или поделиться информацией.
"Программирование" — раздел для вдохновения. публикуем там все, что связано с программированием. Пока это связано с программированием на Cheat Engine на autoassmbler, на Lua, на других языках для создания .dll модулей или бинарного кода.
"Плагин-строй" — расширения для CE
"Софт" — программы, которые могут пригодится по тематике программирования.
"Справочники" — тут могут быть как ссылки на руководства по CE, по языкам программирования, по API, по ключевым словам и т.п. Справочник и статья отличаются по тому, что справочник, это конкретное описание функций, ключевых слов, аргументов, директив, макросов и прочее.
"Обучающие примеры" — в нем могут быть примеры для понимания принципов программирования. Язык не важен. Так же могут быть короткиие примеры. -
О разделе "Репозитории"
Раздел создан для обсуждений связанных с репозиториями.
Репозиторий — это некоторый сторонний сервис, который позволяет совместно вносить изменения в файлы, хранить исходники разных версий (релизную, отладочную или иную). Получать там же на сайте репозитория обратную связь и вести обсуждения.
Вместо того чтобы заливать туда-сюда переписываемую таблицу .CT или иные исходники, которые содержат в себе ошибки (рабочую или не рабочую) можно завести свой открытый репозиторий и вместе его модифицировать. Для этого, если я найду время, то сделаю видео руководство к этому сообщению.
Пока нет обязательного правила пользоваться репозиториями, но, возможно, в качестве эксперимента попробуем, потому что обсуждать готовые результаты работы релизной версии более интересно на форуме, а обсуждать правки ошибок и строчки кода отладочной версии уже на самом сервисе репозитория
Как это все может происходить я напишу подробную инструкцию + видео с примерами.
Если кто желает, пока может сам поискать про репозитории в Интернете. Что такое и как с ними работать. -
Заметка. Логи брейкпоинта на структуру размером 0x1000
Примечание. Эти логи мне могут понадобиться для группировки инструкций по типу. Например, булевые типы, по чтению. по записи, по смещениям, локальные структуры по смениям и т.п.
В структуре по смещению 0x2C0 находится здоровье персонажа. На начало этой структуры и был поставлен брейкпоинт .
Ниже будет большой кусок опкодов, который работает со структурой.
Log breakpoint on structure 0x1000.txtМожно посмотреть в каком порядке опкоды исполняются и с какими смещениями, насколько далеко они друг от друга. Некоторые смещения рядом с известными смещениями могут заинтересовать. Одинаковые опкоды в определенном порядке, но по разным RIP тоже могут заинтересовать. Switch-case могут заинтересоваь в виде cmp [x]. число. Инструкции чтения из структуры больше интересуют, т.к. они могут более вероятно, на что-то влиять - из них читается и для чего-то это нужно.
Причем последовательность инструкций идет в порядке вызова, но RIP всегда уникальный (RIP не дублируются). Здесь RIP, т.к. CE 64 разрядный
Если последовательность к данным структуры примерно сохраняется, то можно обратить внимание на обращение к адресам в структуре рядом со здоровьем по смещению 2с0: до обращения к адресу здоровья, во время и после. Я выделил их стрелками. Эти смещения могут быть связаны со здоровьем

Интересные моменты могут быть с так называемыми switch-case операциями. Можно пытаться их подменить

-
Для чего нужны личные разделы
Личный раздел — это ваш персональный раздел, в котором вы являетесь модератором (пока это экспериментально). Темы и обсуждения связаны с вами. Он нужен лично вам, чтобы создавать темы, оставлять сообщения, заметки, обсуждения, отвечать на вопросы, комментировать и т.п. Важные личные файлы всегда резервируйте на своем личном хостинге (гугл диск, яндекс диск и т.п.), а большие файлы лучше сразу туда скидывать и оставлять ссылку на них.
Если возникала необходимость в личном разделе, напишите мне запрос в личное сообщение. -
RE: CE 6.8 Обзор нового инструмента поиска по структурам
Пользователь @Pitronic написал в CE 6.8 Обзор нового инструмента поиска по структурам:
Разрешаю в этой теме всё что в той дополнить
Спасибо, за твое разрешение. Мне, кажется, это две разные статьи и лучше в новой теме.
@Pitronic публиковать статьи тоже можешь.. Там еще можно добавлять теги и выбирать раздел. -
RE: Поиск в региона памяти модуля
Хм. Ну, да такая функция есть уже

Я думаю, исходники все равно пригодятся в качестве примера, как такой функционал делать. Поставлю метку "обучалка" -
RE: CE 6.8 Обзор нового инструмента поиска по структурам
Прикольная статья, особенно пример работы функции "поиск совпадений". Что-то не помню ее. Надо будет поробовать как-нибудь.
А все, там русский перевод
меня сбил. Знаю эту функцию -
RE: Защита Трейнера
Странно, у меня без ошибок. Версия ce 7.5 с с сайта CE и там же файл туториала. Посмотрю как будет время
-
Крафт в StarsOne
В оригинале, если нет всех компонентов рецепта, то нельзя скрафтить вещь.

Цель: скрафтить без компонетов по нажатию кнопки
Игра на Unity и можно пробовать использовать в dnSpy модифицировать файл Assembly-CSharp.dll
Открываем файлик и смотрим на классы связанные с крафтом
Так находим кнопку, которая создаст указанное количество вещей крафта в CreateItem


Задача скрафтить по имеющемуся рецепту любую вещь. Для этого я добавляю проверку количества вещей и удаляю лишний код. Под сполерами оригинальный и модифицированный код

Модифицированный кодusing System; using System.Collections.Generic; using System.Runtime.CompilerServices; using UnityEngine; public partial class Crafting : MonoBehaviour { public void CreateItem(int curCraft, int craftCount) { if (this.timeBreak >= 0.3f) { // Добавили одну вещь крафта if (craftCount == 0) { craftCount = 1; } if (craftCount != 0) { this.succes = true; CraftRecipe component = this.craftObjects[curCraft].GetComponent<CraftRecipe>(); // Здесь удалили код, который должен расходовать вещи из инвентаря // ... if (this.succes) { this.iks = this.craftObjects[curCraft].GetComponent<CraftRecipe>().countCreate * craftCount; for (int m = 0; m < this.craftObjects[curCraft].GetComponent<CraftRecipe>().countCreate * craftCount; m++) { this.emptyCell = Inventory.inv.FindItemForStack(this.craftObjects[curCraft].name); if (this.emptyCell >= 0) { if (Inventory.inv.items[this.emptyCell].stack + this.iks <= Inventory.inv.items[this.emptyCell].maxStack) { Inventory.inv.items[this.emptyCell].stack += this.iks; break; } this.iks -= Inventory.inv.items[this.emptyCell].maxStack - Inventory.inv.items[this.emptyCell].stack; Inventory.inv.items[this.emptyCell].stack = Inventory.inv.items[this.emptyCell].maxStack; } else { this.emptyCell = Inventory.inv.FindEmptyCell(); if (this.emptyCell >= 0) { this.cloneItem = Inventory.inv.CreateItem(this.craftObjects[curCraft]); if (this.cloneItem.maxStack >= this.iks) { this.cloneItem.stack = this.iks; Inventory.inv.items[this.emptyCell] = this.cloneItem; break; } this.cloneItem.stack = this.cloneItem.maxStack; this.iks -= this.cloneItem.maxStack; Inventory.inv.items[this.emptyCell] = this.cloneItem; } else { if (this.craftObjects[curCraft].GetComponent<Item>().maxStack >= this.iks) { PlayerNetwork.inst.CallCmdCreateItem(this.craftObjects[curCraft].name, Inventory.inv.transform.position - Vector3.forward * 2f + FloatingOrigin.offset, Quaternion.identity, this.iks, this.craftObjects[curCraft].GetComponent<Item>().health); break; } PlayerNetwork.inst.CallCmdCreateItem(this.craftObjects[curCraft].name, Inventory.inv.transform.position - Vector3.forward * 2f + FloatingOrigin.offset, Quaternion.identity, this.craftObjects[curCraft].GetComponent<Item>().maxStack, this.craftObjects[curCraft].GetComponent<Item>().health); this.iks -= this.craftObjects[curCraft].GetComponent<Item>().maxStack; } new WaitForEndOfFrame(); } } } } this.timeBreak = 0f; } } }Оригинальный
public void CreateItem(int curCraft, int craftCount) { if (this.timeBreak >= 0.3f) { if (craftCount != 0) { this.succes = true; CraftRecipe component = this.craftObjects[curCraft].GetComponent<CraftRecipe>(); int[] array = new int[7]; int[] array2 = new int[7]; for (int i = 0; i < 7; i++) { if (this.succes && component.ingredients[i] != null) { array2[i] = component.countIngredients[i]; if (array2[i] <= 0) { array2[i] = 1; } array2[i] *= craftCount; for (int j = 0; j < Inventory.inv.items.Length; j++) { if (Inventory.inv.items[j] != null && component.ingredients[i].name == Inventory.inv.items[j].prefName) { array[i] += Inventory.inv.items[j].stack; } } if (array[i] < array2[i]) { this.succes = false; } } } if (this.succes) { for (int k = 0; k < 7; k++) { if (component.ingredients[k] != null) { for (int l = 0; l < Inventory.inv.items.Length; l++) { if (Inventory.inv.items[l] != null && array2[k] > 0 && component.ingredients[k].name == Inventory.inv.items[l].prefName) { this.iks = Inventory.inv.items[l].stack; Inventory.inv.items[l].stack -= array2[k]; array2[k] -= this.iks; if (array2[k] <= 0) { break; } } } } } this.iks = this.craftObjects[curCraft].GetComponent<CraftRecipe>().countCreate * craftCount; for (int m = 0; m < this.craftObjects[curCraft].GetComponent<CraftRecipe>().countCreate * craftCount; m++) { this.emptyCell = Inventory.inv.FindItemForStack(this.craftObjects[curCraft].name); if (this.emptyCell >= 0) { if (Inventory.inv.items[this.emptyCell].stack + this.iks <= Inventory.inv.items[this.emptyCell].maxStack) { Inventory.inv.items[this.emptyCell].stack += this.iks; break; } this.iks -= Inventory.inv.items[this.emptyCell].maxStack - Inventory.inv.items[this.emptyCell].stack; Inventory.inv.items[this.emptyCell].stack = Inventory.inv.items[this.emptyCell].maxStack; } else { this.emptyCell = Inventory.inv.FindEmptyCell(); if (this.emptyCell >= 0) { this.cloneItem = Inventory.inv.CreateItem(this.craftObjects[curCraft]); if (this.cloneItem.maxStack >= this.iks) { this.cloneItem.stack = this.iks; Inventory.inv.items[this.emptyCell] = this.cloneItem; break; } this.cloneItem.stack = this.cloneItem.maxStack; this.iks -= this.cloneItem.maxStack; Inventory.inv.items[this.emptyCell] = this.cloneItem; } else { if (this.craftObjects[curCraft].GetComponent<Item>().maxStack >= this.iks) { PlayerNetwork.inst.CallCmdCreateItem(this.craftObjects[curCraft].name, Inventory.inv.transform.position - Vector3.forward * 2f + FloatingOrigin.offset, Quaternion.identity, this.iks, this.craftObjects[curCraft].GetComponent<Item>().health); break; } PlayerNetwork.inst.CallCmdCreateItem(this.craftObjects[curCraft].name, Inventory.inv.transform.position - Vector3.forward * 2f + FloatingOrigin.offset, Quaternion.identity, this.craftObjects[curCraft].GetComponent<Item>().maxStack, this.craftObjects[curCraft].GetComponent<Item>().health); this.iks -= this.craftObjects[curCraft].GetComponent<Item>().maxStack; } new WaitForEndOfFrame(); } } } } this.timeBreak = 0f; } }Изменяем весь класс или метов в этом окне

Если выводит ошибки при компяляции, то скачиваем IlSpy и его код вставляем в код в dnSpy. Или качаем DnSpy 3.2.0 или ранее
Изменения сохраняем в модуль, запускаем игру и крафтим.
Получить все рецепты (не проверял правда, попробуйте если хотите)

Вещи не ломаются. Убрать отнятие "здоровья" у вещи


-
Поиск в региона памяти модуля

c = createComboBox(MainForm.gbScanOptions) c.Style = 'csDropDownList' c.Items.add('All') c.ItemIndex = 0 c.Align = alTop c.BorderSpacing.Left = 6 c.BorderSpacing.Right = 6 c.BorderSpacing.Bottom = 2 local modulelist c.OnDropDown = function(d) --fill the list while c.Items.Count > 1 do c.Items.delete(1) end modulelist = enumModules() local i for i = 1, #modulelist do c.Items.Add(modulelist[i].Name) end end c.OnSelect = function(d) if c.ItemIndex >= 1 then MainForm.FromAddress.Text = string.format("%.16x", modulelist[c.ItemIndex].Address) if modulelist[c.ItemIndex].Size == nil then modulelist[c.ItemIndex].Size = getModuleSize(modulelist[c.ItemIndex].Name) end MainForm.ToAddress.Text = string.format("%.16x", modulelist[c.ItemIndex].Address+modulelist[c.ItemIndex].Size) else MainForm.FromAddress.Text = "0000000000000000" MainForm.ToAddress.Text = "7fffffffffffffff" end end c.Enabled = falseИсточник
ModuleListRegioScan.lua (поместить в папку "autorun") -
RE: Собираем ссылки на разные источники
Ну, пока не знаю. Если руки дотянуться до этого.
У AAMaker сложная история. Во-первых этот инструмент делали двое я и srg. По моей задумке плагин должен был автоматически сам каждый раз ассемблировать по неточной сигнатуре новый АА-код и выполнять его. А сейчас при применении правила он генерируется разого в АА-код вручную. Т.е. это не совсем то, что я хотел. Я его с тех давних пор так и не доделал. Во-вторых нет никакой аналитики и статистики, не на что опереться. В каких случаях неточная сигнатура проходит, а в каких нет. Мне кажется, что пока самый надежный вариант это делать assert сигнатуры на проверку и выводить ошибку. И для каждой новой версии игры делать новую сигнатуру. -
RE: CE 6.8 Обзор нового инструмента поиска по структурам
Если есть видео по этой теме, то можно и тут его запостить