#1 30-01-2009 10:16

SLASH
Registered: 30-01-2009
Posts: 4

Мой первый скрипт

Здравствуйте!
У меня вопрос я в скриптинге всего около недели я немного посмотрел на другие скрипты и написал свой некий скрипт на закладывание бомба замаскированной под картонную коробку, взрыв производиться с помощью клавиши 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

#2 30-01-2009 12:41

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

Re: Мой первый скрипт

Почему нельзя использовать глобальные переменные в CLEO скриптах.

У тебя лишний create_thread - убери его.
Не рекомендуется объединять проверки вместе с Player.Defined. Раздели их на несколько условий.
После создания объекта ты возвращаешься обратно - зачем? Убери jump @Explosion_2
На проверке key_pressed у тебя стоит if and, хотя условие одно. Убери слово and. (в хелпе есть статья, посвященная условиям).
После взрыва ты переходишь на проверку кнопки, хотя по смыслу надо возвращаться на начало скрипта.

Заранее не за что smile

Offline

#3 30-01-2009 12:51

SLASH
Registered: 30-01-2009
Posts: 4

Re: Мой первый скрипт

Seemann wrote:

Почему нельзя использовать глобальные переменные в CLEO скриптах.

У тебя лишний create_thread - убери его.
Не рекомендуется объединять проверки вместе с Player.Defined. Раздели их на несколько условий.
После создания объекта ты возвращаешься обратно - зачем? Убери jump @Explosion_2
На проверке key_pressed у тебя стоит if and, хотя условие одно. Убери слово and. (в хелпе есть статья, посвященная условиям).
После взрыва ты переходишь на проверку кнопки, хотя по смыслу надо возвращаться на начало скрипта.

Заранее не за что smile

Прости я еще плохо понимаю о чем идет речь:)
Ты не мог бы исправить мой скрипт чтобы я наглядно видел что у меня не так
Еще раз заранее спасибо:)

P.S я не главный main.scm редактирую а пишу мини скрипт типа тех которые можно найти в интернете

Last edited by SLASH (30-01-2009 12:52)

Offline

#4 30-01-2009 13:07

Alien
Registered: 12-10-2008
Posts: 564

Re: Мой первый скрипт

ты только описываешь модель для загрузки но не загружаешь ее

model.load(1230)
038B: load_requested_models

а вот это наверное лишнее...

Object.StorePos($Obj_1,$X1,$Y1,$Z1)

Все равно ты ты записываешь координаты сразу же после создания, объект не успел бы сдвинутся. Вот если поставить это сразу после метки :Explosion_3 был бы смысл в этом опкоде.

SLASH wrote:

Прости я еще плохо понимаю о чем идет речь:)
Ты не мог бы исправить мой скрипт чтобы я наглядно видел что у меня не так
Еще раз заранее спасибо:)

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

#5 30-01-2009 13:35

SLASH
Registered: 30-01-2009
Posts: 4

Re: Мой первый скрипт

После всего что вы мне подсказали плюсы конечно есть:)
Коробка теперь появляется:D
Но взорвать я ее по прежнему не могу и никак не могу рзобраться в чем проблема но все равно спасибо за помощь:)
Я так подумал по моему мне в скриптинге делать нечего:)А идея была хорошая...

Offline

#6 30-01-2009 13:41

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

Re: Мой первый скрипт

Примерно так (нажимать нужно кнопку 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

#7 30-01-2009 14:18

SLASH
Registered: 30-01-2009
Posts: 4

Re: Мой первый скрипт

РЕАЛЬНО РАБОТАЕТ СПАСИБО ОГРОМНОЕ!!!!!!!!!!!!!!!!!!:D
P.S не зря ты админ)) Alien Тебе тоже огромное спасибо за помощь)
Буду учиться)

Offline

Board footer

Powered by FluxBB