Ru-MaNGOS  

Вернуться   Ru-MaNGOS > Ядро > Патчи > Принятые патчи

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

Принятые патчи Иногда выкладывают патчи, которые потом в итоге все-таки принимают в ядро.

Повод для гордости.

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.05.2012, 18:29   #1
NeatElves
YTDB Dev
 
Аватар для NeatElves
 
Регистрация: 06.03.2010
Сообщений: 258
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
NeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранита
По умолчанию [12007] Add CONDITION_REPUTATION_RANK_MAX

1. Rename CONDITION_REPUTATION_RANK->CONDITION_REPUTATION_RANK_MIN
2. Add CONDITION_REPUTATION_RANK_MAX

Зачем: Есть нпц с госсипами, у которых текст для каждого ранга репутации, пример - охрана Черного ворона, властитель Крыльев пустоты, по старой системе мы получаем так(type,value1,value2):
Цитата:
5 349 3
5 349 4
Если имеем 4 ранг - для ядра условия текста и 3 и 4 ранга подходят.))
С новой системой поточнее:
Цитата:
5 349 3 и 30 349 4
5 349 4
Патч:
Код:
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp
index 180142b..47e46fe 100644
--- a/src/game/ObjectMgr.cpp
+++ b/src/game/ObjectMgr.cpp
@@ -7507,7 +7507,7 @@ bool PlayerCondition::Meets(Player const * player) const
             player->GetZoneAndAreaId(zone,area);
             return (zone == m_value1 || area == m_value1) == (m_value2 == 0);
         }
-        case CONDITION_REPUTATION_RANK:
+        case CONDITION_REPUTATION_RANK_MIN:
         {
             FactionEntry const* faction = sFactionStore.LookupEntry(m_value1);
             return faction && player->GetReputationMgr().GetRank(faction) >= ReputationRank(m_value2);
@@ -7676,6 +7676,11 @@ bool PlayerCondition::Meets(Player const * player) const
                 return !player->HasSkill(m_value1);
             else
                 return player->HasSkill(m_value1) && player->GetBaseSkillValue(m_value1) < m_value2;
+        case CONDITION_REPUTATION_RANK_MAX:
+        {
+            FactionEntry const* faction = sFactionStore.LookupEntry(m_value1);
+            return faction && player->GetReputationMgr().GetRank(faction) < ReputationRank(m_value2);
+        }
         default:
             return false;
     }
@@ -7772,7 +7777,8 @@ bool PlayerCondition::IsValid(uint16 entry, ConditionType condition, uint32 valu
             }
             break;
         }
-        case CONDITION_REPUTATION_RANK:
+        case CONDITION_REPUTATION_RANK_MIN:
+        case CONDITION_REPUTATION_RANK_MAX:
         {
             FactionEntry const* factionEntry = sFactionStore.LookupEntry(value1);
             if (!factionEntry)
diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h
index 229d9b2..81a7c26 100644
--- a/src/game/ObjectMgr.h
+++ b/src/game/ObjectMgr.h
@@ -345,7 +345,7 @@ enum ConditionType
     CONDITION_ITEM                  = 2,                    // item_id      count   check present req. amount items in inventory
     CONDITION_ITEM_EQUIPPED         = 3,                    // item_id      0
     CONDITION_AREAID                = 4,                    // area_id      0, 1 (0: in (sub)area, 1: not in (sub)area)
-    CONDITION_REPUTATION_RANK       = 5,                    // faction_id   min_rank
+    CONDITION_REPUTATION_RANK_MIN   = 5,                    // faction_id   min_rank
     CONDITION_TEAM                  = 6,                    // player_team  0,      (469 - Alliance 67 - Horde)
     CONDITION_SKILL                 = 7,                    // skill_id     skill_value
     CONDITION_QUESTREWARDED         = 8,                    // quest_id     0
@@ -375,6 +375,7 @@ enum ConditionType
     CONDITION_SKILL_BELOW           = 29,                   // skill_id     skill_value
                                                             // True if player has skill skill_id and skill less than (and not equal) skill_value (for skill_value > 1)
                                                             // If skill_value == 1, then true if player has not skill skill_id
+    CONDITION_REPUTATION_RANK_MAX   = 30,                   // faction_id   max_rank
 };
 
 class PlayerCondition
NeatElves вне форума  
Старый 15.05.2012, 19:15   #2
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 491
Сказал(а) спасибо: 56
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Если для MIN стоит условие
Код:
return faction && player->GetReputationMgr().GetRank(faction) >= ReputationRank(m_value2);
то для MAX по аналогии должно быть
Код:
return faction && player->GetReputationMgr().GetRank(faction) <= ReputationRank(m_value2);
virusav вне форума  
Старый 15.05.2012, 19:20   #3
NeatElves
YTDB Dev
 
Аватар для NeatElves
 
Регистрация: 06.03.2010
Сообщений: 258
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
NeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
Если для MIN стоит условие
Код:
return faction && player->GetReputationMgr().GetRank(faction) >= ReputationRank(m_value2);
то для MAX по аналогии должно быть
Код:
return faction && player->GetReputationMgr().GetRank(faction) <= ReputationRank(m_value2);
Игорк получил 4 ранг.
И что тогда выйдет ? Какой текст отработает ?
Цитата:
5 349 3 и 30 349 4
5 349 4

Последний раз редактировалось NeatElves; 15.05.2012 в 19:23.
NeatElves вне форума  
Старый 15.05.2012, 19:23   #4
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 491
Сказал(а) спасибо: 56
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Достаточно будет 5 349 3 и 30 349 4, т.к. будут выбираться ранги >=3 и <=4.
virusav вне форума  
Старый 15.05.2012, 19:27   #5
NeatElves
YTDB Dev
 
Аватар для NeatElves
 
Регистрация: 06.03.2010
Сообщений: 258
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
NeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранита
По умолчанию

Все равно не то, у нпц тексты для рангов
Цитата:
3
4
5
6
7
NeatElves вне форума  
Старый 15.05.2012, 19:43   #6
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 491
Сказал(а) спасибо: 56
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

В твоем варианте для первого ранга будет так: 5 349 3 и 30 349 4.
С моей поправкой для первого ранга будет так: 5 349 3 и 30 349 3.

Вот и вся разница.
Просто, используя MIN и MAX в кондициях, надо давать им похожую обработку: если для минимума включается равенство при сравнении, то то же самое надо делать и для максимума.
virusav вне форума  
Старый 15.05.2012, 19:47   #7
NeatElves
YTDB Dev
 
Аватар для NeatElves
 
Регистрация: 06.03.2010
Сообщений: 258
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
NeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранита
По умолчанию

У меня будет больше или равен 3 и меньше 4
У тебя будет больше или равен 3 и меньше или равен 3
Где логика ?))

Мой вариант
Цитата:
меньше 4
больше или равен 4 и меньше 5
больше или равен 5 и меньше 6
больше или равен 6 и меньше 7
больше или равен 7
Твой вариант(дубли, как раз из-за равенства)
Цитата:
меньше или равен 3
больше или равен 3 и меньше или равен 4
больше или равен 4 и меньше или равен 5
больше или равен 5 и меньше или равен 6
больше или равен 7

Последний раз редактировалось NeatElves; 15.05.2012 в 19:55.
NeatElves вне форума  
Старый 15.05.2012, 20:01   #8
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 491
Сказал(а) спасибо: 56
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Работать будет в обоих вариантах, просто в твоем цифра будет на 1 больше.
Я привел правку, т.к. так будет логичнее, на мой взгляд.
Код:
CONDITION_REPUTATION_RANK_MIN   = 5,                    // faction_id   min_rank
CONDITION_REPUTATION_RANK_MAX   = 30,                   // faction_id   max_rank
Разница только в названии, но вопреки логике сравниваемое значение включается в выборку почему-то только в первом случае.
Глядя на названия переменных и их описание, этого не скажешь.
virusav вне форума  
Старый 15.05.2012, 20:33   #9
NeatElves
YTDB Dev
 
Аватар для NeatElves
 
Регистрация: 06.03.2010
Сообщений: 258
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
NeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранита
По умолчанию

Странно, допустим у игрока ранг 4, подходят оба варианта
Код:
больше или равен 3 и меньше или равен 4
больше или равен 4 и меньше или равен 5
NeatElves вне форума  
Старый 15.05.2012, 20:39   #10
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 491
Сказал(а) спасибо: 56
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Если нужен только ранг Х, то для кондиций 5 и 30 `value2`=X.
virusav вне форума  
Старый 15.05.2012, 20:54   #11
NeatElves
YTDB Dev
 
Аватар для NeatElves
 
Регистрация: 06.03.2010
Сообщений: 258
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
NeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранита
По умолчанию

Распиши свое видение условий для
Цитата:
3
4
5
6
7
NeatElves вне форума  
Старый 15.05.2012, 23:30   #12
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 491
Сказал(а) спасибо: 56
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Я уже писал для первого, для всех будет так:
Код:
5 349 3 и 30 349 3
5 349 4 и 30 349 4
5 349 5 и 30 349 5
5 349 6 и 30 349 6
5 349 7 и 30 349 7
virusav вне форума  
Старый 13.06.2012, 16:54   #13
schmoozerd
MaNGOS Dev
 
Регистрация: 17.11.2011
Сообщений: 99
Сказал(а) спасибо: 35
Поблагодарили 80 раз(а) в 26 сообщениях
schmoozerd Скоро придёт к известности
По умолчанию

I agree with virusav.
MAX value2 return true IF_AND_ONLY_IF rank <= value2

this is more natural way. for something named max (and dual to min).
schmoozerd вне форума  
Старый 13.06.2012, 17:20   #14
NeatElves
YTDB Dev
 
Аватар для NeatElves
 
Регистрация: 06.03.2010
Сообщений: 258
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
NeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранита
По умолчанию

Не спорю) У вирусава логично математически, у меня логично по близзардовски.))
NeatElves вне форума  
Старый 13.06.2012, 23:36   #15
schmoozerd
MaNGOS Dev
 
Регистрация: 17.11.2011
Сообщений: 99
Сказал(а) спасибо: 35
Поблагодарили 80 раз(а) в 26 сообщениях
schmoozerd Скоро придёт к известности
По умолчанию

With <= in [12007]
Thank you for the patch and you both for discussion
schmoozerd вне форума  
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[12007] Add new CONDITION_REPUTATION_RANK_MAX (30) newsbot CMaNGOS Commits 0 13.06.2012 23:40


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


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