11using System ;
2- using System . Diagnostics . CodeAnalysis ;
32using System . Globalization ;
4- using WowPacketParser . DBC ;
53using WowPacketParser . Enums ;
64using WowPacketParser . Enums . Version ;
75using WowPacketParser . Misc ;
1412
1513namespace WowPacketParserModule . V6_0_2_19033 . Parsers
1614{
17- [ SuppressMessage ( "ReSharper" , "UseObjectOrCollectionInitializer" ) ]
1815 public static class NpcHandler
1916 {
2017 public static uint LastGossipPOIEntry ;
@@ -385,46 +382,7 @@ public static void HandleServerTrainerList(Packet packet)
385382 Trainer trainer = new Trainer ( ) ;
386383
387384 WowGuid guid = packet . ReadPackedGuid128 ( "TrainerGUID" ) ;
388- bool hasFaction = false ;
389- float discount = 1.0f ;
390-
391- if ( Settings . UseDBC && Settings . RecalcDiscount )
392- if ( Storage . Objects != null && Storage . Objects . ContainsKey ( guid ) )
393- {
394- WoWObject obj = Storage . Objects [ guid ] . Item1 ;
395- if ( obj . Type == ObjectType . Unit )
396- {
397- int factionTemplateId = ( obj as Unit ) . UnitData . FactionTemplate ?? 0 ;
398- int faction = 0 ;
399-
400- if ( factionTemplateId != 0 && DBC . FactionTemplate . ContainsKey ( factionTemplateId ) )
401- faction = DBC . FactionTemplate [ factionTemplateId ] . Faction ;
402-
403- ulong reputation = 0 ;
404-
405- if ( CoreParsers . AchievementHandler . FactionReputationStore . ContainsKey ( faction ) )
406- {
407- reputation = CoreParsers . AchievementHandler . FactionReputationStore [ faction ] ;
408- hasFaction = true ;
409- }
410-
411- uint multiplier = 0 ;
412-
413- if ( reputation >= 3000 ) // Friendly
414- multiplier = 1 ;
415- if ( reputation >= 9000 ) // Honored
416- multiplier = 2 ;
417- if ( reputation >= 21000 ) // Revered
418- multiplier = 3 ;
419- if ( reputation >= 42000 ) // Exalted
420- multiplier = 4 ;
421-
422- if ( multiplier != 0 )
423- discount = 1.0f - 0.05f * multiplier ;
424-
425- packet . WriteLine ( "ReputationDiscount: {0}%" , ( int ) ( ( discount * 100 ) - 100 ) ) ;
426- }
427- }
385+ float ? discount = CoreParsers . NpcHandler . GetFactionVendorDiscount ( guid ) ;
428386
429387 if ( ClientVersion . AddedInVersion ( ClientVersionBuild . V11_2_5_63704 ) )
430388 trainer . Type = packet . ReadByteE < TrainerType > ( "TrainerType" ) ;
@@ -445,9 +403,10 @@ public static void HandleServerTrainerList(Packet packet)
445403 uint moneyCost = packet . ReadUInt32 ( "MoneyCost" , i ) ;
446404 uint moneyCostOriginal = moneyCost ;
447405
448- if ( Settings . UseDBC && Settings . RecalcDiscount && hasFaction )
406+ if ( Settings . UseDBC && Settings . RecalcDiscount && discount != null )
449407 {
450- moneyCostOriginal = ( uint ) ( Math . Round ( ( moneyCost / discount ) / 5 ) ) * 5 ;
408+ moneyCostOriginal = ( uint ) ( Math . Round ( ( moneyCost / discount . Value ) / 5 ) ) * 5 ;
409+ packet . WriteLine ( "[{0}] ReputationDiscount: {1}%" , i , ( int ) ( 100 - ( discount * 100 ) ) ) ;
451410 packet . WriteLine ( "[{0}] MoneyCostOriginal: {1}" , i , moneyCostOriginal ) ;
452411 trainerSpell . FactionHelper = "MoneyCost recalculated" ;
453412 }
0 commit comments