Changeset 174 for trunk/src/game/Map.cpp
- Timestamp:
- 11/19/08 13:43:15 (17 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/game/Map.cpp
r173 r174 256 256 { 257 257 // add to world object registry in grid 258 if(obj->isPet() )258 if(obj->isPet() || obj->isPossessedByPlayer()) 259 259 { 260 260 (*grid)(cell.CellX(), cell.CellY()).AddWorldObject<Creature>(obj, obj->GetGUID()); … … 300 300 { 301 301 // remove from world object registry in grid 302 if(obj->isPet() )302 if(obj->isPet() || obj->isPossessedByPlayer()) 303 303 { 304 304 (*grid)(cell.CellX(), cell.CellY()).RemoveWorldObject<Creature>(obj, obj->GetGUID()); … … 310 310 } 311 311 } 312 313 template<class T> 314 void Map::SwitchGridContainers(T* obj, bool active) 315 { 316 CellPair pair = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY()); 317 Cell cell(pair); 318 NGridType *grid = getNGrid(cell.GridX(), cell.GridY()); 319 320 if (active) 321 { 322 (*grid)(cell.CellX(), cell.CellY()).RemoveGridObject<T>(obj, obj->GetGUID()); 323 (*grid)(cell.CellX(), cell.CellY()).AddWorldObject<T>(obj, obj->GetGUID()); 324 } else 325 { 326 (*grid)(cell.CellX(), cell.CellY()).RemoveWorldObject<T>(obj, obj->GetGUID()); 327 (*grid)(cell.CellX(), cell.CellY()).AddGridObject<T>(obj, obj->GetGUID()); 328 } 329 } 330 331 template void Map::SwitchGridContainers(Creature *, bool); 332 template void Map::SwitchGridContainers(Corpse *, bool); 312 333 313 334 template<class T> … … 468 489 } 469 490 470 void Map::MessageBroadcast(Player *player, WorldPacket *msg, bool to_self )491 void Map::MessageBroadcast(Player *player, WorldPacket *msg, bool to_self, bool to_possessor) 471 492 { 472 493 CellPair p = Trinity::ComputeCellPair(player->GetPositionX(), player->GetPositionY()); … … 484 505 return; 485 506 486 Trinity::MessageDeliverer post_man(*player, msg, to_ self);507 Trinity::MessageDeliverer post_man(*player, msg, to_possessor, to_self); 487 508 TypeContainerVisitor<Trinity::MessageDeliverer, WorldTypeMapContainer > message(post_man); 488 509 CellLock<ReadGuard> cell_lock(cell, p); … … 490 511 } 491 512 492 void Map::MessageBroadcast(WorldObject *obj, WorldPacket *msg )513 void Map::MessageBroadcast(WorldObject *obj, WorldPacket *msg, bool to_possessor) 493 514 { 494 515 CellPair p = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY()); … … 507 528 return; 508 529 509 Trinity::ObjectMessageDeliverer post_man( msg);530 Trinity::ObjectMessageDeliverer post_man(*obj, msg, to_possessor); 510 531 TypeContainerVisitor<Trinity::ObjectMessageDeliverer, WorldTypeMapContainer > message(post_man); 511 532 CellLock<ReadGuard> cell_lock(cell, p); … … 513 534 } 514 535 515 void Map::MessageDistBroadcast(Player *player, WorldPacket *msg, float dist, bool to_self, bool own_team_only )536 void Map::MessageDistBroadcast(Player *player, WorldPacket *msg, float dist, bool to_self, bool own_team_only, bool to_possessor) 516 537 { 517 538 CellPair p = Trinity::ComputeCellPair(player->GetPositionX(), player->GetPositionY()); … … 529 550 return; 530 551 531 Trinity::MessageDistDeliverer post_man(*player, msg, dist, to_self, own_team_only);552 Trinity::MessageDistDeliverer post_man(*player, msg, to_possessor, dist, to_self, own_team_only); 532 553 TypeContainerVisitor<Trinity::MessageDistDeliverer , WorldTypeMapContainer > message(post_man); 533 554 CellLock<ReadGuard> cell_lock(cell, p); … … 535 556 } 536 557 537 void Map::MessageDistBroadcast(WorldObject *obj, WorldPacket *msg, float dist )558 void Map::MessageDistBroadcast(WorldObject *obj, WorldPacket *msg, float dist, bool to_possessor) 538 559 { 539 560 CellPair p = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY()); … … 552 573 return; 553 574 554 Trinity::ObjectMessageDistDeliverer post_man(*obj, msg, dist);575 Trinity::ObjectMessageDistDeliverer post_man(*obj, msg, to_possessor, dist); 555 576 TypeContainerVisitor<Trinity::ObjectMessageDistDeliverer, WorldTypeMapContainer > message(post_man); 556 577 CellLock<ReadGuard> cell_lock(cell, p); … … 650 671 651 672 obj->RemoveFromWorld(); 673 652 674 RemoveFromGrid(obj,grid,cell); 653 675 … … 698 720 UpdatePlayerVisibility(player,new_cell,new_val); 699 721 UpdateObjectsVisibilityFor(player,new_cell,new_val); 722 723 // also update what possessing player sees 724 if(player->isPossessedByPlayer()) 725 UpdateObjectsVisibilityFor((Player*)player->GetCharmer(), new_cell, new_val); 726 700 727 PlayerRelocationNotify(player,new_cell,new_val); 701 728 NGridType* newGrid = getNGrid(new_cell.GridX(), new_cell.GridY()); … … 726 753 AddCreatureToMoveList(creature,x,y,z,ang); 727 754 // in diffcell/diffgrid case notifiers called at finishing move creature in Map::MoveAllCreaturesInMoveList 755 if(creature->isPossessedByPlayer()) 756 EnsureGridLoadedForPlayer(new_cell, (Player*)creature->GetCharmer(), false); 728 757 } 729 758 else 730 759 { 731 760 creature->Relocate(x, y, z, ang); 761 // Update visibility back to player who is controlling the creature 762 if(creature->isPossessedByPlayer()) 763 UpdateObjectsVisibilityFor((Player*)creature->GetCharmer(), new_cell, new_val); 764 732 765 CreatureRelocationNotify(creature,new_cell,new_val); 733 766 }