Как создать зоны которые будут активироваться в зависимости от времени

Deazer

Head Developer
Staff member
Путь: gameserver\data\zone
Формат: XML, CronTab

И так начнем что же это такое! Данная система предназначена для реализации множества идей при реализации внутриигровых событий. Как пример в определенное время включается зона с флагом pvp или любым другим и спаунить мобов в этой зоне или же просто активировать зону. Так же как пример будет приведена более сложный ивент - отключить мирные зоны в Глудио и включение ПвП зон и заселение ее мобами на период активности данной зоны и делать при этом анонс запуска зоны и ее коллапсе. Простыми словами - активируем зону, спауним мобов по таймеру крона и так же с его помощью деактивировать зоны и спаун.

И так поехали с самого простого варианта:
В данном варианте мы активируем зону пвп зону баюма в 19:00 и выключаем ее в 20:00 при этом внутри зоны мы делаем спаун [cron_spawn] группы из data/spawn, так же делаем анонс о включении зоны и ее отключении. Теперь рассматриваем детально:
name="[baium_epic_fun]" - сама зона с которой мы работаем. ВАЖНО* имена зон не должны совпадать!
<set name="enabled" val="false" /> - в нашем примере зона выключена по умолчанию и включиться только по таймеру.
<set name="cronZoneEnablePattern" val="0 19 * * *" /> - параметр отвечает за активацию зоны в нужное нам время. Формат CronTab - как составить его https://crontab.guru/
<set name="cronZoneDisablePattern" val="0 20 * * *" /> - параметр отвечает за деактивацию зоны в нужное нам время. Формат CronTab - как составить его https://crontab.guru/
<set name="cronZoneEnableBroadcastSpawnEvent" val="[cron_spawn]" /> - Спаун лист который будет активирован при включении зоны event_name="[cron_spawn]" или любое другое название
<set name="cronZoneDisableBroadcastDespawnEvent" val="[cron_spawn]" /> - Спаун лист который будет деактивирован при включении зоны event_name="[cron_spawn]" или любое другое название
<set name="cronZoneEnableAnnounceCustomMessage" val="voicedcommandhandlers.Debug.Enabled" /> - Анонс который будет происходить при активации. Находиться в data/strings
<set name="cronZoneDisableAnnounceCustomMessage" val="voicedcommandhandlers.Debug.Disabled" /> - Анонс который будет происходить при деактивации. Находиться в data/strings
ВАЖНО* Та же не обязательно в зоне использовать все параметры, допустим вы не указываете анонс - его не будет. Допустим вы не указываете спаун в зоне - его не будет. Не обязательно это указывать, обязательными являются или cronZoneEnablePattern или cronZoneDisablePattern

XML:
    <zone name="[baium_epic_fun]" type="fun" >
        <set name="enabled" val="false" />
        <set name="cronZoneEnablePattern" val="0 19 * * *" />
        <set name="cronZoneDisablePattern" val="0 20 * * *" />
        <set name="cronZoneEnableBroadcastSpawnEvent" val="[cron_spawn]" />
        <set name="cronZoneDisableBroadcastDespawnEvent" val="[cron_spawn]" />
        <set name="cronZoneEnableAnnounceCustomMessage" val="voicedcommandhandlers.Debug.Enabled" />
        <set name="cronZoneDisableAnnounceCustomMessage" val="voicedcommandhandlers.Debug.Disabled" />
        <polygon>
            <coords loc="116616 17576 10032 10232" />
            <coords loc="117064 16552 10032 10232" />
            <coords loc="117032 15592 10032 10232" />
            <coords loc="116664 14632 10032 10232" />
            <coords loc="116024 14008 10032 10232" />
            <coords loc="115128 13640 10032 10232" />
            <coords loc="114136 13624 10032 10232" />
            <coords loc="113256 13992 10032 10232" />
            <coords loc="112568 14664 10032 10232" />
            <coords loc="112216 15592 10032 10232" />
            <coords loc="112216 16552 10032 10232" />
            <coords loc="112600 17432 10032 10232" />
            <coords loc="113288 18120 10032 10232" />
            <coords loc="114152 18472 10032 10232" />
            <coords loc="115144 18488 10032 10232" />
            <coords loc="116152 18024 10032 10232" />
        </polygon>
    </zone>

Сам пример спауна:

XML:
<spawn name="[custom_spawn]" event_name="[cron_spawn]">
    <npc id="20001" count="1" respawn="60" pos="114856 16616 10080 38521" />
    <npc id="20001" count="1" respawn="60" pos="114636 16443 10080 40014" />
    <npc id="20001" count="1" respawn="60" pos="114504 16168 10080 46038" />
    <npc id="20001" count="1" respawn="60" pos="114520 16040 10080 50449" />
    <npc id="20001" count="1" respawn="60" pos="114616 15944 10080 3355" />
    <npc id="20001" count="1" respawn="60" pos="114877 16012 10080 1875" />
    <npc id="20001" count="1" respawn="60" pos="115024 16105 10080 7805" />
    <npc id="20001" count="1" respawn="60" pos="115278 16421 10080 5636" />
    <npc id="20001" count="1" respawn="60" pos="115416 16200 10080 46871" />
    <npc id="20001" count="1" respawn="60" pos="115328 16074 10080 40959" />
</spawn>


2) Теперь рассматриваем более сложный вариант, пристегните ремни. Мы делаем полную деактивацию мирных зон в городе Глудио, делаем ее ПвП зоной, деспауним мирных НПЦ и спауним Мобов. Потом включаем мирную зону, отключаем мобов и спауним мирных НПЦ.
И все это будет начинаться в 16:00 и заканчиваться в 16:30.

В городе Глудио есть 2 зоны которые расчерчивают ее [guldiocastle_town_peace1] и [guldiocastle_town_peace2] и так мы их отключаем на период нашего ивента и выключаем по истечению
<set name="cronZoneDisablePattern" val="0 16 * * *" /> - выключаем мирную зоны [guldiocastle_town_peace1] и [guldiocastle_town_peace2]
<set name="cronZoneEnablePattern" val="31 16 * * *" /> - включаем мирную зоны [guldiocastle_town_peace1] и [guldiocastle_town_peace2]
Деспауним всех мирных НПЦ - и тут начинаются пируэты, нам необходимо собрать всех мирных НПЦ в одну группу и назначим ей в спауне event_name="[gludio_peace_npc]"
По окончанию анонсируем о том что ивент закончился - в data/strings добавляем строку zone_gludio_pvp.Disable=Город Глудо стал мирным!

Пример:
XML:
<zone name="[guldiocastle_town_peace1]" type="peace_zone" >
        <set name="cronZoneDisablePattern" val="0 16 * * *" />
        <set name="cronZoneEnablePattern" val="31 16 * * *" />
        <set name="cronZoneDisableBroadcastDespawnEvent" val="[gludio_peace_npc]" />
        <set name="cronZoneDisableAnnounceCustomMessage" val="zone_gludio_pvp.Disable" />
        <polygon>
            <coords loc="-11998 123905 -3245 -2745" />
            <coords loc="-12880 126192 -3245 -2745" />
            <coords loc="-13928 126485 -3245 -2745" />
            <coords loc="-14408 126484 -3245 -2745" />
            <coords loc="-15239 126174 -3245 -2745" />
            <coords loc="-16120 125367 -3245 -2745" />
            <coords loc="-16551 124468 -3245 -2745" />
            <coords loc="-16550 123911 -3245 -2745" />
            <coords loc="-16509 123323 -3245 -2745" />
            <coords loc="-14638 122381 -3245 -2745" />
            <coords loc="-12022 122270 -3245 -2745" />
        </polygon>
    </zone>
    <zone name="[guldiocastle_town_peace2]" type="peace_zone" >
        <set name="cronZoneDisablePattern" val="0 16 * * *" />
        <set name="cronZoneEnablePattern" val="30 16 * * *" />
        <polygon>
            <coords loc="-14956 121115 -3156 -2656" />
            <coords loc="-12670 121093 -3156 -2656" />
            <coords loc="-12021 121755 -3156 -2656" />
            <coords loc="-12019 123005 -3156 -2656" />
            <coords loc="-15400 123009 -3156 -2656" />
        </polygon>
    </zone>

Теперь нам нужно активировать ПвП зону вместо выключенных мирных зон:
<set name="cronZoneEnablePattern" val="1 16 * * *" /> - включаем пвп зоны [guldiocastle_town_pvp1] и [guldiocastle_town_pvp2]
<set name="cronZoneEnablePattern" val="31 16 * * *" /> - включаем мирную зоны [guldiocastle_town_pvp1] и [guldiocastle_town_pvp2]
Спауним всех мобов - создаем свою группу с мобами спауне event_name="[gludio_pvp_mobs]"
Аннонсируем о том что ивент начался - в data/strings добавляем строку zone_gludio_pvp.Enable=Город Глудо стал не безопасным! Сразитесь с монстрами и игроками за награду

XML:
<zone name="[guldiocastle_town_pvp1]" type="battle_zone" >
        <set name="cronZoneEnablePattern" val="1 16 * * *" />
        <set name="cronZoneDisablePattern" val="30 16 * * *" />
        <set name="cronZoneEnableBroadcastSpawnEvent" val="[gludio_pvp_mobs]" />
        <set name="cronZoneEnableAnnounceCustomMessage" val="zone_gludio_pvp.Enable" />
        <polygon>
            <coords loc="-11998 123905 -3245 -2745" />
            <coords loc="-12880 126192 -3245 -2745" />
            <coords loc="-13928 126485 -3245 -2745" />
            <coords loc="-14408 126484 -3245 -2745" />
            <coords loc="-15239 126174 -3245 -2745" />
            <coords loc="-16120 125367 -3245 -2745" />
            <coords loc="-16551 124468 -3245 -2745" />
            <coords loc="-16550 123911 -3245 -2745" />
            <coords loc="-16509 123323 -3245 -2745" />
            <coords loc="-14638 122381 -3245 -2745" />
            <coords loc="-12022 122270 -3245 -2745" />
        </polygon>
    </zone>
    <zone name="[guldiocastle_town_pvp2]" type="battle_zone" >
        <set name="cronZoneEnablePattern" val="1 16 * * *" />
        <set name="cronZoneDisablePattern" val="30 16 * * *" />
        <polygon>
            <coords loc="-14956 121115 -3156 -2656" />
            <coords loc="-12670 121093 -3156 -2656" />
            <coords loc="-12021 121755 -3156 -2656" />
            <coords loc="-12019 123005 -3156 -2656" />
            <coords loc="-15400 123009 -3156 -2656" />
        </polygon>
    </zone>


Теперь весь набор параметров:

"cronZoneEnablePattern" - когда будет включена зона по крону. Пример <set name="cronZoneEnablePattern" val="0 18 * * *" />
"cronZoneEnableBroadcastSpawnEvent" - какой ивент спаунить при активации <set name="cronZoneEnableBroadcastSpawnEvent" val="[gludio_peace_npc]" />
"cronZoneEnableBroadcastDespawnEvent" - какой ивент деспаунить при активации <set name="cronZoneEnableBroadcastSpawnEvent" val="[gludio_pvp_mobs]" />
"cronZoneEnableAnnounceCustomMessage" - что мы анонсируем при включении зоны <set name="cronZoneEnableAnnounceCustomMessage" val="zone_gludio_pvp.Enable" />

"cronZoneDisablePattern" - когда будет выключена зона по крону. Пример <set name="cronZoneEnablePattern" val="0 19 * * *" />
"cronZoneDisableBroadcastSpawnEvent" - какой ивент деспаунить при отключении зоны <set name="cronZoneEnableBroadcastSpawnEvent" val="[gludio_peace_npc]" />
"cronZoneDisableBroadcastDespawnEvent"" - какой ивент деспаунить отключении зоны <set name="cronZoneEnableBroadcastSpawnEvent" val="[gludio_pvp_mobs]" />
"cronZoneDisableAnnounceCustomMessage" " - что мы анонсируем отключении зоны <set name="cronZoneEnableAnnounceCustomMessage" val="zone_gludio_pvp.Disable" />

Вся система ограничена только лишь вашей фантазии, при помощи данного инструмента вы можете делать любые игровые ивенты, активировать зоны и спаун, ротировать зоны по своему и все что вам прийдет на ум.
 
Last edited:
Деспауним всех мирных НПЦ - и тут начинаются пируэты, нам необходимо собрать всех мирных НПЦ в одну группу и назначим ей в спауне event_name="[gludio_peace_npc]"

Можете пожалуйста чуть подробнее написать, не совсем ясно как это сделать.
 
Обедняешь их спаун в 1 блок, к примеру и скедулишь их кроном на деспаун и спаун

<spawn name="[event_custom_spawn]" event_name="[my_peace_npc]">
<npc id="31863" count="1" respawn="60" pos="81921 148921 -3467 16384"/>
<npc id="31863" count="1" respawn="60" pos="146405 28360 -2269 49648"/>
<npc id="31863" count="1" respawn="60" pos="19319 144919 -3103 31135"/>
<npc id="31863" count="1" respawn="60" pos="-82805 149890 -3129 16384"/>
<npc id="31863" count="1" respawn="60" pos="-12347 122549 -3104 16384"/>
<npc id="31863" count="1" respawn="60" pos="110642 220165 -3655 61898"/>
<npc id="31863" count="1" respawn="60" pos="116619 75463 -2721 20881"/>
<npc id="31863" count="1" respawn="60" pos="85513 16014 -3668 23681"/>
<npc id="31863" count="1" respawn="60" pos="81999 53793 -1496 61621"/>
<npc id="31863" count="1" respawn="60" pos="148159 -55484 -2734 44315"/>
<npc id="31863" count="1" respawn="60" pos="44185 -48502 -797 27479"/>
<npc id="31863" count="1" respawn="60" pos="86899 -143229 -1293 8192"/>
</spawn>
 
Обедняешь их спаун в 1 блок, к примеру и скедулишь их кроном на деспаун и спаун

<spawn name="[event_custom_spawn]" event_name="[my_peace_npc]">
<npc id="31863" count="1" respawn="60" pos="81921 148921 -3467 16384"/>
<npc id="31863" count="1" respawn="60" pos="146405 28360 -2269 49648"/>
<npc id="31863" count="1" respawn="60" pos="19319 144919 -3103 31135"/>
<npc id="31863" count="1" respawn="60" pos="-82805 149890 -3129 16384"/>
<npc id="31863" count="1" respawn="60" pos="-12347 122549 -3104 16384"/>
<npc id="31863" count="1" respawn="60" pos="110642 220165 -3655 61898"/>
<npc id="31863" count="1" respawn="60" pos="116619 75463 -2721 20881"/>
<npc id="31863" count="1" respawn="60" pos="85513 16014 -3668 23681"/>
<npc id="31863" count="1" respawn="60" pos="81999 53793 -1496 61621"/>
<npc id="31863" count="1" respawn="60" pos="148159 -55484 -2734 44315"/>
<npc id="31863" count="1" respawn="60" pos="44185 -48502 -797 27479"/>
<npc id="31863" count="1" respawn="60" pos="86899 -143229 -1293 8192"/>
</spawn>

После того как я добавил к нпц event_name="[my_peace_npc]" они перестали появляться после рестарта и появляются после
<set name="cronZoneEnableBroadcastSpawnEvent" val="[gludio_peace_npc]" />

Возможно ли сделать так:
НПЦ стоят на месте - вся проблема тут
Убираем их если есть event_name="[my_peace_npc]"
Спавним мобов
Убираем мобов
Спавним НПЦ event_name="[my_peace_npc]"
 
Фишка в том что тебе нужно разметить до рестарта и после рестарта время, ибо ни какой таск не запускается после старта сервера или когда он выключен. Ибо код просто некому выполнить, процесс остановлен.
 
Я правильно вас понял, пока что это никак не решить?

ибо ни какой таск не запускается после старта сервера или когда он выключен
Было бы классно добавить тогда к крону @reboot
 
в смысле к крону ребут ? Какой ребут ? Крон выполняется именно в указанное время
 
в смысле к крону ребут ? Какой ребут ? Крон выполняется именно в указанное время

Например вот
Code:
    <zone name="[guldiocastle_town_peace1]" type="peace_zone" >
        <set name="cronZoneEnablePattern" val="@reboot" />
        <set name="cronZoneDisablePattern" val="0 0 * * *" />
        <set name="cronZoneEnableBroadcastDespawnEvent" val="[gludio_peace_npc]" />
        <polygon>
            <coords loc="-11998 123905 -3245 -2745" />
            <coords loc="-12880 126192 -3245 -2745" />
            <coords loc="-13928 126485 -3245 -2745" />
            <coords loc="-14408 126484 -3245 -2745" />
            <coords loc="-15239 126174 -3245 -2745" />
            <coords loc="-16120 125367 -3245 -2745" />
            <coords loc="-16551 124468 -3245 -2745" />
            <coords loc="-16550 123911 -3245 -2745" />
            <coords loc="-16509 123323 -3245 -2745" />
            <coords loc="-14638 122381 -3245 -2745" />
            <coords loc="-12022 122270 -3245 -2745" />
        </polygon>
    </zone>

спавн нпц после рестарта
 
добавляй спаун до и после рестарта, разделяй в несколько
 
Путь: gameserver\data\zone

Теперь весь набор параметров:

"cronZoneEnablePattern" - когда будет включена зона по крону. Пример <set name="cronZoneEnablePattern" val="0 18 * * *" />
"cronZoneEnableBroadcastSpawnEvent" - какой ивент спаунить при активации <set name="cronZoneEnableBroadcastSpawnEvent" val="[gludio_peace_npc]" />
"cronZoneEnableBroadcastDespawnEvent" - какой ивент деспаунить при активации <set name="cronZoneEnableBroadcastSpawnEvent" val="[gludio_pvp_mobs]" />
"cronZoneEnableAnnounceCustomMessage" - что мы анонсируем при включении зоны <set name="cronZoneEnableAnnounceCustomMessage" val="zone_gludio_pvp.Enable" />

"cronZoneDisablePattern" - когда будет выключена зона по крону. Пример <set name="cronZoneEnablePattern" val="0 19 * * *" />
"cronZoneDisableBroadcastSpawnEvent" - какой ивент деспаунить при отключении зоны <set name="cronZoneEnableBroadcastSpawnEvent" val="[gludio_peace_npc]" />
"cronZoneDisableBroadcastDespawnEvent"" - какой ивент деспаунить отключении зоны <set name="cronZoneEnableBroadcastSpawnEvent" val="[gludio_pvp_mobs]" />
"cronZoneDisableAnnounceCustomMessage" " - что мы анонсируем отключении зоны <set name="cronZoneEnableAnnounceCustomMessage" val="zone_gludio_pvp.Disable" />

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

Не могу разобраться, вот какое у меня понимание:

cronZoneEnableBroadcastSpawnEvent - при включении зоны Спавнить эвент
cronZoneEnableBroadcastDespawnEvent - при включении зоны Деспавнить эвент
cronZoneDisableBroadcastSpawnEvent - при выключении зоны Спавнить эвент
cronZoneDisableBroadcastDespawnEvent - при выключении зоны Деспавнить эвент

Пытаюсь заспавнить в мирный город, NPC - который будет позволять игроками телепортироваться в боевую зону

Зона
<!-- Боевая Зона-->
<zone name="[orc_start_peace_fun]" type="fun" >
<set name="cronZoneEnablePattern" val="0 12 * * 3" />
<set name="cronZoneDisablePattern" val="0 23 * * 3" />
<set name="cronZoneEnableAnnounceCustomMessage" val="orc.war.on" />
<set name="cronZoneEnableBroadcastSpawnEvent" val="[orc_pvp_day]" />
<polygon>
<coords loc="-58952 -115543 -1483 516" />
<coords loc="-52769 -115553 -1483 516" />
<coords loc="-52758 -111736 -1483 516" />
<coords loc="-58952 -111749 -1483 516" />
</polygon>
</zone>

Спаун

<spawn name="[elf_orc_pvp_day]" event_name="[orc_pvp_day]">
<npc id="33543" count="1" respawn="60" pos="111384 219608 -3702 49151" />
</spawn>


Делаю рестарт - зона активна 24/7. Cron - игнорируется. Spawn - игнорируется.


Решение
в мирной зоне добавить
<set name="enabled" val="true" />
в фан зоне добавить
<set name="enabled" val="false" />
 
Last edited:
получается если сервер ежедневно автоматически перезагружается -
надо всю систему настраивать так, чтобы после рестарта сразу же срабатывали правила спавна/деспавна

а если в определённое время - необходимо сделать технический рестарт -
все активации зон "по крону" до рестарта - уже не работают.

вроде и все понятно, но при этом как то не удобно сделано.

Было бы удобно если в одной зоне прописать сразу все включения..
 
Last edited:
Подскажите, указал анонс на открытие зоны и закрытии, но анонс открытии происходит не корректно, выдает следующее (Not find string: tp_spawn.Enabled; for lang: RUSSIAN), что это?
 
Подскажите, указал анонс на открытие зоны и закрытии, но анонс открытии происходит не корректно, выдает следующее (Not find string: tp_spawn.Enabled; for lang: RUSSIAN), что это?
Не найден стринг.
 
Подскажите, как сделать чтобы после закрытия зоны, всех тпшило из зоны?
 
Подскажите, как сделать чтобы после закрытия зоны, всех тпшило из зоны?
Попробуй после выключения этой зоны, добавить так же по крону, на 1 минуту

Code:
<zone name="[????]" type="???" >
        <set name="enabled" val="false" />
        <set name="cronZoneEnablePattern" val="12 19 * * *" />
        <set name="cronZoneDisablePattern" val="13 19* * *" />
        <set name="uniqHwidLimit" val="0" />
         <set name="uniqHwidBackLoc" val="-xxx  xxx -xxx " />
        <polygon>
            <coords loc="-xxx xxx xxx -xxx" />
            <coords loc="-xxx xxx xxx -xxx" />
        </polygon>
    </zone>
 
Back
Top