Lightning strike should not consume mana or deactivate when you miss.

http://www.uodemise.com/forum/showthread.php?t=145364

BOD turn-in should have 10 second timer since pub 50 
http://www.uodemise.com/forum/showthread.php?t=156441

Vet reward ore carts, gem carts, and stumps have missing range check added
http://www.uodemise.com/forum/showthread.php?t=156380

Blood Oath: missing 35hp pvp dmg cap added, correct credit for kills/dmg given to caster, ML magic resist now applies.
http://www.uodemise.com/forum/showthread.php?t=118729&page=3

Missing ore sizes added
http://www.uodemise.com/forum/showthread.php?t=119888

Player-cast gates reveal stealthers/hiders.
http://www.uodemise.com/forum/showthread.php?t=149218

Some necro spells should disturb a casting target
http://www.uodemise.com/forum/showthread.php?t=149361

Failed snoop attempts should reveal thief if hidden.
http://www.uodemise.com/forum/showthread.php?t=153962

Pets do not autostable in the case of a server restart/cash: fixed
http://www.uodemise.com/forum/showthread.php?t=122745

Misc Aesthetic changes to spells, etc.

earthquake wrong sound
magic arrow inappropriate particles
curse wrong sound
agility wrong sound
chain lightning should always play sound
poison wrong sound
dispel evil missing sound
noble sacrifice male/female, diff sounds
sacred journey missing sound
This commit is contained in:
xavier 2010-09-25 13:48:08 +00:00
parent 0ddcac0a63
commit cd2462621f
34 changed files with 313 additions and 51 deletions

View file

@ -3,6 +3,7 @@ using Server.Items;
using Server.Network;
using Server.Targeting;
using Server.Engines.Craft;
using Server.Mobiles;
namespace Server.Items
{
@ -79,10 +80,21 @@ namespace Server.Items
{
}
public BaseOre( CraftResource resource, int amount ) : base( 0x19B9 )
public BaseOre( CraftResource resource, int amount ) : base( Utility.Random( 4 ) )
{
{
double random = Utility.RandomDouble();
if ( 0.12 >= random )
ItemID = 0x19B7;
else if ( 0.18 >= random )
ItemID = 0x19B8;
else if ( 0.25 >= random )
ItemID = 0x19BA;
else
ItemID = 0x19B9;
}
Stackable = true;
Weight = 12.0;
Amount = amount;
Hue = CraftResources.GetHue( resource );
@ -131,8 +143,13 @@ namespace Server.Items
{
if ( !Movable )
return;
if ( from.InRange( this.GetWorldLocation(), 2 ) )
if ( RootParent is BaseCreature )
{
from.SendLocalizedMessage( 500447 ); // That is not accessible
return;
}
else if ( from.InRange( this.GetWorldLocation(), 2 ) )
{
from.SendLocalizedMessage( 501971 ); // Select the forge on which to smelt the ore, or another pile of ore with which to combine it.
from.Target = new InternalTarget( this );
@ -180,6 +197,90 @@ namespace Server.Items
from.SendLocalizedMessage( 501976 ); // The ore is too far away.
return;
}
#region Combine Ore
if ( targeted is BaseOre )
{
BaseOre ore = (BaseOre)targeted;
if ( !ore.Movable )
return;
else if ( m_Ore == ore )
{
from.SendLocalizedMessage( 501972 ); // Select another pile or ore with which to combine this.
from.Target = new InternalTarget( ore );
return;
}
else if ( ore.Resource != m_Ore.Resource )
{
from.SendLocalizedMessage( 501979 ); // You cannot combine ores of different metals.
return;
}
int worth = ore.Amount;
if ( ore.ItemID == 0x19B9 )
worth *= 8;
else if ( ore.ItemID == 0x19B7 )
worth *= 2;
else
worth *= 4;
int sourceWorth = m_Ore.Amount;
if ( m_Ore.ItemID == 0x19B9 )
sourceWorth *= 8;
else if ( m_Ore.ItemID == 0x19B7 )
sourceWorth *= 2;
else
sourceWorth *= 4;
worth += sourceWorth;
int plusWeight = 0;
int newID = ore.ItemID;
if ( ore.DefaultWeight != m_Ore.DefaultWeight )
{
if ( ore.ItemID == 0x19B7 || m_Ore.ItemID == 0x19B7 )
{
newID = 0x19B7;
}
else if ( ore.ItemID == 0x19B9 )
{
newID = m_Ore.ItemID;
plusWeight = ore.Amount * 2;
}
else
{
plusWeight = m_Ore.Amount * 2;
}
}
if ( (ore.ItemID == 0x19B9 && worth > 120000) || (( ore.ItemID == 0x19B8 || ore.ItemID == 0x19BA ) && worth > 60000) || (ore.ItemID == 0x19B7 && worth > 30000))
{
from.SendLocalizedMessage( 1062844 ); // There is too much ore to combine.
return;
}
else if ( ore.RootParent is Mobile && (plusWeight + ((Mobile)ore.RootParent).Backpack.TotalWeight) > ((Mobile)ore.RootParent).Backpack.MaxWeight )
{
from.SendLocalizedMessage( 501978 ); // The weight is too great to combine in a container.
return;
}
ore.ItemID = newID;
if ( ore.ItemID == 0x19B9 )
{
ore.Amount = worth / 8;
m_Ore.Delete();
}
else if ( ore.ItemID == 0x19B7 )
{
ore.Amount = worth / 2;
m_Ore.Delete();
}
else
{
ore.Amount = worth / 4;
m_Ore.Delete();
}
return;
}
#endregion
if ( IsForge( targeted ) )
{
@ -206,24 +307,54 @@ namespace Server.Items
from.SendLocalizedMessage( 501986 ); // You have no idea how to smelt this strange ore!
return;
}
if ( m_Ore.Amount <= 1 && m_Ore.ItemID == 0x19B7 )
{
from.SendLocalizedMessage( 501987 ); // There is not enough metal-bearing ore in this pile to make an ingot.
return;
}
if ( from.CheckTargetSkill( SkillName.Mining, targeted, minSkill, maxSkill ) )
{
int toConsume = m_Ore.Amount;
if ( toConsume <= 0 )
if ( m_Ore.Amount <= 0 )
{
from.SendLocalizedMessage( 501987 ); // There is not enough metal-bearing ore in this pile to make an ingot.
}
else
{
if ( toConsume > 30000 )
toConsume = 30000;
int amount = m_Ore.Amount;
if ( m_Ore.Amount > 30000 )
amount = 30000;
BaseIngot ingot = m_Ore.GetIngot();
ingot.Amount = toConsume * 2;
if ( m_Ore.ItemID == 0x19B7 )
{
if ( m_Ore.Amount % 2 == 0 )
{
amount /= 2;
m_Ore.Delete();
}
else
{
amount /= 2;
m_Ore.Amount = 1;
}
}
else if ( m_Ore.ItemID == 0x19B9 )
{
amount *= 2;
m_Ore.Delete();
}
else
{
amount /= 1;
m_Ore.Delete();
}
m_Ore.Consume( toConsume );
ingot.Amount = amount;
from.AddToBackpack( ingot );
//from.PlaySound( 0x57 );
@ -231,10 +362,15 @@ namespace Server.Items
from.SendLocalizedMessage( 501988 ); // You smelt the ore removing the impurities and put the metal in your backpack.
}
}
else if ( m_Ore.Amount < 2 )
else if ( m_Ore.Amount < 2 && m_Ore.ItemID == 0x19B9 )
{
from.SendLocalizedMessage( 501989 ); // You burn away the impurities but are left with no useable metal.
m_Ore.Delete();
from.SendLocalizedMessage( 501990 ); // You burn away the impurities but are left with less useable metal.
m_Ore.ItemID = 0x19B8;
}
else if ( m_Ore.Amount < 2 && m_Ore.ItemID == 0x19B8 || m_Ore.ItemID == 0x19BA )
{
from.SendLocalizedMessage( 501990 ); // You burn away the impurities but are left with less useable metal.
m_Ore.ItemID = 0x19B7;
}
else
{

View file

@ -103,6 +103,14 @@ namespace Server.Items
public virtual void CheckGate( Mobile m, int range )
{
#region Mondain's Legacy
if ( m.Hidden && Core.ML )
{
m.RevealingAction();
m.SendLocalizedMessage( 501955 ); // Your spirit lacks the cohesion for gate travel at this time.
}
#endregion
new DelayTimer( m, this, range ).Start();
}

View file

@ -144,7 +144,11 @@ namespace Server.Items
{
BaseHouse house = BaseHouse.FindHouseAt( this );
if ( house != null && house.HasSecureAccess( from, SecureLevel.Friends ) )
if ( !from.InRange( GetWorldLocation(), 2 ) )
{
from.LocalOverheadMessage( Network.MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
else if ( house != null && house.HasSecureAccess( from, SecureLevel.Friends ) )
{
switch ( m_CartType )
{

View file

@ -60,10 +60,14 @@ namespace Server.Items
}
public override void OnComponentUsed( AddonComponent c, Mobile from )
{
{
BaseHouse house = BaseHouse.FindHouseAt( this );
if ( house != null && house.HasSecureAccess( from, SecureLevel.Friends ) )
if ( !from.InRange( GetWorldLocation(), 2 ) )
{
from.LocalOverheadMessage( Network.MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
else if ( house != null && house.HasSecureAccess( from, SecureLevel.Friends ) )
{
if ( m_Logs > 0 )
{