You are not logged in.
Вот ведь! Иной раз, пока не задашь вопрос - ничего не поймешь. Всё. Я решила проблемку:)
Offline
Очередная неразрешимая жизненная проблема. Пед, по моей задумке, после столкновения должен мертвецки вываливаться из авто. А он выпрыгивает из такчки, как ни в чем ни бывало, и на меня с кулаками. И вдобавок, когда целюсь в него - он зеленый, как огурчик. Ну, хотя бы пожелтел. В чем у меня ошибка? Вот код.
: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
Используй событие 73, чтобы проверить, столкнулся ли актер с чем либо.
Offline
Прибавила $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
Что перед NONAME_24?
Offline
Ничего. Это начало.
Offline
А актер 0@ тогда откуда берется?
Offline
Seemann, я думала, что опкодом 056D: actor 0@ defined я его определяю, как существующего.
Каким же опкодом надо заставить его быть? Мне же нужны все передвигающиеся на авто педы.
Last edited by svetka (06-06-2007 05:40)
Offline
056D это проверка. она ничего не определяет. Для получения актера в переменную используй код Interceptor (AIC).
Offline
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
Что в NONAME_23_263? Ты какими-то отрывками код пишешь.
Переименуй метки в более понятные, замени глобальные переменные на локальные.
Offline
Svetka, дело в том, что ты не выбираешь актера, т.е. переменная 9@ у тебя не проинициализирована, отсюда может быть присваивание ей -1
Offline
Зачем постоянно декомпилить мэйн,просто сохраняйте мэйн в текстовый файл,а потом просто этот файл открывайте.....во-первых эффективнее работаете,во-вторых все остается таким каким и было:)
Last edited by Sergino_thirty_seven (06-06-2007 17:51)
Sergino_thirty_seven ака Sergino37 скриптер с missions.gtamaps.net
Offline
Да, а перед началом потока лучше писать
THREAD 'MY_THREAD'
Тогда если уж и потребуется декомпиляция, то метки хотя бы как надо будут называться
Offline
Вот код полностью:
: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
Tector,
Svetka, дело в том, что ты не выбираешь актера, т.е. переменная 9@ у тебя не проинициализирована, отсюда может быть присваивание ей -1
В этом плане всё в порядке. И маркеры над случайными педами стоят. Но вот условия для педов не выполняются.
Offline
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
Seemann, ту умница. Нет слов. Спасибо. Всё получилось
Offline
Да Seemann это умеет,лучше всех
я вообще глобальные переменные стараюсь не юзать,во-первых запутатсья можно, во-вторых.....какая нибудь причина да найдется
Last edited by Sergino_thirty_seven (07-06-2007 20:10)
Sergino_thirty_seven ака Sergino37 скриптер с missions.gtamaps.net
Offline
2Sergino_thirty_seven:
я вообще глобальные переменные стараюсь не юзать
Ну и зря - с ними багов меньше и запутаться куда сложнее...
Что легче запомнить:
ЗНАЧЕНИЕ ЭТОТО:
@1 @584 @452 @278
ИЛИ ЭТОГО:
$My_CAR $Autopilot $Killer $Bonus $Gun
???
Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ
Offline
Что легче запомнить
Скриптинг вообще сложная штука. Если ты не можешь запомнить смысл десятка переменных, зачем вообще этим заниматься?
А вот каждая дополнительная глобалка "съедает" 4 байта от общего размера и без того ограниченного майна.
Следующая версия Sanny (которая уже давно готова, только находится на тестировании) позволяет давать имена локальным переменным
Offline
2Capushon вообщето и то и другое и ешё много чего мне запомнить легко,я говорил о новичках
Sergino_thirty_seven ака Sergino37 скриптер с missions.gtamaps.net
Offline
2Seemann:
Если ты не можешь запомнить смысл десятка переменных,
А если у меня их более двух сотен ???
Причем размер мейна почти стандартный -
DEFINE MEMORY 44142 ; Equals Mission Builder type global variable range $2 to $10949
2Sergino_thirty_seven:
вообщето и то и другое и ешё много чего мне запомнить легко
2 сотни переменных без имени? Я так не думаю ...
Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ
Offline
Насчет 2 сот незнаю,на крайний случай в блокнот запишу
Last edited by Sergino_thirty_seven (09-06-2007 11:33)
Sergino_thirty_seven ака Sergino37 скриптер с missions.gtamaps.net
Offline