You are not logged in.
если не знаешь для чего это, не пиши, что посты тупые
toggle ignore_unknown
А вот сразу сказать что тебе это нужно нельзя было? Это включается там же, и без toggle debug_mode. Не надо горячку пороть >:\
Offline
Просто у меня пишет, что сначала надо включить toggle debug_mode, а потом toggle ignore_unknown, и это я делал через консоль, но уже разобрался. Всё равно спасибо.
SNKillers.net - всё о взломе и защите социальных сетей
Offline
Еще хорошо бы сделать подсветку констант:D
Можно воспользоваться таким приёмом: ставить в начало имени константы какую-нибудь цифру (0-9), например 2const. Тогда константы будут выделяться цветом (таким же, что и числа).
Offline
Доброго времени суток всем, особенно авторам СБ.
У меня вопрос - не вопрос, сообщение о баге - ил нет... короче разъясните нубу в програмировании и скриптиге.
Стоит СА (ну, да, не то, чтобы очень родная и правильная ). Стоит СБ 3.04. Пишу в нем клео скрипт. Поскольку новичок, пишу, компилю, лезу в игру проверять... Если что-то не так, лезу обратно в СБ править... Короче, на какой-то раз лазаний туда-сюда, СБ сбрасывает настройки IF - AND / OR. Это конечно обходится (AND можно последовательно несколько проверок сделать, а OR несколько разных), но как-то это не правильно вроде...
Try not. Do or do not, there is no try.
Offline
Смысла не вижу, но извольте. Это не мой код (это кусок кода из мода CLEO_Windshield_GUI). Довольно простой - рисуем новый интерфейс, в том числе иконки оружия и цифирки патронов.
:WeapAmmoDisplay gosub @GetCurrentWeap if and CURRENT_WEAP > 15 not CURRENT_WEAP == 40 not CURRENT_WEAP > 43 then gosub @GetCurrentWeapAmmo if or CURRENT_WEAP == 16 CURRENT_WEAP == 17 CURRENT_WEAP == 18 CURRENT_WEAP == 35 CURRENT_WEAP == 36 CURRENT_WEAP == 39 then gosub @DrawWeapAmmoOne else gosub @GetCurrentSlot 0A96: 0@ = actor $PLAYER_ACTOR struct 000A: 0@ += 0x5A0 CURRENT_SLOT *= 0x1C 005A: 0@ += CURRENT_SLOT // (int) 000A: 0@ += 0x8 0A8D: AMMO_CLIP = read_memory 0@ size 4 virtual_protect 0 // GetAmmoClip 0062: WEAP_AMMO -= AMMO_CLIP // (int) 0085: AMMO_OTH = WEAP_AMMO // (int) gosub @DrawWeapAmmoTwo end end return
Вопрос в том, что если этот код несколько раз открыть и закрыть в SB указанное в коде "if or" изменится на просто "if" или, что еще хуже на "if and".
Повторюсь, я нуб. Я ничерта в этом не понимаю. Редактирую я напрямую в SB, а не в текстовых файлах, как, возможно, делают опытные кодеры. Я вообще смысла в этих текстовых файлов не понимаю и их удаляю... Может потому он мне параметры и сбрасывает? Если это баг - буду рад, что указал на него. Если нет, буду рад, если объясните, в чем я не прав...
Try not. Do or do not, there is no try.
Offline
Начнём с того, что скомпилированный скрипт (cs-файл) открыть можно только в hex-редакторе, но никак не в Sanny Builder. Если сделать двойной щелчок по значку cs-файла, то он не открывается, а декомпилируется. В результате декомпиляции создаётся текстовый файл, содержимое которого появляется в окне SB.
Не нужно удалять текстовый файл (исходник) после компиляции скрипта (компиляция - создание или перезапись cs-файла с тем же названием, что и исходник). Исходник нужен как раз на случай последующего редактирования кода. Для осуществления редактирования надо открыть текстовый файл в Sanny Builder (команда Файл-Открыть). После внесения изменений производится повторная компиляция скрипта с помощью команды Запуск-Компилировать.
П.С. Даже в случае удаления исходника, содержимое cs-файла самопроизвольно меняться не должно. Так что причину замены if or на if and я не знаю, у меня такого не было.
Last edited by Den_spb (09-03-2011 15:27)
Offline
Ну, примерно понятно. Хотя, я не настолько туп и нуб (стихи прямо), чтоб так подробно мне всё объяснять, но спасибо...
Описываю ещё раз, более подробно. СБ декомпилируя некий скрипт, содержащий проверку с параметром ИЛИ (наоборот, вроде не замечал) без исходного текстового файла, делает это правильно... Более того - очеловечивает код, выдавая на экране вместо цифрового значения слова И или ИЛИ. Компилируя скрипт обратно в машинный код (в процессе работы над скриптом в СБ, возможно, текстовый файл, созданный при декомпиляции удаляется), СБ не видит цифрового значения и считает количество условий с 0 или 1 (соответственно присваивая цифровое значение, что, в итоге, всегда даёт параметр И)... Получается, что СБ компилирует не то, что на экране, а то, что в текстовом файле... Теперь всё ясно.
Маленький оффтоп можно? Объясните мне ещё один нубский вопрос... Вот, я так понимаю, что команда джамп - код туда ушёл и не вернулся, а госаб - ушёл и вернулся... Почему в оригинальном мэйне в некоторых местах (в потоке джанкфуд, например) стоят два джампа подряд? Это криворукость рокстарз? Это остатки от консоли? Или это моё непонимание того, как работает код и эти команды?
П.С. И до кучи: каким опкодом или как ещё в ГТА-СА вывести на экран флоат значение? Координаты, например?
Last edited by Yoda (09-03-2011 18:21)
Try not. Do or do not, there is no try.
Offline
Получается, что СБ компилирует не то, что на экране, а то, что в текстовом файле...
Нет. При компиляции код, который находится на экране, записывается в txt-файл (в том виде, в котором он представлен на экране). На основании этого кода также создаётся "машинный" cs-файл (если cs или txt файлы уже существуют, то они перезаписываются).
Почему в оригинальном мэйне в некоторых местах (в потоке джанкфуд, например) стоят два джампа подряд?
Подобное может быть, например, при компиляции двух вложенных друг в друга циклов с предусловием. Исходный код:
{$CLEO} wait 0 while true while true wait 0 end end
Что получаем после декомпиляции:
{$CLEO .cs} 0001: wait 0 ms :NONAME_4 0001: wait 0 ms 0002: jump @NONAME_4 0002: jump @NONAME_4
Понятно, что второй jump здесь бесполезен (он никогда не будет выполнен), просто высокоуровневые конструкции так компилируются.
каким опкодом или как ещё в ГТА-СА вывести на экран флоат значение?
0@ = 5.27348568 0AD0: show_formatted_text_lowpriority "%.5g" time 5000 0@
Last edited by Den_spb (09-03-2011 18:54)
Offline
Благо_дарствую за разъяснения!
Try not. Do or do not, there is no try.
Offline
Что такое последняя переменная?
Offline
Здравствуйте. Как-то раз писал я код, да и заметил баг компилятора:
var $DRUGAN_X: array 3 of Float $DRUGAN_Y: array 3 of Float $DRUGAN_Z: array 3 of Float $DRUGAN_PM: array 3 of Marker end $DRUGAN_X[0] = 2202.1089 $DRUGAN_Y[0] = -1977.2307 $DRUGAN_Z[0] = 13.554 $DRUGAN_X[1] = 2453.4404 $DRUGAN_Y[1] = -1984.6873 $DRUGAN_Z[1] = 13.554 $DRUGAN_X[2] = 2643.999 $DRUGAN_Y[2] = -2059.3098 $DRUGAN_Z[2] = 13.554 for 0@ = 0 to 2 step 1 018A: $DRUGAN_PM[0@] = create_checkpoint_at $DRUGAN_X[0@] $DRUGAN_Y[0@] $DRUGAN_Z[0@] end
Баг заключается в том, что при выполнении этих строк значение переменной $DRUGAN_Y[0] меняется на значение $DRUGAN_X[2], а $DRUGAN_Z[0] - на $DRUGAN_Y[2]. Я мало что понимаю в серьёзном программировании, но знающий человек подсказал мне, что такое происходит из-за того, что компилятор неправильно выделяет память под массив типа Marker, и поэтому элементы индексируются неверно. Надо отметить, замещение происходит только при своих переменных. Код мейновский, не CLEO.
Я очень надеюсь, что Seemann прислушается к этой проблеме и по возможности исправит досадный баг.
Offline
Я попробовал скомпилировать и декомпилировать обратно этот код и получил следующее:
0005: $4 = 2202.109 0005: $7 = -1977.231 0005: $10 = 13.554 0005: $5 = 2453.44 0005: $8 = -1984.687 0005: $9 = 13.554 0005: $6 = 2643.999 0005: $9 = -2059.31 0005: $12 = 13.554 0006: 0@ = 0 :NONAME_97 018A: $13(0@,3i) = create_checkpoint_at $4(0@,3f) $7(0@,3f) $10(0@,3f) 000A: 0@ += 1 0019: 0@ > 2 004D: jump_if_false @NONAME_97
код верный. можешь выложить полный .cs файл, на котором воспроизводится проблема?
Offline
можешь выложить полный .cs файл, на котором воспроизводится проблема?
Я же сказал, что код не CLEO, а мейна, точнее MPack'овского scr.scm.
Offline
Тогда выложи scr.scm) Или можешь выслать мне его в личку.
Offline
Выслал.
Offline
вставку asm .. end. Что бы писать asm вставки без дебагеров, в которых можно подсмотреть байты команд.
Offline
Добавьте очень полезную штуку как проводник ресурсов.
Это очень удобно для создания больших проектов и скриптов!
Стандартная возможность неудобна для восприятия ( Нельзя разложить все по папкам все время нужно открывать файлы фиг знает откуда и при редактировании нужно сохранять файл потом переключаться на главный и компилировать.
Offline
Хотелось бы иметь возможность переобъявлять константы. В данный момент такой код:
const MyVar = 0@ end MyVar = 0 const MyVar = 1@ end MyVar = 0
компилируется в:
0006: 0@ = 0 0006: 0@ = 0
А ведь нужная возможность, особенно для scm-функций.
Offline
А будет релиз новой версии санни билдера и вообще будет ли он развиваться?
Offline
Хотелось бы иметь возможность переобъявлять константы. В данный момент такой код:
const MyVar = 0@ end MyVar = 0 const MyVar = 1@ end MyVar = 0компилируется в:
0006: 0@ = 0 0006: 0@ = 0А ведь нужная возможность, особенно для scm-функций.
А можешь привести реальный пример кода, в котором это нужно?
А будет релиз новой версии санни билдера и вообще будет ли он развиваться?
Да, будет. Точные даты, к сожалению, сказать не могу.
Offline
Хотелось бы иметь возможность переобъявлять константы.
Мне кажется, это плохая идея, ведь цель констант как раз в обратном - значения фиксированы.
Я за внедрения проводника в СБ, как упоминалось выше - было бы удобно. А так этого функционала достаточно в СБ.
Offline
Только, если идея проводника всё же будет принята к сведению, хотелось бы также увидеть функцию его отключения в настройках. Потому как во многих случаях он будет просто не нужен, и будет мозолить глаза.
Offline