You are not logged in.
Ок. Но когда я проверял 0@ <> 0 вылетала игра.
Думал, раз не равно 0, то хендла не содержит и удалять хендл не стоит.
Какое значение принимает переменная с хендлом внутри? И какое не примет никогда?
Offline
что по сути хендл? это указатель на структуру чего либо. Если нет чего то там, то в хендл записывается -1. Поправте меня, если я не прав
100 постов - 27 августа;
Offline
0423: set_car 0@ improved_handling_to 2.0
Когда выполняется эта строка, игра вылетает.
Хендл в переменной лежит.
Никто не знает, в чём дело?
Offline
@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
Отлично, спасибо! Игра теперь не вылетает.
Только эффекта не даёт ни в мультиплеере, ни в сингле. Время замедляется, вождение остаётся прежним.
Специально убирал замедление, чтобы проверить. Подставлял разные значения (2.0, 4.0, 6.0, 100.0), эффекта не принесло.
Рядом с опкодом 00D9: действительно написано "только для миссий", но я подумал, прокатит, а второго опкода не видел вообще
Offline
что по сути хендл? это указатель на структуру чего либо. Если нет чего то там, то в хендл записывается -1. Поправте меня, если я не прав
хэндл = индекс_в_пуле * 256 + номер_поколения
Номер поколения уверичивается при каждом следующем использовании элемента пула.
Offline
стало ещё непонятней
100 постов - 27 августа;
Offline
Если кому интересно)
{$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
Да тут не нужен хендл. Лишние строки. Забыл на форуме закомментировать)
{$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
Ок.
Вопрос по опкдам 0000: и 0001:.
Когда именно какой надо применять?
Я применяю 0001: wait, когда изменяю параметры, загружаю модели, перед проверкой условий. Это правильно?
0000: NOP применяю только когда делаю вечные циклы, и компилятор ругается. А если не ругается, не ставлю. Тут файл откомпилился нормально. Когда применять 0000: ?
Offline
У меня 0000: почти нигде не стоит.
Когда ставил там, где компилятор не "ругался", ошибок не было.
Очевидно, кашу маслом не испортишь?)
Offline
Когда применять 0000: ?
Применяй только тогда, когда у тебя есть возврат на метку выше ( только jump не jump_if_false). То бишь когда компилятор ругается ( если не ругается, тогда все норм).
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
Когда применять 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
{$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
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 end0000: нужен чтобы переход на начало кода не вызывал проблем.
Это разве одно и то же? Первый скрипт будет выполняться бесконечно, второй уронит игру, как только появится игрок. Конструкции repeat-until и while-end кроме того имеют одно качественное отличие. Тело первого цикла обязательно выполнится хотя бы раз, второго - в зависимости от результата проверки.
Offline
Скажите пожалуйста как сравнить в условии 2 переменные,
Пишу:
11@ > 8@ или $i > $i1
у меня появляется ошибка, что типы переменных несовместимы, хотя если это $ то я присваиваю им в начале скрипта тип, например $i: integer
Offline