#126 17-10-2009 09:38

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

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

А хэндл - что, не цифра?
invalid handle - либо 0, либо -1, в зависимости от конкретного места

Offline

#127 17-10-2009 12:41

BritishColonist
Registered: 30-09-2009
Posts: 72

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

Ок. Но когда я проверял 0@ <> 0 вылетала игра.
Думал, раз не равно 0, то хендла не содержит и удалять хендл не стоит.
Какое значение принимает переменная с хендлом внутри? И какое не примет никогда?

Offline

#128 17-10-2009 17:51

PIT
Registered: 08-09-2008
Posts: 224

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

что по сути хендл? это указатель на структуру чего либо. Если нет чего то там, то в хендл записывается -1. Поправте меня, если я не прав smile


100 постов - 27 августа;

Offline

#129 17-10-2009 18:17

BritishColonist
Registered: 30-09-2009
Posts: 72

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

0423: set_car 0@ improved_handling_to 2.0

Когда выполняется эта строка, игра вылетает.
Хендл в переменной лежит.
Никто не знает, в чём дело?

Offline

#130 17-10-2009 19:06

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

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

@dragonforce

Друг да ты крут ошибка вовсе не там где ты думаешь...
Нельзя использовать опкод 00D9: 0@ = actor $PLAYER_ACTOR car
его тока в миссиях можно юзать
в простых скриптах юзать можно лишь вот этот 03C0: 0@ = actor $PLAYER_ACTOR car
вот тебе и ошибка.
НО и PIT прав ошибка в том, что 0@ нужно в начале твоего скрипта сделать равным -1.
Короче получится следующий рабочий скрипт:

{$CLEO}
                             
:TEST
wait 100
0@ = -1

:EXISTS
repeat 
wait 1
until Player.Defined($PLAYER_CHAR)

if and
00DF:   actor $PLAYER_ACTOR driving
0AB0:   key_pressed 16 
then 
     03C0: 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

I know everything and nothing...

Offline

#131 17-10-2009 19:44

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

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

вообще-то,я так и сделал))


GIMS developer

Offline

#132 17-10-2009 19:53

BritishColonist
Registered: 30-09-2009
Posts: 72

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

Отлично, спасибо! Игра теперь не вылетает.
Только эффекта не даёт ни в мультиплеере, ни в сингле. Время замедляется, вождение остаётся прежним.
Специально убирал замедление, чтобы проверить. Подставлял разные значения (2.0, 4.0, 6.0, 100.0), эффекта не принесло.
Рядом с опкодом  00D9: действительно написано "только для миссий", но я подумал, прокатит, а второго опкода не видел вообще smile

Offline

#133 17-10-2009 19:58

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

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

попробуй тупо активировать код на улучшенное управление.....записать значение 1 по адресу чита в памяти)) всё просто


GIMS developer

Offline

#134 18-10-2009 10:12

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

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

PIT wrote:

что по сути хендл? это указатель на структуру чего либо. Если нет чего то там, то в хендл записывается -1. Поправте меня, если я не прав smile

хэндл = индекс_в_пуле * 256 + номер_поколения
Номер поколения уверичивается при каждом следующем использовании элемента пула.

Offline

#135 18-10-2009 13:19

PIT
Registered: 08-09-2008
Posts: 224

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

стало ещё непонятней lol


100 постов - 27 августа;

Offline

#136 18-10-2009 13:52

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

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

кароч, хендл=цифра и всё))
указатель на объект/машмну/педа в памяти)) оффсет в ней))


GIMS developer

Offline

#137 18-10-2009 19:42

BritishColonist
Registered: 30-09-2009
Posts: 72

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

Если кому интересно)

{$CLEO}
                           
:TEST
wait 100
0@ = -1

:EXISTS
repeat 
wait 1
until Player.Defined($PLAYER_CHAR)

repeat 
wait 1
until 00DF:   actor $PLAYER_ACTOR driving

03C0: 0@ = actor $PLAYER_ACTOR car

if
0AB0:   key_pressed 16 
then 
     //0423: set_car 0@ improved_handling_to 2.0 // (float) 
     0A8C: write_memory 0x96914C size 1 value 1 virtual_protect 0
     015D: set_gamespeed 0.45
else 015D: set_gamespeed 1.0
     0A8C: write_memory 0x96914C size 1 value 0 virtual_protect 0
     //0423: set_car 0@ improved_handling_to 0.0   
     Car.RemoveReferences(0@)
end

jump @EXISTS

Опкод 0423 вообще не нужен) Спасибо, 3Doomer.

Offline

#138 18-10-2009 19:44

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

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

это не правильно, что ты ВСЁ ВРЕМЯ получаешь-обнуляешь хендл, да ещё и управление меняешь...нехорошо это))


GIMS developer

Offline

#139 19-10-2009 12:50

BritishColonist
Registered: 30-09-2009
Posts: 72

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

Да тут не нужен хендл. Лишние строки. Забыл на форуме закомментировать)

{$CLEO}
                           
:TEST
wait 100

:EXISTS
repeat 
wait 1
until Player.Defined($PLAYER_CHAR)

repeat 
wait 1
until 00DF:   actor $PLAYER_ACTOR driving

if
0AB0:   key_pressed 16 
then 
     0A8C: write_memory 0x96914C size 1 value 1 virtual_protect 0
     015D: set_gamespeed 0.45
else 015D: set_gamespeed 1.0
       0A8C: write_memory 0x96914C size 1 value 0 virtual_protect 0
end

jump @EXISTS

Довольно интересный и простой скрипт. Получается, как в NFS: Most Wanted. Нажал кнопку - вот тебе замедление, вот тебе лучшая управляемость.

Offline

#140 19-10-2009 14:32

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

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

всё равно нехорошо постоянно лазить в память и менять скорость игры)))
и ещё, не забывай про опкод 0000

Last edited by 3Doomer (19-10-2009 14:41)


GIMS developer

Offline

#141 19-10-2009 14:57

BritishColonist
Registered: 30-09-2009
Posts: 72

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

Ок.
Вопрос по опкдам 0000: и 0001:.
Когда именно какой надо применять?
Я применяю 0001: wait, когда изменяю параметры, загружаю модели, перед проверкой условий. Это правильно?
0000: NOP применяю только когда делаю вечные циклы, и компилятор ругается. А если не ругается, не ставлю. Тут файл откомпилился нормально. Когда применять 0000: ?

Offline

#142 19-10-2009 15:14

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

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

0000 надо ставить после {$CLEO} во всех КЛЕО скриптах, читай помощь к СБ...это как-то связано с метками вроде бы...а wait нужен в любом цикле, иначе зависнет


GIMS developer

Offline

#143 19-10-2009 15:41

BritishColonist
Registered: 30-09-2009
Posts: 72

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

У меня 0000: почти нигде не стоит.
Когда ставил там, где компилятор не "ругался", ошибок не было.
Очевидно, кашу маслом не испортишь?)

Offline

#144 19-10-2009 15:45

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

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

Когда применять 0000: ?

Применяй только тогда, когда у тебя есть возврат на метку выше ( только jump не jump_if_false). То бишь когда компилятор ругается ( если не ругается, тогда все норм).


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

Offline

#145 28-10-2009 22:59

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

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

Когда применять 0000: ?

Вместо 0000 можно употреблять wait 0. Кстати, о wait - ставить его после каждой метки необязательно. Если вайтов в коде слишком много, то скрипт будет медленно выполняться. Как отмечено выше, wait должен быть в каждом цикле. Пример:

{$CLEO}
wait 0
while true
    repeat
        wait 0
    until player.Defined($player_char)
end

В цикле while true..end уже есть один вайт, который в любом случае будет выполнен, так что непосредственно после while true ставить ещё один wait здесь не нужно.

Offline

#146 29-10-2009 05:04

flashTrash
From: Н.Новгород
Registered: 21-02-2007
Posts: 260
Website

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

Den_spb wrote:
{$CLEO}
wait 0
while true
    repeat
        wait 0
    until player.Defined($player_char)
end

Зачем такой лес? Можно же проще(и правильнее):

{$CLEO}
0000:
while not player.Defined($player_char)
wait 0
end

0000: нужен чтобы переход на начало кода не вызывал проблем.

Offline

#147 29-10-2009 16:41

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

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

Просто хотел привести простой пример с циклом, вложенным в другой цикл.

Last edited by Den_spb (29-10-2009 16:42)

Offline

#148 29-10-2009 17:37

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

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

а привёл то же самое, но тупее записанное %)


GIMS developer

Offline

#149 29-10-2009 18:03

Alien
Registered: 12-10-2008
Posts: 564

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

flashTrash wrote:
Den_spb wrote:
{$CLEO}
wait 0
while true
    repeat
        wait 0
    until player.Defined($player_char)
end

Зачем такой лес? Можно же проще(и правильнее):

{$CLEO}
0000:
while not player.Defined($player_char)
wait 0
end

0000: нужен чтобы переход на начало кода не вызывал проблем.

Это разве одно и то же? Первый скрипт будет выполняться бесконечно, второй уронит игру, как только появится игрок. Конструкции repeat-until и while-end кроме того имеют одно качественное отличие. Тело первого цикла обязательно выполнится хотя бы раз, второго - в зависимости от результата проверки.

Offline

#150 29-10-2009 19:27

DimP
Registered: 23-03-2009
Posts: 51

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

Скажите пожалуйста как сравнить в условии 2 переменные,
Пишу:

11@ > 8@ или $i > $i1

у меня появляется ошибка, что типы переменных несовместимы, хотя если это $ то я присваиваю им в начале скрипта тип, например $i: integer

Offline

Board footer

Powered by FluxBB