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

2Seemann:
Вот еще нарыл:

0047D099   > \6A 01                   PUSH 1                                   ;  Case 18E of switch 0047C108
0047D09B   .  8BCE                    MOV ECX,ESI
0047D09D   .  E8 DE6FFEFF             CALL gta_sa.00464080
0047D0A2   .  32C0                    XOR AL,AL
0047D0A4   .  5F                      POP EDI
0047D0A5   .  5E                      POP ESI
0047D0A6   .  83C4 7C                 ADD ESP,7C
0047D0A9   .  C2 0400                 RETN 4

0048C206   > \6A 02                   PUSH 2                                   ;  Case 4E2 of switch 0048B5BB
0048C208   .  8BCE                    MOV ECX,ESI
0048C20A   .  E8 717EFDFF             CALL gta_sa.00464080
0048C20F   .  32C0                    XOR AL,AL
0048C211   .  E9 290A0000             JMP gta_sa.0048CC3F

00495A7D   > \0FB605 81F0B600         MOVZX EAX,BYTE PTR DS:[B6F081]           ;  Case 68D of switch 00494005
00495A84   .  69C0 38020000           IMUL EAX,EAX,238
00495A8A   .  8B88 38F3B600           MOV ECX,DWORD PTR DS:[EAX+B6F338]
00495A90   .  8B90 3CF3B600           MOV EDX,DWORD PTR DS:[EAX+B6F33C]
00495A96   .  8B80 40F3B600           MOV EAX,DWORD PTR DS:[EAX+B6F340]
00495A9C   .  E9 EE020000             JMP gta_sa.00495D8F

0046E91A   > \6A 01                   PUSH 1                                   ;  Case 752 of switch 0046D076
0046E91C   .  8BCE                    MOV ECX,ESI
0046E91E   .  E8 5D57FFFF             CALL gta_sa.00464080
0046E923   .  32C0                    XOR AL,AL
0046E925   .  E9 6E040000             JMP gta_sa.0046ED98

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

004846EF   > \6A 01                   PUSH 1                                   ;  Cases 3A7,3A8 of switch 00483BF2
004846F1   .  8BCE                    MOV ECX,ESI
004846F3   .  E8 88F9FDFF             CALL gta_sa.00464080
004846F8   .  32C0                    XOR AL,AL
004846FA   .  E9 9C0F0000             JMP gta_sa.0048569B

00490FA0   > \6A 02                   PUSH 2                                   ;  Case 5E9 of switch 00490DD5
00490FA2   .  8BCE                    MOV ECX,ESI
00490FA4   .  E8 D730FDFF             CALL gta_sa.00464080
00490FA9   .  32C0                    XOR AL,AL
00490FAB   .  E9 FB1A0000             JMP gta_sa.00492AAB

0049289D   > \6A 09                   PUSH 9                                   ;  Case 636 of switch 00490DD5
0049289F   .  8BCE                    MOV ECX,ESI
004928A1   .  E8 DA17FDFF             CALL gta_sa.00464080
004928A6   .  32C0                    XOR AL,AL
004928A8   .  E9 FE010000             JMP gta_sa.00492AAB

0047730C   > \6A 02                   PUSH 2                                   ;  Case 93E of switch 004762E0
0047730E   .  8BCE                    MOV ECX,ESI
00477310   .  E8 6BCDFEFF             CALL gta_sa.00464080
00477315   .  32C0                    XOR AL,AL
00477317   .  5F                      POP EDI
00477318   .  5E                      POP ESI
00477319   .  5B                      POP EBX
0047731A   .  81C4 84000000           ADD ESP,84
00477320   .  C2 0400                 RETN 4

0047742B   > \6A 01                   PUSH 1                                   ;  Case 945 of switch 004762E0
0047742D   .  8BCE                    MOV ECX,ESI
0047742F   .  E8 4CCCFEFF             CALL gta_sa.00464080
00477434   .  8B0D 783CA400           MOV ECX,DWORD PTR DS:[A43C78]
0047743A   .  69C9 90010000           IMUL ECX,ECX,190
00477440   .  0FB691 E8CEB700         MOVZX EDX,BYTE PTR DS:[ECX+B7CEE8]
00477447   .  E9 93070000             JMP gta_sa.00477BDF

0047AC3E   > \6A 01                   PUSH 1                                   ;  Case 9D8 of switch 0047A787
0047AC40   .  8BCE                    MOV ECX,ESI
0047AC42   .  E8 3994FEFF             CALL gta_sa.00464080
0047AC47   .  32C0                    XOR AL,AL
0047AC49   .  E9 E3120000             JMP gta_sa.0047BF31

2Seemann:
А почему 3AD и 91A пустышки?

0048475A   > \6A 01                   PUSH 1                                   ;  Case 3AD of switch 00483BF2
0048475C   .  8BCE                    MOV ECX,ESI
0048475E   .  E8 1DF9FDFF             CALL gta_sa.00464080
00484763   .  A1 783CA400             MOV EAX,DWORD PTR DS:[A43C78]
00484768   .  85C0                    TEST EAX,EAX
0048476A   .  74 11                   JE SHORT gta_sa.0048477D
0048476C   .  6A 01                   PUSH 1
0048476E   .  E8 4DBD2900             CALL gta_sa.007204C0
00484773   .  83C4 04                 ADD ESP,4
00484776   .  32C0                    XOR AL,AL
00484778   .  E9 1E0F0000             JMP gta_sa.0048569B
0048477D   >  6A 00                   PUSH 0
0048477F   .  E8 3CBD2900             CALL gta_sa.007204C0
00484784   .  83C4 04                 ADD ESP,4
00484787   .  32C0                    XOR AL,AL
00484789   .  E9 0D0F0000             JMP gta_sa.0048569B

004768D5   > \6A 02                   PUSH 2                                   ; /Arg1 = 00000002; Case 91A of switch 004762E0
004768D7   .  8BCE                    MOV ECX,ESI                              ; |
004768D9   .  E8 B2DEFEFF             CALL gta_sa.00464790                     ; \gta_sa.00464790
004768DE   .  32C0                    XOR AL,AL
004768E0   .  5F                      POP EDI
004768E1   .  5E                      POP ESI
004768E2   .  5B                      POP EBX
004768E3   .  81C4 84000000           ADD ESP,84
004768E9   .  C2 0400                 RETN 4

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

00490FA0   > \6A 02                   PUSH 2                                   ;  Case 5E9 of switch 00490DD5
00490FA2   .  8BCE                    MOV ECX,ESI
00490FA4   .  E8 D730FDFF             CALL gta_sa.00464080
00490FA9   .  32C0                    XOR AL,AL
00490FAB   .  E9 FB1A0000             JMP gta_sa.00492AAB

2Seemann:
1. Является ли этот опкод пустышкой?
2. CALL gta_sa.00464080 - что за процедура?

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

Дизассемблировать 14 мб идой надо неимеворное терпение :), уж лучше OllyDbg
---
IDA Pro 5.0.0.879 Advanced Full with SDK, Flair and WinCE Debugger -
[You must login to view hidden text.]


Ссылку спрятал в тег hide.

#255 Re: Справочная информация » [SA] Выполняем ассемблерный код из main.scm » 15-12-2006 09:33

Если кто-то обладает знаниями ассемблера и может объснить отдельные элементы простым языком - пишите в этой теме.

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

Команда: CALL операнд
Назначение: Вызов процедуры
Процессор: 8086

Сохраняет текущий адрес в стеке и передает управление по адресу, указанному в операнде. Операндом может быть непосредственное значение адреса (метка в ассемблерных программах), регистр или переменная, содержащие адрес перехода. Если в качестве адреса перехода указано только смещение, считается, что адрес расположен в том же сегменте, что и команда CALL. При этом, так же как и в случае с JMP, выполняется ближний вызов процедуры. Процессор помещает значение регистра EIP (IP при 16-битной адресации), соответствующее следующей за CALL команде, в стек и загружает в EIP новое значение, осуществляя тем самым передачу управления. Если операнд CALL — регистр или переменная, то его значение рассматривается как абсолютное смещение, если операнд — метка в программе, то ассемблер указывает ее относительное смещение. Чтобы осуществить дальний CALL в реальном режиме, режиме V86 или в защищенном режиме при переходе в сегмент с теми же привилегиями, процессор помещает в стек значения регистров CS и EIP (IP при 16-битной адресации) и выполняет дальний переход аналогично команде JMP.

#256 Re: Справочная информация » [SA] Выполняем ассемблерный код из main.scm » 14-12-2006 10:26

Seemann wrote:

Проблема заключается в другом.

E8 7FE19EFF     // call 0x438370 = 4424560

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

А GetProcAddress пробовал? Сам проверить не могу игры пока нет sad

#257 Re: Sanny Builder и CLEO » Вопросы и предложения по Sanny Builder » 07-12-2006 12:26

2Seemann

2Sanchez
угу, санник 3-й версии уже умеет такое.

А во второй добавить это можно? Или скоро выйде 3 версия wink.

2Alexander

Сделать бы ещё поддержку финкций и цены бы ему не было , правда и так уже самый лучший билдер .

Об это я уже спрашивал читай 17 пост.

Seemann wrote:

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

#259 Re: Справочная информация » [SA|MEMORY] Поезда. Лимит вагонов. » 04-12-2006 08:38

Sanchez wrote:

Данный адрес - это начало перечня моделей для каждого типа поезда. Всего определено 16 блоков-перечней (по числу типов), каждый из которых содержит 16 чисел типа DWord, определяющих номер модели поезда и его вагонов.

Откуда взялись еще два вагона? Можно перезаписать другие типы? Тогда получается что можно создать 16 * 16 = 256 вагонов (теоретически).

#260 Re: Справочная информация » [SA|MEMORY] Поезда. Лимит вагонов. » 03-12-2006 12:10

2Seemann

 for 0@ = -382229 to -382216
   wait 0 
   &0(0@,1i) = #STREAKC        
 end

Почему используются отрицательные числа?

в San Andreas есть адрес 0x8D44F8.

Почему же в коде этот адрес не встречается?

#261 Работа с памятью, EXE » О статье: Меняем игровую память через SCM (San Andreas) » 03-12-2006 10:58

Sanchez
Replies: 2

Домашнее задание: проверьте это

054C: use_GXT_table 'POOL' 
01E3: text_1number_styled 'NUM' &0 5000 ms 1  // ~1~

У меня первые четыре байта другие. Это постоянное число или нет?

sb_hw.png

sb_gp.jpg

А про поезд подробнее можно?

 for 0@ = -382229 to -382216
   wait 0 
   &0(0@,1i) = #STREAKC        
 end

Почему используются отрицательные числа?

в San Andreas есть адрес 0x8D44F8.

Почему же в коде этот адрес не встречается?

#262 Re: О сайте и форумах » Вопросы и предложения » 02-12-2006 12:14

2Seemann
Часовой пояс видимо неправильно настроен, мне приходится ставить +5, хотя время Московсое.

#264 Re: Sanny Builder и CLEO » Вопросы и предложения по Sanny Builder » 21-11-2006 10:26

Не понял, уточни пожалуйста.

Например, определил в начале потока функции, а потом где нужно использовать их. Чтобы неписать одно и то же по несколько раз.

p.s. как function() в delphi

#265 Re: Sanny Builder и CLEO » Вопросы и предложения по Sanny Builder » 16-11-2006 09:26

Хорошо бы реализовать функции (или что тот набодобее того), что бы весь код можно было записать в одном потоке.

#266 Re: Sanny Builder и CLEO » Вопросы и предложения по Sanny Builder » 26-10-2006 11:56

Seemann wrote:

Потому что самого СБ3 еще мало. В блоге мы будем публиковать информацию о разработке.

Да такой степени мало, что даже нечего писать.

#267 Re: О сайте и форумах » Ранги пользователей » 26-10-2006 11:52

admin wrote:

Совсем без рангов тоже не интересно. Это уже социализм получается
Хотя если большинство будет ЗА, то конечно ранги будут убраны.

Так что насчет рангов?

Capushon wrote:

Ранги и репутация - порождают флуд, делая из серьёзного сайта помойку...

Я не думаю что 10 человек будут флудить.

#268 Re: О сайте и форумах » Вопросы и предложения » 11-09-2006 10:31

Как я понял, пока не залогинился на форуме используется английский язык с кодировкой iso-8859-1 в этом случае русский текс не читаем, нельзя ли установить по умолчанию русский язык или изменить кодировку на windows-1251.

#269 Re: О сайте и форумах » Ранги пользователей » 11-09-2006 10:23

Можно как в гта в статистики за прохождение.

#270 Re: Вопросы по скриптингу » Вопросы по опкодам » 09-09-2006 12:31

2Seemann
Может быть, я только высказал своё мнение.

#271 Re: Вопросы по скриптингу » ped_stats_to » 28-08-2006 15:41

Ну, а ту то что неправильно? Все перепробовал. Сначало все норамльно работает, а после того как взорвешь тачку - маркер на тачке не проподает сразу, когда проподает все виснет. Пробовал и wait везде запихивать но тот же результат.

var
 $car: Array 2 of Car
 $actor: Array 2 of Actor
 $marker: Array 2 of Marker
 $flag_dest_car: Array 2 of Integer
 $flag_pl_car: Array 2 of Integer
 $count: Integer = 2
 $check: Integer = 0
end // var

#ADMIRAL.Load

while not #ADMIRAL.Available
 wait 0
end

#MAFFA.Load

while not #MAFFA.Available
 wait 0
end                      

for $i = 0 to $count // step 1
 wait 250
 if 
  $i == 0
 then
  0@ = 1821.6421
  1@ = -1720.1123
  2@ = 12.982
 end
    
 if 
  $i == 1
 then
  0@ = 490.3722
  1@ = -1307.807
  2@ = 15.1438
 end
  
 if 
  $i == 2
 then
  0@ = 2300.0854
  1@ = -1151.4205
  2@ = 26.2798
 end

 0395: clear_area 1 at 0@ 1@ 2@ range 5.0 
 $car[$i].Create(#ADMIRAL, 0@, 1@, 2@)
 0229: set_car $car[$i] color_to 0 0 
 0129: $actor[$i] = create_actor 20 #MAFFA in_car $car[$i] driverseat
 $marker[$i].CreateAboveCar($car[$i])
 $car[$i].SetMaxSpeed(17.0)
 00AE: unknown_set_car $car[$i] to_ignore_traffic_lights 0
 $car[$i].ImmuneToNonPlayer(True)
 $car[$i].SetDriverBehaviour(FollowRoad)
 $flag_dest_car[$i] = 0
 $flag_pl_car[$i] = 0
end // for

while $check <> 3
 wait 0
 for $i = 0 to $count // step 1
  if and
   $car[$i].Wrecked
   $flag_dest_car[$i] == 0  
  then 
   $marker[$i].Disable
   $flag_dest_car[$i] = 1
   $check += 1
  end // if
  if and
   not $car[$i].Wrecked
   8185: not car $car[$i] health >= 999
   not $actor[$i].Dead
   $actor[$i].InCar($car[$i]) 
  then
   $car[$i].SetMaxSpeed(25.0)
   00AE: unknown_set_car $car[$i] to_ignore_traffic_lights 2
   $car[$i].ImmuneToNonPlayer(False)
  end // if
  if and
   not $car[$i].Wrecked
   Actor.InCar($PLAYER_ACTOR, $car[$i])
   $flag_pl_car[$i] == 0    
  then
   $car[$i].ImmuneToNonPlayer(False)
   $flag_pl_car[$i] = 1
  end // if 
 end // for
end // while

#272 Re: Sanny Builder и CLEO » Вопросы и предложения по Sanny Builder » 27-08-2006 09:52

Будет ли там возможнось отлаживать свой написаный код. Я имею ввиду брейкпоинты.

#273 Re: Вопросы по скриптингу » Вопросы по опкодам » 27-08-2006 09:37

Capushon wrote:

Может им хотелось, что бы так думали...  :-)

Да мне тоже так кажется.

Seemann wrote:

Вряд ли. Больно уж конструкции оттуда схожи с теми, что мы имеем в SCM.

Я не думаю что весь код можно написть в таком виде, больно долго и муторно. Вот гта 3 можно (да и то врят ли), там всего код занимал 2 мб, но гта са с 14 мб, отлаживать столь большой код замучеешься. Хотя кто их там знает. smile

#274 Re: Sanny Builder и CLEO » Вопросы и предложения по Sanny Builder » 27-08-2006 09:22

Хорошо бы реализовать конструкцию if...elseif...else.

#275 Re: Вопросы по скриптингу » ped_stats_to » 22-08-2006 15:23

Не стал создовать новый топик, думаю и здесь ответят:):):)

После компиляции этого кода, при старте миссии игра выдает ошибку, в чем проблема вроде wait везде стоит.

DEFINE OBJECTS 0
DEFINE MISSIONS 1
DEFINE MISSION 0 at @MyMission
DEFINE EXTERNAL_SCRIPTS -1 // Use -1 to not write AAA script
DEFINE UNKNOWN_EMPTY_SEGMENT 0
DEFINE UNKNOWN_THREADS_MEMORY 0

// --------------------
// THE STRIPPED MAIN THREAD
// contains initial info
// --------------------
thread 'Main'
 var
  $PLAYER_CHAR: Player
 end // var
01F0: set_max_wanted_level_to 6 
set_wb_check_to 0 
00C0: set_current_time 8 0 
04E4: unknown_refresh_game_renderer_at 2488.5601 -1666.84 
Camera.SetAtPos(2488.5601, -1666.84, 13.38)
$PLAYER_CHAR = Player.Create(#NULL, 2488.5601, -1666.84, 13.38)
$PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR)
Camera.SetBehindPlayer
set_weather 0          
wait 0 ms
$PLAYER_CHAR.SetClothes("PLAYER_FACE", "HEAD", Head)
$PLAYER_CHAR.SetClothes("JEANSDENIM", "JEANS", Legs)
$PLAYER_CHAR.SetClothes("SNEAKERBINCBLK", "SNEAKER", Shoes)
$PLAYER_CHAR.SetClothes("VEST", "VEST", Torso)
$PLAYER_CHAR.Build
$PLAYER_CHAR.CanMove = True
fade 1 (out) 0 ms                     
select_interior 0
0629: change_stat 181 (islands unlocked) to  4
016C: restart_if_wasted at 2027.77 -1420.52 15.99 angle 137.0 unknown 0
016D: restart_if_busted at 1550.68 -1675.49 14.51 angle 90.0 unknown 0
// put your create_thread commands here

0180: set_on_mission_flag_to $ONMISSION 
create_thread @MyTrigger
end_thread

// put your mission mods here

:MyTrigger
thread "MyTrigger"
$TrigMarker = Marker.CreateIconAndSphere(15, 2489.0591, -1682.2808, 13.3358) 
while $MyMission_Passed == 0
wait 250 
  if Player.Defined($PLAYER_CHAR)
  then 
    if $ONMISSION == 0 // integer values 
    then 
      if 00FF: actor $PLAYER_ACTOR 0 2489.0591 -1682.2808 13.3358 radius 1.0 1.0 2.0 
      then 
        if Player.Controllable($PLAYER_CHAR)
        then
          $ONMISSION = 1 // integer values 
          00BA: text_styled 'INTRO_1' 1000 ms 2  // Big Smoke
          Marker.Disable($TrigMarker)  
          start_mission MyMission
        end // if1
      end // if2
    end // if3
  end // if4
end // while
end_thread

:MyMission
thread "MyMission" 
  gosub @MissionStart 
  if 
    wasted_or_busted 
  then
    gosub @MissionFailed
  end 
  gosub @MissionCleanup 
end_thread 

:MissionStart
var
  $car: array 3 of Car
  $actor: array 3 of Actor
  $box: array 3 of Pickup
  $marker_car: array 3 of Marker
  $marker_box: array 3 of Marker
  $check: Integer = 0
  $count: Integer = 3
end

#SECURICA.Load

while not #SECURICA.Available
 wait 0
end

#WMOPJ.Load

while not #WMOPJ.Available
 wait 0
end

for $index = 1 to $count
wait 250
  if 
    $index = 1
  then
    0@ = 1821.6421
    1@ = -1720.1123
    2@ = 12.982
  end
    
  if 
    $index = 2
  then
    0@ = 490.3722
    1@ = -1307.807
    2@ = 15.1438
  end
  
  if 
    $index = 3
  then
    0@ = 2300.0854
    1@ = -1151.4205
    2@ = 26.2798
  end
  
  $car[$index].Create(#SECURICA, 0@, 1@, 2@)
  0129: $actor[$index] = create_actor 4 #WMOPJ in_car $car[$index] driverseat
  $marker_car[$index].CreateAboveCar($car[$index])
  018B: show_on_radar $marker_car[$index] 3 
  Car.SetMaxSpeed($car[$index], 20.0)
  00AE: unknown_set_car $car[$index] to_ignore_traffic_lights 2
  Car.ImmuneToNonPlayer($car[$index]) = True
  Car.SetDriverBehaviour($car[$index], FollowRoad)

end

while $check_car = 6
  wait 0
  
  for $index = 1 to $count
  wait 250
    if 
      $car[$index].Wrecked
    then
      $marker_car[$index].Disable
      $check += 1
      0407: create_coordinate 3@ 4@ 5@ from_car $car[$index] offset 0.0 0.0 0.0
      $box[$index].Create(#BRIEFCASE, 3, 3@, 4@, 5@)
      03DC: $marker_box[$index] = create_marker_above_pickup $box[$index]
      018B: show_on_radar $marker_box[$index] 2 
    end
    
    if
      $box[$index].Picked_up
    then
      $marker_box[$index].Disable
      $check += 1
    end 
  end
  
end
gosub @MissionPassed
return

:MissionPassed
01E3: text_1number_styled 'M_PASSD' 0 5000 ms 1  // MISSION PASSED!
$MyMission_Passed = 1
return

:MissionFailed
00BA: text_styled 'M_FAIL' 5000 ms 1  // ~r~MISSION FAILED!
return 

:MissionCleanup
$ONMISSION = 0 // integer values 
mission_cleanup 
return

2Seemann за Car.SetDriverBehaviour() спасибо, все работает.

Board footer

Powered by FluxBB