public void DoDialog(Connection client) { // Is the player working for me? Quest playerActiveQuest = client.Character.GetActiveQuestForNPC(_id); if (playerActiveQuest != null) { client.SetCurrentQuest(_id, playerActiveQuest.QuestID, 0); byte step = client.Character.GetQuestStep(playerActiveQuest.QuestID); QuestLine ql = playerActiveQuest.GetStep(step).GetLine(0); ql.SendToClient(client); client.SendPacket(new NPCDialogPacket(_gameID)); return; } // Do I have something for the player? foreach (Quest q in _quests.Values) { if (!client.Character.HasActiveQuest(q.QuestID) && !client.Character.HasCompletedQuest(q.QuestID)) { if (q.PlayerMeetsRequirements(client.Character)) { client.Character.ReceiveQuest(q); client.SetCurrentQuest(_id, q.QuestID, 0); QuestStep qs = q.GetStep(0); qs.Activate(client); QuestLine ql = qs.GetLine(0); ql.SendToClient(client); client.SendPacket(new NPCDialogPacket(_gameID)); } } } /* * // Am I selling something? * if (IsMerchant) * { * // Show sell dialog * } * * // Just say hello * if (_defaultText != null) * { * client.SendPacket(new NPCDialogPacket(_defaultText, _defaultIcon)); * } */ }
public void ReadActiveQuests(DBQuery query, Connection client) { _activeQuests = new Dictionary <uint, byte>(); foreach (object[] row in query.Rows) { // 0: character_id int(10) unsigned // 1: quest_id int(11) unsigned // 2: step tinyint(3) unsigned uint quest = (uint)row[1]; byte step = (byte)row[2]; _activeQuests[quest] = step; Quest q = Program.Server.GetQuest(quest); QuestStep qs = q.GetStep(step); qs.Activate(client); } }