#1 Re: Вопросы по скриптингу » Цвет автомобиля в RGB » 02-06-2009 16:36

В майне должен быть поток с перекраской машин, может там поискать?

А поис опкодов выдает такое:

0229: set_car 316@ primary_color_to 235@ secondary_color_to 236@
0A11: set_car 316@ tertiary_color_to 237@ quaternary_color_to 238@
0A22: set_car_color_to_panel_color_panelID $CARMOD_MENU_COLORS car $CARMOD_CAR colorslot 1 active_row $10440

#2 Re: Модификации » Ещё несколько несложных скриптов ;-) » 02-06-2009 09:17

По нажатию F-клавишь, превращаемся, не хватает только дыма и огня...

{$VERSION 3.1.0027}
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP 
thread 'REVOLVE' 

:CH
wait 0 
if AND
   Player.Defined($PLAYER_CHAR)
   not Actor.Driving($PLAYER_ACTOR)
jf @CH 

:REVOLVE1
wait 0 
if 
0AB0:   key_pressed 116   //f5
jf @REVOLVE2 

jump @FAM1

:REVOLVE2
wait 0 
if 
0AB0:   key_pressed 117    //f6
jf @REVOLVE3 

jump @FAM2

:REVOLVE3
wait 0 
if 
0AB0:   key_pressed 118    //f7
jf @REVOLVE4 

jump @FAM3

:REVOLVE4
wait 0 
if 
0AB0:   key_pressed 119    //f8
jf @REVOLVE5 

jump @SOM

:REVOLVE5
wait 0 
if 
0AB0:   key_pressed 115    //f4
jf @REVOLVE6 

jump @CJM

:REVOLVE6
wait 0 
if 
0AB0:   key_pressed 120    //f9
jf @REVOLVE7 

jump @MADDOG

:REVOLVE7
wait 0 
if 
0AB0:   key_pressed 121    //f10
jf @REVOLVE1 

jump @WUZI

:FAM1
wait 0
Model.Load(#FAM1)
038B: load_requested_models
:FAM1_1
wait 0 
if 
   Model.Available(#FAM1)
jf @FAM1_1 
09C7: change_player $PLAYER_CHAR model_to #FAM1 
Model.Destroy(#FAM1)
jump @CH   

:FAM2
wait 0
Model.Load(#FAM2)
038B: load_requested_models
:FAM2_1
wait 0 
if 
   Model.Available(#FAM2)
jf @FAM2_1 
09C7: change_player $PLAYER_CHAR model_to #FAM2
Model.Destroy(#FAM2)
jump @CH   

:FAM3
wait 0
Model.Load(#FAM3)
038B: load_requested_models
:FAM3_1
wait 0 
if 
   Model.Available(#FAM3)
jf @FAM3_1 
09C7: change_player $PLAYER_CHAR model_to #FAM3 
Model.Destroy(#FAM3)
jump @CH   

:SOM
wait 0
Model.Load(#SOMYRI)
038B: load_requested_models
:SOM_1
wait 0 
if 
   Model.Available(#SOMYRI)
jf @SOM_1 
09C7: change_player $PLAYER_CHAR model_to #SOMYRI 
player.ClearWantedLevel($PLAYER_CHAR)
Model.Destroy(#SOMYRI)
jump @CH   

:CJM
wait 0
Model.Load(#null)
038B: load_requested_models
:CJM_1
wait 0 
if 
   Model.Available(#null)
jf @CJM_1 
09C7: change_player $PLAYER_CHAR model_to #null 
Model.Destroy(#null)
jump @CH    

:MADDOG 
wait 0  
023c: request_special_actor 'maddogg' as 1 
038b: load requested models 
:MADDOG1 
wait 0  
if 
  023d:  special_actor 1 loaded 
jf @MADDOG1
09C7: change_player $PLAYER_CHAR model_to #special01
0296: unload_special_actor 1 
jump @CH 

:WUZI 
wait 0  
023c: request_special_actor 'wuzimu' as 1
038b: load requested models  
:WUZI1 
wait 0  
if 
  023d:  special_actor 1 loaded 
jf @WUZI1 
09C7: change_player $PLAYER_CHAR model_to #special01
0296: unload_special_actor 1 
jump @CH

Еслиб это работал под MP:..

{$VERSION 3.1.0027}
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP 

:CH
wait 0 
if
   Player.Defined($PLAYER_CHAR)
jf @CH 

:PRESS
wait 0 
if 
   0AB0:   key_pressed 49       // 1
jf @PRESS 

04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 0.0 30.0 0.0 
0948: create_explosion_at 1@ 2@ 3@ type 6 camera_shake 1
0565: create_soundless_explosion_at 1@ 2@ 3@ type 6
wait 100
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 30.0 0.0 0.0 
0948: create_explosion_at 1@ 2@ 3@ type 6 camera_shake 1
0565: create_soundless_explosion_at 1@ 2@ 3@ type 6
wait 100
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset -30.0 0.0 0.0 
0948: create_explosion_at 1@ 2@ 3@ type 6 camera_shake 1
0565: create_soundless_explosion_at 1@ 2@ 3@ type 6
wait 100
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 0.0 -30.0 0.0 
0948: create_explosion_at 1@ 2@ 3@ type 6 camera_shake 1
0565: create_soundless_explosion_at 1@ 2@ 3@ type 6
wait 100
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 25.0 25.0 0.0 
0948: create_explosion_at 1@ 2@ 3@ type 6 camera_shake 1
0565: create_soundless_explosion_at 1@ 2@ 3@ type 6
wait 100
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset -25.0 -25.0 0.0 
0948: create_explosion_at 1@ 2@ 3@ type 6 camera_shake 1
0565: create_soundless_explosion_at 1@ 2@ 3@ type 6
wait 100
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 25.0 -25.0 0.0 
0948: create_explosion_at 1@ 2@ 3@ type 6 camera_shake 1
0565: create_soundless_explosion_at 1@ 2@ 3@ type 6
wait 100
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset -25.0 25.0 0.0 
0948: create_explosion_at 1@ 2@ 3@ type 6 camera_shake 1
0565: create_soundless_explosion_at 1@ 2@ 3@ type 6
jump @CH

#3 Модификации » Ещё несколько несложных скриптов ;-) » 02-06-2009 09:14

JNikc
Replies: 1

Этот скрипт позволяет открывать/закрывать парочку гаражей в SF - рядом с домом Wusi, где были "китайские" миссии и гараж на стройке - тот самый главный гараж в СФ, где было много роликов. Достаточно подойти/подьехать нажать Y/N... Правда внутри главного гаража не загружены текстуры, но где-то был мод (мааленький), который это делает.

{$VERSION 3.1.0027}
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP 

:CH
wait 0 
if
   Player.Defined($PLAYER_CHAR)
jf @CH 

:CJ
wait 0 
if
  00EC: actor $PLAYER_ACTOR 0 near_point -2033.3815 178.6355 28.8429 radius 10.0 10.0
jf @WUSI 

jump @CJPRESS1

:WUSI
wait 0 
if
  00EC: actor $PLAYER_ACTOR 0 near_point -2161.6111 654.6792 52.3672 radius 10.0 10.0
jf @CH 

jump @WUSIPRESS1

:CJPRESS1
wait 0 
if 
   0AB0:   key_pressed 89       // Y
jf @CJPRESS2 
jump @CJOPEN

:CJPRESS2
wait 0 
if 
   0AB0:   key_pressed 78       // N
jf @CH 
jump @CJCLOSE

:CJOPEN
wait 0 
garage.Activate('HBGDSFS')
garage.Open('HBGDSFS')
jump @CH

:CJCLOSE
wait 0 
garage.Close('HBGDSFS')
garage.Deactivate('HBGDSFS') 
jump @CH

:WUSIPRESS1
wait 0 
if 
   0AB0:   key_pressed 89       // Y
jf @WUSIPRESS2 
jump @WUSIOPEN

:WUSIPRESS2
wait 0 
if 
   0AB0:   key_pressed 78       // N
jf @CH 
jump @WUSICLOSE

:WUSIOPEN
wait 0 
garage.Activate('FDORSFE')// - Активирует гараж
garage.Open('FDORSFE')// - Открывает гараж
jump @CH

:WUSICLOSE
wait 0 
garage.Close('FDORSFE') //- Закрывает
garage.Deactivate('FDORSFE') // - Деактивирует
jump @CH

#4 Re: Вопросы по скриптингу » Один вопрос » 02-06-2009 08:46

Кстати, почему нельзя писать вот так:
0A8C: write_memory 0x67F268 size 5 value 0x44e9 virtual_protect 1

А нужно вот так:
0A8C: write_memory 0x67F268 size 4 value 0x44e9 virtual_protect 1
0A8C: write_memory 0x67F26c size 1 value 0 virtual_protect 1

Видимо, чтобы закончить строку в памяти нулевым сиволом - признак конца строки/памяти в С.

Все заработало! Списибо! Это реальный город призрак.

Забавно, что так "легко" сделать маппинг, обычно говорят сложно и виндовс будес запрещать.

#5 Re: Вопросы по скриптингу » Один вопрос » 02-06-2009 00:34

GTASA
Ты в коде, кстати, забыл модель загрузить:

Model.Load(#WMYBP)
:NONAME_325
wait 10 
if 
   Model.Available(#WMYBP)
else_jump @NONAME_325

Alien

0A8C: write_memory 0x6D261D size 1 value 2 virtual_protect 1

Так этот код снимает предел в интерьере 0. В true интерьерах ЛЕТАТЬ НЕЛЬЗЯ?

Кто-нибудь летал по Либерти нормально? На транспорте/джетпаке, а не с помощью клавиш и ПутАт?

#6 Re: Вопросы по скриптингу » Один вопрос » 31-05-2009 16:28

В смысле ж\д пути?? А как можно получить их координаты? ;-0

#7 Re: Вопросы по скриптингу » Один вопрос » 31-05-2009 07:57

Ясно. Неблагодарное это дело, менять в игре вещи, которые не предполагалось менять. Интересно в R* предполагали, что люди будут скиптить и всё такое? Думаю да, потому что у них явно был высокоуровневый компилятор (есть все признаки в main.scm) и они думали так: ну вот надоест людям играть в игру, они глянут, хмм, да тут целый скриптовый язык, а давай скриптить. И ещё игра проживет.

#8 Re: Модификации » Двигаем прямо в Liberty City » 31-05-2009 07:39

В любом случае дальнейшего развития СБ уже наверное не будет

Почему? :-< Есть же GTA 4, хотя там совсем другая модель с опкодами...

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

На самом деле при наличие определенного уровня кода переход на новый можно организовать добавив очередной модуль. То есть: раньше код обрабатывал сканер1, парсер1, анализатор1; потом это дело расширяют и уже работает система сканер1, парсер1, анализатор1, анализатор2, препроцессор. Это верно?

У СБ я нашел макросы macroes.txt это даже не макросы!!! :-) Ладно, шучу.

#9 Re: Вопросы по скриптингу » Один вопрос » 31-05-2009 07:29

А константы наверное тоже в памяти находятся, а не заменяются на число во время компиляции

Ну я просто помню Керниган с Риччи (тоже между прочим умные дяденьки :-) хвастались, что в компиляторе C константы заменяются н а значения при компиляции...

0A8C: write_memory 0x6D261D size 1 value 2 virtual_protect 1

Отлично, значит это переменная в сегменте данных (возможно).

И всё таки, как маркеры сделать видимыми в интерьере?

#10 Re: Вопросы по скриптингу » Один вопрос » 30-05-2009 22:58

Ааа... В смысле того, что разработчики писали игру на Си++ в хорошем стиле, использовали константу типа FLY_MAX, и сравнивали с ней координаты в выражениях. Но как известно все константы заменеются на численные значения во время компиляции, поэтому выудить константу трудно, а изменить невозможно.

Выходит они использовали переменную?

#11 Re: Модификации » Двигаем прямо в Liberty City » 30-05-2009 22:51

Все здорово, но код

0AB1: call_scm_func @MODEL_LOAD 1 #phoenix

Неудобочитаем. Хотя спасибо, незнал такого. Просто под макросами я имею в виду нечто совсем другое.

А есть ли у СБ препроцессор???

#12 Re: Модификации » Двигаем прямо в Liberty City » 29-05-2009 10:43

А я бы так написал:

if (Player.OkFreeWalkig) & (Player.Interier == 0) {
   Around.CreateIcon('red', 2464.905, -1667.774, 13.4724)
   if Player.StayIn(1, 2464.905, -1667.774, 13.4724) {
      Player.Interier = 1
      Player.PutAt(-900.2229, 456.3773, 1346.872)
   }
}

if (Player.OkFreeWalkig) & (Player.Interier == 1) {
   Around.CreateIcon('red', -902.2229, 458.3773, 1346.872)
   if Player.StayIn(1, -902.2229, 458.3773, 1346.872) {
      Player.Interier = 0
      Player.PutAt(2462.905, -1665.774, 13.4724)
   }
}

И всё.

Конечно высокоуровневые if then else и циклы это шаг вперед, но классы и методы... А ещё мощнее - макросы!

Можно сократить код ещё в два раза. Определим функцию:

Teleport(interier1, interier2, x1, y1, z1, x2, y2, z2) {
if (Player.OkFreeWalkig) & (Player.Interier == interier1) {
   Around.CreateIcon('red', x1, y1, z1)
   if Player.StayIn(1, x1, y1, z1) {
      Player.Interier = interier2
      Player.PutAt(x2+2, y2+2, z2)
   }
}
}

И потом просто вызовем её два раза

Teleport(0, 1, 2464.905, -1667.774, 13.4724, -902.2229, 458.3773, 1346.872)
Teleport(1, 0, -902.2229, 458.3773, 1346.872, 2464.905, -1667.774, 13.4724)

Две строчки против того что было вначале.

#13 Re: Модификации » Двигаем прямо в Liberty City » 29-05-2009 10:35

Ну как? Что является признаком низкоуровневых языков? Метки, goto, прыжки jump. Это я так, последнее время нахожусь под воздействием идеи... Должны быть скриптовые языки повыше уровнем.

#14 Re: Вопросы по скриптингу » Один вопрос » 29-05-2009 10:32

2 Sw[ee]t

В смысле? Не поделетесь секретом :-)

#15 Re: Вопросы по скриптингу » Один вопрос » 29-05-2009 07:10

1. Почему когда создаешь желтые/белые/красные маркеры в интерьерах они не видимы?
2. Некоторые програмки (SB в том числе) считывают из игры координаты, и могут их менять (телепортеры). Они видимо обращается по адресу в памяти. Никто не знает как это осуществить?
3. Ещё вот что - в интерьерах не летают самолеты. Например Либерти - интерьер с номером 1, но попав туда вы не сможете взлететь, хотя посмотреть есть что, нет ли способа это изменить?

#16 Re: Серия GTA » КогдаЖ будем скриптить для GTA 4 ? » 28-05-2009 22:26

Метод для нелинивых иногда работает для ленивых.

Скоро (Завтра) положу перевод. Пусть знающие люди разместят где-нибудь.

Прикрепляю файл. Не понял описания одного опкода - switch.

#17 Re: Sanny Builder и CLEO » Выше чем SB? » 28-05-2009 20:03

То есть Вы имеете в виду, что придуман сам синтаксис языка, но не написан компилятор с него в низкоуровневый байт-код? Правильно понимаю?

Вот посмотрел Open4 и Sparck4 - это не компиляторы... Нащел декомпилятор scone... Компилятора не нашел, даже низкоуровнего. ???.

#18 Модификации » Двигаем прямо в Liberty City » 28-05-2009 16:06

JNikc
Replies: 12

А вот страшный низкоуровневый! скрипт. Рядом с домом в тупике заходим на красный круг и попадаем прямо в кусок Либерти. Можно идти только вверх по дороге, по направлению к бистро с.марка, иначе - провалетесь, там дороги не настоящие. Вобщем халтурили разработчики :-)

{$CLEO}
thread 'LIBERTY'

$1 = 0 

:LIBERTY_1
wait 0 
09E8: $ACTIVE_INTERIOR = actor $PLAYER_ACTOR active_interior // записывается активный интерьер актёра
if AND
  $ACTIVE_INTERIOR == 0 
  Player.Defined($PLAYER_CHAR)
jf @LIBERTY_1 

0570: $SPH1 = create_asset_radar_marker_with_icon 31 at 2464.905 -1667.774 13.4724

:LIBERTY_2
wait 0 
if 
0102:   actor $PLAYER_ACTOR in_sphere 2464.905 -1667.774 13.4724 radius 1.2 1.2 3.0 sphere 1 stopped_on_foot 
else_jump @NONAME_141 

jump @NONAME_256 

:NONAME_141
wait 0 
if 
0102:   actor $PLAYER_ACTOR in_sphere -906.704 447.9177 1346.872 radius 1.2 1.2 3.0 sphere 1 stopped_on_foot 
else_jump @NONAME_200 

jump @NONAME_496 

:NONAME_200
wait 0 
if 
  $1 == 1 
else_jump @NONAME_62 

:NONAME_222
wait 0 
if and
0457:   player $PLAYER_CHAR aiming_at_actor 5@ 
0AB0:   key_pressed 89 
else_jump @NONAME_62 
jump @NONAME_496 

:NONAME_256
wait 0 
select_interior 1 
0860: link_actor $PLAYER_ACTOR to_interior 1 
Actor.PutAt($PLAYER_ACTOR, -900.2229, 456.3773, 1346.872)
08DC: create_interior_marker $SPH2 at -906.704 447.9177 1346.872 radius 5.0 
018B: set_marker $SPH2 radar_mode 2
096A: enable_flying_helis 1 
09AC: disable_map_icons 1 
03DE: set_pedestrians_density_multiplier_to 0.0 
01EB: set_traffic_density_multiplier_to 0.0 
0898: set_cranes_controls_enable_UP 0 enable_DOWN 0 enable_RELEASE 0 
//0826: enable_hud 0 
0581: enable_radar 1 
//075B: zoom_radar 100 
//02A3: enable_widescreen 1 
Camera.SetAtPos(-975.6997, 1061.162, 344.7998)

wait 0 
if 
  $1 == 0 
else_jump @NONAME_222 
$1 = 1 
Model.Load(#POLMAV)

:NONAME_325
wait 10 
if 
   Model.Available(#POLMAV)
else_jump @NONAME_325 
Model.Load(#SOMYBU)

:NONAME_350
wait 10 
if 
   Model.Available(#SOMYBU)
else_jump @NONAME_350 
5@ = Actor.Create(Mission1, #SOMYBU, -783.5714, 497.4976, 1376.195)
0860: link_actor 5@ to_interior 1 
Actor.PutAt(5@, -783.5714, 497.4976, 1376.195)
$GRN = Car.Create(#POLMAV, 0.0, 0.0, 0.0)
0840: link_car $GRN to_interior 1 
Car.PutAt($GRN, -900.2229, 463.3773, 1346.873)
Car.Angle ($GRN) = 90
0825: set_helicopter $GRN instant_rotor_start 
Model.Destroy(#POLMAV)
Model.Destroy(#SOMYBU)
jump @NONAME_62 

:NONAME_496
wait 0 
select_interior 0 
0860: link_actor $PLAYER_ACTOR to_interior 0 
Actor.PutAt($PLAYER_ACTOR, 2469.905, -1667.774, 13.472)
jump @NONAME_62

Это не оптимизированный скрипт, но вроде работает.

Основная идея - линкуемся в интерьер с номером 1 и перемещаемся в Либерти, что по координатам
-900.2229, 456.3773, 1346.872

Last edited by JNikc (Today 18:56)

А это просто полетать :

// By Alien
{$CLEO}
0A8C: write_memory 0x67F268 size 4 value 0x44e9 virtual_protect 1
0A8C: write_memory 0x67F26c size 1 value 0 virtual_protect 1
repeat
wait 10
until player.Defined($player_char)
select_interior 1
0860: link_actor $PLAYER_ACTOR to_interior 1 
04E4: unknown_refresh_game_renderer_at -750.5782 490.7358
0A0B: set_rendering_origin_at_3D_coord -750.5782 490.7358 1371.7162 angle 82.0 
Actor.SetImmunities($PLAYER_ACTOR, 1, 1, 1, 1, 1)
0792: disembark_instantly_actor $PLAYER_ACTOR 
Actor.PutAt($PLAYER_ACTOR, -750.5782, 490.7358, 1371.7162)
07A7: put_jetpack_on_actor $PLAYER_ACTOR 
0A93: end_custom_thread

#19 Re: Серия GTA » КогдаЖ будем скриптить для GTA 4 ? » 28-05-2009 16:03

А где можно просветится по поводу устройства байт-кода в файлах sco ГТА4? Подскадите плиз.

#20 Re: Sanny Builder и CLEO » Выше чем SB? » 28-05-2009 16:00

Там речь идет о скриптере для ГТА4, а я толкую об ОБЩЕМ ВЫсокоуровневом языке. Выходит такого пока нет? Что называется находимся в состоянии "ассемблера".

#21 Re: Sanny Builder и CLEO » Выше чем SB? » 28-05-2009 14:24

Спасибо за ссылку, выходит пишет уже народ что-то подобное. Пойду посмотрю.

#22 Sanny Builder и CLEO » Выше чем SB? » 27-05-2009 12:54

JNikc
Replies: 5

Здрасьте. У меня вопрос к местным программерам, почему до сих пор нет ВЫСОКОУРОВНЕГО интерпретатора для GTA. К примеру, вместо того, чтобы писать длинный и нудный скрипт для найма людей, можно написать что-нибудь вроде:

only if Player.OkFreeWalking
only if Gamer.KeyPressed == "F12"
Чувак = Around.ClousePed
only if Чувак.Type == "Gang1"
Чувак.Group = Player.Group
switch (Gamer.KeyPressed) {
   case "g" : FollowTo(Чувак, Player)
   case "h" : Leave(Чувак)
}

Тут мы берем основные классы и используем их методы. Никаких переменных, опкодов... ВОТ что хотелось бы иметь! Ну это вот такая телега. Кто-нибудь что-нибудь думает?

Board footer

Powered by FluxBB