#3101 29-03-2011 18:42

Airon
Registered: 05-11-2010
Posts: 42

Re: Один вопрос

С анимацией проблем не будет... если закостить смогу smile
Так у тебя есть идея, как то осуществить?

Offline

#3102 29-03-2011 20:33

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

Airon wrote:

С анимацией проблем не будет... если закостить смогу smile
Так у тебя есть идея, как то осуществить?

ага, завтра отпишу, уже спать ложусь....


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#3103 30-03-2011 07:38

Airon
Registered: 05-11-2010
Posts: 42

Re: Один вопрос

жду

Offline

#3104 30-03-2011 20:02

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

чё-т не получается, завтра уже,сегодня дел было много...хотя и завтра тоже будет много) у нас просто в пятницу школьный КВН...готовлюсь...


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#3105 31-03-2011 12:01

Ty6ePkYJIe3
Registered: 17-02-2011
Posts: 24

Re: Один вопрос

Кто знает как сделать так: Когда  прицеливаешся  на человека он записывается в переменную и тоже самое с машиной?

Offline

#3106 31-03-2011 13:38

met dog
Registered: 22-03-2011
Posts: 64

Re: Один вопрос

написал скрипт но он не совсем работает вернее машина проезжает окола сантиметра и игра вылетает вот код

{$VERSION 3.1.0027}
{$CLEO .cs}

//-------------MAIN---------------
Model.Load(#ADMIRAL)
038B: load_requested_models

:NONAME_7
wait 100
if
   Model.Available(#ADMIRAL)
00E1:   player 0 pressed_key 9
else_jump @NONAME_7
0@ = Car.Create(#ADMIRAL, 2228.421, 1206.557, 10.7418)
else_jump @NONAME_7
wait 200
Car.DriveTo(0@, 2229.721, 1360.765, 10.7174)
else_jump @NONAME_7
if and
wait 300
Model.Destroy(#ADMIRAL)
else_jump @NONAME_7

Offline

#3107 31-03-2011 16:36

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

met dog wrote:

написал скрипт но он не совсем работает вернее машина проезжает окола сантиметра и игра вылетает вот код

{$VERSION 3.1.0027}
{$CLEO .cs}

//-------------MAIN---------------
Model.Load(#ADMIRAL)
038B: load_requested_models 

:NONAME_7
wait 100 
if 
   Model.Available(#ADMIRAL)
00E1:   player 0 pressed_key 9 
else_jump @NONAME_7 
0@ = Car.Create(#ADMIRAL, 2228.421, 1206.557, 10.7418)
else_jump @NONAME_7 
wait 200 
Car.DriveTo(0@, 2229.721, 1360.765, 10.7174)
else_jump @NONAME_7 
if and
wait 300 
Model.Destroy(#ADMIRAL)
else_jump @NONAME_7

ну у тебя в скрипте ошибок много... зачем у тебя "else_jump @NONAME_7" где только не хочешь стоит?) его нужно ставить только в проверках. Машина никуда не поедет без водителя... вот скрипт в исправленном виде:

{$VERSION 3.1.0027}
{$CLEO .cs}

//-------------MAIN---------------
Model.Load(#ADMIRAL)
038B: load_requested_models 

:NONAME_1
wait 100 
if and
   Model.Available(#ADMIRAL)
00E1:   player 0 pressed_key 9 
else_jump @NONAME_1
0@ = Car.Create(#ADMIRAL, 2228.421, 1206.557, 10.7418)
wait 200 
Car.DriveTo(0@, 2229.721, 1360.765, 10.7174)
wait 1000
Model.Destroy(#ADMIRAL)
jump @NONAME_1

Last edited by Voron295 (31-03-2011 16:37)


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#3108 31-03-2011 16:41

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

Re: Один вопрос

Ty6ePkYJIe3 wrote:

Кто знает как сделать так: Когда  прицеливаешся  на человека он записывается в переменную?

0AD2: $actor = player $PLAYER_CHAR targeted_actor //IF and SET

Offline

#3109 31-03-2011 18:04

Ty6ePkYJIe3
Registered: 17-02-2011
Posts: 24

Re: Один вопрос

Огромное спасибо, выручил.Только вот можеш сказать как он именно работает? Автоматически или надо ставить условие на нажатие клавиши?Если сможеш приведи какой нибудь легкий пример.

Last edited by Ty6ePkYJIe3 (31-03-2011 18:24)

Offline

#3110 31-03-2011 19:43

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

Re: Один вопрос

if
    0AD2: 0@ = player $PLAYER_CHAR targeted_actor //IF and SET
then
    actor.StorePos(0@ 1@ 2@ 3@)
    020C: create_explosion_with_radius 0 at 1@ 2@ 3@
end

Можно использовать и как команду, а не проверку, но тогда надо будет убедиться, что актёр 0@ существует (0@ <> -1).

Offline

#3111 31-03-2011 22:53

met dog
Registered: 22-03-2011
Posts: 64

Re: Один вопрос

все работает , а где нужно установить скорость авто ?

Offline

#3112 31-03-2011 22:59

met dog
Registered: 22-03-2011
Posts: 64

Re: Один вопрос

все разобрался сам

Offline

#3113 04-04-2011 00:40

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

Как в Vice City сделать проверку на player $PLAYER_CHAR busted ?
С wasted опкодом получилось, а с busted засада...
b31e0699e622863d96bb456f8ea045d8.jpeg

Offline

#3114 04-04-2011 01:16

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

Re: Один вопрос

not player.defined and player.health>0 ?

Offline

#3115 04-04-2011 02:17

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

@Seemann - Спасибо, работает.
80898ae80b04ed6b2509a19cdde14142.jpeg

Offline

#3116 04-04-2011 06:12

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Когда-то Alien дал этот код

0A8C: write_memory 13155060 size 4 value 361 virtual_protect 0

с его помощью можно заменить модель огнемёта.
13155060 - видимо адрес огнемёта
361 - ID модели.

Хочу также для осталных оружий, но как узнать нужные адреса?

Offline

#3117 04-04-2011 12:49

kostyarock*
Registered: 04-04-2011
Posts: 2

Re: Один вопрос

Как найти позицию фар относительно машины в гта вайс сити.Или лудше ориентироваться по другому месту.Скрипт на повортники почти готов.Мне нужно не толко на машины у меня поворотники будут ещё и на мотоциклах, мопедах, лодках, танках, верталётах и самолётах.

Offline

#3118 04-04-2011 18:59

Alien
Registered: 12-10-2008
Posts: 564

Re: Один вопрос

@d88 - менять значения в структуре Weapon.dat
@kostyarock* - с этой темой, как я полагаю, знакомились? Там разобрана структура компонентов только для CAutomobile в SA. В VC будет все аналогично.

CAutomobile+394h (RwFrame *[20]).
CBike+2A0h (RwFrame *[9]).
CHeli+2A0h (RwFrame *[7]). Кажется, компоненты 2 и 3 - пропеллеры.
CBoat+2B0h (RwFrame *[7]

В CPlane и CTrain ничего такого не видно...
Частично это должно быть разобрано здесь: http://sannybuilder.com/forums/viewtopic.php?id=849

Last edited by Alien (05-04-2011 16:51)

Offline

#3119 05-04-2011 01:36

kostyarock*
Registered: 04-04-2011
Posts: 2

Re: Один вопрос

Спасибо за помощь.Я к ехешнику раньше не обращался и мой мозг не переварил всю эту информацию :-( Не могли бы вы полностью написать скрипт и объяснить что на что менять для других деталей.Заранее огромное спасибо.

Offline

#3120 05-04-2011 04:47

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Но я всё равно не понимаю, что оттуда надо взять, и там же нет этого адреса - 13155060, откуда он взялся? Можете на примере объяснить?

Offline

#3121 05-04-2011 16:17

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

Re: Один вопрос

Чтобы самостоятельно разбираться в подобных примерах, необходимо изучить несколько вопросов.
Во-первых, следует понимать что такое система счисления. В обычной системе счисления 10 цифр - от 0 до 9, поэтому она называется десятичной. В программировании применяются и другие системы счисления: двоичная (состоит из двух цифр: 0 и 1) и шестнадцатиричная (состоит из шестнадцати цифр: 0 - 9, A, B, C, D, E, F). В Sanny Builder можно использовать целые числа как в десятичной, так и в шестнадцатиричной системах счисления - для их различия перед шестнадцатиричным числом ставится приставка 0x

Decimal    Hex
0              0x0
1              0x1
2              0x2
....
9              0x9
10            0xA
11            0xB
12            0xC
13            0xD
14            0xE
15            0xF
16            0x10
17            0x11
...
255          0xFF
...
65535       0xFFFF
...

Перевести число из одной системы счисления в другую несложно с помощью стандартного Windows-калькулятора. Система счисления в нём выбирается с помощью установки флажка в нужное положение (hex - шестнадцатиричная, dec - десятичная, oct - восьмеричная, bin - двоичная).
Во-вторых, следует понимать основные принципы хранения информации в памяти компьютера. Наименьшая единица измерения информации называется бит. Он может принимать одно из двух значений - либо 0, либо 1. Восемь битов составляют более крупную единицу - байт. То есть один байт может хранить двоичное число, состоящее из восьми цифр - оно будет соответствовать шестнадцатиричному числу, состоящему из двух цифр.
В-третьих, следует изучить основы по работе с памятью игры. Адрес памяти - это номер определённого байта, начиная с которого будет вестись чтение или запись. Для чтения применяется опкод 0A8D:

0A8D: 0@ = read_memory 0xC8AAB8 size 4 virtual_protect 0

Здесь 0xC8AAB8 - адрес памяти (номер байта), начиная с которого будет вестись чтение. 4 - количество байтов, значения которых надо прочитать (можно указать 1, 2 или 4 байта). То есть в данном случае будут последовательно прочитаны значения байтов 0xC8AAB8, 0xC8AAB9, 0xC8AABA, 0xC8AABB. Эти значения будут последовательно скопированы в 4 байта указанной переменной (в данном случае - 0@). Для записи значения по определённому адресу памяти используется опкод 0A8C - там всё аналогично.
Размер переменных в скриптах, как уже сказано, составляет 4 байта. Такая конструкция:

0AC7: 0@ = var 1@ offset
0A8C: write_memory 0@ size 4 value 12345 virtual_protect 0

будет аналогична

1@ = 12345

(опкод 0AC7 получает адрес памяти переменной).
Упомяну ещё о структурах. Структура - набор данных о каком-то объекте, перечисленных в строго определённом порядке. Самый распространённый пример - структуры актёров, транспорта и объектов. Для работы со структурами сначала необходимо узнать адрес, с которого начинается структура. Для вычисления адреса начала структуры актёра, транспорта или объекта есть спец.команды 0A96, 0A97, 0A98. Зная адрес начала структуры и смещение от начала (в байтах), по которому хранятся нужные данные, можно легко прочитать эти данные или заменить значение на своё. Приведу пример: проверим, является ли транспорт 0@ мотоциклом. Назначение многих часто используемых адресов памяти, а также смещений структур можно посмотреть на странице: http://gtamodding.ru/wiki/Адреса_Памяти_(SA) . Например, назначения смещений в структуре машины перечислены в разделе "Машины". Тип транспорта записан по смещению:

+1424 = [byte] Тип машины: 
0 = машина/самолет 
5 = лодка 
6 = поезд 
9 = Байк

Значения типа byte имеют размер 1 байт, word - 2 байта, dword - 4 байта, float - 4 байта (дробное число). В данном случае имеем тип "byte", поэтому размер чтения составит 1 байт (указывается в 0A8D).

    03C0: 0@ = actor $PLAYER_ACTOR car 
    0A97: 3@ = car 0@ struct // получаем адрес памяти начала структуры для транспорта игрока
    3@ += 1424 // прибавляем смещение
    0A8D: 5@ = read_memory 3@ size 1 virtual_protect 0 // читаем значение
    if
        5@ == 9
    then
        marker.CreateAboveCar(2@ 0@) // если транспорт 0@ является мотоциклом, то над ним будет создан маркер
    end

Offline

#3122 05-04-2011 17:36

Alien
Registered: 12-10-2008
Posts: 564

Re: Один вопрос

@kostyarock* - Не проверял, но должно быть что-то вроде этого:

{$CLEO}
05E5: 0@ = game_version
if
    0@ <> 0
then
    05DC: end_custom_thread
end

while true
    wait 0
    if
        not Player.Defined(0)
    then
        continue
    end
    if and
        00DF:   actor $PLAYER_ACTOR driving 
        05EE:  key_pressed 0x20  //VK_...
    then
        03C0: 0@ = actor $PLAYER_ACTOR car  
        05F5: call_scm_func @GetVehicleNode params_count 2 0@ 0 1@               // здесь 0 - номер компонента
        if
            1@ == 0
        then
            continue
        end
        1@ += 0x80
        05E0: 2@ = read_memory 1@ size 4 virtual_protect 0
        1@ += 4             
        05E0: 3@ = read_memory 1@ size 4 virtual_protect 0
        1@ += 4
        05E0: 4@ = read_memory 1@ size 4 virtual_protect 0
        024F: create_corona 5.5 6 0 with_color 255 0 0 at_point 2@ 3@ 4@

    end  
end


:GetVehicleNode
05E7: 0@ = car 0@ struct
05E4: call_function_method 0x5BAA80 struct 0@ num_params 0 pop 0 2@
1@ *= 4       
000A: 0@ += 1@
if
    2@ == 0
then
    0@ += 0x394
else
    if or
        2@ == 2
        2@ == 3
    then
        0@ += 0x2A0
    else
        if
            2@ == 4
        then
            0@ += 0x2B0
        else
            0@ = 0
        end  
    end
end
05F6: ret 1 0@

Offline

#3123 06-04-2011 01:03

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

@Alien - У меня так ничего не происходит.

Offline

#3124 06-04-2011 06:20

Alien
Registered: 12-10-2008
Posts: 564

Re: Один вопрос

Вот исправленный вариант. Протестировано и работает. (в данном примере корона будет создаваться на правом колесе CAutomobile)

{$CLEO}
05E5: 0@ = game_version
if
    0@ <> 0
then
    05DC: end_custom_thread
end

while true
    wait 0
    if
        not Player.Defined(0)
    then
        continue
    end
    if and
        00DF:   actor $PLAYER_ACTOR driving 
        05EE:  key_pressed 0x20  //VK_...
    then
        03C0: 0@ = actor $PLAYER_ACTOR car  
        05F5: call_scm_func @GetVehicleNode params_count 2 0@ 1 1@               // здесь 1 - номер компонента (правое переднее колесо)
        if
            1@ == 0
        then
            continue
        end
        1@ += 0x80
        05E0: 2@ = read_memory 1@ size 4 virtual_protect 0
        1@ += 4             
        05E0: 3@ = read_memory 1@ size 4 virtual_protect 0
        1@ += 4
        05E0: 4@ = read_memory 1@ size 4 virtual_protect 0
        024F: create_corona 0.5 6 0 with_color 255 0 0 at_point 2@ 3@ 4@
    end  
end


:GetVehicleNode
05E7: 0@ = car 0@ struct
05E4: call_function_method 0x5BAA80 struct 0@ num_params 0 pop 0 2@
1@ *= 4       
000A: 0@ += 1@
if
    2@ == 1
then
    0@ += 0x394
else
    if or
        2@ == 2
        2@ == 3
    then
        0@ += 0x2A0
    else
        if
            2@ == 4
        then
            0@ += 0x2B0
        else
            05F6: ret 1 0
        end  
    end
end
05E0: 0@ = read_memory 0@ size 4 virtual_protect 0    
05F6: ret 1 0@

Offline

#3125 06-04-2011 06:38

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

@Alien - Да, так действительно работает. Вобще интересно, можно реализовать к примеру бензин, но вместо того, чтоб выводить что-либо на экран, приаттачить корону к машине и регулировать её цвет/размер, что будет означать сколько бензина осталось, или, например, здоровье машины.

Offline

Board footer

Powered by FluxBB