void main()
{
    int nPattern = GetListenPatternNumber();
    if (nPattern == -1) return;

    if (nPattern == 1) // "man the cannons: fire!"
    {
        object oPC = GetLastSpeaker();
        string sUsername = GetStringUpperCase(GetPCPlayerName(oPC));
        string sAllowed1 = GetStringUpperCase("Diva_Of_Deviousness");
        string sAllowed2 = GetStringUpperCase("XCRS Bitch2");

        // Floaty feedback ? visible to all nearby players
        FloatingTextStringOnCreature("Heard: 'man the cannons: fire!'", OBJECT_SELF, FALSE, TRUE);
        FloatingTextStringOnCreature("Speaker: " + GetName(oPC) + " [" + GetPCPlayerName(oPC) + "]", OBJECT_SELF, FALSE, TRUE);

        // Access check
        if (sUsername != sAllowed1 && sUsername != sAllowed2)
        {
            FloatingTextStringOnCreature("Access denied. Unauthorized user: " + sUsername + ".", OBJECT_SELF, FALSE, TRUE);
            return;
        }

        // Authorized ? confirm and fire
        FloatingTextStringOnCreature("Authorization confirmed. Firing cannons!", OBJECT_SELF, FALSE, TRUE);

        // Fire all cannons in the same area
        object oArea = GetArea(OBJECT_SELF);
        object oObject = GetFirstObjectInArea(oArea);

        while (GetIsObjectValid(oObject))
        {
            if (GetTag(oObject) == "CAS_CANNONVFX")
            {
                ExecuteScript("cas_firecannons", oObject);
            }

            oObject = GetNextObjectInArea(oArea);
        }
    }
}
