Цитата Сообщение от Zhekich Посмотреть сообщение

SPELL_AURA_MOD_RESISTANCE

Код:
Public Sub SPELL_AURA_MOD_RESISTANCE(ByRef Target As BaseUnit, ByRef Caster As BaseObject, ByRef EffectInfo As SpellEffect, ByVal SpellID As Integer, ByVal StackCount As Integer, ByVal Action As AuraAction)
If Not TypeOf Target Is CharacterObject Then Exit Sub
Select Case Action
Case AuraAction.AURA_UPDATE
Exit Sub
Case AuraAction.AURA_ADD
For i As Byte = DamageTypes.DMG_PHYSICAL To DamageTypes.DMG_ARCANE
If HaveFlag(EffectInfo.MiscValue, i) Then
If EffectInfo.GetValue(Target.Level) > 0 Then
Target.Resistances(i).Base /= CType(Target, CharacterObject).Resistances(i).Modifier
Target.Resistances(i).Base += EffectInfo.GetValue(Target.Level)
Target.Resistances(i).Base *= CType(Target, CharacterObject).Resistances(i).Modifier
Else
Target.Resistances(i).Base /= CType(Target, CharacterObject).Resistances(i).Modifier
Target.Resistances(i).Base += EffectInfo.GetValue(Target.Level)
Target.Resistances(i).Base *= CType(Target, CharacterObject).Resistances(i).Modifier
Target.Resistances(i).NegativeBonus -= EffectInfo.GetValue(Target.Level)
End If
CType(Target, CharacterObject).SetUpdateFlag(EUnitFields.UNIT_FIELD_RESISTANCES + i, CType(Target, CharacterObject).Resistances(i).Base)
End If
Next
Case AuraAction.AURA_REMOVE, AuraAction.AURA_REMOVEBYDURATION
For i As Byte = DamageTypes.DMG_PHYSICAL To DamageTypes.DMG_ARCANE
If HaveFlag(EffectInfo.MiscValue, i) Then
If EffectInfo.GetValue(Target.Level) > 0 Then
Target.Resistances(i).Base /= CType(Target, CharacterObject).Resistances(i).Modifier
Target.Resistances(i).Base -= EffectInfo.GetValue(Target.Level)
Target.Resistances(i).Base *= CType(Target, CharacterObject).Resistances(i).Modifier
Target.Resistances(i).PositiveBonus -= EffectInfo.GetValue(Target.Level)
Else
Target.Resistances(i).Base /= CType(Target, CharacterObject).Resistances(i).Modifier
Target.Resistances(i).Base -= EffectInfo.GetValue(Target.Level)
Target.Resistances(i).Base *= CType(Target, CharacterObject).Resistances(i).Modifier
Target.Resistances(i).NegativeBonus += EffectInfo.GetValue(Target.Level)
End If
CType(Target, CharacterObject).SetUpdateFlag(EUnitFields.UNIT_FIELD_RESISTANCES + i, CType(Target, CharacterObject).Resistances(i).Base)
End If
Next
End Select
CType(Target, CharacterObject).SendCharacterUpdate(False)
End Sub
[свернуть]

SPELL_AURA_MOD_RESISTANCE_EXCLUSIVE

Код:
Public Sub SPELL_AURA_MOD_RESISTANCE_EXCLUSIVE(ByRef Target As BaseUnit, ByRef Caster As BaseObject, ByRef EffectInfo As SpellEffect, ByVal SpellID As Integer, ByVal StackCount As Integer, ByVal Action As AuraAction)
If Not TypeOf Target Is CharacterObject Then Exit Sub
Select Case Action
Case AuraAction.AURA_UPDATE
Exit Sub
Case AuraAction.AURA_ADD
For i As Byte = DamageTypes.DMG_PHYSICAL To DamageTypes.DMG_ARCANE
If HaveFlag(EffectInfo.MiscValue, i) Then
If EffectInfo.GetValue(Target.Level) > 0 Then
CType(Target, CharacterObject).Resistances(i).Base /= CType(Target, CharacterObject).Resistances(i).Modifier
CType(Target, CharacterObject).Resistances(i).Base += EffectInfo.GetValue(Target.Level)
CType(Target, CharacterObject).Resistances(i).Base *= CType(Target, CharacterObject).Resistances(i).Modifier
CType(Target, CharacterObject).Resistances(i).PositiveBonus += EffectInfo.GetValue(Target.Level)
'CType(Target, CharacterObject).SetUpdateFlag(EUnitFields.UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE + i, CType(Target, CharacterObject).Resistances(i).PositiveBonus)
CType(Target, CharacterObject).SetUpdateFlag(EUnitFields.UNIT_FIELD_RESISTANCES + i, CType(Target, CharacterObject).Resistances(i).Base)
Else
CType(Target, CharacterObject).Resistances(i).Base /= CType(Target, CharacterObject).Resistances(i).Modifier
CType(Target, CharacterObject).Resistances(i).Base -= EffectInfo.GetValue(Target.Level)
CType(Target, CharacterObject).Resistances(i).Base *= CType(Target, CharacterObject).Resistances(i).Modifier
CType(Target, CharacterObject).Resistances(i).NegativeBonus -= EffectInfo.GetValue(Target.Level)
'CType(Target, CharacterObject).SetUpdateFlag(EUnitFields.UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE + i, CType(Target, CharacterObject).Resistances(i).NegativeBonus)
CType(Target, CharacterObject).SetUpdateFlag(EUnitFields.UNIT_FIELD_RESISTANCES + i, CType(Target, CharacterObject).Resistances(i).Base)
End If
End If
Next
Case AuraAction.AURA_REMOVE, AuraAction.AURA_REMOVEBYDURATION
For i As Byte = DamageTypes.DMG_PHYSICAL To DamageTypes.DMG_ARCANE
If HaveFlag(EffectInfo.MiscValue, i) Then
If EffectInfo.GetValue(Target.Level) > 0 Then
CType(Target, CharacterObject).Resistances(i).Base /= CType(Target, CharacterObject).Resistances(i).Modifier
CType(Target, CharacterObject).Resistances(i).Base -= EffectInfo.GetValue(Target.Level)
CType(Target, CharacterObject).Resistances(i).Base *= CType(Target, CharacterObject).Resistances(i).Modifier
CType(Target, CharacterObject).Resistances(i).PositiveBonus -= EffectInfo.GetValue(Target.Level)
'CType(Target, CharacterObject).SetUpdateFlag(EUnitFields.UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE + i, CType(Target, CharacterObject).Resistances(i).PositiveBonus)
CType(Target, CharacterObject).SetUpdateFlag(EUnitFields.UNIT_FIELD_RESISTANCES + i, CType(Target, CharacterObject).Resistances(i).Base)
Else
CType(Target, CharacterObject).Resistances(i).Base /= CType(Target, CharacterObject).Resistances(i).Modifier
CType(Target, CharacterObject).Resistances(i).Base += EffectInfo.GetValue(Target.Level)
CType(Target, CharacterObject).Resistances(i).Base *= CType(Target, CharacterObject).Resistances(i).Modifier
CType(Target, CharacterObject).Resistances(i).PositiveBonus += EffectInfo.GetValue(Target.Level)
'CType(Target, CharacterObject).SetUpdateFlag(EUnitFields.UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE + i, CType(Target, CharacterObject).Resistances(i).NegativeBonus)
CType(Target, CharacterObject).SetUpdateFlag(EUnitFields.UNIT_FIELD_RESISTANCES + i, CType(Target, CharacterObject).Resistances(i).Base)
End If
End If
Next
End Select
CType(Target, CharacterObject).SendCharacterUpdate(False)
End Sub
[свернуть]


Отсюда.

Не особо разбирался. По сути - одно и тоже, только есть еще что-то, связанное с уровнем персонажа.
Жекич, нужна помощь. Есть предположение, что у персонажей отсутствует поле FIELD_RESISTANCES для школы света (в патче 0.7 близзард заменили его на поле для тайной магии); у НПС и монстров - присутствует. Именно потому резисты наблюдаются только в их отношении. Как это можно проверить по данному источнику?