Pages/SpellDetailPage

* fixed "modefied-by" and "modifies" tab having different results
 * evalueate some more spell effects
 * replace magic numbers with defined strings
 * get model info from some more spell auras
This commit is contained in:
Sarjuuk 2024-02-26 01:17:44 +01:00
parent 3dfdc300c5
commit 9aeb2177cf
2 changed files with 184 additions and 162 deletions

View file

@ -75,7 +75,8 @@ class SpellList extends BaseType
SPELL_AURA_PERIODIC_DUMMY, SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE, SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE, SPELL_AURA_CONTROL_VEHICLE, SPELL_AURA_LINKED
);
public const AURAS_MODEL_NPC = array(
SPELL_AURA_TRANSFORM, SPELL_AURA_MOUNTED
SPELL_AURA_TRANSFORM, SPELL_AURA_MOUNTED, SPELL_AURA_CHANGE_MODEL_FOR_ALL_HUMANOIDS, SPELL_AURA_X_RAY,
SPELL_AURA_MOD_FAKE_INEBRIATE
);
public const AURAS_PERIODIC_SCALING = array(
SPELL_AURA_PERIODIC_DAMAGE, SPELL_AURA_PERIODIC_HEAL, SPELL_AURA_PERIODIC_LEECH
@ -738,11 +739,16 @@ class SpellList extends BaseType
{
foreach ($indizes as $idx)
{
$results[$srcId][$idx] = array(
$res = array(
'typeId' => $nId,
'displayId' => $nModels->getRandomModelId(),
'displayName' => $nModels->getField('name', true)
);
if ($nModels->getField('humanoid'))
$res['humanoid'] = 1;
$results[$srcId][$idx] = $res;
}
}
}

View file

@ -24,6 +24,11 @@ class SpellPage extends GenericPage
private $firstRank = 0;
private $powerTpl = '$WowheadPower.registerSpell(%d, %d, %s);';
private static $modAuras = [SPELL_AURA_ADD_FLAT_MODIFIER, SPELL_AURA_ADD_PCT_MODIFIER, SPELL_AURA_NO_REAGENT_USE,
SPELL_AURA_ABILITY_PERIODIC_CRIT, SPELL_AURA_MOD_TARGET_ABILITY_ABSORB_SCHOOL, SPELL_AURA_ABILITY_IGNORE_AURASTATE,
SPELL_AURA_ALLOW_ONLY_ABILITY, SPELL_AURA_IGNORE_MELEE_RESET, SPELL_AURA_ABILITY_CONSUME_NO_AMMO,
SPELL_AURA_MOD_IGNORE_SHAPESHIFT, SPELL_AURA_PERIODIC_HASTE /* SPELL_AURA_DUMMY ? */];
public function __construct($pageCall, $id)
{
parent::__construct($pageCall, $id);
@ -361,15 +366,14 @@ class SpellPage extends GenericPage
// tab: [$this] modifies
$sub = ['OR'];
$conditions = [
['s.typeCat', [0, -9, -8], '!'], // uncategorized (0), GM (-9), NPC-Spell (-8); NPC includes totems, lightwell and others :/
['s.typeCat', [-9], '!'], // GM (-9); also include uncategorized (0), NPC-Spell (-8)?; NPC includes totems, lightwell and others :/
['s.spellFamilyId', $this->subject->getField('spellFamilyId')],
&$sub
];
for ($i = 1; $i < 4; $i++)
{
// include dummy..? (4)
if (!in_array($this->subject->getField('effect'.$i.'AuraId'), [107, 108, 256, 286, 195, 262, 263, 272, 274, 275, 316 /*, 4*/]))
if (!in_array($this->subject->getField('effect'.$i.'AuraId'), self::$modAuras))
continue;
$m1 = $this->subject->getField('effect1SpellClassMask'.$j[$i]);
@ -408,6 +412,7 @@ class SpellPage extends GenericPage
// tab: [$this is] modified by
$sub = ['OR'];
$conditions = [
['s.typeCat', [-9], '!'], // GM (-9); also include uncategorized (0), NPC-Spell (-8)?; NPC includes totems, lightwell and others :/
['s.spellFamilyId', $this->subject->getField('spellFamilyId')],
&$sub
];
@ -423,7 +428,7 @@ class SpellPage extends GenericPage
$sub[] = array(
'AND',
['s.effect'.$i.'AuraId', [107, 108, 256, 286, 195, 262, 263, 272, 274, 275, 316 /*, 4*/]],
['s.effect'.$i.'AuraId', self::$modAuras],
[
'OR',
['s.effect1SpellClassMask'.$j[$i], $m1, '&'],
@ -549,9 +554,9 @@ class SpellPage extends GenericPage
{
$conditions = array(
'OR',
['AND', ['effect1AuraId', 293], ['effect1MiscValue', $so]],
['AND', ['effect2AuraId', 293], ['effect2MiscValue', $so]],
['AND', ['effect3AuraId', 293], ['effect3MiscValue', $so]]
['AND', ['effect1AuraId', SPELL_AURA_OVERRIDE_SPELLS], ['effect1MiscValue', $so]],
['AND', ['effect2AuraId', SPELL_AURA_OVERRIDE_SPELLS], ['effect2MiscValue', $so]],
['AND', ['effect3AuraId', SPELL_AURA_OVERRIDE_SPELLS], ['effect3MiscValue', $so]]
);
$ubSpells = new SpellList($conditions);
if (!$ubSpells->error)
@ -1171,7 +1176,7 @@ class SpellPage extends GenericPage
$data = [];
$seSounds = [];
for ($i = 1; $i < 4; $i++) // sounds from screen effect
if ($this->subject->getField('effect'.$i.'AuraId') == 260)
if ($this->subject->getField('effect'.$i.'AuraId') == SPELL_AURA_SCREEN_EFFECT)
$seSounds = DB::Aowow()->selectRow('SELECT `ambienceDay`, `ambienceNight`, `musicDay`, `musicNight` FROM ?_screeneffect_sounds WHERE `id` = ?d', $this->subject->getField('effect'.$i.'MiscValue'));
$activitySounds = DB::Aowow()->selectRow('SELECT * FROM ?_spell_sounds WHERE id = ?d', $this->subject->getField('spellVisualId'));
@ -1686,10 +1691,10 @@ class SpellPage extends GenericPage
// parse masks and indizes
switch ($effId)
{
case 8: // Power Drain
case 30: // Energize
case 62: // Power Burn
case 137: // Energize Pct
case SPELL_EFFECT_POWER_DRAIN:
case SPELL_EFFECT_ENERGIZE:
case SPELL_EFFECT_POWER_BURN:
case SPELL_EFFECT_ENERGIZE_PCT:
if ($_ = Lang::spell('powerTypes', $effMV))
$foo['name'] .= $fmtStaffTT('('.$_.')', 'MiscValue'.Lang::main('colon').$effMV);
else
@ -1699,7 +1704,7 @@ class SpellPage extends GenericPage
$foo['value'] = ($effDS && $effDS != 1 ? (($effBP + 1) / 10).Lang::game('valueDelim') : null).(($effBP + $effDS) / 10);
break;
case 11: // Bind
case SPELL_EFFECT_BIND:
if ($effMV <= 0)
$foo['name'] .= $fmtStaffTT('('.Lang::spell('currentArea').')', 'MiscValue'.Lang::main('colon').$effMV);
else if ($_ = ZoneList::getName($effMV))
@ -1707,18 +1712,19 @@ class SpellPage extends GenericPage
else
$foo['name'] .= Util::ucFirst(Lang::game('zone')).' #'.$effMV;
break;
case 16: // Complete Quest
case 139: // Abandon Quest
case SPELL_EFFECT_QUEST_COMPLETE:
case SPELL_EFFECT_CLEAR_QUEST:
case SPELL_EFFECT_QUEST_FAIL:
if ($_ = QuestList::getName($effMV))
$foo['name'] .= '(<a href="?quest='.$effMV.'">'.$_.'</a>)';
else
$foo['name'] .= Util::ucFirst(Lang::game('quest')).' #'.$effMV;;
break;
case 28: // Summon
case 56: // Summon Pet
case 90: // Kill Credit
case 112: // Summon Demon
case 134: // Kill Credit2
case SPELL_EFFECT_SUMMON:
case SPELL_EFFECT_SUMMON_PET:
case SPELL_EFFECT_KILL_CREDIT:
case SPELL_EFFECT_SUMMON_DEMON:
case SPELL_EFFECT_KILL_CREDIT2:
if ($summon = $this->subject->getModelInfo($this->typeId, $i))
$redButtons[BUTTON_VIEW3D] = ['type' => Type::NPC, 'displayId' => $summon['displayId']];
@ -1728,24 +1734,24 @@ class SpellPage extends GenericPage
$foo['name'] .= $_;
break;
case 33: // Open Lock
case SPELL_EFFECT_OPEN_LOCK:
if ($effMV && ($_ = Lang::spell('lockType', $effMV)))
$foo['name'] .= ' ('.$fmtStaffTT($_, 'MiscValue'.Lang::main('colon').$effMV).')';
else
$foo['name'] .= ' ('.$effMV.')';
break;
case 53: // Enchant Item Perm
case 54: // Enchant Item Temp
case 92: // Enchant Held Item
case 156: // Enchant Item Prismatic
case SPELL_EFFECT_ENCHANT_ITEM:
case SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY:
case SPELL_EFFECT_ENCHANT_HELD_ITEM:
case SPELL_EFFECT_ENCHANT_ITEM_PRISMATIC:
if ($_ = DB::Aowow()->selectRow('SELECT * FROM ?_itemenchantment WHERE id = ?d', $effMV))
$foo['name'] .= ' (<a href="?enchantment='.$effMV.'" class="q2">'.Util::localizedString($_, 'name').'</a>)';
else
$foo['name'] .= ' #'.$effMV;
break;
case 38: // Dispel [miscValue => Types]
case 126: // Steal Aura
case SPELL_EFFECT_DISPEL:
case SPELL_EFFECT_STEAL_BENEFICIAL_BUFF:
$_ = Lang::game('dt', $effMV);
if ($_ && User::isInGroup(U_GROUP_EMPLOYEE))
$_ = sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_);
@ -1754,7 +1760,7 @@ class SpellPage extends GenericPage
$foo['name'] .= ' ('.$_.')';
break;
case 39: // Learn Language
case SPELL_EFFECT_LANGUAGE:
$_ = Lang::game('languages', $effMV);
if ($_ && User::isInGroup(U_GROUP_EMPLOYEE))
$_ = sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_);
@ -1763,12 +1769,12 @@ class SpellPage extends GenericPage
$foo['name'] .= ' ('.$_.')';
break;
case 50: // Trans Door
case 76: // Summon Object (Wild)
case 104: // Summon Object (slot 1)
case 105: // Summon Object (slot 2)
case 106: // Summon Object (slot 3)
case 107: // Summon Object (slot 4)
case SPELL_EFFECT_TRANS_DOOR:
case SPELL_EFFECT_SUMMON_OBJECT_WILD:
case SPELL_EFFECT_SUMMON_OBJECT_SLOT1:
case SPELL_EFFECT_SUMMON_OBJECT_SLOT2:
case SPELL_EFFECT_SUMMON_OBJECT_SLOT3:
case SPELL_EFFECT_SUMMON_OBJECT_SLOT4:
if ($summon = $this->subject->getModelInfo($this->typeId, $i))
$redButtons[BUTTON_VIEW3D] = ['type' => Type::OBJECT, 'displayId' => $summon['displayId']];
@ -1778,7 +1784,7 @@ class SpellPage extends GenericPage
$foo['name'] .= $_;
break;
case 86: // Activate Object
case SPELL_EFFECT_ACTIVATE_OBJECT:
$_ = Lang::gameObject('actions', $effMV);
if ($_ && User::isInGroup(U_GROUP_EMPLOYEE))
$_ = sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_);
@ -1787,7 +1793,7 @@ class SpellPage extends GenericPage
$foo['name'] .= ' ('.$_.')';
break;
case 74: // Apply Glyph
case SPELL_EFFECT_APPLY_GLYPH:
if ($_ = DB::Aowow()->selectCell('SELECT spellId FROM ?_glyphproperties WHERE id = ?d', $effMV))
{
if ($n = SpellList::getName($_))
@ -1798,12 +1804,12 @@ class SpellPage extends GenericPage
else
$foo['name'] .= ' #'.$effMV;;
break;
case 95: // Skinning
case SPELL_EFFECT_SKINNING:
switch ($effMV)
{
case 0: $_ = Lang::game('ct', 1).', '.Lang::game('ct', 2); break; // Beast, Dragonkin
case 1:
case 2: $_ = Lang::game('ct', 4); break; // Elemental (nature based, earth based)
case 2: $_ = Lang::game('ct', 4); break; // Elemental (herb gathering, mining)
case 3: $_ = Lang::game('ct', 9); break; // Mechanic
default; $_ = '';
}
@ -1814,7 +1820,7 @@ class SpellPage extends GenericPage
$foo['name'] .= ' ('.$_.')';
break;
case 108: // Dispel Mechanic
case SPELL_EFFECT_DISPEL_MECHANIC:
$_ = Lang::game('me', $effMV);
if ($_ && User::isInGroup(U_GROUP_EMPLOYEE))
$_ = sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_);
@ -1823,14 +1829,14 @@ class SpellPage extends GenericPage
$foo['name'] .= ' ('.$_.')';
break;
case 44: // Learn Skill Step
case 118: // Require Skill
case SPELL_EFFECT_SKILL_STEP:
case SPELL_EFFECT_SKILL:
if ($_ = SkillList::getName($effMV))
$foo['name'] .= '(<a href="?skill='.$effMV.'">'.$_.'</a>)';
else
$foo['name'] .= Util::ucFirst(Lang::game('skill')).' #'.$effMV;;
break;
case 146: // Activate Rune
case SPELL_EFFECT_ACTIVATE_RUNE:
$_ = Lang::spell('powerRunes', $effMV);
if ($_ && User::isInGroup(U_GROUP_EMPLOYEE))
$_ = sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_);
@ -1839,11 +1845,11 @@ class SpellPage extends GenericPage
$foo['name'] .= ' ('.$_.')';
break;
case 131: // Play Music
case 132: // Play Sound
case SPELL_EFFECT_PLAY_SOUND:
case SPELL_EFFECT_PLAY_MUSIC:
$foo['markup'] = '[sound='.$effMV.']';
break;
case 103: // Reputation
case SPELL_EFFECT_REPUTATION:
$_ = Util::ucFirst(Lang::game('faction')).' #'.$effMV;
if ($n = FactionList::getName($effMV))
$_ = ' (<a href="?faction='.$effMV.'">'.$n.'</a>)';
@ -1855,7 +1861,7 @@ class SpellPage extends GenericPage
$foo['name'] .= $_;
break;
case 123: // Send Taxi
case SPELL_EFFECT_SEND_TAXI:
$_ = DB::Aowow()->selectRow('
SELECT tn1.name_loc0 AS start_loc0, tn1.name_loc?d AS start_loc?d, tn2.name_loc0 AS end_loc0, tn2.name_loc?d AS end_loc?d
FROM ?_taxipath tp
@ -1879,14 +1885,14 @@ class SpellPage extends GenericPage
break;
}
// Aura
case 6: // Simple
case 27: // AA Persistent
case 35: // AA Party
case 65: // AA Raid
case 119: // AA Pet
case 128: // AA Friend
case 129: // AA Enemy
case 143: // AA Owner
case SPELL_EFFECT_APPLY_AURA:
case SPELL_EFFECT_PERSISTENT_AREA_AURA:
case SPELL_EFFECT_APPLY_AREA_AURA_PARTY:
case SPELL_EFFECT_APPLY_AREA_AURA_RAID:
case SPELL_EFFECT_APPLY_AREA_AURA_PET:
case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND:
case SPELL_EFFECT_APPLY_AREA_AURA_ENEMY:
case SPELL_EFFECT_APPLY_AREA_AURA_OWNER:
{
if ($effAura > 0 && ($aurName = Lang::spell('auras', $effAura)))
{
@ -1895,33 +1901,33 @@ class SpellPage extends GenericPage
$bar = $effMV;
switch ($effAura)
{
case 17: // Mod Stealth Detection
case SPELL_AURA_MOD_STEALTH_DETECT: // Mod Stealth Detection
if ($_ = Lang::spell('stealthType', $effMV))
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_) : $_;
break;
case 19: // Mod Invisibility Detection
case SPELL_AURA_MOD_INVISIBILITY_DETECT: // Mod Invisibility Detection
if ($_ = Lang::spell('invisibilityType', $effMV))
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_) : $_;
break;
case 24: // Periodic Energize
case 21: // Obsolete Mod Power
case 35: // Mod Increase Power
case 85: // Mod Power Regeneration
case 110: // Mod Power Regeneration Pct
case 132: // Mod Increase Energy Percent
case SPELL_AURA_OBS_MOD_POWER:
case SPELL_AURA_PERIODIC_ENERGIZE:
case SPELL_AURA_MOD_INCREASE_ENERGY:
case SPELL_AURA_MOD_POWER_REGEN:
case SPELL_AURA_MOD_POWER_REGEN_PERCENT:
case SPELL_AURA_MOD_INCREASE_ENERGY_PERCENT:
if ($_ = Lang::spell('powerTypes', $effMV))
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_) : $_;
break;
case 29: // Mod Stat
case 80: // Mod Stat %
case 137: // Mod Total Stat %
case 175: // Mod Spell Healing Of Stat Percent
case 212: // Mod Ranged Attack Power Of Stat Percent
case 219: // Mod Mana Regeneration from Stat
case 268: // Mod Attack Power Of Stat Percent
case SPELL_AURA_MOD_STAT:
case SPELL_AURA_MOD_PERCENT_STAT:
case SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE:
case SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT:
case SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT:
case SPELL_AURA_MOD_MANA_REGEN_FROM_STAT:
case SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT:
$mask = $effMV < 0 ? 0x1F : 1 << $effMV;
$_ = [];
for ($j = 0; $j < 5; $j++)
@ -1932,7 +1938,7 @@ class SpellPage extends GenericPage
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_) : $_;
break;
case 36: // Shapeshift
case SPELL_AURA_MOD_SHAPESHIFT:
if ($st = $this->subject->getModelInfo($this->typeId, $i))
{
$redButtons[BUTTON_VIEW3D] = array(
@ -1947,49 +1953,50 @@ class SpellPage extends GenericPage
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_) : $_;
}
break;
case 37: // Effect immunity
case SPELL_AURA_EFFECT_IMMUNITY:
if ($_ = Lang::spell('effects', $effMV))
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_) : $_;
break;
case 38: // Aura immunity
case SPELL_AURA_STATE_IMMUNITY:
if ($_ = Lang::spell('auras', $effMV))
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_) : $_;
break;
case 41: // Dispel Immunity
case 178: // Mod Debuff Resistance
case 245: // Mod Aura Duration By Dispel
case SPELL_AURA_DISPEL_IMMUNITY:
case SPELL_AURA_MOD_DEBUFF_RESISTANCE:
case SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL:
case SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL_NOT_STACK:
if ($_ = Lang::game('dt', $effMV))
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_) : $_;
break;
case 44: // Track Creature
case SPELL_AURA_TRACK_CREATURES:
if ($_ = Lang::game('ct', $effMV))
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_) : $_;
break;
case 45: // Track Resource
case SPELL_AURA_TRACK_RESOURCES:
if ($_ = Lang::spell('lockType', $effMV))
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_) : $_;
break;
case 75: // Language
case SPELL_AURA_MOD_LANGUAGE:
if ($_ = Lang::game('languages', $effMV))
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_) : $_;
break;
case 77: // Mechanic Immunity
case 117: // Mod Mechanic Resistance
case 232: // Mod Mechanic Duration
case 234: // Mod Mechanic Duration (no stack)
case 255: // Mod Mechanic Damage Taken Pct
case 276: // Mod Mechanic Damage Done Percent
case SPELL_AURA_MECHANIC_IMMUNITY:
case SPELL_AURA_MOD_MECHANIC_RESISTANCE:
case SPELL_AURA_MECHANIC_DURATION_MOD:
case SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK:
case SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT:
case SPELL_AURA_MOD_DAMAGE_DONE_FOR_MECHANIC:
if ($_ = Lang::game('me', $effMV))
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').Util::asHex($effMV), $_) : $_;
break;
case 147: // Mechanic Immunity Mask
case SPELL_AURA_MECHANIC_IMMUNITY_MASK:
$_ = [];
foreach (Lang::game('me') as $k => $str)
if ($k && ($effMV & (1 << $k - 1)))
@ -1999,73 +2006,73 @@ class SpellPage extends GenericPage
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').Util::asHex($effMV), $_) : $_;
break;
case 10: // Mod Threat
case 13: // Mod Damage Done
case 14: // Mod Damage Taken
case 22: // Mod Resistance
case 39: // School Immunity
case 40: // Damage Immunity
case 50: // Mod Critical Healing Amount
case 52: // Mod Physical Crit Chance
case 57: // Mod Spell Crit Chance
case 69: // School Absorb
case 71: // Mod Spell Crit Chance School
case 72: // Mod Power Cost School Percent
case 73: // Mod Power Cost School Flat
case 74: // Reflect Spell School
case 79: // Mod Damage Done Pct
case 81: // Split Damage Pct
case 83: // Mod Base Resistance
case 87: // Mod Damage Taken Pct
case 97: // Mana Shield
case 101: // Mod Resistance Pct
case 115: // Mod Healing Taken
case 118: // Mod Healing Taken Pct
case 123: // Mod Target Resistance
case 135: // Mod Healing Done
case 136: // Mod Healing Done Pct
case 142: // Mod Base Resistance Pct
case 143: // Mod Resistance Exclusive
case 149: // Reduce Pushback
case 163: // Mod Crit Damage Bonus
case 174: // Mod Spell Damage Of Stat Percent
case 182: // Mod Resistance Of Stat Percent
case 186: // Mod Attacker Spell Hit Chance
case 194: // Mod Target Absorb School
case 195: // Mod Target Ability Absorb School
case 199: // Mod Increases Spell Percent to Hit
case 229: // Mod AoE Damage Avoidance
case 271: // Mod Damage Percent Taken Form Caster
case 310: // Mod Creature AoE Damage Avoidance
case 237: // Mod Spell Damage Of Attack Power
case 238: // Mod Spell Healing Of Attack Power
case 242: // Mod Spell & Healing Power by % of Int
case 259: // Mod Periodic Healing Taken %
case 267: // Cancel Aura Buffer at % of Caster Health
case 269: // Ignore Target Resistance
case 285: // Mod Attack Power by School Resistance
case 300: // Share Damage %
case 301: // Mod Absorb School Healing
case SPELL_AURA_MOD_THREAT:
case SPELL_AURA_MOD_DAMAGE_DONE:
case SPELL_AURA_MOD_DAMAGE_TAKEN:
case SPELL_AURA_MOD_RESISTANCE:
case SPELL_AURA_SCHOOL_IMMUNITY:
case SPELL_AURA_DAMAGE_IMMUNITY:
case SPELL_AURA_MOD_CRITICAL_HEALING_AMOUNT:
case SPELL_AURA_MOD_WEAPON_CRIT_PERCENT:
case SPELL_AURA_MOD_SPELL_CRIT_CHANCE:
case SPELL_AURA_SCHOOL_ABSORB:
case SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL:
case SPELL_AURA_MOD_POWER_COST_SCHOOL_PCT:
case SPELL_AURA_MOD_POWER_COST_SCHOOL:
case SPELL_AURA_REFLECT_SPELLS_SCHOOL:
case SPELL_AURA_MOD_DAMAGE_PERCENT_DONE:
case SPELL_AURA_SPLIT_DAMAGE_PCT:
case SPELL_AURA_MOD_BASE_RESISTANCE:
case SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN:
case SPELL_AURA_MANA_SHIELD:
case SPELL_AURA_MOD_RESISTANCE_PCT:
case SPELL_AURA_MOD_HEALING:
case SPELL_AURA_MOD_HEALING_PCT:
case SPELL_AURA_MOD_TARGET_RESISTANCE:
case SPELL_AURA_MOD_HEALING_DONE:
case SPELL_AURA_MOD_HEALING_DONE_PERCENT:
case SPELL_AURA_MOD_BASE_RESISTANCE_PCT:
case SPELL_AURA_MOD_RESISTANCE_EXCLUSIVE:
case SPELL_AURA_REDUCE_PUSHBACK:
case SPELL_AURA_MOD_CRIT_DAMAGE_BONUS:
case SPELL_AURA_MOD_SPELL_DAMAGE_OF_STAT_PERCENT:
case SPELL_AURA_MOD_RESISTANCE_OF_STAT_PERCENT:
case SPELL_AURA_MOD_ATTACKER_SPELL_HIT_CHANCE:
case SPELL_AURA_MOD_TARGET_ABSORB_SCHOOL:
case SPELL_AURA_MOD_TARGET_ABILITY_ABSORB_SCHOOL:
case SPELL_AURA_MOD_INCREASES_SPELL_PCT_TO_HIT:
case SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE:
case SPELL_AURA_MOD_DAMAGE_FROM_CASTER:
case SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE:
case SPELL_AURA_MOD_SPELL_DAMAGE_OF_ATTACK_POWER:
case SPELL_AURA_MOD_SPELL_HEALING_OF_ATTACK_POWER:
case SPELL_AURA_MOD_SPELL_DAMAGE_FROM_HEALING: // ? Mod Spell & Healing Power by % of Int
case SPELL_AURA_MOD_HOT_PCT:
case SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL: // ? Cancel Aura Buffer at % of Caster Health
case SPELL_AURA_MOD_IGNORE_TARGET_RESIST:
case SPELL_AURA_MOD_ATTACK_POWER_OF_ARMOR: // ? Mod Attack Power by School Resistance
case SPELL_AURA_SHARE_DAMAGE_PCT:
case SPELL_AURA_SCHOOL_HEAL_ABSORB:
if ($_ = Lang::getMagicSchools($effMV))
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').Util::asHex($effMV), $_) : $_;
break;
case 30: // Mod Skill
case 98: // Mod Skill Value
case SPELL_AURA_MOD_SKILL:
case SPELL_AURA_MOD_SKILL_TALENT:
if ($n = SkillList::getName($effMV))
$bar = ' (<a href="?skill='.$effMV.'">'.$n.'</a>)';
else
$bar = Lang::main('colon').Util::ucFirst(Lang::game('skill')).' #'.$effMV;;
break;
case 107: // Flat Modifier
case 108: // Pct Modifier
case SPELL_AURA_ADD_FLAT_MODIFIER:
case SPELL_AURA_ADD_PCT_MODIFIER:
if ($_ = Lang::spell('spellModOp', $effMV))
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_) : $_;
break;
case 189: // Mod Rating
case 220: // Combat Rating From Stat
case SPELL_AURA_MOD_RATING:
case SPELL_AURA_MOD_RATING_FROM_STAT:
$_ = [];
foreach (Lang::spell('combatRating') as $k => $str)
if ((1 << $k) & $effMV)
@ -2075,11 +2082,11 @@ class SpellPage extends GenericPage
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').Util::asHex($effMV), $_) : $_;
break;
case 168: // Mod Damage Done Versus
case 59: // Mod Damage Done Versus Creature
case 102: // Mod Melee Attack Power Versus
case 131: // Mod Ranged Attack Power Versus
case 180: // Mod Spell Damage Versus
case SPELL_AURA_MOD_DAMAGE_DONE_VERSUS:
case SPELL_AURA_MOD_DAMAGE_DONE_CREATURE:
case SPELL_AURA_MOD_MELEE_ATTACK_POWER_VERSUS:
case SPELL_AURA_MOD_RANGED_ATTACK_POWER_VERSUS:
case SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS:
$_ = [];
foreach (Lang::game('ct') as $k => $str)
if ($k && ($effMV & (1 << $k - 1)))
@ -2089,7 +2096,7 @@ class SpellPage extends GenericPage
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').Util::asHex($effMV), $_) : $_;
break;
case 249: // Convert Rune
case SPELL_AURA_CONVERT_RUNE:
$from = $effMV;
if ($_ = Lang::spell('powerRunes', $effMV))
$from = $_;
@ -2106,8 +2113,8 @@ class SpellPage extends GenericPage
$effMVB = 0;
break;
case 78: // Mounted
case 56: // Transform
case SPELL_AURA_MOUNTED:
case SPELL_AURA_TRANSFORM:
if ($transform = $this->subject->getModelInfo($this->typeId, $i))
{
$redButtons[BUTTON_VIEW3D] = ['type' => Type::NPC, 'displayId' => $transform['displayId']];
@ -2117,14 +2124,14 @@ class SpellPage extends GenericPage
$bar = Lang::main('colon').Lang::game('npc').' #'.$effMV;;
break;
case 139: // Force Reaction
case SPELL_AURA_FORCE_REACTION:
$foo['value'] = sprintf(Util::$dfnString, $foo['value'], Lang::game('rep', $foo['value']));
// DO NOT BREAK
case 190: // Mod Faction Reputation Gain
case SPELL_AURA_MOD_FACTION_REPUTATION_GAIN:
$n = FactionList::getName($effMV);
$bar = ' ('.($n ? '<a href="?faction='.$effMV.'">'.$n.'</a>' : Util::ucFirst(Lang::game('faction')).' #'.$effMV).')';
break; // also breaks for 139
case 293: // Override Spells
break; // also breaks for SPELL_AURA_FORCE_REACTION
case SPELL_AURA_OVERRIDE_SPELLS:
if ($so = DB::Aowow()->selectRow('SELECT spellId1, spellId2, spellId3, spellId4, spellId5 FROM ?_spelloverride WHERE id = ?d', $effMV))
{
$buff = [];
@ -2139,8 +2146,8 @@ class SpellPage extends GenericPage
$foo['markup'] = implode(', ', $buff);
}
break;
case 202: // Ignore Combat Result
case 248: // Mod Combat Result Chance
case SPELL_AURA_IGNORE_COMBAT_RESULT:
case SPELL_AURA_MOD_COMBAT_RESULT_CHANCE:
$what = '';
switch ($effMV)
{
@ -2160,27 +2167,36 @@ class SpellPage extends GenericPage
case 7: // Crushed
case 8: // Regular
default:
trigger_error('hitero unused case #'.$effMV.' found for aura 202');
trigger_error('unused case #'.$effMV.' found for aura #'.$effAura);
}
if ($what)
$bar = User::isInGroup(U_GROUP_EMPLOYEE) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $what) : $what;
break;
case 233: // Change other Humanoid Display
case 273: // X-Ray
case 304: // Fake Inebriate
case SPELL_AURA_CHANGE_MODEL_FOR_ALL_HUMANOIDS:
case SPELL_AURA_X_RAY:
case SPELL_AURA_MOD_FAKE_INEBRIATE:
$bar = ' ('.Lang::game('npc').' #'.$effMV.')';
if ($summon = $this->subject->getModelInfo($this->typeId, $i))
{
$redButtons[BUTTON_VIEW3D] = ['type' => Type::NPC, 'displayId' => $summon['displayId']];
if (isset($summon['humanoid']))
{
$redButtons[BUTTON_VIEW3D]['typeId'] = $effMV;
$redButtons[BUTTON_VIEW3D]['humanoid'] = 1;
}
}
if ($n = CreatureList::getName($effMV))
$bar = ' (<a href="?npc='.$effMV.'">'.$n.'</a>)';
break;
case 260: // Screen Effect
case SPELL_AURA_SCREEN_EFFECT:
if ($_ = DB::Aowow()->selectCell('SELECT `name` FROM ?_screeneffect_sounds WHERE `id` = ?d', $effMV))
$bar = User::isInGroup(U_GROUP_EMPLOYEE | U_GROUP_TESTER) ? sprintf(Util::$dfnString, 'MiscValue'.Lang::main('colon').$effMV, $_) : $_;
}
$foo['name'] .= strstr($bar, 'href') || strstr($bar, '#') ? $bar : ($bar ? ' ('.$bar.')' : null);
if (in_array($effAura, [174, 220, 182]))
if (in_array($effAura, [SPELL_AURA_MOD_SPELL_DAMAGE_OF_STAT_PERCENT, SPELL_AURA_MOD_RATING_FROM_STAT, SPELL_AURA_MOD_RESISTANCE_OF_STAT_PERCENT]))
$foo['name'] .= ' ['.sprintf(Util::$dfnString, 'MiscValueB'.Lang::main('colon').$effMVB, Lang::game('stats', $effMVB)).']';
else if ($effMVB > 0)
$foo['name'] .= ' ['.$effMVB.']';
@ -2194,7 +2210,7 @@ class SpellPage extends GenericPage
}
// cases where we dont want 'Value' to be displayed
if (in_array($effAura, [11, 12, 36, 77]) || in_array($effId, [132]) || empty($foo['value']))
if (in_array($effAura, [SPELL_AURA_MOD_TAUNT, SPELL_AURA_MOD_STUN, SPELL_AURA_MOD_SHAPESHIFT, SPELL_AURA_MECHANIC_IMMUNITY]) || in_array($effId, [SPELL_EFFECT_PLAY_MUSIC]) || empty($foo['value']))
unset($foo['value']);
}
@ -2215,7 +2231,7 @@ class SpellPage extends GenericPage
return !($this->subject->getField($field) & $flag);
};
$cbEquippedWeapon = function ($mask, $useInvType)
$cbEquippedWeapon = function($mask, $useInvType)
{
$field = $useInvType ? 'equippedItemInventoryTypeMask' : 'equippedItemSubClassMask';