Scripts:AutoShutdown

From BF2 Technical Information Wiki
Jump to: navigation, search

Introduction

I got tired of manually warning my users before shutdown, so I wrote this to automate the task for me. It warns players at intervals before shutting down. The warnings occur at 60, 30, 15, 10, 5, 4, 3, 2, 1 minutes before shutdown. This script needs serious work from someone who actually knows Python. I post it here in the hopes that people will improve on it (perhaps by moving the configuration variables into an easily-modified external file?)

Usage

Copy/Paste this script into a text file. Save it as autoshutdown.py in your standard_admin folder. Modify your __init__.py file to import and execute it.

import datetime
import time
import host
import bf2
from bf2 import g_debug

shutdownTime = "01:00" #use 24-hour time. Format should be "hh:mm"
quitOrPause = "pause" #options are "pause" (pause game but leave server running) or "quit" (kill the server)

shutdownTimer = None
def init():
	global shutdownTime, shutdownTimer
	shutdownHour = int(time.strftime("%H",time.strptime(shutdownTime,"%H:%M")))
	shutdownMinute = int(time.strftime("%M",time.strptime(shutdownTime,"%H:%M")))
	today = datetime.datetime.now()
	shutdownTime = datetime.datetime(today.year, today.month, today.day, shutdownHour, shutdownMinute)
	if shutdownHour < today.hour:
		shutdownTime = datetime.datetime(today.year, today.month, today.day + 1, shutdownHour, shutdownMinute)
	shutdownTimer = bf2.Timer(checktime, 1, 1)
	shutdownTimer.setRecurring(60)
	host.rcon_invoke('echo "autoshutdown.py loaded"')

def checktime(whatever):
	global shutdownTime
	global quitOrPause
	
	timeTilShutdown = shutdownTime - datetime.datetime.now()
	minsTilShutdown = int((timeTilShutdown.seconds / 60))
	host.rcon_invoke('echo "Debug: ' + str(minsTilShutdown) + ' minutes to shutdown."')
	msg = None
	if minsTilShutdown == 60:
		msg = 'ADMIN: SERVER SHUTDOWN IN 60 MINUTES'
	if minsTilShutdown == 30:
		msg = 'ADMIN: SERVER SHUTDOWN IN 30 MINUTES'
	if minsTilShutdown == 15:
		msg = 'ADMIN: SERVER SHUTDOWN IN 15 MINUTES'
	if minsTilShutdown == 10:
		msg = 'ADMIN: SERVER SHUTDOWN IN 10 MINUTES'
	if minsTilShutdown == 5:
		msg = 'ADMIN: SERVER SHUTDOWN IN 5 MINUTES'
	if 0 < minsTilShutdown < 5:
		msg = 'ADMIN: SERVER SHUTDOWN IN ' + str(minsTilShutdown) + ' MINUTE(S)'
		
	if msg != None:
		adminMessage(msg)
		
	if minsTilShutdown <= 0:
		msg = 'ADMIN: SERVER WILL SHUTDOWN *NOW*'
		adminMessage(msg)
		timestamp = time.strftime("%Y-%m-%d, %I:%M:%S %p",time.localtime())
		if quitOrPause == "quit": 
			if g_debug: print timestamp + ' -- Server halted.'
			host.rcon_invoke('quit')
		if quitOrPause == "pause": 
			host.rcon_invoke('echo "' + timestamp + ' -- Game paused."')
			if g_debug: print timestamp + ' -- Game paused.'
			host.rcon_invoke('gamelogic.togglepause')

def adminMessage(msg):
	for i in range(1,26):
		host.rcon_invoke('game.sayAll "' + msg + '"')
	host.rcon_invoke('echo "' + msg + '"')
	if g_debug: print msg
Greeze 07:50, 1 Jul 2005 (MDT)
Greeze 04:13, 2 Jul 2005 (MDT) --
  • Removed game status check (was creating multiple timer instances everytime the map changed); moved timer creation to init()
  • Slightly reordered message-sends in the checkTime function
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox