public void ForceLand(string target) { World?.RemovePlayer(this); Base = target; client.SendPacket(new BaseEnterPacket() { Base = Base, Ship = Character.EncodeLoadout() }, NetDeliveryMethod.ReliableOrdered); }
public void ForceLand(string target) { World?.RemovePlayer(this); World = null; Base = target; Client.SendPacket(new BaseEnterPacket() { Base = Base, Ship = Character.EncodeLoadout(), RTCs = rtcs.ToArray() }, PacketDeliveryMethod.ReliableOrdered); }
Task <bool> IServerPlayer.SelectCharacter(int index) { if (index >= 0 && index < CharacterList.Count) { var sc = CharacterList[index]; FLLog.Info("Server", $"opening id {sc.Id}"); Character = NetCharacter.FromDb(sc.Id, Game); Name = Character.Name; rpcClient.UpdateBaselinePrices(Game.BaselineGoodPrices); rpcClient.UpdateInventory(Character.Credits, GetShipWorth(), Character.EncodeLoadout()); Base = Character.Base; System = Character.System; Position = Character.Position; if (Base != null) { PlayerEnterBase(); } else { SpaceInitialSpawn(null); } return(Task.FromResult(false)); } else { return(Task.FromResult(true)); } }
Task <bool> IServerPlayer.Unmount(string hardpoint) { if (BaseData == null) { FLLog.Error("Player", $"{Name} tried to unmount good while in space"); return(Task.FromResult(false)); } var equip = Character.Items.FirstOrDefault(x => hardpoint.Equals(x.Hardpoint, StringComparison.OrdinalIgnoreCase)); if (equip == null) { FLLog.Error("Player", $"{Name} tried to unmount empty hardpoint"); return(Task.FromResult(false)); } equip.Hardpoint = null; rpcClient.UpdateInventory(Character.Credits, GetShipWorth(), Character.EncodeLoadout()); return(Task.FromResult(true)); }
void ListAction(CharacterListActionPacket pkt) { switch (pkt.Action) { case CharacterListAction.RequestCharacterDB: { var m = server.NetServer.CreateMessage(); m.Write(new NewCharacterDBPacket() { Factions = server.GameData.Ini.NewCharDB.Factions, Packages = server.GameData.Ini.NewCharDB.Packages, Pilots = server.GameData.Ini.NewCharDB.Pilots }); server.NetServer.SendMessage(m, connection, NetDeliveryMethod.ReliableOrdered); break; } case CharacterListAction.SelectCharacter: { var m = server.NetServer.CreateMessage(); var sc = Account.Characters[pkt.IntArg]; Character = NetCharacter.FromDb(sc, server.GameData); Base = Character.Base; m.Write(new BaseEnterPacket() { Base = Character.Base, Ship = Character.EncodeLoadout() }); server.NetServer.SendMessage(m, connection, NetDeliveryMethod.ReliableOrdered); break; } case CharacterListAction.CreateNewCharacter: { var m = server.NetServer.CreateMessage(); var ac = new ServerCharacter() { Name = pkt.StringArg, Base = "li01_01_base", Credits = 2000, ID = 0, Ship = "ge_fighter" }; Account.Characters.Add(ac); m.Write(new AddCharacterPacket() { Character = NetCharacter.FromDb(ac, server.GameData).ToSelectable() }); server.NetServer.SendMessage(m, connection, NetDeliveryMethod.ReliableOrdered); break; } } }
void Launch() { var b = server.GameData.GetBase(Base); var sys = server.GameData.GetSystem(b.System); server.RequestWorld(sys, (world) => { this.World = world; var obj = sys.Objects.FirstOrDefault((o) => { return(o.Dock != null && o.Dock.Kind == DockKinds.Base && o.Dock.Target.Equals(Base, StringComparison.OrdinalIgnoreCase)); }); System = b.System; Orientation = Quaternion.Identity; Position = Vector3.Zero; if (obj == null) { FLLog.Error("Base", "Can't find object in " + sys + " docking to " + b); } else { Position = obj.Position; Orientation = (obj.Rotation == null ? Matrix3.Identity : new Matrix3(obj.Rotation.Value)).ExtractRotation(); Position = Vector3.Transform(new Vector3(0, 0, 500), Orientation) + obj.Position; //TODO: This is bad } var msg = server.NetServer.CreateMessage(); msg.Write(new SpawnPlayerPacket() { System = System, Position = Position, Orientation = Orientation, Ship = Character.EncodeLoadout() }); server.NetServer.SendMessage(msg, connection, NetDeliveryMethod.ReliableOrdered); world.SpawnPlayer(this, Position, Orientation); }); }
public void OpenSaveGame(Data.Save.SaveGame sg) { Orientation = Quaternion.Identity; Position = sg.Player.Position; Base = sg.Player.Base; System = sg.Player.System; Character = new NetCharacter(); Character.Credits = sg.Player.Money; string ps; if (sg.Player.ShipArchetype != null) { ps = sg.Player.ShipArchetype; } else { ps = game.GameData.GetShip(sg.Player.ShipArchetypeCrc).Nickname; } Character.Ship = game.GameData.GetShip(ps); Character.Equipment = new List <NetEquipment>(); foreach (var eq in sg.Player.Equip) { var hp = eq.Hardpoint; Equipment equip; if (eq.EquipName != null) { equip = game.GameData.GetEquipment(eq.EquipName); } else { equip = game.GameData.GetEquipment(eq.EquipHash); } if (equip != null) { Character.Equipment.Add(new NetEquipment() { Equipment = equip, Hardpoint = hp, Health = 1 }); } } if (Base != null) { lock (rtcs) { Client.SendPacket(new BaseEnterPacket() { Base = Base, Ship = Character.EncodeLoadout(), RTCs = rtcs.ToArray() }, PacketDeliveryMethod.ReliableOrdered); } InitStory(sg); } else { var sys = game.GameData.GetSystem(System); game.RequestWorld(sys, (world) => { World = world; Client.SendPacket(new SpawnPlayerPacket() { System = System, Position = Position, Orientation = Orientation, Ship = Character.EncodeLoadout() }, PacketDeliveryMethod.ReliableOrdered); world.SpawnPlayer(this, Position, Orientation); //work around race condition where world spawns after player has been sent to a base InitStory(sg); }); } }
void ListAction(CharacterListActionPacket pkt) { switch (pkt.Action) { case CharacterListAction.RequestCharacterDB: { Client.SendPacket(new NewCharacterDBPacket() { Factions = game.GameData.Ini.NewCharDB.Factions, Packages = game.GameData.Ini.NewCharDB.Packages, Pilots = game.GameData.Ini.NewCharDB.Pilots }, PacketDeliveryMethod.ReliableOrdered); break; } case CharacterListAction.SelectCharacter: { if (pkt.IntArg > 0 && pkt.IntArg < CharacterList.Count) { var sc = CharacterList[pkt.IntArg]; FLLog.Info("Server", $"opening id {sc.Id}"); Character = NetCharacter.FromDb(sc.Id, game); FLLog.Info("Server", $"sending packet"); Base = Character.Base; Client.SendPacket(new BaseEnterPacket() { Base = Character.Base, Ship = Character.EncodeLoadout() }, PacketDeliveryMethod.ReliableOrdered); } else { Client.SendPacket(new CharacterListActionResponsePacket() { Action = CharacterListAction.SelectCharacter, Status = CharacterListStatus.ErrBadIndex }, PacketDeliveryMethod.ReliableOrdered); } break; } case CharacterListAction.DeleteCharacter: { var sc = CharacterList[pkt.IntArg]; game.Database.DeleteCharacter(sc.Id); CharacterList.Remove(sc); Client.SendPacket(new CharacterListActionResponsePacket() { Action = CharacterListAction.DeleteCharacter, Status = CharacterListStatus.OK }, PacketDeliveryMethod.ReliableOrdered); break; } case CharacterListAction.CreateNewCharacter: { if (!game.Database.NameInUse(pkt.StringArg)) { Character ch = null; game.Database.AddCharacter(playerGuid, (db) => { ch = db; var sg = game.NewCharacter(pkt.StringArg, pkt.IntArg); db.Name = sg.Player.Name; db.Base = sg.Player.Base; db.System = sg.Player.System; db.Rank = 1; db.Costume = sg.Player.Costume; db.ComCostume = sg.Player.ComCostume; db.Money = sg.Player.Money; db.Ship = sg.Player.ShipArchetype; db.Equipment = new HashSet <EquipmentEntity>(); db.Cargo = new HashSet <CargoItem>(); foreach (var eq in sg.Player.Equip) { db.Equipment.Add(new EquipmentEntity() { EquipmentNickname = eq.EquipName, EquipmentHardpoint = eq.Hardpoint }); } foreach (var cg in sg.Player.Cargo) { db.Cargo.Add(new CargoItem() { ItemName = cg.CargoName, ItemCount = cg.Count }); } }); var sel = NetCharacter.FromDb(ch.Id, game).ToSelectable(); CharacterList.Add(sel); Client.SendPacket(new AddCharacterPacket() { Character = sel }, PacketDeliveryMethod.ReliableOrdered); } else { Client.SendPacket(new CharacterListActionResponsePacket() { Action = CharacterListAction.CreateNewCharacter, Status = CharacterListStatus.ErrUnknown }, PacketDeliveryMethod.ReliableOrdered); } break; } } }
public void OpenSaveGame(Data.Save.SaveGame sg) { Orientation = Quaternion.Identity; Position = sg.Player.Position; Base = sg.Player.Base; System = sg.Player.System; Character = new NetCharacter(); Character.Credits = sg.Player.Money; string ps; if (sg.Player.ShipArchetype != null) { ps = sg.Player.ShipArchetype; } else { ps = game.GameData.GetShip(sg.Player.ShipArchetypeCrc).Nickname; } Character.Ship = game.GameData.GetShip(ps); Character.Equipment = new List <NetEquipment>(); foreach (var eq in sg.Player.Equip) { var hp = eq.Hardpoint; Equipment equip; if (eq.EquipName != null) { equip = game.GameData.GetEquipment(eq.EquipName); } else { equip = game.GameData.GetEquipment(eq.EquipHash); } if (equip != null) { Character.Equipment.Add(new NetEquipment() { Equipment = equip, Hardpoint = hp, Health = 1 }); } } if (Base != null) { lock (rtcs) { client.SendPacket(new BaseEnterPacket() { Base = Base, Ship = Character.EncodeLoadout(), RTCs = rtcs.ToArray() }, NetDeliveryMethod.ReliableOrdered); } } else { var sys = game.GameData.GetSystem(System); game.RequestWorld(sys, (world) => { World = world; client.SendPacket(new SpawnPlayerPacket() { System = System, Position = Position, Orientation = Orientation, Ship = Character.EncodeLoadout() }, NetDeliveryMethod.ReliableOrdered); world.SpawnPlayer(this, Position, Orientation); }); } var missionNum = sg.StoryInfo?.MissionNum ?? 0; if (game.GameData.Ini.ContentDll.AlwaysMission13) { missionNum = 14; } if (missionNum != 0 && (missionNum - 1) < game.GameData.Ini.Missions.Count) { msnRuntime = new MissionRuntime(game.GameData.Ini.Missions[missionNum - 1], this); msnRuntime.Update(TimeSpan.Zero); } }
public void OpenSaveGame(SaveGame sg) { Orientation = Quaternion.Identity; Position = sg.Player.Position; Base = sg.Player.Base; System = sg.Player.System; Character = new NetCharacter(); Character.UpdateCredits(sg.Player.Money); string ps; if (sg.Player.ShipArchetype != null) { ps = sg.Player.ShipArchetype; } else { ps = Game.GameData.GetShip(sg.Player.ShipArchetypeCrc).Nickname; } Character.Ship = Game.GameData.GetShip(ps); Character.Items = new List <NetCargo>(); foreach (var eq in sg.Player.Equip) { var hp = eq.Hardpoint; if (string.IsNullOrEmpty(hp)) { hp = "internal"; } Equipment equip; if (eq.EquipName != null) { equip = Game.GameData.GetEquipment(eq.EquipName); } else { equip = Game.GameData.GetEquipment(eq.EquipHash); } if (equip != null) { Character.Items.Add(new NetCargo() { Equipment = equip, Hardpoint = hp, Health = 1, Count = 1 }); } } foreach (var cg in sg.Player.Cargo) { Equipment equip; if (cg.CargoName != null) { equip = Game.GameData.GetEquipment(cg.CargoName); } else { equip = Game.GameData.GetEquipment(cg.CargoHash); } if (equip != null) { Character.Items.Add(new NetCargo() { Equipment = equip, Count = cg.Count }); } } rpcClient.UpdateInventory(Character.Credits, GetShipWorth(), Character.EncodeLoadout()); if (Base != null) { InitStory(sg); PlayerEnterBase(); } else { InitStory(sg); SpaceInitialSpawn(sg); } }