void ObjectController::_handleFindFriendDBReply(uint64 retCode,string friendName)
{
	PlayerObject*	player	= dynamic_cast<PlayerObject*>(mObject);
	friendName.convert(BSTRType_Unicode16);
	if(retCode == 0)
	{
		gMessageLib->sendSystemMessage(player,L"","cmnty","friend_location_failed_noname","","",L"",0,"","",friendName.getUnicode16());
		return;
	}

	PlayerObject*	searchObject	= dynamic_cast<PlayerObject*>(gWorldManager->getObjectById(retCode));

	if(!searchObject)
	{
		gMessageLib->sendSystemMessage(player,L"","cmnty","friend_location_failed","","",L"",0,"","",friendName.getUnicode16());
		return;
	}

	//are we on our targets friendlist???
	if(!searchObject->checkFriendList(player->getFirstName().getCrc()))
	{
		gMessageLib->sendSystemMessage(player,L"","cmnty","friend_location_failed","","",L"",0,"","",friendName.getUnicode16());
		return;
	}

	Datapad* thePad = dynamic_cast<Datapad*>(searchObject->getEquipManager()->getEquippedObject(CreatureEquipSlot_Datapad));

	if(thePad && thePad->getCapacity())
	{
		//the datapad automatically checks for waypoint caspacity and gives the relevant error messages
		thePad->requestNewWaypoint(searchObject->getFirstName().getAnsi(),searchObject->mPosition,static_cast<uint16>(gWorldManager->getZoneId()),Waypoint_blue);
	}
}
void ObjectController::_handlefindfriend(uint64 targetId,Message* message,ObjectControllerCmdProperties* cmdProperties)
{
	PlayerObject*	playerObject	= dynamic_cast<PlayerObject*>(mObject);
	string			friendName;
	int8			sql[1024],end[16],*sqlPointer;

	message->getStringUnicode16(friendName);

	if(!friendName.getLength())
	{
		gMessageLib->sendSystemMessage(playerObject,L"","ui_cmnty","friend_location_failed_usage","","",L"",0,"","",L"");
		return;
	}
	
	if(playerObject->isConnected())
	{
		// query the chat server
		gMessageFactory->StartMessage();
		gMessageFactory->addUint32(opNotifyChatFindFriend);
		gMessageFactory->addString(friendName);
		Message* message = gMessageFactory->EndMessage();

		playerObject->getClient()->SendChannelA(message,playerObject->getAccountId(),CR_Chat,2);
		
	}
	return;


	string unicodeName = friendName;
	friendName.convert(BSTRType_ANSI);


	// check if he's our friend
	if(!playerObject->checkFriendList(friendName.getCrc()))
	{
		gMessageLib->sendSystemMessage(playerObject,L"","cmnty","friend_not_found","","",L"",0,"","",unicodeName.getUnicode16());
		return;
	}

	
	// pull the db query
	ObjControllerAsyncContainer* asyncContainer = new(mDBAsyncContainerPool.malloc()) ObjControllerAsyncContainer(OCQuery_FindFriend);
	asyncContainer->mString = friendName.getAnsi();

	sprintf(sql,"SELECT id from swganh.characters where firstname like '");
	sprintf(end,"'");
	sqlPointer = sql + strlen(sql);
	sqlPointer += mDatabase->Escape_String(sqlPointer,friendName.getAnsi(),friendName.getLength());
	strcat(sql,end);

	mDatabase->ExecuteSqlAsync(this,asyncContainer,sql);

	
}
void ObjectController::_handleRemoveFriend(uint64 targetId,Message* message,ObjectControllerCmdProperties* cmdProperties)
{
	PlayerObject*	player	= dynamic_cast<PlayerObject*>(mObject);

	if(player->getContactListUpdatePending())
		return;
	else
		player->setContactListUpdatePending(true);

	string	friendName;
	int8	sql[1024],end[16],*sqlPointer;

	message->getStringUnicode16(friendName);
	friendName.convert(BSTRType_ANSI);

	if(!friendName.getLength())
	{
		player->setContactListUpdatePending(false);
		return;
	}


	if(player->isConnected())
		gMessageLib->sendHeartBeat(player->getClient());

	friendName.toLower();

	if(!player->checkFriendList(friendName.getCrc()))
	{
		player->setContactListUpdatePending(false);	
		return;
	}
	ObjControllerAsyncContainer* asyncContainer = new(mDBAsyncContainerPool.malloc()) ObjControllerAsyncContainer(OCQuery_RemoveFriend);
	asyncContainer->mString = friendName.getAnsi();

	sprintf(sql,"SELECT sf_removeFriend(%"PRIu64",'",player->getId());
	sprintf(end,"')");
	sqlPointer = sql + strlen(sql);
	sqlPointer += mDatabase->Escape_String(sqlPointer,friendName.getAnsi(),friendName.getLength());
	strcat(sql,end);

	mDatabase->ExecuteSqlAsync(this,asyncContainer,sql);

		
}
void ObjectController::_handleAddFriend(uint64 targetId,Message* message,ObjectControllerCmdProperties* cmdProperties)
{
	PlayerObject*	player		= dynamic_cast<PlayerObject*>(mObject);

	if(player->getContactListUpdatePending())
		return;
	else
		player->setContactListUpdatePending(true);

	string	friendName;
	int8	sql[1024],end[16],*sqlPointer;

	message->getStringUnicode16(friendName);
	friendName.convert(BSTRType_ANSI);

	if(!friendName.getLength())
	{
		player->setContactListUpdatePending(false);
		return;
	}

	if(player->isConnected())
		gMessageLib->sendHeartBeat(player->getClient());

	friendName.toLower();

	// check if he's already our friend
	if(player->checkFriendList(friendName.getCrc()))
	{
		friendName.convert(BSTRType_Unicode16);
		gMessageLib->sendSystemMessage(player,L"","cmnty","friend_duplicate","","",L"",0,"","",friendName.getUnicode16());
		player->setContactListUpdatePending(false);
		return;
	}

	// or ignored
	
	if(player->checkIgnoreList(friendName.getCrc()))
	{
		friendName.convert(BSTRType_Unicode16);
		gMessageLib->sendSystemMessage(player,L"","cmnty","friend_fail_is_ignored","","",L"",0,"","",friendName.getUnicode16());
		player->setContactListUpdatePending(false);
		return;
	}

	// check our own name
	string firstName = player->getFirstName().getAnsi();
	firstName.toLower();

	if(strcmp(firstName.getAnsi(),friendName.getAnsi()) == 0)
	{
		player->setContactListUpdatePending(false);
		return;
	}

	// pull the db query
	ObjControllerAsyncContainer* asyncContainer = new(mDBAsyncContainerPool.malloc()) ObjControllerAsyncContainer(OCQuery_AddFriend);
	asyncContainer->mString = friendName.getAnsi();

	sprintf(sql,"SELECT sf_addFriend(%"PRIu64",'",player->getId());
	sprintf(end,"')");
	sqlPointer = sql + strlen(sql);
	sqlPointer += mDatabase->Escape_String(sqlPointer,friendName.getAnsi(),friendName.getLength());
	strcat(sql,end);

	mDatabase->ExecuteSqlAsync(this,asyncContainer,sql);

}