public static WonderMails.WonderMail Generate(List <int> dungeons, Server.Network.Client client) { Enums.JobDifficulty playerMax = Enums.JobDifficulty.E; List <Enums.JobDifficulty> minDiffs = new List <Enums.JobDifficulty>(); List <Enums.JobDifficulty> maxDiffs = new List <Enums.JobDifficulty>(); for (int i = 0; i < dungeons.Count; i++) { Enums.JobDifficulty minDiff = Enums.JobDifficulty.NineStar; Enums.JobDifficulty maxDiff = Enums.JobDifficulty.E; GetDifficultyRange(dungeons[i], out minDiff, out maxDiff); if (maxDiff >= minDiff) { minDiffs.Add(minDiff); maxDiffs.Add(maxDiff); if (maxDiff > playerMax) { playerMax = maxDiff; } } else { dungeons.RemoveAt(i); i--; } } Enums.JobDifficulty pickedDifficulty = (Enums.JobDifficulty)Server.Math.Rand(1, (int)playerMax + 1); int count = dungeons.Count; for (int i = 0; i < count; i++) { int rand = Server.Math.Rand(0, dungeons.Count); if (minDiffs[rand] <= pickedDifficulty && pickedDifficulty <= maxDiffs[rand]) { WonderMails.WonderMail mail = Generate(dungeons[rand], pickedDifficulty, client); if (mail != null) { return(mail); } else { dungeons.RemoveAt(rand); minDiffs.RemoveAt(rand); maxDiffs.RemoveAt(rand); } } else { dungeons.RemoveAt(rand); minDiffs.RemoveAt(rand); maxDiffs.RemoveAt(rand); } } return(null); }
public static WonderMails.WonderMail Generate(int dungeon, Enums.JobDifficulty difficulty, Server.Network.Client client) { try { DataManager.Players.PlayerDataJobListItem rawJob = new DataManager.Players.PlayerDataJobListItem(); WonderMails.WonderMail mail = new WonderMails.WonderMail(rawJob); mail.DungeonIndex = dungeon; int goal; bool isRDungeon; SelectDungeonMap(difficulty, mail.DungeonIndex, out goal, out isRDungeon); if (goal == -1) { return(null); } mail.GoalMapIndex = goal; mail.RDungeon = isRDungeon; CalculateMailGoal(mail); Enums.MissionType missionType = 0; if (Server.Math.Rand(0, 2) == 0) { } else { missionType = (Enums.MissionType)Server.Math.Rand(1, 3); } mail.MissionType = missionType; if (WonderMailManager.Missions[(int)mail.Difficulty - 1].MissionClients.Count == 0) { return(null); } mail.MissionClientIndex = Server.Math.Rand(0, WonderMailManager.Missions[(int)mail.Difficulty - 1].MissionClients.Count); if (WonderMailManager.Missions[(int)mail.Difficulty - 1].Enemies.Count == 0) { if (missionType == Enums.MissionType.Outlaw) { return(null); } else { mail.TargetIndex = 0; } } else { mail.TargetIndex = Server.Math.Rand(0, WonderMailManager.Missions[(int)mail.Difficulty - 1].Enemies.Count); } if (WonderMailManager.Missions[(int)mail.Difficulty - 1].Rewards.Count == 0) { return(null); } mail.RewardIndex = Server.Math.Rand(0, WonderMailManager.Missions[(int)mail.Difficulty - 1].Rewards.Count); // Section 5 switch ((Enums.MissionType)mail.MissionType) { case Enums.MissionType.ItemRetrieval: { int index = Server.Math.Rand(0, WonderMailManager.Missions[0].Rewards.Count); if (Items.ItemManager.Items[WonderMailManager.Missions[0].Rewards[index].ItemNum].StackCap > 0) { return(null); } mail.Data1 = WonderMailManager.Missions[0].Rewards[index].ItemNum; mail.Data2 = WonderMailManager.Missions[0].Rewards[index].Amount; break; } case Enums.MissionType.Escort: { int index = Server.Math.Rand(0, WonderMailManager.Missions[0].MissionClients.Count); mail.Data1 = WonderMailManager.Missions[0].MissionClients[index].Species; mail.Data2 = WonderMailManager.Missions[0].MissionClients[index].Form; break; } default: { mail.Data1 = -1; mail.Data2 = -1; break; } } bool approved = Scripting.ScriptManager.InvokeFunction("IsMissionAcceptable", client, mail).ToBool(); if (!approved) { return(null); } Scripting.ScriptManager.InvokeSub("CreateMissionInfo", mail); mail.StartStoryScript = -1; mail.WinStoryScript = -1; mail.LoseStoryScript = -1; return(mail); } catch { return(null); } }