Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Баг-репорты

Важная информация

Баг-репорты Описываем проблемы и ошибки работы ядра

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.03.2010, 07:56   #1
Dimitrius
Новичок
 
Регистрация: 07.03.2010
Сообщений: 17
Сказал(а) спасибо: 10
Поблагодарили 14 раз(а) в 4 сообщениях
Dimitrius На верном пути
По умолчанию Баг с аренами (по 1 чел. с тима)

Ревизия 9535, YTDB 537
Суть бага заключается в том, что игроки на арене умудряются играть не 2х2 а 1х1, тоесть по 1 чел. с комманды, тем самым сливая друг другу и накапливая поинты.

Последний раз редактировалось Dimitrius; 12.03.2010 в 08:01.
Dimitrius вне форума   Ответить с цитированием
Старый 12.03.2010, 09:37   #2
nix
Гость
 
Сообщений: n/a
По умолчанию

Dimitrius, а в конфигах относительно бг и арен всё поумолчанию?
  Ответить с цитированием
Старый 12.03.2010, 11:13   #3
VENOM
Новичок
 
Аватар для VENOM
 
Регистрация: 09.03.2010
Сообщений: 26
Сказал(а) спасибо: 18
Поблагодарили 3 раз(а) в 3 сообщениях
VENOM На верном пути
По умолчанию

Да некоторые игроки сделали это на моем сервере
Я понятия не имею как они это сделали
VENOM вне форума   Ответить с цитированием
Старый 12.03.2010, 12:38   #4
Dimitrius
Новичок
 
Регистрация: 07.03.2010
Сообщений: 17
Сказал(а) спасибо: 10
Поблагодарили 14 раз(а) в 4 сообщениях
Dimitrius На верном пути
По умолчанию

Цитата:
Сообщение от nix Посмотреть сообщение
Dimitrius, а в конфигах относительно бг и арен всё поумолчанию?
Да, чистый конфиг пробовали юзать.
Dimitrius вне форума   Ответить с цитированием
Старый 12.03.2010, 14:34   #5
Rage Hunter
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от Dimitrius Посмотреть сообщение
Да, чистый конфиг пробовали юзать.
Тут дело не в конфиге! Проблема в том, что регистрация на арену должна работать только в группе, а сейчас она работает и в рейде!
  Ответить с цитированием
Старый 14.03.2010, 11:02   #6
Ranger
Новичок
 
Регистрация: 07.03.2010
Сообщений: 13
Сказал(а) спасибо: 100
Поблагодарили 9 раз(а) в 6 сообщениях
Ranger На верном пути
По умолчанию

ИМХО, недостаточность проверок количества участников в файле 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;
может быть баг уйдёт.

Последний раз редактировалось Ranger; 15.03.2010 в 02:35.
Ranger вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Dimitrius (14.03.2010), Limpnau (15.03.2010)
Старый 15.03.2010, 11:45   #7
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 100 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

Попытался исправить так:
http://github.com/zergtmn/mangos/com...0779f228865936
zergtmn вне форума   Ответить с цитированием
Старый 15.03.2010, 12:40   #8
MaS0n
Модератор
 
Регистрация: 09.03.2010
Адрес: dev/null
Сообщений: 126
Сказал(а) спасибо: 44
Поблагодарили 111 раз(а) в 47 сообщениях
MaS0n Скоро придёт к известностиMaS0n Скоро придёт к известности
Отправить сообщение для MaS0n с помощью ICQ
По умолчанию

->Ranger
С проверкой все норм, просто перебор ведется...мягко говоря, неполный, по 1 группе

Как обойти эту проверку, берем тиму 5х5, инвайтим игроков, создаем рейд, раскидываем участников по разным подгруппам, офаем 4 человек и вуаля - 1 человек будет играть, причем он всегда будет попадать на такого же 1-ого, несмотря на дифференс

Попробуйте 2 варианта
1. просто запрещать рейдам рег на арены - ошибку брал от балды, какую хотите
выводите
PHP код:
diff --git a/Group.cpp b/Group.cpp
index 4afb7d6
..8851fb4 100644
--- a/Group.cpp
+++ b/Group.cpp
@@ -1483,+1483,@@ uint32 Group::CanJoinBattleGroundQueue(BattleGround const* bgOrTemplateBattleG
         
// 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 вариант - усложненный перебор
PHP код:
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* bgOrTemplateBattleG
     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 != NULLitr 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 : прощайте, тупые багеры арен)

Последний раз редактировалось MaS0n; 15.03.2010 в 12:49.
MaS0n вне форума   Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
Dimitrius (16.03.2010), Feel the Power (15.03.2010), Ranger (16.03.2010)
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 13:39. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot