Ru-MaNGOS  

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

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

Патчи на рассмотрении Рассматриваемые к принятию патчи

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.04.2012, 19:56   #1
Den
Ученый
 
Регистрация: 10.03.2010
Сообщений: 282
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
Den Скоро придёт к известностиDen Скоро придёт к известности
По умолчанию Fix use item 3434

Нельзя применить к цели выше 30-го уровня.

Код:
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index a389f3c..8846f0c 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -4846,6 +4846,14 @@ SpellCastResult Spell::CheckCast(bool strict)
                 return SPELL_FAILED_CASTER_AURASTATE;
         }
 
+        // Sleep (item 3434)
+        if (m_spellInfo->Id == 700)
+        {
+            int32 targetLevel = m_targets.getUnitTarget()->getLevel();
+            if (targetLevel > 30)
+                return SPELL_FAILED_FIZZLE;
+        }
+
         // totem immunity for channeled spells(needs to be before spell cast)
         // spell attribs for player channeled spells
         if (m_spellInfo->HasAttribute(SPELL_ATTR_EX_UNK14)
Den вне форума   Ответить с цитированием
Старый 24.04.2012, 00:01   #2
schmoozerd
MaNGOS Dev
 
Регистрация: 17.11.2011
Сообщений: 99
Сказал(а) спасибо: 35
Поблагодарили 80 раз(а) в 26 сообщениях
schmoozerd Скоро придёт к известности
По умолчанию

Hi Den *wave

on wowhead it says about this item: "Unreliable on targets above level 30."
http://old.wowhead.com/item=3434#comments

So I would assume it might still work (with a lower chance)
schmoozerd вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Amaru (24.04.2012)
Старый 24.04.2012, 09:04   #3
Den
Ученый
 
Регистрация: 10.03.2010
Сообщений: 282
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
Den Скоро придёт к известностиDen Скоро придёт к известности
По умолчанию

Hi schmoozerd.

Not so long ago, did this quest and checked that the purpose above the 30th level doesn't affect.

later still I will check
Den вне форума   Ответить с цитированием
Старый 14.05.2012, 12:33   #4
Den
Ученый
 
Регистрация: 10.03.2010
Сообщений: 282
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
Den Скоро придёт к известностиDen Скоро придёт к известности
По умолчанию

Возвращаемся к этому вопросу. Оказывается что, если взять предмет схожий с выше указанным, к примеру http://www.wowhead.com/item=4360 то получается, что на цель 34 уровня предмет не действует вообще. Выходит так, на каждый уровень по 10% снимается шанс, что предмет будет использован.

We come back to this question. It appears that if to take a subject similar with above specified, for example http://www.wowhead.com/item=4360 that turns out that 34 levels the subject doesn't affect the purpose in general. Leaves so, on each level on 10 % the chance acts in film that the subject will be used.

Код:
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index bfc115d..01098dd 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -4919,6 +4919,31 @@ SpellCastResult Spell::CheckCast(bool strict)
                 return SPELL_FAILED_CASTER_AURASTATE;
         }
 
+        // Sleep (item 3434)
+        if (m_spellInfo->Id == 700)
+        {
+            int32 targetLevel = m_targets.getUnitTarget()->GetLevel();
+            float chance = m_spellInfo->procChance;
+
+            switch (targetLevel)
+            {
+                case 31: chance = 90.0f; break;
+                case 32: chance = 80.0f; break;
+                case 33: chance = 70.0f; break;
+                case 34: chance = 60.0f; break;
+                case 35: chance = 50.0f; break;
+                case 36: chance = 40.0f; break;
+                case 37: chance = 30.0f; break;
+                case 38: chance = 20.0f; break;
+                case 39: chance = 10.0f; break;
+            }
+
+            if (!roll_chance_i(chance) || targetLevel >= 40)
+                return SPELL_FAILED_FIZZLE;
+
+            return SPELL_CAST_OK;
+        }
+
         // totem immunity for channeled spells(needs to be before spell cast)
         // spell attribs for player channeled spells
         if (m_spellInfo->HasAttribute(SPELL_ATTR_EX_UNK14)
PS Попробовал перевести переводчиком обратно этот же текст на русский, последнее предложение
Den вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
partizanes (15.05.2012)
Старый 14.05.2012, 12:47   #5
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

м.б как то так вместо свича(просто идея)

Код:
if(targetLevel> 30)
change = change-((targetLevel- 30)*10)

p.s по идеи можно использовать параметр max вместо 30 из
Код:
Spell Level = 8, base 8, max 30, maxTarget 0
и по второму приведенному примеру
Код:
Spell Level = 0, base 0, max 24, maxTarget 0
для расчёта шанса и сделать общим для всех таких видов спеллов.

что то типа
Код:
if (max>1 && targetLevel> max)
{
change = change-((targetLevel - max)*10))
if(change <0)
return SPELL_FAILED_FIZZLE;
}
единственное что не учел наверно это что шанс то 101 ))
__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 14.05.2012 в 14:40.
partizanes вне форума   Ответить с цитированием
Старый 15.05.2012, 02:34   #6
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

все что осмыслил ,пересмотрел все спелы с первым if
(думаю что как то так)
в коде есть я думаю ошибки(по синтаксису) ,но тому кому надо поймет суть.

Код:
if (SPELL_AURA_MOD_STUN &&  m_spellInfo->maxlevel > 0 && m_spellInfo->maxlevel < m_targets.getUnitTarget()->GetLevel())
{
 int32 targetLevel = m_targets.getUnitTarget()->GetLevel();
 int32 maxlevel    =  m_spellInfo->maxlevel();

 float change = change-((targetLevel - maxlevel)*10));

  if (chance <= 1)
    return SPELL_FAILED_FIZZLE;	
}
__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 15.05.2012 в 15:28.
partizanes вне форума   Ответить с цитированием
Старый 18.05.2012, 00:46   #7
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

итоговый рабочий вариант
Код:
case SPELL_AURA_MOD_STUN
Код:
     if (m_spellInfo->maxLevel > 0 && m_spellInfo->maxLevel < m_targets.getUnitTarget()->getLevel())
	{
		int32 targetLevel = m_targets.getUnitTarget()->getLevel();
		int32 maxlevel    =  m_spellInfo->maxLevel;					
		float change = m_spellInfo->procChance;

                change -= (targetLevel - maxlevel)*10;
		
		if (change <= 1)
		return SPELL_FAILED_FIZZLE;	
	}
вопрос 1:куда запихнуть?(вопрос2,3)
вопрос 2:что конкретно не срабатывает Эффект ? Урон
вопрос 3 когда проверят до каста ? после каста
вопрос 4: учитывая как я понял что почти везде шанс каста 101% ,возникает вопрос учитывать ли 1% как рандом - тоесть
Код:
//101    - ( 60    -  50  )   * 10  = 1%  
change -= (targetLevel - maxlevel)*10;

if (change <= 1)   ?  if (change <=0)
вопрос5: как вернуть шанс в функцию в которой будет производится вычисления с шансом (если проверка уже после каста)
__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 18.05.2012 в 07:49.
partizanes вне форума   Ответить с цитированием
Старый 18.11.2012, 15:25   #8
schmoozerd
MaNGOS Dev
 
Регистрация: 17.11.2011
Сообщений: 99
Сказал(а) спасибо: 35
Поблагодарили 80 раз(а) в 26 сообщениях
schmoozerd Скоро придёт к известности
По умолчанию

little bump here

A small note about the 101 chance:
I always thought that 101 chance would mean "hits always"

But it is possible that the 101 chance is an entirely independend chance calculation, and in these cases we just need to use the other values for calculation

Some more notes about targeting:
spell http://www.wowhead.com/spell=4064 has no unit-targeting, but is AoE-Dest-Targeting, so this calculation would not fit into CheckCast.

Also it would be required to ensure that the code is safe (not checked if getUnitTarget returns a valid pointer)
schmoozerd вне форума   Ответить с цитированием
Ответ

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

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[11612] Cleanup codestyle in Item.cpp & Item.h Den Принятые патчи 1 06.06.2011 11:46
[11227] Fixed item search by guid in bank item slots. newsbot CMaNGOS Commits 0 06.03.2011 18:02
[10680] Update item buy code for new way vendor item lists work. newsbot CMaNGOS Commits 0 04.11.2010 20:40
[10641] Fixed use item dynamic/item proto flags. newsbot CMaNGOS Commits 0 25.10.2010 15:30
[9727] Build equiped item data only for item's owner newsbot CMaNGOS Commits 0 11.04.2010 07:50


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


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