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

Помощь в создании много функционального телепорта


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

Доброго времени суток форумчане. Мне необходим теле порт с несколькими слотами в игре Saints Row IV  htgfr от Xatab , в скрипте я уже создал для трёх слотов, мне нужно будет больше, но остальное сам допишу. скидываю скрипт.

Спойлер

{ Game   : Saints Row IV.exe
  Version:
  Date   : 2020-07-05
  Author : Pitronic

  This script does blah blah blah
}


// координаы
//  x eax+30
//  y eax+34
//  z eax+38


[ENABLE]

aobscan(teleport,0F 58 * * 8B * * 0F 28 * 0F 57 * * * * * 0F 58 * 0F 58 * 0F 29 * * 0F 29 * 8B * * 8B * * C2 * * * * * * * * * * * * * * * * 8B)
alloc(newmem,$1000)

label(code)
label(return)
label(FlagTeleport)
label(slot0)
label(slot1)
label(slot2)
label(slot3)
label(indicator)

registersymbol(teleport)
registersymbol(FlagTeleport)
registersymbol(slot0)
registersymbol(slot1)
registersymbol(slot2)
registersymbol(slot3)
registersymbol(indicator)

newmem:
// filtr
cmp [eax+F7BE88],#25
jne code

code:
addps xmm0,[eax+30]
mov eax,[ebx+10]
jmp return



teleport:
jmp newmem
 nop 2
return:
FlagTeleport:
db 0
slot0:
db 00 00 00 00 00 00 00 00 00 00 00 00
slot1:
db 00 00 00 00 00 00 00 00 00 00 00 00
slot2:
db 00 00 00 00 00 00 00 00 00 00 00 00
slot3:
db 00 00 00 00 00 00 00 00 00 00 00 00
indicator:
db 0

[DISABLE]

teleport:
addps xmm0,[eax+30]
mov eax,[ebx+10]

unregistersymbol(teleport)
unregistersymbol(FlagTeleport)
unregistersymbol(slot0)
unregistersymbol(slot1)
unregistersymbol(slot2)
unregistersymbol(slot3)
unregistersymbol(indicator)

dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Saints Row IV.exe"+B2EF7C

"Saints Row IV.exe"+B2EF59: 0F 28 C2              -  movaps xmm0,xmm2
"Saints Row IV.exe"+B2EF5C: 0F C6 C2 00           -  shufps xmm0,xmm2,00
"Saints Row IV.exe"+B2EF60: 0F 59 00              -  mulps xmm0,[eax]
"Saints Row IV.exe"+B2EF63: 0F 28 E2              -  movaps xmm4,xmm2
"Saints Row IV.exe"+B2EF66: 0F C6 E2 55           -  shufps xmm4,xmm2,55
"Saints Row IV.exe"+B2EF6A: 0F 59 60 10           -  mulps xmm4,[eax+10]
"Saints Row IV.exe"+B2EF6E: 0F C6 D2 AA           -  shufps xmm2,xmm2,-56
"Saints Row IV.exe"+B2EF72: 0F 59 50 20           -  mulps xmm2,[eax+20]
"Saints Row IV.exe"+B2EF76: 0F 58 C4              -  addps xmm0,xmm4
"Saints Row IV.exe"+B2EF79: 0F 58 C2              -  addps xmm0,xmm2
// ---------- INJECTING HERE ----------
"Saints Row IV.exe"+B2EF7C: 0F 58 40 30           -  addps xmm0,[eax+30]
"Saints Row IV.exe"+B2EF80: 8B 43 10              -  mov eax,[ebx+10]
// ---------- DONE INJECTING  ----------
"Saints Row IV.exe"+B2EF83: 0F 28 D1              -  movaps xmm2,xmm1
"Saints Row IV.exe"+B2EF86: 0F 57 15 20 04 55 01  -  xorps xmm2,["Saints Row IV.exe"+1150420]
"Saints Row IV.exe"+B2EF8D: 0F 58 D0              -  addps xmm2,xmm0
"Saints Row IV.exe"+B2EF90: 0F 58 C1              -  addps xmm0,xmm1
"Saints Row IV.exe"+B2EF93: 0F 29 40 10           -  movaps [eax+10],xmm0
"Saints Row IV.exe"+B2EF97: 0F 29 10              -  movaps [eax],xmm2
"Saints Row IV.exe"+B2EF9A: 8B E5                 -  mov esp,ebp
"Saints Row IV.exe"+B2EF9C: 5D                    -  pop ebp
"Saints Row IV.exe"+B2EF9D: 8B E3                 -  mov esp,ebx
"Saints Row IV.exe"+B2EF9F: 5B                    -  pop ebx
}

 

ставлю ещё один спойлер для описания потому что длинное описание будет.

Спойлер

И так перехожу к функциям, начнём с сохранения координатов для трёх слотов,  сперва фильтр сранить значения адреса ,[eax+F7BE88] со значением 25 если равно. то переходим к функциям теле порта далее буду писать кодами, наверное там нужен будет свободный регистр поэтому начну с него

push edx

cmp [FlagTeleport],#1

jne code

mov edx,[eax+30]

mov [slot1],edx

mov edx,[eax+34]

mov [slot1+4],edx

mov edx,[eax+38]

mov [slot1+8],edx

mov  [FlagTeleport],#0

jmp code

 

cmp [FlagTeleport],#2

jne code

mov edx,[eax+30]

mov [slot2],edx

mov edx,[eax+34]

mov [slot2+4],edx

mov edx,[eax+38]

mov [slot2+8],edx

mov  [FlagTeleport],#0

jmp code

 

cmp [FlagTeleport],#3

jne code

mov edx,[eax+30]

mov [slot3],edx

mov edx,[eax+34]

mov [slot3+4],edx

mov edx,[eax+38]

mov [slot3+8],edx

mov  [FlagTeleport],#0

jmp code

 

теперь переходим к теле портации.

здесь будет ещё один флаг [ndicator] работать для сохранения позиции в [slot0] который служит для теле портации по исходным координатов которые должны записаться один только раз, на то и исходная позиция.

и так 

cmp [FlagTeleport],#11

jne code

cmp   [ndicator],#0

если равно то с начала записываем координаты в исходную позицию  [slot0]

mov edx,[eax+30]

mov [slot0],edx

mov edx,[eax+34]

mov [slot0+4],edx

mov edx,[eax+38]

mov [slot0+8],edx

mov    [ndicator],#1

mov  [FlagTeleport],#0

jmp code

 

и теле партируемся

mov  edx, [slot1]

mov  [eax+30],edx

mov  edx, [slot1+4]

mov  [eax+34],edx

mov  edx, [slot1+8]

mov  [eax+38],edx

mov

а если не равно нулю то не записываем кординаты в слот 0 сразу телепортируемся по коодинатам в слоте 1

далее то же самое со вторым слотом

 

cmp [FlagTeleport],#12

jne code

cmp   [ndicator],#0

если равно то с начала записываем координаты в исходную позицию  [slot0]

mov edx,[eax+30]

mov [slot0],edx

mov edx,[eax+34]

mov [slot0+4],edx

mov edx,[eax+38]

mov [slot0+8],edx

mov    [ndicator],#1

mov  [FlagTeleport],#0

jmp code

 

и теле партируемся

mov  edx, [slot2]

mov  [eax+30],edx

mov  edx, [slot2+4]

mov  [eax+34],edx

mov  edx, [slot2+8]

mov  [eax+38],edx

 

а если не равно нулю то не записываем кординаты в слот 0 сразу телепортируемся по коодинатам в слоте 2

ну и разумеется те же самые действия для слота 3

 

cmp [FlagTeleport],#13

jne code

cmp   [ndicator],#0

если равно то с начала записываем координаты в исходную позицию  [slot0]

mov edx,[eax+30]

mov [slot0],edx

mov edx,[eax+34]

mov [slot0+4],edx

mov edx,[eax+38]

mov [slot0+8],edx

mov    [ndicator],#1

mov  [FlagTeleport],#0

jmp code

 

и теле партируемся

mov  edx, [slot3]

mov  [eax+30],edx

mov  edx, [slot3+4]

mov  [eax+34],edx

mov  edx, [slot3+8]

mov  [eax+38],edx

 

а если не равно нулю то не записываем кординаты в слот 0 сразу телепортируемся по коодинатам в слоте 2

И последняя функция вернуться в исходную позицию

cmp [FlagTeleport],#21

jne code

mov  edx, [slot0]

mov  [eax+30],edx

mov  edx, [slot0+4]

mov  [eax+34],edx

mov  edx, [slot0+8]

mov  [eax+38],edx

mov  [FlagTeleport],#0

Буду благодарен всем за помощь.

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

Нет не помог я на сколько понял это стандартный телепорт сохранил переместился, Такой я уже сделал сам,  вот видео убедись что работает

Спойлер

 

Мне нужен воп ервых на несколько слотов сохранения а точнее на 10,, плюс возврат в исходную позицию, вот тут я и затупил. На 10 делать не обязательно, мнеб на три, самое главное чтоб пример был как осуществить, а на свои десять я сам доделаю.

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

1 минуту назад, Pitronic сказал:

Мне нужен вопервых на несколько слотов сохранения, плюс возврат в исходную позицию, вот тут я и затупил.

В таком случае раступливайся и сделай самостоятельно, тебе постоянно всё дописывают. Основ должно хватать, что бы разобраться.

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

48 минут назад, imaginary сказал:

Основ должно хватать

Нет не хватает, во всём инете примеры есть только на стандартные,, сохранил, переместился. А как на несколько сделать, информации нет. Я сам нашёл координаты, У меня они даже с указателями адреса есть, Ьряк поставил.  то есть что то сделал сам, но такие телепорты какой я сам сделал, почти во  всех трейнерах на разных играх есть, а вот несколько телепортов сделать я не сооброжу как, потому и прошу совета, и форум у нас не просто для того что зарегистрироваться на нём, а для того чтоб учится. Между прочем, я видел даже как Игорь (Garik66) тоже в чём не понял спрашивал совета на форуме. Хотя он не новичок, Игорь подтверди что не вру, Ты ведь выкладывал тему как создать трейнер для двух игр на одинаковом движке, И в видео что то там что сигнатуры одинаковы, но у тебя что то там не получалось. И я не считаю постыдным спросит совета там где не понимаешь.

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

10 часов назад, Pitronic сказал:

несколько телепортов сделать я не сооброжу как

Примерный алгоритм:
1. Заводишь несколько слотов для сохранения координат (обязательно друг за другом)

2. Вводишь глобальную переменную - флаг активного слота

3. При сохранении/загрузке координат используешь адрес первого слота + смещение (флаг помноженный на размер одного слота).

4. Дополнительно вводишь горячие клавиши для переключения активного слота (изменение значения флага).

В общем случае у тебя будет использоваться первый слот, если во флаге 0, второй слот, если во флаге 1,  ну и так далее. То есть, у тебя получится массив слотов.

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

1 час назад, Xipho сказал:

Примерный алгоритм

Этот примерный алгоритм я как раз и описал. Я не пойму как это на практике сделать, Если бы видео на эту тему, Не обязательно на моей игре видео бы кто нибудь сделал?, Вы видели мой ролик?Здесь . Там я сделал теле порт именно благодаря вашему видео 13. (Делаем теле порт типа Save/Restore Position (сохранение и восстановление позиции)

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

1 час назад, Xipho сказал:

Заводишь несколько слотов для сохранения координат (обязательно друг за другом)

Руслан я кажется понял вашу мысль, можно сделать адрес [slot] один слот координат на 120 байт для 10 слотв и остальное всё как в вашем видео я правильно понял? Если так, то как работат с множеством флагов я знаю.

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

18 часов назад, Pitronic сказал:

Мне нужен воп ервых на несколько слотов сохранения а точнее на 10,, плюс возврат в исходную позицию, вот тут я и затупил. На 10 делать не обязательно, мнеб на три, самое главное чтоб пример был как осуществить, а на свои десять я сам доделаю.

Изменено 18 часов назад пользователем Pitronic

А дальше в теме по ссылке посмотреть нельзя было
 

Там есть варианты для телепортов на много точек и т.д.
 

Спойлер

 

Спойлер

 

 

 

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

18 часов назад, Pitronic сказал:

Нет не помог

Ну Вы и ленивые все - Вам записываешь видео, кидаешь ссылку - а Вы ленитесь даже почитать и посмотреть.

Короче - я зол - зол очень ?

 

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

8 часов назад, Xipho сказал:

Заводишь несколько слотов для сохранения координат (обязательно друг за другом)

 

объясни пожлст  как лучше  это сделать ?  я часто делаю  телепорты на несколько сохранений и всегда  на это спотыкаюсь . если мне надо 4 байт это dd 0 , если  надо 8 байт  это dq 0 , а если мне надо 128 байт  тогда как сделать ?  я пробовал запись типа повторить 00 столько раз , но чит енжин  пишет ошибку .

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

56 минут назад, imaginary сказал:

Используй alloc

Можно так, да. А можно и обычной меткой типа (перед прыжком обратно в оригинальный код игры)

slot:
	dd 0 // флаг используемого слота
coord_slot_0: // Первый слот
	dq 0 // Координата Х (если координаты восьмибайтные и dd если четырехбайтные)
	dq 0 // Координата Y
	dq 0 // Координата Z
coord_slot_1:
	dq 0 // Координата Х (если координаты восьмибайтные и dd если четырехбайтные)
	dq 0 // Координата Y
	dq 0 // Координата Z
coord_slot_2:
	dq 0 // Координата Х (если координаты восьмибайтные и dd если четырехбайтные)
	dq 0 // Координата Y
	dq 0 // Координата Z 


А в коде что-то вроде 
 

mov eax, [slot] // регистры в примере взяты от балды
mov [coord_slot_0 + eax * 24], ebx // потому что в предыдущем примере у нас весь слот занимает 24 байта (по 8 байт на координату)

А если координаты лежат рядом, то можно вообще скопировать их через rep stosd. Главное - принцип вычисления адреса текущего слота соблюдать. И да, в примере выше метки coord_slot_1 и coord_slot_2 не нужны, они чисто для наглядности. Нужна только первая coord_slot_0

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

1 час назад, Xipho сказал:

А если координаты лежат рядом

В это месте подробнее можно? У меня по четыре байта друг за другом рядышком.

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

4 часа назад, Garik66 сказал:

Короче - я зол - зол очень

Извеняюсь действительно не внимательно отнёсся, можешь поставить в угол. Ещё раз прошу прощения.

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

18 часов назад, Pitronic сказал:

В это месте подробнее можно? У меня по четыре байта друг за другом рядышком.

Блин, ну нельзя же на каждый чих спрашивать помощи. Ну загугли ты в конце концов что такое rep и что такое stosd. Там все это легко делается. Даже у нас на форуме такое уже неоднократно в скриптах встречалось.

 

 

17 часов назад, Alex2411 сказал:

а как можно сделать просто  одной меткой ?  можно это сделать в  чит енжин ?

Это тебе @imaginary как раз про СЕ и написала. А чем тебе мой вариант не вкатил? Он проще, и без лишних выделений памяти.

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

4 часа назад, Xipho сказал:

как раз про СЕ и написала

 

я знаю ,  но  стараюсь alloc не применять . если применять alloc для  координат некоторые игры почему то иногда вылетают , а  без alloc в той же игре нормально работает .  я в курсе про длинный прыжок  это не из за него .

 

4 часа назад, Xipho сказал:

А чем тебе мой вариант не вкатил? Он проще, и без лишних выделений памяти.

 

так это обычно так  и делаеться . но если у тебя не 3 слота  для запоминания координат , а 60 или больше ? написать целую  кучу dq 0 ? это не удобно .  неужели нет  короткого способа задать большую  метку в чит енжин ?  вроде бы  это даже в  cosmos есть .
я спрашивал  на другом форуме . мне сказали  как  это можно сделать в ассемблере .  надо  объявить например  ноль , а потом  указать сколько раз этот  ноль надо повторить . вроде указать  в скобках сейчас уже не помню. но я так  пробовал  и чит енжин ругается на ошибку создания скрипта  или не  повторяет число раз .  или может я сам не правильно записал в скрипт ,  но где ошибка не знаю .

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

В 08.07.2020 в 18:11, Xipho сказал:

А если координаты лежат рядом, то можно вообще скопировать их через rep stosd

Можно пример, а то я эу команду не знаю

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

14 часов назад, Alex2411 сказал:

надо  объявить например  ноль , а потом  указать сколько раз этот  ноль надо повторить

Ты про dd 0 dup(30). Да, в СЕ такой вариант не работает.

 

14 часов назад, Alex2411 сказал:

но если у тебя не 3 слота  для запоминания координат , а 60 или больше ?

Это ты в ММО играешь, и чтобы быстрее квесты проходить, что ли? 

 

В любом случае, выделение всегда идет не менее одной страницы памяти, потому ты смело можешь использовать мой вариант, забив нулями первые четыре байта. Просто за ними может быть любой мусор.
Если ты при этом не проверяешь как-либо слоты на наличие нулей, такой вариант вполне себе прокатит. А если проверяешь, то можно с помощью флага и однократного выполнения через rep stosd заполнить нулями нужное тебе количество слотов.

 

13 часов назад, Pitronic сказал:

Можно пример, а то я эу команду не знаю

Я точно знаю, что примеры можно найти на ЭТОМ сайте

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

7 часов назад, Xipho сказал:

Ты про dd 0 dup(30). Да, в СЕ такой вариант не работает.

 

ага про этот . жалко что  не работает .  но теперь хоть зря  пробовать не буду .

 

7 часов назад, Xipho сказал:

Это ты в ММО играешь, и чтобы быстрее квесты проходить, что ли?

 

не . это нужно в обычной игре  где не одна , а несколько больших локаций . сейчас например  в The Long Dark . у меня там сделан  телепорт  на 6 ячеек сохранения  плюс ячейка  авто возврата  плюс  ячейка базы . всего получаеться 8 ячеек . а локаций в игре  вроде 7 или 8  и так на каждую надо сделать  .  поэтому получаеться всего нужно использовать примерно 60 ячеек  по 3 координат в каждой  ячейке .

 

7 часов назад, Xipho сказал:

А если проверяешь, то можно с помощью флага и однократного выполнения через rep stosd заполнить нулями нужное тебе количество слотов.

 

понял . буду разбираться .

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

В 08.07.2020 в 15:39, Garik66 сказал:

Там есть варианты для телепортов на много точек и т.д.

Только там на точные координаты (заранее записаные), а мне надо сохранил переместился и чтоб тоже много точек было.

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

15 часов назад, Pitronic сказал:

Только там на точные координаты (заранее записаные), а мне надо сохранил переместился и чтоб тоже много точек было.

И снова невнимательно.
Там вариант и на то, и на другое.

Почитай весь топик, ссылку на который я тебе дал вначале.

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

34 минуты назад, Garik66 сказал:

Почитай весь топик, ссылку на который я тебе дал вначале.

Ну и? В первом варианте сохранить переместился но дин координат, во втором на много точек на не в заданные слоты а на заранее записаные, координаты, а как эти 2 варианта в один который мне надо, то есть сохранил 3 или более координат, переместился по любому из них или по очереди в каждый я не догоняю. а там ещё и фильтр нужен что я в первом сообщении скинул, ко всем инструкциям много адресов пишется потому я и фильтр нашёл выше писал и ещё раз пишу

newmem:

// filtr

cmp [eax+F7BE88],#25

jne code

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

  • Xipho закрыл тема
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...

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

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