Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class X2Effect_BruteStrength extends X2Effect_Persistent;
- function RegisterForEvents(XComGameState_Effect EffectGameState)
- {
- local X2EventManager EventMgr;
- local Object EffectObj;
- local XComGameState_Unit UnitState;
- EventMgr = `XEVENTMGR;
- EffectObj = EffectGameState;
- UnitState = XComGameState_Unit(`XCOMHISTORY.GetGameStateForObjectID(EffectGameState.ApplyEffectParameters.SourceStateObjectRef.ObjectID));
- EventMgr.RegisterForEvent(EffectObj, 'AbilityActivated', BruteStrength_Listener, ELD_OnStateSubmitted,, UnitState,, EffectGameState);
- }
- static function EventListenerReturn BruteStrength_Listener(Object EventData, Object EventSource, XComGameState GameState, name InEventID, Object CallbackData)
- {
- local XComGameState_Unit UnitState;
- local XComGameState_Ability AbilityState;
- local X2AbilityTemplate AbilityTemplate;
- local XComGameState_Effect EffectState;
- local XComGameState NewGameState;
- AbilityState = XComGameState_Ability(EventData);
- UnitState = XComGameState_Unit(EventSource);
- EffectState = XComGameState_Effect(CallbackData);
- `LOG("X2Effect_BruteStrength listener",, 'IRIBRUTE');
- `LOG(UnitState.GetFullName() @ AbilityState.GetMyFriendlyName() @ EffectState.GetMyTemplateName(),, 'IRIBRUTE');
- if (AbilityState != none && UnitState != none && EffectState != none)
- {
- AbilityTemplate = AbilityState.GetMyTemplate();
- // Excessive checks to make sure Brute Strength is removed only when it's supposed to
- if (AbilityState.SourceWeapon.ObjectID == EffectState.ApplyEffectParameters.ItemStateObjectRef.ObjectID &&
- AbilityTemplate.Hostility == eHostility_Offensive && AbilityTemplate.IsMelee() && AbilityDealsDamage(AbilityTemplate))
- {
- NewGameState = class'XComGameStateContext_ChangeContainer'.static.CreateChangeState("Removing Brute Strength from: " @ UnitState.GetFullName());
- EffectState = XComGameState_Effect(NewGameState.ModifyStateObject(class'XComGameState_Effect', EffectState.ObjectID));
- EffectState.RemoveEffect(NewGameState, NewGameState, true);
- `XCOMGAME.GameRuleset.SubmitGameState(NewGameState);
- `LOG("Removing effect",, 'IRIBRUTE');
- }
- }
- return ELR_NoInterrupt;
- }
- static function bool AbilityDealsDamage(const X2AbilityTemplate Template)
- {
- local X2Effect Effect;
- foreach Template.AbilityTargetEffects(Effect)
- {
- //the ApplyOnHit condition allows to ignore the default.WeaponUpgradeMissDamage effect
- if (X2Effect_ApplyWeaponDamage(Effect) != none && Effect.bApplyOnHit)
- {
- return true;
- }
- }
- foreach Template.AbilityMultiTargetEffects(Effect)
- {
- if (X2Effect_ApplyWeaponDamage(Effect) != none && Effect.bApplyOnHit)
- {
- return true;
- }
- }
- return false;
- }
- // Increase damage from one attack.
- function int GetAttackingDamageModifier(XComGameState_Effect EffectState, XComGameState_Unit Attacker, Damageable TargetDamageable, XComGameState_Ability AbilityState, const out EffectAppliedData AppliedData, const int CurrentDamage, optional XComGameState NewGameState)
- {
- local XComGameState_Item ItemState;
- ItemState = AbilityState.GetSourceWeapon();
- // Check that Ability that activated GetAttackingDamageModifier comes from the same weapon as the ability that applied this effect.
- if (ItemState != none && ItemState.ObjectID == AppliedData.ItemStateObjectRef.ObjectID)
- {
- // 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.
- if (NewGameState != none)
- {
- //EffectState.RemoveEffect(NewGameState, NewGameState, true);
- }
- return CurrentDamage * 5;
- }
- else return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement