<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://bf2tech.uturista.pt/index.php?action=history&amp;feed=atom&amp;title=Scripts%3AVehicle_Class_Limit</id>
	<title>Scripts:Vehicle Class Limit - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://bf2tech.uturista.pt/index.php?action=history&amp;feed=atom&amp;title=Scripts%3AVehicle_Class_Limit"/>
	<link rel="alternate" type="text/html" href="https://bf2tech.uturista.pt/index.php?title=Scripts:Vehicle_Class_Limit&amp;action=history"/>
	<updated>2026-08-06T01:13:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://bf2tech.uturista.pt/index.php?title=Scripts:Vehicle_Class_Limit&amp;diff=121&amp;oldid=prev</id>
		<title>Pireax: Created page with &quot;__TOC__ == Introduction  ==  This ModManager script prevents use of certain vehicle classes.  Whenever a player enters one of the forbidden vehicles a 10 second timer is start...&quot;</title>
		<link rel="alternate" type="text/html" href="https://bf2tech.uturista.pt/index.php?title=Scripts:Vehicle_Class_Limit&amp;diff=121&amp;oldid=prev"/>
		<updated>2018-06-22T15:34:25Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;__TOC__ == Introduction  ==  This ModManager script prevents use of certain vehicle classes.  Whenever a player enters one of the forbidden vehicles a 10 second timer is start...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__TOC__&lt;br /&gt;
== Introduction  ==&lt;br /&gt;
&lt;br /&gt;
This ModManager script prevents use of certain vehicle classes.&lt;br /&gt;
&lt;br /&gt;
Whenever a player enters one of the forbidden vehicles a 10 second timer is started if it&amp;#039;s not already running.&lt;br /&gt;
&lt;br /&gt;
When the timer is activated it checks all the players and tries to punish the trespassers. As it&amp;#039;s almost impossible to kill a player serverside (the player could be standing near a supply drop, health pack, heli landing pack etc.) the script decreases the health of player and the occupied vehicle, hoping for a fast explosion.&lt;br /&gt;
&lt;br /&gt;
The timer is deactivated if no players were in the forbidden vehicles.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites  ==&lt;br /&gt;
&lt;br /&gt;
[[ModManager|ModManager]] or [http://www.bf2cc.com/ BF2CC]&lt;br /&gt;
&lt;br /&gt;
== Install  ==&lt;br /&gt;
&lt;br /&gt;
* unzip the file (or copy and paste into &amp;#039;&amp;#039;mm_climit.py&amp;#039;&amp;#039;) to &amp;#039;&amp;#039;admin/modules&amp;#039;&amp;#039; in your Battlefield 2 server install.&lt;br /&gt;
* if necessary, edit the file and change the forbidden classes (by default the forbidden classes are Armor, Helicopter and Aircraft)&lt;br /&gt;
* change your &amp;#039;&amp;#039;modmanager.con&amp;#039;&amp;#039; and include the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;modmanager.loadModule &amp;quot;mm_climit&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Code  ==&lt;br /&gt;
&lt;br /&gt;
=== Download  ===&lt;br /&gt;
&lt;br /&gt;
The source is included below and the current version is also available [http://www.slo-gamers.com/upload/mm_climit.zip here].&lt;br /&gt;
&lt;br /&gt;
=== Readable  ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# vim: ts=4 sw=4 noexpandtab&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Vehicle class limit module.&lt;br /&gt;
&lt;br /&gt;
===== About =====&lt;br /&gt;
 This ModManager script prevents use of certain vehicle classes.&lt;br /&gt;
 Whenever a player enters one of the forbidden vehicles a 10 second timer is started if&lt;br /&gt;
 it&amp;#039;s not already running.&lt;br /&gt;
 When the timer is activated it checks all the players and tries to punish the trespassers.&lt;br /&gt;
 As it&amp;#039;s almost impossible to kill a player serverside (the player could be standing near&lt;br /&gt;
 a supply drop, health pack, heli landing pack etc.) the script decreases the health of&lt;br /&gt;
 player and the occupied vehicle, hoping for a fast explosion. ;)&lt;br /&gt;
 The timer is deactivated if no players were in the forbidden vehicles.&lt;br /&gt;
&lt;br /&gt;
===== Config =====&lt;br /&gt;
 Enter the forbidden classes in the ForbiddenTypes list below&lt;br /&gt;
&lt;br /&gt;
===== History =====&lt;br /&gt;
&lt;br /&gt;
 v1.0 - 20060119:&lt;br /&gt;
 Initial public version&lt;br /&gt;
 v0.9 - 20051224:&lt;br /&gt;
 Internal release&lt;br /&gt;
&lt;br /&gt;
Author: graag42atgmaildotcom&lt;br /&gt;
You&amp;#039;re free to use and modify this script&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import bf2&lt;br /&gt;
import host&lt;br /&gt;
import mm_utils&lt;br /&gt;
from bf2.stats.constants import *&lt;br /&gt;
&lt;br /&gt;
# Set the version of your module here&lt;br /&gt;
__version__ = 1.0&lt;br /&gt;
&lt;br /&gt;
# Set the required module versions here&lt;br /&gt;
__required_modules__ = {&lt;br /&gt;
    &amp;#039;modmanager&amp;#039;: 1.0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Does this module support reload ( are all its reference closed on shutdown? )&lt;br /&gt;
__supports_reload__ = True&lt;br /&gt;
&lt;br /&gt;
# Set the description of your module here&lt;br /&gt;
__description__ = &amp;quot;VehicleClassLimit v%s&amp;quot; % __version__&lt;br /&gt;
&lt;br /&gt;
#comma separated list of forbidden classes ( defined in bf2.stats.constants )&lt;br /&gt;
ForbiddenTypes = [VEHICLE_TYPE_ARMOR, VEHICLE_TYPE_AVIATOR, VEHICLE_TYPE_HELICOPTER]       &lt;br /&gt;
&lt;br /&gt;
updateTimer = None&lt;br /&gt;
 &lt;br /&gt;
class NoFly( object ):&lt;br /&gt;
&lt;br /&gt;
    def __init__( self, modManager ):&lt;br /&gt;
        # ModManager reference&lt;br /&gt;
        self.mm = modManager&lt;br /&gt;
       &lt;br /&gt;
        # Internal shutdown state&lt;br /&gt;
        self.__state = 0&lt;br /&gt;
       &lt;br /&gt;
        # Add any static initialisation here.&lt;br /&gt;
        # Note: Handler registration should not be done here&lt;br /&gt;
        # but instead in the init() method&lt;br /&gt;
&lt;br /&gt;
    def onEnterVehicle( self, player, vehicle, freeSoldier):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Player entered a vehicle - check if the class is allowed and start the timer in not.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        if 1 != self.__state:&lt;br /&gt;
            return 0&lt;br /&gt;
       &lt;br /&gt;
        # Put your actions here&lt;br /&gt;
        if self.checkPlayerVehicle( player, vehicle, 0 ):&lt;br /&gt;
            self.StartTimer()&lt;br /&gt;
           &lt;br /&gt;
&lt;br /&gt;
    def StartTimer( self ):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Start the timer if the state allows it and the timer isn&amp;#039;t already started&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        if 1 != self.__state:&lt;br /&gt;
            return 0&lt;br /&gt;
        if not self.updateTimer:&lt;br /&gt;
            #self.mm.info( &amp;quot;Starting timer&amp;quot; )&lt;br /&gt;
            #mm_utils.msg_server( &amp;quot;Starting timer&amp;quot; )&lt;br /&gt;
            self.updateTimer = bf2.Timer(self.onUpdate, 10, 1)&lt;br /&gt;
            self.updateTimer.setRecurring(10)&lt;br /&gt;
        else:&lt;br /&gt;
            #self.mm.info( &amp;quot;Timer already enabled&amp;quot; )&lt;br /&gt;
            #mm_utils.msg_server( &amp;quot;Timer already enabled&amp;quot; )&lt;br /&gt;
            pass&lt;br /&gt;
&lt;br /&gt;
    def StopTimer( self ):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Shutdown the timer&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        if self.updateTimer:&lt;br /&gt;
            #self.mm.info( &amp;quot;Stopping timer&amp;quot; )&lt;br /&gt;
            #mm_utils.msg_server( &amp;quot;Stopping timer&amp;quot; )&lt;br /&gt;
            self.updateTimer.destroy()&lt;br /&gt;
            self.updateTimer = None&lt;br /&gt;
        else:&lt;br /&gt;
            #self.mm.info( &amp;quot;Timer already stopped&amp;quot; )&lt;br /&gt;
            #mm_utils.msg_server( &amp;quot;Timer already stopped&amp;quot; )&lt;br /&gt;
            pass&lt;br /&gt;
   &lt;br /&gt;
    def checkPlayerVehicle( self, player, vehicle, mode ):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;mode 0 - player just entered vehicle, 1 - timed check&lt;br /&gt;
        if the vehicle class is forbidden:&lt;br /&gt;
            mode 0 - notify player via server message&lt;br /&gt;
            mode 1 - punish player&lt;br /&gt;
        returns True if player is in forbidden vehicle class, False othervise&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
       &lt;br /&gt;
        forbiddenClass = False&lt;br /&gt;
        try:&lt;br /&gt;
            vehicleType = getVehicleType(vehicle.templateName)&lt;br /&gt;
            vehicleDamage = vehicle.getDamage()&lt;br /&gt;
            body=player.getDefaultVehicle()&lt;br /&gt;
            bodyHealth=body.getDamage()&lt;br /&gt;
           &lt;br /&gt;
            #debug&lt;br /&gt;
            #if 1 == mode:&lt;br /&gt;
            #    self.mm.info( &amp;quot;Player %s (health %d) is in %s (class %d, health %d)&amp;quot; % ( player.getName(), bodyHealth, vehicle.templateName, vehicleType, vehicleDamage ) )&lt;br /&gt;
            #    #mm_utils.msg_server( &amp;quot;Player %s (health %d) is in %s (class %d, health %d)&amp;quot; % ( player.getName(), bodyHealth, vehicle.templateName, vehicleType, vehicleDamage ) )&lt;br /&gt;
            #else:&lt;br /&gt;
            #    self.mm.info( &amp;quot;Player %s (health %d) entered %s (class %d, health %d)&amp;quot; % ( player.getName(), bodyHealth, vehicle.templateName, vehicleType, vehicleDamage ) )&lt;br /&gt;
            #    #mm_utils.msg_server( &amp;quot;Player %s (health %d) entered %s (class %d, health %d)&amp;quot; % ( player.getName(), bodyHealth, vehicle.templateName, vehicleType, vehicleDamage ) )&lt;br /&gt;
           &lt;br /&gt;
            if vehicleType in ForbiddenTypes:&lt;br /&gt;
                forbiddenClass = True&lt;br /&gt;
                if 1 == mode:&lt;br /&gt;
                    #punish&lt;br /&gt;
                    mm_utils.msg_server( &amp;quot;Oh noes %s!&amp;quot; % ( player.getName() ) )&lt;br /&gt;
                    vehicle.setDamage(0.01)&lt;br /&gt;
                    body.setDamage(0.01)&lt;br /&gt;
                else:&lt;br /&gt;
                    #notify&lt;br /&gt;
                    mm_utils.msg_server( &amp;quot;%s entered %s. Somebody set up us the bomb. Get out, QUICK!&amp;quot; % ( player.getName(), vehicle.templateName ) )&lt;br /&gt;
        except:&lt;br /&gt;
            forbiddenClass = False&lt;br /&gt;
           &lt;br /&gt;
        return forbiddenClass&lt;br /&gt;
   &lt;br /&gt;
    def init( self ):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Provides default initialisation.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
       &lt;br /&gt;
        # Register your game handlers and provide any&lt;br /&gt;
        # other dynamic initialisation here&lt;br /&gt;
        self.updateTimer = None&lt;br /&gt;
       &lt;br /&gt;
        if 0 == self.__state:&lt;br /&gt;
            # Register your host handlers here&lt;br /&gt;
            host.registerHandler( &amp;#039;EnterVehicle&amp;#039;, self.onEnterVehicle, 1 )&lt;br /&gt;
           &lt;br /&gt;
        # Update to the running state&lt;br /&gt;
        self.__state = 1&lt;br /&gt;
       &lt;br /&gt;
        # start the timer: if the module was reset during the game at least one check will be made&lt;br /&gt;
        # if no players are in forbidden vehicles the timer will shut down until someone enters one&lt;br /&gt;
        self.StartTimer()&lt;br /&gt;
       &lt;br /&gt;
    def onUpdate( self, data ):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;timed check of all players&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        if 1 != self.__state:&lt;br /&gt;
            return&lt;br /&gt;
               &lt;br /&gt;
        needTimer = False&lt;br /&gt;
        for player in bf2.playerManager.getPlayers():&lt;br /&gt;
            try:&lt;br /&gt;
                vehicle=player.getVehicle();&lt;br /&gt;
                if self.checkPlayerVehicle(player, vehicle, 1): needTimer = True&lt;br /&gt;
            except:&lt;br /&gt;
                try:&lt;br /&gt;
                    player_name = player.getName()&lt;br /&gt;
                except:&lt;br /&gt;
                    player_name = &amp;#039;unknown&amp;#039;&lt;br /&gt;
                self.mm.error( &amp;quot;Failed to check player &amp;#039;%s&amp;#039;&amp;quot; % player_name, True )&lt;br /&gt;
               &lt;br /&gt;
        #do we still need the timer (at least 1 player in a forbidden class vehicle)?&lt;br /&gt;
        if needTimer:&lt;br /&gt;
            self.StartTimer()&lt;br /&gt;
        else:&lt;br /&gt;
            self.StopTimer()&lt;br /&gt;
       &lt;br /&gt;
    def shutdown( self ):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Shutdown and stop processing.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # Unregister game handlers and do any other&lt;br /&gt;
        # other actions to ensure your module no longer affects&lt;br /&gt;
        # the game in anyway&lt;br /&gt;
       &lt;br /&gt;
        #stop the timer&lt;br /&gt;
        self.StopTimer&lt;br /&gt;
        # Flag as shutdown as there is currently way to:&lt;br /&gt;
        # host.unregisterHandler&lt;br /&gt;
        self.__state = 2&lt;br /&gt;
&lt;br /&gt;
    def update( self ):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Process and update.&lt;br /&gt;
        Note: This is called VERY often processing in here should&lt;br /&gt;
        be kept to an absolute minimum.&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
def mm_load( modManager ):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Creates and returns your object.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return NoFly( modManager )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pireax</name></author>
	</entry>
</feed>