Просмотр полной версии : Баг с аренами (по 1 чел. с тима)
Dimitrius
12.03.2010, 07:56
Ревизия 9535, YTDB 537
Суть бага заключается в том, что игроки на арене умудряются играть не 2х2 а 1х1, тоесть по 1 чел. с комманды, тем самым сливая друг другу и накапливая поинты.
Dimitrius, а в конфигах относительно бг и арен всё поумолчанию?
Да некоторые игроки сделали это на моем сервере
Я понятия не имею как они это сделали
:mad:
Dimitrius
12.03.2010, 12:38
Dimitrius, а в конфигах относительно бг и арен всё поумолчанию?
Да, чистый конфиг пробовали юзать.
Rage Hunter
12.03.2010, 14:34
Да, чистый конфиг пробовали юзать.
Тут дело не в конфиге! Проблема в том, что регистрация на арену должна работать только в группе, а сейчас она работает и в рейде!
ИМХО, недостаточность проверок количества участников в файле Group.cpp в функции Group::CanJoinBattleGroundQueue
// check for min / max count
uint32 memberscount = GetMembersCount();
if(memberscount < MinPlayerCount)
return BG_JOIN_ERR_GROUP_NOT_ENOUGH;
Необходимо учесть, что функция GetMembersCount() возвращает общее количество участников, в том числе и offline-участников. Таким образом, проверка if(memberscount < MinPlayerCount) проходит на ура.
Логично предположить, что необходимо добавить ещё одну проверку на количество online-участников, и, если их не достаточно, возвращать ошибку типа BG_JOIN_ERR_OFFLINE_MEMBER
P.S. Моё ИМХО.
Добавлено:
Вот это меня вводит в заблуждение:
Player *member = itr->getSource();
// offline member? don't let join
if(!member)
return BG_JOIN_ERR_OFFLINE_MEMBER;
Попробуйте добавить условие или !member->IsInWorld()
Player *member = itr->getSource();
// offline member? don't let join
if(!member || !member->IsInWorld())
return BG_JOIN_ERR_OFFLINE_MEMBER;
может быть баг уйдёт.
.:: Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 100 сообщение(ий)) ::.
Попытался исправить так:
http://github.com/zergtmn/mangos/commit/07247432865d9dd04ee18de8410779f228865936
->Ranger
С проверкой все норм, просто перебор ведется...мягко говоря, неполный, по 1 группе
Как обойти эту проверку, берем тиму 5х5, инвайтим игроков, создаем рейд, раскидываем участников по разным подгруппам, офаем 4 человек и вуаля - 1 человек будет играть, причем он всегда будет попадать на такого же 1-ого, несмотря на дифференс
Попробуйте 2 варианта
1. просто запрещать рейдам рег на арены - ошибку брал от балды, какую хотите
выводите
diff --git a/Group.cpp b/Group.cpp
index 4afb7d6..8851fb4 100644
--- a/Group.cpp
+++ b/Group.cpp
@@ -1483,6 +1483,9 @@ uint32 Group::CanJoinBattleGroundQueue(BattleGround const* bgOrTemplate, BattleG
// don't allow cross-faction join as group
if(member->GetTeam() != team)
return BG_JOIN_ERR_MIXED_FACTION;
+ // don't allow join as raid on arenas
+ if (isRated && member->GetGroup()->isRaidGroup())
+ return BG_JOIN_ERR_GROUP_TOO_MANY;
// not in the same battleground level braket, don't let join
PvPDifficultyEntry const* memberBracketEntry = GetBattlegroundBracketByLevel(bracketEntry->mapId,member->getLevel());
if(memberBracketEntry != bracketEntry)
2 вариант - усложненный перебор
diff --git a/Group.cpp b/Group.cpp
index 4afb7d6..474dc4d 100644
--- a/Group.cpp
+++ b/Group.cpp
@@ -1473,10 +1473,11 @@ uint32 Group::CanJoinBattleGroundQueue(BattleGround const* bgOrTemplate, BattleG
uint32 arenaTeamId = reference->GetArenaTeamId(arenaSlot);
uint32 team = reference->GetTeam();
- // check every member of the group to be able to join
- for(GroupReference *itr = GetFirstMember(); itr != NULL; itr = itr->next())
+ // check every member of the group and raid to be able to join
+ Group::MemberSlotList members = GetMemberSlots();
+ for (Group::member_citerator itr = members.begin(); itr != members.end(); itr++)
{
- Player *member = itr->getSource();
+ Player *member = objmgr.GetPlayer(itr->guid);
// offline member? don't let join
if(!member)
return BG_JOIN_ERR_OFFLINE_MEMBER;
+ я еще в установлениии очереди сразу запрещал рейды, т.е рейдом ты не встанешь никогда на арену...обновлюсь - выложу, если кому надо будет
ПС : почти так же, как и у zergtmn'a
ПС2 : прощайте, тупые багеры арен)
vBulletin® v3.8.4, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot