| 1647 | void Creature::DoFleeToGetAssistance(float radius) // Optional parameter |
| 1648 | { |
| 1649 | if (!getVictim()) |
| 1650 | return; |
| 1651 | |
| 1652 | Creature* pCreature = NULL; |
| 1653 | |
| 1654 | CellPair p(MaNGOS::ComputeCellPair(GetPositionX(), GetPositionY())); |
| 1655 | Cell cell(p); |
| 1656 | cell.data.Part.reserved = ALL_DISTRICT; |
| 1657 | cell.SetNoCreate(); |
| 1658 | |
| 1659 | MaNGOS::NearestAssistCreatureInCreatureRangeCheck u_check(this,getVictim(),radius); |
| 1660 | MaNGOS::CreatureLastSearcher<MaNGOS::NearestAssistCreatureInCreatureRangeCheck> searcher(pCreature, u_check); |
| 1661 | |
| 1662 | TypeContainerVisitor<MaNGOS::CreatureLastSearcher<MaNGOS::NearestAssistCreatureInCreatureRangeCheck>, GridTypeMapContainer > grid_creature_searcher(searcher); |
| 1663 | |
| 1664 | CellLock<GridReadGuard> cell_lock(cell, p); |
| 1665 | cell_lock->Visit(cell_lock, grid_creature_searcher, *(GetMap())); |
| 1666 | |
| 1667 | if(!GetMotionMaster()->empty() && (GetMotionMaster()->GetCurrentMovementGeneratorType() != POINT_MOTION_TYPE)) |
| 1668 | GetMotionMaster()->Clear(false); |
| 1669 | if(pCreature == NULL) |
| 1670 | { |
| 1671 | GetMotionMaster()->MoveIdle(); |
| 1672 | GetMotionMaster()->MoveFleeing(getVictim()); |
| 1673 | } |
| 1674 | else |
| 1675 | { |
| 1676 | GetMotionMaster()->MoveIdle(); |
| 1677 | GetMotionMaster()->MovePoint(0,pCreature->GetPositionX(),pCreature->GetPositionY(),pCreature->GetPositionZ()); |
| 1678 | } |
| 1679 | } |
| 1680 | |