def __init__(self, account = None): self.__account = account self.__eManager = Event.EventManager() self.onSortieChanged = Event.Event(self.__eManager) self.onSortieRemoved = Event.Event(self.__eManager) self.onSortieUnitReceived = Event.Event(self.__eManager) self.onFortBattleChanged = Event.Event(self.__eManager) self.onFortBattleRemoved = Event.Event(self.__eManager) self.onFortBattleUnitReceived = Event.Event(self.__eManager) self.onResponseReceived = Event.Event(self.__eManager) self.onBuildingChanged = Event.Event(self.__eManager) self.onTransport = Event.Event(self.__eManager) self.onDirectionOpened = Event.Event(self.__eManager) self.onDirectionClosed = Event.Event(self.__eManager) self.onDirectionLockChanged = Event.Event(self.__eManager) self.onStateChanged = Event.Event(self.__eManager) self.onOrderChanged = Event.Event(self.__eManager) self.onDossierChanged = Event.Event(self.__eManager) self.onPlayerAttached = Event.Event(self.__eManager) self.onSettingCooldown = Event.Event(self.__eManager) self.onPeripheryChanged = Event.Event(self.__eManager) self.onDefenceHourChanged = Event.Event(self.__eManager) self.onDefenceHourActivated = Event.Event(self.__eManager) self.onOffDayChanged = Event.Event(self.__eManager) self.onVacationChanged = Event.Event(self.__eManager) self.onEnemyClanCardReceived = Event.Event(self.__eManager) self.onFavoritesChanged = Event.Event(self.__eManager) self.onDefenceHourShutdown = Event.Event(self.__eManager) self.onShutdownDowngrade = Event.Event(self.__eManager) self.onEmergencyRestore = Event.Event(self.__eManager) self.onEnemyStateChanged = Event.Event(self.__eManager) self.onConsumablesChanged = Event.Event(self.__eManager) self.__battlesMapping = {} FortifiedRegionBase.__init__(self)
def _setBuildingResource(self, buildingTypeID, resCount): reason = BUILDING_UPDATE_REASON.UPDATED previousState = self.getBuilding(buildingTypeID) FortifiedRegionBase._setBuildingResource(self, buildingTypeID, resCount) newState = self.getBuilding(buildingTypeID) if previousState.level == 0 and newState.level > 0: reason = BUILDING_UPDATE_REASON.COMPLETED self.onBuildingChanged(buildingTypeID, reason)
def _contribute(self, accDBID, buildingTypeID, resCount, dateStamp): reason = BUILDING_UPDATE_REASON.UPDATED previousState = self.getBuilding(buildingTypeID) FortifiedRegionBase._contribute(self, accDBID, buildingTypeID, resCount, dateStamp) newState = self.getBuilding(buildingTypeID) if previousState.level == 0 and newState.level > 0: reason = BUILDING_UPDATE_REASON.COMPLETED self.onBuildingChanged(buildingTypeID, reason)
def _delBuilding(self, buildingTypeID): building = self.getBuilding(buildingTypeID) ressignPlayer = BigWorld.player().databaseID in self.getBuilding(buildingTypeID).attachedPlayers FortifiedRegionBase._delBuilding(self, buildingTypeID) self.onBuildingChanged(buildingTypeID, BUILDING_UPDATE_REASON.DELETED, {'dir': building.direction, 'pos': building.position}) if ressignPlayer: self.onPlayerAttached(FORT_BUILDING_TYPE.MILITARY_BASE)
def _updateOrders(self, orderTypeID, buildingTypeID, newLevel, newCount, resLeft): oldCount, oldLevel = self.orders.get(orderTypeID, (0, newLevel)) FortifiedRegionBase._updateOrders(self, orderTypeID, buildingTypeID, newLevel, newCount, resLeft) if newCount > oldCount and newLevel == oldLevel: self.onOrderChanged(orderTypeID, ORDER_UPDATE_REASON.ADDED) elif newCount < oldCount and newLevel == oldLevel: self.onOrderChanged(orderTypeID, ORDER_UPDATE_REASON.DELETED) else: self.onOrderChanged(orderTypeID, ORDER_UPDATE_REASON.UPDATED)
def _transport(self, fromBuildTypeID, toBuildTypeID, resCount, timeCooldown): reason = BUILDING_UPDATE_REASON.UPDATED previousState = self.getBuilding(toBuildTypeID) FortifiedRegionBase._transport(self, fromBuildTypeID, toBuildTypeID, resCount, timeCooldown) newState = self.getBuilding(toBuildTypeID) self.onBuildingChanged(fromBuildTypeID, BUILDING_UPDATE_REASON.UPDATED) if previousState.level == 0 and newState.level > 0: reason = BUILDING_UPDATE_REASON.COMPLETED self.onBuildingChanged(toBuildTypeID, reason) self.onTransport()
def _unpackFortBattleUnit(self, unpacking): result = FortifiedRegionBase._unpackFortBattleUnit(self, unpacking) try: (battleID,) = struct.unpack_from(self.FORMAT_FORT_BATTLE_UNIT_HEADER, unpacking) self.onFortBattleUnitReceived(battleID) except struct.error as e: LOG_ERROR(e) return result
def _unpackSortieUnit(self, unpacking): result = FortifiedRegionBase._unpackSortieUnit(self, unpacking) try: (unitMgrID, peripheryID,) = struct.unpack_from(UNIT_MGR_ID_CHR, unpacking) self.onSortieUnitReceived(unitMgrID, peripheryID) except struct.error as e: LOG_ERROR(e) return result
def _expireEvent(self, eventTypeID, value): buildingTypeID = eventTypeID - FORT_EVENT_TYPE.PRODUCT_ORDERS_BASE orderTypeID = 0 orderCount = 0 isOrder = buildingTypeID in FORT_BUILDING_TYPE_NAMES if isOrder: building = self.getBuilding(buildingTypeID) orderTypeID = self.getBuildingOrder(buildingTypeID) orderCount = building.orderInProduction.get('count') FortifiedRegionBase._expireEvent(self, eventTypeID, value) if isOrder: self.onOrderReady(orderTypeID, orderCount) elif eventTypeID == FORT_EVENT_TYPE.DEFENCE_HOUR_CHANGE: self.onDefenceHourChanged(value) elif eventTypeID == FORT_EVENT_TYPE.OFF_DAY_CHANGE: self.onOffDayChanged(value) elif eventTypeID in (FORT_EVENT_TYPE.PERIPHERY_COOLDOWN, FORT_EVENT_TYPE.DEFENCE_HOUR_COOLDOWN, FORT_EVENT_TYPE.OFF_DAY_COOLDOWN, FORT_EVENT_TYPE.VACATION_COOLDOWN): self.onSettingCooldown(eventTypeID)
def _expireEvent(self, eventTypeID, value): buildingTypeID = eventTypeID - FORT_EVENT_TYPE.PRODUCT_ORDERS_BASE orderTypeID = 0 isOrderReady = buildingTypeID in FORT_BUILDING_TYPE_NAMES expireOrderTypeID = eventTypeID - FORT_EVENT_TYPE.ACTIVE_ORDERS_BASE isOrderExpire = expireOrderTypeID in FORT_ORDER_TYPE.ALL if isOrderReady: orderTypeID = self.getBuildingOrder(buildingTypeID) FortifiedRegionBase._expireEvent(self, eventTypeID, value) if isOrderReady: self.onOrderChanged(orderTypeID, ORDER_UPDATE_REASON.ADDED) elif isOrderExpire: self.onOrderChanged(expireOrderTypeID, ORDER_UPDATE_REASON.EXPIRED) elif eventTypeID == FORT_EVENT_TYPE.DEFENCE_HOUR_CHANGE: self.onDefenceHourChanged(value) elif eventTypeID == FORT_EVENT_TYPE.OFF_DAY_CHANGE: self.onOffDayChanged(value) elif eventTypeID in (FORT_EVENT_TYPE.PERIPHERY_COOLDOWN, FORT_EVENT_TYPE.DEFENCE_HOUR_COOLDOWN, FORT_EVENT_TYPE.OFF_DAY_COOLDOWN, FORT_EVENT_TYPE.VACATION_COOLDOWN): self.onSettingCooldown(eventTypeID)
def _changeOffDay(self, offDay, timeActivation, timeCooldown, initiatorDBID): FortifiedRegionBase._changeOffDay(self, offDay, timeActivation, timeCooldown, initiatorDBID) self.onOffDayChanged(offDay)
def _activateDefHour(self, value, initiatorDBID = 0): FortifiedRegionBase._activateDefHour(self, value, initiatorDBID) self.onDefenceHourActivated(value, initiatorDBID)
def _changeDefHour(self, newValue, timeActivation, timeCooldown, initiatorDBID): FortifiedRegionBase._changeDefHour(self, newValue, timeActivation, timeCooldown, initiatorDBID) self.onDefenceHourChanged(newValue)
def _cancelEvent(self, eventTypeID): FortifiedRegionBase._cancelEvent(self, eventTypeID) if eventTypeID == FORT_EVENT_TYPE.DEFENCE_HOUR_SHUTDOWN: self.onDefenceHourShutdown()
def _changePeriphery(self, peripheryID, timeCooldown): FortifiedRegionBase._changePeriphery(self, peripheryID, timeCooldown) self.onPeripheryChanged(peripheryID)
def _setFortBattleBuildnum(self, battleID, packBuildsNum, roundStart = 0): FortifiedRegionBase._setFortBattleBuildnum(self, battleID, packBuildsNum, roundStart) self.__updateBattlesMapping() self.onFortBattleChanged(battleID)
def _processRequest(self, reqID, callerDBID): FortifiedRegionBase._processRequest(self, reqID, callerDBID) self.onResponseReceived(reqID, callerDBID)
def _replaceConsumables(self, unitMgrID, peripheryID, timeExpire, prebattleType, oldRev, newRev, consumables): FortifiedRegionBase._replaceConsumables(self, unitMgrID, peripheryID, timeExpire, prebattleType, oldRev, newRev, consumables) self.onConsumablesChanged(unitMgrID)
def _setSortie(self, unitMgrID, cmdrDBID, rosterTypeID, state, peripheryID, *args): result = FortifiedRegionBase._setSortie(self, unitMgrID, cmdrDBID, rosterTypeID, state, peripheryID, *args) self.onSortieChanged(unitMgrID, peripheryID) return result
def _setFortBattleRound(self, battleID, isBattleRound): FortifiedRegionBase._setFortBattleRound(self, battleID, isBattleRound) self.__updateBattlesMapping() self.onFortBattleChanged(battleID)
def _onDeleteBattle(self, key, args, reason, isDefence): battleID = args[FORT_ATK_IDX.BATTLE_ID] FortifiedRegionBase._onDeleteBattle(self, key, args, reason, isDefence) self.onFortBattleRemoved(battleID)
def _removeSortie(self, unitMgrID, peripheryID): FortifiedRegionBase._removeSortie(self, unitMgrID, peripheryID) self.onSortieRemoved(unitMgrID, peripheryID)
def _addFortBattle(self, battleID, direction, attackTime, attackerClanDBID, defenderClanDBID, canUseEquipments, division): FortifiedRegionBase._addFortBattle(self, battleID, direction, attackTime, attackerClanDBID, defenderClanDBID, canUseEquipments, division) self.__updateBattlesMapping() self.onFortBattleChanged(battleID)
def _removeFortBattle(self, battleID): FortifiedRegionBase._removeFortBattle(self, battleID) self.__updateBattlesMapping() self.onFortBattleRemoved(battleID)
def _changeVacation(self, timeVacationStart, timeVacationEnd, timeCooldown, initiatorDBID): FortifiedRegionBase._changeVacation(self, timeVacationStart, timeVacationEnd, timeCooldown, initiatorDBID) self.onVacationChanged(timeVacationStart, timeVacationEnd)
def _shutdownDowngrade(self): FortifiedRegionBase._shutdownDowngrade(self) self.onShutdownDowngrade()
def _setLockedDirMask(self, lockedDirMask): FortifiedRegionBase._setLockedDirMask(self, lockedDirMask) self.onDirectionLockChanged()
def _shutdownDefHour(self, timeActivation, initiatorDBID): FortifiedRegionBase._shutdownDefHour(self, timeActivation, initiatorDBID) self.onDefenceHourShutdown()
def _setEnemyReadyForBattle(self, battleID, isReady): FortifiedRegionBase._setEnemyReadyForBattle(self, battleID, isReady) self.onEnemyStateChanged(battleID, isReady)
def _addBuilding(self, buildingTypeID, dir, pos): FortifiedRegionBase._addBuilding(self, buildingTypeID, dir, pos) self.onBuildingChanged(buildingTypeID, BUILDING_UPDATE_REASON.ADDED, {'dir': dir, 'pos': pos})
def _addDefence(self, timeAttack, dirFrom, dirTo, attackerClanDBID, battleID, attackerFortLevel, defenderFortLevel, division, attackResult, attackResource, attackerClanAbbrev): FortifiedRegionBase._addDefence(self, timeAttack, dirFrom, dirTo, attackerClanDBID, battleID, attackerFortLevel, defenderFortLevel, division, attackResult, attackResource, attackerClanAbbrev) self.__updateBattlesMapping() self.onFortBattleChanged(battleID)
def _syncFortDossier(self, compDossierDescr): FortifiedRegionBase._syncFortDossier(self, compDossierDescr) self.onDossierChanged(compDossierDescr)
def _onEmergencyRestore(self, unpacking): self.onEmergencyRestore() return FortifiedRegionBase._onEmergencyRestore(self, unpacking)
def _attach(self, buildTypeID, accDBID): FortifiedRegionBase._attach(self, buildTypeID, accDBID) self.onPlayerAttached(buildTypeID)
def _deleteConsumables(self, unitMgrID, peripheryID): FortifiedRegionBase._deleteConsumables(self, unitMgrID, peripheryID) self.onConsumablesChanged(unitMgrID)
def _removeFavorite(self, clanDBID): FortifiedRegionBase._removeFavorite(self, clanDBID) self.onFavoritesChanged(clanDBID)