void SendCheckpoint(NetConnection sendTo) { Log("SendCheckpoint"); var checkpointEvent = new MyEventCheckpoint(); checkpointEvent.Checkpoint = GetCheckpoint(); Peers.NetworkClient.Send(ref checkpointEvent, sendTo, NetDeliveryMethod.ReliableOrdered, 0, 1024 * 1024); // Send missiles, cannon shots etc. m_entitiesToTransfer.Clear(); MyEntities.FindEntities(AmmoEntitiesPredicate, m_entitiesToTransfer); foreach (var e in m_entitiesToTransfer) { var ammo = (MyAmmoBase)e; var weapon = MyGuiSmallShipHelpers.GetFirstWeaponType(ammo.AmmoType); if (!weapon.HasValue) { continue; } MyEventShoot shootMsg = new MyEventShoot(); shootMsg.Ammo = ammo.AmmoType; shootMsg.Position = new MyMwcPositionAndOrientation(ammo.WorldMatrix); shootMsg.ProjectileEntityId = MyEntityIdentifier.ToNullableInt(ammo.EntityId); shootMsg.ShooterEntityId = (ammo.OwnerEntity != null && ammo.OwnerEntity.EntityId.HasValue) ? ammo.OwnerEntity.EntityId.Value.NumericValue : 0; shootMsg.TargetEntityId = null; shootMsg.Weapon = weapon.Value; Peers.NetworkClient.Send(ref shootMsg, sendTo, NetDeliveryMethod.ReliableOrdered, 0); } }
private void OnReceiveCheckpoint(ref MyEventCheckpoint sectorData) { MyMultiplayerGameplay.Log("JOIN 7. - Checkpoint received (#SectorData), join completed, loading"); MyMultiplayerGameplay.Log("MTU: " + sectorData.SenderConnection.GetMTU()); if (MySession.PlayerShip != null) { MyMultiplayerGameplay.StoredShip = (MyMwcObjectBuilder_SmallShip)MySession.PlayerShip.GetObjectBuilder(false); } var loadedPlayer = sectorData.Checkpoint.LoadCoopPlayer(MyClientServer.LoggedPlayer.GetDisplayName().ToString()); if (loadedPlayer != null) { var faction = sectorData.Checkpoint.PlayerObjectBuilder.ShipObjectBuilder.Faction; sectorData.Checkpoint.PlayerObjectBuilder = loadedPlayer; sectorData.Checkpoint.PlayerObjectBuilder.ShipObjectBuilder = new MyMwcObjectBuilder_SmallShip_Player(sectorData.Checkpoint.PlayerObjectBuilder.ShipObjectBuilder); sectorData.Checkpoint.PlayerObjectBuilder.ShipObjectBuilder.Faction = faction; } else { // Set default values for playership (coop) sectorData.Checkpoint.PlayerObjectBuilder.ShipConfigObjectBuilder = null; sectorData.Checkpoint.PlayerObjectBuilder.ShipObjectBuilder.ReflectorLight = true; sectorData.Checkpoint.PlayerObjectBuilder.ShipObjectBuilder.ReflectorLongRange = false; sectorData.Checkpoint.PlayerObjectBuilder.ShipObjectBuilder.IsDummy = false; } if (sectorData.Checkpoint.CurrentSector.SectorType == MyMwcSectorTypeEnum.SANDBOX && !MinerWars.AppCode.Networking.MySteam.IsActive) { sectorData.Checkpoint.PlayerObjectBuilder.Money = (float)MySectorServiceClient.GetCheckedInstance().GetGameMoney(); MySectorServiceClient.SafeClose(); } else { // Keep money sectorData.Checkpoint.PlayerObjectBuilder.Money = MySession.Static != null ? MySession.Static.Player.Money : 0; } MyMultiplayerGameplay.StartBufferingGameEvents(); var handler = m_gameJoinedAction; if (handler != null) { handler(m_game, MyResultCodeEnum.OK, sectorData.Checkpoint); // Will handle sector loading } }