#ifndef _mr_api_
#define _mr_api_
objectdef MRBotApi
{
    variable string test = "test MRAPI";
    member:bool IsForMe(string forWhoTarget)
    {
        variable string target = ${forWhoTarget}
        variable string prefix = ${forWhoTarget.Token[1, ":"]}
        variable bool negate = FALSE

        echo "IsForMe ${forWhoTarget} ${prefix} ${target}"
        
 
        if ${target.Count[":"]} > 0
        {
            negate:Set[${prefix.Equal["not"]}]
            target:Set[${forWhoTarget.Token[2, ":"]}];
        }

        if ${prefix.Equal["igw"]}
        {
            return ${Me.Group["${target}"](exists)}
        }
        
        if ${prefix.Equal["igwbn"]}
        {

            return !${Me.Name.Equal["${target}"]) && ${Me.Group["${target}"](exists)}
        }

        if ${prefix.Equal["irw"]}
        {
            return ${Me.Raid["${target}"](exists)}
        }
        
        if ${prefix.Equal["irwbn"]}
        {
            return !${Me.Name.Equal["${target}"]) && ${Me.Raid["${target}"](exists)}
        }

        if ${target.Equal["${Me.Name}"]} || ${target.Equal["all"]}
        {
            echo "Name match ${negate.Not}"
            return ${negate.Not};
        }

        if ${target.Equal["${Me.Class}"]} || ${target.Equal["${Me.SubClass}"]} || ${target.Equal["${Me.Archetype}"]}
        {
            return ${negate.Not};
        }

        if ${target.Equal["melee"]} && (${Me.Archetype.Equal["fighter"]} || ${Me.Archetype.Equal["scout"]})
        {
            echo "melee match"
            return ${negate.Not};
        }

        if ${target.Equal["caster"]} && (${Me.Archetype.Equal["mage"]} || ${Me.Archetype.Equal["priest"]})
        {
            return ${negate.Not};
        }
        

        return ${negate}
    }

    function MoveTo(string forWho, point3f location, float minDistance = 0)
    {
        echo "Moving to ${location}"
        if ${This.IsForMe["${forWho}"]}
        {
            MRNav:MoveTo["${location}"]
        }
        else
        {
            echo "${forWho} NotForMe"
        }
    }

    function WaitForMoveTo(string forWho, point3f location, float minDistance = 0)
    {
        echo "Waiting for move to ${location}"
         while ${Math.Distance[${Me.X},${Me.Y},${Me.Z},${location.X},${location.Y},${location.Z}]} > ${minDistance}
            {
                echo "waiting for path to complete ${Math.Distance[${Me.X},${Me.Y},${Me.Z},${location.X},${location.Y},${location.Z}]}"
                wait 5
            }
	}

	function ActivateSpecial(string ActorName, float X, float Y, float Z)
	{
		call TestArrivalCoord  ${X} ${Y} ${Z}
		if (!${Return})
			call MoveTo "${ActorName}" ${X} ${Y} ${Z}
		MR:Special["${Me.Name}"]
		wait 50
	}

	function ActivateVerbOn(string ActorName, string verb, bool UseID)
	{
		echo do ${verb} on ${ActorName} (${UseID})
		if ${UseID}
			eq2execute apply_verb ${Actor[Query,Name=="${ActorName}"].ID} "${verb}"
		else
			MR:ApplyVerbForWho["${Me.Name}","${ActorName}","${verb}"]
		wait 50
	}

	;===================================================================================
	;long list below
	;

	function DescribeActor(int ActorID)
	{
		echo ID:				${ActorID}
		echo Name:				${Actor[${ActorID}].Name}
		echo LastName:			${Actor[${ActorID}].LastName}
		echo Health:			${Actor[${ActorID}].Health}
		echo Power:				${Actor[${ActorID}].Power}
		echo Level:				${Actor[${ActorID}].Level}
		echo EffectiveLevel:	${Actor[${ActorID}].EffectiveLevel}
		echo TintFlags:			${Actor[${ActorID}].TintFlags}
		echo VisualVariant:		${Actor[${ActorID}].VisualVariant}
		echo Mood:				${Actor[${ActorID}].Mood}
		echo CurrentAnimation:	${Actor[${ActorID}].CurrentAnimation}
		echo Overlay:			${Actor[${ActorID}].Overlay}
		echo Aura:				${Actor[${ActorID}].Aura}
		echo Gender:			${Actor[${ActorID}].Gender}
		echo Race:				${Actor[${ActorID}].Race}
		echo Class:				${Actor[${ActorID}].Class}
		echo Guild:				${Actor[${ActorID}].Guild}
		echo Type:				${Actor[${ActorID}].Type}
		echo SuffixTitle:		${Actor[${ActorID}].SuffixTitle}
		echo ConColor:			${Actor[${ActorID}].ConColor}
		echo Distance: 			${Actor[${ActorID}].Distance}
		echo X					${Actor[${ActorID}].Loc.X}
		echo Y					${Actor[${ActorID}].Loc.Y}
		echo Z					${Actor[${ActorID}].Loc.Z}
	}

	;===================================================================================
	;long list below
	;

	function get_Archetype(string ToonClass)
	{
		switch ${ToonClass}
		{
			case warrior
			{
				return fighter
				break
			}
			case berserker
			{
				return fighter
				break
			}
			case guardian
			{
				return fighter
				break
			}
			case paladin
			{
				return fighter
				break
			}
			case shadowknight
			{
				return fighter
				break
			}
			case monk
			{
				return fighter
				break
			}
			case bruiser
			{
				return fighter
				break
			}
			case warden
			{
				return priest
				break
			}
			case mystic
			{
				return priest
				break
			}
			case defiler
			{
				return priest
				break
			}
			case fury
			{
				return priest
				break
			}
			case templar
			{
				return priest
				break
			}
			case inquisitor
			{
				return priest
				break
			}
			case conjuror
			{
				return mage
				break
			}
			case necromancer
			{
				return mage
				break
			}
			case warlock
			{
				return mage
				break
			}
			case wizard
			{
				return mage
				break
			}
			case illusionist
			{
				return mage
				break
			}
			case coercer
			{
				return mage
				break
			}
			Default
			{
				return scout
				break
			}	
		}
	}

;===================================================================================
}


#endif
