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)); }
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()); } }