예제 #1
0
        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);
        }
예제 #2
0
        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);
            }
        }