The creator of these plugins has not shown activity in a while. Posting in this board may not result in a fast reply or a reply at all. [ Read the full Support Disclaimer here ]

You are here: Big Brother Bot ForumAdd-OnsPlugins DiscussionPlugins by Anubis (Moderator: Anubis)Weapon Control Plugin - Antinoob v1.0.7
Pages: 1 ... 11 12 [13] 14 15 ... 28   Go Down
  Print  
Author Topic: Weapon Control Plugin - Antinoob v1.0.7  (Read 61604 times) Bookmark and Share
Newbie
*
Posts: 7
Offline Offline
WWW
« Reply #180 on: August 14, 2009, 12:51:41 PM »

Can someone please post a working plugin_antinoob.xml for version v.1.0.7 in this thread.  Thanks.
Logged

Moderator
*
OS: Linux
Type: Owner dedicated server(s)
Gameservers: COD4
Posts: 228
Offline Offline
WWW
« Reply #181 on: September 09, 2009, 04:52:53 AM »

Can someone please post a working plugin_antinoob.xml for version v.1.0.7 in this thread.  Thanks.

Which weapons would you like to block? How many seconds should then blocked? 1, 10... forever?
Logged

B3 Contrib/Support
*
OS: --No B3 installed--
Type: --No B3 installed--
Posts: 1225
Offline Offline
Support Specialty: B3-Core, CoD/BFBC2 parsers, FTP-functionality, Plugin development
« Reply #182 on: September 09, 2009, 08:54:13 AM »

Anubis, I think that the problem is, noone has managed to get version 1.0.7 to work properly.

It loads, announces everything, etc etc, then doesn't warn anyone, returning Unspecified errors.
Logged

Full Member
***
Posts: 84
Offline Offline
WWW
« Reply #183 on: September 09, 2009, 11:54:31 AM »

i think people are just having a hard time figuring out how to properly set the config XML for what they need the bot to warn for.

i gave up on figuring it out b/c there were no examples and i couldn't figure it out by looking at the code so i just removed dependency on the config file and hard-coded the warning checks for our seperate rule sets.

Anubis: i think if you included a config file in the install package that had commented out explanatory sample config lines for the various config options available (timed vs forever, with mod settings vs without, etc.) it would help people a lot.

it would also save you having to write the .XML's for people that want to use this.
Logged
Moderator
*
OS: Linux
Type: Owner dedicated server(s)
Gameservers: COD4
Posts: 228
Offline Offline
WWW
« Reply #184 on: September 11, 2009, 02:21:07 AM »

Anubis, I think that the problem is, noone has managed to get version 1.0.7 to work properly.

It loads, announces everything, etc etc, then doesn't warn anyone, returning Unspecified errors.

It really sounds strange. I use it Smiley It's still working on our two servers with no problems.
Logged

B3 Contrib/Support
*
OS: --No B3 installed--
Type: --No B3 installed--
Posts: 1225
Offline Offline
Support Specialty: B3-Core, CoD/BFBC2 parsers, FTP-functionality, Plugin development
« Reply #185 on: September 11, 2009, 02:23:31 AM »

Is this the config for the latest version?

Code:
<configuration plugin="antinoob">
    <settings name="settings">
        <set name="warn_duration">10</set>
        <set name="warning_rule">rule10</set>
        <set name="unlock_message">^3 %s second passed - all weapons unlocked!!!</set>
        <set name="info_message">^3 In the first %s seconds ^1NO Nades,Airstike,Tubes!!!</set>
    </settings>
    <maps>
        <map name="mp_citystreets">15</map>
    </maps>   
    <weapons>
        <!-- Tubes -->
        <weapon perm="0">gl_ak47_mp</weapon>
        <weapon perm="0">gl_g3_mp</weapon>
        <weapon perm="0">gl_g36c_mp</weapon>
        <weapon perm="0">gl_m4_mp</weapon>
        <weapon perm="0">gl_m14_mp</weapon>
        <weapon perm="0">gl_m16_mp</weapon>
        <weapon perm="0">gl_mp</weapon>       
        <!-- Nades -->   
        <weapon perm="0">frag_grenade_mp</weapon>
        <!-- Airstike -->       
        <weapon perm="0">artillery_mp</weapon>
        <!-- Heli -->       
        <!-- <weapon perm="0">helicopter_mp</weapon>        -->   
        <!-- Martyr -->
        <weapon perm="0">frag_grenade_short_mp</weapon>
    </weapons>
</configuration>
?
Logged

Jr. Member
**
Posts: 23
Offline Offline
« Reply #186 on: September 24, 2009, 04:23:51 AM »

Hi all,

I really like this plugin and took the liberty to fiddle around a bit (I saw a lot of questions in this thread). Hope you don't mind Anubis.

I saw some minor bugs in Antinoob.py and changed them:

line 150
change self._bannedweaponskick.append(_wi) into self._bannedweaponswarn.append(_wi)

line 294 & 301
change self._adminPlugin.warnClient(player, self._warningrule , None, False) into self._adminPlugin.warnClient(player, warningrule , None, False)


line 278 & 285
change player.kick(warningmsg, '', none) into player.kick(warningmsg)

My config is:

Code:
<configuration plugin="antinoob">
    <settings name="settings">
        <set name="warn_duration">15</set>
        <set name="warning_rule">rule6</set> <!-- ^3Rule #6: No nades, tubes, airstrike or heli the first 15 seconds! -->
        <set name="banned_warning_rule">rule1</set> <!-- ^3Rule #1: No martyrdom allowed on this server -->
        <set name="unlock_message">^3 %s seconds passed - ^3all weapons unlocked!!!</set>
        <set name="info_message">^3 No nades, airstrike, tubes ^5for %s seconds of the round!!!</set>
        <set name="bannedonly_info_message">^3 Please, No nades, airstrike, tubes !!!</set>
    </settings>

    <maps>
        <!--<map name="mp_citystreets">10</map> -->
    </maps>  
  <!--
    If you want to warn for the weapon, use x_warn. (like weapon_timed_warn)
If you want to kick for the weapon, use x_kick. (like weapon_timed_kick)

If the weapon is not allowed on the server within the timelimit (#warnduration),
use weapon_timed_x. (like weapon_timed_warn)
If the weapon is not allowed on the server at all,
use weapon_banned_x. (like weapon_banned_warn)
  -->  
  <!--  Weaponlist CoD4
    All grenades: <weapon mod="MOD_GRENADE_SPLASH"></weapon>
    Airstrike   : <weapon mod="">artillery_mp</weapon>
Heli        : <weapon mod="">helicopter_mp</weapon>
Martyrdom   : <weapon mod="MOD_GRENADE_SPLASH">frag_grenade_short_mp</weapon>
  -->

    <weapon_timed_warn>
        <weapon mod="MOD_GRENADE_SPLASH"></weapon>
<weapon mod="">artillery_mp</weapon>
<weapon mod="">helicopter_mp</weapon>
    </weapon_timed_warn>
    <weapon_timed_kick>
</weapon_timed_kick>
    <weapon_banned_kick>
</weapon_banned_kick>
    <weapon_banned_warn>
        <weapon mod="MOD_GRENADE_SPLASH">frag_grenade_short_mp</weapon>
    </weapon_banned_warn>

</configuration>

I think it would be great to expand the list of weapons so everyone know which line to use for a specific weapon.
« Last Edit: September 24, 2009, 04:25:36 AM by Walker » Logged
Jr. Member
**
Posts: 23
Offline Offline
« Reply #187 on: September 24, 2009, 04:24:14 AM »

My version of de antinoob.py (1.0.7) is:

Code:
# b3/plugins/antinoob.py
#
# Gamers 4 Gamers (http://g4g.pl)
# Copyright (C) 2008 Anubis
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#
# $Id: antinoob.py 89 2008-06-06 22:38:34Z Anubis $
#
# CHANGELOG
#    06/06/2008 - 1.0.0 - Anubis
#    -- first version based on Antinoob plugin by MiLcH
#    07/06/2008 - 1.0.1 - Anubis
#    -- fixed airstrike issues
#    23/12/2008 - 1.0.2 - Anubis
#    -- Damage = warn
#    23/12/2008 - 1.0.3 - Anubis
#    -- New config - weapons/maps
#    12/02/2009 - 1.0.4 - Anubis
#    -- New config - MOD settings
#    16/02/2009 - 1.0.5 - Anubis
#    -- New config - MOD settings as restriction
#    26/03/2009 - 1.0.6 - Anubis
#    -- New config , new wepons handling
#    11/05/2009 - 1.0.7 - Anubis
#    -- Errors fixing


__version__ = '1.0.7'
__author__  = 'Anubis'
from b3 import clients
import b3, string, re, threading
import b3.events
import b3.plugin


class WeaponInfo:
    _weaponName = ""
    _mod = ""
   
class MapInfo:
    _mapName = None
    _duration = 10   

#--------------------------------------------------------------------------------------------------
class AntinoobPlugin(b3.plugin.Plugin):
    _adminPlugin = None
    _currentMap = None
    _bannedweaponswarn = []
    _bannedweaponskick = []   
    _weaponstimedwarn = []   
    _weaponstimedkick = []   
    _maps = []
    _warnduration = 10
    _warndurationdefault = 10
    _warningrule = 'rule10'
    _unlockmessage = '^3 %s seconds passed - ^3all weapons unlocked!!!'
    _infomessage = '^3 No nades, airstrike, tubes ^5for %s seconds of the round!!!'
    _bannedonlyinfomessage = '^3 Please, No nades, airstrike, tubes !!!'

    def onStartup(self):
        self.registerEvent(b3.events.EVT_CLIENT_KILL)
        self.registerEvent(b3.events.EVT_CLIENT_DAMAGE)
        self.registerEvent(b3.events.EVT_GAME_ROUND_START)
        self._adminPlugin = self.console.getPlugin('admin')

    def onLoadConfig(self):
        self.debug('Loading Configuration Started')
        self._warndurationdefault = self.config.getint('settings', 'warn_duration')
        self.debug('_warndurationdefault: ' + str(self._warndurationdefault))
        self._warningrule = self.config.get('settings', 'warning_rule')
        self._bannedwarningrule = self.config.get('settings', 'banned_warning_rule')
        if self._bannedwarningrule == '':
            self._bannedwarningrule = self._warningrule
        self._unlockmessage = self.config.get('settings', 'unlock_message')
        self._infomessage = self.config.get('settings', 'info_message')       
       
        for e in self.config.get('weapon_timed_warn/weapon'):
            #name  = setting.get('name')
            _wi = WeaponInfo()
            if e.text:
                _wi._weaponName = e.text
            else:
                _wi._weaponName = ""
           
            _wi._mod = e.get('mod')
           
            if (_wi._mod != "" or _wi._weaponName != ""):
                self.debug('Timed Warn - Weapon loaded: >' + _wi._weaponName + '< Mod:>' + _wi._mod + '<')
                self._weaponstimedwarn.append(_wi)
            else:
                self.debug('Timed Warn - Empty definition ignored')
               
        for e in self.config.get('weapon_timed_kick/weapon'):
            #name  = setting.get('name')
            _wi = WeaponInfo()
            if e.text:
                _wi._weaponName = e.text
            else:
                _wi._weaponName = ""
           
            _wi._mod = e.get('mod')
           
            if (_wi._mod != "" or _wi._weaponName != ""):
                self.debug('Timed Kick - Weapon loaded: >' + _wi._weaponName + '< Mod:>' + _wi._mod + '<')
                self._weaponstimedkick.append(_wi)
            else:
                self.debug('Timed Kick - Empty definition ignored')   
               
        for e in self.config.get('weapon_banned_kick/weapon'):
            #name  = setting.get('name')
            _wi = WeaponInfo()
            if e.text:
                _wi._weaponName = e.text
            else:
                _wi._weaponName = ""
           
            _wi._mod = e.get('mod')
           
            if (_wi._mod != "" or _wi._weaponName != ""):
                self.debug('Banned Kick - Weapon loaded: >' + _wi._weaponName + '< Mod:>' + _wi._mod + '<')
                self._bannedweaponskick.append(_wi)
            else:
                self.debug('Banned Kick - Empty definition ignored')                 
               
        for e in self.config.get('weapon_banned_warn/weapon'):
            #name  = setting.get('name')
            _wi = WeaponInfo()
            if e.text:
                _wi._weaponName = e.text
            else:
                _wi._weaponName = ""
           
            _wi._mod = e.get('mod')
           
            if (_wi._mod != "" or _wi._weaponName != ""):
                self.debug('Banned Warn - Weapon loaded: >' + _wi._weaponName + '< Mod:>' + _wi._mod + '<')
                self._bannedweaponswarn.append(_wi)
            else:
                self.debug('Banned Warn - Empty definition ignored')                     
           
        self._maps = []
        for e in self.config.get('maps/map'):
            #name  = setting.get('name')
            _mi = MapInfo();
            _mi._mapName = e.get('name')
            _mi._duration = int(e.text.strip())
            self.debug('Map parsed: ' + _mi._mapName + ' duration: ' + str(_mi._duration))
           
            self._maps.append(_mi);
       
        self.debug('Loading Configuration Finished')
        return
       
               
    def _usingWeaponsAllowed(self):
        self.debug(self._unlockmessage % self._warnduration)
        self.console.say(self._unlockmessage % self._warnduration)
        return
   
    def checkWeapon(self, weaponname, mod, player):
        if self.console.game.roundTime() <= self._warnduration:
            self.debug(weaponname + ' / ' + mod + ' - in warnduration: ' + str(self.console.game.roundTime()))
            #--------------------------------------------------------------------------------------#
            for weaponInfo in self._weaponstimedwarn:
                try:
                    if weaponInfo._weaponName == weaponname:
                        if(weaponInfo._mod == ""):
                            self.debug('Temporary Restricted Weapon: ' + str(weaponname) + ' - Round time: ' + str(self.console.game.roundTime()))
                            self.warnPlayerForTmpRestrictedWeapon(player)
                            return
                        else:
                            if(weaponInfo._mod == mod):
                                self.debug('Temporary Restricted Weapon: ' + str(weaponname) + ' Mod: ' + str(mod) + ' - Round time: ' + str(self.console.game.roundTime()))
                                self.warnPlayerForTmpRestrictedWeapon(player)
                                return
                            else:
                                return               
                    elif weaponInfo._weaponName == "":
                        if weaponInfo._mod == mod:
                            self.debug('Temporary Restricted MOD for weapon: ' + str(weaponname) + ' Mod: ' + str(mod) + ' - Round time: ' + str(self.console.game.roundTime()))
                            self.warnPlayerForTmpRestrictedWeapon(player)
                            return
                except:
                    self.debug('Unknown error while _weaponstimedwarn list processing')
            #--------------------------------------------------------------------------------------#
            for weaponInfo in self._weaponstimedkick:
                try:   
                    if weaponInfo._weaponName == weaponname:
                        if(weaponInfo._mod == ""):
                            self.debug('Temporary Restricted Weapon: ' + str(weaponname) + ' - Round time: ' + str(self.console.game.roundTime()))
                            self.kickPlayerForTmpRestrictedWeapon(player)
                            return
                        else:
                            if(weaponInfo._mod == mod):
                                self.debug('Temporary Restricted Weapon: ' + str(weaponname) + ' Mod: ' + str(mod) + ' - Round time: ' + str(self.console.game.roundTime()))
                                self.kickPlayerForTmpRestrictedWeapon(player)
                                return
                            else:
                                return
                    elif weaponInfo._weaponName == "":
                        if weaponInfo._mod == mod:
                            self.debug('Temporary Restricted MOD for weapon: ' + str(weaponname) + ' Mod: ' + str(mod) + ' - Round time: ' + str(self.console.game.roundTime()))
                            self.kickPlayerForTmpRestrictedWeapon(player)
                            return
                   
                except:
                    self.debug('Unknown error while _weaponstimedkick list processing')                               
        #--------------------------------------------------------------------------------------#
        for weaponInfo in self._bannedweaponswarn:
            try:           
                if weaponInfo._weaponName == weaponname:
                    if(weaponInfo._mod == ""):
                        self.debug('Banned Weapon: ' + str(weaponname) + ' - Round time: ' + str(self.console.game.roundTime()))
                        self.warnPlayerForBannedWeapon(player)
                        return
                    else:
                        if(weaponInfo._mod == mod):
                            self.debug('Banned Weapon: ' + str(weaponname) + ' Mod: ' + str(mod) + ' - Round time: ' + str(self.console.game.roundTime()))
                            self.warnPlayerForBannedWeapon(player)
                            return
                        else:
                            return
                elif weaponInfo._weaponName == "":
                    if weaponInfo._mod == mod:
                        self.debug('Banned MOD for weapon: ' + str(weaponname) + ' Mod: ' + str(mod) + ' - Round time: ' + str(self.console.game.roundTime()))
                        self.warnPlayerForBannedWeapon(player)
                        return
               
            except:
                self.debug('Unknown error while _bannedweaponswarn list processing')                               
        #--------------------------------------------------------------------------------------#
        for weaponInfo in self._bannedweaponskick:
            try:   
                if weaponInfo._weaponName == weaponname:
                    if(weaponInfo._mod == ""):
                        self.debug('Banned Weapon: ' + str(weaponname) + ' - Round time: ' + str(self.console.game.roundTime()))
                        self.kickPlayerForBannedWeapon(player)
                        return
                    else:
                        if(weaponInfo._mod == mod):
                            self.debug('Banned Weapon: ' + str(weaponname) + ' Mod: ' + str(mod) + ' - Round time: ' + str(self.console.game.roundTime()))
                            self.kickPlayerForBannedWeapon(player)
                            return
                        else:
                            return
                elif weaponInfo._weaponName == "":
                    if weaponInfo._mod == mod:
                        self.debug('Banned MOD for weapon: ' + str(weaponname) + ' Mod: ' + str(mod) + ' - Round time: ' + str(self.console.game.roundTime()))
                        self.kickPlayerForBannedWeapon(player)
                        return
            except:
                self.debug('Unknown error while _bannedweaponskick list processing')                               
                       
        #--------------------------------------------------------------------------------------#         
        return
       
       
    #---------------------------------------------------------------------------#
    # Penalties  / Kick 
    #---------------------------------------------------------------------------#
    def kickPlayerForBannedWeapon(self, player):
        if player:
            warningmsg = self.getKickWarningForBannedWeapon()
            self.debug('player.kick: ' + str(player.name) + ' Warn: ' + str(warningmsg))
            player.kick(warningmsg)
        return
       
    def kickPlayerForTmpRestrictedWeapon(self, player):
        if player:
            warningmsg = self.getKickWarningForTmpRestrictedWeapon()
            self.debug('player.kick: ' + str(player.name) + ' Warn: ' + str(warningmsg))
            player.kick(warningmsg)
        return       
    #---------------------------------------------------------------------------#
    # Penalties  / Warn 
    #---------------------------------------------------------------------------#
    def warnPlayerForTmpRestrictedWeapon(self, player):
        if player:
            warningrule = self.getWarningRuleForTmpRestrictedWeapon()
            self.debug('[TMP]WarnClient: ' + str(player.name) + ' WarnRule: ' + str(warningrule))
            self._adminPlugin.warnClient(player, warningrule , None, False)
        return   

    def warnPlayerForBannedWeapon(self, player):
        if player:
            warningrule = self.getWarningRuleForBannedWeapon()
            self.debug('[Banned]WarnClient: ' + str(player.name) + ' WarnRule: ' + str(warningrule))
            self._adminPlugin.warnClient(player, warningrule , None, False)
        return 
    #---------------------------------------------------------------------------#
    # WARNING RULES   
    #---------------------------------------------------------------------------#
    def getWarningRuleForBannedWeapon(self):
        return self._bannedwarningrule
   
   
    def getWarningRuleForTmpRestrictedWeapon(self): 
        return self._warningrule
    #---------------------------------------------------------------------------#
   
    #---------------------------------------------------------------------------#
    # Kick Messages   
    #---------------------------------------------------------------------------#
    def getKickWarningForBannedWeapon(self):
        defwarning = "Do not use banned weapon!"
        try:
            duration, warning = self._adminPlugin.getWarning(self._bannedwarningrule)
        except:
            warning = defwarning
       
        return warning
       
    def getKickWarningForTmpRestrictedWeapon(self): 
        defwarning = "Do not use restricted weapon!"
        try:
            duration, warning = self._adminPlugin.getWarning(self._warningrule)
        except:
            warning = defwarning
       
        return warning
    #---------------------------------------------------------------------------#

    def onEvent(self, event):
        if event.type == b3.events.EVT_CLIENT_KILL or event.type ==  b3.events.EVT_CLIENT_DAMAGE:
            weaponname = event.data[1]
            mod = event.data[3]
            self.checkWeapon(weaponname, mod, event.client)

        elif event.type == b3.events.EVT_GAME_ROUND_START:
            if self._currentMap == None or self.console.game.mapName != self._currentMap:
                self._currentMap = self.console.game.mapName
                self.debug('New Map: ' + str(self._currentMap))
                self._warnduration = self._warndurationdefault
                for mapinfo in self._maps:
                    if(mapinfo):
                        if self._currentMap == mapinfo._mapName:
                            self._warnduration = mapinfo._duration
                            self.debug('New Duration: ' + str(self._warnduration))
                            break
            if len(self._weaponstimedwarn) > 0 or len(self._weaponstimedkick) > 0:
                self.debug(self._infomessage % self._warnduration)
                self.console.say(self._infomessage % self._warnduration)
                t = threading.Timer(self._warnduration+1, self._usingWeaponsAllowed)
                t.start()
            if len(self._bannedweaponswarn) > 0 or len(self._bannedweaponskick) > 0:
                self.debug(self._bannedonlyinfomessage)
                self.console.say(self._bannedonlyinfomessage)               
            return
Logged
Newbie
*
Posts: 2
Offline Offline
« Reply #188 on: October 06, 2009, 08:06:34 PM »

Which weapons would you like to block? How many seconds should then blocked? 1, 10... forever?

Hi, i wanna block GL and Marty forever in all maps (plugin_antinoob.xml for version v.1.0.7)
thx
Logged
Newbie
*
Posts: 5
Offline Offline
« Reply #189 on: October 06, 2009, 09:08:23 PM »

I wanna block:

- Granade Launcher Attachment
- Martyrdom Perk
- Last Stand Perk

In all maps and kick+tempban 1day for any infraction

Is this posible?
Logged
Newbie
*
Posts: 5
Offline Offline
« Reply #190 on: October 06, 2009, 10:20:28 PM »

oh, last stand checking isnt possible.. right?

damn..

what about checking the client.status when the kill happens? shouldn't it be diferent than alive / dead if the user is in "Last Stand State"
Logged
B3 Contrib/Support
*
OS: --No B3 installed--
Type: --No B3 installed--
Posts: 1225
Offline Offline
Support Specialty: B3-Core, CoD/BFBC2 parsers, FTP-functionality, Plugin development
« Reply #191 on: October 07, 2009, 08:50:07 AM »

no, because client status is recorded by reading a kill line. It might be possible to record LS based on damage given, but I'm not sure
Logged

Full Member
***
Posts: 84
Offline Offline
WWW
« Reply #192 on: October 07, 2009, 02:06:43 PM »

if it's any help, we haven't had a big issue with people using last stand, as long as the rule is listed in your rules.  what we did was included it in the same rule with martyrdom, so every time someone gets kicked for marty (which is also somewhat rare) the warn/kick lines also says that last stand is not allowed.

we've been running b3 for just over a year give or take and i can count on one hand how many times we've had to kick for last stand.

on our bolts only waw servers we just disallowed pistols entirely, which covers last stand as it gets logged as a regular pistol kill.
Logged
Newbie
*
Posts: 2
Offline Offline
« Reply #193 on: October 07, 2009, 02:14:49 PM »

I wanna block:

- Granade Launcher Attachment
- Martyrdom Perk
- Last Stand Perk

In all maps and kick+tempban 1day for any infraction


i need that too, somebody help me ?
thx
Logged
Newbie
*
Posts: 1
Offline Offline
« Reply #194 on: October 09, 2009, 02:53:16 AM »

Hello!

I just wonder if someone please can post a working config to .py and .xml for CoD:WaW that kicks for Rifle Grenade and Martyrdome, and also warns players first.

If someone can do it it would be really appreciated.

Best Regards.
/Snowbiz.
Logged
Tags: martydom 
Pages: 1 ... 11 12 [13] 14 15 ... 28   Go Up
  Print  
 
Jump to:  


Rate this page +1 at Google Search


SimplePortal 2.3.1 © 2008-2009, SimplePortal