[bf1942] How to test high ping kicker is working

Nicolo Tüllmann Nico at immortalesclan.de
Tue Jun 28 04:34:42 EDT 2005


Can enybody make a step be step instuction for a default Server please ?

I make in the dirctory bf2/mods/bf2/settings
the file adminsettings.com

bfno.highPingAutoKick 1
bfno.highPingLimit 20
bfno.highPingWarnings 3
bfno.highPingCheckInterval 30


then i make in the serversettings.con
sv.adminScript "bfno.py"

Now in the direktory
bf2/admin the file
bfno.py

bfno.highPingAutoKick 1
bfno.highPingLimit 20
bfno.highPingWarnings 3
bfno.highPingCheckInterval 30

now in the pfad
bf2/admin/standard_admin edit the file __init__.py

import autobalance
import tk_punish
import bf2cc
import pingkick.py

autobalance.init()
tk_punish.init()
pingkick.init()

Now in the pfad bf2/admin/standard  i make a file it calls pingkick.py
# ------------------------------------------------------------------------
# Module: pingkick.py
# Authors: Kybber and Panic, Battlefield.no
# Version 1.0
# Description:
#   This script kicks players with high ping, based on three different
#   settings in the file 'adminsettings.con', loaded by the modified admin
#   script (sv.adminScript = bfno_v1.1.py). See requirements for details.
# Requirements:
#   1. The Battlefield.no modified admin script (bfno_v1.1.py) v1.1
#   2. The file adminsettings.con (see 1) with the following settings:
#      - bfno.highPingAutoKick <1|0>
#      - bfno.highPingLimit <integer>
#      - bfno.highPingWarnings <integer>
# Installation:
#   Place this script in your <bf2>/admin/standard_admin directory, and
#   add the lines 'import pingkick' and 'pingkick.init()' to the file
#   '<bf2>/admin/standard_admin/__init__.py'.
# ------------------------------------------------------------------------


# ------------------------------------------------------------------------
#                        I M P O R T
# ------------------------------------------------------------------------

import host
import bf2
from bf2 import g_debug

# ------------------------------------------------------------------------
#                       V A R I A B L E S
# ------------------------------------------------------------------------

# We need a timer for our ping kicking:
pktimer = 30

# Interval between ping checks (overridden by
bf2.adminoptions['bfno.highPingCheckInterval']):
interval = 30

# ------------------------------------------------------------------------
#                       F U N C T I O N S
# ------------------------------------------------------------------------


# ------------------------------------------------------------------------
# The init function run by the standard_admin/__init__ functions:
# ------------------------------------------------------------------------
def init():
   global pktimer
   global interval
   if g_debug: print 'PINGKICK: initializing pingkick script'
   autokick = None
   # Try to access the autokick setting:
   try:
      autokick = str(bf2.adminoptions['bfno.highPingAutoKick'])
      pinglimit = int(bf2.adminoptions['bfno.highPingLimit'])
      pingwarnings = int(bf2.adminoptions['bfno.highPingWarnings'])
   except:
      if g_debug: print "PINGKICK: WARNING - Could not get settings from
'bf2adminoptions'!"
      return False

   # Print debug message if autokick is disabled:
   if '1' != autokick:
      if g_debug: print 'PINGKICK: High ping autokick not enabled'

   # Autokick is enabled, so hook it up:
   else:
      if g_debug: print 'PINGKICK: Enabling kick for high ping: %s/%s'
%(bf2.adminoptions['bfno.highPingLimit'],
bf2.adminoptions['bfno.highPingWarnings'])

      # Register 'PlayerConnect' hook:
      host.registerHandler('PlayerConnect', onPlayerConnect, 1)

      # Reset TK Warnings
      for p in bf2.playerManager.getPlayers():
         onPlayerConnect(p)

      # PingKickTimer:
      enableTimer()
# ------------------------------------------------------------------------


# ------------------------------------------------------------------------
# Enable the pktimer:
# ------------------------------------------------------------------------
def enableTimer():
   """Enables the timer that runs the 'checkPing' function which kicks
high-pingers"""
   global pktimer
   if pktimer:
      return True
   else:
      # Try to read the ping check interval:
      try:
         interval = int(bf2.adminoptions['bfno.highPingCheckInterval'])
         if g_debug: print "PINGKICK: Interval set to " + str(interval)
      except:
         if g_debug: print "PINGKICK: WARNING - Could not get the
'bfno.highPingCheckInterval' setting. Not starting timer!"
         return False
      # Create the timer:
      if g_debug: print "PINGKICK: Timer not enabled. Enabling..."
      pktimer = bf2.Timer(checkPing, interval, 1)
      pktimer.setRecurring(10)
      # Print debug message telling the status of the timer:
      if pktimer:
         if g_debug: print "PINGKICK: Time = %s" % (pktimer.getTime())
         return True
      else:
         if g_debug: print "PINGKICK: Not enabled"
         return False
# ------------------------------------------------------------------------


# ------------------------------------------------------------------------
# Loop all players, checking their ping, kick high-pinger:
# ------------------------------------------------------------------------
def checkPing(data):
   """Checks ping of all players, and kicks high-pingers"""

   # Make sure our timer is enabled:
   if not enableTimer(): return

   if g_debug: print "PINGKICK: Running checkPing"

   # Try to read the adminoptions dict from bf2
   # NB: This requires a modified version of the 'sv.adminScript'
(default.py)
   #     which again requires the 'adminsettings.con' file.
   try:
      limit = int(bf2.adminoptions['bfno.highPingLimit'])
      maxwarns = int(bf2.adminoptions['bfno.highPingWarnings'])
   except:
      return False

   if g_debug: print "PINGKICK: Ping-limit set to " + str(limit)

   # Loop all players
   for p in bf2.playerManager.getPlayers():
      name = str(p.getName())
      # Check if this player has reached the limit for maximum warnongs
      if maxwarns == p.pingWarnings:
         # Kick if limit is reached:
         print "PINGKICK: Kicking player " + name + " for high ping"
         result = host.rcon_invoke("admin.kickPlayer " + str(p.index))
      else:
         # Check the ping if the limit hasn't been reached:
         ping = None
         try:
            ping = p.getPing()
         except:
            pass
         # If we have a valid ping, check it, and issue a warning if the
ping exceeds the limit:
         if ping:
            if g_debug: print "PINGKICK: " + name + " has " + str(ping) + "
in ping and has " + str(p.pingWarnings) + " Ping-warnings"
            if ping > limit:
               p.pingWarnings += 1
               print "PINGKICK: Player " + name + " exceeds ping limit for
the " + str(p.pingWarnings) + ". time"
               host.rcon_invoke("game.sayAll \"WARNING: " + name + " has
exeeded the ping limit " + str(p.pingWarnings) + " time(s)\"")
            # Issue a warning if a player has reached the maximum number of
warnings. Will be kicked next time 'checkPing' is run:
            if maxwarns == p.pingWarnings:
               host.rcon_invoke("game.sayAll \"Kicking player " + name + "
for high ping\"")
# ------------------------------------------------------------------------


# ------------------------------------------------------------------------
# Callback function for the "PlayerConnect" event:
# ------------------------------------------------------------------------
def onPlayerConnect(p):
   """Resets the ping warning counter for the player"""
   print "PINGKICK: Player connected"
   p.pingWarnings = 0 # Reset the 'TK Warnings' counter.
# ------------------------------------------------------------------------


now i start the server with the command


screen ./start.sh

But no kick with High Ping.

Please help me

Thanks for all




----- Original Message ----- 
From: "Panic" <panic at battlefield.no>
To: <bf1942 at icculus.org>
Sent: Monday, June 27, 2005 10:20 PM
Subject: Re: [bf1942] How to test high ping kicker is working


> Hei Chris
>
> Christian wrote:
>
> >Hi Panic,
> >
> >you have a small typing error in the section "Creating the Admin
> >Settings File" from the modified admin script ('default.py')
> >
> >adminsetting.con should be adminsettings.con
> >
> I've updated the wiki now. Thanks a lot for letting me know :-)
>
> ----------------------------------------------------------------------
>  Name: Frode Hommedal
>  Location: Norway
>  Day job: VLSI designer and programmer
>  Site: Battlefield.no [ http://www.battlefield.no ]
> ----------------------------------------------------------------------
>  International Game Server Operators Association [ http://igsoa.com ]
> ----------------------------------------------------------------------
>




More information about the Bf1942 mailing list