You are not logged in.
Pages: 1
В майне должен быть поток с перекраской машин, может там поискать?
А поис опкодов выдает такое:
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
По нажатию 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
Этот скрипт позволяет открывать/закрывать парочку гаражей в 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
Кстати, почему нельзя писать вот так:
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
Видимо, чтобы закончить строку в памяти нулевым сиволом - признак конца строки/памяти в С.
Все заработало! Списибо! Это реальный город призрак.
Забавно, что так "легко" сделать маппинг, обычно говорят сложно и виндовс будес запрещать.
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 интерьерах ЛЕТАТЬ НЕЛЬЗЯ?
Кто-нибудь летал по Либерти нормально? На транспорте/джетпаке, а не с помощью клавиш и ПутАт?
В смысле ж\д пути?? А как можно получить их координаты? ;-0
Ясно. Неблагодарное это дело, менять в игре вещи, которые не предполагалось менять. Интересно в R* предполагали, что люди будут скиптить и всё такое? Думаю да, потому что у них явно был высокоуровневый компилятор (есть все признаки в main.scm) и они думали так: ну вот надоест людям играть в игру, они глянут, хмм, да тут целый скриптовый язык, а давай скриптить. И ещё игра проживет.
В любом случае дальнейшего развития СБ уже наверное не будет
Почему? :-< Есть же GTA 4, хотя там совсем другая модель с опкодами...
А нащет "всего лишь" интерпритаторов: есть такие интерпритируемые языки на основе байт-кода, что дадут фору любым высокоуровневым компиляторам. Чем же игровой язык хуже?
На самом деле при наличие определенного уровня кода переход на новый можно организовать добавив очередной модуль. То есть: раньше код обрабатывал сканер1, парсер1, анализатор1; потом это дело расширяют и уже работает система сканер1, парсер1, анализатор1, анализатор2, препроцессор. Это верно?
У СБ я нашел макросы macroes.txt это даже не макросы!!! :-) Ладно, шучу.
А константы наверное тоже в памяти находятся, а не заменяются на число во время компиляции
Ну я просто помню Керниган с Риччи (тоже между прочим умные дяденьки :-) хвастались, что в компиляторе C константы заменяются н а значения при компиляции...
0A8C: write_memory 0x6D261D size 1 value 2 virtual_protect 1
Отлично, значит это переменная в сегменте данных (возможно).
И всё таки, как маркеры сделать видимыми в интерьере?
Ааа... В смысле того, что разработчики писали игру на Си++ в хорошем стиле, использовали константу типа FLY_MAX, и сравнивали с ней координаты в выражениях. Но как известно все константы заменеются на численные значения во время компиляции, поэтому выудить константу трудно, а изменить невозможно.
Выходит они использовали переменную?
Все здорово, но код
0AB1: call_scm_func @MODEL_LOAD 1 #phoenix
Неудобочитаем. Хотя спасибо, незнал такого. Просто под макросами я имею в виду нечто совсем другое.
А есть ли у СБ препроцессор???
А я бы так написал:
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)
Две строчки против того что было вначале.
Ну как? Что является признаком низкоуровневых языков? Метки, goto, прыжки jump. Это я так, последнее время нахожусь под воздействием идеи... Должны быть скриптовые языки повыше уровнем.
2 Sw[ee]t
В смысле? Не поделетесь секретом :-)
1. Почему когда создаешь желтые/белые/красные маркеры в интерьерах они не видимы?
2. Некоторые програмки (SB в том числе) считывают из игры координаты, и могут их менять (телепортеры). Они видимо обращается по адресу в памяти. Никто не знает как это осуществить?
3. Ещё вот что - в интерьерах не летают самолеты. Например Либерти - интерьер с номером 1, но попав туда вы не сможете взлететь, хотя посмотреть есть что, нет ли способа это изменить?
Метод для нелинивых иногда работает для ленивых.
Скоро (Завтра) положу перевод. Пусть знающие люди разместят где-нибудь.
Прикрепляю файл. Не понял описания одного опкода - switch.
То есть Вы имеете в виду, что придуман сам синтаксис языка, но не написан компилятор с него в низкоуровневый байт-код? Правильно понимаю?
Вот посмотрел Open4 и Sparck4 - это не компиляторы... Нащел декомпилятор scone... Компилятора не нашел, даже низкоуровнего. ???.
А вот страшный низкоуровневый! скрипт. Рядом с домом в тупике заходим на красный круг и попадаем прямо в кусок Либерти. Можно идти только вверх по дороге, по направлению к бистро с.марка, иначе - провалетесь, там дороги не настоящие. Вобщем халтурили разработчики :-)
{$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
А где можно просветится по поводу устройства байт-кода в файлах sco ГТА4? Подскадите плиз.
Там речь идет о скриптере для ГТА4, а я толкую об ОБЩЕМ ВЫсокоуровневом языке. Выходит такого пока нет? Что называется находимся в состоянии "ассемблера".
Спасибо за ссылку, выходит пишет уже народ что-то подобное. Пойду посмотрю.
Здрасьте. У меня вопрос к местным программерам, почему до сих пор нет ВЫСОКОУРОВНЕГО интерпретатора для 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(Чувак)
}
Тут мы берем основные классы и используем их методы. Никаких переменных, опкодов... ВОТ что хотелось бы иметь! Ну это вот такая телега. Кто-нибудь что-нибудь думает?
Pages: 1