コード例 #1
0
 def loadArena(self):
     self.__interactiveMix.createArena()
     self.__voice = VoiceoversSoundObject()
     self.__hits = HitSFXFactory()
     self.__explosions = ExplosionSFXFactory()
     self.music.playArena()
     self.__prevTarget = None
     self.__winner = False
     self.__draw = False
     self.__prevTarget = None
     self.__burning = {}
     postGlobalEvent(GLOBAL_EVENTS.LOAD_ARENA)
     GameEnvironment.getClientArena(
     ).onGameResultChanged += self.__onGameResultChanged
     SoundUpdateManager.instance().start()
     return
コード例 #2
0
ファイル: GamePhases.py プロジェクト: SEA-group/wowp_scripts
    def __getFightPhase(self, flag=FLAG.NONE):
        if self.__currentSoundPhase in (
                SOUND_PHASES.RESULT_SCREEN,
                SOUND_PHASES.SCREEN) or self.__currentSoundPhase in (
                    SOUND_PHASES.SPECTATOR,
                    SOUND_PHASES.NOSEDIVING) and not flag == FLAG.RESPAWN:
            return
        phase = SOUND_PHASES.PILOTING
        player = BigWorld.player()
        visibleAvatars = player.visibleAvatars.values()
        if flag == FLAG.LEAVE_WORLD:
            enemiesCounter = 0
        for avatar in visibleAvatars:
            arena = GameEnvironment.getClientArena()
            isTeamate = arena.avatarInfos.get(player.id).get(
                'teamIndex',
                -1) == arena.avatarInfos.get(avatar.id).get('teamIndex', -1)
            if not isTeamate and not EntityStates.inState(
                    avatar, EntityStates.DESTROYED):
                if not flag == FLAG.LEAVE_WORLD or enemiesCounter:
                    phase = SOUND_PHASES.DOGFIGHT
                    break
                else:
                    enemiesCounter += 1

        return phase
コード例 #3
0
ファイル: TeamObject.py プロジェクト: SEA-group/wowp_scripts
 def _createControllers(self):
     controllersData = GameEnvironment.getClientArena(
     ).createTeamObjectControllers(self.id, self._settings, self,
                                   self.partTypes, self.partStates)
     modelManipulator = controllersData['modelManipulator']
     self._registerController('modelManipulator', modelManipulator)
     self.model = modelManipulator.getRootModel()
     self.model.delMotor(self.model.motors[0])
     self.model.addMotor(BigWorld.Servo(self.resMatrix))
     modelManipulator.setMatrixProvider(self.resMatrix)
     turretsLogic = controllersData.get('turretsLogic', None)
     if turretsLogic:
         turretsLogic.setOwner(self)
         self._registerController('turretsLogic', turretsLogic)
         self.ePartStateChanged += turretsLogic.onPartStateChanged
     if self.scenarioName != '':
         if not self.scenarioName.endswith(
                 '.xml') and not self.scenarioName.endswith('.plan'):
             scenarioData = db.DBLogic.g_instance.getScenario(
                 self.scenarioName)
             if scenarioData:
                 scenarioController = TeamObjectScenarioController(
                     self, scenarioData)
                 self._registerController('scenarioController',
                                          scenarioController)
             else:
                 LOG_ERROR("Can't find scenario", self.scenarioName)
     soundController = controllersData['soundController']
     self._registerController('soundController', soundController)
     return
コード例 #4
0
 def onPlayerLeaveWorld(self):
     gm = extractGameMode(BigWorld.player().gameMode)
     self.unloadArena()
     BigWorld.player().eUpdateSpectator -= self.__onSpectator
     gameMode = GameEnvironment.getClientArena().gameMode
     gameMode.unsubscribe(self.__gameModeEventDispatcher)
     self.__gameModeEventDispatcher.finish()
     self.__gameModeEventDispatcher = None
     return
コード例 #5
0
ファイル: GamePhases.py プロジェクト: SEA-group/wowp_scripts
 def __clearBattleEvents(self):
     player = BigWorld.player()
     arena = GameEnvironment.getClientArena()
     player.onStateChanged -= self.__onPlayerStateChanged
     player.eUpdateSpectator -= self.__onSpectator
     player.eArenaLoaded -= self.__onArenaLoaded
     player.eRespawn -= self.__onPlayerRespawn
     arena.onAvatarEnterWorld -= self.__onAvatarEnterWorld
     arena.onAvatarLeaveWorld -= self.__onAvatarLeaveWorld
コード例 #6
0
 def createTurret(self):
     arena = GameEnvironment.getClientArena()
     for obj in arena.allObjectsData.items():
         val = obj[1]
         if 'turretsLogic' not in val or 'soundController' not in val:
             continue
         if not hasattr(val['soundController'], 'soundObjects'):
             continue
         for so in val['soundController'].soundObjects.values():
             so.factory.createTurret(obj[0], so, val)
コード例 #7
0
 def onPlayerEnterWorld(self, *args, **kwargs):
     """Event handler for PlayerAvatar.eEnterWorldEvent
     """
     gameMode = GameEnvironment.getClientArena().gameMode
     if gameMode.isReady:
         self.onGameModeReady()
     else:
         gameMode.eGameModeReady += self.onGameModeReady
     self.__gameModeEventDispatcher = SoundEventDispatcher(gameMode)
     gameMode.subscribe(self.__gameModeEventDispatcher)
     self.camera.onPlayerEnterWorld()
コード例 #8
0
 def __showTextMessage(self,
                       senderID,
                       msgType,
                       messageStringID,
                       targetID,
                       message,
                       isHistory,
                       leaderType=-1,
                       isHTML=False):
     messageT = ChatMessageVO()
     messageT.msgType = msgType
     messageT.senderID = senderID
     messageT.message = message
     messageT.isHistory = isHistory
     messageT.leaderType = leaderType
     owner = BigWorld.player()
     clientArena = GameEnvironment.getClientArena()
     if owner and clientArena:
         avatarInfo = clientArena.getAvatarInfo(senderID)
         if avatarInfo:
             messageT.authorType = avatarInfo['settings'].airplane.planeType
             messageT.authorName = avatarInfo['playerName']
             messageT.vechicleName = localizeAirplane(
                 avatarInfo['settings'].airplane.name)
             if avatarInfo['classID'] == EntitySupportedClasses.AvatarBot:
                 messageT.authorName = messageT.authorName.replace(
                     '>', '&gt;').replace('<', '&lt;')
             messageT.authorClanAbbrev = avatarInfo['clanAbbrev']
             if avatarInfo['teamIndex'] == BigWorld.player().teamIndex:
                 squadType = SQUAD_TYPES().getSquadType(
                     SQUAD_TYPES().getSquadIDbyAvatarID(senderID), senderID)
                 if squadType == SQUAD_TYPES.OWN:
                     messageT.teamType = TEAM_TYPE.BATTLE_SQUAD
                 else:
                     messageT.teamType = TEAM_TYPE.BATTLE_ALLY
             else:
                 messageT.teamType = TEAM_TYPE.BATTLE_OPPONENT
         else:
             LOG_DEBUG('showTextMessage - avatarInfo is None', senderID,
                       msgType, messageStringID, targetID, message,
                       isHistory, leaderType)
         messageT.isOwner = messageT.senderID == owner.id
         if messageT.isOwner:
             messageT.authorName = localizeHUD('HUD_YOU_MESSAGE')
             messageT.authorClanAbbrev = ''
         if messageT.message and not isHTML:
             messageT.message = messageT.message.replace('>',
                                                         '&gt;').replace(
                                                             '<', '&lt;')
             if messageT.senderID == self.__lastMessage.senderID and messageT.msgType == self.__lastMessage.msgType and messageT.message == self.__lastMessage.message and messageT.time - self.__lastMessage.time < MESSAGE_SAME_COOLDOWN:
                 return
             self.__addChatMessage(messageT)
             self.__lastMessage = messageT
コード例 #9
0
 def getLocalizedMessage(self, messageStringID, targetID=0):
     """
     @param : int messageStringID, int targetID
     @return: localization text
     """
     if messageStringID not in self.__localize:
         return 'ERROR LOCALIZE MESSAGE'
     elif targetID != 0 and messageStringID in [
             ChatMessagesStringID.JOIN_ME, ChatMessagesStringID.ENEMY_MY_AIM
     ]:
         objectType = GameEnvironment.getClientArena().getTeamObjectType(
             targetID)
         if objectType is not None and objectType in OBJECTS_INFO:
             objectName = localizeHUD(OBJECTS_INFO[objectType]['LOC_ID'])
         else:
             objectName = GameEnvironment.getClientArena().getObjectName(
                 targetID)
         return localizeHUD(
             self.__localize[messageStringID]).format(player=objectName)
     else:
         return localizeHUD(self.__localize[messageStringID])
         return
コード例 #10
0
 def refreshClanEmblem(self):
     if self.__surfaceTextures is not None:
         if not consts.IS_EDITOR and clientConsts.ENABLE_PLANE_CLAN_EMBLEM:
             import BWPersonality
             env = GameEnvironment.getClientArena()
             allowBGLoading = False if env and env.isLoaded() else True
             if env:
                 avatarInfo = env.getAvatarInfo(self.__context.entityId)
                 clanDBID = avatarInfo.get('clanDBID')
                 if clanDBID and int(clanDBID) > 0:
                     ClanEmblemsCache.g_clanEmblemsCache.get(clanDBID, self.__updateClanEmblemClbk, not allowBGLoading)
             elif int(BWPersonality.g_initPlayerInfo.clanDBID) > 0:
                 ClanEmblemsCache.g_clanEmblemsCache.get(BWPersonality.g_initPlayerInfo.clanDBID, self.__updateClanEmblemClbk, not allowBGLoading)
     return
コード例 #11
0
    def setUsersChatStatus(self, usersList):
        playersList = []
        clientArena = GameEnvironment.getClientArena()
        for userStatus in usersList:
            playerID = clientArena.getAvatarIdByDBId(int(userStatus[0]))
            if playerID is not None:
                playersList.append((playerID, userStatus[1]))
            else:
                LOG_ERROR(
                    'setUsersChatStatus: can not get playerID by dbid(%s)' %
                    userStatus[0])

        self.__setPlayersChatStatus(playersList)
        return
コード例 #12
0
 def createAvatar(self, avatar, so):
     if so.wwiseGameObject:
         return
     shootEvent = TurretSound.getShootEventName(False, False, False,
                                                so.soundSet)
     arena = GameEnvironment.getClientArena()
     avatarInfo = arena.avatarInfos.get(avatar.id, {})
     turrets = avatarInfo.get('turretsLogic')
     if turrets and shootEvent:
         so.wwiseGameObject = TurretSound(avatar.id,
                                          so.context.cidProxy.handle,
                                          so.node.id, so.weaponID,
                                          shootEvent, False, True)
         turrets.linkSound(so.turretID, so.wwiseGameObject)
コード例 #13
0
ファイル: WeaponSound.py プロジェクト: SEA-group/wowp_scripts
 def createAvatar(self, avatar, so):
     if so.wwiseGameObject:
         return
     shootEvent = WeaponSound.getShootEventName(False, False, False,
                                                so.soundSet)
     if shootEvent:
         so.wwiseGameObject = WeaponSound(avatar.id,
                                          so.context.cidProxy.handle,
                                          so.node.id, so.weaponID,
                                          shootEvent)
         arena = GameEnvironment.getClientArena()
         avatarInfo = arena.avatarInfos.get(avatar.id, {})
         weapons = avatarInfo.get('weapons')
         weapons.linkSound(so.weaponID, so.wwiseGameObject)
コード例 #14
0
ファイル: Voiceover.py プロジェクト: SEA-group/wowp_scripts
 def __init__(self):
     WwiseGameObject.__init__(self, 'Voiceover')
     self.__soundBanksManager = SoundBanksManager.instance()
     self.__playNow = None
     self.__isLock = False
     self.__queue = VoiceoversQueue(VOICEOVERS_QUEUE_SIZE - 1)
     self.__clientArena = GameEnvironment.getClientArena()
     self.__gameModeIndex = self.__clientArena.gameModeEnum - GAME_MODE.AREA_CONQUEST
     self.__player = BigWorld.player()
     self.__initVoiceovers()
     self.load()
     self.__initAdditionalDataForEvents()
     self.__registerEvents()
     self.__ignoreWhenLock = [VOICE.TEAM_WIN, VOICE.TEAM_LOSE]
     return
コード例 #15
0
ファイル: UIHelper.py プロジェクト: SEA-group/wowp_scripts
 def getSquadType(squadNumber, avatarID):
     if not squadNumber:
         return SQUAD_TYPES.WITHOUT_SQUAD
     owner = BigWorld.player()
     if avatarID == owner.id:
         return SQUAD_TYPES.OWN
     clientArena = GameEnvironment.getClientArena()
     ownerInfo = clientArena.getAvatarInfo(owner.id)
     avatarInfo = clientArena.getAvatarInfo(avatarID)
     if ownerInfo is not None and avatarInfo is not None:
         if owner.teamIndex == avatarInfo['teamIndex'] and ownerInfo['squadID'] == squadNumber:
             return SQUAD_TYPES.OWN
         return SQUAD_TYPES.OTHER
     else:
         return
コード例 #16
0
ファイル: WindSound.py プロジェクト: SEA-group/wowp_scripts
 def createAvatar(self, avatar, so):
     soundController = avatar.controllers.get('soundController', None)
     if soundController and SOUND_OBJECT_TYPES.WIND not in soundController.soundModeHandlers:
         arena = GameEnvironment.getClientArena()
         avatarInfo = arena.avatarInfos.get(avatar.id, {})
         playerTeam = arena.avatarInfos.get(BigWorld.player().id).get(
             'teamIndex', None)
         avatarTeam = avatarInfo.get('teamIndex', None)
         isPlayerTeamate = playerTeam is not None and playerTeam == avatarTeam
         if isPlayerTeamate:
             soundController.soundModeHandlers[
                 SOUND_OBJECT_TYPES.WIND] = SoundModeHandler(
                     avatar.id, so, self.__soundStrategies,
                     SOUND_MODES.AVATAR)
     return
コード例 #17
0
 def __init__(self):
     self._eventManager = EventManager()
     self.eInitConsumables = Event(self._eventManager)
     self.eUpdateConsumables = Event(self._eventManager)
     self.eUpdateConsumableStatus = Event(self._eventManager)
     self.__update1secCallBack = -1
     self._playerAvatar = GameEnvironment.g_instance.playerAvatarProxy
     self._clientArena = GameEnvironment.getClientArena()
     self._modulesDict = {}
     self._isFire = False
     from db.DBLogic import g_instance as db
     self._db = db
     self._clientArena.onNewAvatarsInfo += self._onSetupManager
     self._isArenaReady = False
     if self._clientArena.isAllServerDataReceived():
         self._onSetupManager(None)
     return
コード例 #18
0
 def __init__(self, gameMode):
     self._gameMode = gameMode
     self._clientArena = GameEnvironment.getClientArena()
     self._eManager = EventManager()
     self.eUpdateLastPlayer = Event(self._eManager)
     self.__disableRespawns = False
     self.__lastPlayerReported = False
     self.__lastEnemyReported = False
     self.__loadingBarrier = ConditionsBarrier(LOADING_CONDITION.ALL, self.__onLoadAllData)
     if self._gameMode.isReady:
         self.__onGameModeReady()
     else:
         self._gameMode.eGameModeReady += self.__onGameModeReady
     if self._clientArena.isAllServerDataReceived():
         self.__onAvatarInfo(None)
     else:
         self._clientArena.onNewAvatarsInfo += self.__onAvatarInfo
     return
コード例 #19
0
def getTerrainPointAndMaterial(spaceID, position):
    waterLevel = GameEnvironment.getClientArena().getWaterLevel()
    res = Math.Vector3(position)
    materialName = None
    heightCollide = BigWorld.hm_collideSimple(
        spaceID, position + Math.Vector3(0, 1500, 0),
        position - Math.Vector3(0, 1500, 0))
    if heightCollide is not None:
        try:
            materialName = db.DBLogic.g_instance.getMaterialName(
                heightCollide[1])
        except:
            pass

        res = heightCollide[0]
    if res.y < waterLevel:
        res.y = waterLevel
    return (res, materialName)
コード例 #20
0
 def __onGameResultChanged(self, gameResult, winState):
     winResults = [
         GAME_RESULT.SUPERIORITY_SUCCESS, GAME_RESULT.ELIMINATION,
         GAME_RESULT.AREA_CONQUEST_SUCCESS, GAME_RESULT.CAPTURE_ALL_SECTORS,
         GAME_RESULT.MAIN_TIME_RUNNING_OUT,
         GAME_RESULT.DYNAMIC_TIME_RUNNING_OUT, GAME_RESULT.ATTRITION_SUCCESS
     ]
     self.__winner = gameResult in winResults and BigWorld.player(
     ).teamIndex == winState
     self.__draw = gameResult in [
         GAME_RESULT.DRAW_ELIMINATION,
         GAME_RESULT.DRAW_ELIMINATION_NO_PLAYERS,
         GAME_RESULT.DRAW_SUPERIORITY, GAME_RESULT.DRAW_TIME_IS_RUNNING_OUT,
         GAME_RESULT.DRAW_AREA_CONQUEST,
         GAME_RESULT.DYNAMIC_TIME_RUNNING_OUT, GAME_RESULT.ATTRITION_DRAW,
         GAME_RESULT.ATTRITION_TIME_RUNNING_OUT
     ]
     battleType = GameEnvironment.getClientArena().battleType
     if battleType == ARENA_TYPE.TRAINING:
         self.onBattleEnd(False)
コード例 #21
0
 def _checkLoadingTime(self):
     arena = GameEnvironment.getClientArena()
     if arena is None:
         return
     else:
         vehiclesLoadStatusInfo = arena.vehiclesLoadStatus()
         vehiclesLoadStatus = 1.0
         if vehiclesLoadStatusInfo[1] > 0:
             vehiclesLoadStatus = float(
                 vehiclesLoadStatusInfo[0]) / vehiclesLoadStatusInfo[1]
         spaceLoadStatus = BigWorld.spaceLoadStatus()
         loadLevel = int(50 * (spaceLoadStatus + vehiclesLoadStatus))
         if loadLevel >= 100.0:
             self._playerAvatar.onArenaLoaded()
             self._playerCallback = None
         else:
             GameEnvironment.g_instance.eLoadingProgress(loadLevel)
             self._playerCallback = BigWorld.callback(
                 0.5, self._checkLoadingTime)
         return
コード例 #22
0
def getDistancesForPlayer(playerAvatar, battleMode):
    global VERY_FAR_DISTANCE_BY_LEVEL
    global AIM_DISTANCE_BY_PLANE_TYPE_BY_LEVEL
    clientArena = GameEnvironment.getClientArena()
    avatarInfo = clientArena.getAvatarInfo(playerAvatar.id)
    if avatarInfo is None:
        return
    else:
        settings = avatarInfo['settings']
        effectiveShootingDistance = _getGunnerShootingDistance(
            playerAvatar
        ) if battleMode == BATTLE_MODE.GUNNER_MODE else _getMainArmamentShootingDistance(
            playerAvatar)
        planeLevel = settings.airplane.level
        planeType = settings.airplane.planeType
        aimDistance = AIM_DISTANCE_BY_PLANE_TYPE_BY_LEVEL[planeType][
            planeLevel]
        veryFarDistance = VERY_FAR_DISTANCE_BY_LEVEL[planeLevel]
        return (('Shooting', effectiveShootingDistance),
                ('Aiming', aimDistance), ('Far', veryFarDistance))
コード例 #23
0
 def showBattleMessageReactionResult(self, battleMessageType, isPositive,
                                     senderID, callerID, targetID):
     ownerID = BigWorld.player().id
     doShowChatMessage = ownerID == callerID
     reactionType = BattleMessageReactionHelper.BATTLE_MESSAGE_TYPE_RESULT_MAP_POSITIVE.get(
         battleMessageType,
         None) if isPositive else BATTLE_MESSAGE_TYPE.FAILURE
     if not doShowChatMessage:
         return
     else:
         arena = GameEnvironment.getClientArena()
         senderName, callerName, targetName = arena.getObjectName(
             senderID), arena.getObjectName(callerID), arena.getObjectName(
                 targetID)
         textMessage = MessagesID().getLocalizedMessage(
             reactionType, targetID
         ) if BattleMessageReactionHelper.USE_STANDARD_MESSAGE_TEXT else BattleMessageReactionHelper.LocalizeBattleMessageReaction(
             battleMessageType, isPositive, senderName, callerName,
             targetName)
         if BattleMessageReactionHelper.USE_COLORS:
             htmlText = textMessage.replace('>', '&gt;')
             htmlText = htmlText.replace('<', '&lt;')
             isColorBlind = Settings.g_instance.getGameUI(
             )['alternativeColorMode']
             if isColorBlind:
                 colorCode = BattleMessageReactionHelper.POSITIVE_REACTION_COLOR_ALT if isPositive else BattleMessageReactionHelper.NEGATIVE_REACTION_COLOR_ALT
             else:
                 colorCode = BattleMessageReactionHelper.POSITIVE_REACTION_COLOR if isPositive else BattleMessageReactionHelper.NEGATIVE_REACTION_COLOR
             htmlText = '<font color="{}">{}</font>'.format(
                 colorCode, htmlText)
             self.__showTextMessage(senderID,
                                    MESSAGE_TYPE.BATTLE_ALLY,
                                    0,
                                    callerID,
                                    htmlText,
                                    False,
                                    isHTML=True)
             return
         self.__showTextMessage(senderID, MESSAGE_TYPE.BATTLE_ALLY, 0,
                                callerID, textMessage, False)
         return
コード例 #24
0
 def updateTemporaryVisibleObjectData(self, objectUpdatableData,
                                      objectClassID, objectTeamIndex,
                                      modelID):
     """
     add new object info or update it.
     Used for objects which could not be visible because of Bigworld issue
     
     @param objectUpdatableData:
     @type objectUpdatableData: ["id", "position", "angle", "isVisible"]
     @param objectClassID: EntitySupportedClasses const
     @type objectClassID: int
     @param objectTeamIndex: 0 or 1
     @type objectTeamIndex: int
     @param modelID: object ID to get it settings
     @type modelID: int
     """
     arenaData = GameEnvironment.getClientArena().arenaData
     iD, positionPacked, yawPacked, alive = objectUpdatableData
     position = unpackPositionFrom3DTuple(positionPacked,
                                          arenaData['bounds'])
     mapEntry = self.__list.get(iD, None)
     if not mapEntry:
         mapEntry = MapEntry(iD, objectClassID, objectTeamIndex, position,
                             alive, modelID)
         self.__list[iD] = mapEntry
         if BigWorld.entities.has_key(iD):
             mapEntry.isClientInAOI = True
             BigWorld.entities[iD].onMapEntryCreated(mapEntry)
     else:
         mapEntry.isAlive = alive
         mapEntry.isClientInAOI = BigWorld.entities.has_key(iD)
     if mapEntry.isAlive:
         yaw = unpackAngleFromByte(yawPacked)
         mapEntry.setPositionAndYaw(Math.Vector3(position), yaw)
     if mapEntry.isObjectChanged:
         self.__updateObjectVisibility(mapEntry)
         mapEntry.resetMarksOfChanges()
     return
コード例 #25
0
 def onReceiveMarkerMessage(self, senderID, posX, posZ, messageStringID,
                            isHistory):
     if self.__arenaBounds is None:
         arena = GameEnvironment.getClientArena()
         self.__arenaBounds = self._makeBoundsObject(arena.getArenaBounds())
     percentX = 100 * (posX - self.__arenaBounds.get('left')) / (
         self.__arenaBounds.get('right') - self.__arenaBounds.get('left'))
     percentY = 100 * (
         1 - (posZ - self.__arenaBounds.get('top')) /
         (self.__arenaBounds.get('bottom') - self.__arenaBounds.get('top')))
     zoneSymbol = self.__zoneSymbols[self.getZoneIndex(percentY)]
     zoneNumber = 1 + self.getZoneIndex(percentX)
     message = localizeHUD(
         self.MARKER_MESSAGES_LOC_IDS[messageStringID]).format(
             grid_square=zoneSymbol + str(zoneNumber))
     messageType = MESSAGE_TYPE.BATTLE_ALLY
     if senderID != BigWorld.player().id:
         squadType = SQUAD_TYPES().getSquadType(
             SQUAD_TYPES().getSquadIDbyAvatarID(senderID), senderID)
         if squadType == SQUAD_TYPES.OWN:
             messageType = MESSAGE_TYPE.BATTLE_SQUAD
     self.__showTextMessage(senderID, messageType, 0, 0, message, isHistory)
     return
コード例 #26
0
ファイル: hudFeatures.py プロジェクト: SEA-group/wowp_scripts
def buildHudFeatures(gameModel, features, stateManager):
    import BigWorld
    import GameEnvironment
    import Settings
    import audio
    import db.DBLogic
    import BattleReplay
    import _airplanesConfigurations_db
    features.provide(Feature.BIG_WORLD, BigWorld)
    features.provide(Feature.UI_SOUND, audio.GameSound().ui)
    features.provide(Feature.DB_LOGIC, db.DBLogic.g_instance)
    gameEnvironment = GameEnvironment.g_instance
    features.provide(Feature.GAME_ENVIRONMENT, gameEnvironment)
    features.provide(Feature.INPUT, gameEnvironment.service(Feature.INPUT))
    features.provide(Feature.CAMERA, gameEnvironment.service(Feature.CAMERA))
    features.provide(Feature.GAME_PLAY_HINTS,
                     gameEnvironment.service(Feature.GAME_PLAY_HINTS))
    features.provide(Feature.CLIENT_ARENA, GameEnvironment.getClientArena())
    features.provide(Feature.PLAYER_AVATAR,
                     GameEnvironment.g_instance.playerAvatarProxy)
    features.provide(Feature.REAL_PLAYER_AVATAR, BigWorld.player())
    features.provide(Feature.TIMER_SERVICE,
                     GameEnvironment.g_instance.getTimer())
    features.provide(Feature.CLIENT_ECONOMICS,
                     GameEnvironment.getClientEconomics())
    features.provide(Feature.MEASUREMENT_SYSTEM, MeasurementSystem())
    features.provide(Feature.PREPARED_BATTLE_DATA, preparedBattleData)
    features.provide(Feature.PLANES_CONFIGURATIONS_DB,
                     _airplanesConfigurations_db)
    features.provide(Feature.GAME_MODEL, gameModel)
    features.provide(Feature.UI_SETTINGS, Settings.g_instance)
    features.provide(Feature.STATE_MANAGER, stateManager)
    features.provide(Feature.XMPP_CHAT, messenger.g_xmppChatHandler)
    features.provide(Feature.BATTLE_REPLAY, BattleReplay.g_replay)
    features.provide(Feature.BATTLE_HINTS,
                     GameEnvironment.getBattleHintMessenger())
    features.provide(Feature.CONSUMABLES_MANAGER, ConsumableManager())
コード例 #27
0
ファイル: UIHelper.py プロジェクト: SEA-group/wowp_scripts
 def getSquadIDbyAvatarID(avatarID):
     avatarInfo = GameEnvironment.getClientArena().getAvatarInfo(avatarID)
     if avatarInfo is not None and 'squadID' in avatarInfo:
         return avatarInfo['squadID']
     else:
         return 0
コード例 #28
0
 def onLeaveWorld(self):
     proxy = GameEnvironment.getClientArena().gameActionsManager
     proxy.onManagerLeaveWorld(self)
     self._eManager.clear()
     self.logger.info('Left world, id = {0}'.format(self.id))
コード例 #29
0
 def onEnterWorld(self, prereqs):
     proxy = GameEnvironment.getClientArena().gameActionsManager
     proxy.onManagerEnterWorld(self)
     self._processWavesUpdate()
     self.logger.info('Entered world, id = {0}'.format(self.id))
コード例 #30
0
    def ballisticShot(actionData, environmentData):
        def getStartPos(environmentData, modelManipulator):
            objPos = environmentData.destructableObject.position
            if (BigWorld.camera().position -
                    objPos).length > TEAMOBJECT_SIMPLIFICATION_DISTANCE:
                startPos = objPos
            else:
                startPos = modelManipulator.getEffectCoordinate(
                    actionData.trigger)
                if startPos is None or (
                        startPos -
                        objPos).length > TEAMOBJECT_SIMPLIFICATION_FILTER:
                    startPos = objPos
            return startPos

        def launchUpdatable(actionData, environmentData, startPos, endPos,
                            startVector, effect):
            import updatable.UpdatableManager
            if updatable.UpdatableManager.g_instance and not environmentData.destructableObject.isDestroyed:
                modelManipulator = environmentData.destructableObject.controllers[
                    'modelManipulator']
                modelManipulator.setEffectVisible(actionData.trigger, True)
                updatable.UpdatableManager.g_instance.createUpdatableLocal(
                    UPDATABLE_TYPE.BALLISTIC, actionData.profile, startPos,
                    startVector, startVector, endPos, actionData.height,
                    effect)

        def delayedLaunchUpdatable(actionData, environmentData, endPos,
                                   effect):
            if not environmentData.destructableObject.isDestroyed:
                modelManipulator = environmentData.destructableObject.controllers[
                    'modelManipulator']
                startPos = getStartPos(environmentData, modelManipulator)
                startVector = endPos - startPos
                startVector.normalise()
                import updatable.UpdatableManager
                if updatable.UpdatableManager.g_instance:
                    modelManipulator.setEffectVisible(actionData.trigger, True)
                    updatable.UpdatableManager.g_instance.createUpdatableLocal(
                        UPDATABLE_TYPE.BALLISTIC, actionData.profile, startPos,
                        startVector, startVector, endPos, actionData.height,
                        effect)

        profile = db.DBLogic.g_instance.getScenarioShotBallisticProfile(
            actionData.profile)
        if profile:
            endPos = None
            if hasattr(actionData, 'targetName'):
                target = GameEnvironment.getClientArena(
                ).getScenarioObjectByDSName(actionData.targetName)
                if target:
                    movementStrategy = target[0].get('movementStrategy')
                    if movementStrategy and movementStrategy.matrixProvider:
                        m = Math.Matrix(movementStrategy.matrixProvider)
                        endPos = m.translation
                    else:
                        targetEntity = BigWorld.entities.get(target[2])
                        if targetEntity:
                            endPos = targetEntity.position
                        else:
                            endPos = target[1]['matrix'].applyToOrigin()
                else:
                    LOG_ERROR(
                        'ClientScenarioActions: Wrong targetName in ballisticShot:',
                        actionData.targetName)
            elif hasattr(actionData, 'position'):
                endPos = actionData.position
            if endPos:
                modelManipulator = environmentData.destructableObject.controllers[
                    'modelManipulator']
                modelManipulator.setEffectVisible(actionData.trigger, False)
                endPos, material = getTerrainPointAndMaterial(
                    environmentData.destructableObject.spaceID,
                    applyRadius(endPos, actionData))
                effect = actionData.effectName if hasattr(
                    actionData,
                    'effectName') else profile.explosionParticles.__dict__.get(
                        material, profile.explosionParticles.default)
                startPos = getStartPos(environmentData, modelManipulator)
                startVector = endPos - startPos
                startVector.normalise()
                scenarioGunner = Dummy()
                scenarioGunner.yaw = startVector.yaw - environmentData.destructableObject.yaw
                scenarioGunner.pitch = math.radians(actionData.height)
                modelManipulator.setAxisValue(
                    TURRET_TRACKER_AXIS, {actionData.trigger: scenarioGunner})
                BigWorld.callback(
                    0.5,
                    partial(delayedLaunchUpdatable, actionData,
                            environmentData, endPos, effect))
        return