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

Путь: 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:
Попробуй после выключения этой зоны, добавить так же по крону, на 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>
Не работает
 
Не работает
Так попробуйте. Только это пример, поменяйте всё что нужно под себя(за исключением уровня).
XML:
    <zone name="[111]" type="fun" >
        <set name="enabled" val="false" />
        <set name="cronZoneEnablePattern" val="12 19 * * *" />
        <set name="cronZoneDisablePattern" val="13 19 * * *" />
        <set name="playerMinLevel" val="1" />
        <set name="playerMaxLevel" val="2" />
        <set name="playerLevelLimitBackLoc" val="-25464 172424 -4203" />
        <polygon>
            <coords loc="-25464 172424 -4203" />
            <coords loc="-25464 172424 -4203" />
            <coords loc="-25464 172424 -4203" />
            <coords loc="-25464 172424 -4203" />
        </polygon>
    </zone>
 
Добавил спавн 4 РБ по 1 каждый час, с разбросом 60 минут, но все РБ спавнятся сразу, когда зона активируется
Безымянный.webp
 
Добавил спавн 4 РБ по 1 каждый час, с разбросом 60 минут, но все РБ спавнятся сразу, когда зона активируется
View attachment 1398
мне кажется надо делать 4 зоны, активировалась первая - босс появился - убили, через час зона отключилась включилась 2ая зона, босс появился и т.д.
 
А если при спауне нужно, чтобы зона была просто для фарма ( не пвп), а потом скриптом ее в пвп превратить. Какой type указывать в кроне? Fun - сразу после крона становится пвп.....
 
А если при спауне нужно, чтобы зона была просто для фарма ( не пвп), а потом скриптом ее в пвп превратить. Какой type указывать в кроне? Fun - сразу после крона становится пвп.....
как угодно можешь управлять зонами по своему времени
 
Добавил спавн 4 РБ по 1 каждый час, с разбросом 60 минут, но все РБ спавнятся сразу, когда зона активируется
View attachment 1398
нет ни какого разброса при активации зоны по крону, если его там убили, то только тогда примениться правило разброса и ни как не ранее до того как его убили. Л - Логика!
 
нет ни какого разброса при активации зоны по крону, если его там убили, то только тогда примениться правило разброса и ни как не ранее до того как его убили. Л - Логика!
Тоесть можно добавить спавн рб в этой зоне в нужное мне время, и он будет появятся независимо активна зона или нет
 
А есть возможность добавить кнопку fixed, которая появляется только в этой зоне?
 
Фишка в том что тебе нужно разметить до рестарта и после рестарта время, ибо ни какой таск не запускается после старта сервера или когда он выключен. Ибо код просто некому выполнить, процесс остановлен.
Можно подробнее, пожалуйста. Если рестарт стоит в 5.00 утра
 
Попробуй после выключения этой зоны, добавить так же по крону, на 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>
разобрался
 
а сделать так что бы зона не была активно для входа.
что бы активировалось только в то время когда когда зона открыта
 
а сделать так что бы зона не была активно для входа.
что бы активировалось только в то время когда когда зона открыта
сделать телепорт зону с левел лимитом и откидывать на пару квадратов назад, допустим зона будет с требованием 99 лвла... Все
А потом вырубать ее, только отработал твой сценарий - опять активировал и всех выкинул.
 
I have a question about how this system works, I mean, what is each parameter for?


npc id="31226"
contar="1"
reaparecer="60"
here I understand what it is X Y Z but what is the last value for?
pos="-51656 137592-2856 49000" />
 
(не судите строго но для меня это важно)
где увидеть работу зоны через настройку крон

пример эпик фришка респ каждые ~60:0 22 +2:* * *

мне нужно активировать пвп зону с 30 21+2:* * *
мне нужно отключить зону до 12 ночи то все понятно .....
и сам проблем
старт сервера я переношу эпик на допустим на -3-4 день сервера

а как перенести время актива зоны и отключить.. зону?
или я так понимаю что нужно их переносить в базу по типу таблице epic_boss_spawn
только это будет zone_crone


тема Как выставить с старта Эпиков или РБ мертвыми
 
Last edited:
А если при спауне нужно, чтобы зона была просто для фарма ( не пвп), а потом скриптом ее в пвп превратить. Какой type указывать в кроне? Fun - сразу после крона становится пвп.....
Подскажи , что указывал , что бы зона была сначала не пвп, в потом в пвп ?
Буду очень признателен !
 
Подскажи , что указывал , что бы зона была сначала не пвп, в потом в пвп ?
Буду очень признателен !
Ну обычная у меня type="no_summon" >, потом включается type="dummy" >
Но это под меня сделано, ты себе можешь настроить как тебе нужно
 
можно добавить сообщение? отправится в фарм зону да иль нет. как отправка к рб
 
Могу ли я как-то добавить появления НПС-а в то время когда активируеться фарм зона ? и по его окончанию он пропадет , и зона закроеться...
 
Back
Top