Housing
- house commit has inappropiate cost for certain parts
http://www.uodemise.com/forum/showthread.php?t=136453
- houses should not be placable on roads
http://www.uodemise.com/forum/showthread.php?t=139597
Bushido
- lightning strike should consume extra mana if player walks
http://www.uodemise.com/forum/showthread.php?t=127699
Weapons
- frenzied whirlwind should properly flag combatants.
http://www.uodemise.com/forum/showthread.php?t=138625
Magery
- PolyMorph should not turn the caster grey/criminal
http://www.uodemise.com/forum/showthread.php?t=116438
- Paralyze should interfere in casting paladin spells.
http://www.uodemise.com/forum/showthread.php?t=120742
Spellweaving
- Ethereal Voyage should not break when attempting to tame dragons, nightmares, etc.
http://www.uodemise.com/forum/showthread.php?t=135349
Misc
- refactor DrawRessource() to DrawResource()
http://www.uodemise.com/forum/showthread.php?t=127202
- random blood "spatter" itemid during combat: more visible blood.
http://www.uodemise.com/forum/showthread.php?t=140092
Taming
- Animal lore should check for skill modifiers when using lore on mobiles.
http://www.uodemise.com/forum/showthread.php?t=140658
Necromany
- Wraithform should allow push-through without stam loss always.
http://www.uodemise.com/forum/showthread.php?t=117126
- Wraithform mana leech should not lower the victim's mana + small cleanup to spellhelper.doleech()
http://www.uodemise.com/forum/showthread.php?t=120238
Chivalry
- Noble Sacrifice should work in houses. RunUO's does not.
http://www.uodemise.com/forum/showthread.php?t=122819
NCP Vendors
- Add necro regs for vendors to buy from players.
http://www.uodemise.com/forum/showthread.php?t=136435
This commit is contained in:
parent
d3e95b7e53
commit
1d74d05af4
16 changed files with 175 additions and 69 deletions
|
|
@ -85,7 +85,7 @@ namespace Server.Engines.Craft
|
|||
|
||||
DrawItem();
|
||||
DrawSkill();
|
||||
DrawRessource();
|
||||
DrawResource();
|
||||
|
||||
/*
|
||||
if( craftItem.RequiresSE )
|
||||
|
|
@ -180,7 +180,7 @@ namespace Server.Engines.Craft
|
|||
private static Type typeofBlankScroll = typeof( BlankScroll );
|
||||
private static Type typeofSpellScroll = typeof( SpellScroll );
|
||||
|
||||
public void DrawRessource()
|
||||
public void DrawResource()
|
||||
{
|
||||
bool retainedColor = false;
|
||||
|
||||
|
|
|
|||
|
|
@ -187,18 +187,18 @@ namespace Server.Engines.Craft
|
|||
{
|
||||
/*
|
||||
Synthax for a SIMPLE craft item
|
||||
AddCraft( ObjectType, Group, MinSkill, MaxSkill, RessourceType, Amount, Message )
|
||||
AddCraft( ObjectType, Group, MinSkill, MaxSkill, ResourceType, Amount, Message )
|
||||
|
||||
ObjectType : The type of the object you want to add to the build list.
|
||||
Group : The group in wich the object will be showed in the craft menu.
|
||||
MinSkill : The minimum of skill value
|
||||
MaxSkill : The maximum of skill value
|
||||
RessourceType : The type of the ressource the mobile need to create the item
|
||||
Amount : The amount of the RessourceType it need to create the item
|
||||
Message : String or Int for Localized. The message that will be sent to the mobile, if the specified ressource is missing.
|
||||
ResourceType : The type of the resource the mobile need to create the item
|
||||
Amount : The amount of the ResourceType it need to create the item
|
||||
Message : String or Int for Localized. The message that will be sent to the mobile, if the specified resource is missing.
|
||||
|
||||
Synthax for a COMPLEXE craft item. A complexe item is an item that need either more than
|
||||
only one skill, or more than only one ressource.
|
||||
only one skill, or more than only one resource.
|
||||
|
||||
Coming soon....
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ namespace Server.Items
|
|||
public class Blood : Item
|
||||
{
|
||||
[Constructable]
|
||||
public Blood() : this( 0x1645 )
|
||||
public Blood() : this( Utility.RandomList( 0x1645, 0x122A, 0x122B, 0x122C, 0x122D, 0x122E, 0x122F ))
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ namespace Server.Items
|
|||
for( int i = 0; i < targets.Count; ++i )
|
||||
{
|
||||
Mobile m = (Mobile)targets[i];
|
||||
attacker.DoHarmful( m, true );
|
||||
|
||||
Timer t = Registry[m] as Timer;
|
||||
|
||||
|
|
|
|||
|
|
@ -329,7 +329,7 @@ namespace Server.Misc
|
|||
|
||||
if( !(target is BaseCreature && ((BaseCreature)target).InitialInnocent) )
|
||||
{
|
||||
if( !target.Body.IsHuman && !target.Body.IsGhost && !IsPet( target as BaseCreature ) && !TransformationSpellHelper.UnderTransformation( target ) && !AnimalForm.UnderTransformation( target ) )
|
||||
if( !target.Body.IsHuman && !target.Body.IsGhost && !IsPet( target as BaseCreature ) && !(target is PlayerMobile) || !Core.ML && !target.CanBeginAction( typeof( Server.Spells.Seventh.PolymorphSpell ) ) )
|
||||
return Notoriety.CanBeAttacked;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -105,7 +105,14 @@ namespace Server.Mobiles
|
|||
private int m_StepsTaken;
|
||||
private int m_Profession;
|
||||
private bool m_IsStealthing; // IsStealthing should be moved to Server.Mobiles
|
||||
private bool m_IgnoreMobiles; // IgnoreMobiles should be moved to Server.Mobiles
|
||||
|
||||
/*
|
||||
* a value of zero means, that the mobile is not executing the spell. Otherwise,
|
||||
* the value should match the BaseMana required
|
||||
*/
|
||||
private int m_ExecutesLightningStrike; // move to Server.Mobiles??
|
||||
|
||||
private DateTime m_LastOnline;
|
||||
private Server.Guilds.RankDefinition m_GuildRank;
|
||||
|
||||
|
|
@ -173,6 +180,23 @@ namespace Server.Mobiles
|
|||
set { m_IsStealthing = value; }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public bool IgnoreMobiles // IgnoreMobiles should be moved to Server.Mobiles
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_IgnoreMobiles;
|
||||
}
|
||||
set
|
||||
{
|
||||
if( m_IgnoreMobiles != value )
|
||||
{
|
||||
m_IgnoreMobiles = value;
|
||||
Delta( MobileDelta.Flags );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public NpcGuild NpcGuild
|
||||
{
|
||||
|
|
@ -219,6 +243,12 @@ namespace Server.Mobiles
|
|||
set { m_ToTTotalMonsterFame = value; }
|
||||
}
|
||||
|
||||
public int ExecutesLightningStrike
|
||||
{
|
||||
get { return m_ExecutesLightningStrike; }
|
||||
set { m_ExecutesLightningStrike = value; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region PlayerFlags
|
||||
|
|
@ -506,6 +536,26 @@ namespace Server.Mobiles
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override int GetPacketFlags()
|
||||
{
|
||||
int flags = base.GetPacketFlags();
|
||||
|
||||
if ( m_IgnoreMobiles )
|
||||
flags |= 0x10;
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
public override int GetOldPacketFlags()
|
||||
{
|
||||
int flags = base.GetOldPacketFlags();
|
||||
|
||||
if ( m_IgnoreMobiles )
|
||||
flags |= 0x10;
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
public bool GetFlag( PlayerFlag flag )
|
||||
{
|
||||
|
|
@ -632,6 +682,18 @@ namespace Server.Mobiles
|
|||
return min;
|
||||
}
|
||||
|
||||
public override void OnManaChange(int oldValue)
|
||||
{
|
||||
base.OnManaChange(oldValue);
|
||||
if (m_ExecutesLightningStrike > 0)
|
||||
{
|
||||
if (Mana < m_ExecutesLightningStrike)
|
||||
{
|
||||
LightningStrike.ClearCurrentMove(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void OnLogin( LoginEventArgs e )
|
||||
{
|
||||
Mobile from = e.Mobile;
|
||||
|
|
@ -1860,7 +1922,7 @@ namespace Server.Mobiles
|
|||
|
||||
public override bool CheckShove( Mobile shoved )
|
||||
{
|
||||
if( TransformationSpellHelper.UnderTransformation( this, typeof( WraithFormSpell ) ) )
|
||||
if( m_IgnoreMobiles || TransformationSpellHelper.UnderTransformation( shoved, typeof( WraithFormSpell ) ) )
|
||||
return true;
|
||||
else
|
||||
return base.CheckShove( shoved );
|
||||
|
|
@ -2762,6 +2824,9 @@ namespace Server.Mobiles
|
|||
|
||||
if( m_ChampionTitles == null )
|
||||
m_ChampionTitles = new ChampionTitleInfo();
|
||||
|
||||
if ( AccessLevel > AccessLevel.Player )
|
||||
m_IgnoreMobiles = true;
|
||||
|
||||
List<Mobile> list = this.Stabled;
|
||||
|
||||
|
|
@ -3247,6 +3312,11 @@ namespace Server.Mobiles
|
|||
|
||||
public override void OnAccessLevelChanged( AccessLevel oldLevel )
|
||||
{
|
||||
if ( AccessLevel == AccessLevel.Player )
|
||||
IgnoreMobiles = false;
|
||||
else
|
||||
IgnoreMobiles = true;
|
||||
|
||||
InvalidateMyRunUO();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -91,6 +91,16 @@ namespace Server.Mobiles
|
|||
Add( typeof( Nightshade ), 2 );
|
||||
Add( typeof( SpidersSilk ), 2 );
|
||||
Add( typeof( SulfurousAsh ), 2 );
|
||||
|
||||
if ( Core.AOS )
|
||||
{
|
||||
Add( typeof( BatWing ), 1 );
|
||||
Add( typeof( DaemonBlood ), 3 );
|
||||
Add( typeof( PigIron ), 2 );
|
||||
Add( typeof( NoxCrystal ), 3 );
|
||||
Add( typeof( GraveDust ), 1 );
|
||||
}
|
||||
|
||||
Add( typeof( RecallRune ), 13 );
|
||||
Add( typeof( Spellbook ), 25 );
|
||||
|
||||
|
|
|
|||
|
|
@ -890,7 +890,7 @@ namespace Server.Multis
|
|||
public void EndConfirmCommit( Mobile from )
|
||||
{
|
||||
int oldPrice = Price;
|
||||
int newPrice = oldPrice + CustomizationCost + ((DesignState.Components.List.Length - CurrentState.Components.List.Length) * 500);
|
||||
int newPrice = oldPrice + CustomizationCost + ((DesignState.Components.List.Length - ( CurrentState.Components.List.Length + CurrentState.Fixtures.Length )) * 500);
|
||||
int cost = newPrice - oldPrice;
|
||||
|
||||
if ( !this.Deleted ) { // Temporary Fix. We should be booting a client out of customization mode in the delete handler.
|
||||
|
|
@ -991,7 +991,7 @@ namespace Server.Multis
|
|||
if( context != null )
|
||||
{
|
||||
int oldPrice = context.Foundation.Price;
|
||||
int newPrice = oldPrice + context.Foundation.CustomizationCost + ((context.Foundation.DesignState.Components.List.Length - context.Foundation.CurrentState.Components.List.Length) * 500);
|
||||
int newPrice = oldPrice + context.Foundation.CustomizationCost + ((context.Foundation.DesignState.Components.List.Length - ( context.Foundation.CurrentState.Components.List.Length + context.Foundation.Fixtures.Count) ) * 500);
|
||||
int bankBalance = Banker.GetBalance( from );
|
||||
|
||||
from.SendGump( new ConfirmCommitGump( from, context.Foundation, bankBalance, oldPrice, newPrice ) );
|
||||
|
|
@ -1936,8 +1936,16 @@ namespace Server.Multis
|
|||
AddHtmlLocalized( 10, 235, 150, 20, 1061900, 1023, false, false ); // Cost To Commit:
|
||||
AddLabel( 170, 235, 90, newPrice.ToString() );
|
||||
|
||||
AddHtmlLocalized( 10, 260, 150, 20, 1061901, 31744, false, false ); // Your Cost:
|
||||
AddLabel( 170, 260, 40, (newPrice - oldPrice).ToString() );
|
||||
if ( newPrice - oldPrice < 0 )
|
||||
{
|
||||
AddHtmlLocalized( 10, 260, 150, 20, 1062059, 992, false, false ); // Your Refund:
|
||||
AddLabel( 170, 260, 70, (oldPrice - newPrice).ToString() );
|
||||
}
|
||||
else
|
||||
{
|
||||
AddHtmlLocalized( 10, 260, 150, 20, 1061901, 31744, false, false ); // Your Cost:
|
||||
AddLabel( 170, 260, 40, (newPrice - oldPrice).ToString() );
|
||||
}
|
||||
|
||||
AddButton( 10, 290, 4005, 4007, 1, GumpButtonType.Reply, 0 );
|
||||
AddHtmlLocalized( 45, 290, 55, 20, 1011036, 32767, false, false ); // OKAY
|
||||
|
|
|
|||
|
|
@ -30,22 +30,15 @@ namespace Server.Multis
|
|||
// Any land tile which matches one of these ID numbers is considered a road and cannot be placed over.
|
||||
private static int[] m_RoadIDs = new int[]
|
||||
{
|
||||
0x071, 0x08C,
|
||||
0x0E8, 0x0EB,
|
||||
0x14C, 0x14F,
|
||||
0x161, 0x174,
|
||||
0x1F0, 0x1F3,
|
||||
0x26E, 0x279,
|
||||
0x27E, 0x281,
|
||||
0x324, 0x3AC,
|
||||
0x547, 0x556,
|
||||
0x597, 0x5A6,
|
||||
0x637, 0x63A,
|
||||
0x7AE, 0x7B1,
|
||||
0x442, 0x479, // Sand stones
|
||||
0x501, 0x510, // Sand stones
|
||||
0x009, 0x015, // Furrows
|
||||
0x150, 0x15C // Furrows
|
||||
0x0071, 0x0078,
|
||||
0x00E8, 0x00EB,
|
||||
0x07AE, 0x07B1,
|
||||
0x3FF4, 0x3FF4,
|
||||
0x3FF8, 0x3FFB,
|
||||
0x0442, 0x0479, // Sand stones
|
||||
0x0501, 0x0510, // Sand stones
|
||||
0x0009, 0x0015, // Furrows
|
||||
0x0150, 0x015C // Furrows
|
||||
};
|
||||
|
||||
public static HousePlacementResult Check( Mobile from, int multiID, Point3D center, out ArrayList toMove )
|
||||
|
|
|
|||
|
|
@ -42,11 +42,11 @@ namespace Server.SkillHandlers
|
|||
{
|
||||
if ( c.Body.IsAnimal || c.Body.IsMonster || c.Body.IsSea )
|
||||
{
|
||||
if ( (!c.Controlled || !c.Tamable) && from.Skills[SkillName.AnimalLore].Base < 100.0 )
|
||||
if ( (!c.Controlled || !c.Tamable) && from.Skills[SkillName.AnimalLore].Value < 100.0 )
|
||||
{
|
||||
from.SendLocalizedMessage( 1049674 ); // At your skill level, you can only lore tamed creatures.
|
||||
}
|
||||
else if ( !c.Tamable && from.Skills[SkillName.AnimalLore].Base < 110.0 )
|
||||
else if ( !c.Tamable && from.Skills[SkillName.AnimalLore].Value < 110.0 )
|
||||
{
|
||||
from.SendLocalizedMessage( 1049675 ); // At your skill level, you can only lore tamed or tameable creatures.
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ using Server.Targeting;
|
|||
using Server.Network;
|
||||
using Server.Mobiles;
|
||||
using Server.Factions;
|
||||
using Server.Spells;
|
||||
using Server.Spells.Spellweaving;
|
||||
|
||||
namespace Server.SkillHandlers
|
||||
{
|
||||
|
|
@ -180,7 +182,7 @@ namespace Server.SkillHandlers
|
|||
creature.PrivateOverheadMessage( MessageType.Regular, 0x3B2, 502805, from.NetState ); // You seem to anger the beast!
|
||||
creature.PlaySound( creature.GetAngerSound() );
|
||||
creature.Direction = creature.GetDirectionTo( from );
|
||||
if ( from is PlayerMobile && !( (PlayerMobile)from ).HonorActive )
|
||||
if ( from is PlayerMobile && !(( (PlayerMobile)from ).HonorActive || TransformationSpellHelper.UnderTransformation( from, typeof( EtherealVoyageSpell ))))
|
||||
creature.Combatant = from;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -974,23 +974,24 @@ namespace Server.Spells
|
|||
public static void DoLeech( int damageGiven, Mobile from, Mobile target )
|
||||
{
|
||||
TransformContext context = TransformationSpellHelper.GetContext( from );
|
||||
if ( context != null && context.Type == typeof( WraithFormSpell ) )
|
||||
|
||||
if ( context != null ) /* cleanup */
|
||||
{
|
||||
int wraithLeech = ( 5 + (int)( ( 15 * from.Skills.SpiritSpeak.Value ) / 100 ) ); // Wraith form gives 5-20% mana leech
|
||||
int manaLeech = AOS.Scale( damageGiven, wraithLeech );
|
||||
if ( manaLeech != 0 )
|
||||
if ( context.Type == typeof( WraithFormSpell ) )
|
||||
{
|
||||
// Mana leeched by the Wraith Form spell is actually stolen, not just leeched.
|
||||
target.Mana -= manaLeech;
|
||||
from.Mana += manaLeech;
|
||||
from.PlaySound( 0x44D );
|
||||
//from.SendMessage(String.Format("You Leeched {0} Mana", manaLeech));
|
||||
int wraithLeech = ( 5 + (int)( ( 15 * from.Skills.SpiritSpeak.Value ) / 100 ) ); // Wraith form gives 5-20% mana leech
|
||||
int manaLeech = AOS.Scale( damageGiven, wraithLeech );
|
||||
if ( manaLeech != 0 )
|
||||
{
|
||||
from.Mana += manaLeech;
|
||||
from.PlaySound( 0x44D );
|
||||
}
|
||||
}
|
||||
else if ( context.Type == typeof( VampiricEmbraceSpell ) )
|
||||
{
|
||||
from.Hits += AOS.Scale( damageGiven, 20 );
|
||||
from.PlaySound( 0x44D );
|
||||
}
|
||||
}
|
||||
if ( context != null && context.Type == typeof( VampiricEmbraceSpell ) )
|
||||
{
|
||||
from.Hits += AOS.Scale( damageGiven, 20 );
|
||||
from.PlaySound( 0x44D );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,44 +25,57 @@ namespace Server.Spells.Bushido
|
|||
return 50;
|
||||
}
|
||||
|
||||
public override bool Validate(Mobile from)
|
||||
{
|
||||
bool isValid=base.Validate(from);
|
||||
if (isValid)
|
||||
{
|
||||
PlayerMobile ThePlayer = from as PlayerMobile;
|
||||
ThePlayer.ExecutesLightningStrike = BaseMana;
|
||||
}
|
||||
return isValid;
|
||||
}
|
||||
|
||||
public override bool IgnoreArmor( Mobile attacker )
|
||||
{
|
||||
double bushido = attacker.Skills[SkillName.Bushido].Value;
|
||||
|
||||
double criticalChance = (bushido * bushido) / 72000.0;
|
||||
|
||||
return ( criticalChance >= Utility.RandomDouble() );
|
||||
}
|
||||
|
||||
public override bool OnBeforeSwing( Mobile attacker, Mobile defender )
|
||||
{
|
||||
return Validate( attacker ) && CheckMana( attacker, true );
|
||||
/* no mana drain before actual hit */
|
||||
bool enoughMana = CheckMana(attacker, false);
|
||||
return Validate(attacker);
|
||||
}
|
||||
|
||||
public override bool ValidatesDuringHit { get { return false; } }
|
||||
|
||||
public override void OnHit( Mobile attacker, Mobile defender, int damage )
|
||||
{
|
||||
//Validation in OnBeforeSwing
|
||||
|
||||
ClearCurrentMove( attacker );
|
||||
|
||||
attacker.SendLocalizedMessage( 1063168 ); // You attack with lightning precision!
|
||||
defender.SendLocalizedMessage( 1063169 ); // Your opponent's quick strike causes extra damage!
|
||||
|
||||
defender.FixedParticles( 0x3818, 1, 11, 0x13A8, 0, 0, EffectLayer.Waist );
|
||||
defender.PlaySound( 0x51D );
|
||||
|
||||
CheckGain( attacker );
|
||||
|
||||
SetContext( attacker );
|
||||
ClearCurrentMove(attacker);
|
||||
if (CheckMana(attacker, true))
|
||||
{
|
||||
attacker.SendLocalizedMessage(1063168); // You attack with lightning precision!
|
||||
defender.SendLocalizedMessage(1063169); // Your opponent's quick strike causes extra damage!
|
||||
defender.FixedParticles(0x3818, 1, 11, 0x13A8, 0, 0, EffectLayer.Waist);
|
||||
defender.PlaySound(0x51D);
|
||||
CheckGain(attacker);
|
||||
SetContext(attacker);
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
ThePlayer.ExecutesLightningStrike = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ namespace Server.Spells.Chivalry
|
|||
if ( m is BaseCreature && ((BaseCreature)m).IsAnimatedDead )
|
||||
continue;
|
||||
|
||||
if ( Caster != m && Caster.CanBeBeneficial( m, false, true ) && !(m is Golem) )
|
||||
if ( Caster != m && m.InLOS( Caster ) && Caster.CanBeBeneficial( m, false, true ) && !(m is Golem) )
|
||||
targets.Add( m );
|
||||
}
|
||||
|
||||
|
|
@ -72,9 +72,6 @@ namespace Server.Spells.Chivalry
|
|||
{
|
||||
Caster.SendLocalizedMessage( 1010395 ); // The veil of death in this area is too strong and resists thy efforts to restore life.
|
||||
}
|
||||
else if( Core.ML && m.Region != null && m.Region.IsPartOf( typeof( HouseRegion ) ) )
|
||||
{
|
||||
}
|
||||
else if( resChance > Utility.RandomDouble() )
|
||||
{
|
||||
m.FixedParticles( 0x375A, 1, 15, 5005, 5, 3, EffectLayer.Head );
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ using System;
|
|||
using Server.Mobiles;
|
||||
using Server.Targeting;
|
||||
using Server.Network;
|
||||
using Server.Spells.Chivalry;
|
||||
|
||||
namespace Server.Spells.Fifth
|
||||
{
|
||||
|
|
@ -33,7 +34,7 @@ namespace Server.Spells.Fifth
|
|||
{
|
||||
Caster.SendLocalizedMessage( 500237 ); // Target can not be seen.
|
||||
}
|
||||
else if ( Core.AOS && (m.Frozen || m.Paralyzed || (m.Spell != null && m.Spell.IsCasting)) )
|
||||
else if ( Core.AOS && (m.Frozen || m.Paralyzed || (m.Spell != null && m.Spell.IsCasting && !(m.Spell is PaladinSpell))) )
|
||||
{
|
||||
Caster.SendLocalizedMessage( 1061923 ); // The target is already frozen.
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ using System.Collections;
|
|||
using Server.Network;
|
||||
using Server.Items;
|
||||
using Server.Targeting;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Spells.Necromancy
|
||||
{
|
||||
|
|
@ -36,8 +37,17 @@ namespace Server.Spells.Necromancy
|
|||
|
||||
public override void DoEffect( Mobile m )
|
||||
{
|
||||
if ( m is PlayerMobile )
|
||||
((PlayerMobile)m).IgnoreMobiles = true;
|
||||
|
||||
m.PlaySound( 0x17F );
|
||||
m.FixedParticles( 0x374A, 1, 15, 9902, 1108, 4, EffectLayer.Waist );
|
||||
}
|
||||
|
||||
public override void RemoveEffect( Mobile m )
|
||||
{
|
||||
if ( m is PlayerMobile && m.AccessLevel == AccessLevel.Player )
|
||||
((PlayerMobile)m).IgnoreMobiles = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue