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