Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // modShieldHood --- Start --------------------------------------------------
- public function ManageModShieldHoods( item : SItemUniqueId, isOnEquip : bool )
- {
- if ( inv.ItemHasTag( item, 'Hood' ) )
- {
- if (isOnEquip) {
- if( theGame.GetInGameConfigWrapper().GetVarValue( 'DLCShieldMenu', 'displayHair' ) )
- DisplayHair( true );
- }
- else {
- DisplayHair( false );
- }
- }
- }
- private function DisplayHair(display : bool)
- {
- var l_comp : CComponent;
- var hair : CEntityTemplate;
- l_comp = thePlayer.GetComponentByClassName( 'CAppearanceComponent' );
- hair = (CEntityTemplate)LoadResource("dlc\kontusz\data\items\hoods\hood_hair\hair_hood.w2ent", true);
- if ( display ){
- ((CAppearanceComponent)l_comp).IncludeAppearanceTemplate(hair);
- }
- else {
- ((CAppearanceComponent)l_comp).ExcludeAppearanceTemplate(hair);
- }
- }
- // modShieldHood --- End ------------------------------------------------------
- // modShieldSkills --- Start --------------------------------------------------
- private var hiddenSkills : array<int>;
- private var isHiddenSkillsListInit : bool;
- public function ManageModShieldSkills( item : SItemUniqueId, isOnEquip : bool )
- {
- var pam : W3PlayerAbilityManager;
- var skills : array<ESkill>;
- var i : int;
- pam = (W3PlayerAbilityManager)GetWitcherPlayer().abilityManager;
- skills = GetHiddenSkillsFromItemID( item );
- for (i = 0;i < skills.Size();i+=1)
- {
- if (isOnEquip)
- SetHiddenSkill( skills[i], pam.AddHiddenSkill( skills[i] ) );
- else
- pam.RemoveHiddenSkill( skills[i] );
- }
- }
- public function SetHiddenSkill( skill : ESkill, level : int )
- {
- if (!isHiddenSkillsListInit)
- {
- InitHiddenSkillsList();
- isHiddenSkillsListInit = true;
- }
- hiddenSkills[skill] = level;
- }
- private function InitHiddenSkillsList()
- {
- hiddenSkills.Resize( EnumGetMax( 'ESkill' ) + 1 );
- }
- public function GetHiddenSkill( skill : ESkill ) : int
- {
- return hiddenSkills[skill];
- }
- public function IsSkillGranted( skill : ESkill ) : bool
- {
- var itemNames : array<name>;
- var ret : bool;
- var i : int;
- itemNames = GetItemNamesFromHiddenSkill( skill );
- for (i = 0; i < itemNames.Size(); i+=1)
- {
- if ( GetWitcherPlayer().IsItemEquipped( inv.GetItemId( itemNames[i] ) ) )
- ret = true;
- }
- return ret;
- }
- private function GetHiddenSkillsFromItemID( item : SItemUniqueId ) : array<ESkill>
- {
- var ret : array<ESkill>;
- switch( inv.GetItemName(item) )
- {
- case 'Wanderer Armor' : {ret.PushBack(S_Alchemy_s03); ret.PushBack(S_Alchemy_s04); ret.PushBack(S_Alchemy_s17);break;}
- 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;}
- case 'Hunter Armor' : {ret.PushBack(S_Sword_s03); ret.PushBack(S_Sword_s10); ret.PushBack(S_Sword_s09); ret.PushBack(S_Sword_s11);break;}
- 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;}
- case 'Raven Armor' : {ret.PushBack(S_Sword_s01); ret.PushBack(S_Sword_s02);break;}
- case 'Shiadhal Armor' : {ret.PushBack(S_Magic_s08); ret.PushBack(S_Magic_s02); ret.PushBack(S_Magic_s07); ret.PushBack(S_Magic_s09);break;}
- 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;}
- case 'Journeyman Armor' : {ret.PushBack(S_Alchemy_s14); ret.PushBack(S_Alchemy_s13);break;}
- case 'Oathbreaker Armor': {ret.PushBack(S_Perk_06);break;}
- case 'Kinslayer Armor' : {ret.PushBack(S_Perk_07);break;}
- //case '' : {ret.PushBack(S_Magic_s05);break;}
- default : {ret.PushBack(S_SUndefined);break;}
- }
- return ret;
- }
- private function GetItemNamesFromHiddenSkill( skill : ESkill ) : array<name>
- {
- var ret : array<name>;
- switch( skill )
- {
- case S_Magic_s01 : {ret.PushBack('Warden Armor');break;}
- case S_Magic_s02 : {ret.PushBack('Warden Armor'); ret.PushBack('Shiadhal Armor');break;}
- case S_Magic_s03 : {ret.PushBack('Warden Armor');break;}
- case S_Magic_s04 : {ret.PushBack('Warden Armor');break;}
- case S_Magic_s05 : {ret.PushBack('Warden Armor');break;}
- case S_Magic_s08 : {ret.PushBack('Shiadhal Armor');break;}
- case S_Magic_s07 : {ret.PushBack('Shiadhal Armor');break;}
- case S_Magic_s09 : {ret.PushBack('Shiadhal Armor'); ret.PushBack('Astrogarus Armor');break;}
- case S_Magic_s06 : {ret.PushBack('Astrogarus Armor');break;}
- case S_Magic_s11 : {ret.PushBack('Astrogarus Armor');break;}
- case S_Magic_s14 : {ret.PushBack('Astrogarus Armor');break;}
- case S_Magic_s19 : {ret.PushBack('Astrogarus Armor');break;}
- case S_Sword_s03 : {ret.PushBack('Hunter Armor');break;}
- case S_Sword_s09 : {ret.PushBack('Hunter Armor');break;}
- case S_Sword_s10 : {ret.PushBack('Hunter Armor');break;}
- case S_Sword_s11 : {ret.PushBack('Hunter Armor');break;}
- case S_Sword_s01 : {ret.PushBack('Raven Armor');break;}
- case S_Sword_s02 : {ret.PushBack('Raven Armor');break;}
- case S_Alchemy_s03 : {ret.PushBack('Wanderer Armor');break;}
- case S_Alchemy_s04 : {ret.PushBack('Wanderer Armor');break;}
- case S_Alchemy_s17 : {ret.PushBack('Wanderer Armor'); ret.PushBack('Journeyman Armor');break;}
- case S_Alchemy_s13 : {ret.PushBack('Journeyman Armor');break;}
- case S_Sword_s07 : {ret.PushBack('Tracker Armor');break;}
- case S_Sword_s12 : {ret.PushBack('Tracker Armor');break;}
- case S_Sword_s13 : {ret.PushBack('Tracker Armor');break;}
- case S_Sword_s15 : {ret.PushBack('Tracker Armor');break;}
- case S_Perk_02 : {ret.PushBack('Tracker Armor');break;}
- case S_Perk_06 : {ret.PushBack('Oathbreaker Armor');break;}
- case S_Perk_07 : {ret.PushBack('Oathbreaker Armor');break;}
- default : {ret.PushBack('');break;}
- }
- return ret;
- }
- // modShieldSkills --- End --------------------------------------------------
- // modShieldCombat --- Start --------------------------------------------------
- private var hitShieldCount : int;
- private var previousAttacker : CActor;
- public function ProcessShieldParry(optional parryInfo : SParryInfo, optional isArrow : bool, optional shield : W3DLCShield)
- {
- var anim : CName;
- var rand : int;
- var parryDir : EPlayerParryDirection;
- var parryHeading : float;
- var staminaDrain : int;
- staminaDrain = StringToInt(theGame.GetInGameConfigWrapper().GetVarValue( 'DLCShieldMenu', 'staminaDrain' ));
- if(isArrow)
- {
- rand = RandRange(0,2);
- switch(rand){
- case 0:
- anim = 'man_npc_shield_block_rp_01';
- break;
- case 1:
- anim = 'man_npc_shield_block_rp_02';
- break;
- }
- thePlayer.ActionPlaySlotAnimationAsync( 'PLAYER_SLOT', anim, 0.2, 0.2 );
- parryHeading = GetParryHeading( parryInfo, parryDir ) ;
- DrainStamina(ESAT_FixedValue, staminaDrain);
- OnCombatActionStart();
- ClearCustomOrientationInfoStack();
- SetSlideTarget( parryInfo.attacker );
- SetCustomRotation( 'Parry', parryHeading, 1080.f, 0.1f, false );
- }
- else
- {
- rand = RandRange(0,2);
- switch(rand){
- case 0:
- anim = 'man_npc_shield_block_rp_01';
- break;
- case 1:
- anim = 'man_npc_shield_block_rp_02';
- break;
- }
- thePlayer.ActionPlaySlotAnimationAsync( 'PLAYER_SLOT', anim, 0.2, 0.2 );
- parryHeading = GetParryHeading( parryInfo, parryDir ) ;
- SetBehaviorVariable( 'parryDirection', (float)( (int)( parryDir ) ) );
- SetBehaviorVariable( 'parryDirectionOverlay', (float)( (int)( parryDir ) ) );
- SetBehaviorVariable( 'parryType', ChooseParryTypeIndex( parryInfo ) );
- OnCombatActionStart();
- ClearCustomOrientationInfoStack();
- SetSlideTarget( parryInfo.attacker );
- SetCustomRotation( 'Parry', parryHeading, 1080.f, 0.1f, false );
- IncDefendCounter();
- DrainStamina(ESAT_FixedValue, staminaDrain);
- if(parryInfo.attacker == previousAttacker){
- if(hitShieldCount > RandRange( (int)shield.GetStaggerMin() ,(int)shield.GetStaggerMax() ) ){
- parryInfo.attacker.AddEffectDefault( EET_Stagger, thePlayer, "ParryStagger" );
- hitShieldCount = 0;
- }
- hitShieldCount += 1;
- }
- else{
- hitShieldCount = 0;
- }
- previousAttacker = parryInfo.attacker;
- }
- }
- public function DestroyArrows(arrows : array<W3ArrowProjectile>)
- {
- var i : int;
- for(i = 0; i < arrows.Size(); i += 1)
- {
- arrows[i].AddTimer( 'TimeDestroy', 0.f, false );
- }
- }
- // modShieldCombat --- End --------------------------------------------------
- function PerformParryCheck( parryInfo : SParryInfo) : bool
- {
- var mult : float;
- var parryType : EParryType;
- var parryDir : EPlayerParryDirection;
- var parryHeading : float;
- var fistFightParry : bool;
- var action : W3DamageAction;
- var xmlStaminaDamage : float;
- var xmlStaminaDamageName : name = 'stamina_damage' ;
- var counter : int;
- var onHitCounter : SAbilityAttributeValue;
- // modShieldCombat --- Start --------------------------------------------------
- var itemId : SItemUniqueId;
- var shield : W3DLCShield;
- var npc : CNewNPC;
- var testedAngle, staminaNeeded : float;
- var infront, cantParryFromBehind : bool;
- cantParryFromBehind = theGame.GetInGameConfigWrapper().GetVarValue( 'DLCShieldMenu', 'cantParryFromBehind' );
- itemId = thePlayer.GetInventory().GetItemFromSlot('l_weapon');
- shield = (W3DLCShield)GetInventory().GetItemEntityUnsafe(itemId);
- npc = (CNewNPC)parryInfo.attacker;
- testedAngle = AngleDistance( VecHeading( npc.GetWorldPosition() - thePlayer.GetWorldPosition() ) , thePlayer.GetHeading() );
- if ( testedAngle < 100 && testedAngle > -70 )
- {
- infront = true;
- }
- else
- {
- if(!cantParryFromBehind)
- {
- infront = false;
- }
- else
- {
- if(shield)
- {
- return false;
- }
- }
- }
- if( shield && IsGuarded() && infront)
- {
- staminaNeeded = StringToFloat(theGame.GetInGameConfigWrapper().GetVarValue( 'DLCShieldMenu', 'staminaNeeded' ));
- if(GetStaminaPercents() < staminaNeeded/100)
- {
- return false;
- }
- ProcessShieldParry(parryInfo, , shield);
- shield.PlayEffect('light_block');
- return true;
- }
- // modShieldCombat --- End --------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement