Ejemplo n.º 1
0
        public BuildOrder CreateBuildOrder(int instituteId, int computerId, int buildId)
        {
            Computer  computer  = repository.GetComputer(computerId).Result;
            Institute institute = repository.GetInstitute(instituteId).Result;

            int milliToFinish = 60000 / (int)institute.RateTime;
            int building      = buildId % 20;

            int buildLevel = calculateBuildLevel(computer, buildId);

            int needKnowledge = 0;
            int needIngenyous = 0;
            int needCoffee    = 0;
            int needBuild     = 0;

            switch (buildId / 20)
            {
            case 0:
                SystemResource sysResource = repository.GetSystemResources().Result[building - 1];

                needKnowledge = int.Parse(sysResource.NeedKnowledge.Split(',')[buildLevel]);
                needIngenyous = int.Parse(sysResource.NeedIngenyous.Split(',')[buildLevel]);

                //se comprueba si hay suficientes recursos
                if (computer.Resource.Knowledge < needKnowledge || computer.Resource.Ingenyous < needIngenyous)
                {
                    return(null);
                }

                //se comprueba que no hay otra orden
                foreach (BuildOrder b in repository.GetBuildOrders(computerId).Result)
                {
                    if (b.BuildId < 40)
                    {
                        return(null);
                    }
                }

                //se comprueba que no hayas llegado al límite
                if (building == 1 && computer.Resource.KnowledgeLevel >= sysResource.LastVersion)
                {
                    return(null);
                }
                else if (building == 2 && computer.Resource.IngenyousLevel >= sysResource.LastVersion)
                {
                    return(null);
                }
                else if (building == 3 && computer.Resource.CoffeeLevel >= sysResource.LastVersion)
                {
                    return(null);
                }
                else if (building == 4 && computer.Resource.StressLevel >= sysResource.LastVersion)
                {
                    return(null);
                }

                milliToFinish *= int.Parse(sysResource.Time.Split(',')[buildLevel]);

                repository.NotAsyncUpdateResource(computer.Resource);
                break;

            case 1:
                SystemSoftware sysSoftware = repository.GetSystemSoftwares().Result[building - 1];

                needKnowledge = int.Parse(sysSoftware.NeedKnowledge.Split(',')[buildLevel]);
                needIngenyous = int.Parse(sysSoftware.NeedIngenyous.Split(',')[buildLevel]);
                needCoffee    = int.Parse(sysSoftware.NeedCoffee.Split(',')[buildLevel]);

                //se comprueba si hay suficientes recursos
                if (computer.Resource.Knowledge < needKnowledge || computer.Resource.Ingenyous < needIngenyous || computer.Resource.Coffee < needCoffee)
                {
                    return(null);
                }

                //se comprueba que no hay otra orden
                foreach (BuildOrder b in repository.GetBuildOrders(computerId).Result)
                {
                    if (b.BuildId < 40)
                    {
                        return(null);
                    }
                }

                //se comprueba que no hayas llegado al límite
                if (building == 1 && computer.Software.GeditVersion >= sysSoftware.LastVersion)
                {
                    return(null);
                }
                else if (building == 2 && computer.Software.MySqlVersion >= sysSoftware.LastVersion)
                {
                    return(null);
                }
                else if (building == 3 && computer.Software.GitHubVersion >= sysSoftware.LastVersion)
                {
                    return(null);
                }
                else if (building == 4 && computer.Software.StackOverFlowVersion >= sysSoftware.LastVersion)
                {
                    return(null);
                }
                else if (building == 5 && computer.Software.PostManVersion >= sysSoftware.LastVersion)
                {
                    return(null);
                }
                else if (building == 6 && computer.Software.VirtualMachineVersion >= sysSoftware.LastVersion)
                {
                    return(null);
                }

                milliToFinish *= int.Parse(sysSoftware.Time.Split(',')[buildLevel]);

                break;

            case 2:
                SystemTalent sysTalent = repository.GetSystemTalents().Result[building - 1];

                needKnowledge = int.Parse(sysTalent.NeedKnowledge.Split(',')[buildLevel]);
                needIngenyous = int.Parse(sysTalent.NeedIngenyous.Split(',')[buildLevel]);
                needCoffee    = int.Parse(sysTalent.NeedCoffee.Split(',')[buildLevel]);
                needBuild     = int.Parse(sysTalent.NeedBuild.Split(',')[buildLevel]);

                //se comprueba si hay suficientes recursos
                if (computer.Resource.Knowledge < needKnowledge || computer.Resource.Ingenyous < needIngenyous || computer.Resource.Coffee < needCoffee || computer.Software.StackOverFlowVersion < needBuild)
                {
                    return(null);
                }

                //se comprueba que no haya otra orden
                foreach (BuildOrder b in repository.GetBuildOrders(computerId).Result)
                {
                    if (b.BuildId >= 40 && b.BuildId < 60)
                    {
                        return(null);
                    }
                }

                //se comprueba que no hayas llegado al límite
                if (building == 1 && computer.Talent.RefactorLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 2 && computer.Talent.InheritanceLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 3 && computer.Talent.InjectionLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 4 && computer.Talent.UdpLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 5 && computer.Talent.TcpIpLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 6 && computer.Talent.SftpLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 7 && computer.Talent.EcbLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 8 && computer.Talent.RsaLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 9 && computer.Talent.SslLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }

                milliToFinish *= int.Parse(sysTalent.Time.Split(',')[buildLevel]);

                break;

            case 3:
                SystemScript sysScript = repository.GetSystemScripts().Result[building - 1];

                needKnowledge = sysScript.NeedKnowledge;
                needIngenyous = sysScript.NeedIngenyous;
                needCoffee    = sysScript.NeedCoffee;

                //se comprueba si hay suficientes recursos
                if (computer.Resource.Knowledge < needKnowledge || computer.Resource.Ingenyous < needIngenyous || computer.Resource.Coffee < needCoffee)
                {
                    return(null);
                }

                //se comprueba que no haya otra orden
                foreach (BuildOrder b in repository.GetBuildOrders(computerId).Result)
                {
                    if (b.BuildId >= 60)
                    {
                        return(null);
                    }
                }

                //TODO: se comprueba que no hayas llegado al límite

                milliToFinish *= sysScript.Time;

                break;
            }

            //consumo de recursos
            computer.Resource.Knowledge -= needKnowledge;
            computer.Resource.Ingenyous -= needIngenyous;
            computer.Resource.Coffee    -= needCoffee;

            repository.NotAsyncUpdateResource(computer.Resource);

            BuildOrder buildOrder = new BuildOrder(computerId, milliToFinish, buildId);

            return(repository.SaveBuildOrder(buildOrder).Result);
        }