コード例 #1
0
        private void WipeToolbar(Action <IMyPlayer> successAction)
        {
            var player = MyAPIGateway.Session.Player;

            if (player == null)
            {
                return;
            }

            if (RegisteredPlayers.Contains(player.IdentityId))
            {
                return;                 // No need, they've been in the game before
            }

            if (player.Controller.ControlledEntity == null)
            {
                // ReSharper disable once ObjectCreationAsStatement
                new LateToolbarClearer(player, successAction);
            }
            else
            {
                MyVisualScriptLogicProvider.ClearAllToolbarSlots(player.IdentityId);
                successAction(player);
            }
        }
コード例 #2
0
        void PlayerJoined(long playerID, ulong sender)
        {
            MyLog.Default.WriteLine($"PlayerJoined The game! {playerID}");
            MyLog.Default.Flush();
            try
            {
                if (sender == 0)
                {
                    sender = MyAPIGateway.Session?.Player?.SteamUserId ?? 0;
                }
                userIds[playerID] = sender;

                if (settings.AdminUnlockAll)
                {
                    bool check;
                    if (unlockAllPlayers.TryGetValue(sender, out check))
                    {
                        if (check)
                        {
                            UnlockAllByID(playerID);
                            return;
                        }
                    }
                }
                var playerIds = (HashSet <MyDefinitionId>)null;
                try
                {
                    using (var sw =
                               MyAPIGateway.Utilities.ReadFileInWorldStorage(string.Format(Settings.playerFile, playerID), typeof(Core)))
                    {
                        PlayerFile ids = MyAPIGateway.Utilities.SerializeFromXML <PlayerFile>(sw.ReadToEnd());
                        playerData = new PlayerData().Load(ids);
                    }
                }
                catch (Exception e)
                {
                    try
                    {
                        using (var sw =
                                   MyAPIGateway.Utilities.ReadFileInWorldStorage(string.Format(Settings.playerFile, playerID), typeof(Core)))
                        {
                            var ids = MyAPIGateway.Utilities.SerializeFromXML <List <SerializableDefinitionId> >(sw.ReadToEnd());
                            playerIds  = new HashSet <MyDefinitionId>(ids.Select(s => (MyDefinitionId)s), MyDefinitionId.Comparer);
                            playerData = new PlayerData(playerIds);
                        }
                    }
                    catch (Exception e1)
                    {
                        MyLog.Default.WriteLine($"PlayerJoinedRead: {e1.Message}");
                        MyLog.Default.WriteLine($"PlayerJoinedRead: {e1.HResult}");

                        MyLog.Default.Flush();
                    }
                }

                if (playerData == null)
                {
                    playerData = new PlayerData();
                }
                if (playerData.LearnedBocks.Count == 0)
                {
                    MyVisualScriptLogicProvider.ClearAllToolbarSlots(playerID);
                }

                foreach (var id in settings.AlwaysUnlocked)
                {
                    playerData.LearnedBocks.Add(id);
                }

                players[playerID] = playerData;
                foreach (var id in playerData.LearnedBocks.ToList())
                {
                    UnlockById(id, playerID, true);
                }
            }
            catch (Exception e)
            {
                MyLog.Default.WriteLine($"PlayerJoined: {e.Message}");
                MyLog.Default.WriteLine($"PlayerJoinedStack: {e.StackTrace}");
                MyLog.Default.Flush();
            }
            MyLog.Default.Flush();
        }
コード例 #3
0
 private void PlayerChangedController(VRage.Game.ModAPI.Interfaces.IMyControllableEntity arg1, VRage.Game.ModAPI.Interfaces.IMyControllableEntity arg2)
 {
     MyVisualScriptLogicProvider.ClearAllToolbarSlots(player.IdentityId);
     MyAPIGateway.Session.Player.Controller.ControlledEntityChanged -= PlayerChangedController;
     successAction(player);
 }