Здесь задавайте свои вопросы по созданию миссий. Структура, особые правила и тому подобные вопросы. ------------------------------------------------ Вот мой первый вопрос: Имеется такая вещь, как mission_cleanup. Я слышал, что она возвращает в исходные позиции многие параметры: камеру, радар, худ и прочее. Где-то было сказано, что это и очищает игру от всего, что было создано в миссии. Хотел бы узнать подробнее. Например, если я загружал модели, создавал актеров и машины, то в конце миссии (там, где mission_cleanup) не нужно будет писать model.destroy, car/actor/object/marker/pickup.removereferences и т.п. команды? То есть, абсолютно ли все, что создано в процессе миссии, удалится, или придется кое-какие вещи удалять самому? И еще: можно ли эту команду очищения использовать и в обычных потоках, или это относится только к миссиям? SCRIPTER
Сообщение отредактировал Vital - Четверг, 05.01.2012, 23:35
перед тем, как добавить обьект в клинап-лист, игра проверяет, является ли поток миссией (это моё предположение, посмотрел опкод destroy_actor, там идёт проверка CScriptThread.field_C6)
Сообщение отредактировал DK22Pac - Пятница, 06.01.2012, 00:08
Надписи нет. Я создал FXT файл "NEIZV" и в нем прописал название в строке "NEIZV1". Возможно, текст выводится из-за fxt файла?
Эм... название строки в FXT файле, должно совпадать с названием в скрипте. Т.е. если ты дал строке в FXT файле название, например "GTA" и в эту строку записал название миссии, то и в скрипте ты должен прописать "GTA", а не "GTA1", "GTA2" и т.д. Так же если отсутсвует Gxthook.cleo подобная проблема так же может возникнуть...
Den_spb, лично у меня на четвертой версии текст работает. ILYALION, проверь, правильно ли ты создал fxt файл. И еще: зачем тебе опкод 054С? Лично я без него вывожу текст и все прекрасно. Это же fxt, а не gxt, вроде выбирать этот опкод тогда не нужен. -------------------------------- Еще вопрос от меня. Можно ли (думаю, да) делать миссии в виде обычных потоков (я пишу на mpack, так что оригинальных возможностей нету, ничего не сможет накладываться друг на друга)? Просто у меня (для моего мода) есть идея делать миссии при помощи таблиц переходов. Таблица переходов будет начинать миссию, номер которой увеличивается по мере прохождения. SCRIPTER
Den_spb, лично у меня на четвертой версии текст работает.
Насколько помню, Alien рекомендовал не использовать Gxthook.cleo с КЛЕО4.
Quote (Vital)
Можно ли (думаю, да) делать миссии в виде обычных потоков
Миссию (сюжетное задание игрока) можно оформить как в виде скрипта-потока, так и в виде скрипта-миссии. Ведь важно не то, что делает скрипт, а то, правильно ли он написан. Нужно помнить отличия скрипта-миссии от скрипта-потока и учитывать их при составлении кода.
Den_spb, какие именно есть отличия? Т.е. не будет ли проблем, если я сделаю примерно такое построение миссии: 1)Подготовка -блокировка других возможностей (которые вне миссии) -загрузка необходимых моделей и ресурсов 2)Начало -расстановка актеров и т.д. -постановка задачи игроку -вывод объяснений (текста) 3)Конец -проверка условий выполнения миссии -возвращаем все в исходное положение (возможности и т.д.) При неудачном прохождении номер миссии остается тем же (я хочу через таблицы переходов), а при удачном-прибавляется, чтобы миссии шли по порядку. Или есть какие-то другие нюансы? SCRIPTER
Эти отличия и так известны: - Количество локальных переменных (в скрипте-миссии - 1024 штуки, в скрипте-потоке - 32). - Одновременно может быть запущен только один скрипт-миссия, а скриптов-потоков - много. - Есть опкоды, которые можно применять только в скриптах-миссиях: 00D8: mission_cleanup, 0112: wasted_or_busted // mission only (и другие опкоды с комментарием "mission only") и т.д. - Клео-поток завершается командой 0A93, клео-миссия - командой 004E. Может что-то забыл, но основные отличия перечислил.
Den_spb, у меня не клео миссии, и особо много переменных не требуется, я пишу в scr.scm (MPACK), как аддон к игре, так что проблемы с клео командами не встретятся П.С. Я сделал один интересный трюк (я делал его и в Creator'е, над которым пока работаю). Я взял неиспользуемую статистику (номер 340) и стал записывать в нее флаг "занятости" (обычный способ почему-то не работал) и проверяю его в каждом скрипте. Таким образом, нельзя использовать несколько возможностей сразу (или использовать их на миссиях). Опкоды с mission_only не беру, для проверки, что игрока схватили копы есть 0741. Ограничений в переменных, по сути, нету, ведь это не клео, так что глобальные можно брать. SCRIPTER
DK22Pac, ого! тут, я так понял, еще и адреса памяти, связанные с потоками? Я уже успел сделать через таблицы переходов, уже одна миссия работает, как следует.
Добавлено (04.01.2013, 00:24) --------------------------------------------- Вот хочу спросить, нету ли ошибок в данном коде миссии (миссия тестовая, небольшая). Использовал mission_cleanup, который давно хотел проверить, но не уверен в его правильном использовании. После завершения миссии актёр и маркер удаляются, как обычно, т.е. актёр (если жив, начинает гулять) исчезает после смерти, тогда же исчезает и маркер. Исчезание происходит и на некотором расстоянии от игрока. Неужели mission_cleanup действительно настолько полезен?
Код
{$CLEO .cm} 0000: while true wait 0 0209: 0@ = random_int_in_ranges 22 30 0781: get_weapon_with_ID 0@ model_to 1@ model.Load(1@) 038B: load_requested_models actor.StorePos($PLAYER_ACTOR,2@,3@,4@) 02C0: store_to 2@ 3@ 4@ ped_path_coords_closest_to 2@ 3@ 4@ actor.Create(5@,Special,#MALE01,2@,3@,4@) 01B2: give_actor 5@ weapon 0@ ammo 9999 marker.CreateAboveActor(6@,5@) 077A: set_actor 5@ acquaintance 3 to_actors_pedtype 0 05DE: AS_actor 5@ walk_around_ped_path 0ACD: show_text_highpriority "Kill the target or pay $250 by pressing Action" time 2500 while true wait 0 if and //1 80E1: not player 0 pressed_key 4 not wasted_or_busted actor.Dead(5@) then 0394: play_music 1 player.Money(0) += 500 0ACD: show_text_highpriority "Mission passed! Target killed" time 1500 break end //1 if and //2 not wasted_or_busted not actor.Dead(5@) 00E1: player 0 pressed_key 4 010A: player $PLAYER_CHAR money > 249 then 0394: play_music 1 player.Money(0) += -250 0ACD: show_text_highpriority "Mission complete! Money paid" time 1500 break end //2 if //3 wasted_or_busted then 0ACD: show_text_highpriority "Mission failed!" time 1250 break end //3 end 0110: clear_player $PLAYER_CHAR wanted_level $ONMISSION = 0 0ACA: show_text_box "123" mission_cleanup break end end_thread