You are not logged in.
for 0@ = 354164 to 354188 &0(0@,1i) = 16843009 end
Я же тебе уже говорил: проверить настройки SB. Форматирование текста должно быть установлено на "Как есть" или "нижний", чтобы "%d" компилировался в правильном формате.
Вы высмеяли: про дудку написав.
Ну, Вы говорили о том, что просите помощи и Вас высмеивают, вот и подумал, что дело в скриптах Если для Вас мои посты оказались слишком неприятными, то хотел бы попросить прощения. Мне тоже можно было написать свои мысли по-другому, но получилось то, что получилось. Понятно, что мы останимься при своих мнениях и будем отстаивать их до конца, но я предложу "мировую". Надеюсь, что это станет умным решением.
Ожидаю простого ответа: "Да" (могу помочь), "Нет" (не могу помочь), "Не знаю" (сомневаюсь, что помогу вам), или "Тишину", другого вроде не дано было.
Сомневаюсь, что помогу, но могу подкинуть идею для реализации. В MAIN.SCM и CLEO есть ограничения на количество сохраняемых объектов, поэтому нужно использовать то, что их не имеет или ограничений значительно меньше. Это — IPL-файл. Он не зависит от сейва вообще и имеет относительно простую структуру. Как раз в этот файл мы можем записать созданные объекты. Единственное "но", с которым у меня как раз и есть сомнения, так это редактирование таких файлов. Удаление и изменение объектов надо как-то реализовать, а таких инструментов в скриптинге практически нет. Надо делать свои костыли. Плюс появляться объекты будут после перезапуска игры и надо ещё разобраться как статические объекты удалить/скрыть с карты, если редактируемый объект был изменён.
Тупым никто тебя или вас: не называл.
Есть сильные сомнения в этом, учитывая Ваше сравнения меня с "умными" людьми на неком форуме.
Просто, иногда бывает, очень это редко мне нужна маленькая помощь от других людей, а когда я прихожу на форумы, то сразу начинается: попытки поставить за таких как я себя повыше, всячески высмеивая человека.
Ну и в чём именно мой пример кода с функцией, ответы с количеством строк в панели не понравились? Неужели я там умудрился высмеять Вас? Показал себя повыше? Какое такое поведение Вы ожидаете, когда обратились за помощью? Я сказал ровно то, что сказал бы любой другой скриптер, который с этим сталкивался.
Или думал, что я эту грубятину твою
Очень жаль, что Вы восприняли мои ответы как грубятину.
хм, странно. не хотелось бы конечно мириться с глюками, если они есть. может получится записать видео, чтобы я посмотрел как оно себя ведет?
Давай так: я переустановлю ОС и посмотрю результат. Если проблема осталась, то напишу подробно что я делал. Я уверен, что проблема в системе, но может быть, действительно баг, но не факт, что в СБ.
документация, конечно, нужна!
Хорошо, тогда кидаю архив в сообщения.
что это было в его плане как раз таки.
Он не обещал. Просто сказал, что это было в списке идей. Что Вы выдумали у себе там в голове я не знаю.
о котором я впервые вобще слышу
Он Вам же и дал ссылку на этот сайт и сказал, что все новости о ходе разработки смотреть там. Перечитайте сначала свои посты и ответы к ним, а потом уже советуйте это делать другим.
И почему это под мою
Дружище, очнись! Это прямой ответ на Ваше "я просил", "Если я", "Я итак". Слишком много "твоего я" в тексте. Прям обязаны всё сделать для Вас по первому запросу. Когда будет, тогда будет. Не обвиняйте гневными комментариями, и Вам не будут такими же комментариями отвечать. Надеюсь, доходчиво объяснил смысл моих претензий.
Поэтому не надо тут корчить из себя не знай кого
Вообще-то, этот "не знай кого" один из немногих, кто вообще пытался разобраться в Ваших вопросах здесь. Если сказано, что тем кодом можно сохранить объекты, значит оно так и есть. Откройте main.scm и смотрите сколько угодно примеров. Если игра вылетает, то это исключительно из за Вашего кода. Вы бы могли просто показать его и уже вместе искали ошибки, но Вы предпочли обозвать меня тупым провокатором.
Вышла новая версия, а толку: 0.
Того, чего я просил так и не сделали.
Прождал за зря только обновления этого, столько месяцев.
И потом.
Как вот это понимать вобще: "добавлена возможность объявлять локальные переменные с собственными именами".
А раньше нельзя было типа, через const end?
Если я бы понимал бы побольше в программировании и разумеется был бы исходный код, сам бы вправил бы 100, то что мне нужно.
Я итак уже кой какие файлы под себя настроил: classes.db, constants.txt и keywords.ini.
Что неужели было трудно добавить эту функцию подсветки констант с возможностью изменить цвет подсветки каждому под себя?
Весь мир не будет плясать под твою дудку. Выполнено то, что было запланировано в план-релизе, и там не было даже намёка на реализацию подсветки. Неужели так трудно было посмотреть план, чтобы сейчас не седеть в негодовании?
можешь уточнить сценарий?
Скорее всего проблема в мой ОС. После активации меню "Новый Cleo-скрипт", сразу пошло всё "не так". Функции пропали и вообще компилятор начал работать как плуг. Потом вообще взбесилась мышка и не реагировала на клики по любым окнам. Я бы не стал на этом останавливаться, если такое не происходило каждый раз. С глюками я могу смириться, главное, чтобы работало. А вот нововведение как раз не работало. Если в других всё нормально, то это, очевидно, моя ОС виновата. Решил с этим поделиться, может это баг.
Для документации нужны иконки радара GTA 3? Я уже всё подготовил и написал *.md-файл. Осталось только узнать нужны ли они.
Поздравляю с днюхой, Санни!!!
Приветствуются исправления и дополнения
Посмотрю что можно добавить. Скину свои варианты.
label()
CTRL+SPACE не видит нужные функции, хоть и подсвечивает их. Пока пытаюсь извращаться так:
@label() // потом удаляю @
В CLEO хорошо смотрится.
Будем осваивать GTA HD?
Компиляция/декомпиляция основного сценария и новый CLEO для IV и V в SB? Или расширять то, что имеется на других ЯП?
Можно ли вобще объекты, созданные скриптом, а не через MEd, сохранять в сейве (то есть сохраняться с ними через дискету)?
Да, если использовать глобальную переменную и ещё несколько опкодов:
$OBJ = Object.Init(#MODEL, X, Y, Z) Object.KeepInMemory($OBJ) = True Object.RemoveFromMissionCleanupList($OBJ)
В Main-е это реализовано по разному, но "RemoveFromMissionCleanupList" используется всегда.
И может ли сохранение с кучей объектов приводить к вылету и почему?
Может вылетать, если их слишком много. В моём проекте "Карьерист" я делал карту с помощью скрипта и всё сохраняло, но не так много, как хотелось.
Также не понятно: зачем было хэндл обзывать: "Финальными миссиями в Лос-Сантосе", если это в действительности не так?
Может потому, что поток, к которому относится переменная $LS_FINAL_Total_Passed_Missions имеет название "LA1FIN2"? В оригинальном мейне несколько "финальных" миссий. В данном случае это относится к первому финалу заданий в Лос Сантосе ("Зелёная сабля") и название переменной вполне закономерное. Если получится достать исходник мейна от R*, то и названия переменных будут точнее, чем те, что есть сейчас.
Скажите а как увеличить список этого
Количество строк изменить нельзя. Максимум: 12 строк. Тут надо либо рисовать собственную таблицу и писать ручками её принцип работы, или реализовать вручную переключатель для смены одной части списка на другую часть списка.
там только если каждый угол который меньше или больше, проверять надо
Потому, что так и будет. Нет такого опкода, который это делает, ибо никому в голову не придёт рассчитывать такую точность настолько часто. Можно сделать функцию, которая будет это проверять, чтобы не писать кучу IF-оф. Вот я на коленке смастерил такую:
{$CLEO} jump @skip_funcs :angle_in_range 0087: 30@ = 0@ // (float) 0063: 30@ -= 1@ // (float) 005B: 0@ += 1@ // (float) 1@ = false if and 0035: 2@ >= 30@ // (float) 0035: 0@ >= 2@ // (float) then 1@ = true end 0AB2: ret 1 1@ :skip_funcs // ОСНОВНОЙ КОД --------------------------------------------------------------------------------------- wait 1000 while true wait 0 0@ = Actor.Angle($PLAYER_ACTOR) if 0AB1: call_scm_func @angle_in_range 3 target_angle 180.0 range 0.5 current_angle 0@ store_to 1@ then // ... end 0AD1: show_formatted_text_highpriority "Angle: %f~n~State: %d" time 1 0@ 1@ end
Результат:
В 1@ будет записано 1, если угол 0@ примерно равен углу 180.0. Примерно — это 180.0 ± 0.5. Можно самостоятельно отрегулировать точность и требуемый угол. Когда нужно, вызываем функцию как обычный опкод, без кучи проверок и прочих танцев с вычислениями.
wmysterio хотел?
Мне без разницы. Я имею собственный псевдокомпилятор и мне им проще пользоваться при разработке сложных скриптов. Использую SB для компиляции и некоторыми его встроенными возможностями, которые я не в состоянии разработать самостоятельно. Подсветке констант будут рады многие. И новой справке тоже (будет время, скину материалы на одобрение).
Нельзя ли проверить вот так угол:
0@ == 170.0 to 180.0?
А что значит "to"? Если надо от угла 170 до угла 180, то пример я уже скинул, просто числа смените на нужные.
Не работает почему-то проверка угла актёра.
Допустим, я точно установил угол 180.0 Сиджею, ну например через встроненую программу в SB - Редактор координат.
Начинаю проверять типа: записанный в переменную 0@ угол актёра == 180.0 (0@ == 180.0) и проверка не срабатывает.
Проверял даже через запись в ini, угол точно: 180.0, а дальнейшие действия после проверки не срабатывают.
Зато хорошо срабатывают, если указать в проверке, что-то типа этого 0@ <= 180.0.Я конечно понимаю, что угол не может быть ровно 180.0, когда Сиджей в движении, но в том то всё и дело: Сиджей не двигается и я ему устанавливаю точно заданный угол.
Проверять дробное число на равенство в любом движке плохая идея. Такую точность можно достичь только если сравнивать константы между собой. То, что оно пишет 180.0 не значит, что оно строгое. Оно запросто может установить 180.000001 через анимацию, физику, а в файл записать округленное число. Тут или угол в целое число конвертируйте и затем сравнивайте с целым, или проверяйте диапазон
if and
0@ >= 179.9999
0@ <= 180.9999
then
// ...
end
Не делали потому что, думаю мало кто пользовался константами, если посмотреть большинство скриптов, как миниус с 2009-2014 годы, скриптеры словно клали на них.
Тогда, скорее всего, скрипты не сохранялись в исходном виде. Из за этого может сложиться впечатление, что ими не пользовались. Если брать исходники скриптов тех времён, то много из них использовали константы. По крайней мере опытные так делали.
Нет её увидеть то можно, но если бы подсвечивалось, было бы виднее сразу.
Так я не против подсветки ) Если Seemann её сделает, то я только за (неважно каким способом). Меня интересовали отдельные моменты, которые могут мешать распознаванию константы от чего-то другого.
когда важен факт подсвечивания?
Если бы оно было так важно, это сделали бы ещё в самых старых версиях. Спустя 10+ лет внезапно подсвечивать константы стало важным фактом
не знаю как можно спутать константу с глобальной переменной.
Не знаю как можно не увидеть константу в верхнем регистре в текста. Всё-таки отдельный цвет лучше.
Типа хочешь, будут подсвечиваться, хочешь нет, наверное можно указать будет и как: одним цветом или же цвет будет устанавливать в зависимости от того, что константа означает.
Да, от такого не отказался бы
Player - синим, Money - зеленым PlayerMoney
Для самых закалённых скриптеров ))
лучше бы были: описаны все коды клавиш, как для оппкода: 0AB0, так и для: 00E1, чтобы в справку по 100 раз не лезть.
Та ну. Пусть будет как есть или добавить комментарий вроде "// you must use this global variables $PLAYER_CHAR, $PLAYER_ACTOR, $PLAYER_GROUP, $ONMISSION only". При создании нового скрипта при CTRL+SPACE нет этих переменных в стиске и приходится сначала их набирать, а с комментариями - есть. От этого будет больше пользы, чем от 100+ строк лишнего кода.
Из-за этого неудобства я и не так часто пользуюсь константами, а ведь штука это полезная.
Никто не мешает писать константы в верхнем регистре, тогда их легче отличить от описания опкода.
подсвечивать константы тем же цветом что и их значение (число или переменная)
А почему не одним, который отличается от других? Есть опасение, что константу "ACTOR = 0@" можно спутать с переменной $ACTOR, допустим, в более крупных проектах, чем мелкий CLEO-скрипт. А каким цветом будет подсвечена константа (взял со справки) "PlayerMoney = $PLAYER_CHAR.Money"?
C# лучше портировать в .asi плагин
Там что сплошная математика? Разные C#-фишки вряд ли удастся нормально портировать в .asi, не говоря уже о SCM.
Если надо, то я могу скинуть этот скрипт!
Да, было бы неплохо глянуть что он из себя представляет и стоит ли играться с ним.
Привет, форум. Вот и моя очередь задать вопрос по скриптингу ) В общем, суть такова, что я хочу изменить количество патронов в пикапе, которые создаются при смерти актёров. Собственно, изменить то я изменил, но клавиша TAB при смене оружия в слоте начинает бесится и даёт либо стандартное количество патронов, либо пикап не исчезает и даёт бесконечное количество патронов (по новому количеству патронов примерно за 250 ms). Сам скрипт:
{$CLEO} if 0AA9: is_game_version_original jf @end_script // вспомогательный мусор: начало Model.Load(#SAWNOFF) 038B: load_requested_models 0376: 0@ = create_random_actor_at 2484.2766 -1672.1981 13.3359 01B2: give_actor 0@ weapon 26 ammo 100 0A27: set_actor 0@ death_pickups_persist 1 Model.Destroy(#SAWNOFF) // вспомогательный мусор: конец while true wait 0 // 250 for 0@ = 0 to 620 0A90: 1@ = 0@ * 32 // int [INDEX IN POOL] 0A8E: 1@ = 0x9788C0 + 1@ // int [ADDRESS IN POOL] 0A8E: 2@ = 1@ + 4 // int [OBJECT HANDLE] 0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0 if 2@ == 0 // <if object not exist> then continue end 0A8E: 2@ = 1@ + 28 // int [TYPE] 0A8D: 2@ = read_memory 2@ size 1 virtual_protect 0 if not 2@ == 4 // <if type is not deadman pickup> then continue end 0A8E: 2@ = 1@ + 24 // int [MODEL ID] 0A8D: 2@ = read_memory 2@ size 2 virtual_protect 0 4@ = 0 // <NEW COUNT> if 2@ == #SAWNOFF // 350 then 4@ = 2 end if 2@ == #CHROMEGUN // 349 then 4@ = 3 end if or 2@ == #DESERT_EAGLE // 348 2@ == #SHOTGSPA// 351 2@ == #SNIPER// 358 then 4@ = 4 end if 2@ == #CUNTGUN // 357 then 4@ = 6 end if or 2@ == #COLT45 // 346 2@ == #SILENCED// 347 then 4@ = 11 end if 2@ == #MP5LNG // 353 then 4@ = 14 end if 2@ == #MICRO_UZI // 352 then 4@ = 21 end if 2@ == #M4 // 356 then 4@ = 22 end if 2@ == #TEC9 // 372 then 4@ = 33 end if 2@ == #AK47 // 355 then 4@ = 41 end 0A8E: 3@ = 1@ + 8 // int [COUNT] //0A8D: 2@ = read_memory 3@ size 4 virtual_protect 0 //if //003B: 2@ == 4@ // (int) //then //continue //end 0A8C: write_memory 3@ size 4 value 4@ virtual_protect 0 end end :end_script 0ACE: show_formatted_text_box "GAME VERSION IS NOT ORIGINAL" 0A93: end_custom_thread
Откуда берёт игра количество новых патронов при смене оружия в слоте?
Помогите, пожалуйста, кто знает, как это сделать!
Либо MAIN.SCM, либо CLEO-скрипты. Определись что конкретно ты пытаешься сделать. В MAIN никаих CLEO-скриптов ты не добавишь. Их надо будет переписать специально под MAIN: заменить некоторые опкоды, директивы удалить и писать стартер для скрипта.
"Почему они не делают Sanny Builder открытым исходным кодом?"
Может чтобы не было всякой блевотной херни, как с Linux?
И "бесплатный код" — НЕ РАВНО "open source".
Спасибо за детальные репорты , пофикшено.
Спасибо за оперативность
Если еще что-то обнаружишь, пиши.
Хорошо.
Seemann, загляни в баг-трекер, некоторые опкоды неправильно компилируется.
***
Нашел ещё один баг... На этот раз пострадали внешние скрипты. Добавил рапорт в баг-трекер.