void GroupObjectImplementation::disband() { // this locked ManagedReference<ChatRoom* > chat = chatRoom; for (int i = 0; i < groupMembers.size(); i++) { if (groupMembers.get(i) == NULL) { continue; } Reference<CreatureObject*> groupMember = getGroupMember(i).castTo<CreatureObject*>(); try { Locker clocker(groupMember, _this.get()); if (groupMember->isPlayerCreature()) { if (chat != NULL) { chat->removePlayer(groupMember, false); chat->sendDestroyTo(groupMember); ChatRoom* room = chat->getParent(); room->sendDestroyTo(groupMember); } if (groupMember->getPlayerObject() != NULL) { PlayerObject* ghost = groupMember->getPlayerObject(); ghost->removeWaypointBySpecialType(WaypointObject::SPECIALTYPE_NEARESTMISSIONFORGROUP); } } groupMember->updateGroup(NULL); //play->updateGroupId(0); //sendClosestWaypointDestroyTo(play); //removeSquadLeaderBonuses(play); } catch (Exception& e) { System::out << "Exception in GroupObject::disband(Player* player)\n"; } } destroyChatRoom(); if (hasSquadLeader()) removeGroupModifiers(); groupMembers.removeAll(); //The mission waypoints should not be destroyed. They belong to the players. //missionWaypoints.removeAll(); }
void GroupObjectImplementation::disband() { //Group is locked for (int i = 0; i < groupMembers.size(); i++) { if (groupMembers.get(i) == NULL) continue; Reference<CreatureObject*> groupMember = getGroupMember(i); try { Locker clocker(groupMember, _this.getReferenceUnsafeStaticCast()); if (groupMember->isPlayerCreature()) { PlayerObject* ghost = groupMember->getPlayerObject(); if (ghost != NULL) { ghost->removeWaypointBySpecialType(WaypointObject::SPECIALTYPE_NEARESTMISSIONFORGROUP); } } groupMember->updateGroup(NULL); } catch (Exception& e) { System::out << "Exception in GroupObject::disband(Player* player)\n"; } } if (hasSquadLeader()) removeGroupModifiers(); while (groupMembers.size() > 0) { CreatureObject* member = groupMembers.get(0).get().get(); updatePvPStatusNearCreature(member); groupMembers.remove(0); } destroyChatRoom(); }