protected byte Status; // 0x00, 0x01 or something else %) public SpNpcIcon(Npc npc, QuestStatusIcon icon, byte status) { Npc = npc; Icon = icon; Status = status; }
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); } }
protected byte Status; // 0x00, 0x01 or something else %) #endregion Fields #region Constructors public SpNpcIcon(Npc npc, QuestStatusIcon icon, byte status) { Npc = npc; Icon = icon; Status = status; }