private static bool TryGetDummy(string name, IMyModel model, out IMyModelDummy dummy) { Dictionary <string, IMyModelDummy> dummies = new Dictionary <string, IMyModelDummy>(); model.GetDummies(dummies); return(dummies.TryGetValue(name, out dummy)); }
private void UpdateInput() { if (MyAPIGateway.Session == null) { return; } IMyPlayer player = MyAPIGateway.Session.Player; if (player == null) { return; } IMyCharacter character = player.Character; if (character == null) { return; } IMyUseObject useObject = character.Components?.Get <MyCharacterDetectorComponent>()?.UseObject; if (useObject == null) { return; } bool isUsePressed = MyAPIGateway.Input.GetGameControl(MyControlsSpace.USE).IsNewPressed(); bool isUsePressed2 = MyAPIGateway.Input.GetGameControl(MyControlsSpace.PRIMARY_TOOL_ACTION).IsNewPressed(); IMyModelDummy dummy = useObject.Dummy; if (dummy == null) { return; } string detectorName = dummy.Name; // ... only if the detector is not a Spawndoor, in this case make Terminal available again and return; if (detectorName.Contains(DUMMY_SUFFIX) || detectorName.Contains(DUMMY_SUFFIX2)) { IMyEntity owner = useObject.Owner; if (owner == null || owner != m_block) { return; } if ((isUsePressed || isUsePressed2) && CheckReadynessClient()) { try { ShowMessageInGameAndLog("UpdateInput", "isUsePressed:[ " + isUsePressed.ToString() + "]" + "isUsePressed2:[" + isUsePressed2.ToString() + "]"); // slot already has a weapon -> remove it and add to players inventory MyRelationsBetweenPlayerAndBlock blockrelationttoplayer = ((IMyCubeBlock)Entity).GetUserRelationToOwner(MyAPIGateway.Session.Player.IdentityId); bool b = (blockrelationttoplayer == MyRelationsBetweenPlayerAndBlock.Enemies) || (blockrelationttoplayer == MyRelationsBetweenPlayerAndBlock.Neutral); ShowMessageInGameAndLog("MyRelationsBetweenPlayerAndBlock", "NotFriendly = " + b); if (b) { // ShowMessageInGameAndLog("UpdateInput", " ReplaceOwner before!"); // ReplaceOwner(player.IdentityId); ShowMessageInGameAndLog("UpdateInput", "Try send msg to server "); SendMessage_ReplaceDoor(MyAPIGateway.Session.Player.IdentityId, true, m_block.CubeGrid.CustomName); //(m_block as IMyAdvancedDoor).OpenDoor(); NeedsUpdate = MyEntityUpdateEnum.NONE; Destuctscript(); var timer3 = new Timer(10000); timer3.AutoReset = false; timer3.Elapsed += (a12, b12) => MyAPIGateway.Utilities.InvokeOnGameThread(() => { sendrefreshmsgtoserver(); }); timer3.Start(); } else { (m_block as IMyAdvancedDoor).OpenDoor(); } } catch (Exception tmp) { ShowMessageInGameAndLog("UpdateInput", "EXEPTION! " + tmp?.ToString()); } } } }