Голосование

Как вы оцениваете Смуту?












Оформление



Пользователей
  • Всего: 28871
  • Последний: 123WwW2004
Сейчас на форуме
Пользователи: 4
Гостей: 272
Всего: 276

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

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

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

Частые перебежчики сильно портят все впечатление от игры, перебегают нереально часто! Пожалуйста посоветуйте-научите как это исправить через МС.
Когда качнет земную твердь
Сраженья торжество,
То каждый сможет выбрать смерть,
Достойную его.
  • Сообщений: 1027
  • За создание технических проектов различного характера
    • Просмотр профиля
    • WarHammer Fantasy Mod для WarBand.
0
« Ответ #478 : 25 Августа, 2012, 09:04 »
Arantir, дело в том, что мне нужно что бы этот триггер проверялся постоянно, а не только на спауне агента. А ti_on_agent_spawn только так и работает, верно? Или я неправильно знаю?

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

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

будет ругаться на неверного (несуществующего) агента ":other", да так, что безвозвратно (буквально) загадит чат первому подключившемуся к серверу игроку. Не катастрофа, конечно, учитывая что после спауна никаких проблем не будет, однако...
  • Сообщений: 2562
  • За регистрацию на форуме не позже декабря 2016 года и не менее 2500 постов
    • Просмотр профиля
    • Портфолио
0
« Ответ #479 : 25 Августа, 2012, 09:16 »
если проблема только в загаживании, то можно попробывать отключить сообщения. не знаю правда в мульте будет работать, в сингле работает -
(set_show_messages, <value>), #0 disables window messages 1 re-enables them.
До спауна первого игрока
  • Сообщений: 317
    • Просмотр профиля
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, и ничего более.
  • Сообщений: 3008
  • За регистрацию на форуме не позже декабря 2011 года и не менее 3000 постов
    • Просмотр профиля
0
« Ответ #481 : 25 Августа, 2012, 19:53 »

Третья цифра - через какое время проверяется этот триггер, если он сработал. ti_once фактически означает "больше не проверять".
  • Сообщений: 317
    • Просмотр профиля
0
« Ответ #482 : 25 Августа, 2012, 20:02 »
Третья цифра - через какое время проверяется этот триггер, если он сработал. ti_once фактически означает "больше не проверять".
В другой интерпретации ti_once означает "запустить через ∞ сек.", т.е. никогда. Ну это если сводить все к одной основе (временному интервалу).
Багов в чужих скриптах не исправляю! Скриптов по просьбе не пишу и на заказ не делаю! Я всего лишь любитель поиграть в M&B, и ничего более.
  • Сообщений: 2562
  • За регистрацию на форуме не позже декабря 2016 года и не менее 2500 постов
    • Просмотр профиля
    • Портфолио
0
« Ответ #483 : 25 Августа, 2012, 20:03 »
Цитировать (выделенное)
Третья цифра - через какое время проверяется этот триггер, если он сработал. ti_once фактически означает "больше не проверять".
согласен...
  • Сообщений: 870
    • Просмотр профиля
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
  • Сообщений: 252
    • Просмотр профиля
0
« Ответ #485 : 26 Августа, 2012, 13:55 »
Спасибо за подробный разбор триггера! :thumbup:
  • Сообщений: 1027
  • За создание технических проектов различного характера
    • Просмотр профиля
    • WarHammer Fantasy Mod для WarBand.
0
« Ответ #486 : 28 Августа, 2012, 08:50 »
Всем спасибо за помощь, вроде бы вариант с отключением-включением чата работает.
  • Сообщений: 449
    • Просмотр профиля
0
« Ответ #487 : 27 Сентября, 2012, 12:57 »
Доброго времени суток!

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

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

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

Если у кого-то еще под рукой окажутся наглядные примеры использования, буду благодарен до конца дней своих.
  • Сообщений: 7578
  • За наиболее важные для развития сайта идеи За особо выдающиеся авторские тексты За регистрацию на форуме не позже декабря 2011 года и не менее 3000 постов И создали они сайт... Призер конкурса Футболка по версии Всадников
    • Просмотр профиля
+1
« Ответ #488 : 27 Сентября, 2012, 13:02 »
Пояснение понятия Слот.

(автор Dargor, )

Моя конфигурация:
Нормальная, мне хватает.
  • Сообщений: 449
    • Просмотр профиля
0
« Ответ #489 : 27 Сентября, 2012, 13:09 »
Спасибо огромное! Все понятно и по полочкам. Еще небольшой вопрос.
Можно ли в слот писать не число, а например, позицию, которая, если я правильно понимаю, по сути набор из 6-и чисел.
  • Сообщений: 870
    • Просмотр профиля
0
« Ответ #490 : 27 Сентября, 2012, 18:57 »
Можно записать айди позиции, но это не лучший вариант, так как другие скрипты могут изменить данные которые хранит позиция. Лучше сохранять нужные данные позиции в отдельные слота, это избавит от потенциальных багов.
  • Сообщений: 3508
  • За создание крупных модов и других особо сложных проектов За активную деятельность, связанную с публикациями и помощью другим посетителям За регистрацию на форуме не позже декабря 2011 года и не менее 3000 постов
    • Просмотр профиля
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 »
  • Сообщений: 449
    • Просмотр профиля
0
« Ответ #492 : 28 Сентября, 2012, 00:43 »
Ну мне только трех координат хватит :) Спасибо большое!
  • Сообщений: 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, срабатывал мой диалог?
  • Фракция: Свады
  • Сообщений: 3508
  • За создание крупных модов и других особо сложных проектов За активную деятельность, связанную с публикациями и помощью другим посетителям За регистрацию на форуме не позже декабря 2011 года и не менее 3000 постов
    • Просмотр профиля
0
« Ответ #494 : 27 Октября, 2012, 12:14 »
Куда добавлен диалог? В начало, конец, середину?
Срабатывает первый подходящий.
Возможно в этом проблема.
  • Сообщений: 43
    • Просмотр профиля
0
« Ответ #495 : 27 Октября, 2012, 12:18 »
Rongar, в самый конец
 

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

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

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

О! Теперь диалог выыводится, воин добавляется, но после всего этого меня бросает в бой с этой партией. =(
« Последнее редактирование: 27 Октября, 2012, 12:30 от Saturn35 »
  • Фракция: Свады
  • Сообщений: 3508
  • За создание крупных модов и других особо сложных проектов За активную деятельность, связанную с публикациями и помощью другим посетителям За регистрацию на форуме не позже декабря 2011 года и не менее 3000 постов
    • Просмотр профиля
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 »
  • Сообщений: 43
    • Просмотр профиля
0
« Ответ #497 : 27 Октября, 2012, 13:17 »
Rongar, А что это за переменная
$g_leave_encounter ?
  • Фракция: Свады
  • Сообщений: 3508
  • За создание крупных модов и других особо сложных проектов За активную деятельность, связанную с публикациями и помощью другим посетителям За регистрацию на форуме не позже декабря 2011 года и не менее 3000 постов
    • Просмотр профиля
0
« Ответ #498 : 27 Октября, 2012, 13:53 »
Эта переменная инициализируется то ли в скриптах, когда начинается встреча с другой партией, то ли в game_menu. И потом в game_menu проверяется значение.
  • Сообщений: 43
    • Просмотр профиля
0
« Ответ #499 : 28 Октября, 2012, 12:11 »
А можно ли найти где-нибудь чистую модульку (Без фракций, воинов, диалогов и т.д., только с основными триггерами и скриптами) ?
  • Фракция: Свады

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


Powered by SMF 2.0 | SMF © Simple Machines LLC