www.pudn.com > wow.rar > AuraHandler.cpp


#include "SpellHandler.h"
#include "NetworkInterface.h"
#include "Opcodes.h"
#include "Log.h"
#include "Character.h"
#include "WorldServer.h"
#include "Database.h"
#include "UpdateMask.h"
#include "Unit.h"
#include "Spell.h"
#include "Character.h"
#include "math.h"
#include "AuraHandler.h"

#define world WorldServer::getSingleton()


AuraHandler::AuraHandler()
{

}

AuraHandler::~AuraHandler()
{

}

void AuraHandler::HandleMsg( wowWData & recv_data, GameClient *pClient )
{
	wowWData data;
	wowWData data2;
    char f[256];
    sprintf(f, "WORLD: Spell 0x%.4X", recv_data.opcode);
    Log::getSingleton( ).outString( f );
	switch (recv_data.opcode)
	{
	case CMSG_CAST_SPELL:
			{
				uint64 pguid;
				uint32 spell;
				uint16 flags;
				uint8 hitCount ,missCount;
				recv_data >> spell >> flags;
				pguid = (uint64)pClient->getCurrentChar()->getGUID();
				hitCount = missCount = 0;

				SpellInformation spellInfo;
				DatabaseInterface *dbi = Database::getSingleton().createDatabaseInterface(); //get a hook for the DB
				spellInfo = dbi->GetSpellInformation ( spell ); //returns a SpellInformation object/struct
				Database::getSingleton().removeDatabaseInterface( dbi ); //clean up used resources

				if( spellInfo.spell_type == (uint32)AURA) {



				}else if( spellInfo.spell_type == (uint32)SEAL) {



				}
			}
	}
}


int AuraHandler::setAura(Unit *pUnit, uint32 spell)
{
    //return 1;  // test
	uint8 tmpStore = 0x00;
	int found = -1,found2 = -1;
	uint32 auraValue;
	int i;
	for( i = 0; (i < 10) && (found == -1); i++) {
		if (!(pUnit->getUpdateValue(UNIT_FIELD_AURALEVELS + i) == 0xeeeeeeee)) {
			found = i;	
		}
	}
	if (found == -1)
		return 0;
	auraValue = pUnit->getUpdateValue(UNIT_FIELD_AURALEVELS + found);

	for( i = 0; (i < 4) && (found2 == -1); i++)
	{
		if ((uint8)*(&auraValue + i) != 0xee) {
			found2 = i;
			memcpy(&auraValue + i,&tmpStore,1);
		}
	}
	pUnit->setUpdateValue(UNIT_FIELD_AURALEVELS + found, auraValue);
	pUnit->setUpdateValue(UNIT_FIELD_AURAAPPLICATIONS + found, auraValue);
	pUnit->setUpdateValue(UNIT_FIELD_AURA + found*4 + found2, uint32(spell));
	pUnit->m_aura_found = found;
	pUnit->m_aura_found2 = found2;
	return 1;
}