#101 19-04-2009 20:42

Callback
Registered: 04-03-2009
Posts: 4

Re: Вопросы по опкодам

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

#102 10-06-2009 18:16

Gyr
From: Серпухов
Registered: 03-02-2009
Posts: 246
Website

Re: Вопросы по опкодам

В чем заключается смысл опкодов :
1)  0A96: $ActorStruct = actor $PLAYER_ACTOR struct
2)  0A97: $CarStruct = car $MyCar struct
3)  0A98: $ObjectStruct = object 0@ struct ?
Для чего они нужны, какими свойствами обладают, и как правильно ими пользоваться?


Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!

Offline

#103 05-07-2009 00:15

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Вопросы по опкодам

В чем смысл параметра "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

#104 05-07-2009 07:11

Gyr
From: Серпухов
Registered: 03-02-2009
Posts: 246
Website

Re: Вопросы по опкодам

Lensflares - светорассеяние в объективе. Может это прозрачность.
Да и вообще. Просто меняй этот параметр и сам увидишь в чем разница.

Last edited by Gyr (05-07-2009 07:17)


Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!

Offline

#105 05-07-2009 14:42

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

Re: Вопросы по опкодам

Gyr wrote:

В чем заключается смысл опкодов :
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

#106 05-07-2009 16:27

Gyr
From: Серпухов
Registered: 03-02-2009
Posts: 246
Website

Re: Вопросы по опкодам

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

{$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

#107 26-07-2009 12:18

Gyr
From: Серпухов
Registered: 03-02-2009
Posts: 246
Website

Re: Вопросы по опкодам

Как правильно пользоваться опкодом 0AA7:  ? И где найти адреса для него?


Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!

Offline

#108 05-08-2009 16:47

bsstell
Registered: 05-08-2009
Posts: 25

Re: Вопросы по опкодам

Как заствить верт упасть когда ты в нем летиш?
02D4: car 8@ turn_off_engine - непомогло(

Offline

#109 05-08-2009 21:57

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: Вопросы по опкодам

0564: heli 34@ simulate_crash_landing

Offline

#110 15-10-2009 14:15

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Вопросы по опкодам

Нужен опкод, который сможет написать текстдрав определённого стиля. Текст произвольный (свой).
Такой же есть? Я вот полазил GXT-Editorom в поисках стилей и что-то не вкурил там ничего)

Offline

#111 15-10-2009 14:23

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Вопросы по опкодам

@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

#112 15-10-2009 14:58

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Вопросы по опкодам

{$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

#113 15-10-2009 15:14

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Вопросы по опкодам

Ок, спасибо. Вот только твой скрипт работает идентично моему sad
Есть опкод прерывания игры? Аналог паскалевского halt.
Желательно выход, а не выбрасывание с ошибкой (мнгновенный).

Last edited by dragonforce (15-10-2009 15:19)

Offline

#114 15-10-2009 15:24

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Вопросы по опкодам

Alien wrote:

0AA5: call 0x823BDB num_params 3 pop 3 0 0 0


GIMS developer

Offline

#115 15-10-2009 16:23

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Вопросы по опкодам

@3Doomer, спасибо. То что нужно.
Остался вопрос:

Нужен опкод, который сможет написать текстдрав определённого стиля. Текст произвольный (свой).
Такой же есть? Я вот полазил GXT-Editor'ом в поисках стилей и что-то не вкурил там ничего)

Last edited by dragonforce (15-10-2009 16:23)

Offline

#116 15-10-2009 17:11

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Вопросы по опкодам

что ты имеешь в виду под стилем?
цвет текста задаётся через специальные наборы символов в самом ключе GXT
шрифт меняется опкодом 0349(ставишь перед каждым текст дравом)


GIMS developer

Offline

#117 15-10-2009 18:12

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Вопросы по опкодам

Где можно надыбать коды шрифтов?
Вот такой текстдрав

045A: draw_text_1number 410.0 300.0 GXT 'NUMBER' number 2@

Только не для цифр, а для текста (текст обязательно любой, а не из стандартных игровых надписей).
Знаю, что на серверах SAMP текстдравы можно делать влёгкую с любым текстом. Но там способ проще.

Offline

#118 15-10-2009 18:34

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Вопросы по опкодам

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

#119 15-10-2009 18:55

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Вопросы по опкодам

Ок.
Пусть мой текст "GAME SPEED: " + 0@
Как его вывести-то?) Вот мне что нужно. Нечто типа textdraw x y "GAME SPEED: "

Offline

#120 15-10-2009 19:03

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Вопросы по опкодам

надо применить мозг и написать

045A: draw_text_1number 410.0 300.0 GXT 'GXT ключ' number 0@

текст GXT ключа:

GAME SPEED: ~1~

~1~ означает цифру


GIMS developer

Offline

#121 16-10-2009 14:27

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Вопросы по опкодам

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

03FD: set_player $PLAYER_CHAR handling_responsiveness 1

- это не он? Вроде не пашет.

Offline

#122 16-10-2009 15:00

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Вопросы по опкодам

{$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

#123 17-10-2009 05:28

PIT
Registered: 08-09-2008
Posts: 224

Re: Вопросы по опкодам

при невыполнении кода игра переходит к 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

#124 17-10-2009 08:05

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Вопросы по опкодам

я не уверен, что сработает, но...

{$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

#125 17-10-2009 09:34

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Вопросы по опкодам

            not 1@ == -1

Думаю, не выйдет, ибо переменная хранит хендл, а не цифру.
---------------------------------------------------------
Хм. Нашёл строку, после которой падает игра.

0423: set_car 1@ improved_handling_to 2.0

Вопрос об опкоде "идеальное вождение" снова открыт)
---------------------------------------------------------
Ещё вопрос. Зачем в данном случае каждый раз удалять хендл из переменной, если он постоянно будет перезаписываться, когда игрок за рулём?

Last edited by dragonforce (17-10-2009 10:05)

Offline

Board footer

Powered by FluxBB