Теги:

Автор Тема: Модульная система. Вопросы и ответы.  (Прочитано 274877 раз)

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

проверь.

0
Ответ #476 : 25 Августа, 2012, 02:35
Проверил. Поставил число 5.
Замер одного выполнения: 5.05 секунд
Замер 5 последовательных выполнений: 25,13 секунд.
С учетом человеческого фактора вполне можно сказать, что 5 - это 5 секунд.
Погрешность вычислений составила 2,4% =)
« Последнее редактирование: 25 Августа, 2012, 02:40 от Arantir »
Багов в чужих скриптах не исправляю! Скриптов по просьбе не пишу и на заказ не делаю! Я всего лишь любитель поиграть в M&B, и ничего более.

Люди, помогите! Кто нибудь пробовал уменьшить частоту перехода лордов от короля к королю?

Частые перебежчики сильно портят все впечатление от игры, перебегают нереально часто! Пожалуйста посоветуйте-научите как это исправить через МС.
Когда качнет земную твердь
Сраженья торжество,
То каждый сможет выбрать смерть,
Достойную его.

Arantir, дело в том, что мне нужно что бы этот триггер проверялся постоянно, а не только на спауне агента. А ti_on_agent_spawn только так и работает, верно? Или я неправильно знаю?

Легионер, не помогло. Дело в том, что при запуске карты игроков на ней нет. Скрипт же всё равно берёт несуществующее количество игроков, ищет там активных а потом уже смотрит, есть ли у них в руках определённый предмет. Так как агентов-то и нет как таковых до спауна, то эта строка:

(agent_get_wielded_item,":atm",":other",0),

будет ругаться на неверного (несуществующего) агента ":other", да так, что безвозвратно (буквально) загадит чат первому подключившемуся к серверу игроку. Не катастрофа, конечно, учитывая что после спауна никаких проблем не будет, однако...

если проблема только в загаживании, то можно попробывать отключить сообщения. не знаю правда в мульте будет работать, в сингле работает -
(set_show_messages, <value>), #0 disables window messages 1 re-enables them.
До спауна первого игрока

0
Ответ #480 : 25 Августа, 2012, 11:18
Андреус Ас, твой триггер и так по идее выполняется постоянно, раз за разом.
Ошибка скорее логическая:
Цитировать (выделенное)
(0, 0, 0, [
       (get_max_players, ":num_players"),                   
       (try_for_range, ":player", 0, ":num_players"),
       (ge, ":player", 1),
       (player_is_active, ":player"),
       (player_get_agent_id, ":other", ":player"),
       (agent_get_wielded_item,":atm",":other",0),

Ты делаешь так, как будто ":player" - это уже некий объект, представляющий игрока. но это не так. Это всего лишь переменная, инкрементируемая циклом. В данном случае поочередно принимающая значения 0, 1, 2, ..., ":num_players". Строка "(ge, ":player", 1)" как бы бессмысленна.
В данном случае ":player" - это некий ID игрока из списка игроков. Чтобы проверить, есть ли действительно агент с таким ID, нужно попробовать у этого агента извлечь какое-то значение и проверить его на корректность.
Например, "(player_get_agent_id, ":other", ":player")". Если с ID равным ":player" нету ни одного агента, то, скорее всего, в ":other" попадет значение -1.
Соответственно надо сделать как-то так:
Цитировать (выделенное)
(0, 0, 0, [
       (get_max_players, ":num_players"),                   
       (try_for_range, ":player", 0, ":num_players"),
         (player_is_active, ":player"),
         (player_get_agent_id, ":other", ":player"),
         (ge, ":other", 0), # Агент существует
         (agent_get_wielded_item,":atm",":other",0),

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

Можно, например, вот так:
Цитировать (выделенное)
(ti_on_agent_spawn, 0, 0, [],
  [
    (store_trigger_param_1, ":agent_no"),
    (agent_set_slot, ":agent_no", 999, 1), # set as spawned
  ]),
(0, 0, 0, [
       (get_max_players, ":num_players"),                   
       (try_for_range, ":player", 0, ":num_players"),
         (player_is_active, ":player"),
         (player_get_agent_id, ":other", ":player"),
         (agent_get_slot, ":spawned", ":player", 999),
         (gt, ":spawned", 0),

         (agent_get_wielded_item,":atm",":other",0),
         ...
« Последнее редактирование: 25 Августа, 2012, 11:31 от Arantir »
Багов в чужих скриптах не исправляю! Скриптов по просьбе не пишу и на заказ не делаю! Я всего лишь любитель поиграть в M&B, и ничего более.

0
Ответ #481 : 25 Августа, 2012, 19:53

Третья цифра - через какое время проверяется этот триггер, если он сработал. ti_once фактически означает "больше не проверять".

0
Ответ #482 : 25 Августа, 2012, 20:02
Третья цифра - через какое время проверяется этот триггер, если он сработал. ti_once фактически означает "больше не проверять".
В другой интерпретации ti_once означает "запустить через ∞ сек.", т.е. никогда. Ну это если сводить все к одной основе (временному интервалу).
Багов в чужих скриптах не исправляю! Скриптов по просьбе не пишу и на заказ не делаю! Я всего лишь любитель поиграть в M&B, и ничего более.

Цитировать (выделенное)
Третья цифра - через какое время проверяется этот триггер, если он сработал. ti_once фактически означает "больше не проверять".
согласен...

0
Ответ #484 : 25 Августа, 2012, 20:44
Ну вас и занесло с этим скриптом :)
Достаточно тупо поставить перед циклом проверку на то что есть один или больше игроков.
Кроме того есть смысл проверять существует ли агент у игрока.
(0, 0, 0, [
       (get_max_players, ":num_players"),                   
       (ge, ":num_players", 1),
       (try_for_range, ":player", 0, ":num_players"),
       (player_is_active, ":player"),
       (player_get_agent_id, ":other", ":player"),
       (ge ":other", 0),
       (agent_get_wielded_item,":atm",":other",0),
Чисто для информации. Комментарий самих разработчиков по поводу времени срабатывания триггера:
Цитировать (выделенное)
(1, 0, 0, [], #do this in every new frame, but not at the same time

0
Ответ #485 : 26 Августа, 2012, 13:55
Спасибо за подробный разбор триггера! :thumbup:

Всем спасибо за помощь, вроде бы вариант с отключением-включением чата работает.

0
Ответ #487 : 27 Сентября, 2012, 12:57
Доброго времени суток!

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

1. Как они объявляются, как используются, как уничтожаются (если уничтожаются вообще)?
2. Какой у них срок жизни и область видимости?

Например: можно ли привязать к агенту слот, задать ему значение в триггере, прописанном в module_items.py, а затем уже в module_missions_templates.py проверять значение этого слота? Или можно ли привязать слот к трупсу, задавать его в одной миссии, а проверять в другой?

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

+1
Ответ #488 : 27 Сентября, 2012, 13:02
Пояснение понятия Слот.

(автор Dargor, )

Моя конфигурация:
Нормальная, мне хватает.

0
Ответ #489 : 27 Сентября, 2012, 13:09
Спасибо огромное! Все понятно и по полочкам. Еще небольшой вопрос.
Можно ли в слот писать не число, а например, позицию, которая, если я правильно понимаю, по сути набор из 6-и чисел.

0
Ответ #490 : 27 Сентября, 2012, 18:57
Можно записать айди позиции, но это не лучший вариант, так как другие скрипты могут изменить данные которые хранит позиция. Лучше сохранять нужные данные позиции в отдельные слота, это избавит от потенциальных багов.

0
Ответ #491 : 27 Сентября, 2012, 21:55
Спасибо огромное! Все понятно и по полочкам. Еще небольшой вопрос.
Можно ли в слот писать не число, а например, позицию, которая, если я правильно понимаю, по сути набор из 6-и чисел.
По идее не 6, а 9, там ещё масштабирование есть.
Вытащить все нужные компоненты в fixedpoint (position_get_*, position_get_scale_* , position_get_rotation_around_* ) и записать в слоты.
Более простого способа не знаю.

PS у позиции есть ещё origin, т.е. ещё 3 компоненты, вроде как.
« Последнее редактирование: 27 Сентября, 2012, 22:12 от Rongar »

0
Ответ #492 : 28 Сентября, 2012, 00:43
Ну мне только трех координат хватит :) Спасибо большое!

0
Ответ #493 : 27 Октября, 2012, 12:11
Доброго времени суток! У меня вопрос по модульке, а именно по диалогам. Третий день с ними мучаюсь, а толку никакого.

module_dialogs.py (З.Ы.: на текст диалогов не смотрите, я плохо знаю английский.)
  [trp_dhara_soldiers,"start",[],"Hello. Did you need troops?","dhara_soldiers_talk",[]],
  [anyone|plyr,"dhara_soldiers_talk",[],"Yes, I need","dhara_soldiers_yes",[]],
  [anyone|plyr,"dhara_soldiers_talk",[],"No, thank`s","dhara_soldiers_no",[]],
  [anyone,"dhara_soldiers_yes",[],"We very surprised. Ok. We attach to your group","close_window",[
  (troop_join,"trp_dhara_soldiers")]],
  [anyone,"dhara_soldiers_no",[],"Ok. We wait you.","close_window",[]],
module_parties.py
("dhara_soldiers","SOLDIERS",icon_vaegir_knight|pf_limit_members, no_menu, pt_none,fac_neutral,0,ai_bhvr_hold,0,(19, 53),[(trp_dhara_soldiers,54,0)]),
На карте появляются, всё норм, но диалог не срабатывает (точнее срабатывает, но не мой). Срабатывает вот этот:
Цитировать (выделенное)
Чего вы хотиите?
-Сдавайся или умри!
-Ничего. Мы оставим вас в покое.

Подскажите, что нужно сделать чтобы при встрече на карте партии dhara_soldiers, срабатывал мой диалог?

0
Ответ #494 : 27 Октября, 2012, 12:14
Куда добавлен диалог? В начало, конец, середину?
Срабатывает первый подходящий.
Возможно в этом проблема.

0
Ответ #495 : 27 Октября, 2012, 12:18
Rongar, в самый конец
 

Добавлено: 27 Октября, 2012, 12:19

Rongar, а куда лучше всего новые диалоги добавлять?
 

Добавлено: 27 Октября, 2012, 12:30

О! Теперь диалог выыводится, воин добавляется, но после всего этого меня бросает в бой с этой партией. =(
« Последнее редактирование: 27 Октября, 2012, 12:30 от Saturn35 »

0
Ответ #496 : 27 Октября, 2012, 12:53
а куда лучше всего новые диалоги добавлять?
Спроси что-нибудь по-проще. Там в модулке такое рубилово, что ничего конкретного посоветовать невозможно. Правильно может добавлять диалоги только человек, который наизусть знает их всех.

О! Теперь диалог выыводится, воин добавляется, но после всего этого меня бросает в бой с этой партией. =(
Это проблемы того, как это всё работает.
Нужно добавить
(assign, "$g_leave_encounter",1)

[anyone,"dhara_soldiers_yes",[],"We very surprised. Ok. We attach to your group","close_window",[
  (troop_join,"trp_dhara_soldiers"), (assign, "$g_leave_encounter",1)]],

 [anyone,"dhara_soldiers_no",[],"Ok. We wait you.","close_window",[(assign, "$g_leave_encounter",1)]],
« Последнее редактирование: 27 Октября, 2012, 13:52 от Rongar »

0
Ответ #497 : 27 Октября, 2012, 13:17
Rongar, А что это за переменная
$g_leave_encounter ?

0
Ответ #498 : 27 Октября, 2012, 13:53
Эта переменная инициализируется то ли в скриптах, когда начинается встреча с другой партией, то ли в game_menu. И потом в game_menu проверяется значение.

0
Ответ #499 : 28 Октября, 2012, 12:11
А можно ли найти где-нибудь чистую модульку (Без фракций, воинов, диалогов и т.д., только с основными триггерами и скриптами) ?

Теги: