You are not logged in.
Кто знает, объясните, пожалуйста, где ошибка и почему я вылетаю?Очень прошу помогите.
{$CLEO .cs}
0000: NOP
:NONAME_2
wait 0
if
Player.Defined($PLAYER_ACTOR)
Actor.Driving($PLAYER_ACTOR)
jf @NONAME_2
:load
wait 0
03C0: $CAR = actor $PLAYER_ACTOR car
:NONAME_39
wait 0
if
801C: not car $CAR health >= 950
jf @NONAME_39
:NONAME_75
wait 0
Car.SetImmunities($CAR, 1, 1, 1, 1, 1)
066B: $ATCH = attach_particle "EXPLOSION_LARGE" to_car $CAR with_offset 0.0 0.0 0.0 flag 1
wait 0
064C: make_particle $ATCH visible
wait 20
0650: destroy_particle $ATCH
wait 0
0407: store_coords_to 2@ 3@ 4@ from_car $CAR with_offset 0.0 0.0 0.0
020C: create_explosion_with_radius 10 at 2@ 3@ 4@
0948: create_explosion_at 2@ 3@ 4@ type 10 camera_shake 1
0565: create_soundless_explosion_at 2@ 3@ 4@ type 10
wait 3000
Car.SetImmunities($CAR, 0, 0, 0, 0, 0)
Car.Health($CAR) = 1000
jump @NONAME_2
Offline
1. Чтоб что-то было понятно существует тег [cоde][/codе]
2.
if Player.Defined($PLAYER_ACTOR) Actor.Driving($PLAYER_ACTOR) jf @NONAME_2
Когда много проверок, ставится if and или if or
if and Player.Defined($PLAYER_ACTOR) Actor.Driving($PLAYER_ACTOR) jf @NONAME_2
3. Предыдущий фрагмент в принципе не правильный, т.к. проверка Player.Defined должна отделяться от всего.
4. В КЛЕО НЕЛЬЗЯ использовать глобальные переменные!!!!!!!!!!1111111
Вот поправленный не тестированный код.
{$CLEO .cs} 0000: :START wait 10 if Player.Defined($PLAYER_ACTOR) jf @START if Actor.Driving($PLAYER_ACTOR) jf @START 03C0: 0@ = actor $PLAYER_ACTOR car if 801C: not car 0@ health >= 950 jf @START Car.SetImmunities(0@, 1, 1, 1, 1, 1) 066B: 1@ = attach_particle "EXPLOSION_LARGE" to_car 0@ with_offset 0.0 0.0 0.0 flag 1 wait 0 064C: make_particle 1@ visible wait 20000 0650: destroy_particle 1@ 0407: store_coords_to 2@ 3@ 4@ from_car 0@ with_offset 0 0 0 020C: create_explosion_with_radius 10 at 2@ 3@ 4@ 0948: create_explosion_at 2@ 3@ 4@ type 10 camera_shake 1 0565: create_soundless_explosion_at 2@ 3@ 4@ type 10 wait 3000 Car.SetImmunities($CAR, 0, 0, 0, 0, 0) Car.Health($CAR) = 1000 jump @START
По коду приблизительно закрадывается идея, что скрипт делает взрыв возле тачки если её ушибить...
Offline
спасибо за то, что исправил указал ошибки, буду знать, но всё равно вылетает , я почему то ссылаюсь на данную строчку
801C: not car 0@ health >= 950 можел ли тут, быть какая-то ошибка?
Offline
Car.SetImmunities($CAR, 0, 0, 0, 0, 0) Car.Health($CAR) = 1000
Это необходимо заменить на
Car.SetImmunities(0@, 0, 0, 0, 0, 0) Car.Health(0@) = 1000
Иначе игра вылетит, т.к. будет произведена попытка выполнения действий над несуществующей машиной $CAR.
Ну и если есть желание научиться писать качественные скрипты, то надо привыкать применять проверки на существование - они позволят избежать вылета, если машину (актёра, объект) удалила игра или другой скрипт. Результат проверки действителен с момента её проведения до первой после неё команды wait.
{$CLEO .cs} 0000: :START wait 10 if Player.Defined($PLAYER_ACTOR) jf @START if Actor.Driving($PLAYER_ACTOR) jf @START 03C0: 0@ = actor $PLAYER_ACTOR car if 801C: not car 0@ health >= 950 jf @START Car.SetImmunities(0@, 1, 1, 1, 1, 1) 066B: 1@ = attach_particle "EXPLOSION_LARGE" to_car 0@ with_offset 0.0 0.0 0.0 flag 1 064C: make_particle 1@ visible wait 20000 0650: destroy_particle 1@ if 056E: car 0@ defined jf @START 0407: store_coords_to 2@ 3@ 4@ from_car 0@ with_offset 0 0 0 020C: create_explosion_with_radius 10 at 2@ 3@ 4@ 0948: create_explosion_at 2@ 3@ 4@ type 10 camera_shake 1 0565: create_soundless_explosion_at 2@ 3@ 4@ type 10 wait 3000 if 056E: car 0@ defined jf @START Car.SetImmunities(0@, 0, 0, 0, 0, 0) Car.Health(0@) = 1000 jump @START
Last edited by Den_spb (17-02-2011 22:26)
Offline
хм,все равно не работает(
но если поменять это условие:
if
801C: not car 0@ health >= 950
jf @START
на условие нажатия клавиши,то он работает, можно ли заменить это условие:
801C: not car 0@ health >= 950
на другое, но что бы смысл был тот же?
Last edited by Ty6ePkYJIe3 (18-02-2011 06:35)
Offline
Нет, нельзя.
Используй заместо 03C0: 0@ = actor $PLAYER_ACTOR car
Это:
... 0AB5: $PLAYER_ACTOR 0@ $_UNUSED if actor.incar($PLAYER_ACTOR,0@) jf @START ...
Мною было замечено, что 03C0 отказывается работать в клео4 вообще ибо всегда возвращает -1. Даже на миссиях.
Offline
Нет, даже так ничего не получается(
Но я 100% знаю, что обрываеться всё на опкоде
801C: not car 0@ health >= 950, а вот как исправить незнаю...
Offline
Но я 100% знаю, что обрываеться всё на опкоде
801C: not car 0@ health >= 950, а вот как исправить незнаю...
Ты прав, причина вылета в этом опкоде. Дело в том, что назначение у этого опкода абсолютно другое - сравнение значений двух переменных:
801C: not $CURRENT_MONTH_DAY > $GYM_MONTH_DAY_WHEN_LIMIT_REACHED // (int)
А опкод для сравнения здоровья машины с числом несложно найти через поиск опкодов (Сервис - Инструменты - Поиск опкодов):
8185: not car 73@ health >= 700
Мною было замечено, что 03C0 отказывается работать в клео4 вообще ибо всегда возвращает -1. Даже на миссиях.
Лично у меня данный 03C0 на клео4 работает без проблем.
Offline
Всё работает! Огромное всем спасибо за то, что дали понять, что неправельно и огромное спасибо тебе Den_spb за этот каверзный опкод)):^
Offline
Туберкулёз, в где ты взял опкод в таком виде?
Offline
Из учебника для "чайников" откуда же еще
Offline
Покажи, пожалуйста
Offline
Вот он в оригенальном виде, а у меня был просто переделанный
801C: not $Var_1 >= $Var_1
Last edited by Ty6ePkYJIe3 (19-02-2011 13:10)
Offline
Хм, ну я в скриптинге особо не разбираюсь, "чайник" же ещё
Offline
И ещё вопрос, кто знает, что это такое? Точнее как это читаеться и работает?
&0(15@,1i) == 16711680
Last edited by Ty6ePkYJIe3 (19-02-2011 17:44)
Offline
Работа с памятью через ячейку массива. RTFM
Offline
Уууу, кароче мне до этого ещё далеко
Offline
И ещё вопрос, как работает команда: gosub, а то сколько я не пробовал понять, немогу
Offline
Госуб - безусловный переход...
а вообще, почитай вот это - клик
Offline
Вот теперь понимаю, спасибо тебе
Offline
Люди, как сделать так, чтобы данные о машине удалялись если игрок её невидит,
но скрипт до этого момента продолжал работать с начала?
Offline