void HandlePacket(PacketBase packet, ulong senderSteamId, byte[] serialized = null) { // Server-side OriginalSender validation if (MyAPIGateway.Multiplayer.IsServer) { if (senderSteamId != packet.OriginalSenderSteamId) { MyLog.Default.WriteLineAndConsole($"{ModName} WARNING: packet {packet.GetType().Name} from {senderSteamId.ToString()} has altered OriginalSenderSteamId to {packet.OriginalSenderSteamId.ToString()}. Replaced it with proper id, but if this triggers for everyone then it's a bug somewhere."); packet.OriginalSenderSteamId = senderSteamId; serialized = null; // force reserialize } } RelayMode relay = RelayMode.NoRelay; packet.Received(ref relay); if (MyAPIGateway.Multiplayer.IsServer && relay != RelayMode.NoRelay) { if (relay == RelayMode.RelayOriginal) { RelayToClients(packet, senderSteamId, serialized); } else if (relay == RelayMode.RelayWithChanges) { RelayToClients(packet, senderSteamId, null); } else { throw new Exception($"{ModName}: Unknown relay mode: {relay.ToString()}"); } } }
void HandlePacket(PacketBase packet, ulong senderSteamId, byte[] serialized = null) { // validate OriginalSenderSteamId if (MyAPIGateway.Session.IsServer && senderSteamId != packet.OriginalSenderSteamId) { LogError($"{GetType().FullName} WARNING: packet {packet.GetType().Name} from {senderSteamId.ToString()} has altered SenderSteamId to {packet.OriginalSenderSteamId.ToString()}. I replaced it with the proper id, but if this triggers for everyone then it's a bug somewhere."); packet.OriginalSenderSteamId = senderSteamId; serialized = null; // force reserialize } RelayMode relay = RelayMode.NoRelay; packet.Received(ref relay, senderSteamId); if (MyAPIGateway.Session.IsServer && relay != RelayMode.NoRelay) { if (relay == RelayMode.RelayOriginal) { RelayToOthers(packet, serialized, senderSteamId); } else if (relay == RelayMode.RelayWithChanges) { RelayToOthers(packet, null, senderSteamId); } else { throw new Exception($"Unknown relay mode: {relay.ToString()}"); } } }
public override void Received(ref RelayMode relay, ulong senderSteamId) { relay = RelayMode.RelayOriginal; if (!Networking.IsPlayer) { return; } Vector3D camPos = MyAPIGateway.Session.Camera.WorldMatrix.Translation; if (Vector3D.DistanceSquared(camPos, Position) > MaxDistanceSq) { return; } MatrixD worldMatrix = MatrixD.CreateFromQuaternion(Orientation); worldMatrix.Translation = Position; MyEntity3DSoundEmitter emitter = new MyEntity3DSoundEmitter(null); emitter.CustomVolume = 0.9f; emitter.SetPosition(Position); emitter.PlaySingleSound(new MySoundPair("PrgDeconstrPh03Fin")); // TODO: spawn smoke or something only from where the block was mounted CreateConstructionSmokes(worldMatrix); }
public override void Received(ref RelayMode relay) { // no way to check if creative tools is enabled for sender but it's enough to check their access level. if (Main.IsServer && MyAPIGateway.Session.GetUserPromoteLevel(OriginalSenderSteamId) < MyPromoteLevel.SpaceMaster) { MyLog.Default.WriteLineAndConsole($"{PaintGunMod.MOD_NAME} Warning: Player {Utils.PrintPlayerName(OriginalSenderSteamId)} tried to use replace paint while not being at least SpaceMaster promote level."); Main.NetworkLibHandler.PacketWarningMessage.Send(OriginalSenderSteamId, "Failed to replace paint server side, access denied."); return; } bool modified = false; if (!Main.Palette.ValidateSkinOwnership(NewPaint.Skin, OriginalSenderSteamId)) { NewPaint = new SerializedPaintMaterial(NewPaint.ColorMaskPacked, null); modified = true; } MyCubeGrid grid = Utils.GetEntityOrError <MyCubeGrid>(this, GridEntId, Constants.NETWORK_DESYNC_ERROR_LOGGING); if (grid == null) { if (Main.IsServer) { Main.NetworkLibHandler.PacketWarningMessage.Send(OriginalSenderSteamId, "Failed to replace paint server side, grid no longer exists."); } return; } if (Main.IsServer) { // ensure server side if safezone permissions are respected if (!Utils.SafeZoneCanPaint(grid, OriginalSenderSteamId)) { Main.NetworkLibHandler.PacketWarningMessage.Send(OriginalSenderSteamId, "Failed to replace paint server side, denied by safe zone."); return; } long identity = MyAPIGateway.Players.TryGetIdentityId(OriginalSenderSteamId); if (!Utils.AllowedToPaintGrid(grid, identity)) { Main.NetworkLibHandler.PacketWarningMessage.Send(OriginalSenderSteamId, "Failed to replace paint server side, ship not allied."); return; } } PaintMaterial newPaint = new PaintMaterial(NewPaint); BlockMaterial oldPaint = new BlockMaterial(OldPaint); Main.Painting.ReplaceColorInGrid(false, grid, oldPaint, newPaint, IncludeSubgrids, OriginalSenderSteamId); if (Main.IsServer) { relay = modified ? RelayMode.RelayWithChanges : RelayMode.RelayOriginal; } }
public override void Received(ref RelayMode relay) { if (Main.IsServer) { MyLog.Default.WriteLineAndConsole($"{PaintGunMod.MOD_NAME} :: warning message from {Utils.PrintPlayerName(OriginalSenderSteamId)} saying: {Message}"); } Log.Info(Message, Log.PRINT_MESSAGE, 5000); }
public override void Received(ref RelayMode relay) { if (Main.IsServer && !Main.IgnoreAmmoConsumption) // ammo consumption, only needed server side { IMyInventory inv = Utils.GetCharacterInventoryOrError(this, Utils.GetCharacterOrError(this, Utils.GetPlayerOrError(this, OriginalSenderSteamId))); if (inv != null) { inv.RemoveItemsOfType(1, Main.Constants.PAINT_MAG_ITEM, false); } } }
public override void Received(ref RelayMode relay) { relay = RelayMode.RelayOriginal; if (Constants.NETWORK_ACTION_LOGGING) { Log.Info($"{GetType().Name} :: Received palette slot update; player={Utils.PrintPlayerName(OriginalSenderSteamId)}, slot={ColorIndex.ToString()}; color={ColorExtensions.UnpackHSVFromUint(ColorMaskPacked).ToString()}"); } PlayerInfo pi = Main.Palette.GetOrAddPlayerInfo(OriginalSenderSteamId); pi.SetColorAt(ColorIndex, ColorExtensions.UnpackHSVFromUint(ColorMaskPacked)); }
public override void Received(ref RelayMode relay) { relay = (Reply ? RelayMode.RelayOriginal : RelayMode.NoRelay); if (PaletteOwnerSteamId != MyAPIGateway.Multiplayer.MyId) { if (Constants.NETWORK_ACTION_LOGGING) { Log.Info($"{GetType().Name} :: received {Utils.PrintPlayerName(PaletteOwnerSteamId)}'s palette; Reply={Reply.ToString()}"); } IMyPlayer player = Utils.GetPlayerBySteamId(PaletteOwnerSteamId); if (player == null) { return; } // apply palette info PlayerInfo pi = Main.Palette.GetOrAddPlayerInfo(PaletteOwnerSteamId); pi.SelectedColorSlot = SelectedColorSlot; pi.SelectedSkin = SelectedSkin; pi.ApplyColor = ApplyColor; pi.ApplySkin = ApplySkin; pi.ColorPickMode = ColorPickMode; pi.SetColors(PackedColorMasks); } if (Reply && MyAPIGateway.Multiplayer.IsServer) { if (Constants.NETWORK_ACTION_LOGGING) { Log.Info($"+ sending all players' palettes back to original sender."); } foreach (PlayerInfo pi in Main.Palette.PlayerInfo.Values) { if (pi.SteamId == OriginalSenderSteamId) { continue; // don't send their own palette back to them } Main.NetworkLibHandler.PacketJoinSharePalette.Send(pi, OriginalSenderSteamId); } } }
public override void Received(ref RelayMode relay, ulong senderSteamId) { if (!Networking.IsPlayer) { return; } IMyCubeGrid grid = MyEntities.GetEntityById(GridEntId) as IMyCubeGrid; if (grid == null) { return; } Vector3D worldPos = Vector3.Transform(LocalPos, grid.WorldMatrix); Vector3D camPos = MyAPIGateway.Session.Camera.WorldMatrix.Translation; if (Vector3D.DistanceSquared(camPos, worldPos) > MaxDistanceSq) { return; } MatrixD worldMatrix = MatrixD.CreateFromQuaternion(LocalOrientation); worldMatrix.Translation = LocalPos; worldMatrix.Translation += worldMatrix.Down * (grid.GridSize * 0.5f); worldMatrix *= grid.WorldMatrix; float scale = grid.GridSize * 0.975f; SpawnWeldParticle(worldPos, worldMatrix, new Vector3(1, 0, 1), scale); SpawnWeldParticle(worldPos, worldMatrix, new Vector3(1, 0, -1), scale); SpawnWeldParticle(worldPos, worldMatrix, new Vector3(-1, 0, 1), scale); SpawnWeldParticle(worldPos, worldMatrix, new Vector3(-1, 0, -1), scale); MyEntity3DSoundEmitter emitter = new MyEntity3DSoundEmitter(null); emitter.CustomVolume = 0.9f; emitter.SetPosition(worldPos); emitter.PlaySingleSound(new MySoundPair("WeldPad_Weld")); }
public override void Received(ref RelayMode relay) { // too frequent //if(Constants.NETWORK_ACTION_LOGGING) //{ // Log.Info($@"{GetType().Name} :: Received pallete update for {Utils.PrintPlayerName(SteamId)}; SelectedColorIndex={Utils.PrintNullable(SelectedColorIndex)}, SelectedSkinIndex={Utils.PrintNullable(SelectedSkinIndex)}, ApplyColor={Utils.PrintNullable(ApplyColor)}, ApplySkin={Utils.PrintNullable(ApplySkin)}, ColorPickMode={Utils.PrintNullable(ColorPickMode)}"); //} relay = RelayMode.RelayOriginal; PlayerInfo pi = Main.Palette.GetOrAddPlayerInfo(OriginalSenderSteamId); if (SelectedColorSlot.HasValue) { pi.SelectedColorSlot = SelectedColorSlot.Value; } if (SelectedSkin.HasValue) { pi.SelectedSkin = SelectedSkin.Value; } if (ApplyColor.HasValue) { pi.ApplyColor = ApplyColor.Value; } if (ApplySkin.HasValue) { pi.ApplySkin = ApplySkin.Value; } if (ColorPickMode.HasValue) { pi.ColorPickMode = ColorPickMode.Value; } //if(PackedColorMasks != null) // pi.SetColors(PackedColorMasks); }
void Start () { gameManager = GameObject.FindObjectOfType<GameManager> (); timerText = GameObject.Find ("TimerText").GetComponent<Text> (); scoreText = GameObject.Find ("Score").GetComponent<Text> (); HighScoreText = GameObject.Find ("HighScore").GetComponent<Text> (); //timeSlider = GameObject.Find("TimeSlider").GetComponent<Slider>(); gameOverUIAnim = GameObject.Find ("GameOverUI").GetComponent<Animator> (); if (gameManager.subLevelIndex == 1) { currentMode = RelayMode.Second8; } else if (gameManager.subLevelIndex == 2) { currentMode = RelayMode.Second10; } else if (gameManager.subLevelIndex == 3) { currentMode = RelayMode.Second12; } if (gameManager.isSoundOn) GetComponent<AudioSource> ().volume = 1f; else GetComponent<AudioSource> ().volume = 0f; if (currentMode == RelayMode.Second8) { //totalTap = 25; timeCounter = 8f; } else if (currentMode == RelayMode.Second10) { //totalTap = 50; timeCounter = 10f; } else if (currentMode == RelayMode.Second12) { //totalTap = 50; timeCounter = 12f; } gameManager.ResetNoteIndex(); //timeSlider.minValue = 0f; //timeSlider.maxValue = timeCounter; GenerateFullGrid (); }
public override void Received(ref RelayMode relay) { relay = RelayMode.RelayOriginal; if (Main.IsPlayer) { IMyPlayer player = Utils.GetPlayerBySteamId(OriginalSenderSteamId); if (player == null) { return; } List <PaintGunItem> tools = Main.ToolHandler.Tools; foreach (PaintGunItem tool in tools) { if (tool.OwnerSteamId == OriginalSenderSteamId) { tool.Spraying = Spraying; break; } } } }
/// <summary> /// Called when this packet is received on this machine. /// <para><paramref name="relay"/> = relay this packet instance to other clients when received server-side.</para> /// <para><paramref name="senderSteamId"/> = the packet's sender. NOTE: relayed packets will have the server as the sender!</para> /// </summary> public abstract void Received(ref RelayMode relay, ulong senderSteamId);
void ChangeRelayOutputProperties(string token, string delayTime, RelayIdleState idleState, RelayMode mode) { RelayOutputSettings testSettings = new RelayOutputSettings(); testSettings.DelayTime = delayTime; testSettings.IdleState = idleState; testSettings.Mode = mode; RelayOutput output = new RelayOutput(); output.token = token; output.Properties = testSettings; SetRelayOutputSettings(output); RelayOutput[] actualOutputs = GetRelayOutputs(); Assert(actualOutputs != null, "No relay outputs received via GetRelayOutputs", "Check that the DUT sent relay outputs information"); RelayOutput actualOutput = actualOutputs.Where(o => o.token == token).FirstOrDefault(); Assert(actualOutput != null, string.Format("Relay output with token {0} not found", token), "Find current output settings"); ValidateRelayOutputSettings(testSettings, actualOutput.Properties); }
/// <summary> /// Called when this packet is received on this machine. /// Assign <paramref name="relay"/> serverside if you want to auto-relay the received packet to other clients. /// </summary> public abstract void Received(ref RelayMode relay);
public static void AddBlindApplication(this List <SensactApplication> list, ID appId, int OpenCloseTimeInSeconds, ushort OutputResourcePower, ushort OutputResourceDirection, RelayMode relMode) { list.Add(new BlindApplication { ApplicationId = appId.ToString(), OpenCloseTimeInSeconds = OpenCloseTimeInSeconds, OutputResourceUpOrPower = OutputResourcePower, OutputResourceDownOrDirection = OutputResourceDirection, RelayMode = relMode }); }
} // Empty constructor required for deserialization public override void Received(ref RelayMode relay, ulong senderSteamId) { OnReceive?.Invoke(this); }
public override void Received(ref RelayMode relay) { if (Main.IsServer && !Main.IgnoreAmmoConsumption) // ammo consumption, only needed server side { IMyInventory inv = Utils.GetCharacterInventoryOrError(this, Utils.GetCharacterOrError(this, Utils.GetPlayerOrError(this, OriginalSenderSteamId))); if (inv != null) { inv.RemoveItemsOfType(1, Main.Constants.PAINT_MAG_ITEM, false); } } MyCubeGrid grid = Utils.GetEntityOrError <MyCubeGrid>(this, GridEntId, Constants.NETWORK_DESYNC_ERROR_LOGGING); if (grid == null) { return; } if (Main.IsServer) { // ensure server side if safezone permissions are respected if (!Utils.SafeZoneCanPaint(grid.GetCubeBlock(BlockPosition), OriginalSenderSteamId)) { if (Constants.NETWORK_DESYNC_ERROR_LOGGING) { IMySlimBlock block = (IMySlimBlock)grid.GetCubeBlock(BlockPosition); Log.Error($"{GetType().Name} :: Can't paint inside no-build safe zone! Sender={OriginalSenderSteamId.ToString()}; Grid={grid} ({grid.EntityId.ToString()}); block={block.BlockDefinition.Id.ToString()} ({block.Position.ToString()})", Log.PRINT_MESSAGE); } Main.NetworkLibHandler.PacketWarningMessage.Send(OriginalSenderSteamId, "Failed to paint server side, denied by safe zone."); return; } long identity = MyAPIGateway.Players.TryGetIdentityId(OriginalSenderSteamId); if (!Utils.AllowedToPaintGrid(grid, identity)) { if (Constants.NETWORK_DESYNC_ERROR_LOGGING) { Log.Error($"{GetType().Name} :: Can't paint non-allied grids! Sender={OriginalSenderSteamId.ToString()}; Grid={grid} ({grid.EntityId.ToString()})", Log.PRINT_MESSAGE); } Main.NetworkLibHandler.PacketWarningMessage.Send(OriginalSenderSteamId, "Failed to paint server side, ship not allied."); return; } if (!grid.CubeExists(BlockPosition)) { if (Constants.NETWORK_DESYNC_ERROR_LOGGING) { Log.Error($"{GetType().Name} :: Can't paint inexistent blocks! Sender={OriginalSenderSteamId.ToString()}; Grid={grid} ({grid.EntityId.ToString()}) at GridPosition={BlockPosition.ToString()}", Log.PRINT_MESSAGE); } Main.NetworkLibHandler.PacketWarningMessage.Send(OriginalSenderSteamId, "Failed to paint server side, block no longer exists."); return; } } if (DoAction(grid)) { relay = RelayMode.RelayWithChanges; } }