Report ID | 7933 | Title | Ebon plaguebringer |
Product | DeathKnight | Status | Opravené (Severity 2 - Fair) |
Report ID #7933: Ebon plaguebringer
#1 Nerris
Posted 30 March 2012 - 10:47 AM
Popis problému: V prípade, že je v raide ďalší DeathKnight s týmto talentom tak si túto disease navzájom prepisujú. A jeden z nich prichádza o 13% z magic damage done. V prípade, že ich je viac má ebon plague stále len jeden DeathKnight a každý by mal mať vlastnú ale NEMAJÚ SA STACKOVAŤ !
Prosím o opravu.
Replies (1 - 19)
#2 Ladis
Posted 30 March 2012 - 01:51 PM
Myslím, že těch 13% Magic DMG Taken dostávají všechny DK (i ostatní hráči), co na nakažený target útočí, ale problém je hlavně u Scourge Striku, Blood Striku a dalších spellů, které si zvedají DMG v závislosti na počtu Death Knightových Diseasů na targetu...
S pozdravem Ladis.
#3 Nerris
Posted 30 March 2012 - 03:26 PM
Ladis, on 30 March 2012 - 03:51 PM, said:
Keď sa tak dá nastaviť frost fever, blood plague a kopa ďalších kravín tak táto úprava rozhodne nezabere veľa času. Aspoň si myslím.
Nepočítal som to ale včera som bol hyjal s randomom na repku a bol tam jeden zelený dk a furt mi EP prepisoval a keď náhodou afkoval mal som zázračne vyššie dps na single target aj o 1,5k aoe asi 5-7 takže by som si funkčnosťou nebol dva krát istý.
#5 Greon
Posted 04 July 2012 - 05:42 PM
#6 Ladis
Posted 03 November 2012 - 08:48 PM
Updating severity to: 2 - Fair
No...
Zrovna jsem vymyslel opravu pro Scourge Strike (ten má totiž v jádře skript), ale třeba Blood Strike ho nemá a tam to asi tedy neopravím...
Ještě musím otestovat ten SS, jestli na tom třeba nebude padat server a hlavně zda to vůbec bude fungovat =o)
EDIT: Tak jsem přišel na to, jak to pořešit i u Blood Striku a talentu Blood-Caked Blade... Jen to otestuju...
#8 Ladis
Posted 03 November 2012 - 09:59 PM
Tak to teď řeším takhle... Jestli s tím máš nějakej problém nebo to dokážeš líp, staň se developerem a pořeš to...
Ladis, on 03 November 2012 - 08:48 PM, said:
#9 Ladis
Posted 03 November 2012 - 10:19 PM
Viz Twitter:
- Ebon Plague
- efekt se však nestackuje (což je správně)
- Scourge Strike
- Blood Strike
- Blood-Caked Blade
#12 Ladis
Posted 03 November 2012 - 10:38 PM
Tak jsem to předělal a teď to hledá vyloženě auru Ebon Plague aplikovanou na targetu od daného DK... Metoda GetAura(spellId, casterGUID)
Jednodušeji to snad ani řešit nešlo =o)
#13 Ladis
Posted 03 November 2012 - 10:42 PM
Quote
#define EBON_PLAGUE_2 51734 // Ebon Plague (Rank 2)
#define EBON_PLAGUE_3 51735 // Ebon Plague (Rank 3)
#define FROST_FEVER 55095 // Frost Fever
#define BLOOD_PLAGUE 55078 // Blood Plague
uint32 diseaseCount;
diseaseCount = unitTarget->GetDiseasesByCaster(caster->GetGUID());
Aura* frostFeverByCaster = unitTarget->GetAura(FROST_FEVER, caster->GetGUID());
Aura* bloodPlagueByCaster = unitTarget->GetAura(BLOOD_PLAGUE, caster->GetGUID());
Aura* ebonPlague1ByCaster = unitTarget->GetAura(EBON_PLAGUE_1, caster->GetGUID());
Aura* ebonPlague2ByCaster = unitTarget->GetAura(EBON_PLAGUE_2, caster->GetGUID());
Aura* ebonPlague3ByCaster = unitTarget->GetAura(EBON_PLAGUE_3, caster->GetGUID());
if (diseaseCount && diseaseCount == 2 && (ebonPlague1ByCaster || ebonPlague2ByCaster || ebonPlague3ByCaster) && (frostFeverByCaster && bloodPlagueByCaster))
diseaseCount = 3;
else if (diseaseCount && diseaseCount == 1 && (ebonPlague1ByCaster || ebonPlague2ByCaster || ebonPlague3ByCaster) && (frostFeverByCaster || bloodPlagueByCaster))
diseaseCount = 2;
else
diseaseCount = diseaseCount;
int32 bp = caster->SpellDamageBonusDone(unitTarget, GetSpellInfo(), CalculatePctN(GetHitDamage(), GetEffectValue() * diseaseCount), SPELL_DIRECT_DAMAGE);
caster->CastCustomSpell(unitTarget, DK_SPELL_SCOURGE_STRIKE_TRIGGERED, &bp, NULL, NULL, true);
#16 Ladis
Posted 03 November 2012 - 10:51 PM
Quote
Aura* ebonPlague2ByCaster = unitTarget->GetAura(EBON_PLAGUE_2, caster->GetGUID());
Aura* ebonPlague3ByCaster = unitTarget->GetAura(EBON_PLAGUE_3, caster->GetGUID());
Každý z těch řádků se ptá na to, zda hráč s GUIDem caster->GetGUID() má na targetu unitTarget auru Ebon Plague (jeden z těch ranků)...
Pokud má na targetu rank 1, tak to vrátí ebonPlague1ByCaster jako TRUE a ostatní dva jako FALSE... Pokud má na targetu rank 3, tak to vrátí ebonPlague3ByCaster jako TRUE a ostatní dva jako FALSE...
Quote
else if (diseaseCount && diseaseCount == 1 && (ebonPlague1ByCaster || ebonPlague2ByCaster || ebonPlague3ByCaster) && (frostFeverByCaster || bloodPlagueByCaster))
Na těchto řádcích se pak v úseku (ebonPlague1ByCaster || ebonPlague2ByCaster || ebonPlague3ByCaster) ptá, jestli je některý z nich TRUE a pokud ano, pak se podle přítomnosti Frost Feveru a/nebo Blood Plague vrátí nová hodnota diseaseCount... A pokud ne, je hodnota diseaseCount vypočítána jako diseaseCount = unitTarget->GetDiseasesByCaster(caster->GetGUID());
#17 Greon
Posted 03 November 2012 - 10:59 PM
Ladis, on 03 November 2012 - 10:51 PM, said:
Todle mně trochu líp objasni jak to funguje prosím :)
This post has been edited by Greon: 03 November 2012 - 10:59 PM
#18 Ladis
Posted 03 November 2012 - 11:09 PM
Quote
. . . . diseaseCount = 3;
...
diseaseCount je jen pojistka, aby nepadal server...
diseaseCount == 2 se ptá na to, zda metoda unitTarget->GetDiseasesByCaster(caster->GetGUID()); vrátila hodnotu 2...
(ebonPlague1ByCaster || ebonPlague2ByCaster || ebonPlague3ByCaster) se ptá, zda jedna z těch 3 hodnot zmíněných v předchozí odpovědi byla TRUE...
(frostFeverByCaster && bloodPlagueByCaster) se ptá, zda naše DKčko má na targetu Frost Fever a Blood Plague současně...
... Pokud všechny tyhle věci platí, přejde to na řádek diseaseCount = 3;... To tedy znamená, že se původní hodnota diseaseCount = 2 změnila na diseaseCount = 3;...
if znamená "za podmínky, že"
else if znamená "jinak za podmínky, že"
else znamená "jinak"
&& znamená totiž "a současně"...
|| znamená "nebo"...