Голосование

Как вы относитесь к играм в жанре "симулятор колонии"?












Оформление



Пользователей
  • Всего: 29191
  • Последний: dielit
Сейчас на форуме
Пользователи: 2
Гостей: 616
Всего: 618

0 Пользователей и 1 Гость просматривают эту тему.

Тема: [MS] Руководство по командам Модульки или header_operations  (Прочитано 27248 раз)

  • Сообщений: 2740
  • За создание крупных модов и других особо сложных проектов
    • Просмотр профиля
Руководство по header_operations
Автор:Winter
Оригинал: http://mbx.streetofeyes.com/index.php/topic,898.0.html
Устаревший и далеко не полный, но это фактически единственный развернутый мануал по командам.
Извините может перевод корявый  :)
----

В этом руководстве я постараюсь кратко объяснить функцию каждой операции в header_operations.py, а иногда и добавить анекдоты моего собственного опыта к сложным или сложная операция.

Начиная с самого верха.

SCRIPT OPERATIONS

call_script
----
Эта операция звонки сценария кортежа из module_scripts.py. Эффективно работает этом все операции в сценарий, прежде чем продолжить путь операциях блока, в котором была использована call_script соч. Одним из наиболее универсальных и важных операций в модуле системы, могут быть использованы как для очень простой и очень продвинутые вещи.

Важно отметить, что локальные переменные, не переносятся в сценарий, и они не переносятся из сценария к любым блоком, из которого называют сценарием.

Вы можете кормить ввод в сценарий с помощью сценария параметров, которые могут быть любые численные запись, переменная или зарегистрируйтесь. Вы можете вводить до двух параметров сценария, просто набрав их после имени сценария. Посмотрите, как call_script используется в родном для примера о том, как это сделать. Или же вы можете использовать глобальные переменные или регистры, значения которых будет перенесен в и из сценариев.

Для сценария для вывода любой информации, он должен хранить значения одного или более глобальные переменные или регистрами.


end_try
----
Является устаревшим этой операции. Это означает, что он устарел и не может не поддерживаться в будущих версиях M & B. Вы должны использовать вместо try_end.


try_end
----
Эта операция завершает заявлением начала попробуйте по try_begin, try_for_range (_backwards), try_for_parties или try_for_agents.


try_begin
----
Эта операция открывает пытаются заявление. Попробуйте заявления удобно, потому что они позволяют использовать условия в них не завершив весь блок операций, если не-соответствия происходит.

Игнорируются Без попробовать заявления, если какое-либо условие работы в блоке (т.е. она входы не совпадают), является состав блока, и все дальнейшие операции в блоке. Однако в попытке заявлением, если условие операции не удается, не учитываются только те операции внутри пытаются заявление. Остальная часть блока продолжает работать как обычно после попытки заявления выполнено.


else_try_begin
----
Другие устаревшим операции. Вместо использования else_try.


else_try
----
Эта операция находится между стартером пытаются заявление и try_end и изменяет пытаются заявление. Если какой-либо условий эксплуатации, расположенных выше else_try сбой, else_try будет активирована, и игра начинает бежать все операции ниже else_try. Однако, если все операции в попытке заявление (или другой else_try) выше else_try удается, то else_try игнорируется, и пропускает игру прямо на следующий try_end.

Вы можете иметь несколько else_trys в одном заявлении попробовать. Они оцениваются сверху донизу, причем каждый else_try активация как один над ничего не получается. Как только все условия else_try успеха IIT затем будет переходить к следующему try_end.


try_for_range
----
Эта операция открывает цикл. Она требует, чтобы назначить более низкую оценку (начало местонахождения) и верхняя граница (окончание месте) за цикл. При запуске try_for_range будет петлю через каждые число от нижней границы и (верхняя граница-1).

Например, если нижняя граница равна 0 и верхняя граница 5, то try_for_range будет первая попытка запустить все свои операции в 0 (содержащийся в пункте назначения). Затем, когда закончите, как 0, она будет выполнять все операции снова как 1, а затем 2 и так далее. Пожалуйста, обратите внимание, колеблется в М & В не включая верхнюю границу - это означает, что в диапазоне от 0 до 5, последний номер он будет работать как 4. Берегитесь, чтобы вы правильно выбрать верхнюю границу.

Вы можете свободно изменять эту переменную использовать в try_for_range без изменения порядка или здоровья циклы. Вы также можете увеличить или уменьшить верхнюю границу, если переменная и скрипт будет держать работает, пока не достигнет модифицированной нижней или верхней границы. Тем не менее, не снижают верхнюю границу ниже текущего значения назначения переменной.


try_for_range_backwards
----
То же, что try_for_range, но вместо этого он начинает с (верхняя граница-1) и спускается к нижней границе.


try_for_parties
----
Открывает попробовать ведомость по каждому участнику по наземным карте.


try_for_agents
----
Открывает попробовать ведомость по каждому агенту по карте битвы.


store_script_param_1
----
Сохраняет значение первого параметра сценарий для назначения на ваш выбор. Если не вернуть его будет равна 0.


store_script_param_2
----
Сохраняет значение первого параметра второй сценарий для назначения на ваш выбор. Если не вернуть его будет равна 0.



СОСТОЯНИЕ ДЕЯТЕЛЬНОСТИ

GE
----
Предполагается, что первое значение должно быть больше или равно второму значению. Если это не так, то сбой.


экв
----
Предполагается, что первое значение в точности равно второму значению. Если это не так, то сбой.


GT
----
Предполагается, что первое значение должно быть больше второго. Если это не так, то сбой.


is_between
----
Предполагается, что первое значение, которое будет любое число между назначенными нижней границы и (верхняя граница-1). Если это не так, то сбой. Те же правила применяются для is_between как для try_for_range, ни операция включает в себя верхнюю границу. Это означает, что если вы используете (is_between, ": переменная", 0,5), он будет успешным только, если ": переменная" равна 0,1,2,3 или 4. Она не будет проверять 5.


entering_town
----
Succeeds, когда игрок начинает сталкиваться с особым городом.


map_free
----
Succeeds когда игрок свободен (не останавливаясь) по наземным карте.

Комментарии Зимний: иногда не удается добиться успеха без всякой видимой причины, пока Вы не въезжать и выезжать из столкнуться.


encountered_party_is_attacker
----
Succeeds когда столкнулись участник назначается в качестве нападающего.


conversation_screen_is_active
----
Succeeds когда разговор экране активна. Может быть использовано только в module_mission_templates.py


in_meta_mission
----
Другие операции устаревшим, не использовать эту функцию.


troop_is_hero
----
Успешно, если входной войска герой (имеет tf_hero в войска флаги).


hero_can_join
----
Успешно, если у вас есть свободные войска стека и достаточно места в вашей стороне за 1 дополнительных войск.


hero_can_join_as_prisoner
----
Успешно, если у вас есть свободное заключенного стека и достаточно места в вашей стороне за 1 дополнительную заключенного.


party_can_join
----
Успешно, если у вас есть достаточно свободного стека войск и достаточно места в вашей стороне все войска сталкиваются стороны.


party_can_join_as_prisoner
----
Успешно, если у вас есть достаточно свободного стека в плен и достаточно места в вашей партии в тюрьму все войска сталкиваются стороны.


main_party_has_troop
----
Успешно, если у вас есть ввод войск в вашей партии.


party_is_in_town
----
Успешно, если входной стороне находится внутри ввод города.

Зимний Комментарий: Эта операция никогда не работали правильно, когда я пытался его использовать. Лучше что-то чинить party_is_in_any_town и store_distance_to_party_from_party.


party_is_in_any_town
----
Успешно, если входной стороной в любом городе.


party_is_active
----
Успешно, если входной партия жива.

Комментарии Зимний: Эта операция кажется иногда работает с перебоями, которое может в конечном итоге вызывает ошибки при утверждении в сочетании с remove_party - игра заканчивается пытается удалить сторон, которые уже мертв! Другие оп лучше оставить неиспользованной.


player_has_item
----
Успешно, если у игрока есть пункт ввод в инвентарных запасах. Работает только для необорудованных пунктов.


troop_has_item_equipped
----
Успешно, если входной войска имеет входной пункт оборудован.


check_quest_active
----
Успешно, если входной Квест активен.


check_quest_finished
----
Успешно, если закончен ввод "Квест".


* _set_slot
----
Эти операции установить значение, один из слотов прилагается к различным позициям в игре. В настоящее время вы можете прикрепить слоты для войск, партий, фракций, сцены, участник шаблонов, агентов и квесты. Каждое гнездо на каждый объект может хранить любые данные, как зарегистрировать или переменная, и я это сделаю, если постоянное перезаписаны.


* _get_slot
----
Возвращает содержимое слота по вашему выбору и выводит его в пункт назначения по Вашему выбору.


* _slot_eq
----
Успешно, если содержание входных слота на входной вступления равна входного значения.


* _slot_ge
----
Успешно, если содержание входных слота на входной запись greather не менее входного значения.


play_sound
----
Воспроизведение звука на ваш выбор.


copy_position
----
Копирует ввод второй позиции на первую позицию ввода.


init_position
----
Чтобы рассказать вам правду? Понятия не имею.


get_trigger_object_position
----
Функции туманной, в настоящее время не использовалось в Native. Может быть использован в будущих версиях, чтобы получить позиции элемента с помощью пункта триггеров.


get_distance_between_positions
----
Возвращает расстояние между двумя позициями входы и выходы его назначения на ваш выбор.


position_is_behind_position
----
Успешно, если на первую позицию ввода за вторую позицию ввода.


position_transform_position_to_parent
----
Hellequin объясняет это гораздо лучше, чем я могу на этом посту MBXForum: http://mbx.streetofeyes.com/index.php/topic, 502.msg10495.html # msg10495


position_move_ *
----
Перемещения входные позиции по X, Y или Z оси входного числа сантиметров.


position_rotate_ *
----
Поворачивает входные позиции по X, Y или Z оси входного количество градусов.


position_get_ *
----
Получает X, Y или Z координате входных позиций и выводит его в пункт назначения, по вашему выбору.


position_set_ *
----
Устанавливает X, Y или Z координаты входной позиции на входные значения.


МИССИЯ УСЛОВИЯ

all_enemies_defeated
----
Успешно, если все породила врагов бессознательном или мертвым.


race_completed_by_player
----
Устаревшие, не используйте его.


num_active_teams_le
----
Успешно, если количество активных групп (т.е. число групп с активными членами), меньше или равна входного значения.


main_hero_fallen
----
Успешно, если это выбило игроков бессознательного.


Отрицание

договор
----
Это тег, который можно добавить в любых условиях эксплуатации, а также его изменения, что для этого требуется, а противоположный его обычным требованиям к успеху. Например, если (напр., ": переменная", 1), требует ": переменная", которая равна 1 к успеху (NEG | EQ, ": переменная", 1), требует ": переменная", которая к неравенству 1, с тем чтобы добиться успеха.


this_or_next
----
Это тег, который можно добавить в любых условиях эксплуатации, а также изменяет условия для успеха, если это либо условия или следующей операции, условия в блоке успеха.

Вполне возможно, в строку нагрузок this_or_next модифицированных операций вместе, пока они в непрерывную цепь. Если какие-либо условия в цепочке успеха, все они будут успешными и скрипт будет работать.


LT
----
Предполагается, что первое значение должно быть меньше второго. Если это не так, то сбой.

NEQ
----
Предполагается, что первое значение, которое будет неравенства на второе значение. Если это не так, то сбой.


Le
----
Предполагается, что первое значение должно быть меньше или равным второму значению. Если это не так, то сбой.


РЕЗУЛЬТАТЕ ОПЕРАЦИИ


set_party_battle_mode
----
Наборы боевой режим активным. Это означает, что потери принятых в следующей битве будут применяться к участнику в конце сражения. В противном случае не будут приняты потери.

Обратите внимание, что потери только будут приняты правила породили войск. Любой гость или агентов, порожденные spawn_agent операции не рассчитывают на потери.


start_map_conversation
----
Начинается разговор по наземным карта со входом войск. Будет рассматривать только те диалоги, начиная с Диалог-государство "event_triggered".

Зимние комментариев: Слегка хитроумной операции, и сейчас Родной сценарии с той же функциональностью, которые не используют start_map_conversation. Вероятно, лучше избегать.


rest_for_hours
----
Заставляет ввод количества часов ехать быстро. Игрок участник исчезнет с карты мира за этот период, не могут быть атакованы, и получает увеличился заживление ран и т.д.


add_xp_to_troop
----
Добавляет ввод числа опыт указывает на ввод войск.


add_gold_as_xp
----
Старая операция, возможно, устаревшим, не должно быть необходимым.


add_xp_as_reward
----
Добавляет ввод числа опыт указывает на стороне игрока.


add_gold_to_party
----
Добавляет ввод количества золота на входной стороне. Входные группы для этой операции не должны быть игроком участника, использование troop_add_gold за предоставленную золота на плеер.


spawn_around_party
----
Запускает новый участник входной стороне шаблона около входной стороне. После породила идентификатор породила участника хранится в Reg (0).


set_spawn_radius
----
Устанавливает размер радиуса (около входной стороне), на которые новые партии будут икру.

display_message
----
Выводит строку, как текст по левому краю экрана.


set_show_messages
----
Включает или отключает показ сообщений в левой части экрана.

Зимний комментариев: "Я не уверен, что эта операция действительно работает или нет, но, кажется, функционирует с перерывами, если на всех.


tutorial_box
----
Паузы игры и всплывает небольшое текстовое поле в центре экрана, содержащий входную строку в качестве основного органа (и, возможно вторая строка ввода как поле Title).


question_box
----
Паузы игры и всплывает небольшое текстовое поле в центре экрана, требующих игрока нажать на одну из двух вариантов. Вы можете ввести строки для отображения на дополнительные кнопки. Если оставить отключенной кнопке шоу "Да" и "Нет".


reset_price_rates
----
Сброс ставок цен в нормальное русло.


set_price_rate_for_item
----
Устанавливает цену ставки для ввода элемента входных процентах от его нормальной скоростью цен (определяется по стоимости и торговые навыки).


set_price_rate_for_item_type
----
Устанавливает цену ставки для типа входных элементов в процентах от их нормальной скоростью цен (определяется по стоимости и торговые навыки).


party_join
----
Добавляет входной стороне игрока партии.


party_join_as_prisoner
----
Добавляет входной стороне игрока партия заключенных.


troop_join
----
Добавляет ввод войск в стороне игрока. Добавляется только 1 отряд, и сообщение с описанием эффектов отображается в левой части экрана.

troop_join_as_prisoner
----
Добавляет ввод войск для игрока-участника в качестве узника. Добавляется только 1 отряд, и сообщение с описанием эффектов отображается в левой части экрана.


remove_member_from_party
----
Удаляет ввод войск из входной стороне. Удаляется только 1 отряд, и сообщение с описанием эффектов отображается в левой части экрана.


remove_regular_prisoners
----
Удаляет все не-герой заключенных. Хитрая операцию, не может работать, и оказывается устаревшей Родной скриптов и других операций в любом случае.


remove_troops_from_companions
----
Удаляет ввода числа войск тип входного войска из входной стороне. Не удалить узников того же типа.


remove_troops_from_prisoners
----
Удаляет ввода числа заключенных, принадлежащих к типу входного войска из входной стороне. Не удалить нормальный войсками того же типа.


heal_party
----
Восстанавливает входной участник полного здоровья.


disable_party
----
Отключает входной стороной, скрывая его от карты. По-прежнему будет действительной цели ИИ поведения и могут все еще быть затронуты сценария.


enable_party
----
Включает входной стороне, восстановлении его на карте. Стороны могут начаться как инвалиды, добавив партийный флаг pf_disabled партии или партии шаблон.


remove_party
----
Удаляет входной стороне от игры.


add_companion_party
----
Создается новая партия во главе с героем войска ввода.


add_troop_to_site
----
Добавляет ввод войск для входных сцене точкой входа. Становится родным на сцене, а не посетитель. Это автоматически снимает войск из любой предыдущей придает сцене.


remove_troop_from_site
----
Удаляет ввод войск из входных сцене. Не работает для посетителей.


modify_visitors_at_site
----
Позволяет внести изменения посетителей на входе сцене.


reset_visitors
----
Удаляет все посетители в настоящее время на месте происшествия.


set_visitor
----
Устанавливает посетитель типа войска вклад в миссию ввод шаблона икру запись. Эта операция не устанавливает посетителей непосредственно к точкам сцену въезда.

Например, (set_visitor, ": войска", 3), создаст ": войска" в качестве зрителей на четвертую строку в миссии шаблон икру записи. Если эта запись икру не существует, или настроен на использование scene_source чем visitor_source, посетитель не появится. Если икру вступления установлен в неправильную точку входа, посетитель будет появляться при въезде, указанный в поле икру.


set_relation
----
Наборы отношений между двумя входными фракций входного значения.


start_quest
----
Устанавливает поисках статуса ввод в активном поиске.


complete_quest
----
Устанавливает поисках статуса входных стремлении имея завершена. Квест не считается активным.


succeed_quest
----
Устанавливает поисках статуса входных стремлении Получив удалось. Квест не считается активным.


fail_quest
----
Устанавливает поисках статуса входных стремлении будучи не удалось. Квест больше не считается активным.


cancel_quest
----
Устанавливает поисках статуса входных стремлении имея отменен. Квест больше не считается активным.


set_quest_progression
----
Если запрос на ввод qf_show_progression поиски флага, эта операция устанавливается в процентах от завершения отображаются в поисках экрана на ввод значения.


setup_quest_text
----
Не совсем уверен, но я думаю, что он хранит Quest текста с текущими значениями регистра строки, так что поиск текста не будет поврежден изменения регистра строки.


start_encounter
----
Начало встречи с входной стороне.


leave_encounter
----
Листья столкнуться.


encounter_attack
----
Используется в диалоге, устанавливает сталкиваются с враждебным и переходит к нападению меню.

select_enemy
----
При вводе существующие битва, эта операция выбирает, какая из сторон считается врагом для игрока.


set_passage_menu
----
Новая операция, функция по-прежнему туманно. Возможное объяснение: может установить проход, чтобы перейти прямо к различным меню игры, не требуя Messy миссией окончание кода.


end_current_battle
----
Завершает текущую битву. Используется  к концу сражения с несколькими участниками.

ПРОДОЛЖЕНИЕ СЛЕДУЕТ. . .

« Последнее редактирование: 29 Июня, 2011, 12:54 от Leon473 »
  • Ник в M&B: DRZ_Mark7
  • Фракция: Вегиры
  • Сообщений: 3072
  • За регистрацию на форуме не позже декабря 2011 года и не менее 3000 постов За активный вклад в развитие сайта
    • Просмотр профиля
    • Мои линки
Спасибо конечно, но не мог бы ты аккуратнее перевести?
nd_try
----
Является устаревшим этой операции. Это означает, что он устарел и не может не поддерживаться в будущих версиях M & B. Вы должны использовать вместо try_end.
Что заместо чего пользовать?

I'll be back
  • Сообщений: 2122
  • За создание технических проектов различного характера
    • Просмотр профиля
Amfitrion, используй try_end

Спасибо
Amfitrion




« Последнее редактирование: 01 Сентября, 2009, 17:17 от Amfitrion »
Мундир, кукла, зеленый шарабан, а также опилки, возвращенные минута в минуту конструкторами, подверглись исследованию под электронным микроскопом. Однако ничего, кроме маленькой бирки со словами "Это мы, опилки", найденной в опилках, обнаружено не было.

Текущее настроение: Singing death, death, death, death, devil, devil, evil, evil songs.
  • Сообщений: 2740
  • За создание крупных модов и других особо сложных проектов
    • Просмотр профиля
Спасибо конечно, но не мог бы ты аккуратнее перевести?
Если чёто не понятно говори, я исправлю.

  • Ник в M&B: DRZ_Mark7
  • Фракция: Вегиры
  • Сообщений: 2122
  • За создание технических проектов различного характера
    • Просмотр профиля
Типы переменных:
Локальные - доступны только для конкретного скрипта, триггера и т.п.). В сейвах не хранятся. Название начинается с :
Глобальные - доступны всегда и отовсюду. Сохраняются в сейвах. Название начинается с $
Регистры - почти тоже самое, что и глобальные переменные. Имеют предустановленные названия и ограниченное количество. Пример - reg0 или reg10. Не помню, храняться ли в сэйвах. Вроде нет.
Слоты - переменные, привязанные к конкретному игровому типу (юниту, партии, предмету и т.п.). Могут иметь только числовые наименования, но для удобства можно сопоставить число и текстовое название в module_constants. Сохраняются в сейвах. Пример - slot_town_wealth или spt_kingdom_hero_party

Практически все операции модульной системы представляют собой то, что принято называть функцией.
Им передаются какие-то аргументы, они с ними работают. Функции обычно возвращают какое-то результирующее значение, и операции модульной системы не исключение. В зависимости от того, успешно была выполнена операция, или нет, она возвращает true или false.

Примечание: кроме того, многие операции изменяют глобальные или локальные переменные. Например операция party_remove_members запишет количество убранных из партии юнитов в reg0, а операция (assign, ":var", 1) запишет в локальную переменную :var значение 1.

От того, true или false вернет операция, зависит, будет ли выполнен код, находящийся далее.
Возьмем для примера операцию eq - равенсто:

(assign, ":var", 1), #Записываем в :var значение 1
(eq, ":var", 0), #eq сравнивает два значения. Если они равны, возвращается true иначе false.
(display_message, "@Сообщение"), #выводится сообщение

В данном случае, мы никогда не увидим сообщение, потому что :var равно 1.
Операция call_script возвращает true или false в зависимости от того, был ли выполнен вызываемый скрипт. Обычно скрипты, рассчитанные на возврат false, содержат в своем названии буквы cf (can fail).

Многие операции расчитаны на возврат false.
Однако, существуют и такие, для которых возврат false является внештатной ситуацией. Если они возвращают false, игра сообщит о ошибке.
Например, к юниту-лорду (скажем, trp_knight_1_1) приписана партия, идентификатор которой хранится в slot_troop_leaded_party.
Если лорда только что побили, в slot_troop_leaded_party будет записано число -1, т.е. партии у него никакой нет.
Возьмем для примера простой код:

(troop_get_slot, ":party", "trp_knight_1_1", slot_troop_leaded_party), #копируем значение из slot_troop_leaded_party в ":party"
(party_add_members, ":party", "trp_looter", 10), #добавляем в партию с порядковым номером ":party" 10 лутеров

Поскольку у лорда нет партии, в ":party" записано значение -1 и при попытке добавить в неё лутеров игра выдаст ошибку, потому что операция party_add_members вернула false.
Этого можно было бы избежать, добавив операцию "негативного сравнения" neq вот так:

(troop_get_slot, ":party", "trp_knight_1_1", slot_troop_leaded_party),
(neq, ":party", -1), #если в :party записано -1, возвращает false, иначе true
(party_add_members, ":party", "trp_looter", 10),
...

Продолжать, нет?

Мундир, кукла, зеленый шарабан, а также опилки, возвращенные минута в минуту конструкторами, подверглись исследованию под электронным микроскопом. Однако ничего, кроме маленькой бирки со словами "Это мы, опилки", найденной в опилках, обнаружено не было.

Текущее настроение: Singing death, death, death, death, devil, devil, evil, evil songs.
  • Сообщений: 2740
  • За создание крупных модов и других особо сложных проектов
    • Просмотр профиля
ConstantA спасиб огромное, очен интересно и полезно, пордолжай пожалуйста.  :)  :thumbup:

  • Ник в M&B: DRZ_Mark7
  • Фракция: Вегиры
  • Сообщений: 2122
  • За создание технических проектов различного характера
    • Просмотр профиля
Ок.
Сегодня коротко.

При работе с операциями "ветвления" try_begin - else_try - try_end (которые очень похожи на if - else), надо помнить, что
Цитата: Rongar
условие попадания в параллельную ветку else_try определяется не в начале предыдущего блока, а всей историей выполнения этого блока.

Пример:
(assign, reg0, 0), #устанавливаем reg0 = 0
(try_begin),
 (eq, reg0, 0), #да, все верно, reg0 = 0. Начинаем выполнять этот блок.
 Действие 1. #выполняем какие-то действия.
 (assign, reg0, 1), #устанавливаем reg0 = 1
 (eq, reg0, 0), #операция eq возвращает false. reg0 уже не равен 0. Блок откидывается.
(else_try) #блок без условий. Он выполнится, если все блоки выше вернули false. Значит, начинаем выполнять этот блок
 Действие 2. #выполняем какие-то действия.
(try_end), #конец ветвления.

Таким образом, были выполнены как Действие 1, так и Действие 2. Таким поведением модульная система не вписывается в
Цитата: Rongar
парадигму структурного программирования
, где условия выполнения блока проверяются перед его запуском.

Be vigilant!


« Последнее редактирование: 07 Сентября, 2009, 05:10 от ConstantA »
Мундир, кукла, зеленый шарабан, а также опилки, возвращенные минута в минуту конструкторами, подверглись исследованию под электронным микроскопом. Однако ничего, кроме маленькой бирки со словами "Это мы, опилки", найденной в опилках, обнаружено не было.

Текущее настроение: Singing death, death, death, death, devil, devil, evil, evil songs.
  • Сообщений: 3072
  • За регистрацию на форуме не позже декабря 2011 года и не менее 3000 постов За активный вклад в развитие сайта
    • Просмотр профиля
    • Мои линки
Пожалуйста, помогите разобраться.

Цитировать (выделенное)
try_for_parties
----
Открывает попробовать ведомость по каждому участнику по наземным карте.


try_for_agents
----
Открывает попробовать ведомость по каждому агенту по карте битвы.


store_script_param_1
----
Сохраняет значение первого параметра сценарий для назначения на ваш выбор. Если не вернуть его будет равна 0.


store_script_param_2
----
Сохраняет значение первого параметра второй сценарий для назначения на ваш выбор. Если не вернуть его будет равна 0.

Зачем именно эти команды?
Что к чему присваивается?
Это вообще нужно?
Среди этих строк, скорее всего содержится то, ради чегоя полез в модульную систему, но мне решительно не ясно, где и к кому что-то присоединяется, кто такие "посетители".

Ну и действительные/страдательные глаголы выносят мне моск
То ли мама моет раму, то ли рама моет маму  =/

I'll be back
  • Сообщений: 2122
  • За создание технических проектов различного характера
    • Просмотр профиля
(try_for_parties, "переменная"),
действия с использованием переменной
(try_end),

Этот цикл перебирает все партии на карте, записывая номер текущей партии в переменную.
try_for_agents перебирает агентов на сцене по тому-же принципу.

store_script_param служит для получения аргументов при вызове скрипта через операцию call_script.
Т.е. если вызывается скрипт и ему передаются аргументы 1 и 100:
(call_script, "script_name", 1, 100),
в самом скрипте script_name надо прописать
(store_script_param_1, "переменная_1"), #сюда запишут 1
(store_script_param_2, "переменная_2"), #сюда запишут 100
Этим двум переменным и будут присвоены аргументы, передаваемые call_script. Если аргументы через call_script не передаются, они устанавливаются равными 0.

Мундир, кукла, зеленый шарабан, а также опилки, возвращенные минута в минуту конструкторами, подверглись исследованию под электронным микроскопом. Однако ничего, кроме маленькой бирки со словами "Это мы, опилки", найденной в опилках, обнаружено не было.

Текущее настроение: Singing death, death, death, death, devil, devil, evil, evil songs.
  • Сообщений: 3072
  • За регистрацию на форуме не позже декабря 2011 года и не менее 3000 постов За активный вклад в развитие сайта
    • Просмотр профиля
    • Мои линки
Спасибо. А про те штуки что под спойлером. Хотя-бы в общих чертах?

И да, может пока что я не дорылся, или просто тут как-то по другому это работает, но как в модульной системе использовать арифметику, случайные события?

« Последнее редактирование: 28 Сентября, 2009, 20:09 от Amfitrion »
I'll be back
  • Сообщений: 2122
  • За создание технических проектов различного характера
    • Просмотр профиля
(troop_is_hero, юнит),
Истина, если юнит в своем описании имеет флаг tf_hero

hero_can_join
Истина, если в отряде ГГ есть место и 1 свободный стек.

hero_can_join_as_prisoner
Истина, если в отряде ГГ есть место и 1 свободный стек для пленников.

(party_can_join, отряд)
Истина, если в отряде ГГ есть свободные места (слоты и количество) для всех юнитов отряда.

(party_can_join_as_prisoner, отряд)
Истина, если в отряде ГГ есть свободные места для пленников (слоты и количество) для всех юнитов отряда.

(main_party_has_troop, юнит)
Истина, если в отряде ГГ есть такой юнит.

(party_join, отряд)
Объединяет отряд с отрядом ГГ.

(party_join_as_prisoner, отряд)
Объединяет отряд с отрядом ГГ в качестве пленников.

(troop_join, юнит)
В отряд ГГ добавляется 1 юнит, на экран выводится сообщение.

(troop_join_as_prisoner, юнит)
В отряд ГГ добавляется 1 юнит в качестве пленника, на экран выводится сообщение.

(remove_member_from_party, юнит, отряд)
Удаляет 1 юнит из указанного отряда. Выводится сообщение.

remove_regular_prisoners
Убирает всех пленников не-героев. Может не работать, лучше не использовать.

remove_troops_from_companions
Хз.

remove_troops_from_prisoners
Хз.

(heal_party, отряд)
Лечит всех в указанном отряде

(disable_party, отряд)
Убирает отряд с карты. Однако, отряд еще может быть целью для ИИ или скрипта.

(enable_party, отряд)
Включает отряд

(remove_party, отряд)
Удаляет отряд из игры

(add_companion_party, юнит)
Создается новая партия во главе с указанным юнитом

Все, устал...

Арифметика начинается с операции val_add. См. header_operations.
Случайные события...через триггеры и рандом.
Например, каждые 10 сек. запускать триггер, в котором брать случайное число. Если число входит в какие-то рамки, что-то делать.

« Последнее редактирование: 05 Октября, 2009, 05:46 от ConstantA »
Мундир, кукла, зеленый шарабан, а также опилки, возвращенные минута в минуту конструкторами, подверглись исследованию под электронным микроскопом. Однако ничего, кроме маленькой бирки со словами "Это мы, опилки", найденной в опилках, обнаружено не было.

Текущее настроение: Singing death, death, death, death, devil, devil, evil, evil songs.
  • Сообщений: 2740
  • За создание крупных модов и других особо сложных проектов
    • Просмотр профиля
ConstantA большое спасибо арифметика мне очень пригодится :)

  • Ник в M&B: DRZ_Mark7
  • Фракция: Вегиры
  • Сообщений: 2740
  • За создание крупных модов и других особо сложных проектов
    • Просмотр профиля
И кстати о появлении тумана и дождей это тоже по арифметики смотреть надо?

  • Ник в M&B: DRZ_Mark7
  • Фракция: Вегиры
  • Сообщений: 449
    • Просмотр профиля
 Не хочу создавать новую тему, раз уж есть подходящая.
 Вопрос прежде всего к Марку, но вдруг кто еще сталкивался.
 есть кусок кода

 (try_begin),
 (bla-bla-bla),
 (eq....),
 (bla-bla-bla1),
 (gt...),
 (bla-bla-bla2),
 (agent_has_item_eqquped....),
 (bla-bla-bla3),
 (end_try),

Вопрос простой при каких условиях какие куски кода выполняться? Я так понимаю, при истином (eq....), выполнится гарантированно (bla-bla-bla), и (bla-bla-bla1), потом едет проверка на (gt...), если и оно истинно, то выполняется (bla-bla-bla2), и т.д. а весь блок сразу заканчивается если хоть одлна проверка вернула ложь?
 Сорри за нубский вопрос, просто есть подозрение, что оно не так выполняется :(

  • Сообщений: 1705
  • ЗАБАНЕН!
    • Просмотр профиля
GreyB, чтобы все четыре действия (и bla-bla-bla и последующие 3) выполнились, необходимо, чтобы удовлетворялись все 3 условия (и ge, и gt и проверка на наличие экипированной вещи у юнита). Не будет выполняться хотя бы даже одно - ни одно из действий не будет выполнено. И порядок не имеет значения, так что советую сначала записывать все условия, а потом все действия. Если хочешь, чтобы по частям выполнялись - делай еще вложенные try_begin в этот блок.

То есть для примера:
(try_begin),
(eq1....), - общее для всех условие, без него не выполнится ни одно из действий
(try_begin),
   (eq2....), - условие только для действия в этом блоке, то есть для bla-bla-bla1
   (bla-bla-bla1),
(else_try),
   (gt...),
   (bla-bla-bla2),
(else_try),
   (agent_has_item_eqquped....),
   (bla-bla-bla3),
(try_end),
(try_end),

« Последнее редактирование: 17 Мая, 2010, 10:26 от SithLord »
  • Сообщений: 449
    • Просмотр профиля
Если хочешь, чтобы по частям выполнялись - делай еще вложенные try_begin в этот блок.
Т.е. вложенные делать можно? Спасибо :) Вон она где значит собака порылась ;)

  • Сообщений: 1705
  • ЗАБАНЕН!
    • Просмотр профиля
Если хочешь, чтобы по частям выполнялись - делай еще вложенные try_begin в этот блок.
Т.е. вложенные делать можно? Спасибо :) Вон она где значит собака порылась ;)
Только аккуратнее с числом этих блоков будь, проверяй, чтобы все блоки закрывались в нужных местах. А то я 1 раз пропустил всего-лишь 1 try_end и в итоге целый день ломал мозг, в чем же дело и почему в игре нужный мне эффект не выполняется. Модулька компилируется нормально, ошибок нет, проверял сам скрипт - все нормально написано...

  • Сообщений: 449
    • Просмотр профиля
Оффтоп.
TAB - великая вещь, у меня самые ужасные беды с пропущенной запятой бывают.

  • Сообщений: 1705
  • ЗАБАНЕН!
    • Просмотр профиля
Ок.
Сегодня коротко.

При работе с операциями "ветвления" try_begin - else_try - try_end (которые очень похожи на if - else), надо помнить, что
Цитата: Rongar
условие попадания в параллельную ветку else_try определяется не в начале предыдущего блока, а всей историей выполнения этого блока.

Пример:
(assign, reg0, 0), #устанавливаем reg0 = 0
(try_begin),
 (eq, reg0, 0), #да, все верно, reg0 = 0. Начинаем выполнять этот блок.
 Действие 1. #выполняем какие-то действия.
 (assign, reg0, 1), #устанавливаем reg0 = 1
 (eq, reg0, 0), #операция eq возвращает false. reg0 уже не равен 0. Блок откидывается.
(else_try) #блок без условий. Он выполнится, если все блоки выше вернули false. Значит, начинаем выполнять этот блок
 Действие 2. #выполняем какие-то действия.
(try_end), #конец ветвления.

Таким образом, были выполнены как Действие 1, так и Действие 2. Таким поведением модульная система не вписывается в
Цитата: Rongar
парадигму структурного программирования
, где условия выполнения блока проверяются перед его запуском.

Be vigilant!


Хотя из этого следует, что все-таки действия выполняются сразу после проверки условия...
Мда, жаль я эту тему раньше не нашел.

  • Сообщений: 4024
  • За регистрацию на форуме не позже декабря 2011 года и не менее 3000 постов
    • Просмотр профиля
Цитировать (выделенное)
А то я 1 раз пропустил всего-лишь 1 try_end и в итоге целый день ломал мозг, в чем же дело и почему в игре нужный мне эффект не выполняется.
очень полезная штука для проверки правильности написания скрипта это дебаг...
помогает, когда пропустил что-то вроде трай_энда
почему то про это нигде не написано, сам наткнулся случайно, когда похожая ситуация получилась - вроде нормальный скрипт, модулька его собирает без ошибок, а на выходе ахинея.
Включается так:
1) в оконном режиме в игре нажать View>>>Set Debug Mode Folder и в выскочившем окошке указать путь к папке с модульной системой
2) нажать View>>>Debug Mode Window? в появившемся окошке выбрать из выпадающего списка нужный скрипт и нажать на кнопочку Debug
3) в момент выполнения скрипта игра остановится и скрипт не будет выполняться пока не нажмешь клавишу "1", при нажатии на единичку выполняется вторая строка скрипта, третья ... и так далее. В общем достаточно удобно, можно посмотреть как оно все происходит :)
Правда при выборе в дебаговом окошке конкретного скрипта грузится он довольно долго, я сначала даже думал, что эта возможность в игре не работает.
Проверял таким образом какие команды из хедер_операйшенз как себя ведут и для чего предназначены
Наверняка все, кому надо, об этом уже знают, но может кому нибудь и пригодится... написал потому, что мне в начале моего пути копания в модульке очень не хватало этой инфы :)

Цитировать (выделенное)
Хотя из этого следует, что все-таки действия выполняются сразу после проверки условия
точно, и в дебаге это видно сразу и наглядно

  • Сообщений: 449
    • Просмотр профиля
Цитировать (выделенное)
Хотя из этого следует, что все-таки действия выполняются сразу после проверки условия...
То-то и оно, что мне кажется, что ты все-таки прав... вернусь домой - проверю.
shturmfogel, спасибо :) я вот не знал

  • Сообщений: 1705
  • ЗАБАНЕН!
    • Просмотр профиля
Об отладчике не знал. Спасибо за информацию.

  • Сообщений: 2740
  • За создание крупных модов и других особо сложных проектов
    • Просмотр профиля
GreyB, Извини я опоздал, тебе уже ответили :)

Добавлено: 18 Мая, 2010, 00:10
GreyB Кстати если хочешь сделать новый пункт на карте то тебе надо будет прописывать (в скриптах), проверку на пункт который ты будешь использовать:

(try_begin),
(party_slot_eq, "$g_encountered_party", slot_party_type, spt_town),
(jump_to_menu, "mnu_castle_outside"),
(else_try),
(party_slot_eq, "$g_encountered_party", slot_party_type, spt_castle),
(jump_to_menu, "mnu_castle_outside"),           
(neq, "$g_encountered_party", "p_fort"),

И далее прописать сам пункт:

(else_try),
 (eq, "$g_encountered_party", "p_fort"),
  (jump_to_menu, "mnu_fort"),
  (else_try),

Без проверки  на пункт (В этом случие "fort") будет просто появляться меню замка.
Ясно то что Меню надо будет создать для этого пункта,прописать его в партиес, и сцену(если она будет конешно). :)

« Последнее редактирование: 18 Мая, 2010, 00:10 от Mark7 »
  • Ник в M&B: DRZ_Mark7
  • Фракция: Вегиры
  • Сообщений: 449
    • Просмотр профиля
 Спасибо, Марк. Буду знать

  • Сообщений: 449
    • Просмотр профиля
 Вот еще вопрос :)
 Кто-нибудь знает как можно узнать бежит сейчас юнит (агент) или нет? Для ГГ просто - проверяем состояние кнопок, а как для неписей?
 Функций на проверкусостояния атаки\защиты уйма, а вот как проверить состояние движения?


СиЧЪ Total War СиЧЪ Total War
Сайт "Всадники Кальрадии" не является СМИ. Администрация не несет ответственность за высказывания и публикацию каких-либо материалов, сделанные любыми пользователями форума, в том числе посредством личных и публичных сообщений. Материалы, размещенные на ресурсе третьими лицами, могут содержать информацию, не предназначенную для лиц, не достигнувших совершеннолетия. При обнаружении на ресурсе материалов, нарушающих законодательство Российской Федерации, необходимо обращаться к администрации.
Сайт работает на быстром VPS/VDS хостинге от FASTVPS


Powered by SMF 2.0 | SMF © Simple Machines LLC