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 int FindIncompleteMission(int index) { // for (int i = 0; i <= Missions.Count - 1; i++) { // if (Missions[i].Hidden == false) { // if (PlayerManager.Players[index].Missions.ContainsKey(i)) { // if (PlayerManager.Players[index].Missions[i] == false) { // return i; // } // } else { // PlayerManager.Players[index].Missions.Add(i, false); // return i; // } // } // } // return -1; //} //public static string CreateMissionCompletionEventString(WonderMail wondermail) { // switch (wondermail.MissionType) { // case Enums.MissionType.Rescue: { // return "Reach the goal!"; // } // case Enums.MissionType.Escort: { // return "Escort " + NpcManager.Npcs[WonderMailSystem.PokemonInfo[wondermail.CreatorInfoIndex].NpcNum].Name + " to " + // NpcManager.Npcs[WonderMailSystem.PokemonInfo[wondermail.TargetInfoIndex].NpcNum].Name + "!"; // } // case Enums.MissionType.ItemRetrieval: { // return "Deliver " + wondermail.Data2 + " " + Items.ItemManager.Items[wondermail.Data1].Name + " to " + // NpcManager.Npcs[WonderMailSystem.PokemonInfo[wondermail.CreatorInfoIndex].NpcNum].Name + "!"; // } // case Enums.MissionType.CompleteDungeon: { // return "Complete " + Dungeons.DungeonManager.Dungeons[wondermail.DungeonIndex].Name + "!"; // } // } // return "Unable to determine completion event"; //} //public static string CreateMissionRewardString(WonderMail wondermail) { // StringBuilder builder = new StringBuilder(); // List<MissionReward> rewards = WonderMailSystem.RewardInfo[wondermail.RewardIndex].Rewards; // for (int i = 0; i < rewards.Count; i++) { // builder.Append(rewards[i].Tag); // if (i != rewards.Count - 1) { // builder.Append(" + "); // } // } // return builder.ToString(); //} public static int DetermineMissionExpReward(Enums.JobDifficulty difficulty) { switch (difficulty) { case Enums.JobDifficulty.E: return(10); case Enums.JobDifficulty.D: return(15); case Enums.JobDifficulty.C: return(20); case Enums.JobDifficulty.B: return(30); case Enums.JobDifficulty.A: return(60); case Enums.JobDifficulty.S: return(90); case Enums.JobDifficulty.Star: return(150); case Enums.JobDifficulty.TwoStar: return(250); case Enums.JobDifficulty.ThreeStar: return(400); case Enums.JobDifficulty.FourStar: return(600); case Enums.JobDifficulty.FiveStar: return(800); case Enums.JobDifficulty.SixStar: return(1000); case Enums.JobDifficulty.SevenStar: return(1200); case Enums.JobDifficulty.EightStar: return(1400); case Enums.JobDifficulty.NineStar: return(1600); default: return(0); } }
public static string DifficultyToString(Enums.JobDifficulty difficulty) { switch (difficulty) { case Enums.JobDifficulty.E: return("E"); case Enums.JobDifficulty.D: return("D"); case Enums.JobDifficulty.C: return("C"); case Enums.JobDifficulty.B: return("B"); case Enums.JobDifficulty.A: return("A"); case Enums.JobDifficulty.S: return("S"); case Enums.JobDifficulty.Star: return("*1"); case Enums.JobDifficulty.TwoStar: return("*2"); case Enums.JobDifficulty.ThreeStar: return("*3"); case Enums.JobDifficulty.FourStar: return("*4"); case Enums.JobDifficulty.FiveStar: return("*5"); case Enums.JobDifficulty.SixStar: return("*6"); case Enums.JobDifficulty.SevenStar: return("*7"); case Enums.JobDifficulty.EightStar: return("*8"); case Enums.JobDifficulty.NineStar: return("*9"); default: return("?"); } }
private static void SelectDungeonMap(Enums.JobDifficulty difficulty, int dungeon, out int goal, out bool isRdungeon) { List <int> validStandardMaps = new List <int>(); List <int> validRandomMaps = new List <int>(); for (int i = 0; i < Dungeons.DungeonManager.Dungeons[dungeon].StandardMaps.Count; i++) { if (!Dungeons.DungeonManager.Dungeons[dungeon].StandardMaps[i].IsBadGoalMap) { if (Dungeons.DungeonManager.Dungeons[dungeon].StandardMaps[i].Difficulty == difficulty) { validStandardMaps.Add(i); } } } for (int i = 0; i < Dungeons.DungeonManager.Dungeons[dungeon].RandomMaps.Count; i++) { if (!Dungeons.DungeonManager.Dungeons[dungeon].RandomMaps[i].IsBadGoalMap) { if (Dungeons.DungeonManager.Dungeons[dungeon].RandomMaps[i].Difficulty == difficulty) { validRandomMaps.Add(i); } } } int rand = -1; if (validStandardMaps.Count + validRandomMaps.Count > 0) { rand = Server.Math.Rand(0, (validStandardMaps.Count + validRandomMaps.Count)); } if (rand == -1) { goal = rand; isRdungeon = false; } else if (rand < validStandardMaps.Count) { goal = rand; isRdungeon = false; } else { goal = rand - validStandardMaps.Count; isRdungeon = true; } }
private static void GetDifficultyRange(int dungeon, out Enums.JobDifficulty minDifficulty, out Enums.JobDifficulty maxDifficulty) { List <int> validStandardMaps = new List <int>(); List <int> validRandomMaps = new List <int>(); maxDifficulty = Enums.JobDifficulty.E; minDifficulty = Enums.JobDifficulty.NineStar; for (int i = 0; i < Dungeons.DungeonManager.Dungeons[dungeon].StandardMaps.Count; i++) { if (!Dungeons.DungeonManager.Dungeons[dungeon].StandardMaps[i].IsBadGoalMap) { if (Dungeons.DungeonManager.Dungeons[dungeon].StandardMaps[i].Difficulty > maxDifficulty) { maxDifficulty = Dungeons.DungeonManager.Dungeons[dungeon].StandardMaps[i].Difficulty; } else if (Dungeons.DungeonManager.Dungeons[dungeon].StandardMaps[i].Difficulty < minDifficulty) { minDifficulty = Dungeons.DungeonManager.Dungeons[dungeon].StandardMaps[i].Difficulty; } } } for (int i = 0; i < Dungeons.DungeonManager.Dungeons[dungeon].RandomMaps.Count; i++) { if (!Dungeons.DungeonManager.Dungeons[dungeon].RandomMaps[i].IsBadGoalMap) { if (Dungeons.DungeonManager.Dungeons[dungeon].RandomMaps[i].Difficulty > maxDifficulty) { maxDifficulty = Dungeons.DungeonManager.Dungeons[dungeon].RandomMaps[i].Difficulty; } else if (Dungeons.DungeonManager.Dungeons[dungeon].RandomMaps[i].Difficulty < minDifficulty) { minDifficulty = Dungeons.DungeonManager.Dungeons[dungeon].RandomMaps[i].Difficulty; } } } }
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); } }