Найти - Пользователи
Полная версия: Помогите пожалуйста разобраться с кодом
Начало » Python для новичков » Помогите пожалуйста разобраться с кодом
1
vlad1213
Здравствуйте, помогите мне пожалуйста правильно расставить код Python.
Есть уже готовый код, но мне нужна лишь часть этого кода.
Мне нужно что бы работали вот эти строчки:
host.registerHandler(“PlayerConnect”, onPlayerConnect, 1)
host.registerHandler(“RemoteCommand”, onFilteredRemoteCommand, 1)
host.registerHandler('PlayerSpawn', onPlayerSpawn)
host.registerHandler('RemoteCommandSelectKit', onKitSelected)
host.registerHandler('RemoteCommandCustomKit', onCustomKitSelect)
host.registerHandler('RemoteCommandInitKit', onKitInit)

# File: r (Python 2.3)
global g_kits_used, g_kits_allocated, g_kits_allocated_remove, g_kits_allocated_timer, g_kits_squads, g_kits_squads_selects, g_kits_wrong, g_kits_wrong_timer, g_kits_limits, g_kits_limits_factions, g_kits_limits_squads, g_kits_reset_timer, g_kits_variants, g_kits_ninja_timer, g_kits_slots, g_mapid
import host
import bf2
import math
import time
from game.realitycore import *
class KitSlot:
    
    def __init__(self):
        self.Name = ''
        self.Primary = ''
        self.Secondary = ''
        self.Soldier = ''
        self.LimitationsEnabled = True
spawnableKits = [
    'sniper',
    'marksman',
    'aa',
    'at',
    'support',
    'officer',
    'tanker',
    'pilot',
    'riflemanat',
    'assault',
    'engineer',
    'medic',
    'riflemanap',
    'specialist',
    'rifleman',
    'mg',
    'spotter',
    'civilian',
    'insurgent1',
    'insurgent2',
    'insurgent3',
    'insurgent4',
    'sapper']
teamkilledKits = [
    'sniper',
    'marksman',
    'aa',
    'at',
    'support',
    'specialist',
    'tanker',
    'pilot',
    'riflemanat',
    'assault',
    'engineer',
    'riflemanap',
    'officer',
    'mg',
    'spotter']
unlimitedKits = [
    'officer',
    'tanker',
    'pilot',
    'rifleman',
    'insurgent1',
    'insurgent2',
    'insurgent3',
    'insurgent4',
    'sapper',
    'civilian']
lockedKits = []
variantsKits = [
    'nvg',
    'ziptie',
    'md',
    'sp',
    'pickup',
    'night']
unlockedPickupKits = [
    'unarmed']
vehicleKits = [
    'tanker',
    'pilot']
kitNames = {
    'sniper': t('kits_sniper'),
    'marksman': t('kits_marksman'),
    'aa': t('kits_aa'),
    'at': t('kits_at'),
    'support': t('kits_support'),
    'specialist': t('kits_specialist'),
    'officer': t('kits_officer'),
    'tanker': t('kits_crewman'),
    'pilot': t('kits_pilot'),
    'engineer': t('kits_engineer'),
    'medic': t('kits_medic'),
    'riflemanat': t('kits_riflemanat'),
    'assault': t('kits_assault'),
    'civilian': t('kits_civilian'),
    'sapper': t('kits_sapper'),
    'riflemanap': t('kits_riflemanap'),
    'mg': t('kits_mg'),
    'spotter': t('kits_spotter') }
g_kits_used = { }
g_kits_allocated = { }
g_kits_allocated_remove = []
g_kits_allocated_timer = None
g_kits_squads = { }
g_kits_squads_selects = { }
g_kits_wrong = { }
g_kits_wrong_timer = None
g_kits_limits = { }
g_kits_limits_factions = { }
g_kits_limits_squads = { }
g_kits_reset_timer = None
g_kits_variants = { }
g_kits_ninja_timer = None
g_kits_slots = None
g_mapid = ''
def getKitName(kit):
    
    try:
        return kitNames[kit]
    except:
        
        try:
            return kitNames[getKitTypeString(kit, True)]
        try:
            return kitNames[getKitTypeString(kit, False)]
        return kit
    
def getKitTypeString(kit, team = False):
    if kit.find('_') == -1:
        return kit
    
    
    try:
        kit = kit.split('_')
        if team:
            return kit[0] + '_' + kit[1]
        else:
            return kit[1]
    except:
        return kit
def getKitVariants(kit):
    kits = kit.split('_')
    variants = []
    for variant in variantsKits:
        if variant in kits:
            variants.append(variant)
            continue
    
    return variants
def getKitTeamVariants(team):
    return g_kits_variants[team]
def getKitTemplate(kit, team, variants = False, alt = False):
    teamName = getTeamName(team)
    template = teamName + '_' + kit
    if alt and teamName in realityserver.C('KIT_ALTERNATIVES') and kit in realityserver.C('KIT_ALTERNATIVES')[teamName]:
        template += '_alt'
    
    if variants:
        return template + getKitTeamVariants(team)
    else:
        return template
def isNinja(player):
    
    try:
        if getKitTypeString(player.getKit().templateName) == 'ninja':
            return True
    except:
        return False
def isKitTeamkiller(player, kit):
    trace = PRTrace('kits: isKitTeamkiller()')
    
    try:
        penalty = player.tkLimitedKit[kit]
    except:
        return False
    if not penalty:
        return False
    
    if now() >= penalty:
        player.tkLimitedKit[kit] = None
        if isDebugEnabled('penalty'):
            debugMessage('removed ' + player.getName() + ' penalty for tk ' + kit, 'penalty')
        
        return False
    
    if isDebugEnabled('kits'):
        debugMessage(player.getName() + ' is ' + kit + ' kit teamkiller', 'kits')
    
    return True
from game.realityvehicles import getVehiclesOfMap, getVehiclesKits
from game.realityrally import getRallyPoint
from game.realityspawner import createSpawner
from game.realityassets import getAssetsOfType, getAssetTypeFromTemplate
from game.realityscoring import WEAPONS_NO_PUNISH
def init():
    host.registerGameStatusHandler(onGameStatusChanged)
    host.registerHandler('RemoteCommandKitRequest', onRemoteKitRequestCommand)
    host.registerHandler('PlayerTeamKilled', onPlayerTeamKilled)
    host.registerHandler('PickupFirstKit', onPickupInvalidSelectKit)
    host.registerHandler('PickupFirstKit', onPickupVariantKit)
    host.registerHandler('PlayerSpawn', onPlayerSpawn)
    host.registerHandler('PickupKit', onPickupTeamKilledKit)
    host.registerHandler('PickupKit', onPickupKit)
    host.registerHandler('PickupKit', onPickupLockedKit)
    host.registerHandler('DropKit', onDropKit)
    host.registerHandler('DropKit', onDropLockedKit)
    host.registerHandler('ExitVehicle', onExitVehicle)
    host.registerHandler('PlayerKilled', onPlayerKilled)
    host.registerHandler('PlayerDeath', onPlayerDeath)
    host.registerHandler('PlayerConnect', onPlayerConnect, 1)
    host.registerHandler('PlayerChangeTeams', onPlayerChangeTeams)
    host.registerHandler('RemoteCommandCamera', onRemoteCameraCommand)
    host.registerHandler('RemoteCommandNinja', onRemoteNinjaCommand)
    host.registerHandler('RemoteCommandKits', onRemoteKitsCommand)
    host.registerHandler('RemoteCommandOneFaction', onRemoteOneFactionCommand)
    host.registerHandler('RemoteCommandDrop', onRemoteDropCommand)
    host.registerHandler('PlayerChangedSquad', onPlayerChangedSquad)
    host.registerHandler('ChangedCommander', onChangedCommander)
    host.registerHandler('RemoteCommandSelectKit', onKitSelected)
    host.registerHandler('PlayerDisconnect', onPlayerDisconnect)
    host.registerHandler('RemoteCommandCustomKit', onCustomKitSelect)
    host.registerHandler('RemoteCommandInitKit', onKitInit)
    print 'realitykits.py initialized'
def onGameStatusChanged(status):
    global g_mapid, g_kits_slots, g_kits_used, g_kits_wrong, g_kits_allocated, g_kits_allocated_timer, g_kits_reset_timer, g_kits_ninja_timer, g_kits_wrong_timer
    trace = PRTrace('kits: onGameStatusChanged()')
    if status == bf2.GameStatus.Playing and reallyPlaying():
        mapid = '%s|%s|%s' % (getMapName(), getGameMode(), getMapLayer())
        if g_mapid != mapid:
            g_mapid = mapid
            g_kits_slots = {
                1: [
                    None,
                    None,
                    None,
                    None,
                    None,
                    None,
                    None],
                2: [
                    None,
                    None,
                    None,
                    None,
                    None,
                    None,
                    None] }
            for player in bf2.playerManager.getPlayers():
                player.customSelection = {
                    1: [
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0],
                    2: [
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0] }
            
        
        setupKitLimits()
        g_kits_used = { }
        g_kits_wrong = { }
        g_kits_allocated = { }
        for team in [
            1,
            2]:
            g_kits_squads[team] = { }
            g_kits_squads_selects[team] = { }
            g_kits_variants[team] = None
            for kit in spawnableKits:
                g_kits_used[getKitTemplate(kit, team)] = 0
                g_kits_allocated[getKitTemplate(kit, team)] = 0
            
            for squad in range(1, 10):
                g_kits_squads[team][squad] = { }
                g_kits_squads_selects[team][squad] = { }
                for kit in spawnableKits:
                    g_kits_squads[team][squad][kit] = []
                    g_kits_squads_selects[team][squad][kit] = []
                
            
        
        g_kits_allocated_timer = bf2.Timer(checkKitAllocations, realityserver.C('STARTDELAY') + 20, 1, '')
        g_kits_allocated_timer.setRecurring(20)
        g_kits_reset_timer = bf2.Timer(resetKits, 1, 1, '')
        g_kits_ninja_timer = bf2.Timer(checkNinjas, realityserver.C('STARTDELAY') + 2, 1, '')
        g_kits_ninja_timer.setRecurring(2)
        g_kits_wrong_timer = bf2.Timer(checkLockedKits, realityserver.C('STARTDELAY') + 15, 1, '')
        g_kits_wrong_timer.setRecurring(15)
    else:
        destroyKitAllocationsTimer()
        destroyKitResetTimer()
        destroyKitNinjasTimer()
        destroyLockedKitsTimer()
        g_kits_used.clear()
        g_kits_allocated.clear()
        del g_kits_allocated_remove[:]
        g_kits_squads.clear()
        g_kits_squads_selects.clear()
        g_kits_variants.clear()
        g_kits_wrong.clear()
        g_kits_limits.clear()
        g_kits_limits_factions.clear()
        g_kits_limits_squads.clear()
def resetKits(data = ''):
    trace = PRTrace('kits: resetKits()')
    destroyKitResetTimer()
    
    try:
        for player in getPlayers():
            onPlayerConnect(player)
            checkSelectedKit(player)
    except:
        pass
def setupKitLimits():
    trace = PRTrace('kits: setupKitLimits()')
    defaults = {
        8: realityserver.C('KIT_LIMIT_8'),
        16: realityserver.C('KIT_LIMIT_16'),
        24: realityserver.C('KIT_LIMIT_24'),
        32: realityserver.C('KIT_LIMIT_32') }
    g_kits_limits.clear()
    g_kits_limits_factions.clear()
    g_kits_limits_squads.clear()
    for team in [
        1,
        2]:
        g_kits_limits[team] = { }
        for num in defaults.keys():
            g_kits_limits[team][num] = { }
            for (kit, limit) in defaults[num].items():
                g_kits_limits[team][num][kit] = limit
            
        
    
    for team in realityserver.C('KIT_LIMITS').keys():
        g_kits_limits_factions[team] = { }
        for (kit, num) in realityserver.C('KIT_LIMITS')[team].items():
            g_kits_limits_factions[team][kit] = num
        
    
    for (kit, num) in realityserver.C('KIT_LIMITS_SQUAD').items():
        g_kits_limits_squads[kit] = num
    
def setKitLimit(team, kit, limit, size = None):
    trace = PRTrace('kits: setKitLimit()')
    if not size:
        sizes = [
            8,
            16,
            24,
            32]
    else:
        sizes = [
            size]
    for s in sizes:
        g_kits_limits[team][s][kit] = limit
    
def getKitLimit(team, kit):
    trace = PRTrace('kits: getKitLimit()')
    n = bf2.playerManager.getNumberOfPlayersInTeam(team)
    if n >= 24:
        size = 32
    elif n >= 16:
        size = 24
    elif n >= 8:
        size = 16
    else:
        size = 8
    
    try:
        return g_kits_limits[team][size][kit]
    except:
        return None
def setKitLimitFaction(faction, kit, limit):
    trace = PRTrace('kits: setKitLimitFaction()')
    g_kits_limits_factions[faction][kit] = limit
def getKitLimitFaction(faction, kit):
    trace = PRTrace('kits: getKitLimitFaction()')
    
    try:
        return g_kits_limits_factions[faction][kit]
    except:
        return None
def setKitLimitSquad(kit, limit):
    trace = PRTrace('kits: setKitLimitSquad()')
    g_kits_limits_squads[kit] = limit
def getKitLimitSquad(kit):
    trace = PRTrace('kits: getKitLimitSquad()')
    
    try:
        return g_kits_limits_squads[kit]
    except:
        return None
def destroyKitResetTimer():
    global g_kits_reset_timer
    trace = PRTrace('kits: destroyKitResetTimer()')
    
    try:
        if g_kits_reset_timer:
            g_kits_reset_timer.destroy()
            g_kits_reset_timer = None
    except:
        pass
def destroyKitNinjasTimer():
    global g_kits_ninja_timer
    trace = PRTrace('kits: destroyKitNinjasTimer()')
    
    try:
        if g_kits_ninja_timer:
            g_kits_ninja_timer.destroy()
            g_kits_ninja_timer = None
    except:
        pass
def destroyKitAllocationsTimer():
    global g_kits_allocated_timer
    trace = PRTrace('kits: destroyKitAllocationsTimer()')
    
    try:
        if g_kits_allocated_timer:
            g_kits_allocated_timer.destroy()
            g_kits_allocated_timer = None
    except:
        pass
def destroyLockedKitsTimer():
    global g_kits_wrong_timer
    trace = PRTrace('kits: destroyLockedKitsTimer()')
    
    try:
        if g_kits_wrong_timer:
            g_kits_wrong_timer.destroy()
            g_kits_wrong_timer = None
    except:
        pass
def checkKitAllocations(data = ''):
    trace = PRTrace('kits: checkKitAllocations()')
    times = now()
    floor = { }
    deletion = []
    for item in g_kits_allocated_remove[:]:
        if times < item['end']:
            continue
        
        kit = item['kit']
        team = item['team']
        squad = item['squad']
        index = item['player']
        position = item['position']
        template = getKitTemplate(kit, team)
        if position and g_kits_allocated[template] > g_kits_used[template]:
            if template not in floor:
                floor[template] = False
                if isDebugEnabled('kits'):
                    debugMessage('checking for kits ' + template + ' on the floor', 'kits')
                
                for alt in [
                    False,
                    True]:
                    if alt and getKitTemplate(kit, team, False, alt) == template:
                        continue
                    
                    for floorkit in cleanListOfObjects(bf2.objectManager.getObjectsOfTemplate(getKitTemplate(kit, team, True, alt)), True):
                        
                        try:
                            if getSquareVectorDistance(floorkit.getPosition(), position) <= DISTANCE_SPAWN ** 2:
                                floor[template] = True
                                if isDebugEnabled('kits'):
                                    debugMessage('found kit ' + template + ' on the floor - no deallocation', 'kits')
                                
                                break
                        continue
                        continue
                    
                
            
            if template in floor and floor[template] == True:
                continue
            
        
        
        try:
            if item in g_kits_allocated_remove:
                g_kits_allocated_remove.remove(item)
        except:
            pass
        removeTeamAllocation(team, kit)
        removeSquadAllocation(team, squad, kit, index)
    
def removeKitAllocation(player, kit):
    trace = PRTrace('kits: removeKitAllocation()')
    if not kit and kit not in spawnableKits or player.isAIPlayer():
        return None
    
    player.allocatedKit = None
    if kit in unlimitedKits:
        return None
    
    
    try:
        position = player.getDefaultVehicle().getPosition()
    except:
        position = None
    
    try:
        delay = realityserver.C('KIT_ALLOCATION_DELAY')[kit]
    except:
        delay = 0
    index = player.index
    for team in [
        1,
        2]:
        if delay == 0:
            removeTeamAllocation(team, kit)
        
        for squad in range(1, 10):
            if index not in g_kits_squads[team][squad][kit]:
                continue
            
            if delay == 0:
                removeSquadAllocation(team, squad, kit, index)
                continue
            
            g_kits_allocated_remove.append({
                'team': team,
                'squad': squad,
                'player': index,
                'kit': kit,
                'end': now() + delay,
                'position': position })
            if isDebugEnabled('kits'):
                debugMessage('timed removal of kit allocation %s team %s squad %s index %s delay %s' % (kit, team, squad, index, delay), 'kits')
                continue
        
    
def addKitAllocation(player, kit, times = True):
    trace = PRTrace('kits: addKitAllocation()')
    if not kit and kit not in spawnableKits or player.isAIPlayer():
        return None
    
    team = player.getTeam()
    squad = player.getSquadId()
    removeKitAllocation(player, player.allocatedKit)
    player.allocatedKit = kit
    if times:
        player.lastKitAllocation = now()
    
    if kit in unlimitedKits:
        return None
    
    addTeamAllocation(team, kit)
    addSquadAllocation(team, squad, kit, player.index)
def onChangedCommander(team, oldCmd, newCmd):
    trace = PRTrace('kits: onChangedCommander()')
    if newCmd:
        checkSelectedKit(newCmd)
    
    if oldCmd:
        checkSelectedKit(oldCmd)
    
def onPlayerChangedSquad(player, oldSquad, newSquad):
    trace = PRTrace('kits: onPlayerChangedSquad()')
    if oldSquad:
        removeKitReservations(player)
        checkSelectedKitSquad(player.getTeam(), oldSquad)
    
    checkSelectedKit(player)
def isKitReservable(team, squad, kit):
    trace = PRTrace('kits: isKitReservable()')
    if not team and not squad and kit not in spawnableKits or kit in unlimitedKits:
        return False
    
    return True
def isKitReserved(team, squad, kit):
    trace = PRTrace('kits: isKitReserved()')
    if not isKitReservable(team, squad, kit):
        return False
    
    selected = g_kits_squads_selects[team][squad][kit]
    if len(selected) == 0:
        return False
    
    limit = getKitLimitSquad(kit)
    if not limit:
        return False
    
    if len(selected) < limit:
        return False
    else:
        return True
def isKitReservedByPlayer(team, squad, kit, player):
    trace = PRTrace('kits: isKitReservedByPlayer()')
    if not isKitReservable(team, squad, kit):
        return False
    
    selected = g_kits_squads_selects[team][squad][kit]
    if len(selected) == 0:
        return False
    
    return player.index in selected
def isKitRequestable(player, kit, current = True, allocation = True):
    trace = PRTrace('kits: isKitRequestable()')
    if not kit or kit not in spawnableKits:
        return False
    
    team = player.getTeam()
    squad = player.getSquadId()
    if squad == 0 and not player.isCommander():
        return sendMessageToPlayer(player, 3240301)
    
    if not validTeamKit(team, kit) or getTeamName(team) in realityserver.C('KIT_REQUEST_BLOCK'):
        return sendMessageToPlayer(player, 3240703)
    
    if not isValidKit(player, kit, current, allocation):
        return False
    
    if not isKitReservedByPlayer(team, squad, kit, player) and isKitReserved(team, squad, kit):
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' kit is not valid for ' + player.getName() + ' - currently reserved', 'kits')
        
        return sendMessageToPlayer(player, 2191319)
    
    if kit in vehicleKits:
        if isVehicleKitRequestable(player, kit):
            return True
        
        return sendMessageToPlayer(player, 1190601, 1)
    elif isNormalKitRequestable(player, kit):
        return True
    
    if kit in realityserver.C('KIT_LOCKED_RALLY'):
        return sendMessageToPlayer(player, 1031923, 1)
    else:
        return sendMessageToPlayer(player, 1032415, 1)
    return False
def isKitSelectable(player, kit, current = True, allocation = True):
    trace = PRTrace('kits: isKitSelectable()')
    if not kit and kit not in spawnableKits or player.isAIPlayer():
        return True
    
    team = player.getTeam()
    squad = player.getSquadId()
    if not validTeamKit(team, kit):
        return True
    
    if not isValidKit(player, kit, current, allocation, False):
        return False
    
    if not isKitReservedByPlayer(team, squad, kit, player) and isKitReserved(team, squad, kit):
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' kit is not valid for ' + player.getName() + ' - currently reserved', 'kits')
        
        return False
    
    return True
def checkSelectedKitSquad(team, squad, kit = None, player = None):
    trace = PRTrace('kits: checkSelectedKitSquad()')
    for p in getPlayersOfSquad(team, squad, player):
        if kit and p.selectedKit and p.selectedKit != kit:
            continue
        
        checkSelectedKit(p)
    
def checkSelectedKit(player):
    trace = PRTrace('kits: checkSelectedKit()')
    if player.isAIPlayer():
        return None
    
    if isDebugEnabled('kits'):
        debugMessage('--- check %s selected kit %s' % (player.getName(), player.selectedKit), 'kits')
    
    team = player.getTeam()
    squad = player.getSquadId()
    kit = player.selectedKit
    if isKitSelectable(player, kit):
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' kit is selectable by ' + player.getName(), 'kits')
        
        if player.dead:
            continueSpawnTime(player, 'kit')
            clearScreen(player)
        
        addKitReservation(team, squad, kit, player)
    elif isDebugEnabled('kits'):
        debugMessage(str(kit) + ' kit is not selectable by ' + player.getName(), 'kits')
    
    if player.dead:
        pauseSpawnTime(player, 'kit')
        blackScreen(player)
    
    removeKitReservation(team, squad, kit, player)
def addKitReservation(team, squad, kit, player):
    trace = PRTrace('kits: addKitReservation()')
    if isKitReservable(team, squad, kit) and not isKitReservedByPlayer(team, squad, kit, player):
        g_kits_squads_selects[team][squad][kit].append(player.index)
        if isDebugEnabled('kits'):
            debugMessage('addded reservation %s kit %s team %s squad %s' % (player.getName(), kit, team, squad), 'kits')
        
    
def removeKitReservations(player):
    trace = PRTrace('kits: removeKitReservations()')
    for team in [
        1,
        2]:
        for squad in range(1, 10):
            for kit in spawnableKits:
                removeKitReservation(team, squad, kit, player)
            
        
    
def removeKitReservation(team, squad, kit, player):
    trace = PRTrace('kits: removeKitReservation()')
    if isKitReservable(team, squad, kit) and isKitReservedByPlayer(team, squad, kit, player):
        g_kits_squads_selects[team][squad][kit].remove(player.index)
        if isDebugEnabled('kits'):
            debugMessage('removed reservation %s kit %s team %s squad %s' % (player.getName(), kit, team, squad), 'kits')
        
    
def onPlayerSpawn(player, soldier):
    trace = PRTrace('kits: onPlayerSpawn()')
    if player.isAIPlayer():
        return None
    
    modifySpawn(player)
    player.lastUnarmedDropKit = (now() - realityserver.C('KIT_REQUEST_INTERVAL')) + 15
    times = True
    if player.selectedKit in unlimitedKits:
        times = False
    
    addKitAllocation(player, player.selectedKit, times)
def onPickupVariantKit(player, kit):
    trace = PRTrace('kits: onPickupVariantKit()')
    team = player.getTeam()
    if g_kits_variants[team] == None:
        g_kits_variants[team] = ''
        for variant in getKitVariants(kit.templateName):
            g_kits_variants[team] += '_' + variant
        
    
def onPickupInvalidSelectKit(player, kit):
    trace = PRTrace('kits: onPickupInvalidSelectKit()')
    if realityserver.isCoopServer():
        return None
    
    team = player.getTeam()
    squad = player.getSquadId()
    kit = getKitTypeString(kit.templateName)
    if not (player.selectedKit):
        player.selectedKit = kit
    
    if not (player.selectedKit) or player.selectedKit == kit:
        return None
    
    if isDebugEnabled('kits'):
        debugMessage(str(kit) + ' is not valid kit for ' + player.getName() + ' - selected kit is not ' + str(player.selectedKit), 'kits')
    
    setInvalidKit(player)
def onPickupKit(player, kit):
    trace = PRTrace('kits: onPickupKit()')
    if player.isAIPlayer():
        return None
    
    tmp = kit.templateName
    kit = getKitTypeString(tmp, True)
    if kit not in g_kits_used:
        return None
    
    g_kits_used[kit] += 1
    if isDebugEnabled('kits'):
        debugMessage('%s pickup by %s team %s (%s) - %s' % (kit, player.getName(), player.getTeam(), g_kits_used[kit], tmp), 'kits')
    
def onDropKit(player, kit):
    trace = PRTrace('kits: onDropKit()')
    if player.isAIPlayer():
        return None
    
    tmp = kit.templateName
    kit = getKitTypeString(tmp, True)
    if kit not in g_kits_used:
        return None
    
    g_kits_used[kit] -= 1
    if isDebugEnabled('kits'):
        debugMessage('%s drop by %s team %s (%s) - %s' % (kit, player.getName(), player.getTeam(), g_kits_used[kit], tmp), 'kits')
    
def onPlayerChangeTeams(player, human):
    trace = PRTrace('kits: onPlayerChangeTeams()')
    player.oldTeam = getOtherTeam(player.getTeam())
    removeKitReservations(player)
    removeKitAllocation(player, player.allocatedKit)
    onPlayerConnect(player)
    continueSpawnTime(player, 'kit')
    player.selectedKit = getKitSlot(player.getTeam())
    checkSelectedKit(player)
def onPlayerConnect(player):
    trace = PRTrace('kits: onPlayerConnect()')
    cached = getPlayerByIndex(player.index)
    if not cached:
        return None
    
    cached.customSelection = {
        1: [
            0,
            0,
            0,
            0,
            0,
            0,
            0],
        2: [
            0,
            0,
            0,
            0,
            0,
            0,
            0] }
    cached.allocatedKit = None
    cached.lastKitAllocation = None
    cached.lastUnarmedDropKit = None
    cached.tkLimitedKit = { }
    cached.selectedKit = None
def onPlayerDisconnect(player):
    trace = PRTrace('kits: onPlayerDisconnect()')
    team = player.getTeam()
    squad = player.getSquadId()
    kit = player.selectedKit
    index = player.index
    
    try:
        removeTeamAllocation(team, kit)
    except:
        pass
    
    try:
        removeSquadAllocation(team, squad, kit, index)
    except:
        pass
    
    try:
        removeKitReservations(player)
    except:
        pass
    player.customSelection = { }
    player.allocatedKit = None
    player.lastKitAllocation = None
    player.lastUnarmedDropKit = None
    player.tkLimitedKit = { }
    player.selectedKit = None
def onPlayerTeamKilled(victim, attacker, weapon, assists, object):
    trace = PRTrace('kits: onPlayerTeamKilled()')
    if realityserver.C('KIT_TK_PENALTY') == 0:
        return None
    
    team = attacker.getTeam()
    teamName = getTeamName(team)
    
    try:
        victimKit = getKitTypeString(victim.getKit().templateName)
        attackerKit = getKitTypeString(attacker.getKit().templateName)
    except:
        return None
    if victimKit not in teamkilledKits:
        return None
    
    
    try:
        if weapon:
            weaponName = weapon.templateName.lower()
        else:
            weaponName = attacker.getVehicle().templateName.lower()
    except:
        weaponName = ''
    if weaponName in WEAPONS_NO_PUNISH:
        return None
    
    g_vehicles_kits = getVehiclesKits()
    g_vehicles_map = getVehiclesOfMap()
    for type in [
        AIR,
        LAND,
        SEA,
        SUP,
        SPEC,
        ENG]:
        
        try:
            if victimKit not in g_vehicles_kits[type][teamName]:
                continue
        except:
            continue
        if weaponName in g_vehicles_map[team][type] and victimKit == attackerKit:
            return None
            continue
    
    
    try:
        if len(attacker.tkLimitedKit):
            pass
        1
    except:
        attacker.tkLimitedKit = { }
    if isDebugEnabled('penalty'):
        debugMessage(attacker.getName() + ' penalized for tk ' + victimKit, 'penalty')
    
    attacker.tkLimitedKit[victimKit] = now() + realityserver.C('KIT_TK_PENALTY')
def onPickupTeamKilledKit(player, kit):
    trace = PRTrace('kits: onPickupTeamKilledKit()')
    if realityserver.C('KIT_PICKUP_ANY') != 1:
        return None
    
    
    try:
        if isKitTeamkiller(player, getKitTypeString(kit.templateName)) > 0:
            if isDebugEnabled('penalty'):
                debugMessage('die teamkiller bastard', 'penalty')
            
            killPlayer(player)
    except:
        pass
def onPickupLockedKit(player, kit):
    trace = PRTrace('kits: onPickupLockedKit()')
    if realityserver.C('KIT_FACTION_LOCKED') != 1 or player.isAIPlayer():
        return None
    
    
    try:
        k = getKitTypeString(kit.templateName, True)
        team = k.split('_')[0]
        temp = k.split('_')[1]
    except:
        return None
    if team != getTeamName(getOtherTeam(player.getTeam())):
        return None
    
    if temp in unlockedPickupKits:
        return None
    
    g_kits_wrong[player.index] = now()
    sendMessageToPlayer(player, 1191819, 3)
def onDropLockedKit(player, kit):
    trace = PRTrace('kits: onDropLockedKit()')
    if realityserver.C('KIT_FACTION_LOCKED') != 1 or player.isAIPlayer():
        return None
    
    
    try:
        if player.index in g_kits_wrong:
            del g_kits_wrong[player.index]
            if not (player.killed):
                clearScreen(player)
            
    except:
        pass
def checkLockedKits(data = ''):
    trace = PRTrace('kits: checkLockedKits()')
    for (index, times) in g_kits_wrong.items():
        player = getPlayerByIndex(index)
        if not player or player.killed:
            
            try:
                if index in g_kits_wrong:
                    del g_kits_wrong[index]
            continue
            continue
            continue
        
        sendMessageToPlayer(player, 1191819, 3)
        if not times:
            killPlayer(player)
            continue
        if now() - times > 10:
            g_kits_wrong[index] = None
            blackScreen(player)
            continue
    
def validDistanceFromControlPoints(player, kit, cps, distance = DISTANCE_AREA):
    trace = PRTrace('kits: validDistanceFromControlPoints()')
    if isDebugEnabled('kits'):
        debugMessage('check valid distance from cps ' + kit, 'kits')
    
    team = player.getTeam()
    
    try:
        playerPos = player.getDefaultVehicle().getPosition()
    except:
        return False
    dist = distance ** 2
    for cp in cps:
        if isDebugEnabled('kits'):
            debugMessage('check if close to cp ' + cp.templateName, 'kits')
        
        if cp.cp_getParam('team') == team and cp.flagPosition != 2 and getSquareHorizDistance(cp.getPosition(), playerPos) < dist:
            if isDebugEnabled('kits'):
                debugMessage('next to cp ' + cp.templateName, 'kits')
            
            return True
            continue
    
def validTeamKit(team, kit):
    trace = PRTrace('kits: validTeamKit()')
    teamName = getTeamName(team)
    if teamName not in realityserver.C('KIT_LIMITS') or kit not in realityserver.C('KIT_LIMITS')[teamName]:
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' is not valid team kit for ' + teamName, 'kits')
        
        return False
    elif isDebugEnabled('kits'):
        debugMessage(str(kit) + ' is valid team kit for ' + teamName, 'kits')
    
    return True
def validSquadChange(player, kit):
    trace = PRTrace('kits: validSquadChange()')
    if realityserver.C('KIT_SQUAD_DELAY') == 0:
        return True
    
    if hasattr(player, 'oldTeam') and player.oldTeam != player.getTeam():
        debugMessage(str(kit) + ' is valid for ' + player.getName() + ' - different team for last squad change', 'kits')
        return True
    
    if hasattr(player, 'changedSquad') and player.changedSquad and kit not in unlimitedKits:
        delta = now() - player.changedSquad
        if delta < realityserver.C('KIT_SQUAD_DELAY'):
            if isDebugEnabled('kits'):
                debugMessage(str(kit) + ' is not valid for ' + player.getName() + ' - squad change', 'kits')
            
            return False
        
    
    if isDebugEnabled('kits'):
        debugMessage(str(kit) + ' is valid for ' + player.getName() + ' - old last squad change', 'kits')
    
    return True
def validSquadNumbers(player, kit, messages = True):
    trace = PRTrace('kits: validSquadNumbers()')
    if kit in [
        'officer'] and player.isCommander():
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' is valid for ' + player.getName() + ' - he is the commander', 'kits')
        
        return True
    
    if kit in [
        'officer'] and not player.isCommander() and not player.isSquadLeader():
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' is not valid for ' + player.getName() + ' - he is not a squad leader or commander', 'kits')
        
        if messages:
            return sendMessageToPlayer(player, 2190318)
        
        return False
    
    neededSquadMembers = getKitLimitFaction(getTeamName(player.getTeam()), kit)
    if neededSquadMembers == None:
        if messages:
            return sendMessageToPlayer(player, 3240703)
        
        return False
    
    if neededSquadMembers == 0:
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' is valid for ' + player.getName() + ' - it is not limited by squad number', 'kits')
        
        return True
    
    numSquadMembers = numPlayersInSquad(player)
    if isDebugEnabled('kits'):
        debugMessage('check squad numbers - %s members %s needed' % (numSquadMembers, neededSquadMembers), 'kits')
    
    if numSquadMembers == 0:
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' is not valid for ' + player.getName() + ' - no squad', 'kits')
        
        if messages:
            return sendMessageToPlayer(player, 3240301)
        
        return False
    elif numSquadMembers < neededSquadMembers:
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' is not valid for ' + player.getName() + ' - not enough squad members', 'kits')
        
        if messages:
            return sendSquadRequirementMessageToPlayer(player, neededSquadMembers)
        
        return False
    
    if isDebugEnabled('kits'):
        debugMessage(str(kit) + ' is valid for ' + player.getName() + ' - good squad number', 'kits')
    
    return True
def validSquadAllocation(player, kit, messages = True):
    trace = PRTrace('kits: validSquadAllocation()')
    if kit not in realityserver.C('KIT_LIMITS_SQUAD'):
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' is valid for ' + player.getName() + ' - no squad allocation needed', 'kits')
        
        return True
    
    limit = getKitLimitSquad(kit)
    if not limit:
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' is valid for ' + player.getName() + ' - no squad allocation needed', 'kits')
        
        return True
    
    issued = 0
    used = 0
    team = player.getTeam()
    squad = player.getSquadId()
    
    try:
        issued = len(g_kits_squads[team][squad][kit])
    except:
        pass
    if issued <= limit:
        for member in getPlayersInSquad(player):
            if member.killed or player.isAIPlayer():
                continue
            
            
            try:
                if kit == getKitTypeString(member.getKit().templateName):
                    used += 1
            continue
            continue
        
    
    if isDebugEnabled('kits'):
        debugMessage('check squad limits - %s issued %s used %s limit' % (issued, used, limit), 'kits')
    
    if issued >= limit or used >= limit:
        if isDebugEnabled('kits'):
            if used >= limit:
                debugMessage(str(kit) + ' is not valid for ' + player.getName() + ' - squad usage', 'kits')
            
            if issued >= limit:
                debugMessage(str(kit) + ' is not valid for ' + player.getName() + ' - squad allocation ' + str(getPlayersNames(getPlayersByIndex(g_kits_squads[team][squad][kit], True))), 'kits')
            
        
        if messages:
            return sendMessageToPlayer(player, 2191319)
        
        return False
    
    if isDebugEnabled('kits'):
        debugMessage(str(kit) + ' is valid for ' + player.getName() + ' - good squad allocation', 'kits')
    
    return True
def validTeamAllocation(player, kit, messages = True):
    trace = PRTrace('kits: validTeamAllocation()')
    team = player.getTeam()
    limit = getKitLimit(team, kit)
    if limit == None:
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' is valid for ' + player.getName() + ' - unlimited kit', 'kits')
        
        return True
    
    if limit < 1:
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' is not valid for ' + player.getName() + ' - unavailable for team right now', 'kits')
        
        if messages:
            return sendMessageToPlayer(player, 2020719)
        
        return False
    
    
    try:
        used = g_kits_used[getKitTemplate(kit, team)]
    except:
        used = 0
    
    try:
        allocated = g_kits_allocated[getKitTemplate(kit, team)]
    except:
        allocated = 0
    if used > allocated:
        num = used
    else:
        num = allocated
    if isDebugEnabled('kits'):
        debugMessage('check team allocation - %s used %s allocated %s limit' % (used, allocated, limit), 'kits')
    
    if num >= limit:
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' is not valid for ' + player.getName() + ' - team allocation', 'kits')
        
        if messages:
            return sendMessageToPlayer(player, 2191608)
        
        return False
    
    if isDebugEnabled('kits'):
        debugMessage(str(kit) + ' is valid for ' + player.getName() + ' - good team allocation', 'kits')
    
    return True
def validSquadRallyRequest(player, kit):
    trace = PRTrace('kits: validSquadRallyRequest()')
    if player.getSquadId() == 0:
        return None
    
    if kit in realityserver.C('KIT_LOCKED_RALLY'):
        return None
    
    if isDebugEnabled('kits'):
        debugMessage('check if close to squad rallypoint', 'kits')
    
    rallypoint = getRallyPoint(player.getTeam(), player.getSquadId())
    if rallypoint:
        
        try:
            if getSquareVectorDistance(rallypoint.getPosition(), player.getDefaultVehicle().getPosition()) < DISTANCE_PICKUP ** 2:
                if isDebugEnabled('kits'):
                    debugMessage('next to squad rally point', 'kits')
                
                return True
        return False
    
def validCommandPostRequest(player, kit):
    trace = PRTrace('kits: validCommandPostRequest()')
    if isDebugEnabled('kits'):
        debugMessage('check if close to command post', 'kits')
    
    cmdPost = getCommandPost(player.getTeam())
    if cmdPost:
        
        try:
            if getSquareVectorDistance(cmdPost.getPosition(), player.getDefaultVehicle().getPosition()) < DISTANCE_SPAWN ** 2:
                if isDebugEnabled('kits'):
                    debugMessage('next to command post', 'kits')
                
                return True
        return False
    
def validSupplyObject(player, objects, vehicle = False, team = True):
    trace = PRTrace('kits: validSupplyObject()')
    if len(objects) == 0:
        return None
    
    playerTeam = player.getTeam()
    
    try:
        playerPos = player.getDefaultVehicle().getPosition()
    except:
        return False
    for (template, distance) in objects.items():
        if isDebugEnabled('kits'):
            debugMessage('check if close to supply object ' + template, 'kits')
        
        if template in realityserver.C('KIT_SUPPLY_OBJECTS_COMMANDER')[getTeamName(playerTeam)]:
            objs = getAssetsOfType(getAssetTypeFromTemplate(template, playerTeam), playerTeam)
        else:
            objs = bf2.objectManager.getObjectsOfTemplate(template)
        dist = distance ** 2
        for o in cleanListOfObjects(objs):
            
            try:
                if team and o.getTeam() != playerTeam:
                    continue
            except:
                pass
            spawn = False
            if vehicle and template not in realityserver.C('KIT_SUPPLY_OBJECTS_VEHICLES_SIDEDOORS'):
                if getSquareVectorVehicleDistance(o.getRotation(), o.getPosition(), playerPos) < dist:
                    spawn = True
                
            elif getSquareVectorDistance(o.getPosition(), playerPos) < dist:
                spawn = True
            
            if not spawn:
                continue
            
            if isDebugEnabled('kits'):
                debugMessage('next to ' + template, 'kits')
            
            return True
        
    
def isNormalKitRequestable(player, kit):
    trace = PRTrace('kits: isNormalKitRequestable()')
    team = player.getTeam()
    teamName = getTeamName(team)
    
    try:
        if validCommandPostRequest(player, kit):
            return True
    except:
        pass
    
    try:
        if validSupplyObject(player, realityserver.C('KIT_SUPPLY_OBJECTS_COMMANDER')[teamName], False):
            return True
    except:
        pass
    
    try:
        if validSupplyObject(player, realityserver.C('KIT_SUPPLY_OBJECTS')[teamName], False):
            return True
    except:
        pass
    
    try:
        if validSupplyObject(player, realityserver.C('KIT_SUPPLY_OBJECTS_OPEN')[teamName], False, False):
            return True
    except:
        pass
    
    try:
        if kit not in realityserver.C('KIT_LOCKED_VEHICLES'):
            if validSupplyObject(player, realityserver.C('KIT_SUPPLY_OBJECTS_VEHICLES')[teamName], True):
                return True
            
    except:
        pass
def isVehicleKitRequestable(player, kit):
    trace = PRTrace('kits: isVehicleKitRequestable()')
    team = player.getTeam()
    teamName = getTeamName(team)
    
    try:
        if validCommandPostRequest(player, kit):
            return True
    except:
        pass
    
    try:
        if validSupplyObject(player, realityserver.C('KIT_VEHICLE_SUPPLY_OBJECTS_COMMANDER')[teamName], False):
            return True
    except:
        pass
    
    try:
        if validSupplyObject(player, realityserver.C('KIT_VEHICLE_SUPPLY_OBJECTS')[teamName], False):
            return True
    except:
        pass
    
    try:
        if validSupplyObject(player, realityserver.C('KIT_VEHICLE_SUPPLY_OBJECTS_OPEN')[teamName], False, False):
            return True
    except:
        pass
    
    try:
        g_vehicles_map = getVehiclesOfMap()
        if kit == 'tanker':
            templates = g_vehicles_map[team][LAND]
        elif kit == 'pilot':
            templates = g_vehicles_map[team][AIR]
        else:
            templates = []
    except:
        return False
    supplyObjects = { }
    for template in templates:
        supplyObjects[template] = DISTANCE_PICKUP * 3
    
    if validSupplyObject(player, supplyObjects, True):
        return True
    
def getKitSlot(team, slot = 2):
    trace = PRTrace('kits: getKitSlot()')
    
    try:
        if g_kits_slots[team][slot].LimitationsEnabled:
            return g_kits_slots[team][slot].Name
        else:
            return None
    except:
        
        try:
            if g_kits_slots[team][2].LimitationsEnabled:
                return g_kits_slots[team][2].Name
            else:
                return None
        return None
def onKitSelected(player, cmd, args):
    trace = PRTrace('kits: onKitSelected()')
    if not player.isValid() or player.isAIPlayer():
        return None
    
    
    try:
        slot = int(args[0].strip())
    except:
        return None
    team = player.getTeam()
    squad = player.getSquadId()
    inherit = False
    kit = getKitSlot(team, slot)
    if isKitReservedByPlayer(team, squad, player.selectedKit, player):
        removeKitReservations(player)
        inherit = copy(player.selectedKit)
    
    if isDebugEnabled('kits'):
        debugMessage('------ %s selected kit %s team %s squad %s' % (player.getName(), kit, team, squad), 'kits')
    
    player.selectedKit = kit
    checkSelectedKit(player)
    if inherit:
        checkSelectedKitSquad(team, squad, inherit, player)
    
def isValidKit(player, kit, current = True, allocation = True, messages = True):
    trace = PRTrace('kits: isValidKit()')
    if isDebugEnabled('kits'):
        debugMessage('check valid kit ' + kit + ' for ' + player.getName(), 'kits')
    
    if not player:
        return False
    
    team = player.getTeam()
    teamName = getTeamName(team)
    if not validSquadChange(player, kit):
        if messages:
            return sendMessageToPlayer(player, 3212201)
        
        return False
    
    if isKitTeamkiller(player, kit):
        if messages:
            return sendMessageToPlayer(player, 3242303)
        
        return False
    
    if not (player.dead) and current:
        
        try:
            playerKit = getKitTypeString(player.getKit().templateName)
            if playerKit == kit:
                if isDebugEnabled('kits'):
                    debugMessage(str(kit) + ' is not valid for ' + player.getName() + ' - requesting current kit', 'kits')
                
                if messages:
                    return sendMessageToPlayer(player, 2190303)
                
                return False
            
            if playerKit in lockedKits:
                if isDebugEnabled('kits'):
                    debugMessage(str(kit) + ' is not valid for ' + player.getName() + ' - requesting with locked kit', 'kits')
                
                if messages:
                    return sendMessageToPlayer(player, 2190318)
                
                return False
    
    if not validSquadNumbers(player, kit, messages):
        return None
    
    if allocation:
        if not validTeamAllocation(player, kit, messages):
            return None
        
        if not validSquadAllocation(player, kit, messages):
            return None
        
    
    if isDebugEnabled('kits'):
        debugMessage(str(kit) + ' kit valid for ' + player.getName(), 'kits')
    
    return True
def onRemoteKitRequestCommand(player, cmd, args):
    trace = PRTrace('kits: onRemoteKitRequestCommand()')
    
    try:
        kit = args[0].strip()
    except:
        return None
    alt = False
    
    try:
        if args[1].strip() == 'alt':
            alt = True
    except:
        pass
    if isInsideVehicle(player) or isClimbing(player):
        return None
    
    team = player.getTeam()
    squad = player.getSquadId()
    if isDebugEnabled('kits'):
        debugMessage('------ %s requested kit %s alt %s team %s squad %s' % (player.getName(), kit, alt, team, squad), 'kits')
    
    if player.lastKitAllocation and now() - player.lastKitAllocation <= realityserver.C('KIT_REQUEST_INTERVAL'):
        if isDebugEnabled('kits'):
            debugMessage(str(kit) + ' is not valid for ' + player.getName() + ' - too soon to request again ' + str(now() - player.lastKitAllocation) + ' < ' + str(realityserver.C('KIT_REQUEST_INTERVAL')), 'kits')
        
        return sendMessageToPlayer(player, 3241213)
    
    if not isKitRequestable(player, kit):
        return None
    
    if isDebugEnabled('kits'):
        debugMessage(str(kit) + ' is valid for ' + player.getName() + ' request', 'kits')
    
    
    try:
        playerPos = player.getDefaultVehicle().getPosition()
    except:
        return None
    spawnerKit(playerPos, getKitTemplate(kit, team, True, alt), team)
    addKitAllocation(player, kit)
    sendMessageToPlayer(player, 2190309)
def removeTeamAllocation(team, kit):
    trace = PRTrace('kits: removeTeamAllocation()')
    kit = getKitTemplate(kit, team)
    if kit not in g_kits_allocated:
        return None
    
    g_kits_allocated[kit] -= 1
    if g_kits_allocated[kit] < 0:
        g_kits_allocated[kit] = 0
    
    if isDebugEnabled('kits'):
        debugMessage('removed kit team allocation %s team %s (%s)' % (kit, team, g_kits_allocated[kit]), 'kits')
    
def addTeamAllocation(team, kit):
    trace = PRTrace('kits: addTeamAllocation()')
    kit = getKitTemplate(kit, team)
    if kit not in g_kits_allocated:
        return None
    
    g_kits_allocated[kit] += 1
    if g_kits_allocated[kit] < 0:
        g_kits_allocated[kit] = 0
    
    if isDebugEnabled('kits'):
        debugMessage('added kit team allocation %s team %s (%s)' % (kit, team, g_kits_allocated[kit]), 'kits')
    
def removeSquadAllocation(team, squad, kit, index):
    trace = PRTrace('kits: removeSquadAllocation()')
    if not squad and kit not in realityserver.C('KIT_LIMITS_SQUAD') or not getKitLimitSquad(kit):
        return None
    
    if index not in g_kits_squads[team][squad][kit]:
        return None
    
    g_kits_squads[team][squad][kit].remove(index)
    if isDebugEnabled('kits'):
        debugMessage('removed kit squad allocation %s team %s squad %s index %s %s' % (kit, team, squad, index, getPlayersNames(getPlayersByIndex(g_kits_squads[team][squad][kit], True))), 'kits')
    
    checkSelectedKitSquad(team, squad, kit)
def addSquadAllocation(team, squad, kit, index):
    trace = PRTrace('kits: addSquadAllocation()')
    if not squad and kit not in realityserver.C('KIT_LIMITS_SQUAD') or not getKitLimitSquad(kit):
        return None
    
    if index in g_kits_squads[team][squad][kit]:
        return None
    
    g_kits_squads[team][squad][kit].append(index)
    if isDebugEnabled('kits'):
        debugMessage('added kit squad allocation %s team %s squad %s index %s %s' % (kit, team, squad, index, getPlayersNames(getPlayersByIndex(g_kits_squads[team][squad][kit], True))), 'kits')
    
def onExitVehicle(player, vehicle):
    trace = PRTrace('kits: onExitVehicle()')
    player.lastUnarmedDropKit = (now() - realityserver.C('KIT_REQUEST_INTERVAL')) + 15
def onPlayerKilled(victim, attacker, weapon, assists, obj):
    trace = PRTrace('kits: onPlayerKilled()')
    removeKitAllocation(victim, victim.allocatedKit)
def onPlayerDeath(player, vehicle):
    trace = PRTrace('kits: onPlayerDeath()')
    removeKitAllocation(player, player.allocatedKit)
    checkSelectedKit(player)
def spawnerKit(position, template, team, spawnAbove = False):
    trace = PRTrace('kits: spawnerKit()')
    yoffset = -1.0
    if spawnAbove:
        yoffset = 2.5
    
    properties = {
        'team': team,
        'timeToLive': '300',
        'distance': '0',
        'damageWhenLost': '',
        'template': template,
        'position': (position[0], position[1] + yoffset, position[2]),
        'rotation': (0, 0, 0) }
    createSpawner(template + '_spawner_%s' % str(int(position[0]) + int(position[1]) + int(position[2])), properties)
def spawnPlayerKit(player, type):
    trace = PRTrace('kits: spawnPlayerKit()')
    
    try:
        position = player.getDefaultVehicle().getPosition()
    except:
        return None
    template = getKitTemplate(type, player.getTeam())
    spawnerKit(position, template, player.getTeam())
def spawnVehicleKit(vehicle, kit, team):
    trace = PRTrace('kits: spawnVehicleKit()')
    position = vehicle.getPosition()
    spawnerKit(position, kit, team)
def checkNinjas(data = ''):
    trace = PRTrace('kits: checkNinjas()')
    for player in getAlivePlayers():
        
        try:
            if isNinja(player):
                player.getDefaultVehicle().setDamage(100)
        continue
        continue
    
def onRemoteDropCommand(player, cmd, args):
    trace = PRTrace('kits: onRemoteDropCommand()')
    if player.killed:
        return None
    
    if player.lastUnarmedDropKit and now() - player.lastUnarmedDropKit <= realityserver.C('KIT_REQUEST_INTERVAL'):
        return sendMessageToPlayer(player, 1031121, 1)
    
    team = player.getTeam()
    player.lastUnarmedDropKit = now()
    
    try:
        playerPos = player.getDefaultVehicle().getPosition()
    except:
        return None
    spawnerKit(playerPos, getTeamName(team) + '_unarmed', team, True)
    sendMessageToPlayer(player, 1220118, 2)
def onRemoteCameraCommand(player, cmd, args):
    trace = PRTrace('kits: onRemoteCameraCommand()')
    if player.killed:
        return None
    
    
    try:
        playerPos = player.getDefaultVehicle().getPosition()
    except:
        return None
    spawnerKit(playerPos, 'pickup_camera', player.getTeam())
    debugMessage('camera kit deployed', 'kits')
def onRemoteOneFactionCommand(player, cmd, args):
    trace = PRTrace('kits: onRemoteOneFactionCommand()')
    if realityserver.C('KIT_FACTION_LOCKED') == 1:
        realityserver.C('KIT_FACTION_LOCKED', 0)
        debugMessage('kit faction requirements system disabled...')
    else:
        realityserver.C('KIT_FACTION_LOCKED', 1)
        debugMessage('kit faction requirements system enabled...')
def onRemoteKitsCommand(player, cmd, args):
    trace = PRTrace('kits: onRemoteKitsCommand()')
    if player.killed:
        return None
    
    
    try:
        team = int(args[0])
        if team not in [
            1,
            2]:
            team = player.getTeam()
    except:
        team = player.getTeam()
    teamName = getTeamName(team)
    if teamName not in realityserver.C('KIT_LIMITS'):
        return None
    
    kits = []
    for type in realityserver.C('KIT_LIMITS')[teamName].keys():
        kits.append(getKitTemplate(type, team))
        kits.append(getKitTemplate(type, team, True))
        kits.append(getKitTemplate(type, team, False, True))
        kits.append(getKitTemplate(type, team, True, True))
    
    if teamName == 'meinsurgent':
        for type in [
            'civilian',
            'insurgent1',
            'insurgent2',
            'insurgent3',
            'insurgent4',
            'sapper']:
            kits.append(getKitTemplate(type, team))
        
    else:
        for type in [
            'rifleman']:
            kits.append(getKitTemplate(type, team))
            kits.append(getKitTemplate(type, team, True))
            kits.append(getKitTemplate(type, team, False, True))
            kits.append(getKitTemplate(type, team, True, True))
        
    kits.sort()
    final = []
    for kit in kits:
        if kit not in final:
            final.append(kit)
            continue
    
    count = 2
    for kit in final:
        if isDebugEnabled('kits'):
            debugMessage('spawning kit %s' % kit, 'kits')
        
        spawnerKit(getPositionFromPlayer(player, count), kit, team)
        count += 2
    
def onRemoteNinjaCommand(player, cmd, args):
    trace = PRTrace('kits: onRemoteNinjaCommand()')
    if player.killed:
        return None
    
    tmp = 'pickup_ninja'
    
    try:
        if int(args[0].strip()) == 1:
            tmp += '_alt'
    except:
        pass
    
    try:
        playerPos = player.getDefaultVehicle().getPosition()
    except:
        return None
    spawnerKit(playerPos, tmp, player.getTeam())
    debugMessage('ninja kit deployed', 'kits')
def onKitInit(player, cmd, args):
    trace = PRTrace('kits: onKitInit()')
    team = int(args[0])
    kitIndex = int(args[1])
    if g_kits_slots[team][kitIndex] is not None:
        return None
    
    kitSlot = KitSlot()
    kitSlot.Primary = args[2]
    kitSlot.Secondary = args[3]
    kitSlot.Soldier = args[4]
    if getGameMode() == 'vehicles':
        kitSlot.LimitationsEnabled = False
    else:
        kitSlot.LimitationsEnabled = True
    if kitSlot.Primary.find('_') != -1:
        kitSlot.Name = kitSlot.Primary.split('_')[1]
    
    g_kits_slots[team][kitIndex] = kitSlot
def onCustomKitSelect(player, cmd, args):
    trace = PRTrace('kits: onCustomKitSelect()')
    if not player.isValid() or player.isAIPlayer():
        return None
    
    team = player.getTeam()
    player.customSelection[team][int(args[0])] = int(args[1])
def modifySpawn(player):
    trace = PRTrace('kits: modifySpawn()')
    team = player.getTeam()
    for kitIndex in range(7):
        kit = g_kits_slots[team][kitIndex].Primary
        if player.customSelection[team][kitIndex] == 1:
            kit = g_kits_slots[team][kitIndex].Secondary
        
        soldier = g_kits_slots[team][kitIndex].Soldier
        if kit == 'empty':
            continue
        
        host.rcon_invoke('gameLogic.setKit %s %s %s %s' % (team, kitIndex, kit, soldier))
    



# File: r (Python 2.3)
import host
import bf2
from game.realityconfig_common import PRSPECTATORS
from game.realityprofiler import PRTrace
from game.realitydebug import PRDEBUG_DEVS, isDebugEnabled, debugMessage
gameStatus = 0
events = {
    'ControlPointChangedOwner': (2, [], '(controlPointObject, attackingTeamID)'),
    'PlayerTeamDamagePoint': (2, [], '(playerObject, victimSoldierObject)'),
    'PlayerUnlocksResponse': (3, [], '(succeeded, player, unlocks)'),
    'PlayerStatsResponse': (3, [], '(succeeded, player, response)'),
    'PlayerGiveAmmoPoint': (2, [], '(givingPlayerObject, receivingPhysicalObject)'),
    'DeployGrapplingHook': (1, [], '(player)'),
    'TicketLimitReached': (2, [], '(team, limitID)'),
    'ConsoleSendCommand': (2, [], '(command, args)'),
    'ChangedSquadLeader': (3, [], '(squadID, oldLeaderPlayerObject, newLeaderPlayerObject)'),
    'PlayerChangedSquad': (3, [], '(playerObject, oldSquadID, newSquadID)'),
    'PlayerChangeWeapon': (3, [], '(playerObject, oldWeaponObject, newWeaponObject)'),
    'PlayerRepairPoint': (2, [], '(givingPlayerObject, receivingVehicleObject)'),
    'PlayerChangeTeams': (2, [], '(playerObject, humanHasSpawned)'),
    'ChangedCommander': (3, [], '(teamID, oldCommanderPlayerObject, newCommanderPlayerObject)'),
    'PlayerDisconnect': (1, [], '(playerObject)'),
    'TimeLimitReached': (1, [], '(value)'),
    'VehicleDestroyed': (2, [], '(vehicleObject, attackerObject)'),
    'PlayerHealPoint': (2, [], '(givingPlayerObject, receivingSoldierObject)'),
    'DeployTactical': (1, [], '(player)'),
    'PlayerRevived': (2, [], '(revivedPlayerObject, medicPlayerObject)'),
    'PlayerConnect': (1, [], '(player)'),
    'DeployZipLine': (1, [], '(player)'),
    'RemoteCommand': (2, [], '(playerId, cmd)'),
    'ClientCommand': (3, [], '(command, issuerPlayerObject, args)'),
    'EnterVehicle': (3, [], '(player, vehicle, freeSoldier = False)'),
    'PlayerKilled': (5, [], '(victimPlayerObject, attackerPlayerObject, weaponObject, assists, victimSoldierObject)'),
    'PlayerBanned': (3, [], '(playerObject, times, type)'),
    'PlayerKicked': (1, [], '(playerObject)'),
    'ExitVehicle': (2, [], '(player, vehicle)'),
    'PlayerSpawn': (2, [], '(player, soldier)'),
    'PlayerDeath': (2, [], '(playerObject, soldierObject)'),
    'PlayerScore': (2, [], '(playerObject, difference)'),
    'ChatMessage': (4, [], '(playerId, text, channel, flags)'),
    'PickupKit': (2, [], '(playerObject, kitObject)'),
    'DropKit': (2, [], '(playerObject, kitObject)'),
    'Reset': (1, [], '(data)'),
    'ValidatePlayerNameResponse': (5, [], '(realNick, oldNick, realPID, oldPID, player)'),
    'AttackRequest': (1, [], '(player)'),
    'ExtractRequest': (2, [], '(player, mode)'),
    'MineRequest': (1, [], '(player)'),
    'SupplyRequest': (1, [], '(player)'),
    'AmmoRequest': (1, [], '(player)'),
    'MedicRequest': (1, [], '(player)'),
    'RepairRequest': (1, [], '(player)'),
    'FireRequest': (1, [], '(player)'),
    'MutinyRequest': (1, [], '(player)'),
    'SupportRequest': (2, [], '(player, mode)'),
    'StatusRequest': (2, [], '(player, mode)'),
    'PositionMarked': (4, [], '(mark, team, position, args)'),
    'PickupFirstKit': (2, [], '(player, kit)'),
    'DropFirstKit': (2, [], '(player, kit)'),
    'PickupRevivedKit': (2, [], '(player, kit)'),
    'DropRevivedKit': (2, [], '(player, kit)'),
    'PlayerSuicided': (2, [], '(victimPlayerObject, weaponObject)'),
    'PlayerKilledFiltered': (5, [], '(victimPlayerObject, attackerPlayerObject, weaponObject, assists, victimSoldierObject)'),
    'PlayerTeamKilled': (5, [], '(victimPlayerObject, attackerPlayerObject, weaponObject, assists, victimSoldierObject)'),
    'PlayerEnemyKilled': (5, [], '(victimPlayerObject, attackerPlayerObject, weaponObject, assists, victimSoldierObject)'),
    'VehicleSpawned': (1, [], '(vehicleObject)'),
    'VehicleDestroyedFiltered': (2, [], '(vehicleObject, attackerObject)'),
    'TeamVehicleDestroyed': (2, [], '(vehicleObject, attackerObject)'),
    'EnemyVehicleDestroyed': (2, [], '(vehicleObject, attackerObject)'),
    'ChatMessageFiltered': (4, [], '(player, text, channel, flags)'),
    'TicketsChanged': (3, [], '(team, tickets, remaining)'),
    'RoundStart': (0, [], '()'),
    'RoundEnd': (1, [], '(winner)'),
    'ControlPointNeutralized': (3, [], '(cp, team, players)'),
    'ControlPointCaptured': (3, [], '(cp, team, players)'),
    'PositionDefended': (2, [], '(team, player)'),
    'AssetDeployed': (2, [], '(assetType, player)'),
    'AssetDefended': (2, [], '(assetType, player)'),
    'EnterControlPoint': (2, [], '(player, cp)'),
    'ExitControlPoint': (2, [], '(player, cp)'),
    'PositionsUpdated': (1, [], '(positions)'),
    'PlayerForgave': (1, [], '(player)'),
    'PlayerPunished': (1, [], '(player)'),
    'OutpostEnabled': (1, [], '(outpost)'),
    'OutpostDisabled': (1, [], '(outpost)'),
    'RemoteCommandIntel': (3, [], '(player, cmd, args)'),
    'RemoteCommandPhase': (3, [], '(player, cmd, args)'),
    'RemoteCommandKitRequest': (3, [], '(player, cmd, args)'),
    'RemoteCommandAssetRequest': (3, [], '(player, cmd, args)'),
    'RemoteCommandRallyRequest': (3, [], '(player, cmd, args)'),
    'RemoteCommandGiveUp': (3, [], '(player, cmd, args)'),
    'RemoteCommandDone': (3, [], '(player, cmd, args)'),
    'RemoteCommandHealth': (3, [], '(player, cmd, args)'),
    'RemoteCommandSize': (3, [], '(player, cmd, args)'),
    'RemoteCommandTemplate': (3, [], '(player, cmd, args)'),
    'RemoteCommandDebug': (3, [], '(player, cmd, args)'),
    'RemoteCommandDestroyables': (3, [], '(player, cmd, args)'),
    'RemoteCommandControlPoint': (3, [], '(player, cmd, args)'),
    'RemoteCommandDistance': (3, [], '(player, cmd, args)'),
    'RemoteCommandRequestMark': (3, [], '(player, cmd, args)'),
    'RemoteCommandSpottedMark': (3, [], '(player, cmd, args)'),
    'RemoteCommandTeleport': (3, [], '(player, cmd, args)'),
    'RemoteCommandClosest': (3, [], '(player, cmd, args)'),
    'RemoteCommandKillStreak': (3, [], '(player, cmd, args)'),
    'RemoteCommandCamera': (3, [], '(player, cmd, args)'),
    'RemoteCommandNinja': (3, [], '(player, cmd, args)'),
    'RemoteCommandKits': (3, [], '(player, cmd, args)'),
    'RemoteCommandOneFaction': (3, [], '(player, cmd, args)'),
    'RemoteCommandDrop': (3, [], '(player, cmd, args)'),
    'RemoteCommandSelectKit': (3, [], '(player, cmd, args)'),
    'RemoteCommandCustomKit': (3, [], '(player, cmd, args)'),
    'RemoteCommandInitKit': (3, [], '(player, cmd, args)'),
    'RemoteCommandLocalization': (3, [], '(player, cmd, args)'),
    'RemoteCommandProfiler': (3, [], '(player, cmd, args)'),
    'RemoteCommandPoints': (3, [], '(player, cmd, args)'),
    'RemoteCommandModded': (3, [], '(player, cmd, args)'),
    'RemoteCommandBlacklist': (3, [], '(player, cmd, args)'),
    'RemoteCommandServer': (3, [], '(player, cmd, args)'),
    'RemoteCommandMap': (3, [], '(player, cmd, args)'),
    'RemoteCommandSpawner': (3, [], '(player, cmd, args)'),
    'RemoteCommandSpawners': (3, [], '(player, cmd, args)'),
    'RemoteCommandVehicles': (3, [], '(player, cmd, args)'),
    'RemoteCommandSpectator': (3, [], '(player, cmd, args)'),
    'RemoteCommandGameplayMark': (3, [], '(player, cmd, args)'),
    'RemoteCommandMod': (3, [], '(player, cmd, args)'),
    'RemoteCommandGameplayRequest': (3, [], '(player, cmd, args)') }
arguments = [
    None,
    None,
    None,
    None,
    None]
def init(debugger = False):
    host.registerGameStatusHandler(onGameStatusChanged)
    host.registerHandler('ControlPointChangedOwner', onControlPointChangedOwner, 1)
    host.registerHandler('PlayerTeamDamagePoint', onPlayerTeamDamagePoint, 1)
    host.registerHandler('PlayerUnlocksResponse', onPlayerUnlocksResponse, 1)
    host.registerHandler('PlayerStatsResponse', onPlayerStatsResponse, 1)
    host.registerHandler('PlayerGiveAmmoPoint', onPlayerGiveAmmoPoint, 1)
    host.registerHandler('DeployGrapplingHook', onDeployGrapplingHook, 1)
    host.registerHandler('TicketLimitReached', onTicketLimitReached, 1)
    host.registerHandler('ConsoleSendCommand', onConsoleSendCommand, 1)
    host.registerHandler('ChangedSquadLeader', onChangedSquadLeader, 1)
    host.registerHandler('PlayerChangedSquad', onPlayerChangedSquad, 1)
    host.registerHandler('PlayerChangeWeapon', onPlayerChangeWeapon, 1)
    host.registerHandler('PlayerRepairPoint', onPlayerRepairPoint, 1)
    host.registerHandler('PlayerChangeTeams', onPlayerChangeTeams, 1)
    host.registerHandler('ChangedCommander', onChangedCommander, 1)
    host.registerHandler('PlayerDisconnect', onPlayerDisconnect, 1)
    host.registerHandler('TimeLimitReached', onTimeLimitReached, 1)
    host.registerHandler('VehicleDestroyed', onVehicleDestroyed, 1)
    host.registerHandler('PlayerHealPoint', onPlayerHealPoint, 1)
    host.registerHandler('DeployTactical', onDeployTactical, 1)
    host.registerHandler('PlayerRevived', onPlayerRevived, 1)
    host.registerHandler('PlayerConnect', onPlayerConnect, 1)
    host.registerHandler('DeployZipLine', onDeployZipLine, 1)
    host.registerHandler('RemoteCommand', onRemoteCommand, 1)
    host.registerHandler('ClientCommand', onClientCommand, 1)
    host.registerHandler('EnterVehicle', onEnterVehicle, 1)
    host.registerHandler('PlayerKilled', onPlayerKilled, 1)
    host.registerHandler('PlayerBanned', onPlayerBanned, 1)
    host.registerHandler('PlayerKicked', onPlayerKicked, 1)
    host.registerHandler('ExitVehicle', onExitVehicle, 1)
    host.registerHandler('PlayerSpawn', onPlayerSpawn, 1)
    host.registerHandler('PlayerDeath', onPlayerDeath, 1)
    host.registerHandler('PlayerScore', onPlayerScore, 1)
    host.registerHandler('ChatMessage', onChatMessage, 1)
    host.registerHandler('PickupKit', onPickupKit, 1)
    host.registerHandler('DropKit', onDropKit, 1)
    host.registerHandler('Reset', onReset, 1)
    if not debugger:
        host.registerHandler('ValidatePlayerNameResponse', onValidatePlayerNameResponse, 1)
    
    host.registerHandler('PickupKit', onCustomPickupKit, 1)
    host.registerHandler('PickupKit', onRevivedPickupKit, 1)
    host.registerHandler('DropKit', onCustomDropKit, 1)
    host.registerHandler('DropKit', onRevivedDropKit, 1)
    host.registerHandler('RemoteCommand', onFilteredRemoteCommand, 1)
    host.registerHandler('ClientCommand', onPunishmentCommand, 1)
    host.registerHandler('ChatMessage', onFilteredChatMessage, 1)
    host.registerHandler('VehicleDestroyed', onVehicleSpawned, 1)
    host.registerHandler = newRegisterHandler
    host.unregisterHandler = unregisterHandler
def newRegisterHandler(event, function, optional = 0):
    if not events.has_key(event):
        if isDebugEnabled():
            debugMessage('events: ERROR! ' + event + ' event does not exist')
        
        return None
    elif function.func_code.co_argcount != events[event][0] and function.__class__ == init.__class__:
        if isDebugEnabled():
            debugMessage('events: ERROR! ' + function.func_name + ' in ' + getFileName(function.func_code.co_filename) + ' wrong # of args')
        
        return None
    else:
        for handler in events[event][1]:
            if handler[0] == function:
                if isDebugEnabled('events'):
                    debugMessage('already registered ' + function.func_name + ' in ' + getFileName(function.func_code.co_filename), 'events')
                
                return None
                continue
        
    handler = (function, optional)
    events[event][1].append(handler)
    if isDebugEnabled('events'):
        debugMessage('registered ' + function.func_name + ' in ' + getFileName(function.func_code.co_filename), 'events')
    
def unregisterHandler(function):
    for event in events.items():
        for handler in event[1][1]:
            if handler[0] == function:
                
                try:
                    event[1][1].remove(handler)
                    if isDebugEnabled('events'):
                        debugMessage('unregistered ' + function.func_name + ' in ' + getFileName(function.func_code.co_filename), 'events')
                    
                    return None
                if isDebugEnabled():
                    debugMessage('events: ERROR! Unregister ' + function.func_name)
                
                continue
            isDebugEnabled()
        
    
    if isDebugEnabled():
        debugMessage('events: ERROR! Unregister ' + function.func_name + ' does not exist')
    
def getFileName(path):
    s = '\\'
    if path.count(s) == 0:
        s = '/'
    
    arr = path.split(s)
    return str(arr.pop())
def sendToHandlers(event, extraLocals):
    
    try:
        if 'trace' in extraLocals:
            del extraLocals['trace']
    except:
        pass
    for function in event[1]:
        if function[1] == 0 and gameStatus != 1:
            return None
        
        handler = function[0]
        localsNamespace = dict(extraLocals)
        localsNamespace.update(locals())
        if not isDebugEnabled('events'):
            
            try:
                eval('handler' + event[2], globals(), localsNamespace)
            except Exception:
                err = None
                trace = PRTrace('events: ERROR! ' + handler.func_name + ' in ' + getFileName(handler.func_code.co_filename))
                trace = PRTrace('events: ERROR! ' + str(err))
                if isDebugEnabled():
                    debugMessage('events: ERROR! ' + handler.func_name + ' in ' + getFileName(handler.func_code.co_filename))
                    debugMessage('events: ERROR! ' + str(err))
                
            except:
                isDebugEnabled()
            
        eval('handler' + event[2], globals(), localsNamespace)
    
def onGameStatusChanged(status):
    global gameStatus
    if status == 1:
        gameStatus = status
    else:
        gameStatus = 0
def getEvents(name):
    
    try:
        return events[name]
    except:
        pass
import realityserver
def requestSpamBlocker(player):
    if not player or not player.isValid():
        return None
    
    times = int(host.timer_getWallTime())
    reset = False
    if not (player.lastRequest):
        reset = True
    elif player.canRequest == 1 and times - player.lastRequest > realityserver.C('SPAM_INTERVAL'):
        reset = True
    elif player.canRequest == 0 and times - player.lastRequest > realityserver.C('SPAM_PENALTY'):
        reset = True
    
    if reset:
        player.lastRequest = times
        player.requestCounter = 0
        player.canRequest = 1
    
    if player.requestCounter >= realityserver.C('SPAM_LIMIT'):
        return None
    
    player.requestCounter += 1
    if player.requestCounter == realityserver.C('SPAM_LIMIT'):
        player.canRequest = 0
        player.lastRequest = times
        if isDebugEnabled('events'):
            debugMessage('spam blocked ' + player.getName(), 'events')
        
        return True
    
def onPlayerConnect(player):
    event = getEvents('PlayerConnect')
    sendToHandlers(event, locals())
def onPlayerSpawn(player, soldier):
    event = getEvents('PlayerSpawn')
    sendToHandlers(event, locals())
def onRemoteCommand(playerId, cmd):
    event = getEvents('RemoteCommand')
    sendToHandlers(event, locals())
def onPlayerChangeTeams(playerObject, humanHasSpawned):
    event = getEvents('PlayerChangeTeams')
    sendToHandlers(event, locals())
def onPlayerChangeWeapon(playerObject, oldWeaponObject, newWeaponObject):
    event = getEvents('PlayerChangeWeapon')
    sendToHandlers(event, locals())
def onPlayerChangedSquad(playerObject, oldSquadID, newSquadID):
    event = getEvents('PlayerChangedSquad')
    sendToHandlers(event, locals())
def onPlayerScore(playerObject, difference):
    event = getEvents('PlayerScore')
    sendToHandlers(event, locals())
def onPlayerHealPoint(givingPlayerObject, receivingSoldierObject):
    event = getEvents('PlayerHealPoint')
    sendToHandlers(event, locals())
def onPlayerRepairPoint(givingPlayerObject, receivingVehicleObject):
    event = getEvents('PlayerRepairPoint')
    sendToHandlers(event, locals())
def onPlayerGiveAmmoPoint(givingPlayerObject, receivingPhysicalObject):
    event = getEvents('PlayerGiveAmmoPoint')
    sendToHandlers(event, locals())
def onPlayerTeamDamagePoint(playerObject, victimSoldierObject):
    event = getEvents('PlayerTeamDamagePoint')
    sendToHandlers(event, locals())
def onPlayerKilled(victimPlayerObject, attackerPlayerObject, weaponObject, assists, victimSoldierObject):
    event = getEvents('PlayerKilled')
    sendToHandlers(event, locals())
def onPlayerRevived(revivedPlayerObject, medicPlayerObject):
    event = getEvents('PlayerRevived')
    sendToHandlers(event, locals())
def onPlayerDeath(playerObject, soldierObject):
    event = getEvents('PlayerDeath')
    sendToHandlers(event, locals())
def onEnterVehicle(player, vehicle, freeSoldier = False):
    event = getEvents('EnterVehicle')
    sendToHandlers(event, locals())
def onExitVehicle(player, vehicle):
    event = getEvents('ExitVehicle')
    sendToHandlers(event, locals())
def onPlayerBanned(playerObject, times, type):
    event = getEvents('PlayerBanned')
    sendToHandlers(event, locals())
def onPlayerKicked(playerObject):
    event = getEvents('PlayerKicked')
    sendToHandlers(event, locals())
def onPlayerDisconnect(playerObject):
    event = getEvents('PlayerDisconnect')
    sendToHandlers(event, locals())
def onVehicleDestroyed(vehicleObject, attackerObject):
    event = getEvents('VehicleDestroyed')
    sendToHandlers(event, locals())
def onPickupKit(playerObject, kitObject):
    event = getEvents('PickupKit')
    sendToHandlers(event, locals())
def onDropKit(playerObject, kitObject):
    event = getEvents('DropKit')
    sendToHandlers(event, locals())
def onReset(data):
    event = getEvents('Reset')
    sendToHandlers(event, locals())
def onValidatePlayerNameResponse(realNick, oldNick, realPID, oldPID, player):
    event = getEvents('ValidatePlayerNameResponse')
    sendToHandlers(event, locals())
def onChangedCommander(teamID, oldCommanderPlayerObject, newCommanderPlayerObject):
    event = getEvents('ChangedCommander')
    sendToHandlers(event, locals())
def onChangedSquadLeader(squadID, oldLeaderPlayerObject, newLeaderPlayerObject):
    event = getEvents('ChangedSquadLeader')
    sendToHandlers(event, locals())
def onControlPointChangedOwner(controlPointObject, attackingTeamID):
    event = getEvents('ControlPointChangedOwner')
    sendToHandlers(event, locals())
def onTimeLimitReached(value):
    event = getEvents('TimeLimitReached')
    sendToHandlers(event, locals())
def onTicketLimitReached(team, limitID):
    event = getEvents('TicketLimitReached')
    sendToHandlers(event, locals())
def onConsoleSendCommand(command, args):
    event = getEvents('ConsoleSendCommand')
    sendToHandlers(event, locals())
def onClientCommand(command, issuerPlayerObject, args):
    event = getEvents('ClientCommand')
    sendToHandlers(event, locals())
def onPlayerUnlocksResponse(succeeded, player, unlocks):
    event = getEvents('PlayerUnlocksResponse')
    sendToHandlers(event, locals())
def onChatMessage(playerId, text, channel, flags):
    event = getEvents('ChatMessage')
    sendToHandlers(event, locals())
def onPlayerStatsResponse(succeeded, player, response):
    event = getEvents('PlayerStatsResponse')
    sendToHandlers(event, locals())
def onDeployGrapplingHook(player):
    event = getEvents('DeployGrapplingHook')
    sendToHandlers(event, locals())
def onDeployZipLine(player):
    event = getEvents('DeployZipLine')
    sendToHandlers(event, locals())
def onDeployTactical(player):
    event = getEvents('DeployTactical')
    sendToHandlers(event, locals())
def onFilteredChatMessage(playerId, text, channel, flags):
    if playerId == -1:
        playerId = 255
    
    
    try:
        player = bf2.playerManager.getPlayerByIndex(playerId)
        if not player or not player.isValid():
            return None
    except:
        return None
    text = text.replace('HUD_TEXT_CHAT_COMMANDER', '')
    text = text.replace('HUD_TEXT_CHAT_TEAM', '')
    text = text.replace('HUD_TEXT_CHAT_SQUAD', '')
    text = text.replace('HUD_CHAT_DEADPREFIX', '')
    text = text.replace('* ', '')
    text = text.strip()
    args = text.lower().split(' ')
    
    try:
        if args[0] != 'rcon':
            event = getEvents('ChatMessageFiltered')
            sendToHandlers(event, locals())
        else:
            text = text.replace('rcon ', '')
            onFilteredRemoteCommand(playerId, text)
    except:
        pass
def onFilteredRemoteCommand(playerId, text):
    if playerId == -1:
        playerId = 255
    
    text = text.lower()
    args = text.split(' ')
    cmd = args[0]
    args.pop(0)
    
    try:
        player = bf2.playerManager.getPlayerByIndex(playerId)
        if not player or not player.isValid():
            return None
    except:
        return None
    spam = False
    debug = False
    dev = False
    if cmd == 'intel':
        e = 'RemoteCommandIntel'
        debug = True
    elif cmd == 'phase':
        e = 'RemoteCommandPhase'
        debug = True
    elif cmd == 'spawn':
        e = 'RemoteCommandKitRequest'
        spam = True
    elif cmd == 'cmdr':
        e = 'RemoteCommandAssetRequest'
        spam = True
    elif cmd == 'rally':
        e = 'RemoteCommandRallyRequest'
        spam = True
    elif cmd == 'giveup':
        e = 'RemoteCommandGiveUp'
    elif cmd == 'done':
        e = 'RemoteCommandDone'
    elif cmd == 'health':
        e = 'RemoteCommandHealth'
        debug = True
    elif cmd == 'size':
        e = 'RemoteCommandSize'
        debug = True
    elif cmd == 'tmp':
        e = 'RemoteCommandTemplate'
        debug = True
    elif cmd == 'debug':
        e = 'RemoteCommandDebug'
        dev = True
    elif cmd == 'destroyables':
        e = 'RemoteCommandDestroyables'
        debug = True
    elif cmd == 'cp':
        e = 'RemoteCommandControlPoint'
        debug = True
    elif cmd == 'distance':
        e = 'RemoteCommandDistance'
    elif cmd == 'request':
        e = 'RemoteCommandRequestMark'
        spam = True
    elif cmd == 'mark':
        e = 'RemoteCommandSpottedMark'
        spam = True
    elif cmd == 'teleport':
        e = 'RemoteCommandTeleport'
    elif cmd == 'closest':
        e = 'RemoteCommandClosest'
    elif cmd == 'killstreak':
        e = 'RemoteCommandKillStreak'
        debug = True
    elif cmd == 'camera':
        e = 'RemoteCommandCamera'
        dev = True
    elif cmd == 'ninja':
        e = 'RemoteCommandNinja'
        dev = True
    elif cmd == 'kits':
        e = 'RemoteCommandKits'
        debug = True
    elif cmd == 'onefaction':
        e = 'RemoteCommandOneFaction'
        debug = True
    elif cmd == 'drop':
        e = 'RemoteCommandDrop'
        spam = True
    elif cmd == 'select':
        e = 'RemoteCommandSelectKit'
    elif cmd == 'custom':
        e = 'RemoteCommandCustomKit'
    elif cmd == 'initkit':
        e = 'RemoteCommandInitKit'
    elif cmd == 'localization':
        e = 'RemoteCommandLocalization'
        debug = True
    elif cmd == 'profiler':
        e = 'RemoteCommandProfiler'
        debug = True
    elif cmd == 'points':
        e = 'RemoteCommandPoints'
        debug = True
    elif cmd == 'modded':
        e = 'RemoteCommandModded'
        debug = True
    elif cmd == 'blacklist':
        e = 'RemoteCommandBlacklist'
        debug = True
    elif cmd == 'sv':
        e = 'RemoteCommandServer'
        debug = True
    elif cmd == 'map':
        e = 'RemoteCommandMap'
        dev = True
    elif cmd == 'spawner':
        e = 'RemoteCommandSpawner'
        debug = True
    elif cmd == 'spawners':
        e = 'RemoteCommandSpawners'
        debug = True
    elif cmd in [
        'vehicles',
        'exit',
        'critical',
        'damage',
        'oneman',
        'start']:
        e = 'RemoteCommandVehicles'
        debug = True
    elif cmd in [
        'prbot',
        'prbot2',
        'prbot3',
        'prbot4',
        'prbot_alt']:
        e = 'RemoteCommandSpectator'
        dev = True
    elif cmd in [
        'delete',
        'uav',
        'lz',
        'target',
        'mortar',
        'cas',
        'demolish',
        'minefield',
        'spotted']:
        e = 'RemoteCommandGameplayMark'
    elif cmd in [
        'attack',
        'extract',
        'support',
        'supply',
        'repair',
        'ammo',
        'medic',
        'fire',
        'mutiny',
        'status',
        'mine']:
        e = 'RemoteCommandGameplayRequest'
        spam = True
    elif cmd in [
        'kick',
        'kill',
        'slap',
        'hurt',
        'tard',
        'move',
        'ready']:
        e = 'RemoteCommandMod'
        dev = True
    else:
        return None
    if isDebugEnabled('events'):
        debugMessage(text + ' --> ' + e, 'events')
    
    if spam:
        if requestSpamBlocker(player):
            if player and not (player.dead) and not player.isAIPlayer():
                host.sgl_sendMedalEvent(player.index, 1031406, 1)
            
        
        if player.canRequest == 0:
            if isDebugEnabled('events'):
                debugMessage(player.getName() + ' is spam blocked', 'events')
            
            return None
        
    
    if dev or debug:
        debugger = False
        if realityserver.isModdableServer() and realityserver.C('PRDEBUG_ALL') == 1:
            debugger = True
        elif realityserver.isInternetServer():
            if hasattr(player, 'hash') and player.hash in PRDEBUG_DEVS.values():
                debugger = True
            
        elif realityserver.getPlayerName(player) in PRDEBUG_DEVS:
            debugger = True
        
        if cmd in [
            'prbot'] and realityserver.getPlayerName(player) in PRSPECTATORS and realityserver.isModdableServer():
            debugger = True
        
        if not debugger:
            return None
        
        if debug and not isDebugEnabled():
            return None
        
    
    event = getEvents(e)
    sendToHandlers(event, locals())
def onPunishmentCommand(command, player, args):
    if int(command) == 100:
        event = getEvents('PlayerPunished')
        sendToHandlers(event, locals())
        return None
    
    if int(command) == 101:
        event = getEvents('PlayerForgave')
        sendToHandlers(event, locals())
        return None
    
def onRevivedPickupKit(player, kit):
    if player.revived == False:
        return None
    
    event = getEvents('PickupRevivedKit')
    sendToHandlers(event, locals())
def onRevivedDropKit(player, kit):
    if player.revived == False:
        return None
    
    event = getEvents('DropRevivedKit')
    sendToHandlers(event, locals())
def onCustomPickupKit(player, kit):
    if not hasattr(player, 'pickupKit'):
        player.pickupKit = 0
    
    player.pickupKit += 1
    if player.pickupKit > 1:
        return None
    
    event = getEvents('PickupFirstKit')
    sendToHandlers(event, locals())
def onCustomDropKit(player, kit):
    if player.pickupKit > 1:
        return None
    
    event = getEvents('DropFirstKit')
    sendToHandlers(event, locals())
def onVehicleSpawned(vehicle, attacker):
    if vehicle.templateName != 'SpawnerEvent':
        return None
    
    realSpawn = vehicle.getParent()
    event = getEvents('VehicleSpawned')
    sendToHandlers(event, {
        'vehicleObject': realSpawn })





Вот я пытался расставить код:
# Customization script 0.2
# By Hjid
global g_kits_slots
import host
import bf2
import random
import copy
import events
from game.events import onFilteredRemoteCommand
#from gamestatus import GameStatus
# Team names
g_kits_slots = None
g_team_names = []
# init
def init():
    host.registerGameStatusHandler(onGameStatusChanged)
    host.registerHandler("PlayerConnect", onPlayerConnect, 1)
    host.registerHandler("RemoteCommand", onFilteredRemoteCommand, 1)
    host.registerHandler('PlayerSpawn', onPlayerSpawn)
    host.registerHandler('RemoteCommandSelectKit', onKitSelected)
    host.registerHandler('RemoteCommandCustomKit', onCustomKitSelect)
    host.registerHandler('RemoteCommandInitKit', onKitInit)
def onGameStatusChanged(status):
    global g_mapid, g_kits_slots, g_kits_used, g_kits_wrong, g_kits_allocated, g_kits_allocated_timer, g_kits_reset_timer, g_kits_ninja_timer, g_kits_wrong_timer
    trace = PRTrace('kits: onGameStatusChanged()')
    if status == bf2.GameStatus.Playing and reallyPlaying():
        mapid = '%s|%s|%s' % (getMapName(), getGameMode(), getMapLayer())
        if g_mapid != mapid:
            g_mapid = mapid
            g_kits_slots = {
                1: [
                    None,
                    None,
                    None,
                    None,
                    None,
                    None,
                    None],
                2: [
                    None,
                    None,
                    None,
                    None,
                    None,
                    None,
                    None] }
            for player in bf2.playerManager.getPlayers():
                player.customSelection = {
                    1: [
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0],
                    2: [
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0] }
def onChangedCommander(team, oldCmd, newCmd):
    trace = PRTrace('kits: onChangedCommander()')
    if newCmd:
        checkSelectedKit(newCmd)
    
    if oldCmd:
        checkSelectedKit(oldCmd)
		
			
def onPlayerConnect(player):
    trace = PRTrace('kits: onPlayerConnect()')
    cached = getPlayerByIndex(player.index)
	
def onPlayerSpawn(player, soldier):
    trace = PRTrace('kits: onPlayerSpawn()')
    if player.isAIPlayer():
        return None
    
    modifySpawn(player)
    times = True
    if player.selectedKit in unlimitedKits:
        times = False
    
    addKitAllocation(player, player.selectedKit, times)
def onKitSelected(player, cmd, args):
    trace = PRTrace('kits: onKitSelected()')
    if not player.isValid() or player.isAIPlayer():
        return None
    
    
    try:
        slot = int(args[0].strip())
    except:
        return None
    team = player.getTeam()
    squad = player.getSquadId()
    inherit = False
    kit = getKitSlot(team, slot)
    if isKitReservedByPlayer(team, squad, player.selectedKit, player):
        removeKitReservations(player)
        inherit = copy(player.selectedKit)
    
    player.selectedKit = kit
    checkSelectedKit(player)
    if inherit:
        checkSelectedKitSquad(team, squad, inherit, player)
def onKitInit(player, cmd, args):
    trace = PRTrace('kits: onKitInit()')
    team = int(args[0])
    kitIndex = int(args[1])
    if g_kits_slots[team][kitIndex] is not None:
        return None
    
    kitSlot = KitSlot()
    kitSlot.Primary = args[2]
    kitSlot.Secondary = args[3]
    kitSlot.Soldier = args[4]
    if getGameMode() == 'vehicles':
        kitSlot.LimitationsEnabled = False
    else:
        kitSlot.LimitationsEnabled = True
    if kitSlot.Primary.find('_') != -1:
        kitSlot.Name = kitSlot.Primary.split('_')[1]
    
    g_kits_slots[team][kitIndex] = kitSlot
def onCustomKitSelect(player, cmd, args):
    trace = PRTrace('kits: onCustomKitSelect()')
    if not player.isValid() or player.isAIPlayer():
        return None
    
    team = player.getTeam()
    player.customSelection[team][int(args[0])] = int(args[1])
def modifySpawn(player):
    trace = PRTrace('kits: modifySpawn()')
    team = player.getTeam()
    for kitIndex in range(7):
        kit = g_kits_slots[team][kitIndex].Primary
        if player.customSelection[team][kitIndex] == 1:
            kit = g_kits_slots[team][kitIndex].Secondary
        
        soldier = g_kits_slots[team][kitIndex].Soldier
        if kit == 'empty':
            continue
        
        host.rcon_invoke('gameLogic.setKit %s %s %s %s' % (team, kitIndex, kit, soldier))

events.py
# Customization script 0.2
# By Hjid
global g_kits_slots
import host
import bf2
import random
import copy
import events
from game.events import onFilteredRemoteCommand
#from gamestatus import GameStatus
# Team names
g_kits_slots = None
g_team_names = []
# init
def init():
    host.registerGameStatusHandler(onGameStatusChanged)
    host.registerHandler("PlayerConnect", onPlayerConnect, 1)
    host.registerHandler("RemoteCommand", onFilteredRemoteCommand, 1)
    host.registerHandler('PlayerSpawn', onPlayerSpawn)
    host.registerHandler('RemoteCommandSelectKit', onKitSelected)
    host.registerHandler('RemoteCommandCustomKit', onCustomKitSelect)
    host.registerHandler('RemoteCommandInitKit', onKitInit)
def onGameStatusChanged(status):
    global g_mapid, g_kits_slots, g_kits_used, g_kits_wrong, g_kits_allocated, g_kits_allocated_timer, g_kits_reset_timer, g_kits_ninja_timer, g_kits_wrong_timer
    trace = PRTrace('kits: onGameStatusChanged()')
    if status == bf2.GameStatus.Playing and reallyPlaying():
        mapid = '%s|%s|%s' % (getMapName(), getGameMode(), getMapLayer())
        if g_mapid != mapid:
            g_mapid = mapid
            g_kits_slots = {
                1: [
                    None,
                    None,
                    None,
                    None,
                    None,
                    None,
                    None],
                2: [
                    None,
                    None,
                    None,
                    None,
                    None,
                    None,
                    None] }
            for player in bf2.playerManager.getPlayers():
                player.customSelection = {
                    1: [
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0],
                    2: [
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0] }
def onChangedCommander(team, oldCmd, newCmd):
    trace = PRTrace('kits: onChangedCommander()')
    if newCmd:
        checkSelectedKit(newCmd)
    
    if oldCmd:
        checkSelectedKit(oldCmd)
		
			
def onPlayerConnect(player):
    trace = PRTrace('kits: onPlayerConnect()')
    cached = getPlayerByIndex(player.index)
	
def onPlayerSpawn(player, soldier):
    trace = PRTrace('kits: onPlayerSpawn()')
    if player.isAIPlayer():
        return None
    
    modifySpawn(player)
    times = True
    if player.selectedKit in unlimitedKits:
        times = False
    
    addKitAllocation(player, player.selectedKit, times)
def onKitSelected(player, cmd, args):
    trace = PRTrace('kits: onKitSelected()')
    if not player.isValid() or player.isAIPlayer():
        return None
    
    
    try:
        slot = int(args[0].strip())
    except:
        return None
    team = player.getTeam()
    squad = player.getSquadId()
    inherit = False
    kit = getKitSlot(team, slot)
    if isKitReservedByPlayer(team, squad, player.selectedKit, player):
        removeKitReservations(player)
        inherit = copy(player.selectedKit)
    
    player.selectedKit = kit
    checkSelectedKit(player)
    if inherit:
        checkSelectedKitSquad(team, squad, inherit, player)
def onKitInit(player, cmd, args):
    trace = PRTrace('kits: onKitInit()')
    team = int(args[0])
    kitIndex = int(args[1])
    if g_kits_slots[team][kitIndex] is not None:
        return None
    
    kitSlot = KitSlot()
    kitSlot.Primary = args[2]
    kitSlot.Secondary = args[3]
    kitSlot.Soldier = args[4]
    if getGameMode() == 'vehicles':
        kitSlot.LimitationsEnabled = False
    else:
        kitSlot.LimitationsEnabled = True
    if kitSlot.Primary.find('_') != -1:
        kitSlot.Name = kitSlot.Primary.split('_')[1]
    
    g_kits_slots[team][kitIndex] = kitSlot
def onCustomKitSelect(player, cmd, args):
    trace = PRTrace('kits: onCustomKitSelect()')
    if not player.isValid() or player.isAIPlayer():
        return None
    
    team = player.getTeam()
    player.customSelection[team][int(args[0])] = int(args[1])
def modifySpawn(player):
    trace = PRTrace('kits: modifySpawn()')
    team = player.getTeam()
    for kitIndex in range(7):
        kit = g_kits_slots[team][kitIndex].Primary
        if player.customSelection[team][kitIndex] == 1:
            kit = g_kits_slots[team][kitIndex].Secondary
        
        soldier = g_kits_slots[team][kitIndex].Soldier
        if kit == 'empty':
            continue
        
        host.rcon_invoke('gameLogic.setKit %s %s %s %s' % (team, kitIndex, kit, soldier))

Но при запуске скрипта выдает ошибку RuntimeError: illegal event name

Это скрипт предназначен для игры Battlefield 2
WilliamThompson
Pokemon Infinite Fusion
vlad1213
Здравствуйте, помогите мне пожалуйста правильно расставить код Python.Есть уже готовый код, но мне нужна лишь часть этого кода.Мне нужно что бы работали вот эти строчки: host.registerHandler(“PlayerConnect”, onPlayerConnect, 1) host.registerHandler(“RemoteCommand”, onFilteredRemoteCommand, 1) host.registerHandler('PlayerSpawn', onPlayerSpawn) host.registerHandler('RemoteCommandSelectKit', onKitSelected) host.registerHandler('RemoteCommandCustomKit', onCustomKitSelect) host.registerHandler('RemoteCommandInitKit', onKitInit)
Здравствуйте, вы смогли это исправить?
#fdf5f5
kiwithrifty
WilliamThompson
Pokemon Infinite Fusion doodle baseball
Я думаю, что в этом коде нет ошибок, которые нужно исправлять. Вы столкнулись с какой-либо путаницей?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB