Ну вообще этот вариант патча очень старенький... Даже старше, чем тот, что был изначально в теме.
Вот только тот, что бы перестал нормально работать и тоже по страшному глючил.
Вот предыдущий вариант:
PHP код:
diff --git a/src/game/Group.cpp b/src/game/Group.cpp
index 7aa97e1..6032dfb 100644
--- a/src/game/Group.cpp
+++ b/src/game/Group.cpp
@@ -294,6 +294,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);
@@ -340,6 +350,12 @@ uint32 Group::RemoveMember(const uint64 &guid, const uint8 &method)
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);
}
@@ -395,6 +411,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
Проще и короче, но не учитывает пэтов и тотемы и ещё какие-то проблемы с ним последнее время были.
rsa, можешь предложить что-то стоящее взамен обоих вариантов?