Server Files Development View missions

zLuke

Very Active Pirate
Developer
Registered
LV
4
 
Joined
Jan 29, 2026
Messages
70
Reaction score
56
Points
63
Age
40
A small tool for organizing missions and NPCs for your server.
Requires Python 3.9+
Allows you to view and quickly navigate to a NPC or mission function (requires Visual Studio Code).
Shows related quest chains.
Shows missions tied to NPCs.
Shows mission conflicts. Duplicates, missions without NPC bindings, and missions with NPCs that are not actually in MissionScript.
Supports Russian and English languages in scripts.
When creating indexes, it automatically decodes lua-encoded strings (\207\238\231\228\237\229\229 \239\240\232\225\251\242\232\229)
Place the
MissionProject folder in the GameServer next to the resource folder.
Run
build.bat to create indexes.
Start the local server using
serve.bat.
In the browser, go to
Please, Log in or Register to view URLs content!


Небольшой инструмент для наведения порядка в миссиях и нпс для вашего сервера.
Требуется Python 3.9+
Позволяет посмотреть и быстро перейти к функции нпс или миссии (необходим Visual Studio Code).
Показывает связанные цепочки квестов.
Показывает привязанные к нпс миссии.
Показывает конфликты миссий. Дубли, миссии без привязки к нпс, а так же миссии у нпс которых на самом деле нет в MissionScript.
Поддерживает Русский и Английский языки в скриптах.
При создании индексов автоматически раскодирует строки в кодировке lua (\207\238\231\228\237\229\229 \239\240\232\225\251\242\232\229)
Поместите папку
MissionProject в GameServer рядом с папкой resource.
Для создания индексов запустите
build.bat.
Запустите локальный сервер с помощью
serve.bat.
В браузере перейдите по адресу
Please, Log in or Register to view URLs content!


1776573281217.webp


1776573385320-webp.417


1776573475539.webp

1776573512630.webp

1776573553178.webp

The mission chains are not working properly yet, but I'm working on it.
Пока построение цепочек миссий идет не совсем правильно, но я работаю над этим.
 

Attachments

  • 1776573332292.webp
    1776573332292.webp
    61.3 KB · Views: 2
  • 1776573385320.webp
    1776573385320.webp
    61.8 KB · Views: 37
  • MissionProject.zip
    MissionProject.zip
    38.4 KB · Views: 3
Last edited:
its good if you're using legacy way of doing quest but i would suggest to move to easier way to do it
we had ported system to use quest generation into tables this two examples and easier to create new quest, edit exist quest

JavaScript:
Questimportant = 1
QuestEvent = 2
QuestDaily = 3
Quests = {
    -- Example
    {
        NpcID = 31,
        MissionID = 31,
        MissionSignIcon = QuestDaily,
        Name = "Beginner's Way",
        InitDialog = "You need to kill 10 Bear Cub's, collect 10 Blurry Blueprints, 5 Cashmere, 50 Fairy Coins. If you can complete this task, you will be rewarded for your hard works!",
        Daily = true,
        BeginConditions = {
            NoMission = {31},
            LvCheck_HigherThan = 65
            --  LvCheck_LowerThan = 70,
            --HasRecord = 705,
        },
        Need = {
            Items = {
                {ID = 1000, Qty = 10},
                {ID = 1678, Qty = 5},
                {ID = 855, Qty = 50}
            },
            Kills = {
                {ID = 258, Qty = 10}
            }
        },
        Rewards = {
            Items = {
                {ID = 15404, Qty = 1, Quality = 4}, --    Mount Fragment
                {ID = 15429, Qty = 1, Quality = 4}, --    Mount Fragment
                {ID = 15349, Qty = 1, Quality = 4}, -- 100 Million Dollar Note
                {ID = 15361, Qty = 1, Quality = 4} --5% Experience Seed
            },
            --Money = 30000,
            BagSpace = 3
        },
        GiveSelectedReward = true, --option to give only one prize of total rewards
        HelpDialog = "Very helpful!",
        ResultDialog = "It seems like you're a true warrior! I'll gladly reward you."
    },
 {
        NpcID = 44,
        MissionID = 44,
        Name = "lollipop Path",
        InitDialog = "Ahoy there, Pirate! Ye be a true mate for offering to lend a hand! Listen close now, for I'll share a valuable tip with ye. The elusive <pChristmas Lollipop> be rumored to dance upon the shores of <rIsle of Chill>. But to set foot upon that blessed land, ye'll need the blessing of <rCastle Guard - Peter>.<c(2194,2767)> Seek him out and secure the huntin' permission, and ye'll be one step closer to claimin' yer sweet prize.",
        Daily = true,
        MissionSignIcon = QuestEvent,
        BeginConditions = {
            NoMission = {44,45},
            LvCheck_HigherThan = 69,
            NoRecord =10,
            -- LvCheck_LowerThan = 46,
            --HasRecord = 705,
            --HasMission = 222
            CheckTime = 0 --if it use hexa timer
        },
        Need = {
            Items = {
                {ID = 3899, Qty = 5},--3899    Christmas Lollipop
               {ID = 3910, Qty = 1},--3910    Super Candy Stick
            },
            -- Kills = {
            --     {ID = 716, Qty = 5},--Chest of Demonic World 2
            -- }
        },
        Rewards = {
            Items = {
                {ID = 7058, Qty = 2, Quality = 4} --    1000 rep card
            },
           -- Money = 30000,
            BagSpace = 3
        },
        ResultCondition= {
            --CheckTime = 0 ,--if it use hexa timer
            HasRecord = 10,
            --HasMission = 45, -- for second quest from castle gaurd npc
        },
        --clear rest record of related quests chain
        -- ResultAction = {
        --     ClearRecord = 10,

        -- },
        -- GiveSelectedReward = true, --option to give only one prize of total rewards
        HelpDialog = "Ahoy there, Pirate! Have you ever laid eyes on the <plegendary Christmas Lollipop>? My wee ones have been dreaming of sinking their teeth into that sweet treat for ages. Alas, me pockets be a tad light for such extravagance. But if ye be feeling generous enough to aid this humble soul, I'll be sure to share some of me secret stash of <rCandy Stick> with ye in return.",
        ResultDialog = "Arr, ye're too kind, matey! No need for fancy words. Just point me to the loot, and we'll call it a fair deal. Deal?"
    },  
}

another way of doing it as

Code:
ID = 3
UPO_Quest.Type[ID] = 2
UPO_Quest.Conditions.NoRecord[ID] = 3
UPO_Quest.CantAbandonMiss[ID] = 1
UPO_Quest.Name[ID] = "Tundra"
UPO_Quest.Description[ID] = "Did you know there's a brand new spot for farming?! Yea, there is! "
UPO_Quest.Objective[ID] = "Go and check Albion's Icy Area at <b618,788> and kill the mentioned monsters. As reward, you'll even get a cool title! Isn't this incredible?"
UPO_Quest.Ending[ID] = "You did it! Make sure to save this one in your notepad. :)"
UPO_Quest.Kill[ID] = {1258,30,1257,30,1259,30,1260,30}
UPO_Quest.Finish.AddRecord[ID] = 3
UPO_Quest.Rewards[ID] = {15074, 1}