You are not logged in.
2 Driver:
05CA: AS_actor $PLAYER_ACTOR enter_car CAB_ID passenger_seat -1 5000 ms
-1 - на любое свободное, можно заменить номером (0 - рядом с водителем и т.д.), 5000 - сколько времени ему на это выделяется. Если не успевает, то мгновенно переносится в машину.
0432: 18@ = get_actor_handle_from_car $TEMPVAR_ACTOR_CAR passenger_seat 0
Записывает в переменную хэндл актера, сидящего в данной машине на данном пассажирском месте.
Offline
В чем заключается смысл опкодов :
1) 0A96: $ActorStruct = actor $PLAYER_ACTOR struct
2) 0A97: $CarStruct = car $MyCar struct
3) 0A98: $ObjectStruct = object 0@ struct ?
Для чего они нужны, какими свойствами обладают, и как правильно ими пользоваться?
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
В чем смысл параметра "lensflares" в опкоде
024F: create_corona_with_radius 0.2 type 2 lensflares 0 with_color 255 0 0 at $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3
Опкод 04D5 отличается от приведенного только порядком перечисления параметров?
Offline
Lensflares - светорассеяние в объективе. Может это прозрачность.
Да и вообще. Просто меняй этот параметр и сам увидишь в чем разница.
Last edited by Gyr (05-07-2009 07:17)
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
В чем заключается смысл опкодов :
1) 0A96: $ActorStruct = actor $PLAYER_ACTOR struct
2) 0A97: $CarStruct = car $MyCar struct
3) 0A98: $ObjectStruct = object 0@ struct ?
Для чего они нужны, какими свойствами обладают, и как правильно ими пользоваться?
Каждой машине, актеру, объекту в игре (физической модели, которую мы видим на экране) соответствует определенный блок данных в оперативной памяти. В этом блоке хранятся параметры машины/объекта/актера (например, здоровье), различные данные, взятые из внешних файлов (например, handling.cfg) и т.п.
Указанные выше опкоды возвращают начальный адрес этого самого блока памяти (при документации его называют структурой), соответствующего определенной машине/актеру/объекту. Добавляя к полученному адресу различные смещения (offset) можно получить адрес, по которому хранится то или иное значение, и изменить его.
Например,
http://www.gtamodding.com/index.php?tit … _(SA)#Cars
+140 = [float] Mass (kg) from handling.cfg
берем адрес блока памяти машины 0@
0A97: 1@ = car 0@ struct
прибавляем 140
1@ += 140
читаем получившийся адрес
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
в 1@ должно теперь храниться значение массы машины
(адрес не проверял, чисто по докам с гтамоддинг).
Offline
То есть, если я хочу создать эффект возле выхлопной трубы машины, то мне нужно написать такой код:
{$CLEO .cs} 0000: wait 0 :1 wait 0 if player.defined($PLAYER_CHAR) jf @1 if actor.Driving($PLAYER_ACTOR) jf @1 03C0: 1@ = actor $PLAYER_ACTOR car wait 0 0A97: 2@ = car 1@ struct 0A8E: 6@ = 2@ + 0x48 // x 0A8E: 7@ = 2@ + 0x4C// y 0A8E: 8@ = 2@ + 0x50 // z wait 0 0A8D: 3@ = read_memory 6@ size 4 virtual_protect 0 0A8D: 4@ = read_memory 7@ size 4 virtual_protect 0 0A8D: 5@ = read_memory 8@ size 4 virtual_protect 0 wait 0 066B: 28@ = attach_particle "PRT_SPARK" to_car 1@ with_offset 3@ 4@ 5@ flag 1 064C: make_particle 28@ visible end_thread
Я прав? Поправь меня , если что не так.
Last edited by Gyr (06-07-2009 16:09)
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
Как правильно пользоваться опкодом 0AA7: ? И где найти адреса для него?
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
Как заствить верт упасть когда ты в нем летиш?
02D4: car 8@ turn_off_engine - непомогло(
Offline
Offline
Нужен опкод, который сможет написать текстдрав определённого стиля. Текст произвольный (свой).
Такой же есть? Я вот полазил GXT-Editorom в поисках стилей и что-то не вкурил там ничего)
Offline
@Sw[ee]t, твой опкод 0564: heli 34@ simulate_crash_landing у меня на сработал... Или я не так делаю?
{$VERSION 3.1.0027} {$CLEO .cs} //-------------MAIN--------------- wait 0 :NONAME_4 wait 10 :NONAME_8 wait 0 Player.Defined($PLAYER_CHAR) //Если игрок существует jf @NONAME_8 :NONAME_11 wait 0 04A9: actor $PLAYER_ACTOR driving_heli //Если игрок пилотирует вертолёт jf @NONAME_11 Player.SetDrunkVisuals($PLAYER_CHAR, 0) //Камера в нормальном положении 03F0: enable_text_draw 1 //Включение текстдрава 045A: draw_text_1number 410.0 300.0 GXT 'NUMBER' number 0 // ~1~ //Пишется 0 :NONAME_41 wait 0 0AB0: key_pressed 50 //Но если ещё нажата клавиша 2 jf @NONAME_41 :NONAME_50 wait 0 00D9: 0@ = actor $PLAYER_ACTOR car //запихать вертолёт игрока в переменную 0@ (правильно?) Player.SetDrunkVisuals($PLAYER_CHAR, 100) //камера болтается (типа эффект "бухой пилот" :) ) wait 3000 0564: heli 0@ simulate_crash_landing //собственно опкод "крушение" 03F0: enable_text_draw 1 //Ещё раз надо активировать текстдрав? Вроде ошибок нет. 045A: draw_text_1number 410.0 300.0 GXT 'NUMBER' number 1 // ~1~ //написать 1 (чтобы было видно, что скрипт активирован) 0AB0: key_pressed 50 //делать это пока не нажмут 2 jf @NONAME_50 jump @NONAME_4
Может проблема в зацикливании? Если вертолёт уже падает, я заставляю его падать ещё раз...
З.Ы. Извините за код после декомпилятора (оригинал потерял).
Offline
{$VERSION 3.1.0027} {$CLEO .cs} 0000: NOP 0@ = 0 while 0@ == 0 wait 1000 while Player.Defined($PLAYER_CHAR) wait 1000 2@ = 0 Player.SetDrunkVisuals($PLAYER_CHAR, 0) while 04A9: actor $PLAYER_ACTOR driving_heli wait 0 045A: draw_text_1number 410.0 300.0 GXT 'NUMBER' number 2@ 03F0: enable_text_draw 0 if and 0AB0: key_pressed 50 2@ == 0 then 2@ = 1 00D9: 1@ = actor $PLAYER_ACTOR car Player.SetDrunkVisuals($PLAYER_CHAR, 100) wait 3000 02D4: car 1@ turn_off_engine 0564: heli 1@ simulate_crash_landing car.RemoveReferences(1@) end end end end
Last edited by 3Doomer (15-10-2009 15:00)
GIMS developer
Offline
Ок, спасибо. Вот только твой скрипт работает идентично моему
Есть опкод прерывания игры? Аналог паскалевского halt.
Желательно выход, а не выбрасывание с ошибкой (мнгновенный).
Last edited by dragonforce (15-10-2009 15:19)
Offline
@3Doomer, спасибо. То что нужно.
Остался вопрос:
Нужен опкод, который сможет написать текстдрав определённого стиля. Текст произвольный (свой).
Такой же есть? Я вот полазил GXT-Editor'ом в поисках стилей и что-то не вкурил там ничего)
Last edited by dragonforce (15-10-2009 16:23)
Offline
Где можно надыбать коды шрифтов?
Вот такой текстдрав
045A: draw_text_1number 410.0 300.0 GXT 'NUMBER' number 2@
Только не для цифр, а для текста (текст обязательно любой, а не из стандартных игровых надписей).
Знаю, что на серверах SAMP текстдравы можно делать влёгкую с любым текстом. Но там способ проще.
Offline
0349: set_text_draw_font 3 //шрифт, цифры от 1 до 3
0340: set_text_draw_RGBA 180 180 180 255 //цвет букв(вроде не работает)
033F: set_text_draw_letter_size 1.0 1.0 //размер букв
060D: draw_text_shadow 1 color_RGBA 0 0 0 255 //расстояние от букв и цвет тени
081C: draw_text_outline 1 RGBA 0 0 0 255 //толщина и цвет обводки
GIMS developer
Offline
Ок.
Пусть мой текст "GAME SPEED: " + 0@
Как его вывести-то?) Вот мне что нужно. Нечто типа textdraw x y "GAME SPEED: "
Offline
Нужен опкод, который врубит идеальное вождение.
03FD: set_player $PLAYER_CHAR handling_responsiveness 1
- это не он? Вроде не пашет.
Offline
{$CLEO} :TEST wait 100 :EXISTS repeat wait 1 until Player.Defined($PLAYER_CHAR) if and 00DF: actor $PLAYER_ACTOR driving 0AB0: key_pressed 16 then 00D9: 0@ = actor $PLAYER_ACTOR car 0423: set_car 0@ improved_handling_to 2.0 // (float) 015D: set_gamespeed 0.45 else 015D: set_gamespeed 1.0 Car.RemoveReferences(0@) end jump @EXISTS
Вот мой код. Тут я юзнул опкод 0423: set_car 0@ improved_handling_to 2.0.
Игра вылетает при нажатии нужной кнопки.
0423: set_car 0@ improved_handling_to 2.0 //2.0 - есть что? Эффективность?
Last edited by dragonforce (16-10-2009 15:10)
Offline
при невыполнении кода игра переходит к else и тут встречается вот что:
else 015D: set_gamespeed 1.0 Car.RemoveReferences(0@) end jump @EXISTS
она хочет обнулить хендл машины,которой ещё нет, ну она не определена опкодом. Возможно поэтому скрипт лагает
Last edited by PIT (17-10-2009 05:29)
100 постов - 27 августа;
Offline
я не уверен, что сработает, но...
{$VERSION 3.1.0027} {$CLEO .cs} 0000: NOP 0@ = 0 1@ = -1 while 0@ == 0 wait 1000 while Player.Defined($PLAYER_CHAR) wait 1000 while 00DF: actor $PLAYER_ACTOR driving wait 0 if 0AB0: key_pressed 16 then 00D9: 1@ = actor $PLAYER_ACTOR car 0423: set_car 1@ improved_handling_to 2.0 015D: set_gamespeed 0.45 end end if not 1@ == -1 then 0423: set_car 1@ improved_handling_to 0.0 015D: set_gamespeed 1.0 Car.RemoveReferences(1@) end end end
GIMS developer
Offline
not 1@ == -1
Думаю, не выйдет, ибо переменная хранит хендл, а не цифру.
---------------------------------------------------------
Хм. Нашёл строку, после которой падает игра.
0423: set_car 1@ improved_handling_to 2.0
Вопрос об опкоде "идеальное вождение" снова открыт)
---------------------------------------------------------
Ещё вопрос. Зачем в данном случае каждый раз удалять хендл из переменной, если он постоянно будет перезаписываться, когда игрок за рулём?
Last edited by dragonforce (17-10-2009 10:05)
Offline