示例#1
0
        public WindPlantPisoSolver()
        {
            SkipStandalone = true;
            Order          = 42;
            var config = new SowfaProjectConfiguration();

            ProductType = ProductType.CFD;
            Name        = "Wind Plant PISO Solver";
            Code        = ProductCode.Sowfa_WindPlantPiso;
            Description = @"A specialized version of ABLPisoSolver for performing LES of wind plant flow. It includes the ability to include actuator line turbine models with local grid refinement around the turbine.";
            DefaultItems.AddRange(new[]
            {
                config.ProjectItemsMap[SowfaProjectItemType.Constant_Gravitation],
                config.ProjectItemsMap[SowfaProjectItemType.Constant_Omega],
                config.ProjectItemsMap[SowfaProjectItemType.Constant_TransportProperties],
                config.ProjectItemsMap[SowfaProjectItemType.Constant_TurbinesProperties],
                config.ProjectItemsMap[SowfaProjectItemType.Constant_AblProperties],

                config.ProjectItemsMap[SowfaProjectItemType.WP_controlDict],
                config.ProjectItemsMap[SowfaProjectItemType.WP_changeDict],
                config.ProjectItemsMap[SowfaProjectItemType.WP_setFieldsAblDict],
                config.ProjectItemsMap[SowfaProjectItemType.System_Schemes],
                config.ProjectItemsMap[SowfaProjectItemType.System_Solution],

                config.ProjectItemsMap[SowfaProjectItemType.WP_0_pd],
                config.ProjectItemsMap[SowfaProjectItemType.WP_0_T],
                config.ProjectItemsMap[SowfaProjectItemType.WP_0_U],
            });
        }
示例#2
0
        public AblPisoSolver()
        {
            SkipStandalone = true;
            Order          = 41;
            var config = new SowfaProjectConfiguration();

            ProductType = ProductType.CFD;
            Name        = "ABL PISO Solver";
            Code        = ProductCode.Sowfa_AblPiso;
            Description =
                @"A large-eddy simulation (LES) solver for computing atmospheric boundary layer turbulent flow with the ability to specify surface roughness, stability, and wind speed and direction. It must be used with  hexahedral meshes (like those created by OpenFOAM's blockMesh utility)";
            DefaultItems.AddRange(new[]
            {
                config.ProjectItemsMap[SowfaProjectItemType.ABL_Geometry],
                config.ProjectItemsMap[SowfaProjectItemType.ABL_GeneralSettings],

                config.ProjectItemsMap[SowfaProjectItemType.Constant_Gravitation],
                config.ProjectItemsMap[SowfaProjectItemType.Constant_Omega],
                config.ProjectItemsMap[SowfaProjectItemType.System_Solution],

                config.ProjectItemsMap[SowfaProjectItemType.ABL_TransportProperties],
                config.ProjectItemsMap[SowfaProjectItemType.ABL_AblProperties],
                config.ProjectItemsMap[SowfaProjectItemType.ABL_setFieldsAblDict],
                config.ProjectItemsMap[SowfaProjectItemType.ABL_controlDict_1],
                config.ProjectItemsMap[SowfaProjectItemType.ABL_controlDict_2],
                config.ProjectItemsMap[SowfaProjectItemType.ABL_Schemes],

                config.ProjectItemsMap[SowfaProjectItemType.ABL_0_pd],
                config.ProjectItemsMap[SowfaProjectItemType.ABL_0_T],
                config.ProjectItemsMap[SowfaProjectItemType.ABL_0_U],
            });
        }
示例#3
0
        public AblGeometryAndMesh()
        {
            Order = 2;
            var config = new SowfaProjectConfiguration();

            Category    = ProjectCategory.SOWFA;
            Name        = "ABL Geometry & Mesh";
            Code        = ProjectCode.SowfaGeometyAndMesh;
            Description =
                @"A convenient geometry and mesh generator for Atmospheric Boundary Layer (ABL) based on blockMesh utility.";

            DefaultItems.AddRange(new[]
            {
                config.ProjectItemsMap[SowfaProjectItemType.Preprocessor_AblGeometry],
                config.ProjectItemsMap[SowfaProjectItemType.Preprocessor_AblMesh]
            });
        }
示例#4
0
        public OpenFoamDescriptor()
        {
            Order = 1;
            var config = new OpenFoamConfiguration();

            ProductType = ProductType.CFD;
            Name        = "OpenFOAM";
            Code        = ProductCode.CFD_OpenFoam;
            Description = @"icoFoam solves the incompressible laminar Navier-Stokes equations using the PISO algorithm.<LineBreak/>The code is inherently transient, requiring an initial condition (such as zero velocity) and boundary conditions. The icoFOAM code can take mesh non-orthogonality into account with successive non-orthogonality iterations.<LineBreak/>The number of PISO corrections and non-orthogonality corrections are controlled through user input. ";
            DefaultItems.AddRange(new[]
            {
                config.ProjectItemsMap[OpenFoamItemType.Initial_p],
                config.ProjectItemsMap[OpenFoamItemType.Initial_U],
                config.ProjectItemsMap[OpenFoamItemType.Constant_TransportProperties],
                config.ProjectItemsMap[OpenFoamItemType.System_ControlDict],
                config.ProjectItemsMap[OpenFoamItemType.System_Schemes],
                config.ProjectItemsMap[OpenFoamItemType.System_Solution],
            });
        }
示例#5
0
        public FastPisoSolver()
        {
            Order = 4;
            var config = new SowfaProjectConfiguration();

            ProductType = ProductType.CFD;
            Name        = "FAST PISO Solver";
            Code        = ProductCode.Sowfa_PisoFast;
            Description = @"An incompressible Navier-Stokes LES solver (no temperature equation) with the actuator line turbine model coupled to NREL's FAST aeroelastic and turbine system dynamics code.";
            DefaultItems.AddRange(new[]
            {
                config.ProjectItemsMap[SowfaProjectItemType.Constant_LesProperties],
                config.ProjectItemsMap[SowfaProjectItemType.Constant_TransportProperties],
                config.ProjectItemsMap[SowfaProjectItemType.Constant_TurbineArrayProperties],
                config.ProjectItemsMap[SowfaProjectItemType.Constant_TurbulenceProperties],
                config.ProjectItemsMap[SowfaProjectItemType.FAST_controlDict],
                config.ProjectItemsMap[SowfaProjectItemType.System_Schemes],
                config.ProjectItemsMap[SowfaProjectItemType.System_Solution],
                config.ProjectItemsMap[SowfaProjectItemType.FAST_0_nuSgs],
                config.ProjectItemsMap[SowfaProjectItemType.FAST_0_p],
                config.ProjectItemsMap[SowfaProjectItemType.FAST_0_U],
            });
        }
        public WindPlantPisoFastSolver()
        {
            Order = 6;
            var config = new SowfaProjectConfiguration();

            ProductType = ProductType.CFD;
            Name        = "Wind Plant PISO-FAST Solver";
            Code        = ProductCode.Sowfa_WindPlantPisoFast;
            Description = @"Like windPlantPisoSolver with FAST coupled to the actuator line turbine model.";
            DefaultItems.AddRange(new[]
            {
                config.ProjectItemsMap[SowfaProjectItemType.Constant_Gravitation],
                config.ProjectItemsMap[SowfaProjectItemType.Constant_Omega],
                config.ProjectItemsMap[SowfaProjectItemType.Constant_TransportProperties],
                config.ProjectItemsMap[SowfaProjectItemType.Constant_AblProperties],
                config.ProjectItemsMap[SowfaProjectItemType.WP_FAST_controlDict],
                config.ProjectItemsMap[SowfaProjectItemType.WP_changeDict],
                config.ProjectItemsMap[SowfaProjectItemType.System_Schemes],
                config.ProjectItemsMap[SowfaProjectItemType.System_Solution],
                config.ProjectItemsMap[SowfaProjectItemType.WP_FAST_0_pd],
                config.ProjectItemsMap[SowfaProjectItemType.WP_FAST_0_T],
                config.ProjectItemsMap[SowfaProjectItemType.WP_FAST_0_U],
            });
        }
示例#7
0
 public DefaultItem GetDefaultItem(CharacterGender gender, CostumeSlot slot, byte variation)
 {
     return(DefaultItems.FirstOrDefault(item =>
                                        item.Gender == gender && item.Variation == variation &&
                                        item.ItemNumber.SubCategory == (byte)slot));
 }
示例#8
0
        public void OnServerInit()
        {
            Logger.log(Logger.LogLevel.INFO, "######################## Initalise ########################");
            cursor = Cursor.getCursor();
            RandomManager.GetRandom();

            Test.Text3DTest.Init();



            ItemInit.Init();
            DefaultItems.Init();


            DayTime.Init();
            DayTime.setTime(0, 12, 0);


#if SSM_AI
            AI.AISystem.Init();
#endif
            DefaultWorld.Init();



            DamageScript.Init();



#if SSM_CHAT
            //chat = new Chat();
            //chat.Init();

            //important: register notification types for notification areas!
            NotificationManager.GetNotificationManager().AddNotificationArea(100, 100, 50, 8,
                                                                             new NotificationType[] { NotificationType.ChatMessage, NotificationType.ServerMessage,
                                                                                                      NotificationType.PlayerStatusMessage, NotificationType.MobsiMessage, NotificationType.Sound });
            CommandInterpreter.GetCommandInterpreter();
            Chat.GetChat();
            EventNotifier.GetEventNotifier();
#endif



            Modules.Init();



            //Modules.addModule(new Test.ListTestModule());


#if SSM_ACCOUNT
            AccountSystem accSystem = new AccountSystem();
            accSystem.Init();
#endif

#if SSM_WEB
            Web.http_server.Init();
#endif



            Logger.log(Logger.LogLevel.INFO, "###################### End Initalise ######################");
        }
        public static async void Receive(NetIncomingMessage message, string type)
        {
            switch (type)
            {
            // [MESSAGE STRUCTURE]
            // Index
            case Constants.OUTGAME.SET_PLAYERINDEX:
            {
                byte reason = 0;
                if (Global.peerGameUsers.TryGetValue(message.SenderConnection, out var user))
                {
                    int askedIndex = message.ReadByte();
                    if (user.ownedPlayers.ContainsKey(askedIndex))
                    {
                        user.currentPlayerIndex = askedIndex;

                        var netMsg = Server.CreateMessage("HEADER");
                        netMsg.Write(Constants.MESSAGETYPE.OUTGAME);
                        netMsg.Write(Constants.OUTGAME.SUCCESS_SETTINGPLAYERINDEX);
                        Server.SendMessage(netMsg, message.SenderConnection, NetDeliveryMethod.ReliableOrdered);

                        return;
                    }
                    else
                    {
                        reason = 1;
                        goto error;
                    }
                }
                else
                {
                    reason = 2;
                }

                error:
                {
                    var netMsg = Server.CreateMessage("HEADER");
                    netMsg.Write(Constants.MESSAGETYPE.OUTGAME);
                    netMsg.Write(Constants.OUTGAME.ERROR_SETTINGPLAYERINDEX);
                    netMsg.Write(reason);
                    Server.SendMessage(netMsg, message.SenderConnection, NetDeliveryMethod.ReliableOrdered);
                }

                break;
            }

            // [MESSAGE STRUCTURE]
            // MightyName
            case Constants.OUTGAME.GO_PLAYERCREATE:
            {
                byte reason = 0;
                if (Global.peerGameUsers.TryGetValue(message.SenderConnection, out var user))
                {
                    int?firstAvailable = Enumerable.Range(0, int.MaxValue)
                                         .Except(user.ownedPlayers.Keys)
                                         .FirstOrDefault();
                    Console.WriteLine(firstAvailable);

                    if (firstAvailable == null)
                    {
                        reason = 1;
                        goto error;
                    }

                    user.currentPlayerIndex = firstAvailable.Value;

                    user.ownedPlayers[firstAvailable.Value] = new GamePlayer()
                    {
                        MightyName = message.ReadString(),
                        User       = user,
                        wasCreated = false
                    };

                    if (user.ownedPlayers[user.currentPlayerIndex].MightyName != null ||
                        user.ownedPlayers[user.currentPlayerIndex].MightyName.Length <= 0)
                    {
                        user.ownedPlayers[user.currentPlayerIndex].wasCreated = true;
                    }

                    GamePlayer player       = user.ownedPlayers[user.currentPlayerIndex];
                    byte[]     objSeralized = null;

                    player.EntitiesInPossession = new List <EntityData>();
                    player.Inventory            = DefaultItems.ToArray();

                    player.EntitiesInPossession.Add(new EntityData()
                        {
                            SchemeID             = "#uberheroarmy[uberhero,0]",
                            ServerID             = 0,
                            CurrentClass         = Constants.PlayerClass.Taterazay,
                            CurrentRarepon       = Constants.PlayerRarepon.Default,
                            RareponsInPossession = new Dictionary <string, int>(),
                            Type = EntityData.EntityDataType.Chef,
                            ClassesInPossession = new Dictionary <string, ClassDataInfo>()
                            {
                                { Constants.PlayerClass.Taterazay, new ClassDataInfo(1563, new [] { _DefaultHelmIndex, _DefaultSwordIndex, _DefaultShieldIndex }, player) },
                                { Constants.PlayerClass.Yarida, new ClassDataInfo(0, new [] { _DefaultHelmIndex, _DefaultSpearIndex }, player) },
                                { Constants.PlayerClass.Yumiyacha, new ClassDataInfo(0, new [] { _DefaultHelmIndex, _DefaultBowIndex }, player) },
                                { Constants.PlayerClass.Shurika, new ClassDataInfo(0, new [] { _DefaultHelmIndex, _DefaultBigShurikenIndex }, player) },
                            }
                        });
                    player.EntitiesInPossession.Add(new EntityData()
                        {
                            SchemeID            = ActorConstants.ACScheme.TateArmy + "[chef,0]",
                            ServerID            = 1,
                            CurrentClass        = Constants.PlayerClass.Taterazay,
                            CurrentRarepon      = Constants.PlayerRarepon.Default,
                            Type                = EntityData.EntityDataType.Chef,
                            ClassesInPossession = new Dictionary <string, ClassDataInfo>()
                            {
                                { Constants.PlayerClass.Taterazay, new ClassDataInfo(0, new [] { _DefaultHelmIndex, _DefaultSwordIndex, _DefaultShieldIndex }, player) }
                            }
                        });
                    player.EntitiesInPossession.Add(new EntityData()
                        {
                            SchemeID             = ActorConstants.ACScheme.TateArmy + "(unit,0)",
                            ServerID             = 2,
                            CurrentClass         = Constants.PlayerClass.Tatepon,
                            CurrentRarepon       = Constants.PlayerRarepon.Default,
                            Type                 = EntityData.EntityDataType.Unit,
                            ArmyIndex            = 0,
                            RareponsInPossession = new Dictionary <string, int>()
                            {
                                { Constants.PlayerRarepon.Default, 0 }
                            },
                            ClassesInPossession = new Dictionary <string, ClassDataInfo>()
                            {
                                { Constants.PlayerClass.Tatepon, new ClassDataInfo(0, new [] { _DefaultHelmIndex, _DefaultSwordIndex, _DefaultShieldIndex }, player) }
                            }
                        });

                    // [MESSAGE STRUCTURE]
                    // GAMEPLAYER
                    // GAMEPLAYER.SCHEME
                    // GAMEPLAYER.ARMYENTITIESINFO
                    // GAMEPLAYER.INVENTORY
                    // GAMEUSER.INDEX
                    var netMsg = Server.CreateMessage("HEADER");
                    netMsg.Write(Constants.MESSAGETYPE.OUTGAME);
                    netMsg.Write(Constants.OUTGAME.SUCCESS_CREATINGPLAYER);
                    netMsg.Write(player);

                    netMsg.Write(player.armyScheme = StandardArmyScheme);
                    objSeralized = player.EntitiesInPossession.ToArray().Serialize();
                    {
                        netMsg.Write(objSeralized.Length);
                        netMsg.Write(objSeralized);
                    }
                    objSeralized = player.Inventory.Serialize();
                    {
                        netMsg.Write(objSeralized.Length);
                        netMsg.Write(objSeralized);
                    }
                    netMsg.Write(user.currentPlayerIndex);
                    Server.SendMessage(netMsg, message.SenderConnection, NetDeliveryMethod.ReliableOrdered);

                    return;
                }
                else
                {
                    reason = 2;
                }

                error:
                {
                    var netMsg = Server.CreateMessage("HEADER");
                    netMsg.Write(Constants.MESSAGETYPE.OUTGAME);
                    netMsg.Write(Constants.OUTGAME.ERROR_CREATINGPLAYER);
                    netMsg.Write(reason);
                    Server.SendMessage(netMsg, message.SenderConnection, NetDeliveryMethod.ReliableOrdered);
                }

                break;
            }

            // [MESSAGE STRUCTURE]
            // Get Type (0: total)
            case Constants.OUTGAME.GET_PLAYERINFO:
            {
                byte reason = 0;
                if (Global.peerGameUsers.TryGetValue(message.SenderConnection, out var user))
                {
                    if (!user.ownedPlayers.ContainsKey(user.currentPlayerIndex))
                    {
                        reason = 1;
                        goto error;
                    }

                    var getType = message.ReadByte();
                    if (getType == 0)
                    {
                        GamePlayer player        = null;
                        byte[]     objSerialized = null;
                        // [MESSAGE STRUCTURE]
                        // GAMEPLAYER
                        // GAMEPLAYER.SCHEME
                        // GAMEPLAYER.ARMYENTITIESINFO
                        // GAMEPLAYER.INVENTORY
                        var netMsg = Server.CreateMessage("HEADER");
                        netMsg.Write(Constants.MESSAGETYPE.OUTGAME);
                        netMsg.Write(Constants.OUTGAME.SUCCESS_GETTINGPLAYERINFO);
                        netMsg.Write(player = user.ownedPlayers[user.currentPlayerIndex]);

                        netMsg.Write(player.armyScheme = StandardArmyScheme);
                        netMsg.Write(player.EntitiesInPossession.Count);
                        foreach (var entity in player.EntitiesInPossession)
                        {
                            objSerialized = entity.Serialize();
                            netMsg.Write(objSerialized.Length);
                            netMsg.Write(objSerialized);

                            netMsg.Write(entity.ClassesInPossession.Count);
                            foreach (var c in entity.ClassesInPossession)
                            {
                                netMsg.Write(c.Key);
                                netMsg.Write(c.Value);
                            }
                        }
                        objSerialized = player.Inventory.Serialize();
                        {
                            netMsg.Write(objSerialized.Length);
                            netMsg.Write(objSerialized);
                        }
                        Server.SendMessage(netMsg, message.SenderConnection, NetDeliveryMethod.ReliableOrdered);

                        return;
                    }
                    else
                    {
                        reason = 2;
                        goto error;
                    }
                }
                else
                {
                    reason = 3;
                }

                error:
                {
                    var netMsg = Server.CreateMessage("HEADER");
                    netMsg.Write(Constants.MESSAGETYPE.OUTGAME);
                    netMsg.Write(Constants.OUTGAME.ERROR_GETTINGPLAYERINFO);
                    netMsg.Write(reason);
                    Server.SendMessage(netMsg, message.SenderConnection, NetDeliveryMethod.ReliableOrdered);
                }

                break;
            }

            // [MESSAGE STRUCTURE]
            // EMPTY
            case Constants.OUTGAME.GET_SAVESDATA:
            {
                byte reason = 0;
                if (Global.peerGameUsers.TryGetValue(message.SenderConnection, out var user))
                {
                    var netMsg = Server.CreateMessage("HEADER");
                    netMsg.Write(Constants.MESSAGETYPE.OUTGAME);
                    netMsg.Write(Constants.OUTGAME.SUCCESS_GETTINGSAVESDATA);

                    var objSerialized = user.SavesData.Serialize();
                    {
                        netMsg.Write(objSerialized.Length);
                        netMsg.Write(objSerialized);
                    }

                    Server.SendMessage(netMsg, message.SenderConnection, NetDeliveryMethod.ReliableOrdered);

                    return;
                }
                else
                {
                    reason = 1;
                    goto error;
                }

                error:
                {
                    var netMsg = Server.CreateMessage("HEADER");
                    netMsg.Write(Constants.MESSAGETYPE.OUTGAME);
                    netMsg.Write(Constants.OUTGAME.ERROR_GETTINGSAVESDATA);
                    netMsg.Write(reason);
                    Server.SendMessage(netMsg, message.SenderConnection, NetDeliveryMethod.ReliableOrdered);
                }

                break;
            }

            case Constants.OUTGAME.UPDATE_SAVEDATA:
            {
                byte reason = 0;
                if (Global.peerGameUsers.TryGetValue(message.SenderConnection, out var user))
                {
                    var index          = message.ReadInt32();
                    var newName        = message.ReadString();
                    var currentMission = message.ReadString();
                    var lastTime       = new DateTime(message.ReadInt64());

search:
                    if (user.SavesData.TryGetValue(index, out var save))
                    {
                        save.Index          = index;
                        save.MightyName     = newName;
                        save.LastMission    = currentMission;
                        save.UserLogin      = user.login;
                        save.LastTimePlayed = lastTime;

                        user.SavesData[index] = save;
                    }
                    else
                    {
                        save = new PataponPhotonShared.Structs.SaveData();
                        user.SavesData[index] = save;
                        goto search;
                    }

                    var netMsg = Server.CreateMessage("HEADER");
                    netMsg.Write(Constants.MESSAGETYPE.OUTGAME);
                    netMsg.Write(Constants.OUTGAME.SUCCESS_UPDATINGSAVEDATA);
                    Server.SendMessage(netMsg, message.SenderConnection, NetDeliveryMethod.ReliableOrdered);

                    return;
                }
                else
                {
                    reason = 1;
                    goto error;
                }

                error:
                {
                    var netMsg = Server.CreateMessage("HEADER");
                    netMsg.Write(Constants.MESSAGETYPE.OUTGAME);
                    netMsg.Write(Constants.OUTGAME.ERROR_UPDATINGSAVEDATA);
                    netMsg.Write(reason);
                    Server.SendMessage(netMsg, message.SenderConnection, NetDeliveryMethod.ReliableOrdered);
                }

                break;
            }

            case Constants.OUTGAME.UPDATE_ENTITYDATA:
            {
                if (Global.peerGameUsers.TryGetValue(message.SenderConnection, out var user))
                {
                    int entityID = message.ReadInt32();
                    if (user.ownedPlayers.TryGetValue(user.currentPlayerIndex, out var player))
                    {
                        EntityData entity;
                        if ((entity = player.EntitiesInPossession.ElementAtOrDefault(entityID)) != null)
                        {
                            var newData = message.ReadBytes(message.ReadInt32()).Deserialize <EntityData>();

                            if (entity.ClassesInPossession.TryGetValue(newData.CurrentClass, out var entity_class))
                            {
                                entity.CurrentClass = newData.CurrentClass;
                            }
                            if (entity.RareponsInPossession.ContainsKey(newData.CurrentRarepon))
                            {
                                entity.CurrentRarepon = newData.CurrentRarepon;
                            }

                            byte[] objSerialized = new byte[0];

                            // [MESSAGE STRUCTURE]
                            // NewMade EntityData
                            var netMsg = Program.Server.CreateMessage("HEADER");
                            netMsg.Write(Constants.MESSAGETYPE.OUTGAME);
                            netMsg.Write(Constants.OUTGAME.EVENT_ON_RECEIVEENTITYDATA);
                            objSerialized = entity.Serialize();
                            {
                                netMsg.Write(objSerialized.Length);
                                netMsg.Write(objSerialized);
                            }

                            netMsg.Write(entity.ClassesInPossession.Count);
                            foreach (var c in entity.ClassesInPossession)
                            {
                                netMsg.Write(c.Key);
                                netMsg.Write(c.Value);
                            }

                            Program.Server.SendMessage(netMsg, message.SenderConnection, NetDeliveryMethod.ReliableOrdered);

                            // Send to the gameserver'room' (if exist)
                            // [MESSAGE STRUCTURE]
                            // NewMade EntityData
                            if (user.currentRoom != null)
                            {
                                netMsg = Program.Server.CreateMessage("HEADER");
                                netMsg.Write(Constants.MESSAGETYPE.OUTGAME);
                                netMsg.Write(Constants.OUTGAME.EVENT_ON_UPDATEONLINEENTITY);
                                netMsg.Write(user.login);
                                objSerialized = entity.Serialize();
                                {
                                    netMsg.Write(objSerialized.Length);
                                    netMsg.Write(objSerialized);
                                }

                                // GameServer will not care about ArmyIndex

                                Program.Server.SendMessage(netMsg, (NetConnection)user.currentRoom.netConnection, NetDeliveryMethod.ReliableOrdered);
                            }
                        }
                    }
                }
                break;
            }

            case Constants.OUTGAME.GET_FINALLOADOUTOFALL:
            {
                if (!(message.SenderConnection.Tag is object[]))
                {
                    return;
                }
                var requestType = (string)((object[])message.SenderConnection.Tag)[0];
                if (requestType == "GAMEROOM")
                {
                    foreach (var playerLogin in ((GameRoom)((object[])message.SenderConnection.Tag)[1]).playersIn)
                    {
                        if (string.IsNullOrEmpty(playerLogin))
                        {
                            continue;
                        }
                        if (Global.users.TryGetValue(playerLogin, out var user))
                        {
                            var sendMsg = Program.Server.CreateMessage("HEADER");
                            sendMsg.Write(Constants.MESSAGETYPE.OUTGAME);
                            sendMsg.Write(Constants.OUTGAME.EVENT_ON_RECEIVEFINALLOADOUT);

                            var player = user.ownedPlayers[user.currentPlayerIndex];
                            sendMsg.Write(user.login);
                            var objSerialized = player.EntitiesInPossession.ToArray().Serialize();
                            sendMsg.Write(objSerialized.Length);
                            sendMsg.Write(objSerialized);

                            Program.Server.SendMessage(sendMsg, message.SenderConnection, NetDeliveryMethod.ReliableOrdered);
                        }
                    }
                }

                break;
            }

            case Constants.OUTGAME.GO_CHANGEBASEMENT:
            {
                if (Global.peerGameUsers.TryGetValue(message.SenderConnection, out var user))
                {
                    if (user.currentRoom != null)
                    {
                        return;
                    }
                    else
                    {
                        var sendMsg = Program.Server.CreateMessage("HEADER");
                        sendMsg.Write(Constants.MESSAGETYPE.OUTGAME);
                        sendMsg.Write(Constants.OUTGAME.EVENT_ON_CHANGEBASEMENT);
                        sendMsg.Write(message.ReadString());
                        Program.Server.SendMessage(sendMsg, message.SenderConnection, NetDeliveryMethod.ReliableOrdered);
                    }
                }
                break;
            }
            }
        }