public static void SendGFCompleteCharList(Player player, uint roomid)
        {
            player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_GFCOMPLETECHARLIST");

            // Send the player 'trent' character
            uint charid = 1;

            SendPlayerGFUpdateChar(player, roomid, charid++);

            // Send the barman, dealers, etc. These have fixed locations and
            // fidget scripts
            foreach (BaseCharacter ch in player.Ship.Basedata.Chars.Values)
            {
                if (ch.RoomID == roomid && ch.Type != null)
                {
                    SendNPCGFUpdateChar(player, ch, charid);
                    SendNPCGFUpdateScripts(player, ch, charid);
                    charid++;
                }
            }

            // Send the barflies

            // Send "char list complete message"
            {
                byte[] omsg = { 0x0f, 0x02 };
                FLMsgType.AddUInt32(ref omsg, roomid);
                player.SendMsgToClient(omsg);
            }
        }
        /// <summary>
        ///     FLPACKET_SERVER_CREATELOOT
        /// </summary>
        /// <param name="player"></param>
        /// <param name="parentShip"></param>
        /// <param name="loot"></param>
        public static void SendCreateLoot(Player player, Old.Object.Ship.Ship parentShip, Old.Object.Loot loot)
        {
            player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_CREATELOOT parent objid={0} loot objid={1}",
                              parentShip.Objid,
                              loot.Objid);

            byte[] omsg = { 0x28, 0x02 };
            FLMsgType.AddUInt32(ref omsg, parentShip.Objid); //TODO: Figure out if parent is necessary / what it means
            FLMsgType.AddInt8(ref omsg, 5);                  //TODO: Reverse meaning
            FLMsgType.AddInt8(ref omsg, 1);                  //Array size seems to always be one, needs further investigation
            //Array starts, length is count above
            FLMsgType.AddUInt32(ref omsg, loot.Objid);
            FLMsgType.AddUInt16(ref omsg, loot.LootContent.SmallID);
            FLMsgType.AddFloat(ref omsg, loot.LootContentHealth * loot.LootContent.HitPts);
            FLMsgType.AddUInt16(ref omsg, loot.LootContentQuantity);
            FLMsgType.AddUInt16(ref omsg, loot.Arch.SmallID); //Usually a loot crate
            FLMsgType.AddFloat(ref omsg, loot.Health * loot.Arch.HitPts);
            FLMsgType.AddFloat(ref omsg, 0.0f);               //TODO: Reverse meaning
            FLMsgType.AddFloat(ref omsg, (float)loot.Position.x);
            FLMsgType.AddFloat(ref omsg, (float)loot.Position.y);
            FLMsgType.AddFloat(ref omsg, (float)loot.Position.z);
            FLMsgType.AddUInt8(ref omsg, loot.MissionFlag1 ? 1u : 0u);
            FLMsgType.AddUInt8(ref omsg, loot.MissionFlag2 ? 1u : 0u);
            player.SendMsgToClient(omsg);
        }
 /// <summary>
 ///     FLPACKET_SERVER_SETEQUIPMENT
 /// </summary>
 /// <param name="player"></param>
 /// <param name="items"></param>
 public static void SendSetEquipment(Player player, Dictionary <uint, ShipItem> items)
 {
     player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_SETEQUIPMENT count={0}", items.Count);
     byte[] omsg = { 0x24, 0x02 };
     FLMsgType.AddUInt16(ref omsg, (uint)items.Count);
     foreach (ShipItem item in items.Values)
     {
         FLMsgType.AddUInt32(ref omsg, item.count);
         FLMsgType.AddFloat(ref omsg, item.health);
         FLMsgType.AddUInt32(ref omsg, item.arch.ArchetypeID);
         FLMsgType.AddUInt16(ref omsg, item.hpid);
         FLMsgType.AddUInt16(ref omsg, (item.mounted ? 1u : 0u));
         if (item.hpname.Length > 0)
         {
             FLMsgType.AddAsciiStringLen16(ref omsg, item.hpname + "\0");
         }
         else if (item.mounted)
         {
             FLMsgType.AddAsciiStringLen16(ref omsg, "");
         }
         else
         {
             FLMsgType.AddAsciiStringLen16(ref omsg, "BAY\0");
         }
     }
     player.SendMsgToClient(omsg);
 }
        public static void SendNPCGFUpdateChar(Player player, BaseCharacter ch, uint charid)
        {
            byte[] omsg = { 0x26, 0x02 };

            FLMsgType.AddUInt32(ref omsg, 68 + (uint)ch.FidgetScript.Length + (uint)ch.RoomLocation.Length);
            FLMsgType.AddUInt32(ref omsg, charid);
            FLMsgType.AddUInt32(ref omsg, 0);                    // 1 = player, 0 = npc
            FLMsgType.AddUInt32(ref omsg, ch.RoomID);
            FLMsgType.AddUInt32(ref omsg, ch.IndividualName);    // npc name
            FLMsgType.AddUInt32(ref omsg, ch.Faction.FactionID); // faction
            FLMsgType.AddInt32(ref omsg, -1);
            FLMsgType.AddUInt32(ref omsg, ch.Head);
            FLMsgType.AddUInt32(ref omsg, ch.Body);
            FLMsgType.AddUInt32(ref omsg, ch.Lefthand);
            FLMsgType.AddUInt32(ref omsg, ch.Righthand);
            FLMsgType.AddUInt32(ref omsg, 0);      // accessories count + list
            FLMsgType.AddAsciiStringLen32(ref omsg, ch.FidgetScript);
            FLMsgType.AddUInt32(ref omsg, charid); // behaviourid

            if (ch.RoomLocation.Length == 0)
            {
                FLMsgType.AddInt32(ref omsg, -1);
            }
            else
            {
                FLMsgType.AddAsciiStringLen32(ref omsg, ch.RoomLocation);
            }

            FLMsgType.AddUInt32(ref omsg, 0x00);     // 1 = player, 0 = npc
            FLMsgType.AddUInt32(ref omsg, 0x00);     // 1 = sitlow, 0 = stand
            FLMsgType.AddUInt32(ref omsg, ch.Voice); // voice

            player.SendMsgToClient(omsg);
        }
        public static void SendServerRequestReturned(Player player, Old.Object.Ship.Ship ship, DockingObject dockingObj)
        {
            player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_REQUEST_RETURNED");

            byte[] omsg = { 0x44, 0x02 };
            FLMsgType.AddUInt32(ref omsg, ship.Objid);
            if (dockingObj != null)
            {
                if (dockingObj.Type == DockingPoint.DockingSphere.TRADELANE_RING)
                {
                    FLMsgType.AddUInt8(ref omsg, 2); // type? 0 is used for docking, 1 for something? else
                }
                else
                {
                    FLMsgType.AddUInt8(ref omsg, 0);            // type? 0 is used for docking, 1 for something? else
                }
                FLMsgType.AddUInt8(ref omsg, 4);                // 4 = dock, 3 = wait, 5 = denied?
                FLMsgType.AddUInt8(ref omsg, dockingObj.Index); // docking point
            }
            else
            {
                FLMsgType.AddUInt8(ref omsg, 0); // type? 0 is used for docking, 1 for something? else
                FLMsgType.AddUInt8(ref omsg, 0);
                // Response: 5 is dock, 0 is denied target hostile, 2 is denied too big (hostile takes priority), 3 is queue, 4 is proceed after queue; 0, 1 don't actually give a message, 2 gives a generic "denied" message
                FLMsgType.AddUInt8(ref omsg, 255); // docking point
            }
            player.SendMsgToClient(omsg);
        }
        /// <summary>
        ///     FLPACKET_SERVER_SYSTEM_SWITCH_IN
        /// Send when client arrives to the system.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="ship"></param>
        public static void SendSystemSwitchIn(Player player, Old.Object.Ship.Ship ship)
        {
            player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_SYSTEM_SWITCH_IN objid={0}", ship.Objid);

            byte[] omsg = { 0x22, 0x02 };
            FLMsgType.AddUInt32(ref omsg, ship.Objid);
            FLMsgType.AddUInt32(ref omsg, 64);
            FLMsgType.AddFloat(ref omsg, (float)ship.Position.x);
            FLMsgType.AddFloat(ref omsg, (float)ship.Position.y);
            FLMsgType.AddFloat(ref omsg, (float)ship.Position.z);

            Quaternion q = Quaternion.MatrixToQuaternion(ship.Orientation);

            FLMsgType.AddFloat(ref omsg, (float)q.W);
            FLMsgType.AddFloat(ref omsg, (float)q.I);
            FLMsgType.AddFloat(ref omsg, (float)q.J);
            FLMsgType.AddFloat(ref omsg, (float)q.K);

            player.SendMsgToClient(omsg);

            SendMiscObjUpdate(player, Player.MiscObjUpdateType.SYSTEM, player.FLPlayerID, player.Ship.System.SystemID);

            SendMiscObjUpdate(player, Player.MiscObjUpdateType.UNK3, player.Ship.Objid);
            SendMiscObjUpdate(player, Player.MiscObjUpdateType.UNK2, player.Ship.Objid);
        }
        /// <summary>
        ///     FLPACKET_COMMON_REQUEST_PLAYER_STATS
        /// </summary>
        /// <param name="player"></param>
        public static void SendPlayerStats(Player player)
        {
            player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_COMMON_REQUEST_PLAYER_STATS");

            byte[] omsg = { 0x18, 0x01 };
            FLMsgType.AddInt32(ref omsg, (13 * 4) + (player.Ship.Reps.Count * 8) + (player.Kills.Count * 8)); //

            FLMsgType.AddUInt32(ref omsg, 4);                                                                 // rm_completed
            FLMsgType.AddUInt32(ref omsg, 0);                                                                 // u_dword
            FLMsgType.AddUInt32(ref omsg, 2);                                                                 // rm_failed
            FLMsgType.AddUInt32(ref omsg, 0);                                                                 // u_dword
            FLMsgType.AddFloat(ref omsg, 10000.0f);                                                           // total_time_played
            FLMsgType.AddUInt32(ref omsg, 6);                                                                 // systems_visited
            FLMsgType.AddUInt32(ref omsg, 5);                                                                 // bases_visited
            FLMsgType.AddUInt32(ref omsg, 4);                                                                 // holes_visited
            FLMsgType.AddInt32(ref omsg, player.Kills.Count);                                                 // kills_cnt
            FLMsgType.AddUInt32(ref omsg, player.Ship.Rank);                                                  // rank
            FLMsgType.AddUInt32(ref omsg, (UInt32)player.Money);                                              // current_worth
            FLMsgType.AddUInt32(ref omsg, 0);                                                                 // dunno
            FLMsgType.AddInt32(ref omsg, player.Ship.Reps.Count);
            foreach (var pi in player.Kills)
            {
                FLMsgType.AddUInt32(ref omsg, pi.Key);
                FLMsgType.AddUInt32(ref omsg, pi.Value);
            }
            foreach (var pi in player.Ship.Reps)
            {
                FLMsgType.AddUInt32(ref omsg, pi.Key.FactionID);
                FLMsgType.AddFloat(ref omsg, pi.Value);
            }

            player.SendMsgToClient(omsg);
        }
        /// <summary>
        ///     FLPACKET_SERVER_SETADDITEM
        /// </summary>
        /// <param name="player"></param>
        /// <param name="goodid"></param>
        /// <param name="hpid"></param>
        /// <param name="count"></param>
        /// <param name="health"></param>
        /// <param name="mounted"></param>
        /// <param name="hpname"></param>
        public static void SendAddItem(Player player, uint goodid, uint hpid, uint count, float health, bool mounted,
                                       string hpname)
        {
            player.Log.AddLog(LogType.FL_MSG,
                              "tx FLPACKET_SERVER_SETADDITEM goodid={0} hpid={1} count={2} health={3} mounted={4} hpname={5}",
                              goodid, hpid, count, health, mounted, hpname);

            byte[] omsg = { 0x2E, 0x02 };
            FLMsgType.AddUInt32(ref omsg, goodid);
            FLMsgType.AddUInt32(ref omsg, hpid);
            FLMsgType.AddUInt32(ref omsg, count);
            FLMsgType.AddFloat(ref omsg, health);
            FLMsgType.AddUInt32(ref omsg, (mounted ? 1u : 0u));
            FLMsgType.AddUInt16(ref omsg, 0);
            if (hpname.Length > 0)
            {
                FLMsgType.AddAsciiStringLen32(ref omsg, hpname + "\0");
            }
            else if (mounted)
            {
                FLMsgType.AddAsciiStringLen32(ref omsg, "");
            }
            else
            {
                FLMsgType.AddAsciiStringLen32(ref omsg, "BAY\0");
            }

            player.SendMsgToClient(omsg);
        }
 /// <summary>
 ///     FLPACKET_SERVER_GFMISSIONVENDORWHYEMPTY
 /// </summary>
 /// <param name="player"></param>
 public static void SendGFMissionVendorWhyEmpty(Player player)
 {
     player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_GFMISSIONVENDORWHYEMPTY");
     byte[] omsg = { 0x5a, 0x02 };
     FLMsgType.AddUInt8(ref omsg, 0); // reason
     player.SendMsgToClient(omsg);
 }
 /// <summary>
 ///     FLPACKET_SERVER_SETSTARTROOM
 /// </summary>
 /// <param name="player"></param>
 /// <param name="baseid"></param>
 /// <param name="roomid"></param>
 public static void SendSetStartRoom(Player player, uint baseid, uint roomid)
 {
     player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_SETSTARTROOM");
     byte[] omsg = { 0x0d, 0x02 };
     FLMsgType.AddUInt32(ref omsg, baseid);
     FLMsgType.AddUInt32(ref omsg, roomid);
     player.SendMsgToClient(omsg);
 }
        public static void SendGFCompleteAmbientScriptList(Player player, uint roomid)
        {
            player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_GFCOMPLETEAMBIENTSCRIPTLIST");

            byte[] omsg = { 0x13, 0x02 };
            FLMsgType.AddUInt32(ref omsg, roomid);
            player.SendMsgToClient(omsg);
        }
 /// <summary>
 ///     FLPACKET_SERVER_REQUESTCREATESHIPRESP
 /// </summary>
 /// <param name="playerto"></param>
 /// <param name="ship"></param>
 public static void SendCreateShipResponse(Player playerto, Old.Object.Ship.Ship ship)
 {
     playerto.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_REQUESTCREATESHIPRESP objid={0}", ship.Objid);
     byte[] omsg = { 0x27, 0x02 };
     FLMsgType.AddUInt8(ref omsg, 1); // dunno
     FLMsgType.AddUInt32(ref omsg, ship.Objid);
     playerto.SendMsgToClient(omsg);
 }
        /// <summary>
        ///     FLPACKET_SERVER_GFCOMPLETEMISSIONCOMPUTERLIST
        /// </summary>
        /// <param name="player"></param>
        /// <param name="baseid"></param>
        public static void SendGFCompleteMissionComputerList(Player player, uint baseid)
        {
            player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_GFCOMPLETEMISSIONCOMPUTERLIST");

            byte[] omsg = { 0x10, 0x02 };
            FLMsgType.AddUInt32(ref omsg, baseid);
            player.SendMsgToClient(omsg);
        }
        /// <summary>
        ///     FLPACKET_SERVER_SETHULLSTATUS
        /// </summary>
        /// <param name="playerto"></param>
        /// <param name="ship"></param>
        public static void SendSetHullStatus(Player playerto, Old.Object.Ship.Ship ship)
        {
            playerto.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_SETHULLSTATUS objid={0}", ship.Objid);

            byte[] omsg = { 0x49, 0x02 };
            FLMsgType.AddFloat(ref omsg, ship.Health);
            playerto.SendMsgToClient(omsg);
        }
        public static void SendSetInterfaceState(Player player)
        {
            player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_COMMON_SET_INTERFACE_STATE");

            byte[] omsg = { 0x1c, 0x01 };
            FLMsgType.AddUInt32(ref omsg, 1); // cnt
            FLMsgType.AddUInt32(ref omsg, 3); // state 3
            player.SendMsgToClient(omsg);
        }
 /// <summary>
 ///     FLPACKET_SERVER_SETREMOVEITEM
 /// </summary>
 /// <param name="player"></param>
 /// <param name="item"></param>
 public static void SendRemoveItem(Player player, ShipItem item)
 {
     player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_SETREMOVEITEM hpid={0}", item.hpid);
     byte[] omsg = { 0x2F, 0x02 };
     FLMsgType.AddUInt32(ref omsg, item.hpid);
     FLMsgType.AddUInt32(ref omsg, 0);
     FLMsgType.AddUInt32(ref omsg, 0);
     player.SendMsgToClient(omsg);
 }
 /// <summary>
 ///     Send a chat message to the client.
 /// </summary>
 /// <param name="player"></param>
 /// <param name="command"></param>
 public static void SendChat(Player player, byte[] command)
 {
     byte[] omsg = { 0x05, 0x01 };
     FLMsgType.AddInt32(ref omsg, command.Length);
     FLMsgType.AddArray(ref omsg, command);
     FLMsgType.AddUInt32(ref omsg, 0);
     FLMsgType.AddUInt32(ref omsg, 0);
     player.SendMsgToClient(omsg);
 }
        /// <summary>
        ///     FLPACKET_SERVER_CHARSELECTVERIFIED
        /// </summary>
        /// <param name="player"></param>
        public static void SendCharSelectVerified(Player player)
        {
            player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_CHARSELECTVERIFIED");

            byte[] omsg = { 0x08, 0x02 };
            FLMsgType.AddUInt32(ref omsg, player.FLPlayerID);
            FLMsgType.AddDouble(ref omsg, player.Runner.GameTime());
            player.SendMsgToClient(omsg);
        }
 public static void SendPopupDialog(Player player, FLFormatString caption, FLFormatString message,
                                    Player.PopupDialogButtons buttons)
 {
     byte[] omsg = { 0x1B, 0x01 };
     player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_COMMON_POP_UP_DIALOG");
     FLMsgType.AddArray(ref omsg, caption.GetBytes());
     FLMsgType.AddArray(ref omsg, message.GetBytes());
     FLMsgType.AddUInt32(ref omsg, (uint)buttons);
     player.SendMsgToClient(omsg);
 }
        public static void SendSetMissionLog(Player player)
        {
            player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_COMMON_SET_MISSION_LOG");

            byte[] omsg = { 0x19, 0x01 };
            FLMsgType.AddUInt32(ref omsg, 8); // cnt * 4
            FLMsgType.AddUInt32(ref omsg, 1); // 1
            FLMsgType.AddUInt32(ref omsg, 0); // 0
            player.SendMsgToClient(omsg);
        }
 /// <summary>
 /// </summary>
 /// <param name="player"></param>
 public static void SendInitSetReputation(Player player)
 {
     byte[] omsg = { 0x29, 0x02 };
     player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_SETREPUTATION self");
     FLMsgType.AddUInt8(ref omsg, 0x01);
     FLMsgType.AddUInt32(ref omsg, player.FLPlayerID);
     FLMsgType.AddUInt32(ref omsg, 0);
     FLMsgType.AddFloat(ref omsg, 0); // rep
     player.SendMsgToClient(omsg);
 }
        /// <summary>
        ///     FLPACKET_SERVER_SYSTEM_SWITCH_OUT
        /// </summary>
        /// <param name="player"></param>
        /// <param name="ship"></param>
        /// <param name="solar"></param>
        public static void SendSystemSwitchOut(Player player, Old.Object.Ship.Ship ship, Object.Solar.Solar solar)
        {
            player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_SYSTEM_SWITCH_OUT objid={0} solar={1}", ship.Objid,
                              solar.Objid);

            byte[] omsg = { 0x21, 0x02 };
            FLMsgType.AddUInt32(ref omsg, ship.Objid);
            FLMsgType.AddUInt32(ref omsg, solar.Objid);
            player.SendMsgToClient(omsg);
        }
        public static void SendGFCompleteScriptBehaviourList(Player player, uint roomid)
        {
            player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_GFCOMPLETESCRIPTBEHAVIORLIST");

            {
                byte[] omsg = { 0x11, 0x02 };
                FLMsgType.AddUInt32(ref omsg, roomid);
                player.SendMsgToClient(omsg);
            }
        }
        public static void SendChatCommand(Player player, Player.ChatCommand command, uint playerId)
        {
            byte[] omsg = { 0x05, 0x01, 0x08, 0x00, 0x00, 0x00 };

            FLMsgType.AddUInt32(ref omsg, (uint)command);
            FLMsgType.AddUInt32(ref omsg, playerId);
            FLMsgType.AddUInt32(ref omsg, player.FLPlayerID);
            FLMsgType.AddUInt32(ref omsg, 0x10004);

            player.SendMsgToClient(omsg);
        }
        /// <summary>
        ///     FLPACKET_SERVER_LAND
        /// </summary>
        /// <param name="player"></param>
        /// <param name="ship"></param>
        /// <param name="solarid"></param>
        /// <param name="baseid"></param>
        public static void SendServerLand(Player player, Old.Object.Ship.Ship ship, uint solarid, uint baseid)
        {
            player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_LAND objid={0} targetid={1} baseid={2}", ship.Objid,
                              solarid,
                              baseid);

            byte[] omsg = { 0x0B, 0x02 };
            FLMsgType.AddUInt32(ref omsg, ship.Objid);
            FLMsgType.AddUInt32(ref omsg, solarid);
            FLMsgType.AddUInt32(ref omsg, baseid);
            player.SendMsgToClient(omsg);
        }
        /// <summary>
        ///     FLPACKET_SERVER_USE_ITEM
        /// </summary>
        /// <param name="player"></param>
        /// <param name="objid"></param>
        /// <param name="hpid"></param>
        /// <param name="count"></param>
        public static void SendUseItem(Player player, uint objid, uint hpid, uint count)
        {
            player.Log.AddLog(LogType.FL_MSG, "tx[{0}] FLPACKET_SERVER_USE_ITEM objid={1} hpid={2} count={3}",
                              player.FLPlayerID,
                              objid, hpid, count);

            byte[] omsg = { 0x51, 0x02 };
            FLMsgType.AddUInt32(ref omsg, objid);
            FLMsgType.AddUInt16(ref omsg, hpid);
            FLMsgType.AddUInt16(ref omsg, count);
            player.SendMsgToClient(omsg);
        }
 /// <summary>
 ///     Send an update to the player list when a player has left the server.
 /// </summary>
 /// <param name="playerto"></param>
 /// <param name="player"></param>
 public static void SendPlayerListDepart(Player playerto, Player player)
 {
     playerto.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_PLAYERLIST playerid={0}", player.FLPlayerID);
     {
         byte[] omsg = { 0x52, 0x02 };
         FLMsgType.AddUInt32(ref omsg, 2); // command: 1 = new, 2 = depart
         FLMsgType.AddUInt32(ref omsg, player.FLPlayerID);
         FLMsgType.AddUInt8(ref omsg, 0);
         FLMsgType.AddUInt8(ref omsg, 0);
         playerto.SendMsgToClient(omsg);
     }
 }
Ejemplo n.º 28
0
        public void EnterState(Player.Player player)
        {
            // Send a connection acknowledgement to inform the client of the flplayerid.
            {
                // FLPACKET_SERVER_CONNECTRESPONSE
                byte[] omsg = { 0x01, 0x02 };
                FLMsgType.AddUInt32(ref omsg, player.FLPlayerID);
                player.SendMsgToClient(omsg);
            }

            Packets.SendMiscObjUpdate(player, Player.Player.MiscObjUpdateType.NEWS, player.Runner.Server.server_news);
        }
 /// <summary>
 ///     Send an update to the player list when a player has joined the server or selected a char
 /// </summary>
 public static void SendPlayerListJoin(Player playerto, Player player, bool hide)
 {
     playerto.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_PLAYERLIST playerid={0}", player.FLPlayerID);
     // Player list and character name
     {
         byte[] omsg = { 0x52, 0x02 };
         FLMsgType.AddUInt32(ref omsg, 1);                 // 1 = new, 2 = depart
         FLMsgType.AddUInt32(ref omsg, player.FLPlayerID); // player id
         FLMsgType.AddUInt8(ref omsg, hide ? 1u : 0u);     // hide 1 = yes, 0 = no
         FLMsgType.AddUnicodeStringLen8(ref omsg, player.Name + "\0");
         playerto.SendMsgToClient(omsg);
     }
 }
 /// <summary>
 ///     FLPACKET_SERVER_SETCASH
 /// </summary>
 /// <param name="player"></param>
 public static void SendSetMoney(Player player)
 {
     player.Log.AddLog(LogType.FL_MSG, "tx FLPACKET_SERVER_SETCASH money={0}", player.Money);
     byte[] omsg = { 0x30, 0x02 };
     if (player.Money > 2000000000)
     {
         FLMsgType.AddInt32(ref omsg, 2000000000);
     }
     else
     {
         FLMsgType.AddInt32(ref omsg, player.Money);
     }
     player.SendMsgToClient(omsg);
 }