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); } }
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); }