NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

insurgencyCampaignSvc.py (8869B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\services\insurgencyCampaignSvc.py
      2 import uthread2
      3 from caching import Memoize
      4 from characterdata import factions
      5 from localization import GetByLabel
      6 from player_messaging.client.ui_message import prompt_player_fsd_dialog
      7 if False:
      8     from typing import Optional, List
      9 from carbon.common.script.sys.service import Service
     10 from pirateinsurgency.campaignClientSnapshot import CampaignClientSnapshot
     11 from pirateinsurgency.const import CAMPAIGN_STATE_FORECASTING, CAMPAIGN_STATE_ACTIVE, CAMPAIGN_STATE_PIRATE_WIN, CAMPAIGN_STATE_ANTIPIRATE_WIN, CAMPAIGN_STATE_NO_WINNER
     12 from eve.common.script.util import notificationconst
     13 LOCAL_CAMPAIGN_UNKNOWN = 'LOCAL_CAMPAIGN_UNKNOWN'
     14 
     15 class InsurgencyCampaignSvc(Service):
     16     __guid__ = 'svc.insurgencyCampaignSvc'
     17     __displayname__ = 'Insurgency Campaign client service'
     18     __startupdependencies__ = []
     19     __notifyevents__ = ['OnSessionChanged',
     20      'OnInsurgencyCampaignStartedForLocation',
     21      'OnInsurgencyCampaignUpdatedForLocation',
     22      'OnInsurgencyCampaignEndingForLocation',
     23      'OnInsurgencyStateChangedForFaction',
     24      'OnSystemFullyCorruptedForFaction',
     25      'OnSystemFullySuppressedForFaction',
     26      'OnEnterSpace']
     27     _localCampaignSnapshot = LOCAL_CAMPAIGN_UNKNOWN
     28 
     29     def __init__(self):
     30         super(InsurgencyCampaignSvc, self).__init__()
     31         self.GetCurrentCampaignSnapshots_Memoized.clear_memoized()
     32 
     33     def OnSessionChanged(self, isremote, session, change):
     34         if 'solarsystemid2' in change:
     35             self._localCampaignSnapshot = LOCAL_CAMPAIGN_UNKNOWN
     36 
     37     def _LocalCampaignSnapshotLock(self):
     38         return self.LockedService('LocalCampaignSnapshot')
     39 
     40     def GetLocalCampaignSnapshot(self):
     41         if self._localCampaignSnapshot is LOCAL_CAMPAIGN_UNKNOWN:
     42             with self._LocalCampaignSnapshotLock():
     43                 if self._localCampaignSnapshot is LOCAL_CAMPAIGN_UNKNOWN:
     44                     self.LogInfo('GetLocalCampaignSnapshot - _localCampaignSnapshot is unknown - asking the server')
     45                     solarsystemID, campaignSnapshot = sm.RemoteSvc('insurgencySolarsystem').GetLocalCampaignClientSnapshot()
     46                     if solarsystemID != session.solarsystemid2:
     47                         solarsystemID, campaignSnapshot = sm.RemoteSvc('insurgencySolarsystem').GetLocalCampaignClientSnapshot()
     48                     if solarsystemID == session.solarsystemid2:
     49                         self._localCampaignSnapshot = campaignSnapshot
     50         return self._localCampaignSnapshot
     51 
     52     def OnInsurgencyCampaignStartedForLocation(self, campaignSnapshot):
     53         self.GetCurrentCampaignSnapshots_Memoized.clear_memoized()
     54         with self._LocalCampaignSnapshotLock():
     55             if session.solarsystemid2 not in campaignSnapshot.coveredSolarsystemIDs:
     56                 return
     57             self.LogWarn('insurgencyCampaignSvc.OnInsurgencyCampaignStartedForLocation', campaignSnapshot)
     58             self._localCampaignSnapshot = campaignSnapshot
     59             sm.ScatterEvent('OnInsurgencyCampaignStartedForLocation_Local', campaignSnapshot)
     60             self.ShowInsurgencyCampaignStartedForLocation()
     61 
     62     def OnInsurgencyCampaignUpdatedForLocation(self, campaignSnapshot):
     63         self.GetCurrentCampaignSnapshots_Memoized.clear_memoized()
     64         with self._LocalCampaignSnapshotLock():
     65             if session.solarsystemid2 not in campaignSnapshot.coveredSolarsystemIDs:
     66                 return
     67             self.LogWarn('insurgencyCampaignSvc.OnInsurgencyCampaignUpdatedForLocation', campaignSnapshot)
     68             self._localCampaignSnapshot = campaignSnapshot
     69             sm.ScatterEvent('OnInsurgencyCampaignUpdatedForLocation_Local', campaignSnapshot)
     70             self.ShowInsurgencyCampaignUpdatedForLocation(campaignSnapshot)
     71 
     72     def OnInsurgencyCampaignEndingForLocation(self, solarsystemID):
     73         self.GetCurrentCampaignSnapshots_Memoized.clear_memoized()
     74         with self._LocalCampaignSnapshotLock():
     75             if session.solarsystemid2 != solarsystemID:
     76                 return
     77             self.LogWarn('insurgencyCampaignSvc.OnInsurgencyCampaignEndingForLocation')
     78             self._localCampaignSnapshot = None
     79             sm.ScatterEvent('OnInsurgencyCampaignEndingForLocation_Local')
     80             self.ShowInsurgencyCampaignEndingForLocation()
     81 
     82     def GetCurrentCampaignSnapshots(self):
     83         snapshots = sm.RemoteSvc('insurgencySolarsystem').GetAllVisibleCampaigns()
     84         return snapshots
     85 
     86     @Memoize(0.5)
     87     def GetCurrentCampaignSnapshots_Memoized(self):
     88         return self.GetCurrentCampaignSnapshots()
     89 
     90     def GetSolarsystemPirateFactionForCampaign(self, solarSystemID):
     91         for campaign in self.GetCurrentCampaignSnapshots_Memoized():
     92             if solarSystemID in campaign.coveredSolarsystemIDs:
     93                 return campaign.pirateFactionID
     94 
     95     def IsInsurgencyOriginSolarsystemID(self, solarSystemID):
     96         for campaign in self.GetCurrentCampaignSnapshots_Memoized():
     97             if campaign.originSolarsystemID == solarSystemID:
     98                 return True
     99 
    100         return False
    101 
    102     def GetActiveFobStructureIdAndSystemIdForFaction(self, factionID):
    103         for campaign in self.GetCurrentCampaignSnapshots_Memoized():
    104             if campaign.pirateFactionID == factionID and campaign.fsmState in (CAMPAIGN_STATE_FORECASTING, CAMPAIGN_STATE_ACTIVE, CAMPAIGN_STATE_PIRATE_WIN):
    105                 return (campaign.structureID, campaign.originSolarsystemID)
    106 
    107         return (None, None)
    108 
    109     def OnInsurgencyStateChangedForFaction(self, campaignState, pirateFactionID, originSolarsystemID):
    110         if campaignState == CAMPAIGN_STATE_FORECASTING:
    111             sm.GetService('notificationSvc').MakeAndScatterNotification(notificationconst.notificationTypeInsurgencyStarting, data={'pirateFactionID': pirateFactionID,
    112              'originSolarsystemID': originSolarsystemID})
    113         elif campaignState == CAMPAIGN_STATE_ACTIVE:
    114             sm.GetService('notificationSvc').MakeAndScatterNotification(notificationconst.notificationTypeInsurgencyStarted, data={'pirateFactionID': pirateFactionID})
    115         elif campaignState == CAMPAIGN_STATE_PIRATE_WIN:
    116             sm.GetService('notificationSvc').MakeAndScatterNotification(notificationconst.notificationTypeInsurgencyEndedPiratesWin, data={'pirateFactionID': pirateFactionID})
    117         elif campaignState == CAMPAIGN_STATE_ANTIPIRATE_WIN:
    118             sm.GetService('notificationSvc').MakeAndScatterNotification(notificationconst.notificationTypeInsurgencyEndedAntiPiratesWin, data={'pirateFactionID': pirateFactionID})
    119         elif campaignState == CAMPAIGN_STATE_NO_WINNER:
    120             sm.GetService('notificationSvc').MakeAndScatterNotification(notificationconst.notificationTypeInsurgencyEndedNoOneWins, data={'pirateFactionID': pirateFactionID})
    121 
    122     def OnSystemFullyCorruptedForFaction(self, solarsystemID, pirateFactionID, piratePoints, pointsRequired):
    123         sm.GetService('notificationSvc').MakeAndScatterNotification(notificationconst.notificationTypeInsurgencyStage5Corruption, data={'solarSystemID': solarsystemID,
    124          'pirateFactionID': pirateFactionID,
    125          'numberOfCorruptedSystems': piratePoints,
    126          'totalNumberOfSystems': pointsRequired})
    127 
    128     def OnSystemFullySuppressedForFaction(self, solarsystemID, antipiratePoints, pointsRequired):
    129         sm.GetService('notificationSvc').MakeAndScatterNotification(notificationconst.notificationTypeInsurgencyStage5Suppression, data={'solarSystemID': solarsystemID,
    130          'numberOfSuppressedSystems': antipiratePoints,
    131          'totalNumberOfSystems': pointsRequired})
    132 
    133     def OnEnterSpace(self):
    134         uthread2.call_after_wallclocktime_delay(self.ShowActiveInsurgencyNotification, 4)
    135 
    136     def ShowActiveInsurgencyNotification(self):
    137         snapshot = self.GetLocalCampaignSnapshot()
    138         if snapshot is not None:
    139             if snapshot.fsmState == CAMPAIGN_STATE_ACTIVE:
    140                 pirateFaction = factions.get_faction_name(snapshot.pirateFactionID)
    141                 prompt_player_fsd_dialog('CustomNotify', {'notify': GetByLabel('UI/PirateInsurgencies/Notifications/InsurgencyNotification', pirateFaction=pirateFaction)})
    142 
    143     def ShowInsurgencyCampaignStartedForLocation(self):
    144         prompt_player_fsd_dialog('CustomNotify', {'notify': GetByLabel('UI/PirateInsurgencies/Notifications/InsurgencyStartingInLocation')})
    145 
    146     def ShowInsurgencyCampaignUpdatedForLocation(self, campaign):
    147         if campaign.fsmState == CAMPAIGN_STATE_ACTIVE:
    148             prompt_player_fsd_dialog('CustomNotify', {'notify': GetByLabel('UI/PirateInsurgencies/Notifications/InsurgencyStartedInLocation')})
    149 
    150     def ShowInsurgencyCampaignEndingForLocation(self):
    151         prompt_player_fsd_dialog('CustomNotify', {'notify': GetByLabel('UI/PirateInsurgencies/Notifications/InsurgencyEndedInLocation')})