コード例 #1
0
        void OnPlayerDisconnected(ref HookContext ctx, ref HookArgs.PlayerLeftGame args)
        {
            if (Terraria.Main.ServerSideCharacter)
            {
#if ENTITY_FRAMEWORK_7
                using (var dbCtx = new TContext())
#elif DAPPER
                using (var dbCtx = DatabaseFactory.CreateConnection())
#endif
                {
                    using (var txn = dbCtx.BeginTransaction())
                    {
                        CharacterManager.SavePlayerData(dbCtx, txn, true, ctx.Player);
                        txn.Commit();
                    }
                }
            }
            if (ctx.Player != null)
            {
                if (CommandDictionary.ContainsKey(ctx.Player.name))
                {
                    CommandDictionary.Remove(ctx.Player.name);
                }
                //ProgramLog.Log("{0}", ctx.Player.name); //, args.Prefix + " " + args.ArgumentString);
            }
#if TDSMServer
            if (RestartWhenNoPlayers && ClientConnection.All.Count - 1 == 0)
            {
                PerformRestart();
            }
#endif
        }
コード例 #2
0
        void OnPlayerDisconnected(ref HookContext ctx, ref HookArgs.PlayerLeftGame args)
        {
#if TDSMServer
            if (RestartWhenNoPlayers && ClientConnection.All.Count - 1 == 0)
            {
                PerformRestart();
            }
#endif
        }
コード例 #3
0
        void OnPlayerLeave(ref HookContext ctx, ref HookArgs.PlayerLeftGame args)
        {
            var player = ctx.Player;

            if (properties.RememberPlayerPositions && player != null && player.AuthenticatedAs != null)
            {
                SpawnPositions[player.Name] = player.Position / 16;
            }
        }
コード例 #4
0
        public static void OnPlayerLeave(Player player)
        {
            #if Full_API
            var ctx = new HookContext
            {
                Player = player,
                Sender = player
            };

            var args = new HookArgs.PlayerLeftGame
            {
                Slot = player.whoAmI
            };

            ctx.SetResult(HookResult.DEFAULT, false);
            HookPoints.PlayerLeftGame.Invoke(ref ctx, ref args);
            #endif
        }
コード例 #5
0
        public static void OnPlayerLeft(Player player, ServerSlot slot, bool announced)
        {
            player.active = false;

            if (announced)
            {
                ProgramLog.Log("{0} @ {1}: LEAVE {2}", slot.remoteAddress, slot.Id, player.name);

                var msg = NewNetMessage.PrepareThreadInstance();

                msg.SynchBegin(player.whoAmI, 0 /*inactive*/);

                if (player.DisconnectReason != null)
                {
                    msg.PlayerChat(255, string.Concat(player.Name, " disconnected (", player.DisconnectReason, ")."), 255, 165, 0);
                }
                else
                {
                    msg.PlayerChat(255, string.Concat(player.name, " has left."), 255, 240, 20);
                }

                msg.BroadcastExcept(player.whoAmI);
            }

            var ctx = new HookContext
            {
                Player = player,
                Sender = player,
            };

            var args = new HookArgs.PlayerLeftGame
            {
                Slot = slot.Id
            };

            HookPoints.PlayerLeftGame.Invoke(ref ctx, ref args);
        }
コード例 #6
0
        void AlertIP(ref HookContext ctx, ref HookArgs.PlayerLeftGame args)
        {
            string msg = String.Format("User: {0} has left :(", ctx.Player.name);

            instance.SendMessage(msg, _userName, _channel, _iconEmoji);
        }