//#############################################################################################
//#############################################################################################
//
//	Hilfsfunktionen
//	-----------------------------
//	
//	
//	
//
//#############################################################################################
//#############################################################################################

CONST INT FMODE_NONE	=	0;
CONST INT FMODE_FIST	=	1;
CONST INT FMODE_MELEE	=	2;
CONST INT FMODE_FAR		=	6;
CONST INT FMODE_MAGIC	=	8;

/********************************************************************************************
*	B_DrawWeapon()																			*
*	==============																			*
*																							*
********************************************************************************************/
func int B_DrawWeapon(var C_NPC n)
{
	PrintDebug("B_DrawWeapon!");
	if (!Npc_IsNear(n,other)) //Npc is near
	{
		PrintDebug("B_DrawWeaponFar");
		if (!Npc_HasEquippedRangedWeapon(n)&&!Npc_HasReadiedRangedWeapon(n)) // no RangedWeapon Equipped or in Hand	
		{
			PrintDebug("B_DrawWeaponFarUnequnread");
			AI_EquipBestRangedWeapon(n);
			if (Npc_HasEquippedRangedWeapon(n)) // wirklich Waffe in Inventory gefunden ?
			{
				PrintDebug("B_DrawWeaponFarUnequnreadEquip");
				AI_ReadyRangedWeapon(n); 
				return 1; // erfolgreich bewaffnet
			}
			else
			{
				PrintDebug("B_DrawWeaponFarNoWeap");
				if (Wld_DetectItem(n,ITEM_KAT_FF))// keine Waffe vielleicht gibt es ja eine in der Umgebung
				{	
					PrintDebug("B_DrawWeaponFarSeekWeap");
					AI_TakeItem(n,item); 
					AI_EquipBestRangedWeapon(n);
					if (Npc_HasEquippedRangedWeapon(n))
					{
						PrintDebug("B_DrawWeaponFarSeekWeapReady"); 
						AI_ReadyRangedWeapon(n);
						return 1;// Waffe gefunden und in der Hand
					}
					else 
					{
						Npc_SetToFightMode(self,FMODE_FIST);
					};
				};
			};
		}
		else
		{
			if (Npc_HasEquippedRangedWeapon(n))
			{
				PrintDebug("B_DrawWeaponFarEquippedWeap");
				AI_ReadyRangedWeapon(n);
				return 1;
			};
			if (!Npc_HasEquippedMeleeWeapon(n)&&!Npc_HasReadiedMeleeWeapon(n) &&  !Npc_IsInFightMode (n,FMODE_MELEE) && !Npc_IsInFightMode (n,FMODE_FAR))// Wenn schon keine Ranged, dann Melee Weapon
			{
				AI_EquipBestMeleeWeapon(n);
				if (Npc_HasEquippedMeleeWeapon(n))// War eine im Inventory
				{
					PrintDebug("DrawNearUnequippedReady");
					AI_ReadyMeleeWeapon(n);
					return 1;// Bewaffnung abgeschloßen
				
				}
				else
				{
					PrintDebug("ElseDrawNearUnequipped");
					if (Wld_DetectItem(n,ITEM_KAT_NF))// Keine Waffe im Inventory--> Suchen
					{
						PrintDebug("ElseDrawNearUnequippedTake");
						AI_TakeItem(n,item);
						AI_EquipBestMeleeWeapon(n);
						if (Npc_HasEquippedMeleeWeapon(n))
						{
							AI_ReadyMeleeWeapon(n);	
							return 1;// MeleeWeapon gefunden und in der Hand
						};
					};			
				};
			}
			else
			{
				if (Npc_HasEquippedMeleeWeapon(n))// Waffe schon equipped aber noch nicht in der Hand
				{
					AI_ReadyMeleeWeapon(n);
					return 1;
				};
			};
			
		};  
		    
	}       
	else    
	{	    
		PrintDebug("DrawNear");
		if (!Npc_HasEquippedMeleeWeapon(n)&&!Npc_HasReadiedMeleeWeapon(n))
		{   
			PrintDebug("DrawNearUnequipped");
			AI_EquipBestMeleeWeapon(n);
			if (Npc_HasEquippedMeleeWeapon(n))
			{
				PrintDebug("DrawNearUnequippedReady");
				AI_ReadyMeleeWeapon(n);
				return 1;
			
			}
			else
			{
				PrintDebug("ElseDrawNearUnequipped");
				if (Wld_DetectItem(n,ITEM_KAT_NF))
					{
						PrintDebug("ElseDrawNearUnequippedTake");
						AI_TakeItem(n,item);
						AI_EquipBestMeleeWeapon(n);
						if (Npc_HasEquippedMeleeWeapon(n))
						{
							AI_ReadyMeleeWeapon(n);	
							return 1;// MeleeWeapon gefunden und in der Hand
						};
					};			
			};
			return 1;
		}
		else 
		{
			if (Npc_HasEquippedMeleeWeapon (N))// Waffe schon equipped aber noch nicht in der Hand
			{
				AI_ReadyMeleeWeapon(n);
				return 1;
			};
		};
	};
	return 0;
	
};

func int B_SheathWeapon (var C_Npc n)
{
	PrintDebug("B_SheathWeapon");
	if (Npc_HasEquippedRangedWeapon(n))	
	{
		AI_UnEquipRangedWeapon (n);
		return 1;
	}
	else if (Npc_HasEquippedMeleeWeapon(n))
	{
		AI_UnEquipMeleeWeapon (n);
		return 1;
	};
	return 0;
};

/********************************************************************************************
*	B_Say()																					*
*	=======																					*
*																							*
********************************************************************************************/
func void B_Say(var C_NPC n, var string t)
{
	//Print(t);
	AI_TurnToNpc(self,other);
	AI_PointAtObj (n,other);
	AI_OutPutSVM(n,t);
	AI_StopPointAt(self);
};

/********************************************************************************************
*	B_LookAt()																				*
*	==========																				*
*																							*
********************************************************************************************/
func int B_LookAt(var C_NPC n1, var C_NPC n2 ,var float tim)
{
	if (Wld_DetectPlayer(n1))
	{
		AI_TurnToNpc	(n1,	n2);
		AI_LookAtNpc	(n1,	n2);
		AI_Wait			(n1,	tim);
		AI_StopLookAt	(n1);
		return 1;
	}
	else
	{
		return 0;
	};
};

/********************************************************************************************
*	B_HasDrawnWeapon()																		*
*	==================																		*
*																							*
********************************************************************************************/
func int B_HasDrawnWeapon (var C_Npc n)
{
	if ((Npc_IsInFightMode(n,FMODE_FIST)) || (Npc_IsInFightMode (n,FMODE_MELEE)) || (Npc_IsInFightMode (n,FMODE_FAR)))
	{
		return 1;
	}
	else 
	{
		return 0;
	};		
};

/******************************************************************************************** 
*	B_ReactToDamage()																		*
*	==================																		*
*																							* 
********************************************************************************************/ 
func void B_ReactToDamage (var C_Npc n)
{
	AI_TurnToSound (n);
	Print ("OM HURT");
};

/******************************************************************************************** 
*	AI_GotWP()																				*
*	==================																		*
*																							* 
********************************************************************************************/ 
func int AI_GotWP (var C_Npc n)
{
 	return 1;
};

func int C_AreWeStronger (var C_Npc n , var C_Npc o)
{
	if(n.level <= o.level)
	{
		return 0;
	}
	else
	{
		return 1;
	};
};

func int C_CanIFleeFrom (var C_Npc n)
{
	return 1;
};

func int C_MageTest (var C_Npc n)
{
	if ((n.guild == GIL_KDF) || (n.guild == GIL_KDW )) 
	{
		return 1;
	}
	else
	{
		return 0;
	};
};

func int C_AssessMagic (var C_Npc n)
{
	return 0;
};

func void B_GoAway (var C_Npc n)
{
	AI_GotoWP (n,Npc_GetNearestWp(n));
	if (self.guild >= 18)
	{
		PrintDebug ("... GoAwayBeast");
		AI_GotoWP (n,Npc_GetNextWp(n));
	};
	
};


