- Added Scrolls of Transcendence and Scrolls of Alacrity. Scrolls of Transcendence, togheter with 105 Powerscrolls, will spawn while doing champion spawns.

(http://www.uodemise.com/discussion/showthread.php?t=116067)

- Rune Beetle Armor Corruption now works properly
(http://www.uodemise.com/discussion/showthread.php?t=123086)

- the Animal Trainer now will say only "Your pet has been stabled" when you stable a pet (won't affect Pre-AoS)
(http://www.uodemise.com/discussion/showthread.php?t=123113)

- Acid elementals now use the proper poison level, and are vulnerable to elemental slayers. When animated, they turn in wraith or banshee
(http://www.uodemise.com/discussion/showthread.php?t=125749)

- You can't drop items on the same tile a mobile (PC or NPC) is
(http://www.uodemise.com/discussion/showthread.php?t=116540)

- the Embrace Honor virtue ability now works as per OSI
(http://www.uodemise.com/discussion/showthread.php?t=125722)

- Woodland Belts now are dyable
(http://www.uodemise.com/discussion/showthread.php?t=128444)

- You can combine folded cloth and bottle of liquor to make firebombs
(http://www.uodemise.com/discussion/showthread.php?t=125257)

- SoS now are not anymore facet specific, as per OSI
(http://www.uodemise.com/discussion/showthread.php?t=115477)
This commit is contained in:
daedalus 2009-12-06 21:30:25 +00:00
parent e519ff2497
commit 37043076e0
19 changed files with 1236 additions and 17 deletions

View file

@ -387,6 +387,137 @@ namespace Server.Engines.CannedEvil
Start();
}
#region Scroll of Transcendence
private ScrollofTranscendence CreateRandomTramSoT()
{
int level;
double random = Utility.RandomDouble();
if (0.2 >= random)
level = 5;
else if (0.4 >= random)
level = 4;
else if (0.6 >= random)
level = 3;
else if (0.8 >= random)
level = 2;
else
level = 1;
return ScrollofTranscendence.CreateRandom(level, level);
}
private ScrollofTranscendence CreateRandomFelSoT()
{
int level;
double random = Utility.RandomDouble();
if (0.2 >= random)
level = 10;
else if (0.4 >= random)
level = 9;
else if (0.6 >= random)
level = 8;
else if (0.8 >= random)
level = 7;
else
level = 6;
return ScrollofTranscendence.CreateRandom(level, level);
}
private PowerScroll CreateRandomFelPS()
{
return PowerScroll.CreateRandomNoCraft(5, 5);
}
public static void GiveScrollOfTranscendenceFelTo ( Mobile killer, ScrollofTranscendence SoTF )
{
if( SoTF == null || killer == null ) //sanity
return;
killer.SendLocalizedMessage( 1094936 ); // You have received a Scroll of Transcendence!
if ( killer.Alive )
killer.AddToBackpack( SoTF );
else
{
if( killer.Corpse != null && !killer.Corpse.Deleted )
killer.Corpse.DropItem( SoTF );
else
killer.AddToBackpack( SoTF );
}
// Justice reward
PlayerMobile pm = (PlayerMobile)killer;
for (int j = 0; j < pm.JusticeProtectors.Count; ++j)
{
Mobile prot = (Mobile)pm.JusticeProtectors[j];
if (prot.Map != killer.Map || prot.Kills >= 5 || prot.Criminal || !JusticeVirtue.CheckMapRegion(killer, prot))
continue;
int chance = 0;
switch (VirtueHelper.GetLevel(prot, VirtueName.Justice))
{
case VirtueLevel.Seeker: chance = 60; break;
case VirtueLevel.Follower: chance = 80; break;
case VirtueLevel.Knight: chance = 100; break;
}
if (chance > Utility.Random(100))
{
prot.SendLocalizedMessage(1049368); // You have been rewarded for your dedication to Justice!
ScrollofTranscendence SoTFduplicate = new ScrollofTranscendence ( SoTF.Skill, SoTF.Value );
prot.AddToBackpack( SoTFduplicate );
}
}
}
public static void GivePowerScrollFelTo ( Mobile killer, PowerScroll PS )
{
if( PS == null || killer == null ) //sanity
return;
killer.SendLocalizedMessage(1049524); // You have received a scroll of power!
if ( killer.Alive )
killer.AddToBackpack( PS );
else
{
if( killer.Corpse != null && !killer.Corpse.Deleted )
killer.Corpse.DropItem( PS );
else
killer.AddToBackpack( PS );
}
// Justice reward
PlayerMobile pm = (PlayerMobile)killer;
for (int j = 0; j < pm.JusticeProtectors.Count; ++j)
{
Mobile prot = (Mobile)pm.JusticeProtectors[j];
if (prot.Map != killer.Map || prot.Kills >= 5 || prot.Criminal || !JusticeVirtue.CheckMapRegion(killer, prot))
continue;
int chance = 0;
switch (VirtueHelper.GetLevel(prot, VirtueName.Justice))
{
case VirtueLevel.Seeker: chance = 60; break;
case VirtueLevel.Follower: chance = 80; break;
case VirtueLevel.Knight: chance = 100; break;
}
if (chance > Utility.Random(100))
{
prot.SendLocalizedMessage(1049368); // You have been rewarded for your dedication to Justice!
PowerScroll PSduplicate = new PowerScroll ( PS.Skill, PS.Value );
prot.AddToBackpack( PSduplicate );
}
}
}
#endregion
public void OnSlice()
{
if( !m_Active || Deleted )
@ -445,6 +576,41 @@ namespace Server.Engines.CannedEvil
if( killer is PlayerMobile )
{
#region Scroll of Transcendence
if ( Core.ML )
{
if ( Map == Map.Felucca )
{
if ( Utility.RandomDouble() < 0.001 )
{
PlayerMobile pm = (PlayerMobile)killer;
double random = Utility.Random ( 49 );
if ( random <= 24 )
{
ScrollofTranscendence SoTF = CreateRandomFelSoT();
GiveScrollOfTranscendenceFelTo ( pm, SoTF );
}
else
{
PowerScroll PS = CreateRandomFelPS();
GivePowerScrollFelTo ( pm, PS );
}
}
}
if ( Map == Map.Ilshenar || Map == Map.Tokuno )
{
if ( Utility.RandomDouble() < 0.0015 )
{
killer.SendLocalizedMessage( 1094936 ); // You have received a Scroll of Transcendence!
ScrollofTranscendence SoTT = CreateRandomTramSoT();
killer.AddToBackpack( SoTT );
}
}
}
#endregion
int mobSubLevel = GetSubLevelFor( m ) + 1;
if( mobSubLevel >= 0 )

View file

@ -251,7 +251,7 @@ namespace Server.Engines.Harvest
{
SOS sos = messages[i];
if ( from.Map == sos.TargetMap && from.InRange( sos.TargetLocation, 60 ) )
if ( ( from.Map == Map.Felucca || from.Map == Map.Trammel ) && from.InRange( sos.TargetLocation, 60 ) )
{
Item preLoot = null;