本文整理汇总了C++中Creature::AIM_Initialize方法的典型用法代码示例。如果您正苦于以下问题:C++ Creature::AIM_Initialize方法的具体用法?C++ Creature::AIM_Initialize怎么用?C++ Creature::AIM_Initialize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Creature
的用法示例。
在下文中一共展示了Creature::AIM_Initialize方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AddCreature
bool OutdoorPvPObjective::AddCreature(uint32 type, uint32 entry, uint32 teamval, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay)
{
Map * pMap = MapManager::Instance().FindMap(map);
if (!pMap)
return false;
Creature* pCreature = new Creature;
if (!pCreature->Create(sObjectMgr.GenerateLowGuid(HIGHGUID_UNIT), pMap, PHASEMASK_NORMAL, entry, teamval))
{
sLog.outError("OutdoorPvP: Can't create creature entry: %u",entry);
delete pCreature;
return false;
}
pCreature->Relocate(x, y, z, o);
if (!pCreature->IsPositionValid())
{
sLog.outError("OutdoorPvP: Creature (guidlow %d, entry %d) not added. Suggested coordinates isn't valid (X: %f Y: %f)",
pCreature->GetGUIDLow(), pCreature->GetEntry(), pCreature->GetPositionX(), pCreature->GetPositionY());
delete pCreature;
return false;
}
pCreature->AIM_Initialize();
if(spawntimedelay)
pCreature->SetRespawnDelay(spawntimedelay);
m_Creatures[type] = MAKE_NEW_GUID(pCreature->GetGUID(), entry, HIGHGUID_UNIT);
m_CreatureTypes[m_Creatures[type]] = type;
pMap->Add(pCreature);
return true;
}
示例2: AddCreature
Creature* BattleGround::AddCreature(uint32 entry, uint32 type, uint32 teamval, float x, float y, float z, float o)
{
// note: this should normally be FindMap
// but it's a hack to allow the battlegrounds to initialize at server startup
Map * map = MapManager::Instance().GetMap(GetMapId(), 0);
if(!map) return NULL;
Creature* pCreature = new Creature;
if (!pCreature->Create(objmgr.GenerateLowGuid(HIGHGUID_UNIT), map, entry, teamval))
{
sLog.outError("Can't create creature entry: %u",entry);
delete pCreature;
return NULL;
}
pCreature->Relocate(x, y, z, o);
if(!pCreature->IsPositionValid())
{
sLog.outError("ERROR: Creature (guidlow %d, entry %d) not added to battleground. Suggested coordinates isn't valid (X: %f Y: %f)",pCreature->GetGUIDLow(),pCreature->GetEntry(),pCreature->GetPositionX(),pCreature->GetPositionY());
return NULL;
}
pCreature->AIM_Initialize();
//pCreature->SetDungeonDifficulty(0);
map->Add(pCreature);
m_BgCreatures[type] = pCreature->GetGUID();
return pCreature;
}
示例3: AddCreature
Creature* BattleGround::AddCreature(uint32 entry, uint32 type, uint32 teamval, float x, float y, float z, float o, uint32 respawntime)
{
Map * map = MapManager::Instance().FindMap(GetMapId(),GetInstanceID());
if(!map)
return NULL;
Creature* pCreature = new Creature;
if (!pCreature->Create(objmgr.GenerateLowGuid(HIGHGUID_UNIT), map, entry, teamval))
{
sLog.outError("Can't create creature entry: %u",entry);
delete pCreature;
return NULL;
}
pCreature->Relocate(x, y, z, o);
if(!pCreature->IsPositionValid())
{
sLog.outError("ERROR: Creature (guidlow %d, entry %d) not added to battleground. Suggested coordinates isn't valid (X: %f Y: %f)",pCreature->GetGUIDLow(),pCreature->GetEntry(),pCreature->GetPositionX(),pCreature->GetPositionY());
return NULL;
}
pCreature->SetHomePosition(x, y, z, o);
pCreature->AIM_Initialize();
map->Add(pCreature);
m_BgCreatures[type] = pCreature->GetGUID();
return pCreature;
}
示例4: HandleAddSpiritCommand
bool ChatHandler::HandleAddSpiritCommand(const char* args)
{
Log::getSingleton( ).outDetail("Spawning Spirit Healers\n");
std::stringstream query;
Creature* pCreature;
UpdateMask unitMask;
WorldPacket data;
query << "select X,Y,Z,F,name_id,mapId,zoneId,faction_id from spirithealers";
QueryResult *result = sDatabase.Query( query.str( ).c_str( ) );
if(!result)
{
FillSystemMessageData(&data, m_session, "No spirit healers in db, exiting.");
m_session->SendPacket( &data );
return true;
}
uint32 name;
do
{
Field* fields = result->Fetch();
name = fields[4].GetUInt32();
Log::getSingleton( ).outDetail("%s name is %d\n", fields[4].GetString(), name);
pCreature = new Creature();
pCreature->Create(objmgr.GenerateLowGuid(HIGHGUID_UNIT), objmgr.GetCreatureName(name)->Name.c_str(), fields[5].GetUInt16(),
fields[0].GetFloat(), fields[1].GetFloat(), fields[2].GetFloat(), fields[3].GetFloat(), name);
pCreature->SetZoneId( fields[6].GetUInt16() );
pCreature->SetUInt32Value( OBJECT_FIELD_ENTRY, name );
pCreature->SetFloatValue( OBJECT_FIELD_SCALE_X, 1.0f );
pCreature->SetUInt32Value( UNIT_FIELD_DISPLAYID, 5233 );
pCreature->SetUInt32Value( UNIT_NPC_FLAGS , 1 );
pCreature->SetUInt32Value( UNIT_FIELD_FACTIONTEMPLATE , fields[7].GetUInt32() );
pCreature->SetUInt32Value( UNIT_FIELD_HEALTH, 100 + 30*(60) );
pCreature->SetUInt32Value( UNIT_FIELD_MAXHEALTH, 100 + 30*(60) );
pCreature->SetUInt32Value( UNIT_FIELD_LEVEL , 60 );
pCreature->SetFloatValue( UNIT_FIELD_COMBATREACH , 1.5f );
pCreature->SetFloatValue( UNIT_FIELD_MAXDAMAGE , 5.0f );
pCreature->SetFloatValue( UNIT_FIELD_MINDAMAGE , 8.0f );
pCreature->SetUInt32Value( UNIT_FIELD_BASEATTACKTIME, 1900 );
pCreature->SetUInt32Value( UNIT_FIELD_BASEATTACKTIME+1, 2000 );
pCreature->SetFloatValue( UNIT_FIELD_BOUNDINGRADIUS, 2.0f );
pCreature->AIM_Initialize();
Log::getSingleton( ).outError("AddObject at Level3.cpp line 172");
MapManager::Instance().GetMap(pCreature->GetMapId())->Add(pCreature);
pCreature->SaveToDB();
}
while( result->NextRow() );
delete result;
return true;
}
示例5: InstallAllAccessories
void Vehicle::InstallAllAccessories()
{
if(!GetMap())
return;
CreatureDataAddon const *cainfo = GetCreatureAddon();
if(!cainfo || !cainfo->passengers)
return;
for (CreatureDataAddonPassengers const* cPassanger = cainfo->passengers; cPassanger->seat_idx != -1; ++cPassanger)
{
// Continue if seat already taken
if(GetPassenger(cPassanger->seat_idx))
continue;
uint32 guid = 0;
bool isVehicle = false;
// Set guid and check whatever it is
if(cPassanger->guid != 0)
guid = cPassanger->guid;
else
{
CreatureDataAddon const* passAddon;
passAddon = ObjectMgr::GetCreatureTemplateAddon(cPassanger->entry);
if(passAddon && passAddon->vehicle_id != 0)
isVehicle = true;
else
guid = sObjectMgr.GenerateLowGuid(HIGHGUID_UNIT);
}
// Create it
Creature *pPassenger = new Creature;
if(!isVehicle)
{
uint32 entry = cPassanger->entry;
if(entry == 0)
{
CreatureData const* data = sObjectMgr.GetCreatureData(guid);
if(!data)
continue;
entry = data->id;
}
if(!pPassenger->Create(guid, GetMap(), GetPhaseMask(), entry, 0))
continue;
pPassenger->LoadFromDB(guid, GetMap());
pPassenger->Relocate(GetPositionX(), GetPositionY(), GetPositionZ());
GetMap()->Add(pPassenger);
pPassenger->AIM_Initialize();
}
else
pPassenger = (Creature*)SummonVehicle(cPassanger->entry, GetPositionX(), GetPositionY(), GetPositionZ(), 0);
// Enter vehicle...
pPassenger->EnterVehicle(this, cPassanger->seat_idx, true);
// ...and send update. Without this, client wont show this new creature/vehicle...
WorldPacket data;
pPassenger->BuildHeartBeatMsg(&data);
pPassenger->SendMessageToSet(&data, false);
}
}
示例6: AddCapturePoint
bool OutdoorPvPObjective::AddCapturePoint(uint32 entry, uint32 map, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3)
{
Map * pMap = MapManager::Instance().FindMap(map);
if(!pMap)
return false;
GameObject* go = new GameObject;
if (!go->Create(sObjectMgr.GenerateLowGuid(HIGHGUID_GAMEOBJECT), entry, pMap,
PHASEMASK_NORMAL, x, y, z, o, rotation0, rotation1, rotation2, rotation3, 100, GO_STATE_READY))
{
sLog.outError("OutdoorPvP: Gameobject template %u not found in database.", entry);
delete go;
// TODO: Should we return here?
//return false;
}
else
go->AddToWorld();
Creature* pCreature = new Creature;
if (!pCreature->Create(sObjectMgr.GenerateLowGuid(HIGHGUID_UNIT), pMap,PHASEMASK_NORMAL, OPVP_TRIGGER_CREATURE_ENTRY, 0))
{
sLog.outError("OutdoorPvP: Can't create creature entry: %u",entry);
delete pCreature;
return false;
}
pCreature->Relocate(x, y, z, o);
if (!pCreature->IsPositionValid())
{
sLog.outError("OutdoorPvP: Creature (guidlow %d, entry %d) not added to opvp. Suggested coordinates isn't valid (X: %f Y: %f)",pCreature->GetGUIDLow(),pCreature->GetEntry(),pCreature->GetPositionX(),pCreature->GetPositionY());
delete pCreature;
return false;
}
pCreature->AIM_Initialize();
pMap->Add(pCreature);
m_CapturePointCreature = MAKE_NEW_GUID(pCreature->GetGUID(), OPVP_TRIGGER_CREATURE_ENTRY, HIGHGUID_UNIT);
m_CapturePoint = MAKE_NEW_GUID(go->GetGUID(), entry, HIGHGUID_GAMEOBJECT);
// TODO: Use proper outdoor PvP GO type.
GameObjectInfo const* goinfo = go->GetGOInfo();
m_ShiftMaxPhase = goinfo->raw.data[17];
m_ShiftMaxCaptureSpeed = m_ShiftMaxPhase / float(goinfo->raw.data[16]);
m_NeutralValue = goinfo->raw.data[12];
return true;
}
示例7: HandleAddSpwCommand
bool ChatHandler::HandleAddSpwCommand(const char* args)
{
char* charID = strtok((char*)args, " ");
if (!charID)
return false;
uint32 id = atoi(charID);
//QueryResult *result = sDatabase.PQuery("SELECT `modelid`,`flags`,`faction`,`level`,`name` FROM `creature_template` WHERE `entry` = '%u'", id);
//if(result)
//{
//Field *fields = result->Fetch();
//WorldPacket data;
Player *chr = m_session->GetPlayer();
float x = chr->GetPositionX();
float y = chr->GetPositionY();
float z = chr->GetPositionZ();
float o = chr->GetOrientation();
Creature* pCreature = new Creature;
if (!pCreature->Create(objmgr.GenerateLowGuid(HIGHGUID_UNIT), chr->GetMapId(), x, y, z, o, id))
{
delete pCreature;
return false;
}
pCreature->AIM_Initialize();
//pCreature->SetUInt32Value(UNIT_FIELD_HEALTH , 1); // temp set on 1 HP needs to be MAX HP (strange error)
sLog.outDebug(LANG_ADD_OBJ);
MapManager::Instance().GetMap(pCreature->GetMapId())->Add(pCreature);
pCreature->SaveToDB();
//delete result;
return true;
//}
//else
// delete result;
//return false;
}
示例8: AddCapturePoint
bool OutdoorPvPObjective::AddCapturePoint(uint32 entry, uint32 map, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3)
{
sLog.outDebug("OutdoorPvPObjective: creating capture point %u and capture point creature",entry);
// check info existence
GameObjectInfo const* goinfo = objmgr.GetGameObjectInfo(entry);
if (!goinfo)
return false;
CreatureInfo const *cinfo = objmgr.GetCreatureTemplate(OPVP_TRIGGER_CREATURE_ENTRY);
if(!cinfo)
return false;
// create capture point creature
uint32 displayId = objmgr.ChooseDisplayId(0, cinfo, NULL);
uint32 creature_guid = objmgr.GenerateLowGuid(HIGHGUID_UNIT);
CreatureData& cdata = objmgr.NewOrExistCreatureData(creature_guid);
cdata.id = OPVP_TRIGGER_CREATURE_ENTRY;
cdata.mapid = map;
cdata.displayid = displayId;
cdata.equipmentId = cinfo->equipmentId;
cdata.posX = x;
cdata.posY = y;
cdata.posZ = z;
cdata.orientation = o;
cdata.spawntimesecs = 1;
cdata.spawndist = 0;
cdata.currentwaypoint = 0;
cdata.curhealth = cinfo->maxhealth;
cdata.curmana = cinfo->maxmana;
cdata.is_dead = false;
cdata.movementType = cinfo->MovementType;
cdata.spawnMask = 1;
cdata.phaseMask = PHASEMASK_NORMAL;
objmgr.AddCreatureToGrid(creature_guid, &cdata);
m_CapturePointCreature = MAKE_NEW_GUID(creature_guid, OPVP_TRIGGER_CREATURE_ENTRY, HIGHGUID_UNIT);
// create capture point go
uint32 guid = objmgr.GenerateLowGuid(HIGHGUID_GAMEOBJECT);
GameObjectData& data = objmgr.NewGOData(guid);
data.id = entry;
data.mapid = map;
data.posX = x;
data.posY = y;
data.posZ = z;
data.orientation = o;
data.rotation0 = rotation0;
data.rotation1 = rotation1;
data.rotation2 = rotation2;
data.rotation3 = rotation3;
data.spawntimesecs = 1;
data.animprogress = 100;
data.spawnMask = 1;
data.go_state = GO_STATE_READY;
data.phaseMask = PHASEMASK_NORMAL;
objmgr.AddGameobjectToGrid(guid, &data);
m_CapturePoint = MAKE_NEW_GUID(guid, entry, HIGHGUID_GAMEOBJECT);
// get the needed values from goinfo
m_ShiftMaxPhase = goinfo->raw.data[17];
m_ShiftMaxCaptureSpeed = m_ShiftMaxPhase / float(goinfo->raw.data[16]);
m_NeutralValue = goinfo->raw.data[12];
// add to map if map is already loaded
Map * pMap = MapManager::Instance().FindMap(map);
if(!pMap)
return true;
// add GO...
GameObject * go = new GameObject;
if(!go->Create(guid,entry, pMap, PHASEMASK_NORMAL, x,y,z,o,rotation0,rotation1,rotation2,rotation3,100, GO_STATE_READY))
{
sLog.outError("OutdoorPvPObjective: Gameobject template %u not found in database.", entry);
delete go;
}
else
{
go->SetRespawnTime(0);
objmgr.SaveGORespawnTime(go->GetDBTableGUIDLow(), 0, 0); //this is useless this isn't spawned through db so it doesn't has dbtableguid (it's just 0)
pMap->Add(go);
}
// add creature...
Creature* pCreature = new Creature;
if (!pCreature->Create(creature_guid, pMap,PHASEMASK_NORMAL, OPVP_TRIGGER_CREATURE_ENTRY, 0))
{
sLog.outError("OutdoorPvPObjective: Can't create creature entry: %u",entry);
delete pCreature;
}
else
{
pCreature->AIM_Initialize();
pCreature->Relocate(x, y, z, o);
//.........这里部分代码省略.........
示例9: AddCreature
bool OutdoorPvPObjective::AddCreature(uint32 type, uint32 entry, uint32 teamval, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay)
{
CreatureInfo const *cinfo = objmgr.GetCreatureTemplate(entry);
if(!cinfo)
{
return false;
}
uint32 displayId = objmgr.ChooseDisplayId(teamval, cinfo, NULL);
CreatureModelInfo const *minfo = objmgr.GetCreatureModelRandomGender(displayId);
if (!minfo)
{
return false;
}
else
displayId = minfo->modelid; // it can be different (for another gender)
uint32 guid = objmgr.GenerateLowGuid(HIGHGUID_UNIT);
CreatureData& data = objmgr.NewOrExistCreatureData(guid);
data.id = entry;
data.mapid = map;
data.displayid = displayId;
data.equipmentId = cinfo->equipmentId;
data.posX = x;
data.posY = y;
data.posZ = z;
data.orientation = o;
data.spawntimesecs = spawntimedelay;
data.spawndist = 0;
data.currentwaypoint = 0;
data.curhealth = cinfo->maxhealth;
data.curmana = cinfo->maxmana;
data.is_dead = false;
data.movementType = cinfo->MovementType;
data.spawnMask = 1;
data.phaseMask = PHASEMASK_NORMAL;
objmgr.AddCreatureToGrid(guid, &data);
m_Creatures[type] = MAKE_NEW_GUID(guid, entry, HIGHGUID_UNIT);
m_CreatureTypes[m_Creatures[type]] = type;
Map * pMap = MapManager::Instance().FindMap(map);
if(!pMap)
return true;
Creature* pCreature = new Creature;
if (!pCreature->Create(guid, pMap, PHASEMASK_NORMAL, entry, teamval))
{
sLog.outError("OutdoorPvPObjective: Can't create creature entry: %u",entry);
delete pCreature;
return true;
}
pCreature->AIM_Initialize();
pCreature->Relocate(x, y, z, o);
if(!pCreature->IsPositionValid())
{
sLog.outError("OutdoorPvPObjective: ERROR: Creature (guidlow %d, entry %d) not added to opvp. Suggested coordinates isn't valid (X: %f Y: %f)",pCreature->GetGUIDLow(),pCreature->GetEntry(),pCreature->GetPositionX(),pCreature->GetPositionY());
return false;
}
if(spawntimedelay)
pCreature->SetRespawnDelay(spawntimedelay);
pMap->Add(pCreature);
return true;
}
示例10: HandleAddSHCommand
bool ChatHandler::HandleAddSHCommand(const char *args)
{
WorldPacket data;
Player *chr = m_session->GetPlayer();
float x = chr->GetPositionX();
float y = chr->GetPositionY();
float z = chr->GetPositionZ();
float o = chr->GetOrientation();
Creature* pCreature = new Creature();
pCreature->Create(objmgr.GenerateLowGuid(HIGHGUID_UNIT), "Spirit Healer", chr->GetMapId(), x, y, z, o, objmgr.AddCreatureName(pCreature->GetName(), 5233));
pCreature->SetZoneId(chr->GetZoneId());
pCreature->SetUInt32Value(OBJECT_FIELD_ENTRY, objmgr.AddCreatureName(pCreature->GetName(), 5233));
pCreature->SetFloatValue(OBJECT_FIELD_SCALE_X, 1.0f);
pCreature->SetUInt32Value(UNIT_FIELD_DISPLAYID, 5233);
pCreature->SetUInt32Value(UNIT_NPC_FLAGS, 33);
pCreature->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE , 35);
pCreature->SetUInt32Value(UNIT_FIELD_HEALTH, 100);
pCreature->SetUInt32Value(UNIT_FIELD_MAXHEALTH, 100);
pCreature->SetUInt32Value(UNIT_FIELD_LEVEL, 60);
pCreature->SetUInt32Value(UNIT_FIELD_FLAGS, 768);
pCreature->SetUInt32Value(UNIT_FIELD_AURA+0, 10848);
pCreature->SetUInt32Value(UNIT_FIELD_AURALEVELS+0, 0xEEEEEE3C);
pCreature->SetUInt32Value(UNIT_FIELD_AURAAPPLICATIONS+0, 0xEEEEEE00);
pCreature->SetUInt32Value(UNIT_FIELD_AURAFLAGS+0, 0x00000009);
pCreature->SetFloatValue(UNIT_FIELD_COMBATREACH , 1.5f);
pCreature->SetFloatValue(UNIT_FIELD_MAXDAMAGE , 5.0f);
pCreature->SetFloatValue(UNIT_FIELD_MINDAMAGE , 8.0f);
pCreature->SetUInt32Value(UNIT_FIELD_BASEATTACKTIME, 1900);
pCreature->SetUInt32Value(UNIT_FIELD_BASEATTACKTIME+1, 2000);
pCreature->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 2.0f);
pCreature->AIM_Initialize();
Log::getSingleton( ).outError("AddObject at Level3.cpp line 455");
MapManager::Instance().GetMap(pCreature->GetMapId())->Add(pCreature);
pCreature->SaveToDB();
std::stringstream ss,ss2,ss3;
QueryResult *result;
result = sDatabase.Query( "SELECT MAX(ID) FROM npc_gossip" );
if( result )
{
ss2 << "INSERT INTO npc_gossip ( ID , NPC_GUID, GOSSIP_TYPE, TEXTID, OPTION_COUNT) VALUES ("
<< (*result)[0].GetUInt32()+1 << ", "
<< pCreature->GetGUIDLow() << ", "
<< 1 << ", "
<< 1 << ", "
<< 1 << ")";
sDatabase.Execute( ss2.str( ).c_str( ) );
delete result;
result = NULL;
result = sDatabase.Query( "SELECT MAX(ID) FROM npc_options" );
if( result )
{
ss << "INSERT INTO npc_options ( `ID` , `GOSSIP_ID`, `TYPE`, `OPTION`, `NPC_TEXT_NEXTID`, `SPECIAL`) VALUES ("
<< (*result)[0].GetUInt32()+1 << ", "
<< (*result)[0].GetUInt32()+2 << ", "
<< 0 << ", '"
<< "Return me to life." << "', "
<< 0 << ", "
<< 2 << ")";
sDatabase.Execute( ss.str( ).c_str( ) );
delete result;
result = NULL;
}
result = sDatabase.Query( "SELECT MAX(ID) FROM npc_text" );
if( result )
{
ss3 << "INSERT INTO npc_text ( ID , TYPE_UNUSED, TEXT) VALUES ("
<< (*result)[0].GetUInt32()+1 << ", "
<< 0 << ", '"
<< "It is not yet your time. I shall aid your journey back to the realm of the living... For a price." << "')";
sDatabase.Execute( ss3.str( ).c_str( ) );
delete result;
result = NULL;
}
}
return true;
}
示例11: if
void
TargetedMovementGenerator::Update(Creature &owner, const uint32 & time_diff)
{
if( !&owner || !owner.isAlive() || !&i_target || i_targetedHome )
return;
if( owner.hasUnitState(UNIT_STAT_ROOT) || owner.hasUnitState(UNIT_STAT_STUNDED) || owner.hasUnitState(UNIT_STAT_FLEEING))
return;
if( !owner.isInCombat() && !owner.hasUnitState(UNIT_STAT_FOLLOW) )
{
owner.AIM_Initialize();
return;
}
// prevent crash after creature killed pet
if (!owner.hasUnitState(UNIT_STAT_FOLLOW) && owner.getVictim() != &i_target)
return;
Traveller<Creature> traveller(owner);
if (i_destinationHolder.UpdateTraveller(traveller, time_diff, false))
{
// put targeted movement generators on a higher priority
i_destinationHolder.ResetUpdate(50);
float dist = i_target.GetObjectSize() + owner.GetObjectSize() + OBJECT_CONTACT_DISTANCE;
// try to counter precision differences
if( i_destinationHolder.GetDistanceFromDestSq(i_target) > dist * dist + 0.1)
_setTargetLocation(owner, 0);
else if ( !owner.HasInArc( 0.1f, &i_target ) )
{
owner.SetInFront(&i_target);
if( i_target.GetTypeId() == TYPEID_PLAYER )
owner.SendUpdateToPlayer( (Player*)&i_target );
}
if( !owner.IsStopped() && i_destinationHolder.HasArrived())
{
owner.StopMoving();
if(owner.canReachWithAttack(&i_target) && !owner.hasUnitState(UNIT_STAT_FOLLOW))
owner.Attack(&i_target);
}
}
/*
//SpellEntry* spellInfo;
if( reach )
{
if( owner.GetDistance2dSq( &i_target ) > 0.0f )
{
DEBUG_LOG("MOVEMENT : Distance = %f",owner.GetDistance2dSq( &i_target ));
owner.addUnitState(UNIT_STAT_CHASE);
_setTargetLocation(owner, 0);
}
else if ( !owner.HasInArc( 0.0f, &i_target ) )
{
DEBUG_LOG("MOVEMENT : Orientation = %f",owner.GetAngle(&i_target));
owner.SetInFront(&i_target);
if( i_target.GetTypeId() == TYPEID_PLAYER )
owner.SendUpdateToPlayer( (Player*)&i_target );
}
if( !owner.isInCombat() )
{
owner.AIM_Initialize();
return;
}
}
else if( i_target.isAlive() )
{
if( !owner.hasUnitState(UNIT_STAT_FOLLOW) && owner.isInCombat() )
{
if( spellInfo = owner.reachWithSpellAttack( &i_target ) )
{
_spellAtack(owner, spellInfo);
return;
}
}
if( owner.GetDistance2dSq( &i_target ) > 0.0f )
{
DEBUG_LOG("MOVEMENT : Distance = %f",owner.GetDistance2dSq( &i_target ));
owner.addUnitState(UNIT_STAT_CHASE);
_setTargetLocation(owner, 0);
}
}
else if( !i_targetedHome )
{
if( !owner.hasUnitState(UNIT_STAT_FOLLOW) && owner.isInCombat() && (spellInfo = owner.reachWithSpellAttack(&i_target)) )
{
_spellAtack(owner, spellInfo);
return;
}
_setTargetLocation(owner, 0);
if(reach)
{
if( reach && owner.canReachWithAttack(&i_target) )
{
owner.StopMoving();
if(!owner.hasUnitState(UNIT_STAT_FOLLOW))
owner.Attack(&i_target);
owner.clearUnitState(UNIT_STAT_CHASE);
DEBUG_LOG("UNIT IS THERE");
}
else
{
//.........这里部分代码省略.........