This commit is contained in:
mark 2009-06-29 12:29:09 +00:00
parent 2204d5fb86
commit 03fc95bfb7
105 changed files with 9135 additions and 161 deletions

View file

@ -3,6 +3,8 @@ using Server;
using Server.Items;
using Server.Mobiles;
using Server.Accounting;
using System.Collections;
using System.Collections.Generic;
namespace Server.Engines.VeteranRewards
{
@ -37,8 +39,28 @@ namespace Server.Engines.VeteranRewards
public static bool SkillCapRewards = true; // assuming vet rewards are enabled, should total skill cap bonuses be awarded? (720 skills total at 4th level)
public static TimeSpan RewardInterval = TimeSpan.FromDays( 30.0 );
public static bool HasAccess( Mobile mob, RewardCategory category )
{
List<RewardEntry> entries = category.Entries;
for ( int j = 0; j < entries.Count; ++j )
{
//RewardEntry entry = entries[j];
if ( RewardSystem.HasAccess( mob, entries[j] ) )
{
return true;
}
}
return false;
}
public static bool HasAccess( Mobile mob, RewardEntry entry )
{
if ( Core.Expansion < entry.RequiredExpansion )
{
return false;
}
TimeSpan ts;
return HasAccess( mob, entry.List, out ts );
}
@ -91,6 +113,25 @@ namespace Server.Engines.VeteranRewards
return level;
}
public static bool HasHalfLevel( Mobile mob )
{
Account acct = mob.Account as Account;
if ( acct == null )
return false;
return HasHalfLevel( acct );
}
public static bool HasHalfLevel( Account acct )
{
TimeSpan totalTime = (DateTime.Now - acct.Created);
Double level = (totalTime.TotalDays / RewardInterval.TotalDays);
return level >= 0.5;
}
public static bool ConsumeRewardPoint( Mobile mob )
{
int cur, max;
@ -205,6 +246,52 @@ namespace Server.Engines.VeteranRewards
return true;
}
public static int GetRewardYearLabel( Item item, object[] args )
{
int level = GetRewardYear( item, args );
int cliloc = 1076216 + level;
if( level > 9 )
cliloc += 4231;
return cliloc;
}
public static int GetRewardYear( Item item, object[] args )
{
if ( m_Lists == null )
SetupRewardTables();
Type type = item.GetType();
for ( int i = 0; i < m_Lists.Length; ++i )
{
RewardList list = m_Lists[i];
RewardEntry[] entries = list.Entries;
for ( int j = 0; j < entries.Length; ++j )
{
if ( entries[j].ItemType == type )
{
if ( args == null && entries[j].Args.Length == 0 )
return i + 1;
if ( args.Length == entries[j].Args.Length )
{
bool match = true;
for ( int k = 0; match && k < args.Length; ++k )
match = ( args[k].Equals( entries[j].Args[k] ) );
if ( match )
return i + 1;
}
}
}
}
// no entry?
return 0;
}
public static void SetupRewardTables()
{
RewardCategory monsterStatues = new RewardCategory( 1049750 );
@ -212,6 +299,7 @@ namespace Server.Engines.VeteranRewards
RewardCategory etherealSteeds = new RewardCategory( 1049751 );
RewardCategory specialDyeTubs = new RewardCategory( 1049753 );
RewardCategory houseAddOns = new RewardCategory( 1049754 );
RewardCategory miscellaneous = new RewardCategory( 1078596 );
m_Categories = new RewardCategory[]
{
@ -219,7 +307,8 @@ namespace Server.Engines.VeteranRewards
cloaksAndRobes,
etherealSteeds,
specialDyeTubs,
houseAddOns
houseAddOns,
miscellaneous
};
const int Bronze = 0x972;
@ -234,6 +323,8 @@ namespace Server.Engines.VeteranRewards
const int Fire = 0x489;
const int IceWhite = 0x47E;
const int JetBlack = 0x001;
const int Pink = 0x490;
const int Crimson = 0x485;
m_Lists = new RewardList[]
{
@ -244,8 +335,10 @@ namespace Server.Engines.VeteranRewards
new RewardEntry( specialDyeTubs, 1006047, typeof( SpecialDyeTub ) ),
new RewardEntry( cloaksAndRobes, 1006009, typeof( RewardCloak ), Bronze, 1041286 ),
new RewardEntry( cloaksAndRobes, 1006010, typeof( RewardRobe ), Bronze, 1041287 ),
new RewardEntry( cloaksAndRobes, 1080366, typeof( RewardDress ), Expansion.ML, Bronze, 1080366 ),
new RewardEntry( cloaksAndRobes, 1006011, typeof( RewardCloak ), Copper, 1041288 ),
new RewardEntry( cloaksAndRobes, 1006012, typeof( RewardRobe ), Copper, 1041289 ),
new RewardEntry( cloaksAndRobes, 1080367, typeof( RewardDress ), Expansion.ML, Copper, 1080367 ),
new RewardEntry( monsterStatues, 1006024, typeof( MonsterStatuette ), MonsterStatuetteType.Crocodile ),
new RewardEntry( monsterStatues, 1006025, typeof( MonsterStatuette ), MonsterStatuetteType.Daemon ),
new RewardEntry( monsterStatues, 1006026, typeof( MonsterStatuette ), MonsterStatuetteType.Dragon ),
@ -259,71 +352,121 @@ namespace Server.Engines.VeteranRewards
new RewardEntry( monsterStatues, 1006034, typeof( MonsterStatuette ), MonsterStatuetteType.Orc ),
new RewardEntry( monsterStatues, 1006035, typeof( MonsterStatuette ), MonsterStatuetteType.Ratman ),
new RewardEntry( monsterStatues, 1006036, typeof( MonsterStatuette ), MonsterStatuetteType.Skeleton ),
new RewardEntry( monsterStatues, 1006037, typeof( MonsterStatuette ), MonsterStatuetteType.Troll )
//TODO: RedSoulstone
//Need to reorganize this to OSI.
new RewardEntry( monsterStatues, 1006037, typeof( MonsterStatuette ), MonsterStatuetteType.Troll ),
new RewardEntry( houseAddOns, 1062692, typeof( ContestMiniHouseDeed ), Expansion.AOS, MiniHouseType.MalasMountainPass ),
new RewardEntry( houseAddOns, 1072216, typeof( ContestMiniHouseDeed ), Expansion.SE, MiniHouseType.ChurchAtNight ),
new RewardEntry( miscellaneous, 1076155, typeof( RedSoulstone ), Expansion.ML ),
new RewardEntry( miscellaneous, 1080523, typeof( CommodityDeedBox ), Expansion.ML ),
} ),
new RewardList( RewardInterval, 2, new RewardEntry[]
{
new RewardEntry( specialDyeTubs, 1006052, typeof( LeatherDyeTub ) ),
new RewardEntry( cloaksAndRobes, 1006014, typeof( RewardCloak ), Agapite, 1041290 ),
new RewardEntry( cloaksAndRobes, 1006015, typeof( RewardRobe ), Agapite, 1041291 ),
new RewardEntry( cloaksAndRobes, 1080369, typeof( RewardDress ), Expansion.ML, Agapite, 1080369 ),
new RewardEntry( cloaksAndRobes, 1006016, typeof( RewardCloak ), Golden, 1041292 ),
new RewardEntry( cloaksAndRobes, 1006017, typeof( RewardRobe ), Golden, 1041293 )
/*new RewardEntry( houseAddOns, 0, typeof( BannerDeed ) ),
new RewardEntry( houseAddOns, 0, typeof( FlamingSkullDeed ) )*/
new RewardEntry( cloaksAndRobes, 1006017, typeof( RewardRobe ), Golden, 1041293 ),
new RewardEntry( cloaksAndRobes, 1080368, typeof( RewardDress ), Expansion.ML, Golden, 1080368 ),
new RewardEntry( houseAddOns, 1006048, typeof( BannerDeed ) ),
new RewardEntry( houseAddOns, 1006049, typeof( FlamingHeadDeed ) ),
new RewardEntry( houseAddOns, 1080409, typeof( MinotaurStatueDeed ), Expansion.ML )
} ),
new RewardList( RewardInterval, 3, new RewardEntry[]
{
new RewardEntry( cloaksAndRobes, 1006020, typeof( RewardCloak ), Verite, 1041294 ),
new RewardEntry( cloaksAndRobes, 1006021, typeof( RewardRobe ), Verite, 1041295 ),
new RewardEntry( cloaksAndRobes, 1080370, typeof( RewardDress ), Expansion.ML, Verite, 1080370 ),
new RewardEntry( cloaksAndRobes, 1006022, typeof( RewardCloak ), Valorite, 1041296 ),
new RewardEntry( cloaksAndRobes, 1006023, typeof( RewardRobe ), Valorite, 1041297 ),
new RewardEntry( cloaksAndRobes, 1080371, typeof( RewardDress ), Expansion.ML, Valorite, 1080371 ),
new RewardEntry( monsterStatues, 1006038, typeof( MonsterStatuette ), MonsterStatuetteType.Cow ),
new RewardEntry( monsterStatues, 1006039, typeof( MonsterStatuette ), MonsterStatuetteType.Zombie ),
new RewardEntry( monsterStatues, 1006040, typeof( MonsterStatuette ), MonsterStatuetteType.Llama ),
new RewardEntry( etherealSteeds, 1006019, typeof( EtherealHorse ) ),
new RewardEntry( etherealSteeds, 1006050, typeof( EtherealOstard ) ),
new RewardEntry( etherealSteeds, 1006051, typeof( EtherealLlama ) )
new RewardEntry( etherealSteeds, 1006051, typeof( EtherealLlama ) ),
new RewardEntry( houseAddOns, 1080407, typeof( PottedCactusDeed ), Expansion.ML )
} ),
new RewardList( RewardInterval, 4, new RewardEntry[]
{
new RewardEntry( specialDyeTubs, 1049740, typeof( RunebookDyeTub ) ),
new RewardEntry( cloaksAndRobes, 1049725, typeof( RewardCloak ), DarkGray, 1049757 ),
new RewardEntry( cloaksAndRobes, 1049726, typeof( RewardRobe ), DarkGray, 1049756 ),
new RewardEntry( cloaksAndRobes, 1080374, typeof( RewardDress ), Expansion.ML, DarkGray, 1080374 ),
new RewardEntry( cloaksAndRobes, 1049727, typeof( RewardCloak ), IceGreen, 1049759 ),
new RewardEntry( cloaksAndRobes, 1049728, typeof( RewardRobe ), IceGreen, 1049758 ),
new RewardEntry( cloaksAndRobes, 1080372, typeof( RewardDress ), Expansion.ML, IceGreen, 1080372 ),
new RewardEntry( cloaksAndRobes, 1049729, typeof( RewardCloak ), IceBlue, 1049761 ),
new RewardEntry( cloaksAndRobes, 1049730, typeof( RewardRobe ), IceBlue, 1049760 ),
new RewardEntry( cloaksAndRobes, 1080373, typeof( RewardDress ), Expansion.ML, IceBlue, 1080373 ),
new RewardEntry( monsterStatues, 1049742, typeof( MonsterStatuette ), MonsterStatuetteType.Ophidian ),
new RewardEntry( monsterStatues, 1049743, typeof( MonsterStatuette ), MonsterStatuetteType.Reaper ),
new RewardEntry( monsterStatues, 1049744, typeof( MonsterStatuette ), MonsterStatuetteType.Mongbat ),
new RewardEntry( etherealSteeds, 1049746, typeof( EtherealKirin ) ),
new RewardEntry( etherealSteeds, 1049745, typeof( EtherealUnicorn ) ),
new RewardEntry( etherealSteeds, 1049747, typeof( EtherealRidgeback ) )
/*new RewardEntry( houseAddOns, 0, typeof( DecorativeShieldWallHanging ) ),
new RewardEntry( houseAddOns, 0, typeof( SkeletonWallHanging ) )*/
new RewardEntry( etherealSteeds, 1049747, typeof( EtherealRidgeback ) ),
new RewardEntry( houseAddOns, 1049737, typeof( DecorativeShieldDeed ) ),
new RewardEntry( houseAddOns, 1049738, typeof( HangingSkeletonDeed ) )
} ),
new RewardList( RewardInterval, 5, new RewardEntry[]
{
new RewardEntry( specialDyeTubs, 1049741, typeof( StatuetteDyeTub ) ),
new RewardEntry( cloaksAndRobes, 1049731, typeof( RewardCloak ), JetBlack, 1049763 ),
new RewardEntry( cloaksAndRobes, 1049732, typeof( RewardRobe ), JetBlack, 1049762 ),
new RewardEntry( cloaksAndRobes, 1080377, typeof( RewardDress ), Expansion.ML, JetBlack, 1080377 ),
new RewardEntry( cloaksAndRobes, 1049733, typeof( RewardCloak ), IceWhite, 1049765 ),
new RewardEntry( cloaksAndRobes, 1049734, typeof( RewardRobe ), IceWhite, 1049764 ),
new RewardEntry( cloaksAndRobes, 1080376, typeof( RewardDress ), Expansion.ML, IceWhite, 1080376 ),
new RewardEntry( cloaksAndRobes, 1049735, typeof( RewardCloak ), Fire, 1049767 ),
new RewardEntry( cloaksAndRobes, 1049736, typeof( RewardRobe ), Fire, 1049766 ),
new RewardEntry( cloaksAndRobes, 1080375, typeof( RewardDress ), Expansion.ML, Fire, 1080375 ),
new RewardEntry( monsterStatues, 1049768, typeof( MonsterStatuette ), MonsterStatuetteType.Gazer ),
new RewardEntry( monsterStatues, 1049769, typeof( MonsterStatuette ), MonsterStatuetteType.FireElemental ),
new RewardEntry( monsterStatues, 1049770, typeof( MonsterStatuette ), MonsterStatuetteType.Wolf ),
new RewardEntry( etherealSteeds, 1049749, typeof( EtherealSwampDragon ) ),
new RewardEntry( etherealSteeds, 1049748, typeof( EtherealBeetle ) )
/*new RewardEntry( houseAddOns, 0, typeof( AnkhDecoration ) )*/
new RewardEntry( etherealSteeds, 1049748, typeof( EtherealBeetle ) ),
new RewardEntry( houseAddOns, 1049739, typeof( StoneAnkhDeed ) ),
new RewardEntry( houseAddOns, 1080384, typeof( BloodyPentagramDeed ), Expansion.ML )
} ),
new RewardList( RewardInterval, 6, new RewardEntry[]
{
new RewardEntry( houseAddOns, 1076188, typeof( CharacterStatueMaker ), Expansion.ML, StatueType.Jade ),
new RewardEntry( houseAddOns, 1076189, typeof( CharacterStatueMaker ), Expansion.ML, StatueType.Marble ),
new RewardEntry( houseAddOns, 1076190, typeof( CharacterStatueMaker ), Expansion.ML, StatueType.Bronze ),
new RewardEntry( houseAddOns, 1080527, typeof( RewardBrazierDeed ), Expansion.ML )
} ),
new RewardList( RewardInterval, 7, new RewardEntry[]
{
new RewardEntry( houseAddOns, 1076157, typeof( CannonDeed ), Expansion.ML ),
new RewardEntry( houseAddOns, 1080550, typeof( TreeStumpDeed ), Expansion.ML )
} ),
//TODO: 6th year player statue Markers
//TODO: 7th year Decorative Cannon
//TODO: 8th year Weapon Engraving Tool
//TODO: 9th year Ridable polar bear
new RewardList( RewardInterval, 8, new RewardEntry[]
{
new RewardEntry( miscellaneous, 1076158, typeof( WeaponEngravingTool ), Expansion.ML )
} ),
new RewardList( RewardInterval, 9, new RewardEntry[]
{
new RewardEntry( etherealSteeds, 1076159, typeof( RideablePolarBear ), Expansion.ML ),
new RewardEntry( houseAddOns, 1080549, typeof( WallBannerDeed ), Expansion.ML )
} ),
new RewardList( RewardInterval, 10, new RewardEntry[]
{
new RewardEntry( monsterStatues, 1080520, typeof( MonsterStatuette ), Expansion.ML, MonsterStatuetteType.Harrower ),
new RewardEntry( monsterStatues, 1080521, typeof( MonsterStatuette ), Expansion.ML, MonsterStatuetteType.Efreet ),
new RewardEntry( cloaksAndRobes, 1080382, typeof( RewardCloak ), Expansion.ML, Pink, 1080382 ),
new RewardEntry( cloaksAndRobes, 1080380, typeof( RewardRobe ), Expansion.ML, Pink, 1080380 ),
new RewardEntry( cloaksAndRobes, 1080378, typeof( RewardDress ), Expansion.ML, Pink, 1080378 ),
new RewardEntry( cloaksAndRobes, 1080383, typeof( RewardCloak ), Expansion.ML, Crimson, 1080383 ),
new RewardEntry( cloaksAndRobes, 1080381, typeof( RewardRobe ), Expansion.ML, Crimson, 1080381 ),
new RewardEntry( cloaksAndRobes, 1080379, typeof( RewardDress ), Expansion.ML, Crimson, 1080379 ),
new RewardEntry( etherealSteeds, 1080386, typeof( EtherealCuSidhe ), Expansion.ML ),
new RewardEntry( houseAddOns, 1080548, typeof( MiningCartDeed ), Expansion.ML ),
new RewardEntry( houseAddOns, 1080397, typeof( AnkhOfSacrificeDeed ), Expansion.ML )
} )
};
}
@ -355,6 +498,12 @@ namespace Server.Engines.VeteranRewards
e.Mobile.SkillsCap = 7000;
}
if ( Core.ML && e.Mobile is PlayerMobile && !((PlayerMobile)e.Mobile).HasStatReward && HasHalfLevel( e.Mobile ) )
{
((PlayerMobile)e.Mobile).HasStatReward = true;
e.Mobile.StatCap += 5;
}
if ( cur < max )
e.Mobile.SendGump( new RewardNoticeGump( e.Mobile ) );
}