Beispiel #1
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="netManager">Network manager managing connection to the
 /// player.</param> <param name="netWorld">Network world owning this
 /// player.</param> <param name="steamId">Player's steam id.</param>
 public NetPlayer(
     NetManager netManager, NetWorld netWorld, Steamworks.CSteamID steamId)
 {
     this.netManager = netManager;
     this.netWorld   = netWorld;
     this.steamId    = steamId;
 }
Beispiel #2
0
 /// <summary>
 /// Process incoming network message.
 /// </summary>
 /// <param name="messageId">The id of the message.</param>
 /// <param name="senderSteamId">Steamid of the sender client.</param>
 /// <param name="reader">The binary reader contaning message data.</param>
 public void ProcessMessage(byte messageId, Steamworks.CSteamID senderSteamId, BinaryReader reader)
 {
     if (messageHandlers.ContainsKey(messageId))
     {
         messageHandlers[messageId](senderSteamId, reader);
     }
 }
        public void CheckSetupAccount(Steamworks.CSteamID id)
        {
            try
            {
                MySqlConnection connection = createConnection();
                MySqlCommand    command    = connection.CreateCommand();
                int             exists     = 0;
                command.CommandText = "SELECT EXISTS(SELECT 1 FROM `" + SkinChanger.Instance.Configuration.Instance.DatabaseTableName + "` WHERE `steamId` ='" + id + "' LIMIT 1);";
                connection.Open();
                object result = command.ExecuteScalar();
                if (result != null)
                {
                    Int32.TryParse(result.ToString(), out exists);
                }
                connection.Close();

                if (exists == 0)
                {
                    //command.CommandText = "insert ignore into `" + SkinChanger.Instance.Configuration.Instance.DatabaseTableName + "` (balance,steamId,lastUpdated) values(" + SkinChanger.Instance.Configuration.Instance.InitialBalance + ",'" + id.ToString() + "',now())";
                    connection.Open();
                    command.ExecuteNonQuery();
                    connection.Close();
                }
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);
            }
        }
Beispiel #4
0
        public NetManager()
        {
            this.netManagerCreationTime = DateTime.UtcNow;
            netMessageHandler           = new NetMessageHandler(this);
            netWorld = new NetWorld(this);

            p2pSessionRequestCallback = Steamworks.Callback <Steamworks.P2PSessionRequest_t> .Create((Steamworks.P2PSessionRequest_t result) => {
                if (!Steamworks.SteamNetworking.AcceptP2PSessionWithUser(result.m_steamIDRemote))
                {
                    Logger.Log("Accepted p2p session with " + result.m_steamIDRemote.ToString());
                }
            });

            gameLobbyJoinRequestedCallback = Steamworks.Callback <Steamworks.GameLobbyJoinRequested_t> .Create(OnGameLobbyJoinRequested);

            lobbyCreatedCallResult = new Steamworks.CallResult <Steamworks.LobbyCreated_t>((Steamworks.LobbyCreated_t result, bool ioFailure) => {
                if (result.m_eResult != Steamworks.EResult.k_EResultOK)
                {
                    Logger.Log("Oh my f*****g god i failed to create a lobby for you. Please forgive me. (result: " + result.m_eResult + ")");

                    MPGUI.Instance.ShowMessageBox("Failed to create lobby due to steam error.\n" + result.m_eResult, () => {
                        MPController.Instance.LoadLevel("MainMenu");
                    });
                    return;
                }

                Logger.Log("Hey you! I have lobby id for you! " + result.m_ulSteamIDLobby);

                // Setup local player.
                players[0] = new NetLocalPlayer(this, netWorld, Steamworks.SteamUser.GetSteamID());

                mode           = Mode.Host;
                state          = State.Playing;
                currentLobbyId = new Steamworks.CSteamID(result.m_ulSteamIDLobby);
            });

            lobbyEnterCallResult = new Steamworks.CallResult <Steamworks.LobbyEnter_t>((Steamworks.LobbyEnter_t result, bool ioFailure) => {
                if (result.m_EChatRoomEnterResponse != (uint)Steamworks.EChatRoomEnterResponse.k_EChatRoomEnterResponseSuccess)
                {
                    Logger.Log("Oh my f*****g god i failed to join the lobby for you. Please forgive me. (reponse: " + result.m_EChatRoomEnterResponse + ")");

                    players[1] = null;
                    return;
                }

                // Setup local player.
                players[0] = new NetLocalPlayer(this, netWorld, Steamworks.SteamUser.GetSteamID());

                Logger.Log("Oh hello! " + result.m_ulSteamIDLobby);

                mode           = Mode.Player;
                state          = State.LoadingGameWorld;
                currentLobbyId = new Steamworks.CSteamID(result.m_ulSteamIDLobby);

                ShowLoadingScreen(true);
                SendHandshake();
            });

            RegisterProtocolMessagesHandlers();
        }
Beispiel #5
0
        /// <summary>
        /// Handle result of join lobby operation.
        /// </summary>
        /// <param name="result">The operation result.</param>
        /// <param name="ioFailure">Did IO failure happen?</param>
        void OnLobbyEnter(Steamworks.LobbyEnter_t result, bool ioFailure)
        {
            if (ioFailure || result.m_EChatRoomEnterResponse != (uint)Steamworks.EChatRoomEnterResponse.k_EChatRoomEnterResponseSuccess)
            {
                Logger.Error("Failed to join lobby. (reponse: {result.m_EChatRoomEnterResponse}, ioFailure: {ioFailure})");
                MPGUI.Instance.ShowMessageBox($"Failed to join lobby.\n(reponse: {result.m_EChatRoomEnterResponse}, ioFailure: {ioFailure})");

                players[1] = null;
                return;
            }

            // Setup local player.
            players[0] = new NetLocalPlayer(this, netWorld, Steamworks.SteamUser.GetSteamID());

            Logger.Debug("Entered lobby: " + result.m_ulSteamIDLobby);

            MessagesList.AddMessage("Entered lobby.", MessageSeverity.Info);

            mode           = Mode.Player;
            state          = State.LoadingGameWorld;
            currentLobbyId = new Steamworks.CSteamID(result.m_ulSteamIDLobby);

            ShowLoadingScreen(true);
            SendHandshake(players[1]);
        }
Beispiel #6
0
        public bool TryDoCommand(Players.Player causedBy, string chattext)
        {
            var matched = Regex.Match(chattext, @"/spawnprotect (?<access>.+) (?<steamid>.+)");

            if (!matched.Success)
            {
                Chat.Send(causedBy, "Command didn't match, use /spawnprotect [spawn|nospawn|banner|deny] steamid");
                return(true);
            }
            string access = matched.Groups ["access"].Value;
            ulong  steamid;

            if (!ulong.TryParse(matched.Groups ["steamid"].Value, out steamid))
            {
                Chat.Send(causedBy, "Failed parsing steamid");
                return(true);
            }
            Steamworks.CSteamID csteamid = new Steamworks.CSteamID(steamid);
            if (!csteamid.IsValid())
            {
                Chat.Send(causedBy, "steamid is not valid");
                return(true);
            }
            NetworkID networkId = new NetworkID(csteamid);

            Players.Player targetPlayer;
            if (!Players.TryGetPlayer(networkId, out targetPlayer))
            {
                Chat.Send(causedBy, "Player not found or offline");
                return(true);
            }
            if (access.Equals("spawn"))
            {
                if (!PermissionsManager.CheckAndWarnPermission(causedBy, SpawnProtectModEntries.PERMISSION_SUPER))
                {
                    return(true);
                }
                PermissionsManager.AddPermissionToUser(causedBy, targetPlayer, SpawnProtectModEntries.PERMISSION_SPAWN_CHANGE);
            }
            else if (access.Equals("nospawn"))
            {
                if (PermissionsManager.HasPermission(causedBy, SpawnProtectModEntries.PERMISSION_SUPER))
                {
                    PermissionsManager.RemovePermissionOfUser(causedBy, targetPlayer, SpawnProtectModEntries.PERMISSION_SPAWN_CHANGE);
                }
            }
            else if (access.Equals("banner"))
            {
                PermissionsManager.AddPermissionToUser(causedBy, targetPlayer, SpawnProtectModEntries.PERMISSION_BANNER_PREFIX + causedBy.ID.steamID);
            }
            else if (access.Equals("deny"))
            {
                PermissionsManager.RemovePermissionOfUser(causedBy, targetPlayer, SpawnProtectModEntries.PERMISSION_BANNER_PREFIX + causedBy.ID.steamID);
            }
            else
            {
                Chat.Send(causedBy, "Unknown access level, use /spawnprotect [spawn|nospawn|banner|deny] steamid");
            }
            return(true);
        }
Beispiel #7
0
 void CuffPlayer(SDG.Unturned.Player player, Steamworks.CSteamID Owner)
 {
     player.animator.captorID       = Owner;
     player.animator.captorItem     = 1197; //**Handcuff**//
     player.animator.captorStrength = ushort.MaxValue;
     player.animator.sendGesture(SDG.Unturned.EPlayerGesture.ARREST_START, true);
 }
Beispiel #8
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="netManager">The network manager owning this player.</param>
        /// <param name="netWorld">Network world owning this player.</param>
        /// <param name="steamId">The steam id of the player.</param>
        public NetLocalPlayer(
            NetManager netManager, NetWorld netWorld, Steamworks.CSteamID steamId)
            : base(netManager, netWorld, steamId)
        {
            Instance = this;
            steamID  = steamId;

            GameDoorsManager.Instance.onDoorsOpen = (GameObject door) => {
                Messages.OpenDoorsMessage msg = new Messages.OpenDoorsMessage();
                msg.position = Utils.GameVec3ToNet(door.transform.position);
                msg.open     = true;
                netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable);
            };

            GameDoorsManager.Instance.onDoorsClose = (GameObject door) => {
                Messages.OpenDoorsMessage msg = new Messages.OpenDoorsMessage();
                msg.position = Utils.GameVec3ToNet(door.transform.position);
                msg.open     = false;
                netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable);
            };

            LightSwitchManager.Instance.onLightSwitchUsed =
                (GameObject lswitch, bool turnedOn) => {
                Messages.LightSwitchMessage msg = new Messages.LightSwitchMessage();
                msg.pos    = Utils.GameVec3ToNet(lswitch.transform.position);
                msg.toggle = turnedOn;
                netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable);
            };

            if (animManager == null)
            {
                animManager = new PlayerAnimManager();
            }
        }
        internal FriendGamer(
            Steamworks.CSteamID id,
            string gamertag,
            string displayName,
            bool online,
            bool playing,
            bool away,
            bool busy,
            bool requestingFriend,
            bool friendRequesting
            ) : base(id, gamertag, displayName)
        {
            IsOnline                  = online;
            IsPlaying                 = playing;
            IsAway                    = away;
            IsBusy                    = busy;
            FriendRequestSentTo       = requestingFriend;
            FriendRequestReceivedFrom = friendRequesting;

            // TODO: Everything below
            IsJoinable         = false;
            InviteAccepted     = false;
            InviteReceivedFrom = false;
            InviteRejected     = false;
            InviteSentTo       = false;
            HasVoice           = false;
            Presence           = string.Empty;
        }
Beispiel #10
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="netManager">The network manager owning this player.</param>
        /// <param name="netWorld">Network world owning this player.</param>
        /// <param name="steamId">The steam id of the player.</param>
        public NetLocalPlayer(NetManager netManager, NetWorld netWorld, Steamworks.CSteamID steamId) : base(netManager, netWorld, steamId)
        {
            GameDoorsManager.Instance.onDoorsOpen = () => {
                Messages.OpenDoorsMessage msg = new Messages.OpenDoorsMessage();
                msg.open = true;
                netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable);
            };

            GameDoorsManager.Instance.onDoorsClose = () => {
                Messages.OpenDoorsMessage msg = new Messages.OpenDoorsMessage();
                msg.open = false;
                netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable);
            };

            GameCallbacks.onObjectPickup = (GameObject gameObj) => {
                Messages.PickupObjectMessage msg = new Messages.PickupObjectMessage();
                msg.netId = netWorld.GetPickupableNetId(gameObj);
                netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable);
            };

            GameCallbacks.onObjectRelease = (bool drop) => {
                Messages.ReleaseObjectMessage msg = new Messages.ReleaseObjectMessage();
                msg.drop = drop;
                netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable);
            };
        }
Beispiel #11
0
        protected override void execute(Steamworks.CSteamID executorID, string parameter)
        {
            string[] Params = Parser.getComponentsFromSerial(parameter, '/');
            Player   caller = GamemodeLoader.Utilities.Tools.GetPlayer(executorID);

            Tools.SendChat(C.Configuration.SpicyString, caller);
        }
Beispiel #12
0
 /// <summary>
 /// Adds new object to the ObjectIDs Dictionary.
 /// </summary>
 /// <param name="osc">Object to add.</param>
 /// <param name="objectID">Object ID to assign to object.</param>
 /// <returns>ObjectID of object.</returns>
 public int AddNewObject(ObjectSyncComponent osc, int objectID)
 {
     // Assign ObjectID automatically.
     if (objectID == AUTOMATIC_ID)
     {
         if (steamID.m_SteamID == 0)
         {
             steamID = Steamworks.SteamUser.GetSteamID();
         }
         Logger.Debug($"Added new ObjectID at: {ObjectIDs.Count + 1}");
         ObjectIDs.GetOrAdd(ObjectIDs.Count + 1, osc);
         return(ObjectIDs.Count);
     }
     // Assign object a specific ObjectID.
     else
     {
         Logger.Debug($"Force adding new ObjectID at: {objectID}");
         if (ObjectIDs.ContainsKey(objectID))
         {
             ObjectIDs[objectID] = osc;
         }
         else
         {
             ObjectIDs.GetOrAdd(objectID, osc);
         }
         return(objectID);
     }
 }
Beispiel #13
0
        public void CheckSetupAccount(Steamworks.CSteamID id)
        {
            try
            {
                var connection = createConnection();
                var command    = connection.CreateCommand();
                var exists     = 0;
                command.CommandText = "SELECT EXISTS(SELECT 1 FROM `" +
                                      AdminSync.Instance.Configuration.Instance.databaseTableName +
                                      "` WHERE `steamId` ='" + id + "' LIMIT 1);";
                connection.Open();
                var result = command.ExecuteScalar();
                if (result != null)
                {
                    int.TryParse(result.ToString(), out exists);
                }
                connection.Close();

                if (exists == 0)
                {
                    command.CommandText = "insert ignore into `" +
                                          AdminSync.Instance.Configuration.Instance.databaseTableName +
                                          "` (isadmin,steamId,lastUpdated) values(" + 0.ToString() + ",'" +
                                          id.ToString() + "',now())";
                    connection.Open();
                    command.ExecuteNonQuery();
                    connection.Close();
                }
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);
            }
        }
Beispiel #14
0
        /// <summary>
        /// Lobby list result.
        /// </summary>
        /// <param name="result">Lobby list.</param>
        void OnLobbyList(Steamworks.LobbyMatchList_t result, bool ioFailure)
        {
            Logger.Log("Found " + result.m_nLobbiesMatching + " lobbies!");

            lobbyIDs.Clear();
            lobbyNames.Clear();
            for (int i = 0; i < result.m_nLobbiesMatching; i++)
            {
                Steamworks.CSteamID lobbyID    = Steamworks.SteamMatchmaking.GetLobbyByIndex(i);
                Steamworks.CSteamID lobbyOwner = Steamworks.SteamMatchmaking.GetLobbyOwner(lobbyID);
                if (lobbyOwner.m_SteamID != 0)
                {
                    lobbyIDs.Add(lobbyID);
                    lobbyOwners.Add(lobbyOwner);
                    Logger.Log("Lobby ID of index " + i + ": " + lobbyID + " - Owner: " + lobbyOwner);
                    bool success = Steamworks.SteamMatchmaking.RequestLobbyData(lobbyID);
                    if (!success)
                    {
                        Logger.Error("Failed to get lobby info!");
                    }

                    // Temp until lobby data callback is fixed!
                    int numPlayers = Steamworks.SteamMatchmaking.GetNumLobbyMembers(lobbyID);
                    lobbyNames.Add("Lobby (" + numPlayers + "/16)");
                }
            }
            MPGUI.Instance.LobbyNames = lobbyNames;
        }
Beispiel #15
0
        protected override void execute(Steamworks.CSteamID executorID, string parameter)
        {
            // Dedicator.isDedicated?
            if (!Provider.isServer)
            {
                CommandWindow.LogError("You are not the server!");
                return;
            }
            Commands sys = UnturnedFreneticMod.Instance.CommandSystem.System;

            // TODO: FreneticScript Core methods to ease this.
            foreach (ScriptEvent evt in sys.Events.Values)
            {
                foreach (KeyValuePair <int, CommandScript> handl in new List <KeyValuePair <int, CommandScript> >(evt.Handlers))
                {
                    evt.RemoveEventHandler(handl.Value.Name);
                }
            }
            sys.Functions.Clear();
            for (int i = Commander.commands.Count - 1; i >= 0; i--)
            {
                if (Commander.commands[i] is UnturnedCustomCommand)
                {
                    Commander.commands.RemoveAt(i);
                }
            }
            UnturnedFreneticMod.Instance.PlayerCommands.Clear();
            UnturnedFreneticMod.Instance.AutorunScripts();
            SysConsole.Output(OutputType.INFO, "Reloaded succesfully!");
        }
Beispiel #16
0
 /// <summary>
 /// Invite player with given id to the lobby.
 /// </summary>
 /// <param name="invitee">The steam id of the player to invite.</param>
 /// <returns>true if player was invited, false otherwise</returns>
 public bool InviteToMyLobby(Steamworks.CSteamID invitee)
 {
     if (!IsHost)
     {
         return(false);
     }
     return(Steamworks.SteamMatchmaking.InviteUserToLobby(currentLobbyId, invitee));
 }
Beispiel #17
0
 /// <summary>
 /// Leave current lobby.
 /// </summary>
 private void LeaveLobby()
 {
     Steamworks.SteamMatchmaking.LeaveLobby(currentLobbyId);
     currentLobbyId = Steamworks.CSteamID.Nil;
     mode           = Mode.None;
     state          = State.Idle;
     Logger.Log("Left lobby.");
 }
Beispiel #18
0
        /// <summary>
        /// Update friend list.
        /// </summary>
        void UpdateFriendList()
        {
            if (inviteCooldown > 0.0f)
            {
                inviteCooldown -= Time.deltaTime;
            }
            else
            {
                // Reset invited friend steam id.

                invitedFriendSteamId.Clear();
            }

            timeToUpdateFriendList -= Time.deltaTime;
            if (timeToUpdateFriendList > 0.0f)
            {
                return;
            }

            onlineFriends.Clear();

            Steamworks.EFriendFlags friendFlags =
                Steamworks.EFriendFlags.k_EFriendFlagImmediate;
            int friendsCount = Steamworks.SteamFriends.GetFriendCount(friendFlags);

            for (int i = 0; i < friendsCount; ++i)
            {
                Steamworks.CSteamID friendSteamId =
                    Steamworks.SteamFriends.GetFriendByIndex(i, friendFlags);

                if (Steamworks.SteamFriends.GetFriendPersonaState(friendSteamId) ==
                    Steamworks.EPersonaState.k_EPersonaStateOffline)
                {
                    continue;
                }

                FriendEntry friend = new FriendEntry();
                friend.steamId = friendSteamId;
                friend.name    = Steamworks.SteamFriends.GetFriendPersonaName(friendSteamId);

                Steamworks.FriendGameInfo_t gameInfo;
                Steamworks.SteamFriends.GetFriendGamePlayed(friendSteamId, out gameInfo);
                friend.playingMSC = (gameInfo.m_gameID.AppID() == Client.GAME_APP_ID);

                if (friend.playingMSC)
                {
                    onlineFriends.Insert(0, friend);
                }
                else
                {
                    onlineFriends.Add(friend);
                }
            }

            timeToUpdateFriendList = FRIENDLIST_UPDATE_INTERVAL;
        }
Beispiel #19
0
 /// <summary>
 /// Leave current lobby.
 /// </summary>
 private void LeaveLobby()
 {
     Steamworks.SteamMatchmaking.LeaveLobby(currentLobbyId);
     currentLobbyId = Steamworks.CSteamID.Nil;
     mode           = Mode.None;
     state          = State.Idle;
     players[localPlayerID].Dispose();
     players.Clear();
     Logger.Log("Left lobby.");
 }
        private void SetPlayersList(byte CurrentPage, Steamworks.CSteamID CallerSteamID)
        {
            EffectManager.sendUIEffect(8100, 22, true);
            byte multiplier = (byte)((CurrentPage - 1) * 24);

            for (byte i = multiplier; (i < (24 + multiplier)) && (i < (byte)Provider.clients.Count); i++)
            {
                EffectManager.sendUIEffectText(22, CallerSteamID, true, $"text{i}", $"{Provider.clients[i].playerID.characterName}");
            }
        }
Beispiel #21
0
        /// <summary>
        /// Process handshake message received from the given steam id.
        /// </summary>
        /// <param name="senderSteamId">The steam id of the sender.</param>
        /// <param name="msg">Hand shake message.</param>
        private void HandleHandshake(Steamworks.CSteamID senderSteamId, Messages.HandshakeMessage msg)
        {
            if (IsHost)
            {
                if (players[1] != null)
                {
                    Logger.Log("Received handshake from player but player is already here.");
                    LeaveLobby();
                    return;
                }

                // Setup THE PLAYER

                timeSinceLastHeartbeat = 0.0f;
                players[1]             = new NetPlayer(this, netWorld, senderSteamId);

                // Player can be spawned here safely. Host is already in game and all game objects are here.

                players[1].Spawn();

                SendHandshake();
            }
            else
            {
                if (players[1] == null)
                {
                    Logger.Log("Received handshake from host but host is not here.");
                    LeaveLobby();
                    return;
                }

                Logger.Log("CONNECTION ESTABLISHED!");

                MPController.Instance.LoadLevel("GAME");

                // Host will be spawned when game will be loaded and OnGameWorldLoad callback will be called.
            }

            // Set player state.

            players[1].Teleport(Utils.NetVec3ToGame(msg.spawnPosition), Utils.NetQuatToGame(msg.spawnRotation));
            if (msg.occupiedVehicleId != NetVehicle.INVALID_ID)
            {
                var vehicle = netWorld.GetVehicle(msg.occupiedVehicleId);
                Client.Assert(vehicle != null, $"Player {players[1].GetName()} ({players[1].SteamId}) you tried to join reported that he drives car that does not exists in your game. Vehicle id: {msg.occupiedVehicleId}, passenger: {msg.passenger}");
                players[1].EnterVehicle(vehicle, msg.passenger);
            }

            if (msg.pickedUpObject != NetPickupable.INVALID_ID)
            {
                players[1].PickupObject(msg.pickedUpObject);
            }

            players[1].hasHandshake = true;
        }
Beispiel #22
0
 /// <summary>
 /// Get network player object by steam id.
 /// </summary>
 /// <param name="steamId">The steam id used to find player for.</param>
 /// <returns>Network player object or null if there is not player matching given steam id.</returns>
 public NetPlayer GetPlayer(Steamworks.CSteamID steamId)
 {
     foreach (NetPlayer player in players)
     {
         if (player?.SteamId == steamId)
         {
             return(player);
         }
     }
     return(null);
 }
Beispiel #23
0
 /// <summary>
 /// Find player ID based on SteamID.
 /// </summary>
 /// <param name="steamID">Steam ID of player to find.</param>
 /// <returns></returns>
 public int GetPlayerIDBySteamID(Steamworks.CSteamID steamID)
 {
     foreach (var player in players)
     {
         if (player.Value.SteamId == steamID)
         {
             return(player.Key);
         }
     }
     return(-1);
 }
Beispiel #24
0
        //private void SetCurrentPage(byte page, ulong mSteamID)
        //{
        //    for (byte i = 0; i < Refresh.Refreshes.Length; i++)
        //    {
        //        if (Refresh.Refreshes[i].CallerSteamID.m_SteamID == mSteamID)
        //        {
        //            Refresh.Refreshes[i].CurrentPage = page;
        //            return;
        //        }
        //    }
        //}

        private void SetPlayersList(Steamworks.CSteamID CallerSteamID)
        {
            EffectManager.sendUIEffect(8100, 22, CallerSteamID, true);
            byte multiplier = (byte)((currentPage - 1) * 24);//next 24 player start index

            for (byte i = multiplier; i < 24 + multiplier && i < (byte)Provider.clients.Count; i++)
            {
                EffectManager.sendUIEffectText(22, CallerSteamID, true, $"text{i - multiplier}", $"{Provider.clients[i].playerID.characterName}");
            }
            EffectManager.sendUIEffectText(22, CallerSteamID, true, "pagemax", $"{PagesCountPl}");
            EffectManager.sendUIEffectText(22, CallerSteamID, true, "page", $"{currentPage}");
        }
Beispiel #25
0
        public UnturnedPlayer GetPlayerFromLastMessage(UnturnedPlayer player)
        {
            Steamworks.CSteamID lastMessageFromPlayer = new Steamworks.CSteamID();

            // If the player who sent the message is in the dictionary
            if (LastMessageFromPlayer.ContainsKey(player.CSteamID))
            {
                // Get the player who last messaged him
                LastMessageFromPlayer.TryGetValue(player.CSteamID, out lastMessageFromPlayer);
            }

            return(UnturnedPlayer.FromCSteamID(lastMessageFromPlayer));
        }
 protected override void execute(Steamworks.CSteamID executorID, string parameter)
 {
     foreach (SDG.Unturned.SteamPlayer i in SDG.Unturned.Provider.players)
     {
         if (i.playerID.steamID == executorID)
         {
             i.player.channel.send("askMessage", SDG.Unturned.ESteamCall.OWNER,
                                   SDG.Unturned.ESteamPacket.UPDATE_UNRELIABLE_BUFFER,
                                   new object[] { (byte)89 }); //89 being the message "Busy"
             return;
         }
     }
 }
Beispiel #27
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="netManager">The network manager owning this player.</param>
        /// <param name="netWorld">Network world owning this player.</param>
        /// <param name="steamId">The steam id of the player.</param>
        public NetLocalPlayer(NetManager netManager, NetWorld netWorld, Steamworks.CSteamID steamId) : base(netManager, netWorld, steamId)
        {
            GameDoorsManager.Instance.onDoorsOpen = (GameObject door) => {
                Messages.OpenDoorsMessage msg = new Messages.OpenDoorsMessage();
                msg.position = Utils.GameVec3ToNet(door.transform.position);
                msg.open     = true;
                netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable);
            };

            GameDoorsManager.Instance.onDoorsClose = (GameObject door) => {
                Messages.OpenDoorsMessage msg = new Messages.OpenDoorsMessage();
                msg.position = Utils.GameVec3ToNet(door.transform.position);
                msg.open     = false;
                netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable);
            };

            GameCallbacks.onObjectPickup = (GameObject gameObj) => {
                Messages.PickupObjectMessage msg = new Messages.PickupObjectMessage();
                msg.netId = netWorld.GetPickupableNetId(gameObj);
                Client.Assert(msg.netId != NetPickupable.INVALID_ID, "Tried to pickup not network pickupable.");
                netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable);
            };

            GameCallbacks.onObjectRelease = (bool drop) => {
                Messages.ReleaseObjectMessage msg = new Messages.ReleaseObjectMessage();
                msg.drop = drop;
                netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable);
            };

            BeerCaseManager.Instance.onBottleConsumed = (GameObject bcase) => {
                Messages.RemoveBottleMessage msg = new Messages.RemoveBottleMessage();
                msg.netId = netWorld.GetPickupableNetId(bcase);
                Client.Assert(msg.netId != NetPickupable.INVALID_ID, "Tried to drink from not network beercase.");
                netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable);
            };

            LightSwitchManager.Instance.onLightSwitchUsed = (GameObject lswitch, bool turnedOn) => {
                Messages.LightSwitchMessage msg = new Messages.LightSwitchMessage();
                msg.pos    = Utils.GameVec3ToNet(lswitch.transform.position);
                msg.toggle = turnedOn;
                netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable);
            };

            if (animManager == null)
            {
                animManager = new PlayerAnimManager();
            }
        }
Beispiel #28
0
        /// <summary>
        /// Process incomming network messages.
        /// </summary>
        private void ProcessMessages()
        {
            uint size = 0;

            while (Steamworks.SteamNetworking.IsP2PPacketAvailable(out size))
            {
                if (size == 0)
                {
                    Logger.Log("Received empty p2p packet");
                    continue;
                }

                // TODO: Pre allocate this buffer and reuse it here - we don't want garbage collector to go crazy with that.

                byte[] data = new byte[size];

                uint msgSize = 0;
                Steamworks.CSteamID senderSteamId = Steamworks.CSteamID.Nil;
                if (!Steamworks.SteamNetworking.ReadP2PPacket(data, size, out msgSize, out senderSteamId))
                {
                    continue;
                }

                // TODO: Joining of the messages if are split?

                if (msgSize != size || msgSize == 0)
                {
                    Logger.Log("Invalid packet size");
                    continue;
                }

                if (players[1] != null && players[1].SteamId != senderSteamId)
                {
                    Logger.Log("Received network message from user that is not in the session. (" + senderSteamId + ")");
                    continue;
                }

                MemoryStream stream = new MemoryStream(data);
                BinaryReader reader = new BinaryReader(stream);

                byte messageId = reader.ReadByte();
                if (messageHandlers.ContainsKey(messageId))
                {
                    messageHandlers[messageId](senderSteamId, reader);
                }
            }
        }
Beispiel #29
0
        /// <summary>
        /// Process incomming network messages.
        /// </summary>
        private void ProcessMessages()
        {
            uint size = 0;

            while (Steamworks.SteamNetworking.IsP2PPacketAvailable(out size))
            {
                if (size == 0)
                {
                    Logger.Log("Received empty p2p packet");
                    continue;
                }

                // TODO: Pre allocate this buffer and reuse it here - we don't want garbage
                // collector to go crazy with that.

                byte[] data = new byte[size];

                uint msgSize = 0;
                Steamworks.CSteamID senderSteamId = Steamworks.CSteamID.Nil;
                if (!Steamworks.SteamNetworking.ReadP2PPacket(
                        data, size, out msgSize, out senderSteamId))
                {
                    Logger.Error("Failed to read p2p packet!");
                    continue;
                }

                if (msgSize != size || msgSize == 0)
                {
                    Logger.Error("Invalid packet size");
                    continue;
                }

                MemoryStream stream = new MemoryStream(data);
                BinaryReader reader = new BinaryReader(stream);

                uint protocolId = reader.ReadUInt32();
                if (protocolId != PROTOCOL_ID)
                {
                    Logger.Error("The received message was not sent by MSCMP network layer.");
                    continue;
                }

                byte messageId = reader.ReadByte();
                statistics.RecordReceivedMessage(messageId, size);
                netMessageHandler.ProcessMessage(messageId, senderSteamId, reader);
            }
        }
Beispiel #30
0
        void UnturnedPermissions_OnJoinRequested(Steamworks.CSteamID player, ref SDG.Unturned.ESteamRejection?rejectionReason)
        {
            int playerCount = Provider.clients.Count;

            PreviousMaxPlayers = Provider.maxPlayers;

            if (!UnturnedPlayer.FromCSteamID(player).HasPermission("addslot"))
            {
                return;
            }

            if (playerCount >= Provider.maxPlayers)
            {
                Provider.maxPlayers = byte.Parse((playerCount + 1).ToString());
                SlotsAddedPlayers.Add(player);
            }
        }