//::////////////////////////////////////////////////////////////////////////:://
//:: SIMTools V3.0 Speech Integration & Management Tools Version 3.0        :://
//:: Created By: FunkySwerve                                                :://
//:: Created On: April 4 2006                                               :://
//:: Last Updated: March 27 2007                                            :://
//:: With Thanks To:                                                        :://
//:: Dumbo - for his amazing plugin                                         :://
//:: Virusman - for Linux versions, and for the reset plugin, and for       :://
//::    his excellent events plugin, without which this update would not    :://
//::    be possible                                                         :://
//:: Dazzle - for his script samples                                        :://
//:: Butch - for the emote wand scripts                                     :://
//:: The DMFI project - for the languages conversions and many of the emotes:://
//:: Lanessar and the players of the Myth Drannor PW - for the new languages:://
//:: The players and DMs of Higher Ground for their input and playtesting   :://
//::////////////////////////////////////////////////////////////////////////:://
#include "x2_inc_switches"
#include "fky_chat_inc"
void main()
{
    if (GetUserDefinedItemEventNumber() == X2_ITEM_EVENT_ACTIVATE)
    {
        object oPC = GetItemActivator();
        object oItem = GetItemActivated();
        object oTarget = GetItemActivatedTarget();
        location lTarget = GetItemActivatedTargetLocation();
        // SetLocalString(oCPC, "FKY_CHAT_COMMAND", OBJECT_TARGET+COMMAND_SYMBOL + sNormalCase);
        string sCommand = GetLocalString(oPC, "FKY_CHAT_COMMAND");
        string sReturnType = GetStringLeft(sCommand, 1);
        sCommand = GetStringRight(sCommand, GetStringLength(sCommand) - 1);
        if (sReturnType == AREA_TARGET_OK)//command requires an object input, but allows area objects and will default to the area if no object selected
        {
            DeleteLocalString(oPC, "FKY_CHAT_COMMAND");
            if (GetIsObjectValid(oTarget))
            {
                SetLocalObject(oPC, "FKY_CHAT_TARGET", oTarget);
                AssignCommand(oPC, SpeakString(sCommand));
            }
            else
            {
                oTarget = GetArea(oPC);
                if (GetIsObjectValid(oTarget))
                {
                    SetLocalObject(oPC, "FKY_CHAT_TARGET", oTarget);
                    AssignCommand(oPC, SpeakString(sCommand));
                }
                else FloatingTextStringOnCreature(COLOR_RED+TARGETER_ERROR+COLOR_END, oPC, FALSE); //should never fire, debug
            }
        }
        else if (sReturnType == OBJECT_TARGET)//command requires an object input
        {
            DeleteLocalString(oPC, "FKY_CHAT_COMMAND");
            if (GetIsObjectValid(oTarget))
            {
                SetLocalObject(oPC, "FKY_CHAT_TARGET", oTarget);
                AssignCommand(oPC, SpeakString(sCommand));
            }
            else FloatingTextStringOnCreature(COLOR_RED+TARGETER_ERROR2+COLOR_END, oPC, FALSE);
        }
        else if (sReturnType == LOCATION_TARGET)//command requires a location input
        {
            if (GetIsObjectValid(GetAreaFromLocation(lTarget)))
            {
                SetLocalLocation(oPC, "FKY_CHAT_LOCATION", lTarget);
                DeleteLocalString(oPC, "FKY_CHAT_COMMAND");//here we only delete if they selected a valid location - otherwise propmpt for retry
                AssignCommand(oPC, SpeakString(sCommand));
            }
            else FloatingTextStringOnCreature(COLOR_RED+TARGETER_ERROR3+COLOR_END, oPC, FALSE);
        }
        else if (sReturnType == ITEM_TARGET)//command requires a location input
        {
            DeleteLocalString(oPC, "FKY_CHAT_COMMAND");
            if (GetObjectType(oTarget) == OBJECT_TYPE_ITEM)
            {
                SetLocalObject(oPC, "FKY_CHAT_TARGET", oTarget);
                AssignCommand(oPC, SpeakString(sCommand));
            }
            else
            {
                FloatingTextStringOnCreature(COLOR_RED+TARGETER_ERROR4+COLOR_END, oPC, FALSE);
            }
        }
        else
        {
            DeleteLocalString(oPC, "FKY_CHAT_COMMAND");
            FloatingTextStringOnCreature(COLOR_RED+TARGETER_ERROR+COLOR_END, oPC, FALSE); //should never fire, debug
        }
    }
    SetExecutedScriptReturnValue(X2_EXECUTE_SCRIPT_END);
}