You are not logged in.
Pages: 1
Здравствуйте!
У меня вопрос я в скриптинге всего около недели я немного посмотрел на другие скрипты и написал свой некий скрипт на закладывание бомба замаскированной под картонную коробку, взрыв производиться с помощью клавиши E только вот проблема когда я захожу в игру она вылетает вы не могли бы мне помочь разобрться с проблемой?
Вот сам скрипт написанный под CLEO
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN---------------
create_thread @Explosion
:Explosion
wait 10
model.load(1230)
:Explosion_2
wait 10
if and
player.Defined($PLAYER_CHAR)
model.Available(1230)
not actor.Driving($PLAYER_ACTOR)
00E1: key_pressed 0 2
jf @Explosion_2
04C4: create_coordinate $X $Y $Z from_actor $PLAYER_ACTOR offset 0.0 10.0 3.0
Object.Create($obj_1,1230,$X,$Y,$Z)
Object.StorePos($Obj_1,$X1,$Y1,$Z1)
wait 1000
jump @Explosion_2
:Explosion_3
wait 10
if and
00E1: key_pressed 0 3
jf @Explosion_3
020C: create_explosion_with_radius 12 at $X1 $Y1 $Z1
Object.Destroy($Obj_1)
Object.RemoveReferences($Obj_1)
wait 500
jump @Explosion_3
Заранее спасибо
Offline
Почему нельзя использовать глобальные переменные в CLEO скриптах.
У тебя лишний create_thread - убери его.
Не рекомендуется объединять проверки вместе с Player.Defined. Раздели их на несколько условий.
После создания объекта ты возвращаешься обратно - зачем? Убери jump @Explosion_2
На проверке key_pressed у тебя стоит if and, хотя условие одно. Убери слово and. (в хелпе есть статья, посвященная условиям).
После взрыва ты переходишь на проверку кнопки, хотя по смыслу надо возвращаться на начало скрипта.
Заранее не за что
Offline
Почему нельзя использовать глобальные переменные в CLEO скриптах.
У тебя лишний create_thread - убери его.
Не рекомендуется объединять проверки вместе с Player.Defined. Раздели их на несколько условий.
После создания объекта ты возвращаешься обратно - зачем? Убери jump @Explosion_2
На проверке key_pressed у тебя стоит if and, хотя условие одно. Убери слово and. (в хелпе есть статья, посвященная условиям).
После взрыва ты переходишь на проверку кнопки, хотя по смыслу надо возвращаться на начало скрипта.Заранее не за что
Прости я еще плохо понимаю о чем идет речь:)
Ты не мог бы исправить мой скрипт чтобы я наглядно видел что у меня не так
Еще раз заранее спасибо:)
P.S я не главный main.scm редактирую а пишу мини скрипт типа тех которые можно найти в интернете
Last edited by SLASH (30-01-2009 12:52)
Offline
ты только описываешь модель для загрузки но не загружаешь ее
model.load(1230) 038B: load_requested_models
а вот это наверное лишнее...
Object.StorePos($Obj_1,$X1,$Y1,$Z1)
Все равно ты ты записываешь координаты сразу же после создания, объект не успел бы сдвинутся. Вот если поставить это сразу после метки :Explosion_3 был бы смысл в этом опкоде.
Прости я еще плохо понимаю о чем идет речь:)
Ты не мог бы исправить мой скрипт чтобы я наглядно видел что у меня не так
Еще раз заранее спасибо:)P.S я не главный main.scm редактирую а пишу мини скрипт типа тех которые можно найти в интернете
Исправлять там не так уж много. Будет лучше если ты сделаешь это сам...
1) Заменить все глобальные переменные локальными...
2)
if and player.Defined($PLAYER_CHAR) model.Available(1230) not actor.Driving($PLAYER_ACTOR) 00E1: key_pressed 0 2 jf @Explosion_2
Разделить на 2 условия
if player.Defined($PLAYER_CHAR) jf @Explosion_2 if and model.Available(1230) not actor.Driving($PLAYER_ACTOR) 00E1: key_pressed 0 2 jf @Explosion_2
3)добавить опкод 038B: load_requested_models после model.load
4) разобраться в переходах
jump @Explosion_2 не нужен, иначе ты не сможешь взорвать объект.
jump @Explosion_3 в конце замени на jump @Explosion_2
Offline
После всего что вы мне подсказали плюсы конечно есть:)
Коробка теперь появляется:D
Но взорвать я ее по прежнему не могу и никак не могу рзобраться в чем проблема но все равно спасибо за помощь:)
Я так подумал по моему мне в скриптинге делать нечего:)А идея была хорошая...
Offline
Примерно так (нажимать нужно кнопку B на клаве):
{$CLEO} 0000: while true wait 250 if player.Defined($PLAYER_CHAR) then if 0AB0: key_pressed 66 // 'B' then model.load(1230) while not model.Available(1230) wait 0 end 04C4: create_coordinate 0@ 1@ 2@ from_actor $PLAYER_ACTOR offset 0.0 10.0 0.0 Object.Create(3@, 1230, 0@, 1@, -100.0) Model.Destroy(1230) gosub @ReleaseKey while 8AB0: not key_pressed 66 // 'B' // wait for press wait 250 end 020C: create_explosion_with_radius 12 at 0@ 1@ 2@ Object.Destroy(3@) Object.RemoveReferences(3@) gosub @ReleaseKey end end end :ReleaseKey while 0AB0: key_pressed 66 // 'B' // wait for release wait 250 end return
Скомпилируй и декомпилируй код заново, чтобы получить "опкодный" вариант.
Offline
РЕАЛЬНО РАБОТАЕТ СПАСИБО ОГРОМНОЕ!!!!!!!!!!!!!!!!!!:D
P.S не зря ты админ)) Alien Тебе тоже огромное спасибо за помощь)
Буду учиться)
Offline
Pages: 1