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:
parent
0ddcac0a63
commit
cd2462621f
34 changed files with 313 additions and 51 deletions
|
|
@ -176,11 +176,11 @@ namespace Server.Engines.Harvest
|
|||
bool eligableForRacialBonus = ( def.RaceBonus && from.Race == Race.Human );
|
||||
bool inFelucca = (map == Map.Felucca);
|
||||
|
||||
if( eligableForRacialBonus && inFelucca && bank.Current >= feluccaRacialAmount )
|
||||
if( eligableForRacialBonus && inFelucca && bank.Current >= feluccaRacialAmount && 0.1 > Utility.RandomDouble() )
|
||||
item.Amount = feluccaRacialAmount;
|
||||
else if( inFelucca && bank.Current >= feluccaAmount )
|
||||
item.Amount = feluccaAmount;
|
||||
else if( eligableForRacialBonus && bank.Current >= racialAmount )
|
||||
else if( eligableForRacialBonus && bank.Current >= racialAmount && 0.1 > Utility.RandomDouble() )
|
||||
item.Amount = racialAmount;
|
||||
else
|
||||
item.Amount = amount;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -47,12 +47,20 @@ namespace Server.Mobiles
|
|||
if ( Core.ML && Utility.RandomDouble() < .33 )
|
||||
PackItem( Engines.Plants.Seed.RandomPeculiarSeed(2) );
|
||||
|
||||
Item dullore = new DullCopperOre( Utility.RandomMinMax( 1, 10 ) );
|
||||
dullore.ItemID = 0x19B9;
|
||||
Item shadowore = new ShadowIronOre( Utility.RandomMinMax( 1, 10 ) );
|
||||
shadowore.ItemID = 0x19B9;
|
||||
Item copperore = new CopperOre( Utility.RandomMinMax( 1, 10 ) );
|
||||
copperore.ItemID = 0x19B9;
|
||||
Item bronzeore = new BronzeOre( Utility.RandomMinMax( 1, 10 ) );
|
||||
bronzeore.ItemID = 0x19B9;
|
||||
switch ( Utility.Random( 4 ) )
|
||||
{
|
||||
case 0: PackItem( new DullCopperOre( Utility.RandomMinMax( 1, 10 ) ) ); break;
|
||||
case 1: PackItem( new ShadowIronOre( Utility.RandomMinMax( 1, 10 ) ) ); break;
|
||||
case 2: PackItem( new CopperOre( Utility.RandomMinMax( 1, 10 ) ) ); break;
|
||||
case 3: PackItem( new BronzeOre( Utility.RandomMinMax( 1, 10 ) ) ); break;
|
||||
case 0: PackItem( dullore ); break;
|
||||
case 1: PackItem( shadowore ); break;
|
||||
case 2: PackItem( copperore ); break;
|
||||
case 3: PackItem( bronzeore ); break;
|
||||
}
|
||||
|
||||
// TODO: skeleton
|
||||
|
|
|
|||
|
|
@ -45,8 +45,11 @@ namespace Server.Mobiles
|
|||
ControlSlots = 2;
|
||||
|
||||
PackItem( new FertileDirt( Utility.RandomMinMax( 1, 4 ) ) );
|
||||
PackItem( new IronOre( 3 ) ); // TODO: Five small iron ore
|
||||
PackItem( new MandrakeRoot() );
|
||||
|
||||
Item ore = new IronOre( 5 );
|
||||
ore.ItemID = 0x19B7;
|
||||
PackItem( ore );
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
|
|
|
|||
|
|
@ -39,8 +39,10 @@ namespace Server.Mobiles
|
|||
|
||||
VirtualArmor = 50;
|
||||
|
||||
PackItem( new IronOre( 3 ) );
|
||||
PackItem( new BlackPearl( 3 ) );
|
||||
Item ore = new IronOre( 3 );
|
||||
ore.ItemID = 0x19B8;
|
||||
PackItem( ore );
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
|
|
|
|||
|
|
@ -44,7 +44,9 @@ namespace Server.Mobiles
|
|||
|
||||
VirtualArmor = 32;
|
||||
|
||||
PackItem( new AgapiteOre( oreAmount ) );
|
||||
Item ore = new AgapiteOre( oreAmount );
|
||||
ore.ItemID = 0x19B9;
|
||||
PackItem( ore );
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
|
|
|
|||
|
|
@ -46,7 +46,9 @@ namespace Server.Mobiles
|
|||
|
||||
VirtualArmor = 29;
|
||||
|
||||
PackItem( new BronzeOre( oreAmount ) );
|
||||
Item ore = new BronzeOre( oreAmount );
|
||||
ore.ItemID = 0x19B9;
|
||||
PackItem( ore );
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
|
|
|
|||
|
|
@ -44,7 +44,9 @@ namespace Server.Mobiles
|
|||
|
||||
VirtualArmor = 26;
|
||||
|
||||
PackItem( new CopperOre( oreAmount ) );
|
||||
Item ore = new CopperOre( oreAmount );
|
||||
ore.ItemID = 0x19B9;
|
||||
PackItem( ore );
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
|
|
|
|||
|
|
@ -44,7 +44,9 @@ namespace Server.Mobiles
|
|||
|
||||
VirtualArmor = 20;
|
||||
|
||||
PackItem( new DullCopperOre( oreAmount ) );
|
||||
Item ore = new DullCopperOre( oreAmount );
|
||||
ore.ItemID = 0x19B9;
|
||||
PackItem( ore );
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
|
|
|
|||
|
|
@ -44,7 +44,9 @@ namespace Server.Mobiles
|
|||
|
||||
VirtualArmor = 60;
|
||||
|
||||
PackItem( new GoldOre( oreAmount ) );
|
||||
Item ore = new GoldOre( oreAmount );
|
||||
ore.ItemID = 0x19B9;
|
||||
PackItem( ore );
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
|
|
|
|||
|
|
@ -44,7 +44,9 @@ namespace Server.Mobiles
|
|||
|
||||
VirtualArmor = 23;
|
||||
|
||||
PackItem( new ShadowIronOre( oreAmount ) );
|
||||
Item ore = new ShadowIronOre( oreAmount );
|
||||
ore.ItemID = 0x19B9;
|
||||
PackItem( ore );
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
|
|
|
|||
|
|
@ -48,7 +48,9 @@ namespace Server.Mobiles
|
|||
|
||||
VirtualArmor = 38;
|
||||
|
||||
PackItem( new ValoriteOre( oreAmount ) );
|
||||
Item ore = new ValoriteOre( oreAmount );
|
||||
ore.ItemID = 0x19B9;
|
||||
PackItem( ore );
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
|
|
|
|||
|
|
@ -45,7 +45,9 @@ namespace Server.Mobiles
|
|||
|
||||
VirtualArmor = 35;
|
||||
|
||||
PackItem( new VeriteOre( oreAmount ) );
|
||||
Item ore = new VeriteOre( oreAmount );
|
||||
ore.ItemID = 0x19B9;
|
||||
PackItem( ore );
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ namespace Server.Mobiles
|
|||
|
||||
private NpcGuild m_NpcGuild;
|
||||
private DateTime m_NpcGuildJoinTime;
|
||||
private DateTime m_NextBODTurnInTime;
|
||||
private TimeSpan m_NpcGuildGameTime;
|
||||
private PlayerFlag m_Flags;
|
||||
private int m_StepsTaken;
|
||||
|
|
@ -207,6 +208,13 @@ namespace Server.Mobiles
|
|||
set{ m_NpcGuildJoinTime = value; }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public DateTime NextBODTurnInTime
|
||||
{
|
||||
get{ return m_NextBODTurnInTime; }
|
||||
set{ m_NextBODTurnInTime = value; }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public DateTime LastOnline
|
||||
{
|
||||
|
|
@ -581,6 +589,28 @@ namespace Server.Mobiles
|
|||
EventSink.Logout += new LogoutEventHandler( OnLogout );
|
||||
EventSink.Connected += new ConnectedEventHandler( EventSink_Connected );
|
||||
EventSink.Disconnected += new DisconnectedEventHandler( EventSink_Disconnected );
|
||||
|
||||
if( Core.SE )
|
||||
{
|
||||
Timer.DelayCall( TimeSpan.Zero, new TimerCallback( CheckPets ) );
|
||||
}
|
||||
}
|
||||
|
||||
private static void CheckPets()
|
||||
{
|
||||
foreach( Mobile m in World.Mobiles.Values )
|
||||
{
|
||||
if( m is PlayerMobile )
|
||||
{
|
||||
PlayerMobile pm = (PlayerMobile)m;
|
||||
|
||||
if((( !pm.Mounted || ( pm.Mount != null && pm.Mount is EtherealMount )) && ( pm.AllFollowers.Count > pm.AutoStabled.Count )) ||
|
||||
( pm.Mounted && ( pm.AllFollowers.Count > ( pm.AutoStabled.Count +1 ))))
|
||||
{
|
||||
pm.AutoStablePets(); /* autostable checks summons, et al: no need here */
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnSkillInvalidated( Skill skill )
|
||||
|
|
@ -2438,10 +2468,27 @@ namespace Server.Mobiles
|
|||
|
||||
Mobile oath = Spells.Necromancy.BloodOathSpell.GetBloodOath( from );
|
||||
|
||||
/* Per EA's UO Herald Pub48 (ML):
|
||||
* ((resist spellsx10)/20 + 10=percentage of damage resisted)
|
||||
*/
|
||||
|
||||
if ( oath == this )
|
||||
{
|
||||
amount = (int)(amount * 1.1);
|
||||
from.Damage( amount, from );
|
||||
|
||||
if( amount > 35 && from is PlayerMobile ) /* capped @ 35, seems no expansion */
|
||||
{
|
||||
amount = 35;
|
||||
}
|
||||
|
||||
if( Core.ML )
|
||||
{
|
||||
from.Damage( (int)(amount * ( 1 - ((( from.Skills.MagicResist.Value * .5 ) + 10) / 100 ))), this );
|
||||
}
|
||||
else
|
||||
{
|
||||
from.Damage( amount, this );
|
||||
}
|
||||
}
|
||||
|
||||
base.Damage( amount, from );
|
||||
|
|
@ -2836,7 +2883,6 @@ namespace Server.Mobiles
|
|||
|
||||
CheckAtrophies( this );
|
||||
|
||||
|
||||
if( Hidden ) //Hiding is the only buff where it has an effect that's serialized.
|
||||
AddBuff( new BuffInfo( BuffIcon.HidingAndOrStealth, 1075655 ) );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -740,8 +740,19 @@ namespace Server.Mobiles
|
|||
|
||||
public override bool OnDragDrop( Mobile from, Item dropped )
|
||||
{
|
||||
/* TODO: Thou art giving me? and fame/karma for gold gifts */
|
||||
|
||||
if ( dropped is SmallBOD || dropped is LargeBOD )
|
||||
{
|
||||
if( Core.ML )
|
||||
{
|
||||
if( ((PlayerMobile)from).NextBODTurnInTime > DateTime.Now )
|
||||
{
|
||||
SayTo( from, 1079976 ); //
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ( !IsValidBulkOrder( dropped ) || !SupportsBulkOrders( from ) )
|
||||
{
|
||||
SayTo( from, 1045130 ); // That order is for some other shopkeeper.
|
||||
|
|
@ -777,6 +788,11 @@ namespace Server.Mobiles
|
|||
|
||||
OnSuccessfulBulkOrderReceive( from );
|
||||
|
||||
if( Core.ML )
|
||||
{
|
||||
((PlayerMobile)from).NextBODTurnInTime = DateTime.Now + TimeSpan.FromSeconds( 10.0 );
|
||||
}
|
||||
|
||||
dropped.Delete();
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -92,6 +92,9 @@ namespace Server.SkillHandlers
|
|||
else
|
||||
{
|
||||
from.SendLocalizedMessage( 500210 ); // You failed to peek into the container.
|
||||
|
||||
if ( from.Skills[SkillName.Hiding].Value / 2 < Utility.Random( 100 ) )
|
||||
from.RevealingAction();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -66,12 +66,6 @@ namespace Server.Spells.Bushido
|
|||
}
|
||||
}
|
||||
|
||||
public override void OnMiss( Mobile attacker, Mobile defender )
|
||||
{
|
||||
ClearCurrentMove( attacker );
|
||||
SetContext( attacker );
|
||||
}
|
||||
|
||||
public override void OnClearMove( Mobile attacker )
|
||||
{
|
||||
PlayerMobile ThePlayer = attacker as PlayerMobile; // this can be deletet if the PlayerMobile parts are moved to Server.Mobile
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@ namespace Server.Spells.Chivalry
|
|||
if ( Caster != m && SpellHelper.ValidIndirectTarget( Caster, m ) && Caster.CanBeHarmful( m, false ) )
|
||||
targets.Add( m );
|
||||
}
|
||||
|
||||
|
||||
Caster.PlaySound( 0xF5 );
|
||||
Caster.PlaySound( 0x299 );
|
||||
Caster.FixedParticles( 0x37C4, 1, 25, 9922, 14, 3, EffectLayer.Head );
|
||||
|
||||
|
|
|
|||
|
|
@ -161,7 +161,7 @@ namespace Server.Spells.Chivalry
|
|||
|
||||
if ( sacrifice )
|
||||
{
|
||||
Caster.PlaySound( 0x423 );
|
||||
Caster.PlaySound( Caster.Body.IsFemale ? 0x150 : 0x423 );
|
||||
Caster.Hits = 1;
|
||||
Caster.Stam = 1;
|
||||
Caster.Mana = 1;
|
||||
|
|
|
|||
|
|
@ -131,7 +131,9 @@ namespace Server.Spells.Chivalry
|
|||
|
||||
Effects.SendLocationParticles( EffectItem.Create( Caster.Location, Caster.Map, EffectItem.DefaultDuration ), 0, 0, 0, 5033 );
|
||||
|
||||
Caster.PlaySound( 0x1FC );
|
||||
Caster.MoveToWorld( loc, map );
|
||||
Caster.PlaySound( 0x1FC );
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ namespace Server.Spells.Eighth
|
|||
if ( Caster != m && SpellHelper.ValidIndirectTarget( Caster, m ) && Caster.CanBeHarmful( m, false ) && (!Core.AOS || Caster.InLOS( m )) )
|
||||
targets.Add( m );
|
||||
|
||||
Caster.PlaySound( 0x2F3 );
|
||||
Caster.PlaySound( 0x220 );
|
||||
|
||||
for ( int i = 0; i < targets.Count; ++i )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ namespace Server.Spells.First
|
|||
damage *= GetDamageScalar( m );
|
||||
}
|
||||
|
||||
source.MovingParticles( m, 0x36E4, 5, 0, false, true, 3006, 4006, 0 );
|
||||
source.MovingParticles( m, 0x36E4, 5, 0, false, false, 3006, 0, 0 );
|
||||
source.PlaySound( 0x1E5 );
|
||||
|
||||
SpellHelper.Damage( this, m, damage, 0, 100, 0, 0, 0 );
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ namespace Server.Spells.Fourth
|
|||
m.Paralyzed = false;
|
||||
|
||||
m.FixedParticles( 0x374A, 10, 15, 5028, EffectLayer.Waist );
|
||||
m.PlaySound( 0x1EA );
|
||||
m.PlaySound( 0x1E1 );
|
||||
|
||||
int percentage = (int)(SpellHelper.GetOffsetScalar(Caster, m, true) * 100);
|
||||
TimeSpan length = SpellHelper.GetDuration(Caster, m);
|
||||
|
|
|
|||
|
|
@ -65,6 +65,9 @@ namespace Server.Spells.Necromancy
|
|||
m_OathTable[Caster] = Caster;
|
||||
m_OathTable[m] = Caster;
|
||||
|
||||
if ( m.Spell != null )
|
||||
m.Spell.OnCasterHurt();
|
||||
|
||||
Caster.PlaySound( 0x175 );
|
||||
|
||||
Caster.FixedParticles( 0x375A, 1, 17, 9919, 33, 7, EffectLayer.Waist );
|
||||
|
|
|
|||
|
|
@ -55,6 +55,9 @@ namespace Server.Spells.Necromancy
|
|||
else
|
||||
m.SendLocalizedMessage( 1061689 ); // Your skin turns dry and corpselike.
|
||||
|
||||
if ( m.Spell != null )
|
||||
m.Spell.OnCasterHurt();
|
||||
|
||||
m.FixedParticles( 0x373A, 1, 15, 9913, 67, 7, EffectLayer.Head );
|
||||
m.PlaySound( 0x1BB );
|
||||
|
||||
|
|
|
|||
|
|
@ -49,6 +49,9 @@ namespace Server.Spells.Necromancy
|
|||
* The effect lasts for one harmful event only.
|
||||
*/
|
||||
|
||||
if ( m.Spell != null )
|
||||
m.Spell.OnCasterHurt();
|
||||
|
||||
m.PlaySound( 0xFC );
|
||||
m.FixedParticles( 0x3728, 1, 13, 9912, 1150, 7, EffectLayer.Head );
|
||||
m.FixedParticles( 0x3779, 1, 15, 9502, 67, 7, EffectLayer.Head );
|
||||
|
|
|
|||
|
|
@ -46,6 +46,9 @@ namespace Server.Spells.Necromancy
|
|||
* The effect lasts for ((Spirit Speak skill level - target's Resist Magic skill level) / 50 ) + 20 seconds.
|
||||
*/
|
||||
|
||||
if ( m.Spell != null )
|
||||
m.Spell.OnCasterHurt();
|
||||
|
||||
m.PlaySound( 0x1FB );
|
||||
m.PlaySound( 0x258 );
|
||||
m.FixedParticles( 0x373A, 1, 17, 9903, 15, 4, EffectLayer.Head );
|
||||
|
|
|
|||
|
|
@ -52,6 +52,9 @@ namespace Server.Spells.Necromancy
|
|||
* for a target at 20% Stamina the damage multiplier is 2.6
|
||||
*/
|
||||
|
||||
if ( m.Spell != null )
|
||||
m.Spell.OnCasterHurt();
|
||||
|
||||
m.PlaySound( 0x22F );
|
||||
m.FixedParticles( 0x36CB, 1, 9, 9911, 67, 5, EffectLayer.Head );
|
||||
m.FixedParticles( 0x374A, 1, 17, 9502, 1108, 4, (EffectLayer)255 );
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ namespace Server.Spells.Second
|
|||
SpellHelper.AddStatBonus( Caster, m, StatType.Dex );
|
||||
|
||||
m.FixedParticles( 0x375A, 10, 15, 5010, EffectLayer.Waist );
|
||||
m.PlaySound( 0x28E );
|
||||
m.PlaySound( 0x1e7 );
|
||||
|
||||
int percentage = (int)(SpellHelper.GetOffsetScalar( Caster, m, false )*100);
|
||||
TimeSpan length = SpellHelper.GetDuration( Caster, m );
|
||||
|
|
|
|||
|
|
@ -102,12 +102,16 @@ namespace Server.Spells.Seventh
|
|||
m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy.
|
||||
}
|
||||
|
||||
Caster.DoHarmful( m );
|
||||
SpellHelper.Damage( this, m, toDeal, 0, 0, 0, 0, 100 );
|
||||
Caster.DoHarmful( m );
|
||||
SpellHelper.Damage( this, m, toDeal, 0, 0, 0, 0, 100 );
|
||||
|
||||
m.BoltEffect( 0 );
|
||||
m.BoltEffect( 0 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Caster.PlaySound ( 0x29 );
|
||||
}
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ namespace Server.Spells.Third
|
|||
}
|
||||
|
||||
m.FixedParticles( 0x374A, 10, 15, 5021, EffectLayer.Waist );
|
||||
m.PlaySound( 0x474 );
|
||||
m.PlaySound( 0x205 );
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue