#1 28-06-2008 12:42

AlphaOmega
Registered: 02-06-2008
Posts: 98

Материализация машин...

От нечего делать написал скрипт, который спаунит нужную машину (по её ID) и сажает сиджея в неё.
Активация по CTRL+O (буква О, а не ноль)
Далее вводим трёхзначный код (от 400 до 611)
Отменить выбор той же кнопкой, как и выход из любого меню.

// siple car spawner by vehicle ID (400 - 612)
// by AlphaOmega

{$CLEO .cs}

//-------------MAIN---------------

:start

thread 'SPAWNER'

0000: NOP

:new
wait 0
0@ = 0 // car id
1@ = 0 // additional value
2@ = 0 // additional value digit

:check
wait 0
if and
0AB0: key_pressed 0x11 // ctrl
0AB0: key_pressed 0x4F // o
not Actor.Driving($PLAYER_ACTOR) 
jf @check

077E: get_active_interior_to 9@ 
if 
  9@ == 0 
jf @check

02A3: toggle_widescreen  1
Player.CanMove($PLAYER_CHAR) = False
03BF: set_player $PLAYER_CHAR ignored_by_everyone 1

:menu
01E3: show_text_1number_styled GXT 'NUMBER' number 0@ time 10 style 5
wait 10

if
00E1:   player 0 pressed_key 15 
jf @input0
jump @end

:input0
if
0AB0: key_pressed 0x30
jf @input1
1@ = 0
jump @output

:input1
if
0AB0: key_pressed 0x31
jf @input2
1@ = 1
jump @output

:input2
if
0AB0: key_pressed 0x32
jf @input3
1@ = 2
jump @output

:input3
if
0AB0: key_pressed 0x33
jf @input4
1@ = 3
jump @output

:input4
if
0AB0: key_pressed 0x34
jf @input5
1@ = 4
jump @output

:input5
if
0AB0: key_pressed 0x35
jf @input6
1@ = 5
jump @output

:input6
if
0AB0: key_pressed 0x36
jf @input7
1@ = 6
jump @output

:input7
if
0AB0: key_pressed 0x37
jf @input8
1@ = 7
jump @output

:input8
if
0AB0: key_pressed 0x38
jf @input9
1@ = 8
jump @output

:input9
if
0AB0: key_pressed 0x39
jf @menu
1@ = 9
jump @output

:output
2@ += 1
0012: 0@ *= 10
005A: 0@ += 1@ // (int)
01E3: show_text_1number_styled GXT 'NUMBER' number 0@ time 250 style 5
wait 250
if 
0039: 2@ == 3
jf @menu
jump @ifcan

:ifcan
if and
0029:   0@ >= 400 
002B:   611 >= 0@ 
jf @end
0247: request_model 0@
01E3: show_text_1number_styled GXT 'NUMBER' number 0@ time 250 style 5
fade 0 250
wait 250

:loading
wait  0 ms
if  0
0248:   model 0@ available
jf @loading

04C4: store_coords_to 3@ 4@ 5@ from_actor $PLAYER_ACTOR with_offset 0.0 0.0 0.0
0172: 7@ = actor $PLAYER_ACTOR Z_angle 
00A5: 6@ = create_car 0@ at 3@ 4@ 5@
0175: set_car 6@ Z_angle_to 7@ 
036A: put_actor $PLAYER_ACTOR in_car 6@ 
01C3: remove_references_to_car 6@
fade 1 500
jump @end

:end
Player.CanMove($PLAYER_CHAR) = True
03BF: set_player $PLAYER_CHAR ignored_by_everyone 0
02A3: toggle_widescreen  0
wait 1000
jump @new

Offline

#2 29-06-2008 13:38

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

Re: Материализация машин...

Несколько советов:

jump @ifcan

:ifcan

jump @end

:end

если jump идет на метку сразу после этой команды, он лишний. игра и сама перейдет. эти jump и метки нужно убрать.



:start

thread 'SPAWNER'

0000: NOP

:new
wait 0

много лишнего. 0000, wait и метка start совершенно не нужны.



:new

....code...

jump @new

можно заменить на

while true

...code...

end

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


В самом скрипте не хватает возможности "стереть" последнюю цифру нажатием Backspace.

Offline

#3 29-06-2008 14:28

Alexander
Registered: 19-08-2006
Posts: 184
Website

Re: Материализация машин...

и добавить выгрузку модели

Offline

#4 29-06-2008 17:57

AlphaOmega
Registered: 02-06-2008
Posts: 98

Re: Материализация машин...

Seemann wrote:

если jump идет на метку сразу после этой команды, он лишний. игра и сама перейдет. эти jump и метки нужно убрать.

Знаю, просто когда писал скрипт, думал, что там может ещё что-то быть.

Seemann wrote:

много лишнего. 0000, wait и метка start совершенно не нужны.

Я просто тут где-то читал, что на первую метку не перескакивает гта. Потому и поставил старт. Кстати иногда (когда забываю писать старт и ноп - игра вылетает сразу после запуска)

Seemann wrote:

while true

Да красивие, только я уже запутался в сложной структуре синтаксиса языка гта, что уже не рискую wink

Seemann wrote:

В самом скрипте не хватает возможности "стереть" последнюю цифру нажатием Backspace.

Да явообще хотел сделать вызов простым нажатием этих клавишь в нужной последовательности (по принципу ЧИТа, но не дождался ответа об этом и решил сделать "по-старинке"...

Alexander wrote:

и добавить выгрузку модели

Я выгружаю только ссылку на модель. А саму модель - необязательно - ибо при отъезде от неё на определённое расстояние - она исчезает.

Offline

#5 30-06-2008 03:37

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

Re: Материализация машин...

Я просто тут где-то читал, что на первую метку не перескакивает гта. Потому и поставил старт.

0000 нужен только если у тебя в начале перед циклом ничего нет. А у тебя стоит опкод 03A4.
Метка :start, равно как и любая метка, которая не используется, не нужна. Метки вообще нужны только компилятору, игра про них ничего не знает.

Offline

Board footer

Powered by FluxBB