void GroupManager::makeLeader(GroupObject* group, CreatureObject* player, CreatureObject* newLeader) { // Pre: player locked // Post: player locked player->unlock(); try { group->wlock(); if (group->getLeader() != player) { player->sendSystemMessage("@group:must_be_leader"); group->unlock(); player->wlock(); return; } if (!group->hasMember(newLeader) || !newLeader->isPlayerCreature()) { group->unlock(); player->wlock(); return; } group->makeLeader(newLeader); String firstNameLeader; firstNameLeader = "[Offline player]"; if (newLeader->isPlayerCreature()) { CreatureObject* playerLeader = cast<CreatureObject*>( newLeader); if (playerLeader->isOnline()) firstNameLeader= playerLeader->getFirstName(); } StringIdChatParameter message; message.setStringId("group", "new_leader"); // %TU is now the group leader. message.setTU(newLeader); for (int i = 0; i < group->getGroupSize(); i++) { Reference<CreatureObject*> play = ( group->getGroupMember(i)).castTo<CreatureObject*>(); if (play->isPlayerCreature()) play->sendSystemMessage(message); } group->unlock(); } catch (...) { group->unlock(); player->wlock(); throw; } player->wlock(); }