コード例 #1
0
ファイル: CoreScripts.cs プロジェクト: zgbjmy2009/CypherCore
 // Called when a world shutdown is initiated.
 public virtual void OnShutdownInitiate(ShutdownExitCode code, ShutdownMask mask)
 {
 }
コード例 #2
0
        static bool ShutdownServer(StringArguments args, CommandHandler handler, ShutdownMask shutdownMask, ShutdownExitCode defaultExitCode)
        {
            if (args.Empty())
            {
                return(false);
            }

            string delayStr = args.NextString();

            if (delayStr.IsEmpty())
            {
                return(false);
            }

            int delay;

            if (int.TryParse(delayStr, out delay))
            {
                //  Prevent interpret wrong arg value as 0 secs shutdown time
                if ((delay == 0 && (delayStr[0] != '0' || delayStr.Length > 1 && delayStr[1] != '\0')) || delay < 0)
                {
                    return(false);
                }
            }
            else
            {
                delay = (int)Time.TimeStringToSecs(delayStr);

                if (delay == 0)
                {
                    return(false);
                }
            }

            string reason      = "";
            string exitCodeStr = "";
            string nextToken;

            while (!(nextToken = args.NextString()).IsEmpty())
            {
                if (nextToken.IsNumber())
                {
                    exitCodeStr = nextToken;
                }
                else
                {
                    reason  = nextToken;
                    reason += args.NextString("\0");
                    break;
                }
            }

            int exitCode = (int)defaultExitCode;

            if (!exitCodeStr.IsEmpty())
            {
                if (!ParseExitCode(exitCodeStr, out exitCode))
                {
                    return(false);
                }
            }

            // Override parameter "delay" with the configuration value if there are still players connected and "force" parameter was not specified
            if (delay < WorldConfig.GetIntValue(WorldCfg.ForceShutdownThreshold) && !shutdownMask.HasAnyFlag(ShutdownMask.Force) && !IsOnlyUser(handler.GetSession()))
            {
                delay = WorldConfig.GetIntValue(WorldCfg.ForceShutdownThreshold);
                handler.SendSysMessage(CypherStrings.ShutdownDelayed, delay);
            }

            Global.WorldMgr.ShutdownServ((uint)delay, shutdownMask, (ShutdownExitCode)exitCode, reason);

            return(true);
        }