Code:
public enum Quest_State { NotAvailable = 0, NotStarted = 1, Begun = 2, Finished = 3 } public enum Quest_Types { SingleQuest = 0,//Can be done one time. SpecialQuest = 1,//Having a time range. NormalQuest = 2,//Can be done multiple times. Dungeon = 3//Quests in dungeons. }
Code:
public class QuestClient { public Quest[] Quests; public int QuestsFinished { get { int count = 0; foreach (Quest quests in Quests) { if (quests.State == Quest_State.Finished) count++; } return count; } } public int QuestsStarted { get { int count = 0; foreach (Quest quests in Quests) { if (quests.State == Quest_State.Begun) count++; } return count; } } }
Code:
public class QuestRequirements { public byte Level; public ushort[] Stats; public byte[] JobRange; public byte Reborns; }
Code:
public class Quest { public Quest(string Name, Struct.ItemInfo[] Reward_Items, uint[] RewardMoney, Quest_Types Type, Client[] Clients, int[] TimeRange, Map[] QuestMaps, string[] HelpInfo, QuestRequirements Requirements) { this.Name = Name; this.Reward_Items = Reward_Items; this.RewardCPs = RewardMoney[0]; this.RewardSilvers = RewardMoney[1]; this.Type = Type; this.Clients = Clients; this.TimeRange = TimeRange; this.QuestMaps = QuestMaps; this.HelpInfo = HelpInfo; this.Requirements = Requirements; } public string Name; public Struct.ItemInfo[] Reward_Items; public uint RewardCPs; public uint RewardSilvers; public string[] HelpInfo; public Quest_State State; public Quest_Types Type; public Client[] Clients; public int[] TimeRange; public Map[] QuestMaps; public QuestRequirements Requirements; public void ShowHelp(Client Client, int Index) { Client.Send(Packets.Chat(HelpInfo[Index], "[Quest]", Client.Name, Struct.ChatType.Talk)); } public void Reward() { Random r = new Random(); for (int i = 0; i < Clients.Length; i++) { Clients[i].CP = RewardCPs; Clients[i].Money = RewardSilvers; int len = Reward_Items.Length; Struct.ItemInfo I = Reward_Items[r.Next(0, len)]; Database.ItemCount++; I.UID = Database.ItemCount; Database.AddItem(I, Clients[i]); Packets.Send(Packets.ItemInfo(I, 1), Clients[i]); if (!Clients[i].Inventory.ContainsKey(I.UID)) Clients[i].Inventory.Add(I.UID, I); } } public bool CanJoin() { if (Clients[Clients.Length] == null) return true; return false; } public void Begin(Client Client) { if (State == Quest_State.Begun || State == Quest_State.Finished) return; Checking = -1; bool Requirements = true; for (int i = 0; i < 7; i++) { if (Requirements) Requirements = HaveRequirements(Client); } if (Client.Level == this.Requirements.Level || Requirements || DateTime.Now.Hour >= TimeRange[0] && DateTime.Now.Minute >= TimeRange[1] && DateTime.Now.Hour <= TimeRange[3] && DateTime.Now.Minute <= TimeRange[4]) { State = Quest_State.Begun; return; } State = Quest_State.NotAvailable; } int Checking = -1; bool HaveRequirements(Client Client) { Checking++; if (this.Requirements.JobRange != null && Checking == 1) if (Client.Job >= this.Requirements.JobRange[0] && Client.Job <= this.Requirements.JobRange[1]) return true; else return false; Checking++; if (this.Requirements.Level > 0 && Checking == 2) if (Client.Level >= this.Requirements.Level) return true; else return false; Checking++; if (this.Requirements.Reborns >0 && Checking == 3) if (Client.Reborn >= this.Requirements.Reborns) return true; else return false; Checking++; if (this.Requirements.Stats != null && Checking == 4) { if (Client.Str >= this.Requirements.Stats[0] && Client.Agi >= this.Requirements.Stats[1] && Client.Vit >= this.Requirements.Stats[2] && Client.Spi >= this.Requirements.Stats[3]) return true; else return false; } return true; } }
Code:
public QuestClient QuestClient;
Code:
Struct.ItemInfo RewardItem = new Struct.ItemInfo(); RewardItem.ID = 410339; RewardItem.Locked = false; RewardItem.Suspicious = false; RewardItem.Plus = 0; RewardItem.Enchant = 0; RewardItem.Soc1 = 0; RewardItem.Soc2 = 0; RewardItem.Color = 0; RewardItem.Composition = 0; RewardItem.Amount = 0; RewardItem.Bless = 0; RewardItem.Free = false; if (Dictionary.ItemData.ContainsKey(RewardItem.ID)) { RewardItem.Dura = Dictionary.ItemData[RewardItem.ID].MaxDura; RewardItem.MaxDura = Dictionary.ItemData[RewardItem.ID].MaxDura; } else { RewardItem.Dura = 20000; RewardItem.MaxDura = 20000; } QuestRequirements req = new QuestRequirements(); req.Level = 120; req.Reborns = 2; Quest example = new Quest("The blue montain", new Struct.ItemInfo[] { RewardItem }, new uint[] { 10000, 500000 }, Quest_Types.SingleQuest, new Client[] { client }, new int[] { 0, 0, 0, 0 }, null, new string[] { "Walk to TwinCity.", "Walk to BirdIsland." }, req);
This is useful, when you're creating quests, because it gives a good strucutre over your quests and you can easy manage them. It will also make your source look less messy.
It should be pretty easy to grab and use.
Goodluck