#226 Re: Модификации » [EXE|Patch] San Andreas Mission Packs » 12-01-2007 11:56

Да и я хз как с лоадером сделать то что я планирую.

Планируешь что?

---
А патчить там много надо? Я только при старте миссий это находил.

#227 Re: Модификации » [EXE|Patch] San Andreas Mission Packs » 12-01-2007 11:47

Нужен патчик, небольшой инжект в тело ехе.

Можно лоадер сделать.

#228 Re: Вопросы по скриптингу » Выбор произвольного педа. » 12-01-2007 11:26

Я понимаю, что это команда. У меня WMYVA2 атакует PLAYER_ACTORа. Вот

А зачем тогда используешь ее в условии.

Но когда я убиваю WMYVA2, то он не исчезает, не исчезает  маркер, и как следствие - WMYVA2 не появляется после смерти.

Я не могу представить чего ты хочешь добиться от этого:

if
05E2: AS_actor 2@ kill_actor $PLAYER_ACTOR 
else_jump @NONAME_14_112

Используй мой код. smile

$SA_VASYA_FLAG == 0
Естественно я ему и аналог-то подобрать затрудняюсь. Разве что:
0489: unknown_actor $PLAYER_ACTOR flag 0

Нет, это я проверяю что актер существует.

#229 Re: Программирование » Краткое руководство по ассемблеру » 12-01-2007 10:53

Я только не понял, при чем здесь Sanny Builder в заголовке

Так это чтобы легче понять было. Это я так асм с sanny builder'ом сравнивал.

#230 Программирование » Краткое руководство по ассемблеру » 11-01-2007 10:41

Sanchez
Replies: 28

В Sanny Builder для хранения данных используются переменные, в ассемблере данные можно хранить непосредственно в памяти или в регистрах. Основных регистров восемь: EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP. Регистры EAX, EBX, ECX, EDX – можно использовать без ограничения для любых целей. Регистры ESI, EDI, ESP, EBP –  имеют более конкретное назначение и могут применяться для хранения всевозможных переменных, только когда они не используются по назначению.
Основной ассемблерной командой является MOV (пересылка данных) ее можно сравнить с оператором присвоения. Равенство:

$a = 16 
или
$a = 0x10

из Sanny Builder на языке ассемблера записывается примерно так:

MOV EAX, 10  ; ассемблер использует шестнадцатеричную систему счисления

Пересылать данные также можно из регистра в регистр:

MOV EAX, EBX ; записать в регистр EAX значение регистра EBX

Если мы хотим обратится к ячейки памяти, то ее адрес нужно заключить в квадратные скобки (указатель):

MOV EAX, [402000]  ; записать в регистр EAX значение по адресу 402000

MOV EAX, [EBX]	 ; записать в регистр EAX значение по адресу указанному в регистре EBX

MOV [402000], EAX  ; записать в ячейку памяти с адресом 402000 значение регистра EAX

MOV [EAX], EBX	 ; записать в ячейку памяти с адресом указанным в регистре EAX значение регистра EBX

Если необходимо, то к указателю можно добавить смещение:

MOV EAX, [EBX + 66]  ; записать в регистр EAX значение по адресу указанному в регистре EBX со смещением 66

MOV [EAX + 66], EBX  ; записать в ячейку памяти с адресом указанным в регистре EAX со смещением 66 значение регистра EBX

Для более удобного хранения данных можно использовать специальную область памяти, которая называется стек. Стек можно представить в виде списка или массива данных. Класть и забирать данные можно только с вершины стека. Таким образом, если в стек положить числа 1, 2, 3, то при чтении они будут получаться в обратном порядке – 3, 2, 1. Для работы со стеком служат команды PUSH и POP. PUSH кладет данные на верхушку стека, а POP снимает их оттуда. Пример:

PUSH 1  ; положить в стек число 1
PUSH 2  ; положить в стек число 2
PUSH 3  ; положить в стек число 3

После выполнения данных команд, стек будет выглядеть так:

3   ; число положенное в стек последним стало первым
2
1   ; число положенное в стек первым стало последним

Стек позволяет сохранять данные в памяти, не заботясь об их абсолютных адресах. Теперь рассмотрим более сложный пример:

MOV EAX, 1  ; записать в регистр EAX число 1, EAX = 1
MOV ECX, 2  ; записать в регистр ECX число 2, ECX = 2
PUSH EAX	; положить в стек значение регистра EAX, т.е. 1
PUSH EСX	; положить в стек значение регистра EСX, т.е. 2
POP EAX	 ; снять значение с верхушки стека и положить в регистр EAX, EAX = 2
POP EСX	 ; снять значение с верхушки стека и положить в регистр ECX, ECX = 1

Указатель на вершину стека хранится в регистре ESP:

PUSH 123456	 ; положить в стек число 123456
MOV EAX, [ESP]  ; записать в регистр EAX значение с верхушки стека, т.е. EAX = 123456

Для того чтобы складывать, вычитать или производить другие действия над двумя числами, одно число необходимо загрузить в регистр, а другое может быть как в регистре, так и в памяти. Рассмотрим основные математические операции.
Для сложения чисел служит команда ADD,  для вычитания SUB. Обе команды имеют одинаковый синтаксис:

ADD приемник, источник

SUB приемник, источник

Команда ADD складывает источник и приемник, сумму помещает в приемник. Команда SUB вычитает источник из приемника и помещает разность в приемник. Пример:

ADD EAX, 3  ; EAX = EAX + 3

SUB ECX, 5  ; ECX = ECX - 5

В Sanny Builder это выглядит так:

$eax += 3

$ecx -= 5

Для умножения чисел служит команда MUL, для деления DIV. Команды имеют следующий синтаксис:

MUL источник

DIV источник

Команда MUL умножает значение регистра EAX на источник, результат помещает в регистр EAX:

MOV EAX, 5  ; EAX = 5
MOV ECX, 7  ; ECX = 7
MUL ECX	 ; EAX = EAX * ECX = 5 * 7 = 23, ECX = 7

Команда DIV делит значение регистра EAX на источник, результат помещает в регистр EAX, остаток от деления в регистр EDX:

MOV EAX, 64  ; EAX = 64
MOV ECX, 3   ; ECX = 3
DIV ECX	  ; EAX = EAX / ECX = 64 / 3 = 21, ECX = 3, EDX = 1

Команды MUL и DIV применяются для умножения и деления чисел  без знака. Источник может быть регистром, ячейкой памятью, но не может быть числом.

Теперь переедем к условным переходам. Для осуществления условного перехода необходимо сравнить данные и в зависимости от результата перейди в нужную часть программы. Для сравнения используется команда CMP:

CMP приемник, источник

Команда сравнивает приемник с источником и сохраняет результат во флагах. Флаги – это биты специального регистра. Для перехода используют команды JNE или JE. JE перейдет, если источник с приемником равны, а JNE – если неравны. Пример:

CMP EAX, 5  ; сравниваем значение регистра EAX с числом 5
JE 402000   ; если EAX равно 5, то переходим по адресу 402000
MOV EAX, 1  ; если нет, записываем в регистр EAX число 1

Безусловный переход осуществляется командой JMP:

JMP 402000  ; перейти по адресу 402000

Чтобы вызвать функцию используют команду CALL:

CALL 402000  ; вызвать функцию по адресу 402000

CALL EAX	 ; вызвать функцию по адресу указанному в регистре EAX

CALL [EAX]   ; вызвать функцию по адресу указанному в ячейки памяти

Возврат из функции осуществляется командой RET.

#231 Re: Справочная информация » [SA] Выполняем ассемблерный код из main.scm » 11-01-2007 10:29

listener wrote:

У меня она называется EnableCheatLegimate - выставить флаг чита, без установки статуса читера.

Это известо smile вопрос вот в чем:

А есть еще call с параметром как глобальный адрес. Т.е. там значение не зависит уже от позиции команды, оно постоянно: 0x438370. Но у меня не получается заставить это работать.

1. напрямую (immediate value). Например: call 0x438370 не могу понять как сделать

#232 Re: Вопросы по скриптингу » Выбор произвольного педа. » 11-01-2007 10:19

05E2: AS_actor 2@ kill_actor $PLAYER_ACTOR

Это команда, а не условие.

Используй:

Actor.Dead(2@)

Я уже приводил это код, привиду еще раз, может поможет:

:EXAMPLE
var
  $SA_VASYA: Actor
  $SA_VASYA_MARKER: Marker
  $SA_VASYA_FLAG: Integer = 0
end // var

while true
  wait 0

// Создаем актера если, 25.0 < расстояние до игрока < 35.0
  
  if and
    $SA_VASYA_FLAG == 0
    80FE:   not actor $PLAYER_ACTOR 0 2510.2615 -1671.3036 13.4114 radius 25.0 25.0 15.0
    00FE:   actor $PLAYER_ACTOR 0 2510.2615 -1671.3036 13.4114 radius 35.0 35.0 15.0 
  then
    #WMOICE.Load
    while not #WMOICE.Available
      wait 0
    end
    $SA_VASYA_FLAG = 1
    $SA_VASYA.Create(CivMale, #WMOICE, 2510.2615, -1671.3036, 13.4114)
    $SA_VASYA.Angle = 84.2641
    $SA_VASYA_MARKER.CreateAboveActor($SA_VASYA)
  end // if

// Проверка, если расстояние от игрока до актера > 35.0
  
  if and
    $SA_VASYA_FLAG == 1
    80FE:   not actor $PLAYER_ACTOR 0 2510.2615 -1671.3036 13.4114 radius 35.0 35.0 15.0 
  then
    $SA_VASYA.RemoveReferences
    #WMOICE.Destroy
    $SA_VASYA_MARKER.Disable
    $SA_VASYA_FLAG = 0   
  end // if
 
// Проверка на смерть актера 
  
  if and
    $SA_VASYA_FLAG == 1
    $SA_VASYA.Dead
  then
    $SA_VASYA.RemoveReferences
    #WMOICE.Destroy
    $SA_VASYA_MARKER.Disable  
    $SA_VASYA_FLAG = 0
  end // if

// Другие проверки...
  
end // while

#233 Re: Справочная информация » Адреса и функции gta_sa.exe 1.0 » 10-01-2007 10:30

речь шла про команду GTA:LC, там в основном любители

Незнал

только не на рапиду с нее потом хрен скачаешь, а у меня модем  лучше сюда через фтп залить

Хорошо

#234 Re: Вопросы по скриптингу » Прикрепление тачек » 10-01-2007 10:15

0683: attach_car 2@ to_car 1@ at_offset 3.0 0.0 0.0  rotation 0.0 0.0 0.0

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

#235 Re: Справочная информация » [SA] Выполняем ассемблерный код из main.scm » 10-01-2007 10:04

Думаю никому это не надо sad

Завтра выложу что успел написать.

#236 Re: Справочная информация » Адреса и функции gta_sa.exe 1.0 » 10-01-2007 09:36

listener wrote:

Знаю, что много. Но у меня есть преимущество - я профессионал (и вообще, старый и толстый дядька). Летом будет 15 лет, как у меня в трудовой написано "программист". И дизассемблер я увидел в первый раз почти два десятка лет назад :-) В любом случае, полезной инфы можно будет нарыть много.

Так и у R* профессионалы своего дела, а не дядьки с улицы smile
Может объяснишь почему: http://www.sannybuilder.com/forums/view … d=166#p166 (#7 пост)

Могу кинуть базу. (IDA 5.0.0.879).

Выложи на рапиду. Охота посмотреть.

#237 Re: Справочная информация » [SA] Выполняем ассемблерный код из main.scm » 09-01-2007 13:17

2Seemann:
Я имел ввиду для тех, кто вообще в этом не рубит. Для тебя это не интересно будет. Конечно можно и подробно расписать, но тогда другим будет не понятно.

Вот думаю о чем бы написать, план таков:
1. регистры (eax,ebx и т.д.)
2. стек (push\pop)
4. осн. команды (mov,jmp)
5. арифметические (add,sub,div,mul)
!!! логические (or,xor,not ) - думаю пока не надо !!!
6. условные переходы (cmp, je,jne,jb,jg,jl,ja)
7. вызов функций (call,ret)
8. Др.команды - пока непридумал.

#238 Re: Справочная информация » Проверка версии SA из SCM » 09-01-2007 13:05

это gta_sa_loader. Запускает игру без заставок, можно переключаться в оконный режим (если разрешение в игре не больше 800x600).
http://www.gtaforums.com/index.php?showtopic=222397
линки в теме.

Кул, теперь хоть олька заработает smile, а то softice не ставится sad

Основная фишка не в этом, а в том, что ключики из GXT меняются из scm, и можно любой текст выводить не зависимо от GXT.

Это как? Может расскажешь?

#239 Re: Справочная информация » [SA] Выполняем ассемблерный код из main.scm » 09-01-2007 09:34

Если кому надо могу написать статейку об основных командах ассемблера с примерами. Если не надо, то не напишу.

#240 Re: Справочная информация » Проверка версии SA из SCM » 09-01-2007 09:03

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

А если код содержал 100 строк и два тебе нужных адреса пришлось добавлять ещу 100. А так накидал в стек все параметры, адреса потом

mov eax, dword [esi+X]

а вконце выравнял стек и все

add esp, Y

качется так проще



P.S. это моя недавняя разработка, это я так, просто показать

Хорошо!!! А по каким адресам лежат координаты игрока?
На скриншоте у тебя игра запущена в окнонном режиме? Это как?

#241 Re: Справочная информация » Проверка версии SA из SCM » 09-01-2007 08:49

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

Это я знаю smile  В твоем моде для каждой версии свой асмовский код, а можно все сделать в одном.

это примерно тоже самое как команду inc eax заменить на

mov edx, eax
mov ecx, 1
add edx, ecx
mov eax, edx



ps:
http://sannybuilder.com/images/forums/dbmu2.jpg

ты это о чем? sad


зы
Почему для проверки версий используется адрес 8A6168. Можно любой адрес использовать?

#242 Re: Справочная информация » Проверка версии SA из SCM » 08-01-2007 09:23

Можно еще так:

hex
A1 68618A00          // MOV EAX,DWORD PTR DS:[8A6168]
3D 605E4600          // CMP EAX,00465E60
74 00                // JE SHORT X

...

end

только нужно вручную считать кол-во байт.

#243 Re: Вопросы по скриптингу » Автомобиль с человекм » 25-12-2006 09:31

а как сделать чтоб если на него направлена пушка он не поднимал руки в верх а отаковал?

0350: unknown_actor 2@ not_scared_flag 1

#244 Re: Вопросы по скриптингу » Автомобиль с человекм » 24-12-2006 09:23

как отличить условие от команды?

В OST (Opcode Search Tool):
'^' - показать условие
'-^' - показать команды
Например: 'car ^' - покажет условия, где встречается слово 'car'.
зы лучше ридми почитает там про OST подробно расписанно. wink

#245 Re: Вопросы по скриптингу » Автомобиль с человекм » 21-12-2006 10:20

а какая каманда заставляет актёра атаковать Актёра?
я ничего не нашол

Плохо искал wink

05E2: AS_actor 65@ kill_actor 50@

#246 Re: Справочная информация » [SA|PC] Опкоды-пустышки. » 18-12-2006 09:57

Да то самое, примерно так:

0046ED92   > \32C0          XOR AL,AL                                ;  Cases 711,712,718,71B,71C,71D,720,721,722,725,728,738,739,73A,73D,740,744,748,758,759,764,765,766 of switch 0046D076
0046ED94   .  EB 02         JMP SHORT gta_sa.0046ED98
0046ED96   >  0C FF         OR AL,0FF                                ;  Default case of switch 0046D076
0046ED98   >  90            NOP
0046ED99   .  90            NOP
0046ED9A   .^ E9 0695F9FF   JMP gta_sa.004082A5
0046ED9F   >  5F            POP EDI
0046EDA0   .  5E            POP ESI
0046EDA1   .  5D            POP EBP
0046EDA2   .  64:890D 00000>MOV DWORD PTR FS:[0],ECX
0046EDA9   .  5B            POP EBX
0046EDAA   .  81C4 C4000000 ADD ESP,0C4
0046EDB0   .  C2 0400       RETN 4

А чтоже опкоды 0662-0664? Они тоже ниче не делают.

Сам же писал

Кстати, все debug опкоды (0662, например) тоже пустышки.

Что в таблицу не занес?

#247 Re: Вопросы по скриптингу » Автомобиль с человекм » 18-12-2006 09:20

2reinstal:
Попробуй это код (я его не тестил)

create_thread @EXAMPLE

...

// put your mods (threads) here
:EXAMPLE
var
  $SA_VASYA: Actor
  $SA_VASYA_MARKER: Marker
  $SA_VASYA_FLAG: Integer = 0
end // var

while true
  wait 0

// Создаем актера если, 25.0 < расстояние до игрока < 35.0
  
  if and
    $SA_VASYA_FLAG == 0
    80FE:   not actor $PLAYER_ACTOR 0 2510.2615 -1671.3036 13.4114 radius 25.0 25.0 15.0
    00FE:   actor $PLAYER_ACTOR 0 2510.2615 -1671.3036 13.4114 radius 35.0 35.0 15.0 
  then
    #WMOICE.Load
    while not #WMOICE.Available
      wait 0
    end
    $SA_VASYA_FLAG = 1
    $SA_VASYA.Create(CivMale, #WMOICE, 2510.2615, -1671.3036, 13.4114)
    $SA_VASYA.Angle = 84.2641
    $SA_VASYA_MARKER.CreateAboveActor($SA_VASYA)
  end // if

// Проверка, если расстояние от игрока до актера > 35.0
  
  if and
    $SA_VASYA_FLAG == 1
    80FE:   not actor $PLAYER_ACTOR 0 2510.2615 -1671.3036 13.4114 radius 35.0 35.0 15.0 
  then
    $SA_VASYA.RemoveReferences
    #WMOICE.Destroy
    $SA_VASYA_MARKER.Disable
    $SA_VASYA_FLAG = 0   
  end // if
 
// Проверка на смерть актера 
  
  if and
    $SA_VASYA_FLAG == 1
    $SA_VASYA.Dead
  then
    $SA_VASYA.RemoveReferences
    #WMOICE.Destroy
    $SA_VASYA_MARKER.Disable  
    $SA_VASYA_FLAG = 0
  end // if
  
end // while

end_thread

тоже самое с тачками если она взорвана или на ней уехяли
чтоб она сново появлялоась

014B: $PARKED_RHINO = init_parked_car_generator #RHINO -1 -1 1 alarm 0 door_lock 0 0 10000 at 2435.3018 -1671.8482 12.8008 angle 90.0 
014C: set_parked_car_generator $PARKED_RHINO cars_to_generate_to 0

#248 Re: Вопросы по скриптингу » Автомобиль с человекм » 17-12-2006 13:02

Чем отличается

04A5: store_dead_actor 72@(43@,4i) position_to $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3
04A5: get_actor 17@ approximate_position_3D_coord_to 0@ 1@ 2@

#249 Re: Справочная информация » [SA|PC] Опкоды-пустышки. » 17-12-2006 12:50

Seemann wrote:
Sanchez wrote:

В конце каждого блока идет несколько опкодов, но их нету в скм.

Не совсем понял, что конкретно ты имеешь ввиду (кусок кода)?

У меня в ольке показывается так:

Case XXX of switch 00494005

А вконце каждого блока вот так:

Case default XXX XXX XXX XXX of switch 00494005

где XXX опкоды, в разных блоках их разное кол-во, так вот этих самых опкодов нету в скм.

зы лучше ольку скачай и посмотри, она всего 1 мб

#250 Re: Справочная информация » [SA|PC] Опкоды-пустышки. » 17-12-2006 12:37

2Seemann:

068D рабочий

Это я перепутал. smile

Я просмотрел все блоки вроде больше не нашел.
В конце каждого блока идет несколько опкодов, но их нету в скм.

Board footer

Powered by FluxBB