Advertisement
Guest User

Untitled

a guest
Oct 15th, 2018
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.09 KB | None | 0 0
  1.  
  2.  
  3.  
  4. // modShieldHood --- Start --------------------------------------------------
  5. public function ManageModShieldHoods( item : SItemUniqueId, isOnEquip : bool )
  6. {
  7. if ( inv.ItemHasTag( item, 'Hood' ) )
  8. {
  9. if (isOnEquip) {
  10. if( theGame.GetInGameConfigWrapper().GetVarValue( 'DLCShieldMenu', 'displayHair' ) )
  11. DisplayHair( true );
  12. }
  13. else {
  14. DisplayHair( false );
  15. }
  16. }
  17. }
  18. private function DisplayHair(display : bool)
  19. {
  20. var l_comp : CComponent;
  21. var hair : CEntityTemplate;
  22.  
  23. l_comp = thePlayer.GetComponentByClassName( 'CAppearanceComponent' );
  24. hair = (CEntityTemplate)LoadResource("dlc\kontusz\data\items\hoods\hood_hair\hair_hood.w2ent", true);
  25. if ( display ){
  26. ((CAppearanceComponent)l_comp).IncludeAppearanceTemplate(hair);
  27. }
  28. else {
  29. ((CAppearanceComponent)l_comp).ExcludeAppearanceTemplate(hair);
  30. }
  31. }
  32. // modShieldHood --- End ------------------------------------------------------
  33. // modShieldSkills --- Start --------------------------------------------------
  34. private var hiddenSkills : array<int>;
  35. private var isHiddenSkillsListInit : bool;
  36.  
  37. public function ManageModShieldSkills( item : SItemUniqueId, isOnEquip : bool )
  38. {
  39. var pam : W3PlayerAbilityManager;
  40. var skills : array<ESkill>;
  41. var i : int;
  42.  
  43. pam = (W3PlayerAbilityManager)GetWitcherPlayer().abilityManager;
  44. skills = GetHiddenSkillsFromItemID( item );
  45.  
  46. for (i = 0;i < skills.Size();i+=1)
  47. {
  48. if (isOnEquip)
  49. SetHiddenSkill( skills[i], pam.AddHiddenSkill( skills[i] ) );
  50. else
  51. pam.RemoveHiddenSkill( skills[i] );
  52. }
  53.  
  54. }
  55. public function SetHiddenSkill( skill : ESkill, level : int )
  56. {
  57. if (!isHiddenSkillsListInit)
  58. {
  59. InitHiddenSkillsList();
  60. isHiddenSkillsListInit = true;
  61. }
  62. hiddenSkills[skill] = level;
  63. }
  64. private function InitHiddenSkillsList()
  65. {
  66. hiddenSkills.Resize( EnumGetMax( 'ESkill' ) + 1 );
  67. }
  68. public function GetHiddenSkill( skill : ESkill ) : int
  69. {
  70. return hiddenSkills[skill];
  71. }
  72.  
  73. public function IsSkillGranted( skill : ESkill ) : bool
  74. {
  75. var itemNames : array<name>;
  76. var ret : bool;
  77. var i : int;
  78.  
  79. itemNames = GetItemNamesFromHiddenSkill( skill );
  80.  
  81. for (i = 0; i < itemNames.Size(); i+=1)
  82. {
  83. if ( GetWitcherPlayer().IsItemEquipped( inv.GetItemId( itemNames[i] ) ) )
  84. ret = true;
  85. }
  86.  
  87. return ret;
  88. }
  89. private function GetHiddenSkillsFromItemID( item : SItemUniqueId ) : array<ESkill>
  90. {
  91. var ret : array<ESkill>;
  92.  
  93. switch( inv.GetItemName(item) )
  94. {
  95. case 'Wanderer Armor' : {ret.PushBack(S_Alchemy_s03); ret.PushBack(S_Alchemy_s04); ret.PushBack(S_Alchemy_s17);break;}
  96. case 'Warden Armor' : {ret.PushBack(S_Magic_s01); ret.PushBack(S_Magic_s02); ret.PushBack(S_Magic_s03); ret.PushBack(S_Magic_s04); ret.PushBack(S_Magic_s05);break;}
  97. case 'Hunter Armor' : {ret.PushBack(S_Sword_s03); ret.PushBack(S_Sword_s10); ret.PushBack(S_Sword_s09); ret.PushBack(S_Sword_s11);break;}
  98. case 'Tracker Armor' : {ret.PushBack(S_Sword_s07); ret.PushBack(S_Sword_s12); ret.PushBack(S_Sword_s13); ret.PushBack(S_Sword_s15); ret.PushBack(S_Perk_02);break;}
  99. case 'Raven Armor' : {ret.PushBack(S_Sword_s01); ret.PushBack(S_Sword_s02);break;}
  100. case 'Shiadhal Armor' : {ret.PushBack(S_Magic_s08); ret.PushBack(S_Magic_s02); ret.PushBack(S_Magic_s07); ret.PushBack(S_Magic_s09);break;}
  101. case 'Astrogarus Armor' : {ret.PushBack(S_Magic_s06); ret.PushBack(S_Magic_s09); ret.PushBack(S_Magic_s11); ret.PushBack(S_Magic_s14); ret.PushBack(S_Magic_s19);break;}
  102. case 'Journeyman Armor' : {ret.PushBack(S_Alchemy_s14); ret.PushBack(S_Alchemy_s13);break;}
  103. case 'Oathbreaker Armor': {ret.PushBack(S_Perk_06);break;}
  104. case 'Kinslayer Armor' : {ret.PushBack(S_Perk_07);break;}
  105. //case '' : {ret.PushBack(S_Magic_s05);break;}
  106. default : {ret.PushBack(S_SUndefined);break;}
  107. }
  108.  
  109. return ret;
  110. }
  111. private function GetItemNamesFromHiddenSkill( skill : ESkill ) : array<name>
  112. {
  113. var ret : array<name>;
  114.  
  115. switch( skill )
  116. {
  117. case S_Magic_s01 : {ret.PushBack('Warden Armor');break;}
  118. case S_Magic_s02 : {ret.PushBack('Warden Armor'); ret.PushBack('Shiadhal Armor');break;}
  119. case S_Magic_s03 : {ret.PushBack('Warden Armor');break;}
  120. case S_Magic_s04 : {ret.PushBack('Warden Armor');break;}
  121. case S_Magic_s05 : {ret.PushBack('Warden Armor');break;}
  122. case S_Magic_s08 : {ret.PushBack('Shiadhal Armor');break;}
  123. case S_Magic_s07 : {ret.PushBack('Shiadhal Armor');break;}
  124. case S_Magic_s09 : {ret.PushBack('Shiadhal Armor'); ret.PushBack('Astrogarus Armor');break;}
  125. case S_Magic_s06 : {ret.PushBack('Astrogarus Armor');break;}
  126. case S_Magic_s11 : {ret.PushBack('Astrogarus Armor');break;}
  127. case S_Magic_s14 : {ret.PushBack('Astrogarus Armor');break;}
  128. case S_Magic_s19 : {ret.PushBack('Astrogarus Armor');break;}
  129. case S_Sword_s03 : {ret.PushBack('Hunter Armor');break;}
  130. case S_Sword_s09 : {ret.PushBack('Hunter Armor');break;}
  131. case S_Sword_s10 : {ret.PushBack('Hunter Armor');break;}
  132. case S_Sword_s11 : {ret.PushBack('Hunter Armor');break;}
  133. case S_Sword_s01 : {ret.PushBack('Raven Armor');break;}
  134. case S_Sword_s02 : {ret.PushBack('Raven Armor');break;}
  135. case S_Alchemy_s03 : {ret.PushBack('Wanderer Armor');break;}
  136. case S_Alchemy_s04 : {ret.PushBack('Wanderer Armor');break;}
  137. case S_Alchemy_s17 : {ret.PushBack('Wanderer Armor'); ret.PushBack('Journeyman Armor');break;}
  138. case S_Alchemy_s13 : {ret.PushBack('Journeyman Armor');break;}
  139. case S_Sword_s07 : {ret.PushBack('Tracker Armor');break;}
  140. case S_Sword_s12 : {ret.PushBack('Tracker Armor');break;}
  141. case S_Sword_s13 : {ret.PushBack('Tracker Armor');break;}
  142. case S_Sword_s15 : {ret.PushBack('Tracker Armor');break;}
  143. case S_Perk_02 : {ret.PushBack('Tracker Armor');break;}
  144. case S_Perk_06 : {ret.PushBack('Oathbreaker Armor');break;}
  145. case S_Perk_07 : {ret.PushBack('Oathbreaker Armor');break;}
  146. default : {ret.PushBack('');break;}
  147. }
  148. return ret;
  149. }
  150. // modShieldSkills --- End --------------------------------------------------
  151.  
  152. // modShieldCombat --- Start --------------------------------------------------
  153. private var hitShieldCount : int;
  154. private var previousAttacker : CActor;
  155.  
  156. public function ProcessShieldParry(optional parryInfo : SParryInfo, optional isArrow : bool, optional shield : W3DLCShield)
  157. {
  158. var anim : CName;
  159. var rand : int;
  160.  
  161. var parryDir : EPlayerParryDirection;
  162. var parryHeading : float;
  163.  
  164. var staminaDrain : int;
  165.  
  166. staminaDrain = StringToInt(theGame.GetInGameConfigWrapper().GetVarValue( 'DLCShieldMenu', 'staminaDrain' ));
  167.  
  168. if(isArrow)
  169. {
  170. rand = RandRange(0,2);
  171. switch(rand){
  172. case 0:
  173. anim = 'man_npc_shield_block_rp_01';
  174. break;
  175. case 1:
  176. anim = 'man_npc_shield_block_rp_02';
  177. break;
  178. }
  179.  
  180. thePlayer.ActionPlaySlotAnimationAsync( 'PLAYER_SLOT', anim, 0.2, 0.2 );
  181.  
  182. parryHeading = GetParryHeading( parryInfo, parryDir ) ;
  183.  
  184. DrainStamina(ESAT_FixedValue, staminaDrain);
  185.  
  186. OnCombatActionStart();
  187. ClearCustomOrientationInfoStack();
  188. SetSlideTarget( parryInfo.attacker );
  189. SetCustomRotation( 'Parry', parryHeading, 1080.f, 0.1f, false );
  190. }
  191. else
  192. {
  193. rand = RandRange(0,2);
  194. switch(rand){
  195. case 0:
  196. anim = 'man_npc_shield_block_rp_01';
  197. break;
  198. case 1:
  199. anim = 'man_npc_shield_block_rp_02';
  200. break;
  201. }
  202.  
  203. thePlayer.ActionPlaySlotAnimationAsync( 'PLAYER_SLOT', anim, 0.2, 0.2 );
  204.  
  205. parryHeading = GetParryHeading( parryInfo, parryDir ) ;
  206.  
  207. SetBehaviorVariable( 'parryDirection', (float)( (int)( parryDir ) ) );
  208. SetBehaviorVariable( 'parryDirectionOverlay', (float)( (int)( parryDir ) ) );
  209. SetBehaviorVariable( 'parryType', ChooseParryTypeIndex( parryInfo ) );
  210.  
  211.  
  212. OnCombatActionStart();
  213. ClearCustomOrientationInfoStack();
  214. SetSlideTarget( parryInfo.attacker );
  215. SetCustomRotation( 'Parry', parryHeading, 1080.f, 0.1f, false );
  216. IncDefendCounter();
  217.  
  218. DrainStamina(ESAT_FixedValue, staminaDrain);
  219.  
  220. if(parryInfo.attacker == previousAttacker){
  221. if(hitShieldCount > RandRange( (int)shield.GetStaggerMin() ,(int)shield.GetStaggerMax() ) ){
  222. parryInfo.attacker.AddEffectDefault( EET_Stagger, thePlayer, "ParryStagger" );
  223. hitShieldCount = 0;
  224. }
  225.  
  226. hitShieldCount += 1;
  227. }
  228. else{
  229. hitShieldCount = 0;
  230. }
  231.  
  232. previousAttacker = parryInfo.attacker;
  233. }
  234. }
  235. public function DestroyArrows(arrows : array<W3ArrowProjectile>)
  236. {
  237. var i : int;
  238.  
  239. for(i = 0; i < arrows.Size(); i += 1)
  240. {
  241. arrows[i].AddTimer( 'TimeDestroy', 0.f, false );
  242. }
  243. }
  244. // modShieldCombat --- End --------------------------------------------------
  245. function PerformParryCheck( parryInfo : SParryInfo) : bool
  246. // modShieldCombat --- Start --------------------------------------------------
  247. var itemId : SItemUniqueId;
  248. var shield : W3DLCShield;
  249.  
  250. var npc : CNewNPC;
  251. var testedAngle, staminaNeeded : float;
  252. var infront, cantParryFromBehind : bool;
  253.  
  254. cantParryFromBehind = theGame.GetInGameConfigWrapper().GetVarValue( 'DLCShieldMenu', 'cantParryFromBehind' );
  255.  
  256. itemId = thePlayer.GetInventory().GetItemFromSlot('l_weapon');
  257. shield = (W3DLCShield)GetInventory().GetItemEntityUnsafe(itemId);
  258.  
  259. npc = (CNewNPC)parryInfo.attacker;
  260. testedAngle = AngleDistance( VecHeading( npc.GetWorldPosition() - thePlayer.GetWorldPosition() ) , thePlayer.GetHeading() );
  261.  
  262. if ( testedAngle < 100 && testedAngle > -70 )
  263. {
  264. infront = true;
  265. }
  266. else
  267. {
  268. if(!cantParryFromBehind)
  269. {
  270. infront = false;
  271. }
  272. else
  273. {
  274. if(shield)
  275. {
  276. return false;
  277. }
  278. }
  279. }
  280.  
  281. if( shield && IsGuarded() && infront)
  282. {
  283. staminaNeeded = StringToFloat(theGame.GetInGameConfigWrapper().GetVarValue( 'DLCShieldMenu', 'staminaNeeded' ));
  284.  
  285. if(GetStaminaPercents() < staminaNeeded/100)
  286. {
  287. return false;
  288. }
  289.  
  290. ProcessShieldParry(parryInfo, , shield);
  291.  
  292. shield.PlayEffect('light_block');
  293.  
  294. return true;
  295. }
  296. // modShieldCombat --- End --------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement