Spells/DetailPage

* diplay filtrable spell attributes in overview table
 * replace some magic numbers with constants
This commit is contained in:
Sarjuuk
2020-08-31 16:04:27 +02:00
parent 349c32d0a6
commit aac9aab3c9
11 changed files with 836 additions and 118 deletions

View File

@@ -804,7 +804,7 @@ define('ITEM_MOD_SPELL_POWER', 45);
define('ITEM_MOD_HEALTH_REGEN', 46);
define('ITEM_MOD_SPELL_PENETRATION', 47);
define('ITEM_MOD_BLOCK_VALUE', 48);
// ITEM_MOD_MASTERY_RATING, 49
// define('ITEM_MOD_MASTERY_RATING', 49);
define('ITEM_MOD_ARMOR', 50); // resistances v
define('ITEM_MOD_FIRE_RESISTANCE', 51);
define('ITEM_MOD_FROST_RESISTANCE', 52);
@@ -819,6 +819,296 @@ define('ITEM_MOD_SHADOW_POWER', 60);
define('ITEM_MOD_NATURE_POWER', 61);
define('ITEM_MOD_ARCANE_POWER', 62);
// Spell Attributes definitions
define('SPELL_ATTR0_CU_ENCHANT_PROC', 0x00000001); //
define('SPELL_ATTR0_CU_CONE_BACK', 0x00000002); //
define('SPELL_ATTR0_CU_CONE_LINE', 0x00000004); //
define('SPELL_ATTR0_CU_SHARE_DAMAGE', 0x00000008); //
define('SPELL_ATTR0_CU_NO_INITIAL_THREAT', 0x00000010); //
define('SPELL_ATTR0_CU_AURA_CC', 0x00000020); //
define('SPELL_ATTR0_CU_DONT_BREAK_STEALTH', 0x00000040); //
define('SPELL_ATTR0_CU_CAN_CRIT', 0x00000080); //
define('SPELL_ATTR0_CU_DIRECT_DAMAGE', 0x00000100); //
define('SPELL_ATTR0_CU_CHARGE', 0x00000200); //
define('SPELL_ATTR0_CU_PICKPOCKET', 0x00000400); //
define('SPELL_ATTR0_CU_ROLLING_PERIODIC', 0x00000800); //
define('SPELL_ATTR0_CU_NEGATIVE_EFF0', 0x00001000); //
define('SPELL_ATTR0_CU_NEGATIVE_EFF1', 0x00002000); //
define('SPELL_ATTR0_CU_NEGATIVE_EFF2', 0x00004000); //
define('SPELL_ATTR0_CU_IGNORE_ARMOR', 0x00008000); //
define('SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER', 0x00010000); //
define('SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET', 0x00020000); //
define('SPELL_ATTR0_CU_ALLOW_INFLIGHT_TARGET', 0x00040000); //
define('SPELL_ATTR0_CU_NEEDS_AMMO_DATA', 0x00080000); //
define('SPELL_ATTR0_CU_BINARY_SPELL', 0x00100000); //
define('SPELL_ATTR0_CU_SCHOOLMASK_NORMAL_WITH_MAGIC', 0x00200000); //
define('SPELL_ATTR0_CU_LIQUID_AURA', 0x00400000); //
define('SPELL_ATTR0_CU_NEGATIVE', SPELL_ATTR0_CU_NEGATIVE_EFF0 | SPELL_ATTR0_CU_NEGATIVE_EFF1 | SPELL_ATTR0_CU_NEGATIVE_EFF2); //
define('SPELL_ATTR0_UNK0', 0x00000001); // Unknown attribute 0@Attr0
define('SPELL_ATTR0_REQ_AMMO', 0x00000002); // Treat as ranged attack DESCRIPTION Use ammo, ranged attack range modifiers, ranged haste, etc.
define('SPELL_ATTR0_ON_NEXT_SWING', 0x00000004); // On next melee (type 1) DESCRIPTION Both "on next swing" attributes have identical handling in server & client
define('SPELL_ATTR0_IS_REPLENISHMENT', 0x00000008); // Replenishment (client only)
define('SPELL_ATTR0_ABILITY', 0x00000010); // Treat as ability DESCRIPTION Cannot be reflected, not affected by cast speed modifiers, etc.
define('SPELL_ATTR0_TRADESPELL', 0x00000020); // Trade skill recipe DESCRIPTION Displayed in recipe list, not affected by cast speed modifiers
define('SPELL_ATTR0_PASSIVE', 0x00000040); // Passive spell DESCRIPTION Spell is automatically cast on self by core
define('SPELL_ATTR0_HIDDEN_CLIENTSIDE', 0x00000080); // Hidden in UI (client only) DESCRIPTION Not visible in spellbook or aura bar
define('SPELL_ATTR0_HIDE_IN_COMBAT_LOG', 0x00000100); // Hidden in combat log (client only) DESCRIPTION Spell will not appear in combat logs
define('SPELL_ATTR0_TARGET_MAINHAND_ITEM', 0x00000200); // Auto-target mainhand item (client only) DESCRIPTION Client will automatically select main-hand item as cast target
define('SPELL_ATTR0_ON_NEXT_SWING_2', 0x00000400); // On next melee (type 2) DESCRIPTION Both "on next swing" attributes have identical handling in server & client
define('SPELL_ATTR0_UNK11', 0x00000800); // Unknown attribute 11@Attr0
define('SPELL_ATTR0_DAYTIME_ONLY', 0x00001000); // Only usable during daytime (unused)
define('SPELL_ATTR0_NIGHT_ONLY', 0x00002000); // Only usable during nighttime (unused)
define('SPELL_ATTR0_INDOORS_ONLY', 0x00004000); // Only usable indoors
define('SPELL_ATTR0_OUTDOORS_ONLY', 0x00008000); // Only usable outdoors
define('SPELL_ATTR0_NOT_SHAPESHIFT', 0x00010000); // Not usable while shapeshifted
define('SPELL_ATTR0_ONLY_STEALTHED', 0x00020000); // Only usable in stealth
define('SPELL_ATTR0_DONT_AFFECT_SHEATH_STATE', 0x00040000); // Don't shealthe weapons (client only)
define('SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION', 0x00080000); // Scale with caster level DESCRIPTION For non-player casts, scale impact and power cost with caster's level
define('SPELL_ATTR0_STOP_ATTACK_TARGET', 0x00100000); // Stop attacking after cast DESCRIPTION After casting this, the current auto-attack will be interrupted
define('SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK', 0x00200000); // Prevent physical avoidance DESCRIPTION Spell cannot be dodged, parried or blocked
define('SPELL_ATTR0_CAST_TRACK_TARGET', 0x00400000); // Automatically face target during cast (client only)
define('SPELL_ATTR0_CASTABLE_WHILE_DEAD', 0x00800000); // Can be cast while dead DESCRIPTION Spells without this flag cannot be cast by dead units in non-triggered contexts
define('SPELL_ATTR0_CASTABLE_WHILE_MOUNTED', 0x01000000); // Can be cast while mounted
define('SPELL_ATTR0_DISABLED_WHILE_ACTIVE', 0x02000000); // Cooldown starts on expiry DESCRIPTION Spell is unusable while already active, and cooldown does not begin until the effects have worn off
define('SPELL_ATTR0_NEGATIVE_1', 0x04000000); // Is negative spell DESCRIPTION Forces the spell to be treated as a negative spell
define('SPELL_ATTR0_CASTABLE_WHILE_SITTING', 0x08000000); // Can be cast while sitting
define('SPELL_ATTR0_CANT_USED_IN_COMBAT', 0x10000000); // Cannot be used in combat
define('SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY', 0x20000000); // Pierce invulnerability DESCRIPTION Allows spell to pierce invulnerability, unless the invulnerability spell also has this attribute
define('SPELL_ATTR0_HEARTBEAT_RESIST_CHECK', 0x40000000); // Periodic resistance checks DESCRIPTION Periodically re-rolls against resistance to potentially expire aura early
define('SPELL_ATTR0_CANT_CANCEL', 0x80000000); // Aura cannot be cancelled DESCRIPTION Prevents the player from voluntarily canceling a positive aura
define('SPELL_ATTR1_DISMISS_PET', 0x00000001); // Dismiss Pet on cast DESCRIPTION Without this attribute, summoning spells will fail if caster already has a pet
define('SPELL_ATTR1_DRAIN_ALL_POWER', 0x00000002); // Drain all power DESCRIPTION Ignores listed power cost and drains entire pool instead
define('SPELL_ATTR1_CHANNELED_1', 0x00000004); // Channeled (type 1) DESCRIPTION Both "channeled" attributes have identical handling in server & client
define('SPELL_ATTR1_CANT_BE_REDIRECTED', 0x00000008); // Ignore redirection effects DESCRIPTION Spell will not be attracted by SPELL_MAGNET auras (Grounding Totem)
define('SPELL_ATTR1_UNK4', 0x00000010); // Unknown attribute 4@Attr1
define('SPELL_ATTR1_NOT_BREAK_STEALTH', 0x00000020); // Does not break stealth
define('SPELL_ATTR1_CHANNELED_2', 0x00000040); // Channeled (type 2) DESCRIPTION Both "channeled" attributes have identical handling in server & client
define('SPELL_ATTR1_CANT_BE_REFLECTED', 0x00000080); // Ignore reflection effects DESCRIPTION Spell will pierce through Spell Reflection and similar
define('SPELL_ATTR1_CANT_TARGET_IN_COMBAT', 0x00000100); // Target cannot be in combat
define('SPELL_ATTR1_MELEE_COMBAT_START', 0x00000200); // Starts auto-attack (client only) DESCRIPTION Caster will begin auto-attacking the target on cast
define('SPELL_ATTR1_NO_THREAT', 0x00000400); // Does not generate threat DESCRIPTION Also does not cause target to engage
define('SPELL_ATTR1_UNK11', 0x00000800); // Unknown attribute 11@Attr1 DESCRIPTION Aura?
define('SPELL_ATTR1_IS_PICKPOCKET', 0x00001000); // Pickpocket (client only)
define('SPELL_ATTR1_FARSIGHT', 0x00002000); // Farsight aura (client only)
define('SPELL_ATTR1_CHANNEL_TRACK_TARGET', 0x00004000); // Track target while channeling DESCRIPTION While channeling, adjust facing to face target
define('SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY', 0x00008000); // Immunity cancels preapplied auras DESCRIPTION For immunity spells, cancel all auras that this spell would make you immune to when the spell is applied
define('SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE', 0x00010000); // Unaffected by school immunities DESCRIPTION Will not pierce Divine Shield, Ice Block and other full invulnerabilities
define('SPELL_ATTR1_UNAUTOCASTABLE_BY_PET', 0x00020000); // Cannot be autocast by pet
define('SPELL_ATTR1_UNK18', 0x00040000); // Unknown attribute 18@Attr1 DESCRIPTION Stun, Polymorph, Daze, Hex - CC?
define('SPELL_ATTR1_CANT_TARGET_SELF', 0x00080000); // Cannot be self-cast
define('SPELL_ATTR1_REQ_COMBO_POINTS1', 0x00100000); // Requires combo points (type 1)
define('SPELL_ATTR1_UNK21', 0x00200000); // Unknown attribute 21@Attr1
define('SPELL_ATTR1_REQ_COMBO_POINTS2', 0x00400000); // Requires combo points (type 2)
define('SPELL_ATTR1_UNK23', 0x00800000); // Unknwon attribute 23@Attr1
define('SPELL_ATTR1_IS_FISHING', 0x01000000); // Fishing (client only)
define('SPELL_ATTR1_UNK25', 0x02000000); // Unknown attribute 25@Attr1
define('SPELL_ATTR1_UNK26', 0x04000000); // Unknown attribute 26@Attr1 DESCRIPTION Related to [target=focus] and [target=mouseover] macros?
define('SPELL_ATTR1_UNK27', 0x08000000); // Unknown attribute 27@Attr1 DESCRIPTION Melee spell?
define('SPELL_ATTR1_DONT_DISPLAY_IN_AURA_BAR', 0x10000000); // Hide in aura bar (client only)
define('SPELL_ATTR1_CHANNEL_DISPLAY_SPELL_NAME', 0x20000000); // Show spell name during channel (client only)
define('SPELL_ATTR1_ENABLE_AT_DODGE', 0x40000000); // Enable at dodge
define('SPELL_ATTR1_UNK31', 0x80000000); // Unknown attribute 31@Attr1
define('SPELL_ATTR2_CAN_TARGET_DEAD', 0x00000001); // Can target dead players or corpses
define('SPELL_ATTR2_UNK1', 0x00000002); // Unknown attribute 1@Attr2
define('SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS', 0x00000004); // Ignore Line of Sight
define('SPELL_ATTR2_UNK3', 0x00000008); // Ignore aura scaling
define('SPELL_ATTR2_DISPLAY_IN_STANCE_BAR', 0x00000010); // Show in stance bar (client only)
define('SPELL_ATTR2_AUTOREPEAT_FLAG', 0x00000020); // Ranged auto-attack spell
define('SPELL_ATTR2_CANT_TARGET_TAPPED', 0x00000040); // Cannot target others' tapped units DESCRIPTION Can only target untapped units, or those tapped by caster
define('SPELL_ATTR2_UNK7', 0x00000080); // Unknown attribute 7@Attr2
define('SPELL_ATTR2_UNK8', 0x00000100); // Unknown attribute 8@Attr2
define('SPELL_ATTR2_UNK9', 0x00000200); // Unknown attribute 9@Attr2
define('SPELL_ATTR2_UNK10', 0x00000400); // Unknown attribute 10@Attr2 DESCRIPTION Related to taming?
define('SPELL_ATTR2_HEALTH_FUNNEL', 0x00000800); // Health Funnel
define('SPELL_ATTR2_UNK12', 0x00001000); // Unknown attribute 12@Attr2
define('SPELL_ATTR2_PRESERVE_ENCHANT_IN_ARENA', 0x00002000); // Enchant persists when entering arena
define('SPELL_ATTR2_UNK14', 0x00004000); // Unknown attribute 14@Attr2
define('SPELL_ATTR2_UNK15', 0x00008000); // Unknown attribute 15@Attr2
define('SPELL_ATTR2_TAME_BEAST', 0x00010000); // Tame Beast
define('SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS', 0x00020000); // Don't reset swing timer DESCRIPTION Does not reset melee/ranged autoattack timer on cast
define('SPELL_ATTR2_REQ_DEAD_PET', 0x00040000); // Requires dead pet
define('SPELL_ATTR2_NOT_NEED_SHAPESHIFT', 0x00080000); // Also allow outside shapeshift DESCRIPTION Even if Stances are nonzero, allow spell to be cast outside of shapeshift (though not in a different shapeshift)
define('SPELL_ATTR2_UNK20', 0x00100000); // Unknown attribute 20@Attr2
define('SPELL_ATTR2_DAMAGE_REDUCED_SHIELD', 0x00200000); // Damage reduction ability DESCRIPTION Causes BG flags to be dropped if combined with ATTR1_DISPEL_AURAS_ON_IMMUNITY
define('SPELL_ATTR2_UNK22', 0x00400000); // Unknown attribute 22@Attr2
define('SPELL_ATTR2_IS_ARCANE_CONCENTRATION', 0x00800000); // Arcane Concentration
define('SPELL_ATTR2_UNK24', 0x01000000); // Unknown attribute 24@Attr2
define('SPELL_ATTR2_UNK25', 0x02000000); // Unknown attribute 25@Attr2
define('SPELL_ATTR2_UNAFFECTED_BY_AURA_SCHOOL_IMMUNE', 0x04000000); // Pierce aura application immunities DESCRIPTION Allow aura to be applied despite target being immune to new aura applications
define('SPELL_ATTR2_UNK27', 0x08000000); // Unknown attribute 27@Attr2
define('SPELL_ATTR2_UNK28', 0x10000000); // Unknown attribute 28@Attr2
define('SPELL_ATTR2_CANT_CRIT', 0x20000000); // Cannot critically strike
define('SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC', 0x40000000); // Allow triggered spell to trigger (type 1) DESCRIPTION Without this attribute, any triggered spell will be unable to trigger other auras' procs
define('SPELL_ATTR2_FOOD_BUFF', 0x80000000); // Food buff (client only)
define('SPELL_ATTR3_UNK0', 0x00000001); // Unknown attribute 0@Attr3
define('SPELL_ATTR3_IGNORE_PROC_SUBCLASS_MASK', 0x00000002); // 1 Ignores subclass mask check when checking proc
define('SPELL_ATTR3_UNK2', 0x00000004); // Unknown attribute 2@Attr3
define('SPELL_ATTR3_BLOCKABLE_SPELL', 0x00000008); // Blockable spell
define('SPELL_ATTR3_IGNORE_RESURRECTION_TIMER', 0x00000010); // Ignore resurrection timer
define('SPELL_ATTR3_UNK5', 0x00000020); // Unknown attribute 5@Attr3
define('SPELL_ATTR3_UNK6', 0x00000040); // Unknown attribute 6@Attr3
define('SPELL_ATTR3_STACK_FOR_DIFF_CASTERS', 0x00000080); // Stack separately for each caster
define('SPELL_ATTR3_ONLY_TARGET_PLAYERS', 0x00000100); // Can only target players
define('SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2', 0x00000200); // Allow triggered spell to trigger (type 2) DESCRIPTION Without this attribute, any triggered spell will be unable to trigger other auras' procs
define('SPELL_ATTR3_MAIN_HAND', 0x00000400); // Require main hand weapon
define('SPELL_ATTR3_BATTLEGROUND', 0x00000800); // Can only be cast in battleground
define('SPELL_ATTR3_ONLY_TARGET_GHOSTS', 0x00001000); // Can only target ghost players
define('SPELL_ATTR3_DONT_DISPLAY_CHANNEL_BAR', 0x00002000); // Do not display channel bar (client only)
define('SPELL_ATTR3_IS_HONORLESS_TARGET', 0x00004000); // Honorless Target
define('SPELL_ATTR3_UNK15', 0x00008000); // Unknown attribute 15@Attr3 DESCRIPTION Auto Shoot, Shoot, Throw - ranged normal attack attribute?
define('SPELL_ATTR3_CANT_TRIGGER_PROC', 0x00010000); // Cannot trigger procs
define('SPELL_ATTR3_NO_INITIAL_AGGRO', 0x00020000); // No initial aggro
define('SPELL_ATTR3_IGNORE_HIT_RESULT', 0x00040000); // Ignore hit result DESCRIPTION Spell cannot miss, or be dodged/parried/blocked
define('SPELL_ATTR3_DISABLE_PROC', 0x00080000); // Cannot trigger spells during aura proc
define('SPELL_ATTR3_DEATH_PERSISTENT', 0x00100000); // Persists through death
define('SPELL_ATTR3_UNK21', 0x00200000); // Unknown attribute 21@Attr3
define('SPELL_ATTR3_REQ_WAND', 0x00400000); // Requires equipped Wand
define('SPELL_ATTR3_UNK23', 0x00800000); // Unknown attribute 23@Attr3
define('SPELL_ATTR3_REQ_OFFHAND', 0x01000000); // Requires offhand weapon
define('SPELL_ATTR3_TREAT_AS_PERIODIC', 0x02000000); // Treat as periodic effect
define('SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED', 0x04000000); // Can trigger from triggered spells
define('SPELL_ATTR3_DRAIN_SOUL', 0x08000000); // Drain Soul
define('SPELL_ATTR3_UNK28', 0x10000000); // Unknown attribute 28@Attr3
define('SPELL_ATTR3_NO_DONE_BONUS', 0x20000000); // Damage dealt is unaffected by modifiers
define('SPELL_ATTR3_DONT_DISPLAY_RANGE', 0x40000000); // Do not show range in tooltip (client only)
define('SPELL_ATTR3_UNK31', 0x80000000); // Unknown attribute 31@Attr3
define('SPELL_ATTR4_IGNORE_RESISTANCES', 0x00000001); // Cannot be resisted
define('SPELL_ATTR4_PROC_ONLY_ON_CASTER', 0x00000002); // Only proc on self-cast
define('SPELL_ATTR4_FADES_WHILE_LOGGED_OUT', 0x00000004); // Buff expires while offline DESCRIPTION Debuffs (except Resurrection Sickness) will automatically do this
define('SPELL_ATTR4_UNK3', 0x00000008); // Unknown attribute 3@Attr4
define('SPELL_ATTR4_UNK4', 0x00000010); // Treat as delayed spell
define('SPELL_ATTR4_UNK5', 0x00000020); // Unknown attribute 5@Attr4
define('SPELL_ATTR4_NOT_STEALABLE', 0x00000040); // Aura cannot be stolen
define('SPELL_ATTR4_CAN_CAST_WHILE_CASTING', 0x00000080); // Can be cast while casting DESCRIPTION Ignores already in-progress cast and still casts
define('SPELL_ATTR4_FIXED_DAMAGE', 0x00000100); // Deals fixed damage
define('SPELL_ATTR4_TRIGGER_ACTIVATE', 0x00000200); // Spell is initially disabled (client only)
define('SPELL_ATTR4_SPELL_VS_EXTEND_COST', 0x00000400); // Attack speed modifies cost DESCRIPTION Adds 10 to power cost for each 1s of weapon speed
define('SPELL_ATTR4_UNK11', 0x00000800); // Unknown attribute 11@Attr4
define('SPELL_ATTR4_UNK12', 0x00001000); // Unknown attribute 12@Attr4
define('SPELL_ATTR4_UNK13', 0x00002000); // Unknown attribute 13@Attr4
define('SPELL_ATTR4_DAMAGE_DOESNT_BREAK_AURAS', 0x00004000); // Damage does not break auras
define('SPELL_ATTR4_UNK15', 0x00008000); // Unknown attribute 15@Attr4
define('SPELL_ATTR4_NOT_USABLE_IN_ARENA', 0x00010000); // Not usable in arena DESCRIPTION Makes spell unusable despite CD <= 10min
define('SPELL_ATTR4_USABLE_IN_ARENA', 0x00020000); // Usable in arena DESCRIPTION Makes spell usable despite CD > 10min
define('SPELL_ATTR4_AREA_TARGET_CHAIN', 0x00040000); // Chain area targets DESCRIPTION [NYI] Hits area targets over time instead of all at once
define('SPELL_ATTR4_UNK19', 0x00080000); // Unknown attribute 19@Attr4
define('SPELL_ATTR4_NOT_CHECK_SELFCAST_POWER', 0x00100000); // Allow self-cast to override stronger aura (client only)
define('SPELL_ATTR4_UNK21', 0x00200000); // Keep when entering arena
define('SPELL_ATTR4_UNK22', 0x00400000); // Unknown attribute 22@Attr4
define('SPELL_ATTR4_CANT_TRIGGER_ITEM_SPELLS', 0x00800000); // Cannot trigger item spells
define('SPELL_ATTR4_UNK24', 0x01000000); // Unknown attribute 24@Attr4 DESCRIPTION Shoot-type spell?
define('SPELL_ATTR4_IS_PET_SCALING', 0x02000000); // Pet Scaling aura
define('SPELL_ATTR4_CAST_ONLY_IN_OUTLAND', 0x04000000); // Only in Outland/Northrend
define('SPELL_ATTR4_INHERIT_CRIT_FROM_AURA', 0x08000000); // Inherit critical chance from triggering aura
define('SPELL_ATTR4_UNK28', 0x10000000); // Unknown attribute 28@Attr4
define('SPELL_ATTR4_UNK29', 0x20000000); // Unknown attribute 29@Attr4
define('SPELL_ATTR4_UNK30', 0x40000000); // Unknown attribute 30@Attr4
define('SPELL_ATTR4_UNK31', 0x80000000); // Unknown attribute 31@Attr4
define('SPELL_ATTR5_CAN_CHANNEL_WHEN_MOVING', 0x00000001); // Can be channeled while moving
define('SPELL_ATTR5_NO_REAGENT_WHILE_PREP', 0x00000002); // No reagents during arena preparation
define('SPELL_ATTR5_REMOVE_ON_ARENA_ENTER', 0x00000004); // Remove when entering arena DESCRIPTION Force this aura to be removed on entering arena, regardless of other properties
define('SPELL_ATTR5_USABLE_WHILE_STUNNED', 0x00000008); // Usable while stunned
define('SPELL_ATTR5_UNK4', 0x00000010); // Unknown attribute 4@Attr5
define('SPELL_ATTR5_SINGLE_TARGET_SPELL', 0x00000020); // Single-target aura DESCRIPTION Remove previous application to another unit if applied
define('SPELL_ATTR5_UNK6', 0x00000040); // Unknown attribute 6@Attr5
define('SPELL_ATTR5_UNK7', 0x00000080); // Unknown attribute 7@Attr5
define('SPELL_ATTR5_UNK8', 0x00000100); // Unknown attribute 8@Attr5
define('SPELL_ATTR5_START_PERIODIC_AT_APPLY', 0x00000200); // Immediately do periodic tick on apply
define('SPELL_ATTR5_HIDE_DURATION', 0x00000400); // Do not send aura duration to client
define('SPELL_ATTR5_ALLOW_TARGET_OF_TARGET_AS_TARGET', 0x00000800); // Auto-target target of target (client only)
define('SPELL_ATTR5_UNK12', 0x00001000); // Unknown attribute 12@Attr5 DESCRIPTION Cleave related?
define('SPELL_ATTR5_HASTE_AFFECT_DURATION', 0x00002000); // Duration scales with Haste Rating
define('SPELL_ATTR5_UNK14', 0x00004000); // Unknown attribute 14@Attr5
define('SPELL_ATTR5_UNK15', 0x00008000); // Unknown attribute 15@Attr5 DESCRIPTION Related to multi-target spells?
define('SPELL_ATTR5_UNK16', 0x00010000); // Unknown attribute 16@Attr5
define('SPELL_ATTR5_USABLE_WHILE_FEARED', 0x00020000); // Usable while feared
define('SPELL_ATTR5_USABLE_WHILE_CONFUSED', 0x00040000); // Usable while confused
define('SPELL_ATTR5_DONT_TURN_DURING_CAST', 0x00080000); // Do not auto-turn while casting
define('SPELL_ATTR5_UNK20', 0x00100000); // Unknown attribute 20@Attr5
define('SPELL_ATTR5_UNK21', 0x00200000); // Unknown attribute 21@Attr5
define('SPELL_ATTR5_UNK22', 0x00400000); // Unknown attribute 22@Attr5
define('SPELL_ATTR5_UNK23', 0x00800000); // Unknown attribute 23@Attr5
define('SPELL_ATTR5_UNK24', 0x01000000); // Unknown attribute 24@Attr5
define('SPELL_ATTR5_UNK25', 0x02000000); // Unknown attribute 25@Attr5
define('SPELL_ATTR5_SKIP_CHECKCAST_LOS_CHECK', 0x04000000); // Ignore line of sight checks
define('SPELL_ATTR5_DONT_SHOW_AURA_IF_SELF_CAST', 0x08000000); // Don't show aura if self-cast (client only)
define('SPELL_ATTR5_DONT_SHOW_AURA_IF_NOT_SELF_CAST', 0x10000000); // Don't show aura unless self-cast (client only)
define('SPELL_ATTR5_UNK29', 0x20000000); // Unknown attribute 29@Attr5
define('SPELL_ATTR5_UNK30', 0x40000000); // Unknown attribute 30@Attr5
define('SPELL_ATTR5_UNK31', 0x80000000); // Unknown attribute 31@Attr5 DESCRIPTION Forces nearby enemies to attack caster?
define('SPELL_ATTR6_DONT_DISPLAY_COOLDOWN', 0x00000001); // Don't display cooldown (client only)
define('SPELL_ATTR6_ONLY_IN_ARENA', 0x00000002); // Only usable in arena
define('SPELL_ATTR6_IGNORE_CASTER_AURAS', 0x00000004); // Ignore all preventing caster auras
define('SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG', 0x00000008); // Ignore immunity flags when assisting
define('SPELL_ATTR6_UNK4', 0x00000010); // Unknown attribute 4@Attr6
define('SPELL_ATTR6_DONT_CONSUME_PROC_CHARGES', 0x00000020); // Don't consume proc charges
define('SPELL_ATTR6_USE_SPELL_CAST_EVENT', 0x00000040); // Generate spell_cast event instead of aura_start (client only)
define('SPELL_ATTR6_UNK7', 0x00000080); // Unknown attribute 7@Attr6
define('SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED', 0x00000100); // Do not implicitly target in CC DESCRIPTION Implicit targeting (chaining and area targeting) will not impact crowd controlled targets
define('SPELL_ATTR6_UNK9', 0x00000200); // Unknown attribute 9@Attr6
define('SPELL_ATTR6_CAN_TARGET_POSSESSED_FRIENDS', 0x00000400); // Can target possessed friends DESCRIPTION [NYI]
define('SPELL_ATTR6_NOT_IN_RAID_INSTANCE', 0x00000800); // Unusable in raid instances
define('SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE', 0x00001000); // Castable while caster is on vehicle
define('SPELL_ATTR6_CAN_TARGET_INVISIBLE', 0x00002000); // Can target invisible units
define('SPELL_ATTR6_UNK14', 0x00004000); // Unknown attribute 14@Attr6
define('SPELL_ATTR6_UNK15', 0x00008000); // Unknown attribute 15@Attr6
define('SPELL_ATTR6_UNK16', 0x00010000); // Unknown attribute 16@Attr6
define('SPELL_ATTR6_UNK17', 0x00020000); // Unknown attribute 17@Attr6 DESCRIPTION Mount related?
define('SPELL_ATTR6_CAST_BY_CHARMER', 0x00040000); // Spell is cast by charmer DESCRIPTION Client will prevent casting if not possessed, charmer will be caster for all intents and purposes
define('SPELL_ATTR6_UNK19', 0x00080000); // Unknown attribute 19@Attr6
define('SPELL_ATTR6_ONLY_VISIBLE_TO_CASTER', 0x00100000); // Only visible to caster (client only)
define('SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS', 0x00200000); // Client UI target effects (client only)
define('SPELL_ATTR6_UNK22', 0x00400000); // Unknown attribute 22@Attr6
define('SPELL_ATTR6_UNK23', 0x00800000); // Unknown attribute 23@Attr6
define('SPELL_ATTR6_CAN_TARGET_UNTARGETABLE', 0x01000000); // Can target untargetable units
define('SPELL_ATTR6_NOT_RESET_SWING_IF_INSTANT', 0x02000000); // Do not reset swing timer if cast time is instant
define('SPELL_ATTR6_UNK26', 0x04000000); // Unknown attribute 26@Attr6 DESCRIPTION Player castable buff?
define('SPELL_ATTR6_LIMIT_PCT_HEALING_MODS', 0x08000000); // Limit applicable %healing modifiers DESCRIPTION This prevents certain healing modifiers from applying - see implementation if you really care about details
define('SPELL_ATTR6_UNK28', 0x10000000); // Unknown attribute 28@Attr6 DESCRIPTION Death grip?
define('SPELL_ATTR6_LIMIT_PCT_DAMAGE_MODS', 0x20000000); // Limit applicable %damage modifiers DESCRIPTION This prevents certain damage modifiers from applying - see implementation if you really care about details
define('SPELL_ATTR6_UNK30', 0x40000000); // Unknown attribute 30@Attr6
define('SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS', 0x80000000); // Ignore cooldown modifiers for category cooldown
define('SPELL_ATTR7_UNK0', 0x00000001); // Unknown attribute 0@Attr7
define('SPELL_ATTR7_IGNORE_DURATION_MODS', 0x00000002); // Ignore duration modifiers
define('SPELL_ATTR7_REACTIVATE_AT_RESURRECT', 0x00000004); // Reactivate at resurrect (client only)
define('SPELL_ATTR7_IS_CHEAT_SPELL', 0x00000008); // Is cheat spell DESCRIPTION Cannot cast if caster doesn't have UnitFlag2 & UNIT_FLAG2_ALLOW_CHEAT_SPELLS
define('SPELL_ATTR7_UNK4', 0x00000010); // Unknown attribute 4@Attr7 DESCRIPTION Soulstone related?
define('SPELL_ATTR7_SUMMON_PLAYER_TOTEM', 0x00000020); // Summons player-owned totem
define('SPELL_ATTR7_NO_PUSHBACK_ON_DAMAGE', 0x00000040); // Damage dealt by this does not cause spell pushback
define('SPELL_ATTR7_UNK7', 0x00000080); // Unknown attribute 7@Attr7
define('SPELL_ATTR7_HORDE_ONLY', 0x00000100); // Horde only
define('SPELL_ATTR7_ALLIANCE_ONLY', 0x00000200); // Alliance only
define('SPELL_ATTR7_DISPEL_CHARGES', 0x00000400); // Dispel/Spellsteal remove individual charges
define('SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER', 0x00000800); // Only interrupt non-player casting
define('SPELL_ATTR7_UNK12', 0x00001000); // Unknown attribute 12@Attr7
define('SPELL_ATTR7_UNK13', 0x00002000); // Unknown attribute 13@Attr7
define('SPELL_ATTR7_UNK14', 0x00004000); // Unknown attribute 14@Attr7
define('SPELL_ATTR7_UNK15', 0x00008000); // Unknown attribute 15@Attr7 DESCRIPTION Exorcism - guaranteed crit vs families?
define('SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER', 0x00010000); // Can restore secondary power DESCRIPTION Only spells with this attribute can replenish a non-active power type
define('SPELL_ATTR7_UNK17', 0x00020000); // Unknown attribute 17@Attr7
define('SPELL_ATTR7_HAS_CHARGE_EFFECT', 0x00040000); // Has charge effect
define('SPELL_ATTR7_ZONE_TELEPORT', 0x00080000); // Is zone teleport
define('SPELL_ATTR7_UNK20', 0x00100000); // Unknown attribute 20@Attr7 DESCRIPTION Invulnerability related?
define('SPELL_ATTR7_UNK21', 0x00200000); // Unknown attribute 21@Attr7
define('SPELL_ATTR7_IGNORE_COLD_WEATHER_FLYING', 0x00400000); // Ignore cold weather flying restriction DESCRIPTION Set for loaner mounts, allows them to be used despite lacking required flight skill
define('SPELL_ATTR7_UNK23', 0x00800000); // Unknown attribute 23@Attr7
define('SPELL_ATTR7_UNK24', 0x01000000); // Unknown attribute 24@Attr7
define('SPELL_ATTR7_UNK25', 0x02000000); // Unknown attribute 25@Attr7
define('SPELL_ATTR7_UNK26', 0x04000000); // Unknown attribute 26@Attr7
define('SPELL_ATTR7_UNK27', 0x08000000); // Unknown attribute 27@Attr7
define('SPELL_ATTR7_CONSOLIDATED_RAID_BUFF', 0x10000000); // Consolidate in raid buff frame (client only)
define('SPELL_ATTR7_UNK29', 0x20000000); // Unknown attribute 29@Attr7
define('SPELL_ATTR7_UNK30', 0x40000000); // Unknown attribute 30@Attr7
define('SPELL_ATTR7_CLIENT_INDICATOR', 0x80000000); // Client indicator (client only)
// AchievementCriteriaCondition
define('ACHIEVEMENT_CRITERIA_CONDITION_NO_DEATH', 1); // reset progress on death
define('ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP', 3); // requires you to be on specific map, reset at change

View File

@@ -796,7 +796,7 @@ class SpellList extends BaseType
else if ($noInstant && !in_array($this->curTpl['typeCat'], [11, 7, -3, -6, -8, 0]) && !($this->curTpl['cuFlags'] & SPELL_CU_TALENTSPELL))
return '';
// SPELL_ATTR0_ABILITY instant ability.. yeah, wording thing only (todo (low): rule is imperfect)
else if ($this->curTpl['damageClass'] != 1 || $this->curTpl['attributes0'] & 0x10)
else if ($this->curTpl['damageClass'] != 1 || $this->curTpl['attributes0'] & SPELL_ATTR0_ABILITY)
return Lang::spell('instantPhys');
else // instant cast
return Lang::spell('instantMagic');
@@ -831,7 +831,7 @@ class SpellList extends BaseType
else if ($level < $baseLvl)
$level = $baseLvl;
if (!$ref->getField('atributes0') & 0x40) // SPELL_ATTR0_PASSIVE
if (!$ref->getField('atributes0') & SPELL_ATTR0_PASSIVE)
$level -= $ref->getField('spellLevel');
$base += (int)($level * $rppl);
@@ -881,7 +881,7 @@ class SpellList extends BaseType
public function isChanneledSpell()
{
return $this->curTpl['attributes1'] & 0x44;
return $this->curTpl['attributes1'] & (SPELL_ATTR1_CHANNELED_1 | SPELL_ATTR1_CHANNELED_2);
}
public function isHealingSpell()
@@ -1356,7 +1356,7 @@ class SpellList extends BaseType
$formOutStr = '';
while ($formCurPos <= strlen($formula))
while ($formCurPos < strlen($formula))
{
$char = $formula[$formCurPos];
@@ -1650,7 +1650,7 @@ class SpellList extends BaseType
$formOutStr = '';
while ($formCurPos <= strlen($data)) // only hard-exit condition, we'll hit those breaks eventually^^
while ($formCurPos < strlen($data)) // only hard-exit condition, we'll hit those breaks eventually^^
{
$char = $data[$formCurPos];
@@ -1754,7 +1754,7 @@ class SpellList extends BaseType
$condParts = [];
$isLastElse = false;
while ($condCurPos <= strlen($data)) // only hard-exit condition, we'll hit those breaks eventually^^
while ($condCurPos < strlen($data)) // only hard-exit condition, we'll hit those breaks eventually^^
{
$char = $data[$condCurPos];
@@ -1916,9 +1916,9 @@ class SpellList extends BaseType
$reagents = array_reverse($reagents);
// get stances (check: SPELL_ATTR2_NOT_NEED_SHAPESHIFT)
// get stances
$stances = '';
if ($this->curTpl['stanceMask'] && !($this->curTpl['attributes2'] & 0x80000))
if ($this->curTpl['stanceMask'] && !($this->curTpl['attributes2'] & SPELL_ATTR2_NOT_NEED_SHAPESHIFT))
$stances = Lang::game('requires2').' '.Lang::getStances($this->curTpl['stanceMask']);
// get item requirement (skip for professions)
@@ -2296,7 +2296,7 @@ class SpellList extends BaseType
{
// mainly for DoTs which are 3500 here otherwise
$originalCastTime = $this->curTpl['castTime'] * 1000;
if ($this->curTpl['attributes0'] & 0x2) // requires Ammo
if ($this->curTpl['attributes0'] & SPELL_ATTR0_REQ_AMMO)
$originalCastTime += 500;
if ($originalCastTime > 7000)
@@ -2399,105 +2399,105 @@ class SpellListFilter extends Filter
// cr => [type, field, misc, extraCol]
protected $genericFilter = array( // misc (bool): _NUMERIC => useFloat; _STRING => localized; _FLAG => match Value; _BOOLEAN => stringSet
1 => [FILTER_CR_CALLBACK, 'cbCost', ], // costAbs [op] [int]
2 => [FILTER_CR_NUMERIC, 'powerCostPercent', NUM_CAST_INT ], // prcntbasemanarequired
3 => [FILTER_CR_BOOLEAN, 'spellFocusObject' ], // requiresnearbyobject
4 => [FILTER_CR_NUMERIC, 'trainingcost', NUM_CAST_INT ], // trainingcost
5 => [FILTER_CR_BOOLEAN, 'reqSpellId' ], // requiresprofspec
8 => [FILTER_CR_FLAG, 'cuFlags', CUSTOM_HAS_SCREENSHOT ], // hasscreenshots
9 => [FILTER_CR_CALLBACK, 'cbSource', ], // source [enum]
10 => [FILTER_CR_FLAG, 'cuFlags', SPELL_CU_FIRST_RANK ], // firstrank
11 => [FILTER_CR_FLAG, 'cuFlags', CUSTOM_HAS_COMMENT ], // hascomments
12 => [FILTER_CR_FLAG, 'cuFlags', SPELL_CU_LAST_RANK ], // lastrank
13 => [FILTER_CR_NUMERIC, 'rankNo', NUM_CAST_INT ], // rankno
14 => [FILTER_CR_NUMERIC, 'id', NUM_CAST_INT, true ], // id
15 => [FILTER_CR_STRING, 'ic.name', ], // icon
17 => [FILTER_CR_FLAG, 'cuFlags', CUSTOM_HAS_VIDEO ], // hasvideos
19 => [FILTER_CR_FLAG, 'attributes0', 0x80000 ], // scaling
20 => [FILTER_CR_CALLBACK, 'cbReagents', ], // has Reagents [yn]
// 22 => [FILTER_CR_NYI_PH, null, null, null ], // proficiencytype [proficiencytype] pointless
25 => [FILTER_CR_BOOLEAN, 'skillLevelYellow' ], // rewardsskillups
27 => [FILTER_CR_FLAG, 'attributes1', 0x0044, true ], // channeled [yn]
28 => [FILTER_CR_NUMERIC, 'castTime', NUM_CAST_FLOAT ], // casttime [num]
29 => [FILTER_CR_CALLBACK, 'cbAuraNames', ], // appliesaura [effectauranames]
// 31 => [FILTER_CR_NYI_PH, null, null, null ], // usablewhenshapeshifted [yn] pointless
33 => [FILTER_CR_CALLBACK, 'cbInverseFlag', 'attributes0', 0x10000000], // combatcastable [yn]
34 => [FILTER_CR_CALLBACK, 'cbInverseFlag', 'attributes2', 0x20000000], // chancetocrit [yn]
35 => [FILTER_CR_CALLBACK, 'cbInverseFlag', 'attributes3', 0x00040000], // chancetomiss [yn]
36 => [FILTER_CR_FLAG, 'attributes3', 0x00100000 ], // persiststhroughdeath [yn]
38 => [FILTER_CR_FLAG, 'attributes0', 0x00020000 ], // requiresstealth [yn]
39 => [FILTER_CR_CALLBACK, 'cbSpellstealable', 'attributes4', 0x00000040], // spellstealable [yn]
40 => [FILTER_CR_ENUM, 'damageClass' ], // damagetype [damagetype]
41 => [FILTER_CR_FLAG, 'stanceMask', (1 << (22 - 1)) ], // requiresmetamorphosis [yn]
42 => [FILTER_CR_FLAG, 'attributes5', 0x00000008 ], // usablewhenstunned [yn]
44 => [FILTER_CR_CALLBACK, 'cbUsableInArena' ], // usableinarenas [yn]
45 => [FILTER_CR_ENUM, 'powerType' ], // resourcetype [resourcetype]
// 46 => [FILTER_CR_NYI_PH, null, null, null ], // disregardimmunity [yn]
47 => [FILTER_CR_FLAG, 'attributes1', 0x00010000 ], // disregardschoolimmunity [yn]
48 => [FILTER_CR_CALLBACK, 'cbEquippedWeapon', 0x0004000C, false ], // reqrangedweapon [yn]
49 => [FILTER_CR_FLAG, 'attributes0', 0x00000004 ], // onnextswingplayers [yn]
50 => [FILTER_CR_FLAG, 'attributes0', 0x00000040 ], // passivespell [yn]
51 => [FILTER_CR_FLAG, 'attributes1', 0x10000000 ], // hiddenaura [yn]
52 => [FILTER_CR_FLAG, 'attributes0', 0x00000400 ], // onnextswingnpcs [yn]
53 => [FILTER_CR_FLAG, 'attributes0', 0x00001000 ], // daytimeonly [yn]
54 => [FILTER_CR_FLAG, 'attributes0', 0x00002000 ], // nighttimeonly [yn]
55 => [FILTER_CR_FLAG, 'attributes0', 0x00004000 ], // indoorsonly [yn]
56 => [FILTER_CR_FLAG, 'attributes0', 0x00008000 ], // outdoorsonly [yn]
57 => [FILTER_CR_FLAG, 'attributes0', 0x80000000 ], // uncancellableaura [yn]
58 => [FILTER_CR_FLAG, 'attributes0', 0x00080000 ], // damagedependsonlevel [yn]
59 => [FILTER_CR_FLAG, 'attributes0', 0x00100000 ], // stopsautoattack [yn]
60 => [FILTER_CR_FLAG, 'attributes0', 0x00200000 ], // cannotavoid [yn]
61 => [FILTER_CR_FLAG, 'attributes0', 0x00800000 ], // usabledead [yn]
62 => [FILTER_CR_FLAG, 'attributes0', 0x01000000 ], // usablemounted [yn]
63 => [FILTER_CR_FLAG, 'attributes0', 0x02000000 ], // delayedrecoverystarttime [yn]
64 => [FILTER_CR_FLAG, 'attributes0', 0x08000000 ], // usablesitting [yn]
65 => [FILTER_CR_FLAG, 'attributes1', 0x00000002 ], // usesallpower [yn]
66 => [FILTER_CR_FLAG, 'attributes1', 0x00000044, true ], // channeled [yn] redundancy much...?
67 => [FILTER_CR_FLAG, 'attributes1', 0x00000080 ], // cannotreflect [yn]
68 => [FILTER_CR_FLAG, 'attributes1', 0x00000020 ], // usablestealthed [yn]
69 => [FILTER_CR_FLAG, 'attributes0', 0x04000000 ], // harmful [yn]
70 => [FILTER_CR_FLAG, 'attributes1', 0x00000100 ], // targetnotincombat [yn]
71 => [FILTER_CR_FLAG, 'attributes1', 0x00000400 ], // nothreat [yn]
72 => [FILTER_CR_FLAG, 'attributes1', 0x00001000 ], // pickpocket [yn]
73 => [FILTER_CR_FLAG, 'attributes1', 0x00008000 ], // dispelauraonimmunity [yn]
74 => [FILTER_CR_CALLBACK, 'cbEquippedWeapon', 0x00100000, false ], // reqfishingpole [yn]
75 => [FILTER_CR_FLAG, 'attributes2', 0x00000040 ], // requntappedtarget [yn]
// 76 => [FILTER_CR_NYI_PH, null, null, null ], // targetownitem [yn] // the flag for this has to be somewhere....
77 => [FILTER_CR_FLAG, 'attributes2', 0x00080000 ], // doesntreqshapeshift [yn]
78 => [FILTER_CR_FLAG, 'attributes2', 0x80000000 ], // foodbuff [yn]
79 => [FILTER_CR_FLAG, 'attributes3', 0x00000100 ], // targetonlyplayer [yn]
80 => [FILTER_CR_CALLBACK, 'cbEquippedWeapon', 1 << INVTYPE_WEAPONMAINHAND, true ], // reqmainhand [yn]
81 => [FILTER_CR_FLAG, 'attributes3', 0x00020000 ], // doesntengagetarget [yn]
82 => [FILTER_CR_CALLBACK, 'cbEquippedWeapon', 0x00080000, false ], // reqwand [yn]
83 => [FILTER_CR_CALLBACK, 'cbEquippedWeapon', 1 << INVTYPE_WEAPONOFFHAND, true ], // reqoffhand [yn]
84 => [FILTER_CR_FLAG, 'attributes0', 0x00000100 ], // nolog [yn]
85 => [FILTER_CR_FLAG, 'attributes4', 0x00000004 ], // auratickswhileloggedout [yn]
87 => [FILTER_CR_FLAG, 'attributes5', 0x00000200 ], // startstickingatapplication [yn]
88 => [FILTER_CR_FLAG, 'attributes5', 0x00040000 ], // usableconfused [yn]
89 => [FILTER_CR_FLAG, 'attributes5', 0x00020000 ], // usablefeared [yn]
90 => [FILTER_CR_FLAG, 'attributes6', 0x00000002 ], // onlyarena [yn]
91 => [FILTER_CR_FLAG, 'attributes6', 0x00000800 ], // notinraid [yn]
92 => [FILTER_CR_FLAG, 'attributes7', 0x00000004 ], // paladinaura [yn]
93 => [FILTER_CR_FLAG, 'attributes7', 0x00000020 ], // totemspell [yn]
95 => [FILTER_CR_CALLBACK, 'cbBandageSPell' ], // bandagespell [yn] ...don't ask
96 => [FILTER_CR_STAFFFLAG, 'attributes0' ], // flags1 [flags]
97 => [FILTER_CR_STAFFFLAG, 'attributes1' ], // flags2 [flags]
98 => [FILTER_CR_STAFFFLAG, 'attributes2' ], // flags3 [flags]
99 => [FILTER_CR_STAFFFLAG, 'attributes3' ], // flags4 [flags]
100 => [FILTER_CR_STAFFFLAG, 'attributes4' ], // flags5 [flags]
101 => [FILTER_CR_STAFFFLAG, 'attributes5' ], // flags6 [flags]
102 => [FILTER_CR_STAFFFLAG, 'attributes6' ], // flags7 [flags]
103 => [FILTER_CR_STAFFFLAG, 'attributes7' ], // flags8 [flags]
104 => [FILTER_CR_STAFFFLAG, 'targets' ], // flags9 [flags]
105 => [FILTER_CR_STAFFFLAG, 'stanceMaskNot' ], // flags10 [flags]
106 => [FILTER_CR_STAFFFLAG, 'spellFamilyFlags1' ], // flags11 [flags]
107 => [FILTER_CR_STAFFFLAG, 'spellFamilyFlags2' ], // flags12 [flags]
108 => [FILTER_CR_STAFFFLAG, 'spellFamilyFlags3' ], // flags13 [flags]
109 => [FILTER_CR_CALLBACK, 'cbEffectNames', ], // effecttype [effecttype]
// 110 => [FILTER_CR_NYI_PH, null, null, null ], // scalingap [yn] // unreasonably complex for now
// 111 => [FILTER_CR_NYI_PH, null, null, null ], // scalingsp [yn] // unreasonably complex for now
114 => [FILTER_CR_CALLBACK, 'cbReqFaction' ], // requiresfaction [side]
116 => [FILTER_CR_BOOLEAN, 'startRecoveryTime' ] // onGlobalCooldown [yn]
1 => [FILTER_CR_CALLBACK, 'cbCost', ], // costAbs [op] [int]
2 => [FILTER_CR_NUMERIC, 'powerCostPercent', NUM_CAST_INT ], // prcntbasemanarequired
3 => [FILTER_CR_BOOLEAN, 'spellFocusObject' ], // requiresnearbyobject
4 => [FILTER_CR_NUMERIC, 'trainingcost', NUM_CAST_INT ], // trainingcost
5 => [FILTER_CR_BOOLEAN, 'reqSpellId' ], // requiresprofspec
8 => [FILTER_CR_FLAG, 'cuFlags', CUSTOM_HAS_SCREENSHOT ], // hasscreenshots
9 => [FILTER_CR_CALLBACK, 'cbSource', ], // source [enum]
10 => [FILTER_CR_FLAG, 'cuFlags', SPELL_CU_FIRST_RANK ], // firstrank
11 => [FILTER_CR_FLAG, 'cuFlags', CUSTOM_HAS_COMMENT ], // hascomments
12 => [FILTER_CR_FLAG, 'cuFlags', SPELL_CU_LAST_RANK ], // lastrank
13 => [FILTER_CR_NUMERIC, 'rankNo', NUM_CAST_INT ], // rankno
14 => [FILTER_CR_NUMERIC, 'id', NUM_CAST_INT, true ], // id
15 => [FILTER_CR_STRING, 'ic.name', ], // icon
17 => [FILTER_CR_FLAG, 'cuFlags', CUSTOM_HAS_VIDEO ], // hasvideos
19 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION ], // scaling
20 => [FILTER_CR_CALLBACK, 'cbReagents', ], // has Reagents [yn]
// 22 => [FILTER_CR_NYI_PH, null, null, null ], // proficiencytype [proficiencytype] pointless
25 => [FILTER_CR_BOOLEAN, 'skillLevelYellow' ], // rewardsskillups
27 => [FILTER_CR_FLAG, 'attributes1', SPELL_ATTR1_CHANNELED_1, true ], // channeled [yn]
28 => [FILTER_CR_NUMERIC, 'castTime', NUM_CAST_FLOAT ], // casttime [num]
29 => [FILTER_CR_CALLBACK, 'cbAuraNames', ], // appliesaura [effectauranames]
// 31 => [FILTER_CR_NYI_PH, null, null, null ], // usablewhenshapeshifted [yn] pointless
33 => [FILTER_CR_CALLBACK, 'cbInverseFlag', 'attributes0', SPELL_ATTR0_CANT_USED_IN_COMBAT], // combatcastable [yn]
34 => [FILTER_CR_CALLBACK, 'cbInverseFlag', 'attributes2', SPELL_ATTR2_CANT_CRIT ], // chancetocrit [yn]
35 => [FILTER_CR_CALLBACK, 'cbInverseFlag', 'attributes3', SPELL_ATTR3_IGNORE_HIT_RESULT ], // chancetomiss [yn]
36 => [FILTER_CR_FLAG, 'attributes3', SPELL_ATTR3_DEATH_PERSISTENT ], // persiststhroughdeath [yn]
38 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_ONLY_STEALTHED ], // requiresstealth [yn]
39 => [FILTER_CR_CALLBACK, 'cbSpellstealable', 'attributes4', SPELL_ATTR4_NOT_STEALABLE ], // spellstealable [yn]
40 => [FILTER_CR_ENUM, 'damageClass' ], // damagetype [damagetype]
41 => [FILTER_CR_FLAG, 'stanceMask', (1 << (22 - 1)) ], // requiresmetamorphosis [yn]
42 => [FILTER_CR_FLAG, 'attributes5', SPELL_ATTR5_USABLE_WHILE_STUNNED ], // usablewhenstunned [yn]
44 => [FILTER_CR_CALLBACK, 'cbUsableInArena' ], // usableinarenas [yn]
45 => [FILTER_CR_ENUM, 'powerType' ], // resourcetype [resourcetype]
// 46 => [FILTER_CR_NYI_PH, null, null, null ], // disregardimmunity [yn]
47 => [FILTER_CR_FLAG, 'attributes1', SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE ], // disregardschoolimmunity [yn]
48 => [FILTER_CR_CALLBACK, 'cbEquippedWeapon', 0x0004000C, false ], // reqrangedweapon [yn]
49 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_ON_NEXT_SWING ], // onnextswingplayers [yn]
50 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_PASSIVE ], // passivespell [yn]
51 => [FILTER_CR_FLAG, 'attributes1', SPELL_ATTR1_DONT_DISPLAY_IN_AURA_BAR ], // hiddenaura [yn]
52 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_ON_NEXT_SWING_2 ], // onnextswingnpcs [yn]
53 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_DAYTIME_ONLY ], // daytimeonly [yn]
54 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_NIGHT_ONLY ], // nighttimeonly [yn]
55 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_INDOORS_ONLY ], // indoorsonly [yn]
56 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_OUTDOORS_ONLY ], // outdoorsonly [yn]
57 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_CANT_CANCEL ], // uncancellableaura [yn]
58 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION ], // damagedependsonlevel [yn]
59 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_STOP_ATTACK_TARGET ], // stopsautoattack [yn]
60 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK ], // cannotavoid [yn]
61 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_CASTABLE_WHILE_DEAD ], // usabledead [yn]
62 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_CASTABLE_WHILE_MOUNTED ], // usablemounted [yn]
63 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_DISABLED_WHILE_ACTIVE ], // delayedrecoverystarttime [yn]
64 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_CASTABLE_WHILE_SITTING ], // usablesitting [yn]
65 => [FILTER_CR_FLAG, 'attributes1', SPELL_ATTR1_DRAIN_ALL_POWER ], // usesallpower [yn]
66 => [FILTER_CR_FLAG, 'attributes1', SPELL_ATTR1_CHANNELED_2, true ], // channeled [yn]
67 => [FILTER_CR_FLAG, 'attributes1', SPELL_ATTR1_CANT_BE_REFLECTED ], // cannotreflect [yn]
68 => [FILTER_CR_FLAG, 'attributes1', SPELL_ATTR1_NOT_BREAK_STEALTH ], // usablestealthed [yn]
69 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_NEGATIVE_1 ], // harmful [yn]
70 => [FILTER_CR_FLAG, 'attributes1', SPELL_ATTR1_CANT_TARGET_IN_COMBAT ], // targetnotincombat [yn]
71 => [FILTER_CR_FLAG, 'attributes1', SPELL_ATTR1_NO_THREAT ], // nothreat [yn]
72 => [FILTER_CR_FLAG, 'attributes1', SPELL_ATTR1_IS_PICKPOCKET ], // pickpocket [yn]
73 => [FILTER_CR_FLAG, 'attributes1', SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY ], // dispelauraonimmunity [yn]
74 => [FILTER_CR_CALLBACK, 'cbEquippedWeapon', 0x00100000, false ], // reqfishingpole [yn]
75 => [FILTER_CR_FLAG, 'attributes2', SPELL_ATTR2_CANT_TARGET_TAPPED ], // requntappedtarget [yn]
// 76 => [FILTER_CR_NYI_PH, null, null, null ], // targetownitem [yn] // the flag for this has to be somewhere....
77 => [FILTER_CR_FLAG, 'attributes2', SPELL_ATTR2_NOT_NEED_SHAPESHIFT ], // doesntreqshapeshift [yn]
78 => [FILTER_CR_FLAG, 'attributes2', SPELL_ATTR2_FOOD_BUFF ], // foodbuff [yn]
79 => [FILTER_CR_FLAG, 'attributes3', SPELL_ATTR3_ONLY_TARGET_PLAYERS ], // targetonlyplayer [yn]
80 => [FILTER_CR_CALLBACK, 'cbEquippedWeapon', 1 << INVTYPE_WEAPONMAINHAND, true ], // reqmainhand [yn]
81 => [FILTER_CR_FLAG, 'attributes3', SPELL_ATTR3_NO_INITIAL_AGGRO ], // doesntengagetarget [yn]
82 => [FILTER_CR_CALLBACK, 'cbEquippedWeapon', 0x00080000, false ], // reqwand [yn]
83 => [FILTER_CR_CALLBACK, 'cbEquippedWeapon', 1 << INVTYPE_WEAPONOFFHAND, true ], // reqoffhand [yn]
84 => [FILTER_CR_FLAG, 'attributes0', SPELL_ATTR0_HIDE_IN_COMBAT_LOG ], // nolog [yn]
85 => [FILTER_CR_FLAG, 'attributes4', SPELL_ATTR4_FADES_WHILE_LOGGED_OUT ], // auratickswhileloggedout [yn]
87 => [FILTER_CR_FLAG, 'attributes5', SPELL_ATTR5_START_PERIODIC_AT_APPLY ], // startstickingatapplication [yn]
88 => [FILTER_CR_FLAG, 'attributes5', SPELL_ATTR5_USABLE_WHILE_CONFUSED ], // usableconfused [yn]
89 => [FILTER_CR_FLAG, 'attributes5', SPELL_ATTR5_USABLE_WHILE_FEARED ], // usablefeared [yn]
90 => [FILTER_CR_FLAG, 'attributes6', SPELL_ATTR6_ONLY_IN_ARENA ], // onlyarena [yn]
91 => [FILTER_CR_FLAG, 'attributes6', SPELL_ATTR6_NOT_IN_RAID_INSTANCE ], // notinraid [yn]
92 => [FILTER_CR_FLAG, 'attributes7', SPELL_ATTR7_REACTIVATE_AT_RESURRECT ], // paladinaura [yn]
93 => [FILTER_CR_FLAG, 'attributes7', SPELL_ATTR7_SUMMON_PLAYER_TOTEM ], // totemspell [yn]
95 => [FILTER_CR_CALLBACK, 'cbBandageSpell' ], // bandagespell [yn] ...don't ask
96 => [FILTER_CR_STAFFFLAG, 'attributes0' ], // flags1 [flags]
97 => [FILTER_CR_STAFFFLAG, 'attributes1' ], // flags2 [flags]
98 => [FILTER_CR_STAFFFLAG, 'attributes2' ], // flags3 [flags]
99 => [FILTER_CR_STAFFFLAG, 'attributes3' ], // flags4 [flags]
100 => [FILTER_CR_STAFFFLAG, 'attributes4' ], // flags5 [flags]
101 => [FILTER_CR_STAFFFLAG, 'attributes5' ], // flags6 [flags]
102 => [FILTER_CR_STAFFFLAG, 'attributes6' ], // flags7 [flags]
103 => [FILTER_CR_STAFFFLAG, 'attributes7' ], // flags8 [flags]
104 => [FILTER_CR_STAFFFLAG, 'targets' ], // flags9 [flags]
105 => [FILTER_CR_STAFFFLAG, 'stanceMaskNot' ], // flags10 [flags]
106 => [FILTER_CR_STAFFFLAG, 'spellFamilyFlags1' ], // flags11 [flags]
107 => [FILTER_CR_STAFFFLAG, 'spellFamilyFlags2' ], // flags12 [flags]
108 => [FILTER_CR_STAFFFLAG, 'spellFamilyFlags3' ], // flags13 [flags]
109 => [FILTER_CR_CALLBACK, 'cbEffectNames', ], // effecttype [effecttype]
// 110 => [FILTER_CR_NYI_PH, null, null, null ], // scalingap [yn] // unreasonably complex for now
// 111 => [FILTER_CR_NYI_PH, null, null, null ], // scalingsp [yn] // unreasonably complex for now
114 => [FILTER_CR_CALLBACK, 'cbReqFaction' ], // requiresfaction [side]
116 => [FILTER_CR_BOOLEAN, 'startRecoveryTime' ] // onGlobalCooldown [yn]
);
// fieldId => [checkType, checkValue[, fieldIsArray]]
@@ -2592,6 +2592,11 @@ class SpellListFilter extends Filter
return $parts;
}
public function getGenericFilter($cr) // access required by SpellDetailPage's SpellAttributes list
{
return $this->genericFilter[$cr] ?? [];
}
protected function cbClasses(&$val)
{
if (!$this->parentCats || !in_array($this->parentCats[0], [-13, -2, 7]))
@@ -2735,13 +2740,13 @@ class SpellListFilter extends Filter
if ($cr[1])
return ['AND',
[['attributes4', 0x00010000, '&'], 0],
['OR', ['recoveryTime', 10 * MINUTE * 1000, '<='], ['attributes4', 0x00020000, '&']]
[['attributes4', SPELL_ATTR4_NOT_USABLE_IN_ARENA, '&'], 0],
['OR', ['recoveryTime', 10 * MINUTE * 1000, '<='], ['attributes4', SPELL_ATTR4_USABLE_IN_ARENA, '&']]
];
else
return ['OR',
['attributes4', 0x00010000, '&'],
['AND', ['recoveryTime', 10 * MINUTE * 1000, '>'], [['attributes4', 0x00020000, '&'], 0]]
['attributes4', SPELL_ATTR4_NOT_USABLE_IN_ARENA, '&'],
['AND', ['recoveryTime', 10 * MINUTE * 1000, '>'], [['attributes4', SPELL_ATTR4_USABLE_IN_ARENA, '&'], 0]]
];
}
@@ -2751,9 +2756,9 @@ class SpellListFilter extends Filter
return false;
if ($cr[1]) // match exact, not as flag
return ['AND', ['attributes1', 0x00004044], ['effect1ImplicitTargetA', 21]];
return ['AND', ['attributes1', SPELL_ATTR1_CHANNELED_1 | SPELL_ATTR1_CHANNELED_2 | SPELL_ATTR1_CHANNEL_TRACK_TARGET], ['effect1ImplicitTargetA', 21]];
else
return ['OR', ['attributes1', 0x00004044, '!'], ['effect1ImplicitTargetA', 21, '!']];
return ['OR', ['attributes1', SPELL_ATTR1_CHANNELED_1 | SPELL_ATTR1_CHANNELED_2 | SPELL_ATTR1_CHANNEL_TRACK_TARGET, '!'], ['effect1ImplicitTargetA', 21, '!']];
}
}

View File

@@ -219,6 +219,7 @@ $lang = array(
'emotes' => "Emotes",
'enchantment' => "Verzauberung",
'enchantments' => "Verzauberungen",
'flags' => "Flags",
'object' => "Objekt",
'objects' => "Objekte",
'glyphType' => "Glyphenart",
@@ -1450,6 +1451,65 @@ $lang = array(
),
'stealthType' => ["Allgemein", "Falle"],
'invisibilityType' => ["Allgemein", 3 => "Falle", 6 => "Trunkenheit"],
'attributes' => array( // index defined by filters
69 => "Alle Zaubereffekte sind schädlich",
57 => "Aura kann nicht entfernt werden",
51 => "Aura ist versteckt",
95 => "Verbandszauber",
61 => "Kann tot verwendet werden",
62 => "Kann verwendet werden, während Ihr auf einem Reittier sitzt",
64 => "Kann im Sitzen benutzt werden",
53 => "Kann nur tagsüber benutzt werden",
54 => "Kann nur nachts verwendet werden",
55 => "Kann nur drinnen verwendet werden",
56 => "Kann nur draußen verwendet werden",
79 => "Kann nur einen Spieler zum Ziel haben",
60 => "Kann nicht ausgewichen, pariert oder geblockt werden",
67 => "Kann nicht reflektiert werden",
91 => "Kann nicht im Schlachtzug verwendet werden",
33 => "Kann im Kampf gewirkt werden",
34 => "Chance, kritisch zu treffen",
35 => "Chance to verfehlen",
27 => "Kanalisiert",
66 => "Kanalisiert 2",
85 => "Dauert an, während Ihr ausgeloggt seid",
84 => "Erscheint nicht im Log",
68 => "Beendet Verstohlenheitsmodus nicht",
81 => "Verwickelt das Ziel nicht in einen Kampf",
77 => "Erfordert keine Gestaltwandlung",
// 46 => "Ignoriert Unverwundbarkeit",
47 => "Ignoriert Unverwundbarkeit gegen Magieart",
78 => "Essens-/Getränk-Buff",
71 => "Generiert keine Bedrohung",
52 => "Mit dem nächsten Schwung (NSCs)",
49 => "Mit dem nächsten Schwung (Spieler)",
90 => "Nur in der Arena benutzbar",
92 => "Paladin Aura",
50 => "Passiver Zauber",
36 => "Hält über Tod hinaus an",
72 => "Taschendiebstahl-Zauber",
73 => "Entfernt Auren auf Immunität",
48 => "Benötigt eine Fernkampfwaffe",
82 => "Benötigt einen Zauberstab",
83 => "Benötigt eine Schildhandwaffe",
74 => "Erfordert Angelrute",
41 => "Benötigt Metamorphose",
80 => "Benötigt eine Haupthandwaffe",
38 => "Benötigt Verstohlenheit",
75 => "Setzt ein unmarkiertes Ziel voraus",
58 => "Zauberschaden ist abhängig von der Stufe des Zauberers",
39 => "Zauber kann geraubt werden",
63 => "Abklingzeit beginnt, nachdem die Aura schwindet",
87 => "Beginnt zu ticken, sobald die Aura angewendet wird",
59 => "Stoppt Autoangriff",
// 76 => "Das Ziel muss ein eigener Gegenstand sein",
70 => "Das Ziel darf sich nicht im Kampf befinden",
93 => "Totem",
42 => "Benutzbar in Betäubung",
88 => "Verwendbar, während Ihr verwirrt seid",
89 => "Verwendbar, während Ihr verängstigt seid",
65 => "Braucht alle Ressourcen auf"
),
'unkEffect' => 'Unknown Effect',
'effects' => array(
/*0-5 */ 'None', 'Instakill', 'School Damage', 'Dummy', 'Portal Teleport', 'Teleport Units',

View File

@@ -219,6 +219,7 @@ $lang = array(
'emotes' => "Emotes",
'enchantment' => "enchantment",
'enchantments' => "Enchantments",
'flags' => "Flags",
'object' => "object",
'objects' => "Objects",
'glyphType' => "Glyph type",
@@ -1450,6 +1451,65 @@ $lang = array(
),
'stealthType' => ["General", "Trap"],
'invisibilityType' => ["General", 3 => "Trap", 6 => "Drunk"],
'attributes' => array( // index defined by filters
69 => "All spell effects are harmful",
57 => "Aura cannot be cancelled",
51 => "Aura is hidden",
95 => "Bandage spell",
61 => "Can be used while dead",
62 => "Can be used while mounted",
64 => "Can be used while sitting",
53 => "Can only be used during daytime",
54 => "Can only be used during nighttime",
55 => "Can only be used indoors",
56 => "Can only be used outdoors",
79 => "Can only target the player",
60 => "Cannot be dodged, parried or blocked",
67 => "Cannot be reflected",
91 => "Cannot be used in a raid",
33 => "Castable in combat",
34 => "Chance to critically hit",
35 => "Chance to miss",
27 => "Channeled",
66 => "Channeled 2",
85 => "Continues while logged out",
84 => "Does not appear in log",
68 => "Does not break stealth",
81 => "Does not engage target",
77 => "Does not require shapeshift",
// 46 => "Disregards immunity",
47 => "Disregards school immunity",
78 => "Food/Drink buff",
71 => "Generates no threat",
52 => "On next swing (npcs)",
49 => "On next swing (players)",
90 => "Only usable in arena",
92 => "Paladin aura",
50 => "Passive spell",
36 => "Persists through death",
72 => "Pickpocket spell",
73 => "Remove auras on immunity",
48 => "Requires a ranged weapon",
82 => "Requires a wand",
83 => "Requires an off-hand weapon",
74 => "Requires fishing pole",
41 => "Requires Metamorphosis",
80 => "Requires main hand weapon",
38 => "Requires Stealth",
75 => "Requires untapped target",
58 => "Spell damage depends on caster level",
39 => "Spellstealable",
63 => "Starts cooldown after aura fades",
87 => "Starts ticking at aura application",
59 => "Stops auto-attack",
// 76 => "Target must be own item",
70 => "The target cannot be in combat",
93 => "Totem",
42 => "Usable when stunned",
88 => "Usable while confused",
89 => "Usable while feared",
65 => "Uses all power"
),
'unkEffect' => 'Unknown Effect',
'effects' => array(
/*0-5 */ 'None', 'Instakill', 'School Damage', 'Dummy', 'Portal Teleport', 'Teleport Units',

View File

@@ -219,6 +219,7 @@ $lang = array(
'emotes' => "Emociones",
'enchantment' => "encantamiento",
'enchantments' => "Encantamientos",
'flags' => "Banderas",
'object' => "entidad",
'objects' => "Entidades",
'glyphType' => "Tipo de glifo",
@@ -1450,6 +1451,65 @@ $lang = array(
),
'stealthType' => ["GENERAL", "TRAP"],
'invisibilityType' => ["GENERAL", 3 => "TRAP", 6 => "DRUNK"],
'attributes' => array( // index defined by filters
69 => "Todos los efectos de Hechizos son perjudiciales",
57 => "El aura no se puede cancelar",
51 => "El Aura esta oculta",
95 => "Hechizo de Venda",
61 => "Se puede utilizar estando muerto",
62 => "Se puede utilizar estando montado",
64 => "Se puede utilizar sentado",
53 => "Solo puede ser utilizado de día",
54 => "Sólo se puede utilizar durante la noche",
55 => "Solo puede ser utilizado en interiores",
56 => "Solo puede ser utilizado en exteriores",
79 => "Solo puede hacerle objetivo al jugador",
60 => "No puede ser esquivado, parado o bloqueado",
67 => "No puede ser reflejado",
91 => "No puede ser utilizado en una banda",
33 => "Utilizable en combate",
34 => "Oportunidad de golpe crítico",
35 => "Oportunidad de fallar",
27 => "Canalizado",
66 => "Canalizado 2",
85 => "Continúa mientras esta desconectado",
84 => "No aparece en el registro",
68 => "No rompe el sigilo",
81 => "No ataca al objetivo",
77 => "No requiere cambio de forma",
// 46 => "Ignora la inmunidad",
47 => "Ignora la imunidad a una escuela de magia",
78 => "Beneficio de la Bebida/Comida",
71 => "No genera amenza",
52 => "Con el próximo golpe (PNJs)",
49 => "Con el próximo golpe (jugadores)",
90 => "Solo utilizable en Arena",
92 => "Aura de Paladín",
50 => "Hechizo Pasivo",
36 => "Persiste después de la muerte",
72 => "Hechizo de Robar",
73 => "Remueve las auras siendo inmune",
48 => "Requiere un arma a distancia",
82 => "Requiere una varita",
83 => "Requiere un arma en la mano izquierda",
74 => "Requiere una Caña de Pescar",
41 => "Requiere Metamorfosis",
80 => "Requiere Arma en la Mano Principal",
38 => "Requiere Sigilo",
75 => "Requiere un objetivo no seleccionado",
58 => "Daño con Hechizos depende del nivel del lanzador",
39 => "Hechizo puede ser robado",
63 => "Comienza el tiempo de reutilización luego de que el aura se desvanece",
87 => 'Comienzan los "ticks" con la aplicación del aura',
59 => "Detiene el auto-ataque",
// 76 => "El objetivo debe ser dueño del objeto",
70 => "El objetivo no debe estar en combate",
93 => "Totem",
42 => "Utilizable durante aturdimiento",
88 => "Utilizable mientras se esta confuso",
89 => "Utilizable mientras se esta aterrorizado",
65 => "Utiliza todo el poder"
),
'unkEffect' => 'Unknown Effect',
'effects' => array(
/*0-5 */ 'None', 'Instakill', 'School Damage', 'Dummy', 'Portal Teleport', 'Teleport Units',

View File

@@ -219,6 +219,7 @@ $lang = array(
'emotes' => "Emotes",
'enchantment' => "enchantement",
'enchantments' => "Enchantements",
'flags' => "Marqueurs",
'object' => "entité",
'objects' => "Entités",
'glyphType' => "Type de glyphe",
@@ -1450,6 +1451,65 @@ $lang = array(
),
'stealthType' => ["GENERAL", "TRAP"],
'invisibilityType' => ["GENERAL", 3 => "TRAP", 6 => "DRUNK"],
'attributes' => array( // index defined by filters
69 => "Tous les effets de sort sont nuisibles",
57 => "L'aura ne peut être annulée",
51 => "Aura cachée",
95 => "Sort de bandage",
61 => "Utilisable même mort",
62 => "Utilisable en monture",
64 => "Utilisable assis",
53 => "Ne peut être utilisé que pendant la journée",
54 => "Ne peut être utilisé que pendant la nuit",
55 => "Peut être utilisé uniquement à l'intérieur",
56 => "Ne peut être utilisé qu'à l'extérieur",
79 => "Ne peut cibler que le joueur",
60 => "Ne peut être esquivé, paré ou bloqué",
67 => "Ne peut être renvoyé",
91 => "Ne peut être utilisé en raid",
33 => "Utilisable en combat",
34 => "Chance d'infliger un coup critique",
35 => "Chance de rater",
27 => "Canalisé",
66 => "Canalisé 2",
85 => "Continue après la déconnexion",
84 => "N'apparait pas dans le journal",
68 => "N'enlève pas le camouflage",
81 => "N'engage pas la cible",
77 => "Ne requiert pas de changeforme",
// 46 => "Ignore les immunités",
47 => "Ignore les immunités à une école de magie",
78 => "Buff Nourriture/Boisson",
71 => "Ne génère pas de menace",
52 => "Au coup suivant (PNJ)",
49 => "Au coup suivant (joueurs)",
90 => "Utilisable uniquement en arène",
92 => "Aura de paladin",
50 => "Sort passif",
36 => "Persiste après la mort",
72 => "Sort de pickpocket",
73 => "Retire les auras sur immunité",
48 => "Requiert une arme à distance",
82 => "Requiert une baguette",
83 => "Requiert une arme en main gauche",
74 => "Requiert une canne à pêche",
41 => "Requiert Métamorphose",
80 => "Requiert une arme en main droite",
38 => "Requiert Camouflage",
75 => "Requiert une cible non engagée",
58 => "Les dégats du sort dépendent du niveau du lanceur",
39 => "Peut faire l'objet d'un vol de sort",
63 => "Le temps de recharge démarre après que l'aura disparaît",
87 => "Commence les tics à l'application de l'aura",
59 => "Arrête l'auto-attaque",
// 76 => "La cible doit être un objet possédé",
70 => "La cible ne peut être en combat",
93 => "Totem",
42 => "Utilisable quand assommé",
88 => "Utilisable quand confus",
89 => "Utilisable sous l'effet de peur",
65 => "Utilise toute la puissance"
),
'unkEffect' => 'Unknown Effect',
'effects' => array(
/*0-5 */ 'None', 'Instakill', 'School Damage', 'Dummy', 'Portal Teleport', 'Teleport Units',

View File

@@ -219,6 +219,7 @@ $lang = array(
'emotes' => "Эмоции",
'enchantment' => "улучшение",
'enchantments' => "Улучшения",
'flags' => "Метки",
'object' => "объект",
'objects' => "Объекты",
'glyphType' => "Тип символа",
@@ -1450,6 +1451,65 @@ $lang = array(
),
'stealthType' => ["GENERAL", "TRAP"],
'invisibilityType' => ["GENERAL", 3 => "TRAP", 6 => "DRUNK"],
'attributes' => array( // index defined by filters
69 => "Все пагубные эффекты заклинаний",
57 => "Эффект не может быть отменен",
51 => "Эффект скрыт",
95 => "Исцеление бинтами",
61 => "Может быть использовано, пока вы мертвы",
62 => "Начинает восстановление после спадения эффекта",
64 => "Может быть использовано сидя",
53 => "Может быть использовано только в дневное время",
54 => "Может быть использовано только ночью",
55 => "Можно использовать только в помещении",
56 => "Может быть использовано только снаружи",
79 => "Целью может быть только игрок",
60 => "Невозможно уклониться, парировать или блокировать",
67 => "Не может быть отражено",
91 => "Не может быть использовано в рейде",
33 => "Может использоваться в бою",
34 => "Шанс ударить критически",
35 => "Шанс промахнуться",
27 => "Потоковое",
66 => "Потоковое 2",
85 => "Продолжается после выхода из игрового мира",
84 => "Не появляется в логе",
68 => "Не прерывает режим скрытности",
81 => "Цель не вступает в бой",
77 => "Не приводит к смене формы",
// 46 => "Игнорирует иммунитет",
47 => "Игнорирует иммунитет к школе заклинаний",
78 => "Бонус от еды/питья",
71 => "Не создает угрозы",
52 => "Следующая атака (НИП)",
49 => "Следующая атака (игрок)",
90 => "Используется только на арене",
92 => "Аура Паладина",
50 => "Пассивная способность",
36 => "Сохраняется после смерти",
72 => "Заклинание кражи",
73 => "Снять эффект при иммунитете",
48 => "Необходимо оружие дальнего боя",
82 => "Требует жезл",
83 => "Необходимо оружие для левой руки",
74 => "Требуется удочка",
41 => "Требует Метаморфозу",
80 => "Необходимо оружие для правой руки",
38 => "Требует Незаметность",
75 => "Требует цель вне боя",
58 => "Урон заклинания зависит от уровня произносящего",
39 => "Можно применить Чарокрад",
63 => "Начинает восстановление после спадения эффекта",
87 => "Эффект начинается вместе с применением",
59 => "Прекращает автоатаку",
// 76 => "Цель должна быть вашей вещью",
70 => "Цель не может находиться в бою",
93 => "Тотем",
42 => "Может быть использовано во время оглушения",
88 => "Используемо в замешательстве",
89 => "usablefearedМожет быть использовано, пока наложен Страх",
65 => "Использует ресурс полностью"
),
'unkEffect' => 'Unknown Effect',
'effects' => array(
/*0-5 */ 'None', 'Instakill', 'School Damage', 'Dummy', 'Portal Teleport', 'Teleport Units',

View File

@@ -219,6 +219,7 @@ $lang = array(
'emotes' => "表情",
'enchantment' => "附魔",
'enchantments' => "附魔",
'flags' => "标记",
'object' => "对象",
'objects' => "对象",
'glyphType' => "雕文类型",
@@ -1450,6 +1451,65 @@ $lang = array(
),
'stealthType' => ["General", "Trap"],
'invisibilityType' => ["General", 3 => "Trap", 6 => "Drunk"],
'attributes' => array( // index defined by filters
69 => "所有法术效果都是有害的",
57 => "无法取消光环",
51 => "隐藏光环",
95 => "绷带法术",
61 => "死亡后可用",
62 => "骑乘时可用",
64 => "坐下时可用",
53 => "只可在白天使用",
54 => "只可在夜间使用",
55 => "只可在室内使用",
56 => "只可在室外使用",
79 => "只能瞄准玩家",
60 => "无法躲避、招架或格挡",
67 => "无法反射",
91 => "团队副本中无法使用",
33 => "可在战斗中施法",
34 => "致命一击几率",
35 => "未命中几率",
27 => "引导",
66 => "引导 2",
85 => "退出登录后仍继续",
84 => "不在日志中显示",
68 => "不打破潜行",
81 => "无目标接触",
77 => "不需要形变",
// 46 => "忽略免疫",
47 => "忽略类型免疫",
78 => "食物/饮料增强",
71 => "不产生威胁",
52 => "再次攻击时生效(npc)",
49 => "再次攻击时生效(玩家)",
90 => "只可在竞技场中使用",
92 => "圣骑士光环",
50 => "被动技能",
36 => "死亡后继续存在",
72 => "偷窃法术",
73 => "免疫时移除光效",
48 => "需要远距离武器",
82 => "需要魔杖",
83 => "需要副手武器",
74 => "需要钓鱼竿",
41 => "需要变形",
80 => "需要主手武器",
38 => "需要潜行",
75 => "需要未作用过的目标",
58 => "法术伤害取决于施法者等级",
39 => "可盗法",
63 => "光效褪去后开始冷却",
87 => "光环出现时开始计时",
59 => "停止自动攻击",
// 76 => "目标必须为自有物品",
70 => "目标不能处于战斗中",
93 => "图腾",
42 => "昏迷中可用",
88 => "混乱时可用",
89 => "恐惧时可用",
65 => "消耗所有力量"
),
'unkEffect' => '未知效果',
'effects' => array(
/*0-5 */ '无', '杀死', '类型伤害', 'Dummy', '传送门', '传送单位',

View File

@@ -277,6 +277,7 @@ class SpellPage extends GenericPage
$this->items = $this->createRequiredItems();
$this->tools = $this->createTools();
$this->effects = $effects;
$this->attributes = $this->createAttributesList();
$this->infobox = $infobox;
$this->powerCost = $this->subject->createPowerCostForCurrent();
$this->castTime = $this->subject->createCastTimeForCurrent(false, false);
@@ -2169,6 +2170,58 @@ class SpellPage extends GenericPage
return $effects;
}
private function createAttributesList() : array
{
$cbBandageSpell = function()
{
return ($this->subject->getField('attributes1') & 0x00004044) && ($this->subject->getField('effect1ImplicitTargetA') == 21);
};
$cbInverseFlag = function($field, $flag)
{
return !($this->subject->getField($field) & $flag);
};
$cbEquippedWeapon = function ($mask, $useInvType)
{
$field = $useInvType ? 'equippedItemInventoryTypeMask' : 'equippedItemSubClassMask';
return ($this->subject->getField('equippedItemClass') == ITEM_CLASS_WEAPON) && ($this->subject->getField($field) & $mask);
};
$cbSpellstealable = function($field, $flag)
{
return !($this->subject->getField($field) & $flag) && ($this->subject->getField('dispelType') == 1);
};
$list = [];
$fi = new SpellListFilter();
foreach (Lang::spell('attributes') as $idx => $_)
{
if ($cr = $fi->getGenericFilter($idx))
{
if ($cr[0] == FILTER_CR_CALLBACK)
{
if (!isset($cr[1]))
trigger_error('SpellDetailPage::createAttributesList - callback handler '.$cr[1].' not defined for IDX #'.$idx, E_USER_WARNING);
else if (${$cr[1]}($cr[2] ?? null, $cr[3] ?? null))
$list[] = $idx;
}
else if ($cr[0] == FILTER_CR_FLAG)
{
if ($this->subject->getField($cr[1]) & $cr[2])
$list[] = $idx;
}
else
trigger_error('SpellDetailPage::createAttributesList - unhandled filter case #'.$cr[0].' for IDX #'.$idx, E_USER_WARNING);
}
else
trigger_error('SpellDetailPage::createAttributesList - SpellAttrib IDX #'.$idx.' defined in Lang, but not set as filter', E_USER_WARNING);
}
return $list;
}
private function ubSmartScript(int $type) : array
{
$src = -1;

View File

@@ -4094,7 +4094,7 @@ var LANG = {
combatcastable: "Utilizable en combate",
chancetocrit: "Oportunidad de golpe crítico",
chancetomiss: "Oportunidad de fallar",
persiststhroughdeath: "Persiste después de la muerte ",
persiststhroughdeath: "Persiste después de la muerte",
requiresmetamorphosis: "Requiere Metamorfosis",
requiresstealth: "Requiere Sigilo",
spellstealable: "Hechizo puede ser robado",
@@ -4102,7 +4102,7 @@ var LANG = {
usablewhenstunned: "Utilizable durante aturdimiento",
usableinbgs: "Utilizable solamente en los campos de batalla",
usableinarenas: "Se puede usar en arenas",
disregardimmunity: "Ignora la inmunidad ",
disregardimmunity: "Ignora la inmunidad",
disregardschoolimmunity: "Ignora la imunidad a una escuela de magia",
reqrangedweapon: "Requiere un arma a distancia",
onnextswingplayers: "Con el próximo golpe (jugadores)",
@@ -4134,7 +4134,7 @@ var LANG = {
requntappedtarget: "Requiere un objetivo no seleccionado",
targetownitem: "El objetivo debe ser dueño del objeto",
doesntreqshapeshift: "No requiere cambio de forma",
foodbuff: "Beneficio de la Bebida/Comida ",
foodbuff: "Beneficio de la Bebida/Comida",
targetonlyplayer: "Solo puede hacerle objetivo al jugador",
reqmainhand: "Requiere Arma en la Mano Principal",
doesntengagetarget: "No ataca al objetivo",

View File

@@ -257,6 +257,16 @@ $WH.aE(window,\'load\',function(){$WH.ge(\'spelleffectmarkup-'.$i.'\').innerHTML
<?php
endforeach;
?>
<tr>
<th><?=Lang::game('flags');?></th>
<td colspan="3" style="line-height:17px">
<ul style="margin:0"><?php
foreach ($this->attributes as $cr):
echo '<li><a href="?spells&filter=cr='.$cr.';crs=1;crv=0">'.Lang::spell('attributes', $cr).'</a></li>';
endforeach;
?></ul>
</td>
</tr>
</table>
<h2 class="clear"><?=Lang::main('related');?></h2>