#51 31-05-2007 09:53

svetka
Registered: 29-12-2006
Posts: 222

Re: Автомобиль с человекм

Вот ведь! Иной раз, пока не задашь вопрос - ничего не поймешь. Всё. Я решила проблемку:)

Offline

#52 05-06-2007 14:12

svetka
Registered: 29-12-2006
Posts: 222

Re: Автомобиль с человекм

Очередная неразрешимая жизненная проблема. Пед, по моей задумке, после столкновения должен мертвецки вываливаться из авто. А он выпрыгивает из такчки, как ни в чем ни бывало, и на меня с кулаками. И вдобавок, когда целюсь в него - он зеленый, как огурчик. Ну, хотя бы пожелтел. В чем у меня ошибка? Вот код.

:NONAME_24
wait 0 
if 
056D:   actor 0@ defined 
jf @NONAME_24 
if 
0449:   actor 0@ in_a_car 
jf @NONAME_24 
0811: $12528 = actor 0@ car 
if 
   Actor.InCar(0@, $12528)
jf @NONAME_24 
$12529 = Car.Health($12528)
wait 5 
$12530 = Car.Health($12528)
if 
001C:   $12529 > $12530 
jf @NONAME_24 
0084: $12531 = $12529  
0060: $12531 -= $12530  
$12531 /= 2 
$12532 = Actor.Health(0@)
0060: $12532 -= $12531 
Actor.Health(0@) = $12532
jump @NONAME_24

Offline

#53 05-06-2007 14:53

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

Re: Автомобиль с человекм

Используй событие 73, чтобы проверить, столкнулся ли актер с чем либо.

Offline

#54 05-06-2007 16:35

svetka
Registered: 29-12-2006
Posts: 222

Re: Автомобиль с человекм

Прибавила $1 сразу после первой проверки - никакого эффекта:
:NONAME_24
wait 0
if
056D:   actor 0@ defined
jf @NONAME_24
Player.Money($PLAYER_CHAR) += 1
и  т. д.
Денег не прибавляется.

Last edited by svetka (05-06-2007 16:36)

Offline

#55 05-06-2007 17:02

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

Re: Автомобиль с человекм

Что перед NONAME_24?

Offline

#56 05-06-2007 17:35

svetka
Registered: 29-12-2006
Posts: 222

Re: Автомобиль с человекм

Ничего. Это начало.

Offline

#57 06-06-2007 05:08

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

Re: Автомобиль с человекм

А актер 0@ тогда откуда берется? hmm

Offline

#58 06-06-2007 05:39

svetka
Registered: 29-12-2006
Posts: 222

Re: Автомобиль с человекм

Seemann, я думала, что опкодом 056D:   actor 0@ defined я его определяю, как существующего.
Каким же опкодом надо заставить его быть? Мне же нужны все передвигающиеся на авто педы. hmm

Last edited by svetka (06-06-2007 05:40)

Offline

#59 06-06-2007 05:49

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

Re: Автомобиль с человекм

056D это проверка. она ничего не определяет. Для получения актера в переменную используй код Interceptor (AIC).

Offline

#60 06-06-2007 09:12

svetka
Registered: 29-12-2006
Posts: 222

Re: Автомобиль с человекм

Seemann, вот, то я делаю через :
:NONAME_23
wait 100
Actor.StorePos($PLAYER_ACTOR, 0@, 1@, 2@)
3@ = 1.2
gosub @NONAME_23_263
if
   not 9@ == -1
jf @NONAME_23_256
Marker.Disable($12533)
$12533 = Marker.CreateAboveActor(9@)
wait 1000
056D:   actor 9@ defined
jf @NONAME_23
if
0449:   actor 9@ in_a_car
jf @NONAME_23
0811: $12528 = actor 9@ car // versionC
if
   Actor.InCar(9@, $12528)
jf @NONAME_23
wait 0
080E: get_actor 9@ ped_event_to 1@
if
  1@ == 73
jf @NONAME_23
$12529 = Car.Health($12528)
wait 5
$12530 = Car.Health($12528)
if
001C:   $12529 > $12530 // $ > $ (int)
jf @NONAME_23
0084: $12531 = $12529 // $ = $ (int)
0060: $12531 -= $12530 // $ -= $ (int)
$12531 /= 4
$12532 = Actor.Health(9@)
0060: $12532 -= $12531 // $ -= $ (int)
Actor.Health(9@) = $12532
jump @NONAME_23

:NONAME_23_256
Player.Money($PLAYER_CHAR) += 1

jump @NONAME_23

... и у меня капают баксы. Почему фальшь?

Offline

#61 06-06-2007 11:57

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

Re: Автомобиль с человекм

Что в NONAME_23_263? Ты какими-то отрывками код пишешь.
Переименуй метки в более понятные, замени глобальные переменные на локальные.

Offline

#62 06-06-2007 14:55

Tector
Registered: 01-05-2007
Posts: 34

Re: Автомобиль с человекм

Svetka, дело в том, что ты не выбираешь актера, т.е. переменная 9@ у тебя не проинициализирована, отсюда может быть присваивание ей -1

Offline

#63 06-06-2007 17:47

Sergino_thirty_seven
Registered: 06-06-2007
Posts: 18

Re: Автомобиль с человекм

Зачем постоянно декомпилить мэйн,просто сохраняйте мэйн в текстовый файл,а потом просто этот файл открывайте.....во-первых эффективнее работаете,во-вторых все остается таким каким и было:)

Last edited by Sergino_thirty_seven (06-06-2007 17:51)


Sergino_thirty_seven ака Sergino37 скриптер с missions.gtamaps.net

Offline

#64 06-06-2007 18:52

Tector
Registered: 01-05-2007
Posts: 34

Re: Автомобиль с человекм

Да, а перед началом потока лучше писать

THREAD 'MY_THREAD'

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

Offline

#65 07-06-2007 05:00

svetka
Registered: 29-12-2006
Posts: 222

Re: Автомобиль с человекм

Вот код полностью:

:NNME
thread 'NNME'
wait 100 
Actor.StorePos($PLAYER_ACTOR, 0@, 1@, 2@)
3@ = 20.0 
gosub @AIC_GETACTOR 
if 
   not 9@ == -1 
jf @NNME_217 
Marker.Disable($12528)
$12528 = Marker.CreateAboveActor(9@)
wait 1000  
if 
056D:   actor 9@ defined 
jf @NNME 
if 
0449:   actor 9@ in_a_car 
jf @NNME 
0811: $12528 = actor 9@ car // versionC 
if 
   Actor.InCar(9@, $12528)
jf @NNME 
wait 0 
080E: get_actor 9@ ped_event_to 1@ 
if 
  1@ == 73 
jf @NNME 
$12529 = Car.Health($12528)
wait 5 
$12530 = Car.Health($12528)
if 
001C:   $12529 > $12530 // $ > $ (int) 
jf @NNME 
0084: $12531 = $12529 // $ = $ (int) 
0060: $12531 -= $12530 // $ -= $ (int) 
$12531 /= 4 
$12532 = Actor.Health(9@)
0060: $12532 -= $12531 // $ -= $ (int) 
Actor.Health(9@) = $12532
Player.Money($PLAYER_CHAR) += 1
jump @NNME 

:NNME_217
jump @NNME

:AIC_GETACTOR
0006: 16@ = 305868
0006: 17@ = @AIC_TESTACTORHANDLE
0006: 20@ = 1988
0002: jump @AIC_STARTSEARCH 

:AIC_STARTSEARCH 
0085: 4@ = 16@ // (int)
008B: 4@ = &0(4@,1i) // (int) 
0085: 19@ = 4@ // (int)
000E: 19@ -= 10787160
0016: 19@ /= 4 
008B: 19@ = &0(19@,1i) // (int)
000E: 4@ -= 10787168 
0016: 4@ /= 4 
008B: 4@ = &0(4@,1i) // (int)
0006: 9@ = -1 
0085: 11@ = 4@ // (int) 
0006: 10@ = 0

:AIC_SEARCHLOOPMAIN
000A: 4@ += 20 
0050: gosub @AIC_READ4B 
0085: 4@ = 5@ // (int) 
8039:   not  4@ == 0 
004D: jump_if_false @AIC_SEARCHLOOPNEXT 
000A: 4@ += 48 
0050: gosub @AIC_READ4B 
0085: 12@ = 5@ // (int) 
000A: 4@ += 4 
0050: gosub @AIC_READ4B 
0085: 13@ = 5@ // (int) 
000A: 4@ += 4 
0050: gosub @AIC_READ4B 
0085: 14@ = 5@ // (int) 
050A: 15@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 12@ 13@ 14@ 
0025:   3@ > 15@ // (float) 
004D: jump_if_false @AIC_SEARCHLOOPNEXT 
0085: 9@ = 10@ // (int) 
0085: 4@ = 16@ // (int) 
008B: 4@ = &0(4@,1i) // (int) 
000A: 4@ += 4 
0050: gosub @AIC_READ4B 
0085: 4@ = 5@ // (int) 
005A: 4@ += 9@ // (int) 
0050: gosub @AIC_READ1B 
0012: 9@ *= 256 
005A: 9@ += 5@ // (int)
0002: jump 17@

:AIC_TESTACTORHANDLE
056D:   is 9@ valid_actor_handle
004D: jump_if_false @AIC_NOHANDLE 
00D6: if or
003C:   $PLAYER_ACTOR == 9@ // (int) 
0118:   actor 9@ dead 
004D: jump_if_false @AIC_NEWSEARCHRADIUS
0002: jump @AIC_NOHANDLE

:AIC_NOHANDLE
0006: 9@ = -1 
0002: jump @AIC_SEARCHLOOPNEXT 

:AIC_NEWSEARCHRADIUS    
0085: 3@ = 15@ 

:AIC_SEARCHLOOPNEXT 
005A: 11@ += 20@ // (int) 
0085: 4@ = 11@ // (int) 
000A: 10@ += 1 
002D:   10@ >= 19@ // (int)
004D: jump_if_false @AIC_SEARCHLOOPMAIN
0051: return 

:AIC_READ1B
0085: 6@ = 4@ // (int) 
0085: 8@ = 4@ // (int) 
0016: 4@ /= 4 
0012: 4@ *= 4 
0062: 8@ -= 4@ // (int) 
0012: 8@ *= 8 
000E: 4@ -= 10787168 
0016: 4@ /= 4 
008B: 7@ = &0(4@,1i) // (int) 
0085: 4@ = 6@ // (int) 
0006: 5@ = 0 
0006: 6@ = 0 

:AIC_READ1B_LOOP
08B9:   test 7@ bit 8@ 
004D: jump_if_false @AIC_READ1B_NEXTBIT 
08BF: set 5@ bit 6@ 

:AIC_READ1B_NEXTBIT
000A: 6@ += 1 
000A: 8@ += 1 
0039:   6@ == 8 
004D: jump_if_false @AIC_READ1B_LOOP 
0051: return 

:AIC_READ4B
0085: 6@ = 4@ // (int) 
000E: 4@ -= 10787168 
0016: 4@ /= 4 
008B: 5@ = &0(4@,1i) // (int) 
0085: 4@ = 6@ // (int) 
0051: return

Last edited by svetka (07-06-2007 05:40)

Offline

#66 07-06-2007 10:05

svetka
Registered: 29-12-2006
Posts: 222

Re: Автомобиль с человекм

Tector,

Svetka, дело в том, что ты не выбираешь актера, т.е. переменная 9@ у тебя не проинициализирована, отсюда может быть присваивание ей -1

В этом плане всё в порядке. И маркеры над случайными педами стоят. Но вот условия для педов не выполняются.

Offline

#67 07-06-2007 11:53

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

Re: Автомобиль с человекм

2svetka:
Для получения текущей машины используй не 0811 а 03С0.

К чему такая конструкция?

if 
0449:   actor 9@ in_a_car 
jf @NNME 
0811: $12528 = actor 9@ car // versionC 
if 
   Actor.InCar(9@, $12528)
jf @NNME

Когда достаточно:

  Actor.Driving(9@)
  jf @NNME
  03C0: 1@ = actor 9@ car

Проверять здоровье машины не нужно, событие 73 уже делает это.

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

Offline

#68 07-06-2007 15:48

svetka
Registered: 29-12-2006
Posts: 222

Re: Автомобиль с человекм

Seemann, ту умница. Нет слов. Спасибо. Всё получилось smile

Offline

#69 07-06-2007 20:04

Sergino_thirty_seven
Registered: 06-06-2007
Posts: 18

Re: Автомобиль с человекм

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

Last edited by Sergino_thirty_seven (07-06-2007 20:10)


Sergino_thirty_seven ака Sergino37 скриптер с missions.gtamaps.net

Offline

#70 08-06-2007 00:16

Capushon
Registered: 13-08-2006
Posts: 352
Website

Re: Автомобиль с человекм

2Sergino_thirty_seven:

я вообще глобальные переменные стараюсь не юзать

Ну и зря - с ними багов меньше и запутаться куда сложнее...
Что легче запомнить:
ЗНАЧЕНИЕ ЭТОТО:

@1
@584
@452
@278

ИЛИ ЭТОГО:

$My_CAR
$Autopilot
$Killer
$Bonus
$Gun

???


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#71 08-06-2007 03:47

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

Re: Автомобиль с человекм

Capushon wrote:

Что легче запомнить

Скриптинг вообще сложная штука. Если ты не можешь запомнить смысл десятка переменных, зачем вообще этим заниматься?
А вот каждая дополнительная глобалка "съедает" 4 байта от общего размера и без того ограниченного майна.

Следующая версия Sanny (которая уже давно готова, только находится на тестировании) позволяет давать имена локальным переменным wink

Offline

#72 08-06-2007 10:15

yelmi
Registered: 10-12-2006
Posts: 134
Website

Re: Автомобиль с человекм

позволяет давать имена локальным переменным

это только в коде миссий?

Не знал надо будет проверить. wink

О чем идет речь я уже понял...:)

Last edited by yelmi (08-06-2007 13:41)

Offline

#73 08-06-2007 13:59

Sergino_thirty_seven
Registered: 06-06-2007
Posts: 18

Re: Автомобиль с человекм

2Capushon вообщето и то и другое и ешё много чего мне запомнить легко,я говорил о новичках


Sergino_thirty_seven ака Sergino37 скриптер с missions.gtamaps.net

Offline

#74 08-06-2007 22:32

Capushon
Registered: 13-08-2006
Posts: 352
Website

Re: Автомобиль с человекм

2Seemann:

Если ты не можешь запомнить смысл десятка переменных,

А если у меня их более двух сотен ???  wink
Причем размер мейна почти стандартный -
DEFINE MEMORY 44142   ; Equals Mission Builder type global variable range $2 to $10949

2Sergino_thirty_seven:

вообщето и то и другое и ешё много чего мне запомнить легко

2 сотни переменных без имени? Я так не думаю ...


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#75 09-06-2007 11:28

Sergino_thirty_seven
Registered: 06-06-2007
Posts: 18

Re: Автомобиль с человекм

Насчет 2 сот незнаю,на крайний случай в блокнот запишу smile

Last edited by Sergino_thirty_seven (09-06-2007 11:33)


Sergino_thirty_seven ака Sergino37 скриптер с missions.gtamaps.net

Offline

Board footer

Powered by FluxBB