Advertisement
avogatro

world of tanks mod: reset personal mission for obj 279 early

Mar 30th, 2023 (edited)
1,056
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.41 KB | Gaming | 0 0
  1. # uncompyle6 version 3.9.0
  2. # Python bytecode version base 2.7 (62211)
  3. # Decompiled from: Python 3.8.10 (default, Mar 13 2023, 10:26:41)
  4. # [GCC 9.4.0]
  5. # Embedded file name: mods/mod_wb_pm_autoreset.py
  6. # Compiled at: 2021-06-01 21:49:39
  7. import BigWorld
  8. from PlayerEvents import g_playerEvents
  9. from helpers import dependency
  10. from skeletons.gui.shared import IItemsCache
  11. import Account
  12. from personal_missions import g_cache
  13.  
  14. class WBPMAutoReset:
  15.     itemsCache = dependency.descriptor(IItemsCache)
  16.     player = None
  17.     canReset = True
  18.     needTimer = True
  19.  
  20.     def __init__(self):
  21.         self._initListeners()
  22.         self._patchQuestResetter()
  23.  
  24.     def _patchQuestResetter(self):
  25.         old_selectPersonalMissions = Account.PlayerAccount.selectPersonalMissions
  26.  
  27.         def new_selectPersonalMissions(self, personalMissionsIDs, questType, callback):
  28.             old_selectPersonalMissions(self, personalMissionsIDs, questType, callback)
  29.  
  30.         Account.PlayerAccount.selectPersonalMissions = new_selectPersonalMissions
  31.  
  32.     def _initListeners(self):
  33.         self.itemsCache.onSyncCompleted += self._onSyncCompleted
  34.         g_playerEvents.onBattleResultsReceived += self._onBattleResultsReceived
  35.  
  36.     def onEvent1(self, *args):
  37.         self._checkQuestState()
  38.  
  39.     def onEvent2(self, *args):
  40.         self._checkQuestState()
  41.  
  42.     def _onSyncCompleted(self, *args):
  43.         self._checkQuestState()
  44.  
  45.     def _onBattleResultsReceived(self, isPlayerVehicle, results):
  46.         self.canReset = True
  47.  
  48.     def _checkQuestState(self):
  49.         questProgress = Account.g_accountRepository.questProgress
  50.         if questProgress is None:
  51.             return
  52.         else:
  53.             self.needTimer = True
  54.             pmProgress = questProgress._QuestProgress__cache['pm2_progress']
  55.             questsToReset = {}
  56.             for q in pmProgress:
  57.                 quest = pmProgress[q]
  58.                 print '--\t', q, quest
  59.                 questId = g_cache._PQCache__questUniqueIDToPotapovQuestID['%s_main' % q]
  60.                 if 'battlesSeries' in quest.keys():
  61.                     questKeys = quest['battlesSeries'].keys()
  62.                     mainConditionFailed = True
  63.                     advConditionFailed = True
  64.                     if 'battles' in questKeys:
  65.                         if len(quest['battlesSeries']['battles']) == 0 and len(quest['battlesSeriesAdv']['battles']) > 0:
  66.                             mainConditionFailed = False
  67.                             print q, 'main condition done'
  68.                         else:
  69.                             for battle in quest['battlesSeries']['battles']:
  70.                                 if battle:
  71.                                     mainConditionFailed = False
  72.                                     break
  73.  
  74.                         if mainConditionFailed:
  75.                             questsToReset[questId] = True
  76.                         if 'state' in questKeys and quest['battlesSeries']['state'] >= 5:
  77.                             if len(quest['battlesSeries']['battles']) == 0 and len(quest['battlesSeriesAdv']['battles']) > 0:
  78.                                 for battle in quest['battlesSeriesAdv']['battles']:
  79.                                     if battle:
  80.                                         advConditionFailed = False
  81.                                         break
  82.  
  83.                             if advConditionFailed and not mainConditionFailed:
  84.                                 questsToReset[questId] = True
  85.                     print '>>', questId, 'main cond:', mainConditionFailed, 'adv cond:', advConditionFailed,
  86.  
  87.             needReset = False
  88.             for r in questsToReset:
  89.                 needReset = needReset or questsToReset[r]
  90.  
  91.             if needReset:
  92.                 self._resetQuest(questsToReset)
  93.             else:
  94.                 print 'no need to reset quests:', questsToReset
  95.             return
  96.  
  97.     def _voidCallback(self, *args):
  98.         pass
  99.  
  100.     def _resetQuest(self, questIds):
  101.         if self.canReset:
  102.             self.canReset = False
  103.             print ('>> trying to reset quest:', questIds, questIds.keys())
  104.             BigWorld.player().resetPersonalMissions(list(questIds.keys()), 2, self._voidCallback)
  105.             print ('>> reset seems successful', list(questIds.keys()))
  106.         else:
  107.             print '>> reset quest blocked till next battle'
  108.  
  109.  
  110. wbPMAutoReset = WBPMAutoReset()
  111. # okay decompiling mod_wb_pm_autoreset.pyc
  112.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement