Я всегда ставил этот патч:
Код:
diff --git a/src/game/Group.cpp b/src/game/Group.cpp
index 4090d91..69f6cb2 100644
--- a/src/game/Group.cpp
+++ b/src/game/Group.cpp
@@ -290,6 +290,16 @@ bool Group::AddMember(const uint64 &guid, const char* name)
player->SendRaidDifficulty(true);
}
}
+ // Group Interfactions interactions (test)
+ if(sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_GROUP))
+ {
+ Group *group = player->GetGroup();
+ if(Player *leader = sObjectMgr.GetPlayer(group->GetLeaderGuid()))
+ {
+ player->setFactionForRace(leader->getRace());
+ sLog.outDebug( "WORLD: Group Interfaction Interactions - Faction changed (AddMember)" );
+ }
+ }
}
player->SetGroupUpdateFlag(GROUP_UPDATE_FULL);
UpdatePlayerOutOfRange(player);
@@ -335,6 +345,12 @@ uint32 Group::RemoveMember(const uint64 &guid, const uint8 &method)
data << uint64(0) << uint32(0) << uint32(0) << uint64(0);
player->GetSession()->SendPacket(&data);
}
+ // Restore original faction if needed
+ if(sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_GROUP))
+ {
+ player->setFactionForRace(player->getRace());
+ sLog.outDebug( "WORLD: Group Interfaction Interactions - Restore original faction (RemoveMember)" );
+ }
_homebindIfInstance(player);
}
@@ -391,6 +407,12 @@ void Group::Disband(bool hideDestroy)
player->SetOriginalGroup(NULL);
else
player->SetGroup(NULL);
+ // Restore original faction if needed
+ if(sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_GROUP))
+ {
+ player->setFactionForRace(player->getRace());
+ sLog.outDebug( "WORLD: Group Interfaction Interactions - Restore original faction (Disband)" );
+ }
}
// quest related GO state dependent from raid membership
Возможно, есть недочеты.