Exemple #1
0
        public void AddButtonsToDialog(Player player, Npc npc, List <DialogButton> buttons)
        {
            foreach (var data in player.Quests)
            {
                //Reward
                if (npc.NpcTemplate.FullId == Quests[data.Key].TryGetRewardNpc(player))
                {
                    DialogIcon icon = DialogIcon.CenteredGray;

                    switch (Data.Data.Quests[data.Key].Type)
                    {
                    case QuestType.Mission:
                        icon = DialogIcon.MissionQuestReward;
                        break;

                    case QuestType.Normal:
                        icon = DialogIcon.NormalQuestReward;
                        break;

                    case QuestType.Guild:
                        icon = DialogIcon.GuildQuestReward;
                        break;
                    }

                    buttons.Add(new DialogButton(icon, Data.Data.Quests[data.Key].QuestTitle));
                }
                else
                {
                    //Talk
                    QStepDefault step = Quests[data.Key].GetNowStep(player);

                    if (step == null)
                    {
                        continue;
                    }

                    List <int> villagers = step.GetParticipantVillagers(player);

                    if (villagers.Count > 0 && npc.NpcTemplate.FullId == villagers[0])
                    {
                        DialogIcon icon = DialogIcon.CenteredGray;

                        switch (Data.Data.Quests[data.Key].Type)
                        {
                        case QuestType.Mission:
                            icon = DialogIcon.MissionQuestProgress;
                            break;

                        case QuestType.Normal:
                            icon = DialogIcon.NormalQuestProgress;
                            break;

                        case QuestType.Guild:
                            icon = DialogIcon.GuildQuestProgress;
                            break;
                        }

                        buttons.Add(new DialogButton(icon, Data.Data.Quests[data.Key].QuestTitle));
                    }
                }
            }

            //Start
            if (NpcStartQuests.ContainsKey(npc.NpcTemplate.FullId))
            {
                for (int i = 0; i < NpcStartQuests[npc.NpcTemplate.FullId].Count; i++)
                {
                    Quest quest = NpcStartQuests[npc.NpcTemplate.FullId][i];

                    if (player.Quests.ContainsKey(quest.QuestId))
                    {
                        continue;
                    }

                    if (!quest.NeedClasses.Contains(player.PlayerData.Class))
                    {
                        continue;
                    }

                    if (quest.NeedLevel > player.Level)
                    {
                        continue;
                    }

                    DialogIcon icon = DialogIcon.CenteredGray;

                    switch (quest.Type)
                    {
                    case QuestType.Mission:
                        icon = DialogIcon.MissionQuestStart;
                        break;

                    case QuestType.Normal:
                        icon = DialogIcon.NormalQuestStart;
                        break;

                    case QuestType.Guild:
                        icon = DialogIcon.GuildQuestStart;
                        break;
                    }

                    buttons.Add(new DialogButton(icon, quest.QuestTitle));
                }
            }
        }
Exemple #2
0
        public void ShowIcon(Player player, Npc npc, bool force = false)
        {
            if (!npc.NpcTemplate.IsVillager)
            {
                return;
            }

            QuestType       questType = QuestType.Guild;
            QuestStatusIcon icon      = QuestStatusIcon.None;

            //Rewards
            {
                bool isReward = false;

                foreach (var data in player.Quests)
                {
                    if (npc.NpcTemplate.FullId == Quests[data.Key].TryGetRewardNpc(player))
                    {
                        if (Data.Data.Quests[data.Key].Type < questType)
                        {
                            questType = Data.Data.Quests[data.Key].Type;
                            isReward  = true;

                            if (questType == 0)
                            {
                                break;
                            }
                        }
                    }
                }

                if (isReward)
                {
                    switch (questType)
                    {
                    case QuestType.Mission:
                        icon = QuestStatusIcon.RewardMissionQuest;
                        break;

                    case QuestType.Normal:
                        icon = QuestStatusIcon.RewardNormalQuest;
                        break;

                    case QuestType.Guild:
                        icon = QuestStatusIcon.RewardGuildQuest;
                        break;
                    }

                    new SpNpcIcon(npc, icon, 1).Send(player.Connection);
                    return;
                }
            }

            //Talk
            {
                bool isTalk = false;

                foreach (var data in player.Quests)
                {
                    QStepDefault step = Quests[data.Key].GetNowStep(player);

                    if (step == null)
                    {
                        continue;
                    }

                    List <int> villagers = step.GetParticipantVillagers(player);

                    if (villagers.Count > 0 && npc.NpcTemplate.FullId == villagers[0])
                    {
                        if (Data.Data.Quests[data.Key].Type < questType)
                        {
                            questType = Data.Data.Quests[data.Key].Type;
                            isTalk    = true;

                            if (questType == 0)
                            {
                                break;
                            }
                        }
                    }
                }

                if (isTalk)
                {
                    switch (questType)
                    {
                    case QuestType.Mission:
                        icon = QuestStatusIcon.ProgressMissionQuest;
                        break;

                    case QuestType.Normal:
                        icon = QuestStatusIcon.ProgressNormalQuest;
                        break;

                    case QuestType.Guild:
                        icon = QuestStatusIcon.ProgressGuildQuest;
                        break;
                    }

                    new SpNpcIcon(npc, icon, 1).Send(player.Connection);
                    return;
                }
            }

            //Start
            if (NpcStartQuests.ContainsKey(npc.NpcTemplate.FullId))
            {
                bool isStart = false;

                for (int i = 0; i < NpcStartQuests[npc.NpcTemplate.FullId].Count; i++)
                {
                    Quest quest = NpcStartQuests[npc.NpcTemplate.FullId][i];

                    if (player.Quests.ContainsKey(quest.QuestId))
                    {
                        continue;
                    }

                    if (!quest.NeedClasses.Contains(player.PlayerData.Class))
                    {
                        continue;
                    }

                    if (quest.NeedLevel > player.Level)
                    {
                        continue;
                    }

                    isStart = true;

                    if (quest.Type < questType)
                    {
                        questType = quest.Type;
                    }

                    if (questType == 0)
                    {
                        break;
                    }
                }

                if (isStart)
                {
                    switch (questType)
                    {
                    case QuestType.Mission:
                        icon = QuestStatusIcon.MissionQuest;
                        break;

                    case QuestType.Normal:
                        icon = QuestStatusIcon.NormalQuest;
                        break;

                    case QuestType.Guild:
                        icon = QuestStatusIcon.GuildQuest;
                        break;
                    }
                }
            }

            if (icon != QuestStatusIcon.None)
            {
                new SpNpcIcon(npc, icon, 1).Send(player.Connection);
            }
            else if (force)
            {
                new SpNpcIcon(npc, 0, 0).Send(player.Connection);
            }
        }