bool ChatHandler::HandleWPShowCommand(const char* args, WorldSession *m_session)
{
    uint64 guid = m_session->GetPlayer()->GetSelection();
    if (guid == 0)
    {
        SystemMessage(m_session, "No selection.");
        return true;
    }

    Creature* pCreature = m_session->GetPlayer()->GetMapMgr()->GetCreature(GET_LOWGUID_PART(guid));
    if(!pCreature)
    {
        SystemMessage(m_session, "You should select a Creature.");
        return true;
    }

    if( pCreature->m_spawn == NULL )
    {
        SystemMessage(m_session, "You cannot add waypoints to a creature that is not saved.");
        return true;
    }

    char* pBackwards = strtok((char*)args, " ");
    bool Backwards = (pBackwards)? ((atoi(pBackwards)>0)?true:false) : false;

    AIInterface* ai = pCreature->GetAIInterface();
    Player* pPlayer = m_session->GetPlayer();


    if(pPlayer->waypointunit != ai)
    {
        if(ai->WayPointsShowing() == true)
        {
            SystemMessage(m_session, "Some one else is also Viewing this Creatures WayPoints.");
            SystemMessage(m_session, "Viewing WayPoints at the same time as some one else can cause undesireble results.");
            return true;
        }

        if(pPlayer->waypointunit != NULL)
        {
            pPlayer->waypointunit->hideWayPoints(pPlayer);
        }
        pPlayer->waypointunit = ai;
        ai->showWayPoints(pPlayer,Backwards);
        ai->SetWayPointsShowingBackwards(Backwards);
    }
    else
    {
        if(ai->WayPointsShowing() == true)
        {
            SystemMessage(m_session, "Waypoints Already Showing.");
        }
        else
            ai->showWayPoints(m_session->GetPlayer(),Backwards);
    }

    SystemMessage(m_session, "Showing waypoints for creature %u", pCreature->GetSQL_id());
    return true;
}