rendered paste bodyvoid SpawnMonster(uint32 CreatureEntry, int NumberOfSpawns, int EventNumber) { int N = EventNumber; struct Data { float StartMinX; float StartMinY; float StartDiffX; float StartDiffY; float StartZ; float StartO; float EndMinX; float EndMinY; float EndDiffX; float EndDiffY; float EndZ; }; Data EventData[5] { //First (Rage Winterchill) event { 4900, -1675, 20, 20, 1322, 5.800, 5018, -1745, 17, 13, 1324 } }; Creature* Spawned = NULL; for(i = 1; i <= NeumberOfSpawns; i++) { //Use "random coords" to not let all mobs spawn at the same place float StartX = (rand()%EventData[N-1].StartDiffX) + EventData[N-1].StartMinX; float StartY = (rand()%EventData[N-1].StartDiffY) + EventData[N-1].StartMinY; float StartZ = EventData[N-1].StartZ; float StartOrientation = EventData[N-1].StartO; Spawned = m_creature->SummonCreature(CreatureEntry,StartX,StartY,StartZ,StartOrientation,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,120000); Spawned->setFaction(1720); //Make them move towards the camp (random coords again)! float CampX = (rand()%EventData[N-1].EndDiffX) + EventData[N-1].EndMinX; float CampY = (rand()%EventData[N-1].EndDiffY) + EventData[N-1].EndMinY; float CampZ = EventData[N-1].EndZ; //Calculating time we need (thanks draenei script)... Btw I think if we use SendMoveToPacket(), we would not have to calculate the time, because this function already do this. float dx = CampX - StartX; float dy = CampY - StartY; float dz = CampZ - StartZ; double dist = ::sqrt((dx*dx) + (dy*dy) + (dz*dz)); double speed = Spawned->GetSpeed(MOVE_RUN); if(speed<=0) speed = 2.5f; speed *= 0.001f; uint32 TotalTime = static_cast<uint32>( dist/speed + 0.5 ); Spawned->SendMonsterMove(CampX,CampY,CampZ,0,true,TotalTime); } } }