package Items
using RTDB, BaseStats, KnifeAttacks, Prereqs, Perks

[ notQueryable ]
Base_Knife : Base_Throwable
{
	string friendlyName = "w_melee_knife";
	dropObject = "smallItemDrop";
	CName[] tags += 
	[
		"Throwable", "Knife", "FinisherFront", "FinisherBack", "DriverCombatBikeWeapon"
	];
	fk< AttachmentSlot >[] placementSlots += 
	[
		"AttachmentSlots.ItemSlotHandgunRightJackie", "AttachmentSlots.ItemSlotHandgunLeftJackie"
	];
	fk< ItemType > itemType = "ItemType.Wea_Knife";
	triggerEffectName = "te_wea_melee_swing_light";
	fk< SlotItemPartListElement >[] slotPartList = 
	[
		{
			slot = "AttachmentSlots.Grip";
			fk< ItemPartListElement >[] itemPartList = 
			[
				{
					item = "Items.w_knife_common_grip";
				}, 
				{
					item = "Items.w_knife_tanto_grip";
				}, 
				{
					item = "Items.w_knife_combat_grip";
				}, 
				{
					item = "Items.w_knife_punk_grip";
				}, 
				{
					item = "Items.w_butchers_knife_common_grip";
				}, 
				{
					item = "Items.w_chefs_knife_common_grip";
				}
			];
		}
	];
	fk< WeaponFxPackage > fxPackage = "WeaponFxPackage.KnifeFxPackage";
	fk< Crosshair > crosshair = "Crosshairs.Melee_Knife";
	CName projectileTemplateName = "knife";
	bool useProjectileAppearance = false;
	float projectileSmartTargetingAngle = 18;
	float projectileSmartTargetingDistance = 15;
	CName effectiveRangeFalloffCurve = "StandardFalloff";
	fk< StatModifierGroup >[] statModifierGroups += 
	[
		"Items.Base_Knife_RPG_Stats", "Items.Base_Knife_Handling_Stats", "Items.Base_Knife_Misc_Stats", "Proficiencies.Weapon_CoolSkill_Passives", "Items.Base_Melee_Weapon_Damage_Type_Physical", "Items.Base_Melee_Weapon_Damage_Type_Physical_Min_Max"
	];
	fk< GameplayLogicPackage >[] OnAttach += 
	[
		"Items.KnifeWeaponStealthBonus", "GLP.HoldingKnife"
	];
	fk< StatPool >[] statPools += 
	[
		"BaseStatPools.ThrowRecovery"
	];
	fk< Attack >[] attacks += 
	[
		"KnifeAttacks.KnifeComboAttack1", "KnifeAttacks.KnifeComboAttack2", "KnifeAttacks.KnifeComboAttack3", "KnifeAttacks.KnifeComboAttack4", "KnifeAttacks.KnifeMountedComboAttack1", "KnifeAttacks.KnifeMountedComboAttack2", "KnifeAttacks.KnifeMountedComboAttack3", "KnifeAttacks.KnifeMountedComboAttack4", "KnifeAttacks.KnifeFinalAttack1", "KnifeAttacks.KnifeFinalAttack2", "KnifeAttacks.KnifeFinalAttack3", "KnifeAttacks.KnifeFinalAttack4", "KnifeAttacks.KnifeFinalAttack5", "KnifeAttacks.KnifeFinalAttack6", "KnifeAttacks.KnifeMountedFinalAttack1", "KnifeAttacks.KnifeMountedFinalAttack2", "KnifeAttacks.KnifeMountedFinalAttack3", "KnifeAttacks.KnifeMountedFinalAttack4", "KnifeAttacks.KnifeMountedFinalAttack5", "KnifeAttacks.KnifeMountedFinalAttack6", "KnifeAttacks.KnifeStrongAttack1", "KnifeAttacks.KnifeStrongAttack2", "KnifeAttacks.KnifeStrongAttack3", "KnifeAttacks.KnifeMountedStrongAttack1", "KnifeAttacks.KnifeMountedStrongAttack2", "KnifeAttacks.KnifeMountedStrongAttack3", "KnifeAttacks.KnifeJumpAttack", "KnifeAttacks.KnifeSprintAttack", "KnifeAttacks.KnifeCrouchAttack", "KnifeAttacks.KnifeBlockAttack", "KnifeAttacks.KnifeThrowAttack", "KnifeAttacks.KnifeThrowAttackProjectile", "KnifeAttacks.TantoThrowAttackProjectile", "KnifeAttacks.NeurotoxinKnifeThrowAttackProjectile", "KnifeAttacks.PunkKnifeThrowAttackProjectile", "KnifeAttacks.ChefKnifeThrowAttackProjectile", "KnifeAttacks.KurtKnifeThrowAttackProjectile", "KnifeAttacks.KnifeSafeAttack", "NPCAttacks.KurtTakedownAttack01", "NPCAttacks.KurtTakedownAttack02", "NPCAttacks.KurtTakedownAttackFar02"
	];
	audioWeaponConfiguration = "audio_melee_metadata_knife";
	enableNpcRPGData = true;
	npcRPGData = 
	{
		statModifierGroups += 
		[
		];
	} : Base_Knife_NPC_Data;
}

Base_Knife_RPG_Stats : StatModifierGroup
{
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.Weight";
			modifierType = "Additive";
			value = 2.3f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.BlockFactor";
			modifierType = "Additive";
			value = 0.5f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HeadshotDamageMultiplier";
			modifierType = "Additive";
			value = 1.5f;
		} : ConstantStatModifier
	];
}

Base_Knife_Handling_Stats : StatModifierGroup
{
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.Range";
			modifierType = "Additive";
			value = 1.5f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.AttacksNumber";
			modifierType = "Additive";
			value = 3;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitReactionFactor";
			modifierType = "Additive";
			value = -1.0f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitWoundsFactor";
			modifierType = "Multiplier";
			value = 1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitDismembermentFactor";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.MeleeAttackDuration";
			modifierType = "Additive";
			value = 0.3f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.MeleeAttackComboDuration";
			modifierType = "Additive";
			value = 0.325f;
		} : ConstantStatModifier, 
		{
			float value = 5.f;
		} : KnockdownImpulseModifier, 
		{
			float value = 5.f;
		} : BaseKnockdownImpulseModifier, 
		{
			float value = 5.f;
		} : BaseEvadeImpulseModifier, 
		{
			float value = 3.f;
		} : PhysicalImpulseModifier, 
		{
			statType = "BaseStats.StaminaCostToBlock";
			modifierType = "Multiplier";
			value = 0.757f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.BaseMeleeAttackStaminaCost";
			modifierType = "Additive";
			value = 6f;
		} : ConstantStatModifier
	];
}

Base_Knife_Misc_Stats : StatModifierGroup
{
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.CanWeaponInfinitlyCombo";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.CanMeleeInfinitelyCombo";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HasMeleeTargeting";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		"BaseStats.EquipDurationModifier", "BaseStats.UnequipDurationModifier", {
			statType = "BaseStats.ZoomLevel";
			modifierType = "Additive";
			value = 0.0f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.EquipDuration_First";
			modifierType = "Additive";
			value = 0.5f;
		} : ConstantStatModifier, 
		{
			value = 20.f;
		} : EffectiveRangeModifier
	];
}

Base_Knife_NPC_Stats : StatModifierGroup
{
	statModifiers = 
	[
		{
			statType = "BaseStats.Range";
			modifierType = "Additive";
			value = 1.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.CanBlock";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.StaminaCostToBlock";
			modifierType = "Additive";
			value = 5.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitDismembermentFactor";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitReactionFactor";
			modifierType = "Multiplier";
			value = 0.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 = 5.f;
		} : KnockdownImpulseModifier, 
		{
			float value = 5.f;
		} : BaseKnockdownImpulseModifier, 
		{
			float value = 5.f;
		} : BaseEvadeImpulseModifier, 
		{
			float value = 3.f;
		} : PhysicalImpulseModifier, 
		{
			value = 0.266f;
		} : EquipItemTime_GangModifier, 
		{
			value = 0.7f;
		} : EquipAnimationDuration_GangModifier, 
		{
			value = 0.833f;
		} : EquipActionDuration_GangModifier, 
		{
			value = 0.5f;
		} : UnequipItemTime_GangModifier, 
		{
			value = 0.767f;
		} : UnequipAnimationDuration_GangModifier, 
		{
			value = 1.167f;
		} : UnequipDuration_GangModifier, 
		{
			value = 0.266f;
		} : EquipItemTime_CorpoModifier, 
		{
			value = 0.7f;
		} : EquipAnimationDuration_CorpoModifier, 
		{
			value = 0.833f;
		} : EquipActionDuration_CorpoModifier, 
		{
			value = 0.5f;
		} : UnequipItemTime_CorpoModifier, 
		{
			value = 0.767f;
		} : UnequipAnimationDuration_CorpoModifier, 
		{
			value = 1.167f;
		} : UnequipDuration_CorpoModifier
	];
}

Base_Knife_NPC_Data : Base_Throwable_NPC_RPG_Data
{
	statModifierGroups += 
	[
		"Items.Base_Knife_NPC_Stats"
	];
}

w_knife_common_grip : ItemWeaponRoot
{
	string friendlyName = "w_knife_common_grip";
	CName appearanceResourceName = "w_knife_common_grip";
}

w_knife_tanto_grip : ItemWeaponRoot
{
	string friendlyName = "w_knife_tanto_grip";
	CName appearanceResourceName = "w_knife_tanto_grip";
}

w_knife_combat_grip : ItemWeaponRoot
{
	string friendlyName = "w_knife_combat_grip";
	CName appearanceResourceName = "w_knife_combat_grip";
}

w_knife_punk_grip : ItemWeaponRoot
{
	string friendlyName = "w_knife_punk_grip";
	CName appearanceResourceName = "w_knife_punk_grip";
}

w_butchers_knife_common_grip : ItemWeaponRoot
{
	string friendlyName = "w_butchers_knife_common_grip";
	CName appearanceResourceName = "w_butchers_knife_common_grip";
}

w_chefs_knife_common_grip : ItemWeaponRoot
{
	string friendlyName = "w_chefs_knife_common_grip";
	CName appearanceResourceName = "w_chefs_knife_common_grip";
}

