Advertisement
Guest User

Untitled

a guest
Aug 29th, 2021
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.32 KB | None | 0 0
  1. /***********************************************************************/
  2. /** © 2015 CD PROJEKT S.A. All rights reserved.
  3. /** THE WITCHER® is a trademark of CD PROJEKT S. A.
  4. /** The Witcher game is based on the prose of Andrzej Sapkowski.
  5. /***********************************************************************/
  6. enum EUpdateEventType
  7. {
  8. EUET_StartedTracking,
  9. EUET_TrackedQuest,
  10. EUET_TrackedQuestObjective,
  11. EUET_TrackedQuestObjectiveCounter,
  12. EUET_HighlightedQuestObjective,
  13. }
  14.  
  15. struct SUpdateEvent
  16. {
  17. var eventType : EUpdateEventType;
  18. var delay : int;
  19. var journalBase : CJournalBase;
  20. var index : int;
  21. }
  22.  
  23. class CR4HudModuleQuests extends CR4HudModuleBase }
  24. }
  25. private var m_systemQuest : CJournalQuest;
  26. private var m_systemObjectives : array< SJournalQuestObjectiveData >;
  27. private var m_userObjectives : array< SJournalQuestObjectiveData >;
  28.  
  29. private var m_updateEvents : array< SUpdateEvent >;
  30.  
  31. private var manager : CWitcherJournalManager;
  32.  
  33. private var m_fxShowTrackedQuestSFF : CScriptedFlashFunction;
  34. private var m_fxUpdateObjectiveCounterSFF : CScriptedFlashFunction;
  35. private var m_fxUpdateObjectiveHighlightSFF : CScriptedFlashFunction;
  36. private var m_fxUpdateObjectiveUnhighlightAllSFF: CScriptedFlashFunction;
  37.  
  38. private var m_fxSetSystemQuestInfo : CScriptedFlashFunction;
  39.  
  40. private var m_guiManager : CR4GuiManager;
  41. private var m_hud : CR4ScriptedHud;
  42.  
  43.  
  44.  
  45. event OnConfigUI()
  46. {
  47. var flashModule : CScriptedFlashSprite;
  48.  
  49. m_anchorName = "mcAnchorQuest";
  50.  
  51. super.OnConfigUI();
  52. m_guiManager = theGame.GetGuiManager();
  53. m_hud = (CR4ScriptedHud)theGame.GetHud();
  54.  
  55. flashModule = GetModuleFlash();
  56. m_fxShowTrackedQuestSFF = flashModule.GetMemberFlashFunction( "ShowTrackedQuest" );
  57. m_fxUpdateObjectiveCounterSFF = flashModule.GetMemberFlashFunction( "UpdateObjectiveCounter" );
  58. m_fxUpdateObjectiveHighlightSFF = flashModule.GetMemberFlashFunction( "UpdateObjectiveHighlight" );
  59. m_fxUpdateObjectiveUnhighlightAllSFF= flashModule.GetMemberFlashFunction( "UpdateObjectiveUnhighlightAll" );
  60. m_fxSetSystemQuestInfo = flashModule.GetMemberFlashFunction( "SetSystemQuestInfo" );
  61.  
  62. manager = theGame.GetJournalManager();
  63.  
  64. theInput.RegisterListener( this, 'OnHighlightNextObjective', 'HighlightObjective' );
  65.  
  66. UpdateQuest();
  67.  
  68. if (m_hud)
  69. {
  70. m_hud.UpdateHudConfig('QuestsModule', true);
  71. }
  72. }
  73.  
  74. public function OnLevelUp()
  75. {
  76. UpdateQuest();
  77. }
  78.  
  79. event OnTick( timeDelta : float )
  80. {
  81. var i : int;
  82. var e : SUpdateEvent;
  83. var systemObjectives : array< SJournalQuestObjectiveData >;
  84. var sendSystemObjectives : bool = false;
  85.  
  86. UpdateFadeOut( timeDelta ); //modFriendlyHUD
  87.  
  88. if ( CheckIfUpdateIsAllowed() && m_updateEvents.Size() )
  89. {
  90.  
  91. systemObjectives = m_systemObjectives;
  92.  
  93. for ( i = 0; i < m_updateEvents.Size(); )
  94. {
  95. e = m_updateEvents[ i ];
  96. if ( e.delay == 0 )
  97. {
  98. switch ( e.eventType )
  99. {
  100. case EUET_StartedTracking:
  101. UpdateQuest();
  102. break;
  103. case EUET_TrackedQuest:
  104.  
  105. break;
  106. case EUET_TrackedQuestObjective:
  107. UpdateObjectives();
  108. sendSystemObjectives = true;
  109. break;
  110. case EUET_TrackedQuestObjectiveCounter:
  111. SendObjectiveCounter( ( CJournalQuestObjective )e.journalBase );
  112. break;
  113. case EUET_HighlightedQuestObjective:
  114. HighlightObjective( ( CJournalQuestObjective )e.journalBase );
  115. break;
  116. }
  117. m_updateEvents.Erase( i );
  118. }
  119. else
  120. {
  121. m_updateEvents[ i ].delay -= 1;
  122. i += 1;
  123. }
  124. }
  125.  
  126. if ( sendSystemObjectives )
  127. {
  128. SendObjectives();
  129. }
  130.  
  131. }
  132. }
  133.  
  134. function CheckIfUpdateIsAllowed() : bool
  135. {
  136. switch( m_hud.currentInputContext )
  137. {
  138. case 'FastMenu' :
  139. case 'TutorialPopup' :
  140. case 'RadialMenu' :
  141. case 'Scene' :
  142. return false;
  143. break;
  144. default :
  145. return true;
  146. }
  147. return true;
  148. }
  149.  
  150. event OnHighlightNextObjective( action : SInputAction )
  151. {
  152. var journalModule : CR4HudModuleJournalUpdate;
  153. var walkToggleAction : SInputAction;
  154. var inputHandled : bool = false;
  155.  
  156. if ( thePlayer.IsCameraLockedToTarget() &&
  157. ( thePlayer.GetCurrentStateName() == 'Exploration' || thePlayer.GetCurrentStateName() == 'TraverseExploration' ) )
  158. {
  159. thePlayer.HardLockToTarget( false );
  160. inputHandled = true;
  161. }
  162.  
  163. if( !inputHandled && m_hud )
  164. {
  165. journalModule = (CR4HudModuleJournalUpdate) m_hud.GetHudModule( "JournalUpdateModule");
  166.  
  167. if ( journalModule )
  168. {
  169. inputHandled = journalModule.isBookInfoShown();
  170. }
  171. }
  172.  
  173. if ( !inputHandled && thePlayer.IsActionAllowed( EIAB_HighlightObjective ) )
  174. {
  175. walkToggleAction = theInput.GetAction('WalkToggle');
  176. if ( IsReleased(action) && walkToggleAction.lastFrameValue < 0.7 && walkToggleAction.value < 0.7 )
  177. {
  178. if(ShouldProcessTutorial('TutorialObjectiveSwitching'))
  179. {
  180. FactsSet( "tut_switched_objective", 1 );
  181. }
  182. theGame.GetJournalManager().SetPrevNextHighlightedObjective( true );
  183. }
  184. }
  185. }
  186.  
  187.  
  188.  
  189.  
  190. public function OnQuestTrackingStarted( journalQuest : CJournalQuest )
  191. {
  192.  
  193.  
  194.  
  195. var e : SUpdateEvent;
  196. e.eventType = EUET_StartedTracking;
  197. e.delay = 0;
  198. e.journalBase = journalQuest;
  199. m_updateEvents.PushBack( e );
  200. }
  201.  
  202. public function OnTrackedQuestUpdated( journalQuest : CJournalQuest )
  203. {
  204.  
  205.  
  206. var e : SUpdateEvent;
  207. e.eventType = EUET_TrackedQuest;
  208. e.delay = 1;
  209. e.journalBase = journalQuest;
  210. m_updateEvents.PushBack( e );
  211. }
  212.  
  213. public function OnTrackedQuestObjectivesUpdated( journalObjective : CJournalQuestObjective )
  214. {
  215.  
  216.  
  217. var e : SUpdateEvent;
  218. e.eventType = EUET_TrackedQuestObjective;
  219. e.delay = 1;
  220. e.journalBase = journalObjective;
  221. m_updateEvents.PushBack( e );
  222. }
  223.  
  224. public function OnTrackedQuestObjectiveCounterUpdated( journalObjective : CJournalQuestObjective )
  225. {
  226.  
  227. var e : SUpdateEvent;
  228. e.eventType = EUET_TrackedQuestObjectiveCounter;
  229. e.delay = 1;
  230. e.journalBase = journalObjective;
  231. m_updateEvents.PushBack( e );
  232. }
  233.  
  234. public function OnTrackedQuestObjectiveHighlighted( journalObjective : CJournalQuestObjective, objectiveIndex : int )
  235. {
  236.  
  237. var e : SUpdateEvent;
  238. e.eventType = EUET_HighlightedQuestObjective;
  239. e.delay = 2;
  240. e.journalBase = journalObjective;
  241. m_updateEvents.PushBack( e );
  242. }
  243.  
  244. private function Test()
  245. {
  246. var objectives1 : array< SJournalQuestObjectiveData >;
  247. var objectives2 : array< SJournalQuestObjectiveData >;
  248.  
  249. theGame.GetJournalManager().GetTrackedQuestObjectivesData( objectives1 );
  250. HAXGetTrackedObjectives( objectives2 );
  251.  
  252. if ( objectives1.Size() != objectives2.Size() )
  253. {
  254. LogChannel('QuestTrackerFail', "objectives1.Size() != objectives2.Size()" );
  255. }
  256. }
  257.  
  258.  
  259.  
  260.  
  261. private function UpdateQuest()
  262. {
  263. m_systemQuest = manager.GetTrackedQuest();
  264.  
  265. if ( m_systemQuest )
  266. {
  267. UpdateObjectives();
  268.  
  269. SendQuestName();
  270. SendObjectives();
  271.  
  272. ShowQuestTracker( m_systemObjectives.Size() > 0 );
  273. }
  274. else
  275. {
  276. ShowQuestTracker( false );
  277. }
  278. }
  279.  
  280. private function UpdateObjectives()
  281. {
  282. var l_objectives : array< SJournalQuestObjectiveData >;
  283. var i : int;
  284.  
  285.  
  286.  
  287. theGame.GetJournalManager().GetTrackedQuestObjectivesData( l_objectives );
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297. m_systemObjectives.Clear();
  298.  
  299. for ( i = 0; i < l_objectives.Size(); i += 1 )
  300. {
  301. if ( l_objectives[i].status == JS_Active )
  302. {
  303. m_systemObjectives.PushBack( l_objectives[ i ] );
  304.  
  305. }
  306. }
  307. }
  308.  
  309. function HAXGetTrackedObjectives( out l_objectives : array< SJournalQuestObjectiveData > )
  310. {
  311. var journalQuest : CJournalQuest;
  312. var l_questPhase : CJournalQuestPhase;
  313. var l_objective : CJournalQuestObjective;
  314. var journalObjectiveData : SJournalQuestObjectiveData;
  315. var l_objectiveStatus : EJournalStatus;
  316.  
  317. var i,j : int;
  318.  
  319. journalQuest = manager.GetTrackedQuest();
  320.  
  321. for( i = 0; i < journalQuest.GetNumChildren(); i += 1 )
  322. {
  323. l_questPhase = (CJournalQuestPhase) journalQuest.GetChild(i);
  324. if(l_questPhase)
  325. {
  326. for( j = 0; j < l_questPhase.GetNumChildren(); j += 1 )
  327. {
  328. l_objective =( CJournalQuestObjective ) l_questPhase.GetChild(j);
  329. l_objectiveStatus = ( manager.GetEntryStatus( l_objective ) );
  330. if( l_objectiveStatus > JS_Inactive )
  331. {
  332. journalObjectiveData.status = l_objectiveStatus;
  333. journalObjectiveData.objectiveEntry = l_objective;
  334. l_objectives.PushBack(journalObjectiveData);
  335. }
  336. }
  337. }
  338. }
  339. }
  340.  
  341. private function SendQuestName()
  342. {
  343. var flashValueStorage : CScriptedFlashValueStorage = GetModuleFlashValueStorage();
  344. var questName : string;
  345. var searchQuestName : string;
  346. var questCount:int;
  347. var questLevel:int;
  348. var lvlDiff:int;
  349. var j:int;
  350. var questTooHard:bool;
  351. var questLevels : C2dArray;
  352. var questLevelsCount: int;
  353. var iterQuestLevels: int;
  354.  
  355. questName = GetLocStringById( m_systemQuest.GetTitleStringId() );
  356. if ( questName == "" )
  357. {
  358. questName = "MISSING_QUEST_NAME: " + m_systemQuest.baseName;
  359. }
  360.  
  361. questLevelsCount = theGame.questLevelsContainer.Size();
  362. for( iterQuestLevels = 0; iterQuestLevels < questLevelsCount; iterQuestLevels += 1 )
  363. {
  364. questLevels = theGame.questLevelsContainer[iterQuestLevels];
  365. questCount = questLevels.GetNumRows();
  366. for( j = 0; j < questCount; j += 1 )
  367. {
  368. searchQuestName = questLevels.GetValueAtAsName(0,j);
  369. if ( searchQuestName == m_systemQuest.baseName )
  370. {
  371. questLevel = NameToInt( questLevels.GetValueAtAsName(1,j) );
  372.  
  373. if(FactsQuerySum("NewGamePlus") > 0)
  374. questLevel += theGame.params.GetNewGamePlusLevel();
  375. }
  376. }
  377. }
  378.  
  379. lvlDiff = questLevel - thePlayer.GetLevel();
  380.  
  381. if ((W3ReplacerCiri)thePlayer)
  382. {
  383. questTooHard = false;
  384. }
  385. else
  386. { //ModHideQuetlevel BEGIN
  387. //questTooHard = lvlDiff >= theGame.params.LEVEL_DIFF_HIGH;
  388. questTooHard = false;
  389. //ModHideQuetlevel END
  390. }
  391.  
  392. m_fxSetSystemQuestInfo.InvokeSelfThreeArgs(FlashArgString(questName), FlashArgInt(GetColorByQuestType( m_systemQuest )), FlashArgBool(questTooHard));
  393. }
  394.  
  395. private function SendObjectives()
  396. {
  397. var l_flashArray : CScriptedFlashArray;
  398. var l_flashObject : CScriptedFlashObject;
  399. var data : SJournalQuestObjectiveData;
  400. var i : int;
  401. var objectiveName : string;
  402.  
  403. l_flashArray = GetModuleFlashValueStorage().CreateTempFlashArray();
  404.  
  405. for ( i = 0; i < m_systemObjectives.Size(); i += 1 )
  406. {
  407. data = m_systemObjectives[ i ];
  408.  
  409. l_flashObject = GetModuleFlashValueStorage().CreateTempFlashObject();
  410.  
  411. objectiveName = GetLocStringById( data.objectiveEntry.GetTitleStringId() );
  412. if ( objectiveName == "" )
  413. {
  414. objectiveName = "MISSING_OBJECTIVE_NAME: " + data.objectiveEntry.baseName;
  415. }
  416. l_flashObject.SetMemberFlashString( "name", objectiveName + GetQuestObjectiveCounterText( data.objectiveEntry ) );
  417. l_flashObject.SetMemberFlashBool( "isHighlighted", ( data.objectiveEntry == _highlightedObjective ) );
  418. l_flashObject.SetMemberFlashBool( "isMutuallyExclusive", data.objectiveEntry.IsMutuallyExclusive() );
  419. if( m_guiManager.FindDisplayedObjectiveGUID( data.objectiveEntry.guid ) )
  420. {
  421. l_flashObject.SetMemberFlashBool( "isNew", false );
  422. }
  423. else
  424. {
  425. l_flashObject.SetMemberFlashBool( "isNew", true );
  426. m_guiManager.SaveDisplayedObjectiveGUID( data.objectiveEntry.guid );
  427. }
  428. l_flashArray.PushBackFlashObject( l_flashObject );
  429. }
  430.  
  431. GetModuleFlashValueStorage().SetFlashArray( "hud.quest.system.objectives", l_flashArray );
  432.  
  433. ShowQuestTracker( m_systemObjectives.Size() > 0 );
  434. }
  435.  
  436. public function SendObjectiveCounter( objective : CJournalQuestObjective )
  437. {
  438. var str : string;
  439.  
  440. if ( objective.GetCount() <= 0 )
  441. {
  442.  
  443. return;
  444. }
  445.  
  446. str = GetLocStringById( objective.GetTitleStringId() ) + GetQuestObjectiveCounterText( objective );
  447. m_fxUpdateObjectiveCounterSFF.InvokeSelfTwoArgs( FlashArgInt( GetObjectiveIndex( objective ) ), FlashArgString( str ) );
  448. }
  449.  
  450. var _highlightedObjective : CJournalQuestObjective;
  451.  
  452. public function HighlightObjective( objective : CJournalQuestObjective )
  453. {
  454. _highlightedObjective = objective;
  455.  
  456.  
  457. m_fxUpdateObjectiveUnhighlightAllSFF.InvokeSelf();
  458.  
  459. m_fxUpdateObjectiveHighlightSFF.InvokeSelfTwoArgs( FlashArgInt( GetObjectiveIndex( objective ) ), FlashArgBool( true ) );
  460. }
  461.  
  462. private function ShowQuestTracker( show : bool )
  463. {
  464. m_fxShowTrackedQuestSFF.InvokeSelfOneArg( FlashArgBool( show ) );
  465. }
  466.  
  467.  
  468.  
  469.  
  470. private function GetObjectiveIndex( objective : CJournalQuestObjective ) : int
  471. {
  472. var i : int;
  473.  
  474. for ( i = 0; i < m_systemObjectives.Size(); i += 1 )
  475. {
  476. if ( objective == m_systemObjectives[ i ].objectiveEntry )
  477. {
  478. return i;
  479. }
  480. }
  481. return -1;
  482. }
  483.  
  484. protected function GetColorByQuestType( journalQuest : CJournalQuest ) : int
  485. {
  486. switch ( journalQuest.GetType() )
  487. {
  488. case Story:
  489. return 0xffcc00;
  490. case Chapter:
  491. return 0xbb8237;
  492. case Side:
  493. case MonsterHunt:
  494. case TreasureHunt:
  495. return 0xc0c0c0;
  496. }
  497. return 0xffffff;
  498. }
  499.  
  500. //---=== modFriendlyHUD ===---
  501. /*function ShowElement( show : bool, optional bImmediately : bool )
  502. {
  503. m_fxShowElementSFF.InvokeSelfTwoArgs( FlashArgBool( show ), FlashArgBool( bImmediately ) );
  504. }
  505.  
  506. function SetEnabled( value : bool )
  507. {
  508. m_bEnabled = value;
  509. m_fxSetEnabledSFF.InvokeSelfOneArg( FlashArgBool( m_bEnabled ) );
  510. }*/
  511. //---=== modFriendlyHUD ===---
  512.  
  513. // ----- modExtendedHUD ----- //
  514. protected function UpdateScale( scale : float, flashModule : CScriptedFlashSprite ) : bool
  515. {
  516. return super.UpdateScale( scale * GetEHUD().quests, flashModule );
  517. // ----- modExtendedHUD ----- //
  518. }
  519.  
  520. function GetQuestObjectiveCounterText( objectiveEntry :CJournalQuestObjective ) : string
  521. {
  522. var audioLanguage : string;
  523. var language : string;
  524. var manager : CWitcherJournalManager = theGame.GetJournalManager();
  525.  
  526. theGame.GetGameLanguageName(audioLanguage,language);
  527.  
  528. if ( objectiveEntry.GetCount() > 0 )
  529. {
  530. if (language == "AR")
  531. {
  532. return manager.GetQuestObjectiveCount( objectiveEntry.guid ) + "/" + objectiveEntry.GetCount() + "&nbsp;";
  533. }
  534. else
  535. {
  536. return "&nbsp;" + manager.GetQuestObjectiveCount( objectiveEntry.guid ) + "/" + objectiveEntry.GetCount();
  537. }
  538. }
  539. return ""; }
  540.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement