Advertisement
Guest User

Untitled

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