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; } }
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); } }