#1 06-12-2007 20:36

jayrocc
From: MSK
Registered: 09-06-2007
Posts: 50

Автосалон 2.0

Вот решил переделать свой старый код автосалона. Подходишь, выбираешь из меню машину, покупаешь, рядом появляется купленная машина. Скрипт не сложный, но не оптимизированный. По сравнению с Grotti Street Autos не тормозит, т.к. все машины не грузятся разом, а только после покупки. Когда код оптитмизирую раскидаю штук 5 автосалонов по штату с разными по калибру машинами.

EDIT: Поправил весь скрипт, в CLEO работает прекрасно. Добавил вторую колонку с ценой, исправил цены, убрал глобальные переменные.

Impala это моя добавленная тачка в игру, если хотите, замените ее на что-нибудь другое

{$CLEO}

:DEAL1_1
03A4: name_thread 'CHEAP'
0006: 4@ =  2132.0  // integer values
0006: 5@ =  -1149.3  // integer values
0006: 6@ =  24.2  // integer values 
04CE: $CDICON = create_icon_marker_without_sphere  57 at  4@ 5@ 6@
03BC: 10@ = create_sphere  4@ 5@ 6@  1.5

:DEAL1_2
wait  250
00D6: if  0
0256:   player $PLAYER_CHAR defined
004D: jump_if_false @DEAL1_2
00D6: if  0
03EE:   player $PLAYER_CHAR controllable
004D: jump_if_false @DEAL1_2
00D6: if  0
0102:   actor $PLAYER_ACTOR stopped_near_point_on_foot 4@ 5@ 6@ radius  1.5  1.5  1.5 sphere 0
004D: jump_if_false @DEAL1_2
jump @DEAL1_3
return

:DEAL1_3
01B4: set player $PLAYER_CHAR frozen_state  0 (frozen)
08D4: $deal1_handle = create_panel_with_title 'DEALCAR' position 29.0 165.0 width 60.0 columns 2 interactive 1 background 1 alignment 1
08D6: set_panel $deal1_handle column 0 alignment 1
09DB: set_panel $deal1_handle column 0 width 140
08DB: $deal1_handle 0 'DUMMY' 'PRIMO' 'REGINA' 'IMPALA' 'BURRITO' 'ESPERAN' 'GREENWO' 'TAHOMA' 'NEBULA' 'PICADOR' 'SABRE' 'TORNADO' 'BUCCANE'
08D6: set_panel $deal1_handle column 1 alignment 2
08DB: $deal1_handle 1 'COST' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY'
10@ = 4300
11@ = 6100
12@ = 4200
13@ = 6200
14@ = 6500
15@ = 5100
16@ = 4900
17@ = 500
18@ = 5300
19@ = 7400
20@ = 5300
21@ = 8000
08EE: set_panel $deal1_handle column 1 row 0 text_1number 'DOLLAR' 10@  // $~1~
08EE: set_panel $deal1_handle column 1 row 1 text_1number 'DOLLAR' 11@  // $~1~
08EE: set_panel $deal1_handle column 1 row 2 text_1number 'DOLLAR' 12@  // $~1~
08EE: set_panel $deal1_handle column 1 row 3 text_1number 'DOLLAR' 13@  // $~1~
08EE: set_panel $deal1_handle column 1 row 4 text_1number 'DOLLAR' 14@  // $~1~
08EE: set_panel $deal1_handle column 1 row 5 text_1number 'DOLLAR' 15@  // $~1~
08EE: set_panel $deal1_handle column 1 row 6 text_1number 'DOLLAR' 16@  // $~1~
08EE: set_panel $deal1_handle column 1 row 7 text_1number 'DOLLAR' 17@  // $~1~
08EE: set_panel $deal1_handle column 1 row 8 text_1number 'DOLLAR' 18@  // $~1~
08EE: set_panel $deal1_handle column 1 row 9 text_1number 'DOLLAR' 19@  // $~1~
08EE: set_panel $deal1_handle column 1 row 10 text_1number 'DOLLAR' 20@  // $~1~
08EE: set_panel $deal1_handle column 1 row 11 text_1number 'DOLLAR' 21@  // $~1~

:DEAL1_4
wait  0
if  0
00E1:   key_pressed  0  15
004D: jump_if_false @DEAL1_5
08DA: remove_panel $deal1_handle
03E6: remove_text_box
01B4: set_player $PLAYER_CHAR frozen_state  1 (unfrozen)
0002: jump @DEAL1_END

:DEAL1_5
if  0
00E1:   key_pressed  0  16
004D: jump_if_false @DEAL1_4
08D7: 7@ = panel $deal1_handle active_row
08DA: remove_panel $deal1_handle
03E6: remove_text_box
01B4: set_player $PLAYER_CHAR frozen_state  1 (unfrozen)
0871: init_jump_table 7@ total_jumps  12  0 @DEAL1_6 jumps  0 @DEAL1_6  1 @DEAL1_7  2 @DEAL1_8  3 @DEAL1_9  4 @DEAL1_10  5 @DEAL1_11  6 @DEAL1_12
0872: jump_table_jumps  7 @DEAL1_13  8 @DEAL1_14  9 @DEAL1_15  10 @DEAL1_16  11 @DEAL1_17  -1 @DEAL1_6  -1 @DEAL1_6  -1 @DEAL1_6  -1 @DEAL1_6

:PICKERZ2
wait 250
03BF: set_player $PLAYER_CHAR ignored_by_everyone_to  1 (true)
01B4: set_player $PLAYER_CHAR frozen_state  0 (frozen)
0169: set_fade_color  0  0  0
fade   0 1500
0006: 1@ =  2123.8  // integer values
0006: 2@ =  -1140.3  // integer values
0006: 3@ =  26.5  // integer values 

:PICKERZ3
if
fading
else_jump @PICKERZ4
wait  0
jump @PICKERZ3

:PICKERZ4
return

:DEAL1_6
// selected button 'PRIMO' (0)
if  
010A:   player $PLAYER_CHAR money >  4299
004D: jump_if_false @NOMONEY
0109: player $PLAYER_CHAR money += -4300
wait  10
gosub @PICKERZ2
jump @PRIMO 

:PRIMO
0247: request_model #PRIMO
       
:PRIMO2
if  0
8248:   NOT   model #PRIMO available
004D: jump_if_false @PRIMO3
wait  0
jump @PRIMO

:PRIMO3
0395: clear_area  1 at  1@ 2@ 3@ range  2.0
00A5: 8@ = create_car #PRIMO at  1@ 2@ 3@
jump @NEXTRI

:DEAL1_7
// selected button 'REGINA' (1)
if  0
010A:   player $PLAYER_CHAR money >  6099
004D: jump_if_false @NOMONEY
0109: player $PLAYER_CHAR money += -6100
wait  10
gosub @PICKERZ2
jump @REGINA 

:REGINA
0247: request_model #REGINA
       
:REGINA2
if  0
8248:   NOT   model #REGINA available
004D: jump_if_false @REGINA3
wait  0
jump @REGINA

:REGINA3
0395: clear_area  1 at  1@ 2@ 3@ range  2.0
00A5: 8@ = create_car #REGINA at  1@ 2@ 3@
jump @NEXTRI

:DEAL1_8
// selected button 'IMPALA' (2)
00D6: if  0
010A:   player $PLAYER_CHAR money >  5099
004D: jump_if_false @NOMONEY
0109: player $PLAYER_CHAR money += -5100
wait  10 ms
gosub @PICKERZ2
jump @BLISTAC 

:BLISTAC
0247: request_model #IMPALA
       
:BLISTAC2
if  0
8248:   NOT   model #IMPALA available
004D: jump_if_false @BLISTAC3
wait  0
jump @BLISTAC

:BLISTAC3
0395: clear_area  1 at  1@ 2@ 3@ range  2.0
00A5: 8@ = create_car #IMPALA at  1@ 2@ 3@
jump @NEXTRI

:DEAL1_9
// selected button 'BURRITO' (3)
if  0
010A:   player $PLAYER_CHAR money >  4199
004D: jump_if_false @NOMONEY
0109: player $PLAYER_CHAR money += -4200
wait  10
gosub @PICKERZ2
jump @BURR 

:BURR
0247: request_model #BURRITO
       
:BURR2
if  0
8248:   NOT   model #BURRITO available
004D: jump_if_false @BURR3
wait  0 ms
jump @BURR

:BURR3
0395: clear_area  1 at  1@ 2@ 3@ range  2.0
00A5: 8@ = create_car #BURRITO at  1@ 2@ 3@
jump @NEXTRI

:DEAL1_10
// selected button 'ESPERAN' (4)
if  0
010A:   player $PLAYER_CHAR money >  6499
004D: jump_if_false @NOMONEY
0109: player $PLAYER_CHAR money += -6500
wait  10
gosub @PICKERZ2
jump @ESPER 

:ESPER
0247: request_model #ESPERANT
       
:ESPER2
if  0
8248:   NOT   model #ESPERANT available
004D: jump_if_false @ESPER3
wait  0
jump @ESPER

:ESPER3
0395: clear_area  1 at  1@ 2@ 3@ range  2.0
00A5: 8@ = create_car #ESPERANT at  1@ 2@ 3@
jump @NEXTRI

:DEAL1_11
// selected button 'GREENWO' (5)
if  0
010A:   player $PLAYER_CHAR money >  5099
004D: jump_if_false @NOMONEY
0109: player $PLAYER_CHAR money += -5100
wait  10
gosub @PICKERZ2
jump @GREEN 

:GREEN
0247: request_model #GREENWOO
       
:GREEN2
if  0
8248:   NOT   model #GREENWOO available
004D: jump_if_false @GREEN3
wait  0
jump @GREEN

:GREEN3
0395: clear_area  1 at  1@ 2@ 3@ range  2.0
00A5: 8@ = create_car #GREENWOO at  1@ 2@ 3@
0002: jump @NEXTRI

:DEAL1_12
// selected button 'TAHOMA' (6)
if  0
010A:   player $PLAYER_CHAR money >  4899
004D: jump_if_false @NOMONEY
0109: player $PLAYER_CHAR money += -4900
wait  10
gosub @PICKERZ2
jump @TAHOM 

:TAHOM
0247: request_model #TAHOMA
       
:TAHOM2
if  0
8248:   NOT   model #TAHOMA available
004D: jump_if_false @TAHOM3
wait  0 ms
jump @TAHOM

:TAHOM3
0395: clear_area  1 at  1@ 2@ 3@ range  2.0
00A5: 8@ = create_car #TAHOMA at  1@ 2@ 3@
jump @NEXTRI

:DEAL1_13
// selected button 'NEBULA' (7)
if  0
010A:   player $PLAYER_CHAR money >  499
004D: jump_if_false @NOMONEY
0109: player $PLAYER_CHAR money += -500
wait  10 ms
gosub @PICKERZ2
jump @NEBUL 

:NEBUL
0247: request_model #NEBULA
       
:NEBUL2
if  0
8248:   NOT   model #NEBULA available
004D: jump_if_false @NEBUL3
wait  0
jump @NEBUL

:NEBUL3
0395: clear_area  1 at  1@ 2@ 3@ range  2.0
00A5: 8@ = create_car #NEBULA at  1@ 2@ 3@
jump @NEXTRI

:DEAL1_14
// selected button 'PICADOR' (8)
if  0
010A:   player $PLAYER_CHAR money >  5299
004D: jump_if_false @NOMONEY
0109: player $PLAYER_CHAR money += -5300
wait  10 ms
gosub @PICKERZ2
jump @PICA 

:PICA
0247: request_model #PICADOR
       
:PICA2
if  0
8248:   NOT   model #PICADOR available
004D: jump_if_false @PICA3
wait  0
jump @PICA

:PICA3
0395: clear_area  1 at  1@ 2@ 3@ range  2.0
00A5: 8@ = create_car #PICADOR at  1@ 2@ 3@
jump @NEXTRI

:DEAL1_15
// selected button 'SABRE' (9)
if  0
010A:   player $PLAYER_CHAR money >  7399
004D: jump_if_false @NOMONEY
0109: player $PLAYER_CHAR money += -7400
wait  10
gosub @PICKERZ2
jump @SABR 

:SABR
0247: request_model #SABRE
       
:SABR2
if  0
8248:   NOT   model #SABRE available
004D: jump_if_false @SABR3
wait  0
jump @SABR

:SABR3
0395: clear_area  1 at  1@ 2@ 3@ range  2.0
00A5: 8@ = create_car #SABRE at  1@ 2@ 3@
jump @NEXTRI

:DEAL1_16
// selected button 'TORNADO' (10)
if  0
010A:   player $PLAYER_CHAR money >  5299
004D: jump_if_false @NOMONEY
0109: player $PLAYER_CHAR money += -5300
wait  10
gosub @PICKERZ2
jump @TORN 

:TORN
0247: request_model #TORNADO
       
:TORN2
if  0
8248:   NOT   model #TORNADO available
004D: jump_if_false @TORN3
wait  0
jump @TORN

:TORN3
0395: clear_area  1 at  1@ 2@ 3@ range  2.0
00A5: 8@ = create_car #TORNADO at  1@ 2@ 3@
jump @NEXTRI

:DEAL1_17
// selected button 'BUCCANE' (11)
if  0
010A:   player $PLAYER_CHAR money >  7999
004D: jump_if_false @NOMONEY
0109: player $PLAYER_CHAR money += -8000
wait  10
gosub @PICKERZ2
jump @BUCC 

:BUCC
0247: request_model #BUCCANEE
       
:BUCC2
if  0
8248:   NOT   model #BUCCANEE available
004D: jump_if_false @BUCC3
wait  0
jump @BUCC

:BUCC3
0395: clear_area  1 at  1@ 2@ 3@ range  2.0
00A5: 8@ = create_car #BUCCANEE at  1@ 2@ 3@
jump @NEXTRI
     
:NEXTRI
wait  0
0175: set_car 8@ z_angle_to  351.0
015F: set_camera_position  2127.2 -1149.4  26.2  0  0  0
0160: point_camera  1@ 2@ 3@  2
wait  2000
fade  1 1500

:TRI_566
if  0
fading
004D: jump_if_false @TRI_576
wait  0
jump @TRI_566

:TRI_576
00A1: put_actor $PLAYER_ACTOR at  2132.3 -1147.4  24.7
0173: set_actor $PLAYER_ACTOR z_angle_to  40.4
0001: wait  1000
02EB: restore_camera_with_jumpcut
0373: set_camera_directly_behind_player

:TRI_583
01B4: set_player $PLAYER_CHAR frozen_state  1 (unfrozen)
03BF: set_player $PLAYER_CHAR ignored_by_everyone_to  0 (false)
01C3: remove_references_to_car 8@
wait  1000
jump @DEAL1_2     
                    
:NOMONEY
00BC: text_highpriority 'IE07'  2000 ms  1
wait  3000
jump @DEAL1_2                    
                   
:DEAL1_END
wait  250
if  0
0102:   NOT actor $PLAYER_ACTOR stopped_near_point_on_foot 4@ 5@ 6@ radius  1.5  1.5  1.5 sphere 0
004D: jump_if_false @DEAL1_2
jump @DEAL1_END

Last edited by jayrocc (07-12-2007 23:26)

Offline

#2 06-12-2007 22:09

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

Re: Автосалон 2.0

Хороший скрипт , только опять же , зачем использовать глобальные переменные , типа как "$498" ? Только глюков прибавит . И зачем каждая машина отдельно создается ? Ведь всё можно было вместе сделать )

Offline

#3 06-12-2007 22:50

jayrocc
From: MSK
Registered: 09-06-2007
Posts: 50

Re: Автосалон 2.0

вот блин, я его фигово написал, т.к. не знаю как лучше - мне просто нужно сделать перед покупкой машины проверку и вычет денег игрока...
Как я могу сделать, чтобы код создания машины был один?
а глобальные переменные поправлю.. спасибо

Offline

#4 07-12-2007 01:00

Capushon
Registered: 13-08-2006
Posts: 350
Website

Re: Автосалон 2.0

2Alexander:

зачем использовать глобальные переменные , типа как "$498" ? Только глюков прибавит .

Локальные не всегда работают корректно (сталкивался не раз)...
В мультимоде около 200-300 глобальных переменных и ничего - работает  :-)


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#5 07-12-2007 09:38

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

Re: Автосалон 2.0

ты ведь мм делаешь сам , поэтому все с глобальными учтено , а отдельный скрипт можно вставить куда угодно , и появляется  вероятность конфликта глобальных переменных . Насчет того , что локальные могут не работать - да , но  не в этом скрипте. : )

Offline

#6 07-12-2007 11:50

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

Re: Автосалон 2.0

2jayrocc:
Посмотри вот эти скрипты, может найдешь парочку удачных решений для себя:
http://gtacoding.nm.ru/dl/carshop409f.rar
http://www.gtaforums.com/index.php?showtopic=258016

Offline

#7 07-12-2007 13:41

jayrocc
From: MSK
Registered: 09-06-2007
Posts: 50

Re: Автосалон 2.0

спасибо! попробую пофиксить на досуге

Offline

#8 07-12-2007 23:24

jayrocc
From: MSK
Registered: 09-06-2007
Posts: 50

Re: Автосалон 2.0

Хотел все это оптимизировать но столкнулся с проблемой: не могу понять как я могу заменить количество отнмимаемых денег у игрока на переменную, которая будет браться из таблицы (10@ = 4300)

Если подставить 10@ вместо 4300 игра вылетает...

:DEAL1_6
// selected button 'PRIMO' (0)
if  
010A:   player $PLAYER_CHAR money >  4299
004D: jump_if_false @NOMONEY
0109: player $PLAYER_CHAR money += -4300
wait  10
gosub @PICKERZ2
jump @PRIMO

Offline

#9 08-12-2007 00:45

flashTrash
From: Н.Новгород
Registered: 21-02-2007
Posts: 260
Website

Re: Автосалон 2.0

дык, а чего тут не ясного то?

:DEAL1_6
// selected button 'PRIMO' (0)
10@ == 4299
if  
010A:   player $PLAYER_CHAR money >  10@
004D: jump_if_false @NOMONEY
10@ == -4300
0109: player $PLAYER_CHAR money += 10@
wait  10
gosub @PICKERZ2
jump @PRIMO

Offline

#10 08-12-2007 09:25

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

Re: Автосалон 2.0

Это зачем ?

10@ == 4299

И это ?

10@ == -4300

Всё просто

10@ = 4300 // убрать

:DEAL1_6
// selected button 'PRIMO' (0)
010B: 33@ = player $PLAYER_CHAR money 
002D: 33@ >= 10@ 
004D: jump_if_false @NOMONEY
0085: 33@ = 10@ 
0012: 33@ *= -1 
0109: player $PLAYER_CHAR money += 33@
wait  10
gosub @PICKERZ2
jump @PRIMO

Offline

#11 08-12-2007 10:24

flashTrash
From: Н.Новгород
Registered: 21-02-2007
Posts: 260
Website

Re: Автосалон 2.0

2Alexander. а зачем огород городить, с несколькими переменными, с умножениями и т. д.? в некоторых случаях лучше и так сделать, но тут человек спрашивал как заменить числа на переменные.

Offline

#12 08-12-2007 11:38

jayrocc
From: MSK
Registered: 09-06-2007
Posts: 50

Re: Автосалон 2.0

2 flashTrash

Понимаешь, я не могу указывать цену машины в куске скрипта с ее созданием и проверкой цены - этот кусок должен быть единственным для всех машин. Поэтому я должен указать цену машины в лейбле на который можной перейти с помощью 0871: init_jump_table.
А потом с уже загруженной переменной цены мне нужно перейти к куску создания машины и проверки денег.

2 flashTrash и Alexander

Я попробовал оба варианта, машины появляются, но проверка денег не делается - деньги не отнимаются.

{$CLEO}

:DEAL1_1
03A4: name_thread 'CHEAP'
0006: 4@ =  2132.0  // integer values
0006: 5@ =  -1149.3  // integer values
0006: 6@ =  24.2  // integer values 
04CE: $CDICON = create_icon_marker_without_sphere  57 at  4@ 5@ 6@
03BC: 10@ = create_sphere  4@ 5@ 6@  1.5

:DEAL1_2
wait  250
00D6: if  0
0256:   player $PLAYER_CHAR defined
004D: jump_if_false @DEAL1_2
00D6: if  0
03EE:   player $PLAYER_CHAR controllable
004D: jump_if_false @DEAL1_2
00D6: if  0
0102:   actor $PLAYER_ACTOR stopped_near_point_on_foot 4@ 5@ 6@ radius  1.5  1.5  1.5 sphere 0
004D: jump_if_false @DEAL1_2
jump @DEAL1_3
return

:DEAL1_3
01B4: set player $PLAYER_CHAR frozen_state  0 (frozen)
08D4: $deal1_handle = create_panel_with_title 'DEALCAR' position 29.0 165.0 width 60.0 columns 2 interactive 1 background 1 alignment 1
08D6: set_panel $deal1_handle column 0 alignment 1
09DB: set_panel $deal1_handle column 0 width 140
08DB: $deal1_handle 0 'DUMMY' 'PRIMO' 'REGINA' 'IMPALA' 'BURRITO' 'ESPERAN' 'GREENWO' 'TAHOMA' 'NEBULA' 'PICADOR' 'SABRE' 'TORNADO' 'BUCCANE'
08D6: set_panel $deal1_handle column 1 alignment 2
08DB: $deal1_handle 1 'COST' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY'
10@ = 4300
11@ = 6100
12@ = 4200
13@ = 6200
14@ = 6500
15@ = 5100
16@ = 4900
17@ = 500
18@ = 5300
19@ = 7400
20@ = 5300
21@ = 8000
08EE: set_panel $deal1_handle column 1 row 0 text_1number 'DOLLAR' 10@  // $~1~
08EE: set_panel $deal1_handle column 1 row 1 text_1number 'DOLLAR' 11@  // $~1~
08EE: set_panel $deal1_handle column 1 row 2 text_1number 'DOLLAR' 12@  // $~1~
08EE: set_panel $deal1_handle column 1 row 3 text_1number 'DOLLAR' 13@  // $~1~
08EE: set_panel $deal1_handle column 1 row 4 text_1number 'DOLLAR' 14@  // $~1~
08EE: set_panel $deal1_handle column 1 row 5 text_1number 'DOLLAR' 15@  // $~1~
08EE: set_panel $deal1_handle column 1 row 6 text_1number 'DOLLAR' 16@  // $~1~
08EE: set_panel $deal1_handle column 1 row 7 text_1number 'DOLLAR' 17@  // $~1~
08EE: set_panel $deal1_handle column 1 row 8 text_1number 'DOLLAR' 18@  // $~1~
08EE: set_panel $deal1_handle column 1 row 9 text_1number 'DOLLAR' 19@  // $~1~
08EE: set_panel $deal1_handle column 1 row 10 text_1number 'DOLLAR' 20@  // $~1~
08EE: set_panel $deal1_handle column 1 row 11 text_1number 'DOLLAR' 21@  // $~1~

:DEAL1_4
wait  0
if  0
00E1:   key_pressed  0  15
004D: jump_if_false @DEAL1_5
08DA: remove_panel $deal1_handle
03E6: remove_text_box
01B4: set_player $PLAYER_CHAR frozen_state  1 (unfrozen)
0002: jump @DEAL1_END

:DEAL1_5
if  0
00E1:   key_pressed  0  16
004D: jump_if_false @DEAL1_4
08D7: 7@ = panel $deal1_handle active_row
08DA: remove_panel $deal1_handle
03E6: remove_text_box
01B4: set_player $PLAYER_CHAR frozen_state  1 (unfrozen)
0871: init_jump_table 7@ total_jumps  12  0 @PRIMO jumps  0 @PRIMO  1 @REGINA  2 @IMPALA  3 @BURRITO  4 @ESPERAN  5 @GREENWO  6 @TAHOMA
0872: jump_table_jumps  7 @NEBULA  8 @PICADOR  9 @SABRE  10 @TORNADO  11 @BUCCANE  -1 @PRIMO  -1 @PRIMO  -1 @PRIMO  -1 @PRIMO

:PICKERZ2
wait 250
03BF: set_player $PLAYER_CHAR ignored_by_everyone_to  1 (true)
01B4: set_player $PLAYER_CHAR frozen_state  0 (frozen)
0169: set_fade_color  0  0  0
fade   0 1500
0006: 1@ =  2123.8  // integer values
0006: 2@ =  -1140.3  // integer values
0006: 3@ =  26.5  // integer values 

:PICKERZ3
if
fading
else_jump @PICKERZ4
wait  0
jump @PICKERZ3

:PICKERZ4
return

:PRIMO
wait 100
0085: 10@ = 22@
23@ = 547 // integer values
jump @DEAL1_6

:REGINA
wait 100
0085: 11@ = 22@
23@ = 547 // integer values
jump @DEAL1_6

:IMPALA
wait 100
0085: 12@ = 22@
23@ = 547 // integer values
jump @DEAL1_6

:BURRITO
wait 100
0085: 13@ = 22@
23@ = 547 // integer values
jump @DEAL1_6

:ESPERAN
wait 100
0085: 14@ = 22@
23@ = 547 // integer values
jump @DEAL1_6

:GREENWO
wait 100
0085: 15@ = 22@
23@ = 547 // integer values
jump @DEAL1_6

:TAHOMA
wait 100
0085: 16@ = 22@
23@ = 547 // integer values
jump @DEAL1_6

:NEBULA
wait 100
0085: 17@ = 22@
23@ = 547 // integer values
jump @DEAL1_6

:PICADOR
wait 100
0085: 18@ = 22@
23@ = 547 // integer values
jump @DEAL1_6

:SABRE
wait 100
0085: 19@ = 22@
23@ = 547 // integer values
jump @DEAL1_6

:TORNADO
wait 100
0085: 20@ = 22@
23@ = 547 // integer values
jump @DEAL1_6

:BUCCANE
wait 100
0085: 21@ = 22@
23@ = 547 // integer values
jump @DEAL1_6

:DEAL1_6
010B: 33@ = player $PLAYER_CHAR money
002D: 33@ >= 22@
004D: jump_if_false @NOMONEY
0085: 33@ = 22@
0012: 33@ *= -1 
0109: player $PLAYER_CHAR money += 33@
wait  10
gosub @PICKERZ2
jump @DEAL1_7

:DEAL1_7
Model.Load(23@)
038B: load_requested_models 
       
:DEAL1_8
if
   not Model.Available(23@)
004D: jump_if_false @DEAL1_9
wait  0
jump @DEAL1_7

:DEAL1_9
0395: clear_area  1 at  1@ 2@ 3@ range  2.0
00A5: 8@ = create_car 23@ at  1@ 2@ 3@
jump @NEXTRI
     
:NEXTRI
wait  0
0175: set_car 8@ z_angle_to  351.0
015F: set_camera_position  2127.2 -1149.4  26.2  0  0  0
0160: point_camera  1@ 2@ 3@  2
wait  2000
fade  1 1500

:TRI_566
if  0
fading
004D: jump_if_false @TRI_576
wait  0
jump @TRI_566

:TRI_576
00A1: put_actor $PLAYER_ACTOR at  2132.3 -1147.4  24.7
0173: set_actor $PLAYER_ACTOR z_angle_to  40.4
wait  1000
02EB: restore_camera_with_jumpcut
0373: set_camera_directly_behind_player

:TRI_583
01B4: set_player $PLAYER_CHAR frozen_state  1 (unfrozen)
03BF: set_player $PLAYER_CHAR ignored_by_everyone_to  0 (false)
01C3: remove_references_to_car 8@
wait  1000
jump @DEAL1_2     
                    
:NOMONEY
00BC: text_highpriority 'IE07'  2000 ms  1
wait  3000
jump @DEAL1_2                    
                   
:DEAL1_END
wait  250
if  0
0102:   NOT actor $PLAYER_ACTOR stopped_near_point_on_foot 4@ 5@ 6@ radius  1.5  1.5  1.5 sphere 0
004D: jump_if_false @DEAL1_2
jump @DEAL1_END

Last edited by jayrocc (08-12-2007 11:41)

Offline

#13 08-12-2007 13:34

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Автосалон 2.0

2jayrocc:

Я попробовал оба варианта, машины появляются, но проверка денег не делается - деньги не отнимаются.

Впринципе их можно объявить с минусами, правда в таблице тоже будут с минусами.

Накатал примерный скрипт, посмотри, может поможет, обрати внимание как можно работать с массивами. 

{$CLEO}

var
    0@: Array 12 of Integer
    20@: Array 12 of Integer
end

0@ = -4300
1@ = -6100
2@ = -4200
3@ = -6200
4@ = -6500
5@ = -5100
6@ = -4900
7@ = -500
8@ = -5300
9@ = -7400
10@ = -5300
11@ = -8000

20@ = #PRIMO
21@ = #REGINA
22@ = #BULLET
23@ = #BURRITO
24@ = #ESPERANT
25@ = #GREENWOO
26@ = #TAHOMA
27@ = #NEBULA
28@ = #PICADOR
29@ = #SABRE
30@ = #TORNADO
31@ = #BUCCANEE

while true
    wait 0
    if
        Player.Defined($PLAYER_CHAR)
    then
        if
            00E1:   player 0 pressed_key 4 
        then
            Player.CanMove($PLAYER_CHAR) = False
            08D4: 12@ = create_panel_with_title 'DEALCAR' position 29.0 165.0 width 60.0 columns 2 interactive 1 background 1 alignment 1
            08D6: set_panel 12@ column 0 alignment 1
            09DB: set_panel 12@ column 0 width 140
            08DB: set_panel 12@ column 0 header 'DUMMY' data 'PRIMO' 'REGINA' 'BULLET' 'BURRITO' 'ESPERAN' 'GREENWO' 'TAHOMA' 'NEBULA' 'PICADOR' 'SABRE' 'TORNADO' 'BUCCANE'
            08D6: set_panel 12@ column 1 alignment 2
            08DB: set_panel 12@ column 1 header 'COST' data 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY'
            for 13@ = 0 to 11 
                08EE: set_panel 12@ column 1 row 13@ text_1number GXT 'DOLLAR' number 0@[13@]  // $~1~
            end
            while true
                wait 0
                if
                    00E1:   key_pressed  0  15
                then
                    Break            
                end
                if
                    00E1:   key_pressed  0  16
                then
                    08D7: 14@ = panel 12@ active_row
                    Player.Money($PLAYER_CHAR) += 0@[14@]
                    0AA5: call 0x43A0B6 num_params 1 pop 1 20@[14@]
                    Break
                end 
            end
            08DA: remove_panel 12@
            03E6: remove_text_box
            Player.CanMove($PLAYER_CHAR) = True 
        end       
    end    
end

И еще что за такая машина - 'IMPALA'

Offline

#14 08-12-2007 17:32

jayrocc
From: MSK
Registered: 09-06-2007
Posts: 50

Re: Автосалон 2.0

Очень интересно, но можно ли обойтись без минусов перед названиями?

IMPALA - это машина, которую я добавил (не заменил) в игру

Offline

#15 10-12-2007 13:46

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

Re: Автосалон 2.0

Очень интересно, но можно ли обойтись без минусов перед названиями?

                    08D7: 14@ = panel 12@ active_row
                    13@ = 0@[14@]
                    13@ *= -1
                    Player.Money($PLAYER_CHAR) += 13@
                    0AA5: call 0x43A0B6 num_params 1 pop 1 20@[14@]

и цены перепиши на положительные

Offline

#16 10-12-2007 21:47

jayrocc
From: MSK
Registered: 09-06-2007
Posts: 50

Re: Автосалон 2.0

да уж массивы для меня штука непонятная...


{$CLEO}

:DEAL1_1
03A4: name_thread 'CHEAP'
0006: 4@ =  2132.0  // integer values
0006: 5@ =  -1149.3  // integer values
0006: 6@ =  24.2  // integer values 
04CE: $CDICON = create_icon_marker_without_sphere  57 at  4@ 5@ 6@
03BC: 10@ = create_sphere  4@ 5@ 6@  1.5

:DEAL1_2
wait  250
00D6: if  0
0256:   player $PLAYER_CHAR defined
004D: jump_if_false @DEAL1_2
00D6: if  0
03EE:   player $PLAYER_CHAR controllable
004D: jump_if_false @DEAL1_2
00D6: if  0
0102:   actor $PLAYER_ACTOR stopped_near_point_on_foot 4@ 5@ 6@ radius  1.5  1.5  1.5 sphere 0
004D: jump_if_false @DEAL1_2
jump @DEAL1_3

:DEAL1_3
var
    0@: Array 12 of Integer
    20@: Array 12 of Integer
end
0@ = 4300
1@ = 6100
2@ = 4200
3@ = 6200
4@ = 6500
5@ = 5100
6@ = 4900
7@ = 500
8@ = 5300
9@ = 7400
10@ = 5300
11@ = 8000

20@ = #PRIMO
21@ = #REGINA
22@ = #BULLET
23@ = #BURRITO
24@ = #ESPERANT
25@ = #GREENWOO
26@ = #TAHOMA
27@ = #NEBULA
28@ = #PICADOR
29@ = #SABRE
30@ = #TORNADO
31@ = #BUCCANEE

while true
    wait 0
    if
        Player.Defined($PLAYER_CHAR)
    then
        if
            00E1:   player 0 pressed_key 4 
        then
            Player.CanMove($PLAYER_CHAR) = False
            08D4: 12@ = create_panel_with_title 'DEALCAR' position 29.0 165.0 width 60.0 columns 2 interactive 1 background 1 alignment 1
            08D6: set_panel 12@ column 0 alignment 1
            09DB: set_panel 12@ column 0 width 140
            08DB: set_panel 12@ column 0 header 'DUMMY' data 'PRIMO' 'REGINA' 'BULLET' 'BURRITO' 'ESPERAN' 'GREENWO' 'TAHOMA' 'NEBULA' 'PICADOR' 'SABRE' 'TORNADO' 'BUCCANE'
            08D6: set_panel 12@ column 1 alignment 2
            08DB: set_panel 12@ column 1 header 'COST' data 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY'
            for 13@ = 0 to 11 
                08EE: set_panel 12@ column 1 row 13@ text_1number GXT 'DOLLAR' number 0@[13@]  // $~1~
            end
            while true
                wait 0
                if
                    00E1:   key_pressed  0  15
                then
                    Break            
                end
                if
                    00E1:   key_pressed  0  16
                then
                    08D7: 14@ = panel 12@ active_row
                    13@ = 0@[14@]
                    13@ *= -1
                    Player.Money($PLAYER_CHAR) += 13@
                    0AA5: call 0x43A0B6 num_params 1 pop 1 20@[14@]
                    Break
                end 
            end
            08DA: remove_panel 12@
            03E6: remove_text_box
            Player.CanMove($PLAYER_CHAR) = True 
        end       
    end    
end

в этом случае после входа в сферу нужно еще нажимать кнопку Action - не знаю как убрать
Кроме того проверки денег нет, т.е. они отнимаются в нужном объеме, но уходят в минус.
И еще машина появляется врезанной в здание wink

Last edited by jayrocc (10-12-2007 21:47)

Offline

#17 11-12-2007 13:58

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Автосалон 2.0

да уж массивы для меня штука непонятная...

Почитай хелп, там кое-что есть.

в этом случае после входа в сферу нужно еще нажимать кнопку Action - не знаю как убрать

Убери проверку if 00E1:   player 0 pressed_key 4 then … end.

Кроме того проверки денег нет, т.е. они отнимаются в нужном объеме, но уходят в минус.
И еще машина появляется врезанной в здание

Это было сделано для быстроты и кроме того у тебя в скрипте это есть,  неужели сам прикрутить не смог.

{$CLEO}

const
    iconX   = 12@
    iconY   = 13@
    iconZ   = 14@
    hIcon   = 15@
    hPanel  = 16@
    rowId   = 17@
    i       = 18@
    tmp     = 19@
end

var
    0@:     Array 12 of Integer
    20@:    Array 12 of Integer
end

iconX = 2132.0
iconY = -1149.3
iconZ = 24.2
02A7: hIcon = create_icon_marker_and_sphere 57 at iconX iconY iconZ

0@ = 4300
1@ = 6100
2@ = 4200
3@ = 6200
4@ = 6500
5@ = 5100
6@ = 4900
7@ = 500
8@ = 5300
9@ = 7400
10@ = 5300
11@ = 8000

20@ = #PRIMO
21@ = #REGINA
22@ = #BULLET
23@ = #BURRITO
24@ = #ESPERANT
25@ = #GREENWOO
26@ = #TAHOMA
27@ = #NEBULA
28@ = #PICADOR
29@ = #SABRE
30@ = #TORNADO
31@ = #BUCCANEE

while true
    wait 0
    if
        Player.Defined($PLAYER_CHAR)
    then
        if
            0102:   actor $PLAYER_ACTOR in_sphere iconX iconY iconZ radius 1.2 1.2 3.0 sphere 0 stopped_on_foot 
        then
            Player.CanMove($PLAYER_CHAR) = False
            gosub @PanelCreate
            gosub @PanelProc
            gosub @PanelDestroy
            Player.CanMove($PLAYER_CHAR) = True
            Actor.PutAt($PLAYER_ACTOR, 2132.0303, -1146.5492, 24.581)
            Actor.Angle($PLAYER_ACTOR) = 4.7
        end
    end
end

:PanelCreate
03E6: remove_text_box 
08D4: hPanel = create_panel_with_title 'DEALCAR' position 29.0 165.0 width 60.0 columns 2 interactive 1 background 1 alignment 1
08D6: set_panel hPanel column 0 alignment 1
09DB: set_panel hPanel column 0 width 140
08DB: set_panel hPanel column 0 header 'DUMMY' data 'PRIMO' 'REGINA' 'BULLET' 'BURRITO' 'ESPERAN' 'GREENWO' 'TAHOMA' 'NEBULA' 'PICADOR' 'SABRE' 'TORNADO' 'BUCCANE'
08D6: set_panel hPanel column 1 alignment 2
08DB: set_panel hPanel column 1 header 'COST' data 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY'
for i = 0 to 11
    08EE: set_panel hPanel column 1 row i text_1number GXT 'DOLLAR' number 0@[i]  // $~1~
end
090E: set_panel hPanel active_row 0
return

:PanelProc
while true
    wait 0
    if
        00E1:   player 0 pressed_key 15
    then
        Break
    end
    if
        00E1:   player 0 pressed_key 16
    then
        08D7: rowId = panel hPanel active_row
        0085: tmp = 0@[rowId] // (int) 
        if
            not Player.Money($PLAYER_CHAR) > tmp 
        then
            00BC: show_text_highpriority GXT 'IE07' time 5000 flag 1  // ~r~You don't have enough cash!     
        else
            tmp *= -1
            Player.Money($PLAYER_CHAR) += tmp
            gosub @SpawnCar
            Break
        end         
    end 
end
return

:PanelDestroy
03E6: remove_text_box
08DA: remove_panel hPanel 
return

:SpawnCar
03BF: set_player $PLAYER_CHAR ignored_by_everyone 1
0169: set_fade_color_RGB 0 0 0
fade 0 1500
while fading
    wait 0
end
Model.Load(20@[rowId])
while not Model.Available(20@[rowId])
    wait 0
end
0395: clear_area 1 at 2123.8 -1140.3 26.5 radius 2.0 
tmp = Car.Create(20@[rowId], 2123.8, -1140.3, 26.5)
Car.Angle(tmp) = 351.0
Camera.SetPosition(2127.2, -1149.4, 26.2, 0, 0, 0)
Camera.PointAt(2123.8, -1140.3, 26.5, 2)
wait 2000
fade 1 1500
while fading
    wait 0
end
wait 1000
Camera.Restore_WithJumpCut
Camera.SetBehindPlayer
03BF: set_player $PLAYER_CHAR ignored_by_everyone 0
Car.RemoveReferences(tmp)
Model.Destroy(20@[rowId])
wait 1000
return

Offline

#18 12-12-2007 23:20

jayrocc
From: MSK
Registered: 09-06-2007
Posts: 50

Re: Автосалон 2.0

EDIT: Новый код, короткий и рабочий, я еще добавил код продавца, который стоит на площаке, но после его добавления скрипт перестал работать :)

все равно в этом ничерта не просто разобраться - логика многих вещей отличается от обычного построения main'a.

[strike]Вот попробовал доработать скрипт, а) чтобы панель убиралась, когда появляется сообщение о нехватке денег б) чтобы Карл не убирался из сферы, а просто была проверка после покупки машины, стоит ли он в сфере, и пока он стоит перехода на начало скрипта не происходит. Только чего-то после выбора машины игра вылетает... ;( нашел очень мало инфы по массивам и такому построению if... then... end...[/strike]
а вообще спасибо, что помогаете, в финале раскидаю автосалоны по всему штату в виде отдельных CLEO скриптов.

{$CLEO .cs}

0000: NOP

12@ = 2132.0 
13@ = -1149.3 
14@ = 24.2

15@ = Marker.CreateIconAndSphere(57, 12@, 13@, 14@)

0@ = 4300 
1@ = 6100 
2@ = 4200 
3@ = 6200 
4@ = 6500 
5@ = 5100 
6@ = 4900 
7@ = 500 
8@ = 5300 
9@ = 7400 
10@ = 5300 
11@ = 8000 
20@ = 547 
21@ = 479 
22@ = 541 
23@ = 482 
24@ = 419 
25@ = 492 
26@ = 566 
27@ = 516 
28@ = 600 
29@ = 475 
30@ = 576 
31@ = 518 

:NONAME_236
wait 0 
if and
      Player.Defined($PLAYER_CHAR)   
00FE: actor $PLAYER_ACTOR 0 2132.0 -1149.3 24.2 radius 200.0 200.0 200.0 
jf @NONAME_236

:NONAME_237
wait 0 
Model.Load(#HMOST)
038B: load_requested_models
if
   Model.Available(#HMOST)
jf @NONAME_237 
$AUTO_DEAL1 = Actor.Create(CivMale, #HMOST, 2132.0, -1149.3, 24.2)

:NONAME_240
if 
0102: actor $PLAYER_ACTOR stopped_near_point_on_foot 2131.9434 2131.9434 24.4603 radius 1.0 1.0 2.0 sphere 0
jf @NONAME_239
jump @NONAME_365

:NONAME_239
if 
80FE: not actor $PLAYER_ACTOR 0 2132.0 -1149.3 24.2 radius 200.0 200.0 200.0
jf @NONAME_240
Actor.DestroyWithFade($AUTO_DEAL1)

:NONAME_365 
Player.CanMove($PLAYER_CHAR) = False
03E6: remove_text_box 
08D4: 16@ = create_panel_with_title 'DEALCAR' position 29.0 165.0 width 60.0 columns 2 interactive 1 background 1 alignment 1 
08D6: set_panel 16@ column 0 alignment 1 
09DB: set_panel 16@ column 0 width 140 
08DB: set_panel 16@ column 0 header 'DUMMY' data 'PRIMO' 'REGINA' 'BULLET' 'BURRITO' 'ESPERAN' 'GREENWO' 'TAHOMA' 'NEBULA' 'PICADOR' 'SABRE' 'TORNADO' 'BUCCANE'  // Primo // Regina // Bullet // Burrito // Esperanto // Greenwood // Tahoma // Nebula // Picador // Sabre // Tornado // Buccaneer
08D6: set_panel 16@ column 1 alignment 2 
08DB: set_panel 16@ column 1 header 'COST' data 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY'  // Cost
18@ = 0 

:NONAME_694
08EE: set_panel 16@ column 1 row 18@ text_1number GXT 'DOLLAR' number 0@(18@,12i)  // $~1~
18@ += 1 
  18@ > 11 
jf @NONAME_694 
090E: set_panel 16@ active_row 0 

:NONAME_695
wait  0
if  0
00E1:   player 0 pressed_key 15
jf @NONAME_778
08DA: remove_panel 16@
03E6: remove_text_box
jump @NONAME_1120

:NONAME_778
if 
00E1:   player 0 pressed_key 16 
jf @NONAME_695 
08D7: 17@ = panel 16@ active_row 
0085: 19@ = 0@(17@,12i) // (int) 
if 
   not Player.Money($PLAYER_CHAR) > 19@
jf @NONAME_857
08DA: remove_panel 16@
03E6: remove_text_box 
00BC: show_text_highpriority GXT 'IE07' time 3500 flag 1  // ~r~You don't have enough cash!
jump @NONAME_1120 

:NONAME_857
19@ *= -1 
Player.Money($PLAYER_CHAR) += 19@

:NONAME_904
03BF: set_player $PLAYER_CHAR ignored_by_everyone 1 
0169: set_fade_color_RGB 0 0 0 
fade 0 1500 

:NONAME_926
fading 
jf @NONAME_946 
wait 0 
jump @NONAME_926 

:NONAME_946
Model.Load(20@(17@,12i))

:NONAME_955
   not Model.Available(20@(17@,12i))
jf @NONAME_982 
wait 0 
jump @NONAME_955 

:NONAME_982
wait 100
08DA: remove_panel 16@
03E6: remove_text_box
0395: clear_area 1 at 2126.3237 -1144.1848 24.8206 radius 2.0
Actor.PutAt($PLAYER_ACTOR, 2126.3237, -1144.1848, 24.8206)
Actor.Angle($PLAYER_ACTOR) = 41.6
0395: clear_area 1 at 2123.8 -1140.3 26.5 radius 2.0 
19@ = Car.Create(20@(17@,12i), 2123.8, -1140.3, 26.5)
Car.Angle(19@) = 351.0
Camera.SetPosition(2127.2, -1149.4, 26.2, 0, 0, 0)
Camera.PointAt(2123.8, -1140.3, 26.5, 2)
wait 2000 
fade 1 1500 

:NONAME_1097
fading 
jf @NONAME_1117 
wait 0 
jump @NONAME_1097 

:NONAME_1117
wait 1000 
Camera.Restore_WithJumpCut
Camera.SetBehindPlayer
03BF: set_player $PLAYER_CHAR ignored_by_everyone 0 
Car.RemoveReferences(19@)
Model.Destroy(20@(17@,12i))
wait 1000 

:NONAME_1120
wait  250
Player.CanMove($PLAYER_CHAR) = True
if  0
0102:   actor $PLAYER_ACTOR stopped_near_point_on_foot 12@ 13@ 14@ radius  1.5  1.5  1.5 sphere 0
jf @NONAME_236
jump @NONAME_1120

Last edited by jayrocc (23-12-2007 18:38)

Offline

#19 12-04-2009 17:32

BullDogHEMI427
From: Рязань
Registered: 02-04-2009
Posts: 54

Re: Автосалон 2.0

Нащёт "кучи автосалонов" магу помоч - уже записал координаты маркеров, мест спавна машины и места расположения камеры. Просто сам уже этим занялся (на более старой версии правда)

P.S. Не if/then/end, а if/then/else
P.P.S. и иконку нада 55ую а не 57ую. А лутше её перерисовать но этим я сам магу заняться

Last edited by BullDogHEMI427 (12-04-2009 17:36)


Also known as HemiG
It's cool to Hate. It's cool to be a bloody guitarist.
284487-39e63-35897154-h200.jpg

Offline

Board footer

Powered by FluxBB