Advertisement
Guest User

Untitled

a guest
Nov 16th, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function RegisterForEvents(XComGameState_Effect EffectGameState)
  2. {
  3.     local X2EventManager EventMgr;
  4.     local Object EffectObj;
  5.     local XComGameState_Unit UnitState;
  6.    
  7.     EventMgr = `XEVENTMGR;
  8.  
  9.     EffectObj = EffectGameState;
  10.     UnitState = XComGameState_Unit(`XCOMHISTORY.GetGameStateForObjectID(EffectGameState.ApplyEffectParameters.SourceStateObjectRef.ObjectID));
  11.  
  12.     EventMgr.RegisterForEvent(EffectObj, 'AbilityActivated', BruteStrength_Listener, ELD_OnVisualizationBlockCompleted,, UnitState,, EffectGameState)
  13. }
  14.  
  15. static function EventListenerReturn BruteStrength_Listener(Object EventData, Object EventSource, XComGameState GameState, name InEventID, Object CallbackData)
  16. {
  17.     local XComGameState_Unit            UnitState;
  18.     local XComGameState_Ability         AbilityState;
  19.     local X2AbilityTemplate             AbilityTemplate;
  20.     local XComGameState_Effect          EffectState;
  21.     local XComGameState                 NewGameState;
  22.        
  23.     AbilityState = XComGameState_Ability(EventData);
  24.     UnitState = XComGameState_Unit(EventSource);
  25.     EffectState = XComGameState_Effect(CallbackData);
  26.  
  27.     `LOG("X2Effect_BruteStrength listener",, 'IRIBRUTE');
  28.     `LOG(UnitState.GetFullName() @ AbilityState.GetMyFriendlyName() @ EffectState.GetMyTemplateName(),, 'IRIBRUTE');
  29.  
  30.     if (AbilityState != none && UnitState != none && EffectState != none)
  31.     {
  32.         AbilityTemplate = AbilityState.GetMyTemplate();
  33.  
  34.         //  Excessive checks to make sure Brute Strength is removed only when it's supposed to
  35.         if (AbilityState.SourceWeapon.ObjectID == EffectState.ApplyEffectParameters.ItemStateObjectRef.ObjectID &&
  36.             AbilityTemplate.Hostility == eHostility_Offensive && AbilityTemplate.IsMelee() && AbilityDealsDamage(AbilityTemplate))
  37.         {
  38.             NewGameState = class'XComGameStateContext_ChangeContainer'.static.CreateChangeState("Removing Brute Strength from: " @ UnitState.GetFullName());
  39.  
  40.             EffectState = XComGameState_Effect(NewGameState.ModifyStateObject(class'XComGameState_Effect', EffectState.ObjectID));
  41.  
  42.             EffectState.RemoveEffect(NewGameState, NewGameState, true);
  43.  
  44.             `XCOMGAME.GameRuleset.SubmitGameState(NewGameState);
  45.  
  46.             `LOG("Removing effect",, 'IRIBRUTE');
  47.         }
  48.     }
  49.     return ELR_NoInterrupt;
  50. }
  51.  
  52. static function bool AbilityDealsDamage(const X2AbilityTemplate Template)
  53. {
  54.     local X2Effect Effect;
  55.  
  56.     foreach Template.AbilityTargetEffects(Effect)
  57.     {
  58.         //the ApplyOnHit condition allows to ignore the default.WeaponUpgradeMissDamage effect
  59.         if (X2Effect_ApplyWeaponDamage(Effect) != none && Effect.bApplyOnHit)  
  60.         {
  61.             return true;
  62.         }
  63.     }
  64.     foreach Template.AbilityMultiTargetEffects(Effect)
  65.     {
  66.         if (X2Effect_ApplyWeaponDamage(Effect) != none && Effect.bApplyOnHit)
  67.         {
  68.             return true;
  69.         }
  70.     }
  71.     return false;
  72. }
  73.  
  74. function int GetAttackingDamageModifier(XComGameState_Effect EffectState, XComGameState_Unit Attacker, Damageable TargetDamageable, XComGameState_Ability AbilityState, const out EffectAppliedData AppliedData, const int CurrentDamage, optional XComGameState NewGameState)
  75. {
  76.     local XComGameState_Item    ItemState;
  77.  
  78.     ItemState = AbilityState.GetSourceWeapon();
  79.     if (ItemState != none && ItemState.ObjectID == AppliedData.ItemStateObjectRef.ObjectID)
  80.     {
  81.         return CurrentDamage * 0.5f;
  82.     }
  83.     else return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement