Esempio n. 1
0
            private static unsafe int OnSendServerToPlayerCharList(void *pMessage, void *pPlayer)
            {
                CNWSPlayer player = CNWSPlayer.FromPointer(pPlayer);

                if (player == null)
                {
                    return(Hook.CallOriginal(pMessage, pPlayer));
                }

                uint playerId = player.m_nPlayerID;

                CNetLayerPlayerInfo playerInfo = NetLayer.GetPlayerInfo(playerId);
                string ipAddress = NetLayer.GetPlayerAddress(playerId).ToString();

                OnClientConnect eventData = ProcessEvent(new OnClientConnect
                {
                    PlayerName     = playerInfo.m_sPlayerName.ToString(),
                    ClientVersion  = new Version(playerInfo.m_nBuildVersion, playerInfo.m_nPatchRevision),
                    ClientPlatform = (PlayerPlatform)playerInfo.m_nPlatformId,
                    CDKey          = playerInfo.m_lstKeys[0].sPublic.ToString(),
                    DM             = playerInfo.m_bGameMasterPrivileges.ToBool(),
                    IP             = ipAddress,
                });

                if (!eventData.BlockConnection)
                {
                    return(Hook.CallOriginal(pMessage, pPlayer));
                }

                string kickMessage = eventData.KickMessage ?? string.Empty;

                DelayDisconnectPlayer(playerId, kickMessage);
                return(Hook.CallOriginal(pMessage, pPlayer));
            }
Esempio n. 2
0
            private static async void DelayDisconnectPlayer(uint playerId, string kickMessage)
            {
                await NwTask.NextFrame();

                CNetLayerPlayerInfo playerInfo = NetLayer.GetPlayerInfo(playerId);

                if (playerInfo != null)
                {
                    NetLayer.DisconnectPlayer(playerId, 5838, true.ToInt(), kickMessage.ToExoString());
                }
            }