class TakedownGameEffectHelper
{

	public static function FillTakedownData( executionOwner : weak< GameObject >, activator : weak< GameObject >, target : weak< GameObject >, effectName : CName, effectTag : CName, optional statusEffect : String ) : Bool
	{
		var gameEffect : EffectInstance;
		var targetPosition : Vector4;
		var broadcaster : StimBroadcasterComponent;
		gameEffect = GameInstance.GetGameEffectSystem( activator.GetGame() ).CreateEffectStatic( effectName, effectTag, activator );
		if( !( ( gameEffect || activator ) || target ) )
		{
			return false;
		}
		targetPosition = target.GetWorldPosition();
		EffectData.SetVector( gameEffect.GetSharedData(), GetAllBlackboardDefs().EffectSharedData.position, targetPosition );
		EffectData.SetEntity( gameEffect.GetSharedData(), GetAllBlackboardDefs().EffectSharedData.entity, target );
		if( IsStringValid( statusEffect ) )
		{
			EffectData.SetString( gameEffect.GetSharedData(), GetAllBlackboardDefs().EffectSharedData.effectorRecordName, statusEffect );
		}
		gameEffect.Run();
		broadcaster = activator.GetStimBroadcasterComponent();
		if( broadcaster )
		{
			broadcaster.AddActiveStimuli( executionOwner, gamedataStimType.IllegalInteraction, -1.0 );
		}
		return true;
	}

}

