package Items
using RTDB, BaseStats, WeaponFxPackage, AttachmentSlots, Prereqs

[ notQueryable ]
Base_Precision_Rifle : Base_Weapon
{
	CName[] tags += 
	[
		"inventoryDoubleSlot"
	];
	buyPrice += 
	[
		"Price.PrecisionSniperRifleMultiplier"
	];
	sellPrice += 
	[
		"Price.PrecisionSniperRifleMultiplier"
	];
	fk< AttachmentSlot >[] placementSlots += 
	[
		"AttachmentSlots.ItemSlotSniperRifle"
	];
	fk< ItemType > itemType = "ItemType.Wea_PrecisionRifle";
	triggerEffectName = "te_wea_aim_slow";
	fk< TriggerMode >[] triggerModes = 
	[
		"TriggerMode.SemiAuto"
	];
	statModifierGroups += 
	[
		"Items.Base_Precision_Rifle_RPG_Stats", "Items.Base_Precision_Rifle_Misc_Stats", "Items.Base_Precision_Rifle_Sway_Stats", "Items.Base_PlayerState_Spread_Stats"
	];
	Vector3 position = ( 0.00f, 0.0f, 0.00f );
	float offset = -0.1f;
	fk< GameplayLogicPackage >[] OnAttach += 
	[
		{
			animationWrapperOverrides = 
			[
				"w_base_rifle_precision"
			];
		} : GameplayLogicPackage
	];
}

Base_Precision_Rifle_RPG_Stats : StatModifierGroup
{
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.Weight";
			modifierType = "Additive";
			value = 6.8f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HeadshotDamageMultiplier";
			modifierType = "Additive";
			value = 1.5f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WeaponTypeToStaminaCost";
			modifierType = "Multiplier";
			value = 250f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WeaponVehicleDamagePercentBonus";
			modifierType = "Additive";
			value = 0.7f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.StaminaCostReduction";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.PrecisionRifleStaminaCostReduction";
			opSymbol = "*";
			value = 1f;
		} : CombinedStatModifier
	];
}

Base_Precision_Rifle_Misc_Stats : StatModifierGroup
{
	fk< StatModifier >[] statModifiers = 
	[
		{
			float value = 0.6f;
		} : UnequipDurationModifier, 
		{
			float value = 0.3f;
		} : EquipDurationModifier, 
		"BaseStats.SlideWhenLeaningOutOfCoverModifier", "BaseStats.BlockLocomotionWhenLeaningOutOfCoverModifier", {
			statType = "BaseStats.BulletMagnetismDefaultAngle";
			modifierType = "Additive";
			value = 0.5f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.BulletMagnetismHighVelocityAngle";
			modifierType = "Additive";
			value = 1.5f;
		} : ConstantStatModifier, 
		{
			float value = 50.f;
		} : EffectiveRangeModifier, 
		{
			float value = 1.f;
		} : RecoilRecoveryMinSpeedModifier, 
		{
			float value = 30.f;
		} : RecoilMaxLengthModifier, 
		{
			float value = 20.f;
		} : PhysicalImpulseModifier, 
		{
			float value = 30.f;
		} : KnockdownImpulseModifier, 
		{
			float value = 30.f;
		} : BaseKnockdownImpulseModifier, 
		{
			float value = 30.f;
		} : BaseEvadeImpulseModifier, 
		{
			value = 0.25f;
		} : AimInTimeModifier, 
		{
			value = 0.25f;
		} : AimOutTimeModifier, 
		{
			value = 150.f;
		} : MaximumRangeModifier
	];
}

Base_Precision_Rifle_DeadReckoning_Stats : StatModifierGroup
{
	statModifiers = 
	[
		{
			statType = "BaseStats.BulletDeadReckoningEnabled";
			modifierType = "Additive";
			value = 1.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.BulletDeadReckoningMinimumSpeed";
			modifierType = "Additive";
			value = 0.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.BulletDeadReckoningMaxRange";
			modifierType = "Additive";
			value = 40.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.BulletDeadReckoningMaxAngleCorrection";
			modifierType = "Additive";
			value = 25.f;
		} : ConstantStatModifier
	];
}

Base_Precision_Rifle_NPC_Stats : StatModifierGroup
{
	statModifiers = 
	[
		{
			statType = "BaseStats.CanUseMediumRing";
			modifierType = "Additive";
			value = 1.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.CanUseFarRing";
			modifierType = "Additive";
			value = 1.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.CanUseExtremeRing";
			modifierType = "Additive";
			value = 1.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.NPCAnimationTime";
			modifierType = "Additive";
			value = 1.2f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitReactionFactor";
			modifierType = "Additive";
			value = 2.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitWoundsFactor";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitDismembermentFactor";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			float value = 20.f;
		} : PhysicalImpulseModifier, 
		{
			float value = 30.f;
		} : KnockdownImpulseModifier, 
		{
			float value = 30.f;
		} : BaseKnockdownImpulseModifier, 
		{
			float value = 30.f;
		} : BaseEvadeImpulseModifier, 
		{
			value = 0.367f;
		} : EquipItemTime_GangModifier, 
		{
			value = 1.067f;
		} : EquipAnimationDuration_GangModifier, 
		{
			value = 1.4f;
		} : EquipActionDuration_GangModifier, 
		{
			value = 0.867f;
		} : UnequipItemTime_GangModifier, 
		{
			value = 1.0f;
		} : UnequipAnimationDuration_GangModifier, 
		{
			value = 1.267f;
		} : UnequipDuration_GangModifier, 
		{
			value = 0.4f;
		} : EquipItemTime_CorpoModifier, 
		{
			value = 1.0f;
		} : EquipAnimationDuration_CorpoModifier, 
		{
			value = 1.4f;
		} : EquipActionDuration_CorpoModifier, 
		{
			value = 0.8f;
		} : UnequipItemTime_CorpoModifier, 
		{
			value = 1.267f;
		} : UnequipAnimationDuration_CorpoModifier, 
		{
			value = 1.4f;
		} : UnequipDuration_CorpoModifier
	];
}

Base_Precision_Rifle_Sway_Stats : StatModifierGroup
{
	statModifiers = 
	[
		{
			value = 0.f;
		} : SwayResetOnAimStartModifier, 
		{
			value = 7.f;
		} : SwayTraversalTimeModifier, 
		{
			value = 2.5f;
		} : SwaySideMaximumAngleDistanceModifier, 
		{
			value = 2.f;
		} : SwaySideMinimumAngleDistanceModifier, 
		{
			value = 50.f;
		} : SwaySideTopAngleLimitModifier, 
		{
			value = 50.f;
		} : SwaySideBottomAngleLimitModifier, 
		{
			value = 0.3f;
		} : SwaySideStepChangeMaximumFactorModifier, 
		{
			value = 0.2f;
		} : SwaySideStepChangeMinimumFactorModifier, 
		{
			value = 0.7f;
		} : SwayCurvatureMaximumFactorModifier, 
		{
			value = 0.7f;
		} : SwayCurvatureMinimumFactorModifier, 
		{
			value = 0.165f;
		} : SwayCenterMaximumAngleOffsetModifier, 
		{
			value = 0.0f;
		} : SwayInitialOffsetRandomFactorModifier, 
		{
			value = 1.f;
		} : SwayStartDelayModifier, 
		{
			value = 3.0f;
		} : SwayStartBlendTimeModifier, 
		{
			statType = "BaseStats.RecoilDriftRandomRangeMin";
			modifierType = "Additive";
			value = 0.2f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.RecoilDriftRandomRangeMax";
			modifierType = "Additive";
			value = 0.3f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.RecoilMagForFullDrift";
			modifierType = "Additive";
			value = 1.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.RecoilAnimation";
			modifierType = "Additive";
			value = 1.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.SpreadAnimation";
			modifierType = "Additive";
			value = 1.f;
		} : ConstantStatModifier
	];
}

Base_Precision_Rifle_Mult_Stats : StatModifierGroup
{
	statModifiers = [];
}

Base_Precision_Rifle_NPC_Data : Base_NPC_RPG_Data
{
	statModifiers += 
	[
		"AttackModifier.PrecisionRifleMinTBH", "AttackModifier.PrecisionRifleMinLineOfSight"
	];
	statModifierGroups += 
	[
		"Items.Base_Precision_Rifle_NPC_Stats"
	];
}

[ notQueryable ]
Base_Power_Precision_Rifle : Base_Precision_Rifle
{
	buyPrice += 
	[
		"Price.PowerWeapon"
	];
	sellPrice += 
	[
		"Price.PowerWeapon"
	];
	tags += 
	[
		"PowerWeapon"
	];
	fk< ItemBlueprint > blueprint = "Items.Base_Power_Precision_Sniper_Rifle_NoMuzzle_Blueprint";
	rangedAttacks = "Attacks.PowerRoundsBulletPackage";
	previewEffectName = "weaponPreview";
	previewEffectTag = "ricochet";
	statModifierGroups += 
	[
		"Items.Base_Power_Stats", "Items.Base_Power_Assault_Rifle_Mult_Stats", "Items.Base_Power_Precision_Rifle_Stats", "Items.Base_Precision_Rifle_DeadReckoning_Stats"
	];
}

Base_Power_Precision_Rifle_Stats : StatModifierGroup
{
	statModifiers = 
	[
		{
			value = 0.05f;
		} : RicochetChanceModifier, 
		{
			statType = "BaseStats.RicochetChance";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.HasPowerGrip";
			opSymbol = "*";
			value = 0.95f;
		} : CombinedStatModifier, 
		{
			value = 1.f;
		} : RicochetCountModifier, 
		{
			value = 10.f;
		} : RicochetTargetSearchAngleModifier, 
		{
			value = 0.f;
		} : RicochetMinAngleModifier, 
		{
			value = 45.f;
		} : RicochetMaxAngleModifier
	];
}

Base_Power_Precision_Rifle_Mult_Stats : StatModifierGroup
{
	statModifiers += 
	[
		{
			column = "amount_of_possible_mods_for_power_prsr_to_quality";
		} : ModsAmountInGenerationPoolCurveModifier
	];
}

Base_Power_Precision_Rifle_NPC_Data : Base_Precision_Rifle_NPC_Data
{
	statModifierGroups += 
	[
	];
	statModifiers += 
	[
		{
			column = "amount_of_possible_mods_for_power_prsr_to_quality";
		} : ModsAmountInGenerationPoolCurveModifier
	];
}

[ notQueryable ]
Base_Tech_Precision_Rifle : Base_Precision_Rifle
{
	buyPrice += 
	[
		"Price.TechWeapon"
	];
	sellPrice += 
	[
		"Price.TechWeapon"
	];
	tags += 
	[
		"TechWeapon"
	];
	blueprint = "Items.Base_Tech_Precision_Sniper_Rifle_NoAttachments_Blueprint";
	statModifierGroups += 
	[
		"Items.Base_Tech_Stats", "Items.Base_Tech_Precision_Rifle_Mult_Stats", "Items.Base_Precision_Rifle_DeadReckoning_Stats"
	];
}

Base_Tech_Precision_Rifle_Mult_Stats : StatModifierGroup
{
	statModifiers += 
	[
		"AttackModifier.TechWeaponDPSReduction", {
			column = "amount_of_possible_mods_for_tech_prsr_to_quality";
		} : ModsAmountInGenerationPoolCurveModifier
	];
}

Base_Tech_Precision_Rifle_RPG_Stats : StatModifierGroup
{
	statModifiers = [];
}

Base_Tech_Precision_Rifle_NPC_Data : Base_Precision_Rifle_NPC_Data
{
	statModifierGroups += 
	[
	];
	statModifiers += 
	[
		{
			column = "amount_of_possible_mods_for_tech_prsr_to_quality";
		} : ModsAmountInGenerationPoolCurveModifier
	];
}

[ notQueryable ]
Base_Smart_Precision_Rifle : Base_Precision_Rifle
{
	tags += 
	[
		"Smart", "SmartWeapon"
	];
	buyPrice += 
	[
		"Price.SmartWeapon"
	];
	sellPrice += 
	[
		"Price.SmartWeapon"
	];
	blueprint = "Items.Base_Smart_Precision_Sniper_Rifle_NoAttachments_Blueprint";
	statModifierGroups += 
	[
		"Items.Base_Smart_Stats", "Items.Base_Smart_Precision_Rifle_Mult_Stats"
	];
}

Base_Smart_Precision_Rifle_Mult_Stats : StatModifierGroup
{
	statModifiers += 
	[
		"AttackModifier.SmartWeaponDPSReduction", {
			statType = "BaseStats.ItemRequiresSmartLink";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			column = "amount_of_possible_mods_for_smart_prsr_to_quality";
		} : ModsAmountInGenerationPoolCurveModifier
	];
}

Base_Smart_Precision_Rifle_NPC_Data : Base_Precision_Rifle_NPC_Data
{
	statModifierGroups += 
	[
		"Items.Base_NPC_SmartGun_Stats"
	];
	statModifiers += 
	[
		{
			column = "amount_of_possible_mods_for_smart_prsr_to_quality";
		} : ModsAmountInGenerationPoolCurveModifier
	];
}

