#1 20-08-2006 10:53

Sanchez
Registered: 18-08-2006
Posts: 280

ped_stats_to

У меня возник один вопросик:

$6666 = Car.Create(#TAXI, -893.3, -653.1, -100.0)
0129: $6679 = create_actor 4 #WMOCA in_car $6666 driverseat 
$6672 = Marker.CreateAboveCar($6666)
Car.SetMaxSpeed($6666, 17.0)
00AE: unknown_set_car $6666 to_ignore_traffic_lights 2 
Car.ImmuneToNonPlayer($6666) = True

В VC этот код заставит машину ездить по дорогам (Сar.DriveTo() - не используется) без соблюдения ПДД, в SA просто появиться машина и будет стоять на месте. Почему? Сначала я думал, что все это из-за этого:

0243: set_actor $6679 ped_stats_to 16

Но и без этого опкода в VC все нормально работает, в SA его вообще нет. Есть ли такой опкод в SA? Я только нашел вот эти:

0480: unknown_actor 131@(52@,6i) pedgroup 25
077A: set_actor 1@ aggressive_to_pedgroup 4 type 0

Но они тоже желаемого результата не приносят.


P.S. Это мелочь конечно, но все же, в Readme OST.txt на позиции 85:4 - eng (105:3 - rus) должна стоять цифра 3 smile

Offline

#2 20-08-2006 16:40

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: ped_stats_to

Не совсем понял, что нужно, но может опкод Car.SetDriverBehaviour() поможет? Он устанавливает поведение водителя на дороге.

P.S. Это мелочь конечно, но все же, в Readme OST.txt на позиции 85:4 - eng (105:3 - rus) должна стоять цифра 3

сейчас это уже исправлено, но все равно спасибо.

Offline

#3 22-08-2006 09:42

Sanchez
Registered: 18-08-2006
Posts: 280

Re: ped_stats_to

Seemann wrote:

Не совсем понял, что нужно, но может опкод Car.SetDriverBehaviour() поможет? Он устанавливает поведение водителя на дороге.

Просто в gta3 и gtavc в оригинальных миссиях где надо было заставить машину ездить по городу использовался примерно этот код, в gtasa я толком не понял. Ну ладно буду пробовать с Car.SetDriverBehaviour().

0243: set_actor $6679 ped_stats_to 16

что означает цифра 16, и если замена этого опкода в SA

Offline

#4 22-08-2006 15:23

Sanchez
Registered: 18-08-2006
Posts: 280

Re: ped_stats_to

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

После компиляции этого кода, при старте миссии игра выдает ошибку, в чем проблема вроде 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() спасибо, все работает.

Offline

#5 22-08-2006 16:42

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: ped_stats_to

2Sanchez
Я имел в виду, что опечатка исправлена в текущей разрабатываемой версии (у меня на винте), не в той что доступна для скачивания wink Пост удалил, ибо оффтоп.

EDIT:

что означает цифра 16, и если замена этого опкода в SA

Не могу сказать точно. Видимо меняет тип актера на другой. Возможно влияет на его поведение.

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

1. В первом цикле FOR в проверках вместо $index = 1 должно стоять $index == 1.
= это знак операции, а не проверки, нельзя путать с ==. Тоже для остальных.
2. Вместо while $check_car = 6 должно стоять while $check <> 6. Если я правильно понял, цикл должен работать пока не будут уничтожены все машины и не подобраны  чемоданы.
3. После уничтожения одной из машин чемоданы создаются бесконечно, потому что срабатывает проверка Car.Wrecked. Надо вводить доп. контрольку, чтобы после первой обработки условия больше к нему не возвращаться.
4. Зачем нужны переменные 0@-2@ если можно сразу создавать в блоке THEN машину, а после устанавлвать остальные параметры (водитель и пр.)?
5. Лучше проверять не общее число уничтоженных маши + чемоданов (6), а только чемоданов (3).
6. Проверка Object.Picked_up срабатывает, если объект не был создан. В твоем скрипте проверка осуществляется еще до создания чемоданов. Поэтому контрока увеличивается не тогда, когда должна была бы. введи доп. контрольку на создание пикапа и проверяй ее

    if and
      $pickup_exists[$index] == 1
      $box[$index].Picked_up
    then

Last edited by Seemann (22-08-2006 17:41)

Offline

#6 28-08-2006 15:41

Sanchez
Registered: 18-08-2006
Posts: 280

Re: ped_stats_to

Ну, а ту то что неправильно? Все перепробовал. Сначало все норамльно работает, а после того как взорвешь тачку - маркер на тачке не проподает сразу, когда проподает все виснет. Пробовал и 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

Offline

Board footer

Powered by FluxBB