示例#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 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);
            }
        }
示例#3
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("?");
            }
        }
示例#4
0
        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;
            }
        }
示例#5
0
        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;
                    }
                }
            }
        }
示例#6
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);
            }
        }