public PlayerRepairSystemEvent(IGame game, IClientPlayer clientPlayer, IInnerPlayerControl playerControl, SystemTypes systemType, byte amount)
 {
     Game          = game;
     ClientPlayer  = clientPlayer;
     PlayerControl = playerControl;
     SystemType    = systemType;
     Amount        = amount;
 }
예제 #2
0
 private void Event_PlayerJoin(IClientPlayer byPlayer)
 {
     if (!didSelect && byPlayer.PlayerUID == capi.World.Player.PlayerUID)
     {
         createCharDlg = new GuiDialogCreateCharacter(capi, this);
         createCharDlg.PrepAndOpen();
     }
 }
예제 #3
0
 public Boolean matchPlayer(IClientPlayer match)
 {
     if (match.Equals(_controller))
     {
         return(true);
     }
     return(false);
 }
예제 #4
0
 private void Event_PlayerSpawn(IClientPlayer byPlayer)
 {
     if (mapSink.IsOpened && !MapComps.ContainsKey(byPlayer))
     {
         EntityMapComponent cmp = new EntityMapComponent(capi, otherTexture, byPlayer.Entity);
         MapComps[byPlayer] = cmp;
         mapSink.AddMapData(cmp);
     }
 }
예제 #5
0
        private void WriteJoinedGameMessage(IMessageWriter message, bool clear, IClientPlayer player)
        {
            var playerIds = _players
                            .Where(x => x.Value != player)
                            .Select(x => x.Key)
                            .ToArray();

            Message07JoinedGameS2C.Serialize(message, clear, Code, player.Client.Id, HostId, playerIds);
        }
예제 #6
0
        protected async ValueTask <bool> UnregisteredCall(CheatContext context, IClientPlayer sender)
        {
            if (await sender.Client.ReportCheatAsync(context, "Client sent unregistered call"))
            {
                return(false);
            }

            return(true);
        }
예제 #7
0
        private async Task AssignJester(List <IClientPlayer> gameplayers)
        {
            int r = rnd.Next(gameplayers.Count);

            Jester     = gameplayers[r];
            Jestername = gameplayers[r].Character.PlayerInfo.PlayerName;
            await ServerSendChatToPlayerAsync($"You're the JESTER! (unless you'll be an imposter)", gameplayers[r].Character).ConfigureAwait(false);

            _logger.LogInformation($"- {gameplayers[r].Character.PlayerInfo.PlayerName} is probably the jester.");
        }
예제 #8
0
 public void RemoveDeadPlayer(IClientPlayer player)
 {
     lock (Players)
     {
         if (player != null && Players.Contains(player))
         {
             Players.Remove(player);
         }
     }
 }
예제 #9
0
        public override SkillItem[] GetToolModes(ItemSlot slot, IClientPlayer forPlayer, BlockSelection blockSel)
        {
            if (blockSel == null)
            {
                return(null);
            }
            Block block = forPlayer.Entity.World.BlockAccessor.GetBlock(blockSel.Position);

            return(block is BlockAnvil ? toolModes : null);
        }
예제 #10
0
 internal void RemoveGamePlayer(IClientPlayer player)
 {
     if (_controllers.TryGetValue(player.Game.Code.Code, out var muteController))
     {
         muteController.LeaveFromGame(player);
         return;
     }
     _logger.LogError($"There is no mute controller to pair with game `{player.Game.Code.Code}`.");
     return;
 }
예제 #11
0
        private void Event_PlayerDespawn(IClientPlayer byPlayer)
        {
            EntityMapComponent mp;

            if (MapComps.TryGetValue(byPlayer, out mp))
            {
                mp.Dispose();
                MapComps.Remove(byPlayer);
            }
        }
예제 #12
0
 internal void OnPlayerSpawned(IClientPlayer player)
 {
     if (_controllers.TryGetValue(player.Game.Code.Code, out var muteController))
     {
         // muteController.SyncDeadStatus(); // After the game is over, "player.Character" will be null, so it is not called here.
         muteController.PlayerSpawned();
         return;
     }
     return;
 }
예제 #13
0
        public async ValueTask HandleAlterGame(IMessageReader message, IClientPlayer sender, bool isPublic)
        {
            IsPublic = isPublic;

            using var packet = MessageWriter.Get(MessageType.Reliable);
            message.CopyTo(packet);
            await SendToAllExceptAsync(packet, sender.Client.Id);

            await _eventManager.CallAsync(new GameAlterEvent(this, isPublic));
        }
예제 #14
0
        public Player(IClientPlayer player, Game game)
        {
            this.ClientPlayer = player;
            this.Game         = game;

            if (Game.BotConnected)
            {
                TryWatchMe();
            }
        }
        private async Task MakePlayerLookAtChat(IClientPlayer player)
        {
            await Task.Delay(TimeSpan.FromSeconds(0.5)).ConfigureAwait(false);

            string playername = player.Character.PlayerInfo.PlayerName;
            await player.Character.SetNameAsync($"OPEN CHAT").ConfigureAwait(false);

            await Task.Delay(TimeSpan.FromSeconds(3)).ConfigureAwait(false);

            await player.Character.SetNameAsync(playername).ConfigureAwait(false);
        }
예제 #16
0
 public void MarkWPForSelection(IClientPlayer player)
 {
     if (player.CurrentBlockSelection != null)
     {
         MarkWPForBlockSel(player.CurrentBlockSelection);
     }
     else if (player.CurrentEntitySelection != null)
     {
         MarkWPForEntitySel(player.CurrentEntitySelection);
     }
 }
예제 #17
0
        internal async ValueTask SetPositionAsync(IClientPlayer sender, Vector2 position)
        {
            _targetSyncPosition = position;

            var playerMovementEvent = _pool.Get();

            playerMovementEvent.Reset(_game, sender, _playerControl);
            await _eventManager.CallAsync(playerMovementEvent);

            _pool.Return(playerMovementEvent);
        }
예제 #18
0
        public static void SendMessage(this IClientPlayer player, string msg, int chatGroup = -1)
        {
            if (chatGroup == -1)
            {
                chatGroup = GlobalConstants.CurrentChatGroup;
            }
            ICoreAPI api = player.Entity.Api;

            (api as ICoreClientAPI).SendChatMessage(msg, chatGroup);
            api.World.Logger.Chat(msg);
        }
        internal async ValueTask SetPositionAsync(IClientPlayer sender, Vector2 position, Vector2 velocity)
        {
            Position = position;
            Velocity = velocity;

            var playerMovementEvent = _pool.Get();

            playerMovementEvent.Reset(Game, sender, _playerControl);
            await _eventManager.CallAsync(playerMovementEvent);

            _pool.Return(playerMovementEvent);
        }
예제 #20
0
        protected async ValueTask <bool> ValidateOwnership(CheatContext context, IClientPlayer sender)
        {
            if (!sender.IsOwner(this))
            {
                if (await sender.Client.ReportCheatAsync(context, $"Failed ownership check on {GetType().Name}"))
                {
                    return(false);
                }
            }

            return(true);
        }
예제 #21
0
        private bool CheckIfColliding(IClientPlayer player1, IClientPlayer player2)
        {
            Vector2 crewmatePos = player1.Character.NetworkTransform.Position;
            Vector2 impostorPos = player2.Character.NetworkTransform.Position;
            float   crewmateX   = (float)Math.Round(crewmatePos.X, 1);
            float   crewmateY   = (float)Math.Round(crewmatePos.Y, 1);
            float   impostorX   = (float)Math.Round(impostorPos.X, 1);
            float   impostorY   = (float)Math.Round(impostorPos.Y, 1);

            return(crewmateX <= impostorX + freezeRange && crewmateX >= impostorX - freezeRange &&
                   crewmateY <= impostorY + freezeRange && crewmateY >= impostorY - freezeRange);
        }
예제 #22
0
        protected async ValueTask <bool> ValidateImpostor(CheatContext context, IClientPlayer sender, InnerPlayerInfo playerInfo, bool value = true)
        {
            if (playerInfo.IsImpostor != value)
            {
                if (await sender.Client.ReportCheatAsync(context, "Failed impostor check"))
                {
                    return(false);
                }
            }

            return(true);
        }
예제 #23
0
        protected async ValueTask <bool> ValidateCmd(CheatContext context, IClientPlayer sender, IClientPlayer?target)
        {
            if (target == null || !target.IsHost)
            {
                if (await sender.Client.ReportCheatAsync(context, "Failed cmd check"))
                {
                    return(false);
                }
            }

            return(true);
        }
예제 #24
0
        protected async ValueTask <bool> ValidateBroadcast(CheatContext context, IClientPlayer sender, IClientPlayer?target)
        {
            if (target != null)
            {
                if (await sender.Client.ReportCheatAsync(context, "Failed broadcast check"))
                {
                    return(false);
                }
            }

            return(true);
        }
예제 #25
0
        protected async ValueTask <bool> ValidateHost(CheatContext context, IClientPlayer sender)
        {
            if (!sender.IsHost)
            {
                if (await sender.Client.ReportCheatAsync(context, "Failed host check"))
                {
                    return(false);
                }
            }

            return(true);
        }
예제 #26
0
        private void Event_PlayerSpawn(IClientPlayer byPlayer)
        {
            if (capi.World.Config.GetBool("mapHideOtherPlayers", false) && byPlayer.PlayerUID != capi.World.Player.PlayerUID)
            {
                return;
            }

            if (mapSink.IsOpened && !MapComps.ContainsKey(byPlayer))
            {
                EntityMapComponent cmp = new EntityMapComponent(capi, otherTexture, byPlayer.Entity);
                MapComps[byPlayer] = cmp;
            }
        }
예제 #27
0
        /// <summary>
        /// Sends a private message to a player with in-game chat
        /// </summary>
        /// <param name="toPlayer">The Player to receive the message</param>
        /// <param name="messages">The message to send</param>
        /// <returns></returns>
        public async Task SendPrivateMessageAsync(IClientPlayer toPlayer, params string[] messages)
        {
            if (toPlayer.Character != null)
            {
                var name    = toPlayer.Character.PlayerInfo.PlayerName;
                var message = string.Join("\n\n", messages);
                await toPlayer.Character.SetNameAsync(_susSuitePlugin.FormattedPluginName);

                await toPlayer.Character.SendChatToPlayerAsync(message);

                await toPlayer.Character.SetNameAsync(name);
            }
        }
        public override async ValueTask DeserializeAsync(IClientPlayer sender, IClientPlayer?target, IMessageReader reader, bool initialState)
        {
            if (!await ValidateHost(CheatContext.Deserialize, sender))
            {
                return;
            }

            if (initialState)
            {
                IsNew = reader.ReadBoolean();
            }

            PlayerId = reader.ReadByte();
        }
예제 #29
0
        public override void Deserialize(IClientPlayer sender, IClientPlayer?target, IMessageReader reader, bool initialState)
        {
            if (!sender.IsHost)
            {
                // throw new ImpostorCheatException($"Client attempted to send data for {nameof(InnerPlayerControl)} as non-host");
            }

            if (initialState)
            {
                IsNew = reader.ReadBoolean();
            }

            PlayerId = reader.ReadByte();
        }
예제 #30
0
        public override void BeforeRender(float dt)
        {
            if (meshRefOpaque == null && meshRefOit == null)
            {
                return;
            }

            if (gearInv == null && eagent?.GearInventory != null)
            {
                registerSlotModified();
            }


            if (capi.IsGamePaused)
            {
                return;
            }

            if (player == null && entity is EntityPlayer)
            {
                player = capi.World.PlayerByUid((entity as EntityPlayer).PlayerUID) as IClientPlayer;

                nameTagRenderHandler = capi.ModLoader.GetModSystem <EntityNameTagRendererRegistry>().GetNameTagRenderer(entity);
                OnNameChanged();
            }

            isSpectator = player != null && player.WorldData.CurrentGameMode == EnumGameMode.Spectator;
            if (isSpectator)
            {
                return;
            }


            if (DisplayChatMessages && messageTextures.Count > 0)
            {
                MessageTexture tex = messageTextures.Last();
                if (capi.World.ElapsedMilliseconds > tex.receivedTime + 3500 + 100 * (tex.message.Length - 10))
                {
                    messageTextures.RemoveAt(messageTextures.Count - 1);
                    tex.tex.Dispose();

                    /*if (messageTextures.Count > 0)
                     * {
                     *  tex = messageTextures[messageTextures.Count - 1];
                     *  long msvisible = tex.receivedTime + 3500 + 100 * (tex.message.Length - 10) - capi.World.ElapsedMilliseconds;
                     *  tex.receivedTime += Math.Max(0, 1000 - msvisible);
                     * }*/
                }
            }
        }