protected override bool Process(Player player, RealmTime time, string[] args)
        {
            if (player.Owner is Vault)
            {
                player.SendInfo($"You cant summon player {args[0]} in your vault.");
                return(false);
            }

            foreach (ClientData i in GameServer.Manager.ClientManager.Values)
            {
                Player target = i.Client.Player;

                if (target.Name.EqualsIgnoreCase(args[0]))
                {
                    Message msg;

                    if (target.Owner == player.Owner)
                    {
                        target.Move(player.X, player.Y);

                        msg = new GOTO
                        {
                            ObjectId = target.Id,
                            Position = new Position(player.X, player.Y)
                        };

                        target.UpdateCount++;

                        player.SendInfo($"Player {target.Name} was moved to near you.");
                    }
                    else
                    {
                        msg = new RECONNECT
                        {
                            GameId      = player.Owner.Id,
                            Host        = "",
                            IsFromArena = false,
                            Key         = player.Owner.PortalKey,
                            KeyTime     = -1,
                            Name        = player.Owner.Name,
                            Port        = -1
                        };

                        player.SendInfo($"Player {target.Name} is connecting to {player.Owner.Name}.");
                    }

                    i.Client.SendMessage(msg);

                    return(true);
                }
            }

            player.SendError($"An error occurred: player '{args[0]}' couldn't be found.");
            return(false);
        }
Exemple #2
0
        public string generarAugus(ReporteOptimizacion reporte)
        {
            string       codigoAugus  = "if(" + this.condicion.generarAugus() + ") goto " + this.etiqueta + ";\n";
            OPtimizacion optimizacion = new OPtimizacion();

            optimizacion.linea = "" + (this.linea + 1);
            optimizacion.antes = codigoAugus;
            optimizacion.tipo  = "Mirilla - Eliminación de Codigo Inalcanzable";

            if (this.condicion.tipo == Operacion.TIPO_OPERACION.IGUAL_IGUAL)
            {
                if (this.condicion.validarRegla4())
                {
                    optimizacion.regla   = "Regla 3";
                    optimizacion.despues = "goto " + this.etiqueta + ";";
                    reporte.agregarOpt(optimizacion);
                    codigoAugus = "goto " + this.etiqueta + ";\n";
                }
                else if (this.condicion.validarRegla5())
                {
                    optimizacion.regla   = "Regla 4";
                    optimizacion.despues = "";
                    reporte.agregarOpt(optimizacion);
                    return("");
                }
            }

            try
            {
                if (codigoAugus.StartsWith("if"))
                {
                    if (this.instrucciones.Count > 0)
                    {
                        if (this.instrucciones.ElementAt(0) is GOTO) //validamos que la siguiente instruccion sea un goto
                        {
                            string condicionNueva = this.condicion.invertirCondicion();

                            if (!condicionNueva.Equals(this.condicion.generarAugus())) //si la condicion si cambio se hace la optimizacion
                            {
                                GOTO     etiquetaFalse = (GOTO)this.instrucciones.ElementAt(0);
                                Etiqueta etiquetaTrue  = this.ast.obtenerEtiqueta(this.etiqueta);

                                string codigoOptimizar = codigoAugus;
                                codigoOptimizar += "goto " + etiquetaFalse.id + ";\n";
                                codigoOptimizar += etiquetaTrue.id + ":\n";
                                codigoOptimizar += "[instrucciones_" + etiquetaTrue.id + "]\n";
                                codigoOptimizar += etiquetaFalse.id + ":\n";
                                codigoOptimizar += "[instrucciones_" + etiquetaFalse.id + "]\n";

                                codigoAugus = "if(" + condicionNueva + ") goto " + etiquetaFalse.id + ";\n";
                                string codigoOptimizado = codigoAugus;
                                codigoOptimizado += "[instrucciones_" + etiquetaTrue.id + "]\n";
                                codigoOptimizado += etiquetaFalse.id + ":\n";
                                codigoOptimizado += "[instrucciones_" + etiquetaFalse.id + "]\n";

                                optimizacion.antes   = codigoOptimizar;
                                optimizacion.despues = codigoOptimizado;
                                optimizacion.regla   = "Regla 2";
                                optimizacion.tipo    = "Mirilla - Eliminación de Código Inalcanzable";
                                reporte.agregarOpt(optimizacion);
                                this.seAplicoRegla3           = true;
                                etiquetaTrue.imprimirEtiqueta = false;
                                //etiquetaTrue.ast = ast;
                                codigoAugus += etiquetaTrue.optimizarCodigo(reporte, ast);

                                ast.etiquetasBetadas.AddLast(etiquetaTrue.id);
                            }
                        }
                    }
                }
            } catch (Exception)
            {
                return(null);
            }
            return(codigoAugus);
        }