Missing System Message "Your pet looks happier" (regardless of loyalty)
http://www.runuo.com/community/threads/ready-missing-system-message-your-pet-looks-happier.450209/ Not all powerscrolls do drop - Ninjitsu, Bushido etc. http://www.runuo.com/community/threads/ready-not-all-powerscrolls-do-drop.459974/ Savage Kin Paint Wrong Skill Requirement + Wrong Success Chance http://www.runuo.com/community/threads/ready-savage-kin-paint-wrong-skill-requirement-wrong-success-chance.455360/ Hag Quest - Stew, can't eat it http://www.runuo.com/community/threads/ready-hag-quest-stew.454406/ Giant Blue Beetles shouldn't need beating into submission after being tamed once http://www.runuo.com/community/threads/ready-giant-blue-beetles.450205/ Greater Dragon Fame/Karma Doesn't Match OSI http://www.runuo.com/community/threads/ready-greater-dragon-fame-karma-doesnt-match-osi.472206/ Resizing Houses, you can resize a house by using a command under the house sign http://www.runuo.com/community/threads/ready-resizing-houses.414762/ Crafted Shield Resists are wrong on RunUO http://www.runuo.com/community/threads/ready-crafted-shield-resists.454186/ Yomotsu Mines, you should not be able to recall out of there. http://www.runuo.com/community/threads/ready-yomotsu-mines.445486/ Missing Necro Icons in the Buff/Debuff Bar http://www.runuo.com/community/threads/ready-missing-necro-icons-in-the-buff-debuff-bar.450872/ Chivalry Spells, you are allowed to attempt casting of spells outside of your skill range without a system message http://www.runuo.com/community/threads/ready-chivalry-spells.450757/ Tinker tools use a different graphic on OSI http://www.runuo.com/community/threads/ready-tinker-tools.460690/ Tinkering should not be required when crafted a Tetsubo http://www.runuo.com/community/threads/ready-wrong-skill-requirement-carpentry-wrong-success-chances.455342/ Carpentry-Small+Large Beds -Wrong Success Chance http://www.runuo.com/community/threads/ready-carpentry-small-large-beds-wrong-success-chance.455794/ Telekinesis, various changes to behaviour with items http://www.runuo.com/community/threads/ready-telekinesis.455250/ Forensic Evaluation Various issues http://www.runuo.com/community/threads/ready-forensic-evaluation-various-issues-merged.458700/ Animate Dead Corpses, you cannot carve the corpse after it's used http://www.runuo.com/community/threads/ready-animate-dead-corpses.453823/ You should be able to use begging skill while riding http://www.runuo.com/community/threads/ready-begging-while-riding.466174/ Crafting Mod Lower Requirements should only appear on shields http://www.runuo.com/community/threads/ready-crafting-mod-lower-requirements.452112/ You should be revealed While Taking Poison/Strangle Damage http://www.runuo.com/community/threads/ready-you-never-reveal-while-taking-poison-strangle-damage.456946/ Insurance messages don't do the math! http://www.runuo.com/community/threads/ready-insurance-messages-dont-do-the-math.454928/ Slayers should work on area of effect spells http://www.runuo.com/community/threads/ready-slayers-should-work-on-area-of-effect-spells.448774/ You should not be able to use any travel spell in Heartwood http://www.runuo.com/community/threads/ready-heartwood.457379/ Welcome Back To The House Friend message does not show post-AoS http://www.runuo.com/community/threads/ready-welcome-back-to-the-house-friend.415924/ Giant Beetle speed should be very fast when magery spells are cast on it http://www.runuo.com/community/threads/ready-giant-beetle.417848/
This commit is contained in:
parent
07e45156e5
commit
5c7774b99a
54 changed files with 682 additions and 130 deletions
|
|
@ -76,7 +76,7 @@ namespace Server.Engines.Craft
|
|||
return 1044156; // You create an exceptional quality item and affix your maker's mark.
|
||||
else if ( quality == 2 )
|
||||
return 1044155; // You create an exceptional quality item.
|
||||
else
|
||||
else
|
||||
return 1044154; // You create the item.
|
||||
}
|
||||
}
|
||||
|
|
@ -118,15 +118,13 @@ namespace Server.Engines.Craft
|
|||
SetNeededExpansion( index, Expansion.SE );
|
||||
}
|
||||
|
||||
if( Core.AOS ) //Duplicate Entries to preserve ordering depending on era
|
||||
if( Core.AOS ) //Duplicate Entries to preserve ordering depending on era
|
||||
{
|
||||
index = AddCraft( typeof( FishingPole ), 1044294, 1023519, 68.4, 93.4, typeof( Log ), 1044041, 5, 1044351 ); //This is in the categor of Other during AoS
|
||||
AddSkill( index, SkillName.Tailoring, 40.0, 45.0 );
|
||||
AddRes( index, typeof( Cloth ), 1044286, 5, 1044287 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Furniture
|
||||
AddCraft( typeof( FootStool ), 1044291, 1022910, 11.0, 36.0, typeof( Log ), 1044041, 9, 1044351 );
|
||||
AddCraft( typeof( Stool ), 1044291, 1022602, 11.0, 36.0, typeof( Log ), 1044041, 9, 1044351 );
|
||||
|
|
@ -159,7 +157,7 @@ namespace Server.Engines.Craft
|
|||
AddCraft( typeof( WoodenChest ), 1044292, 1023650, 73.6, 98.6, typeof( Log ), 1044041, 20, 1044351 );
|
||||
AddCraft( typeof( EmptyBookcase ), 1044292, 1022718, 31.5, 56.5, typeof( Log ), 1044041, 25, 1044351 );
|
||||
AddCraft( typeof( FancyArmoire ), 1044292, 1044312, 84.2, 109.2, typeof( Log ), 1044041, 35, 1044351 );
|
||||
AddCraft( typeof( Armoire ), 1044292, 1022643, 84.2, 109.2, typeof( Log ), 1044041, 35, 1044351 );
|
||||
AddCraft( typeof( Armoire ), 1044292, 1022643, 84.2, 109.2, typeof( Log ), 1044041, 35, 1044351 );
|
||||
|
||||
if( Core.SE )
|
||||
{
|
||||
|
|
@ -186,13 +184,13 @@ namespace Server.Engines.Craft
|
|||
|
||||
index = AddCraft( typeof( RedArmoire ), 1044292, 1030328, 90.0, 115.0, typeof( Log ), 1044041, 40, 1044351 );
|
||||
SetNeededExpansion( index, Expansion.SE );
|
||||
|
||||
|
||||
index = AddCraft( typeof( ElegantArmoire ), 1044292, 1030330, 90.0, 115.0, typeof( Log ), 1044041, 40, 1044351 );
|
||||
SetNeededExpansion( index, Expansion.SE );
|
||||
|
||||
|
||||
index = AddCraft( typeof( MapleArmoire ), 1044292, 1030332, 90.0, 115.0, typeof( Log ), 1044041, 40, 1044351 );
|
||||
SetNeededExpansion( index, Expansion.SE );
|
||||
|
||||
|
||||
index = AddCraft( typeof( CherryArmoire ), 1044292, 1030334, 90.0, 115.0, typeof( Log ), 1044041, 40, 1044351 );
|
||||
SetNeededExpansion( index, Expansion.SE );
|
||||
}
|
||||
|
|
@ -207,7 +205,7 @@ namespace Server.Engines.Craft
|
|||
AddCraft( typeof( GnarledStaff ), 1044295, 1025112, 78.9, 103.9, typeof( Log ), 1044041, 7, 1044351 );
|
||||
AddCraft( typeof( WoodenShield ), 1044295, 1027034, 52.6, 77.6, typeof( Log ), 1044041, 9, 1044351 );
|
||||
|
||||
if( !Core.AOS ) //Duplicate Entries to preserve ordering depending on era
|
||||
if( !Core.AOS ) //Duplicate Entries to preserve ordering depending on era
|
||||
{
|
||||
index = AddCraft( typeof( FishingPole ), 1044295, 1023519, 68.4, 93.4, typeof( Log ), 1044041, 5, 1044351 ); //This is in the categor of Other during AoS
|
||||
AddSkill( index, SkillName.Tailoring, 40.0, 45.0 );
|
||||
|
|
@ -222,9 +220,7 @@ namespace Server.Engines.Craft
|
|||
index = AddCraft( typeof( Fukiya ), 1044295, 1030229, 60.0, 85.0, typeof( Log ), 1044041, 6, 1044351 );
|
||||
SetNeededExpansion( index, Expansion.SE );
|
||||
|
||||
index = AddCraft( typeof( Tetsubo ), 1044295, 1030225, 85.0, 110.0, typeof( Log ), 1044041, 8, 1044351 );
|
||||
AddSkill( index, SkillName.Tinkering, 40.0, 45.0 );
|
||||
AddRes( index, typeof( IronIngot ), 1044036, 5, 1044037 );
|
||||
index = AddCraft( typeof( Tetsubo ), 1044295, 1030225, 80.0, 140.3, typeof( Log ), 1044041, 10, 1044351 );
|
||||
SetNeededExpansion( index, Expansion.SE );
|
||||
}
|
||||
|
||||
|
|
@ -236,22 +232,22 @@ namespace Server.Engines.Craft
|
|||
index = AddCraft( typeof( Harp ), 1044293, 1023761, 78.9, 103.9, typeof( Log ), 1044041, 35, 1044351 );
|
||||
AddSkill( index, SkillName.Musicianship, 45.0, 50.0 );
|
||||
AddRes( index, typeof( Cloth ), 1044286, 15, 1044287 );
|
||||
|
||||
|
||||
index = AddCraft( typeof( Drums ), 1044293, 1023740, 57.8, 82.8, typeof( Log ), 1044041, 20, 1044351 );
|
||||
AddSkill( index, SkillName.Musicianship, 45.0, 50.0 );
|
||||
AddRes( index, typeof( Cloth ), 1044286, 10, 1044287 );
|
||||
|
||||
|
||||
index = AddCraft( typeof( Lute ), 1044293, 1023763, 68.4, 93.4, typeof( Log ), 1044041, 25, 1044351 );
|
||||
AddSkill( index, SkillName.Musicianship, 45.0, 50.0 );
|
||||
AddRes( index, typeof( Cloth ), 1044286, 10, 1044287 );
|
||||
|
||||
|
||||
index = AddCraft( typeof( Tambourine ), 1044293, 1023741, 57.8, 82.8, typeof( Log ), 1044041, 15, 1044351 );
|
||||
AddSkill( index, SkillName.Musicianship, 45.0, 50.0 );
|
||||
AddRes( index, typeof( Cloth ), 1044286, 10, 1044287 );
|
||||
|
||||
index = AddCraft( typeof( TambourineTassel ), 1044293, 1044320, 57.8, 82.8, typeof( Log ), 1044041, 15, 1044351 );
|
||||
AddSkill( index, SkillName.Musicianship, 45.0, 50.0 );
|
||||
AddRes( index, typeof( Cloth ), 1044286, 15, 1044287 );
|
||||
AddRes( index, typeof( Cloth ), 1044286, 15, 1044287 );
|
||||
|
||||
if( Core.SE )
|
||||
{
|
||||
|
|
@ -261,16 +257,16 @@ namespace Server.Engines.Craft
|
|||
}
|
||||
|
||||
// Misc
|
||||
index = AddCraft( typeof( SmallBedSouthDeed ), 1044290, 1044321, 94.7, 113.1, typeof( Log ), 1044041, 100, 1044351 );
|
||||
index = AddCraft( typeof( SmallBedSouthDeed ), 1044290, 1044321, 94.7, 119.8, typeof( Log ), 1044041, 100, 1044351 );
|
||||
AddSkill( index, SkillName.Tailoring, 75.0, 80.0 );
|
||||
AddRes( index, typeof( Cloth ), 1044286, 100, 1044287 );
|
||||
index = AddCraft( typeof( SmallBedEastDeed ), 1044290, 1044322, 94.7, 113.1, typeof( Log ), 1044041, 100, 1044351 );
|
||||
index = AddCraft(typeof(SmallBedEastDeed), 1044290, 1044322, 94.7, 119.8, typeof(Log), 1044041, 100, 1044351);
|
||||
AddSkill( index, SkillName.Tailoring, 75.0, 80.0 );
|
||||
AddRes( index, typeof( Cloth ), 1044286, 100, 1044287 );
|
||||
index = AddCraft( typeof( LargeBedSouthDeed ), 1044290,1044323, 94.7, 113.1, typeof( Log ), 1044041, 150, 1044351 );
|
||||
index = AddCraft(typeof(LargeBedSouthDeed), 1044290, 1044323, 94.7, 119.8, typeof(Log), 1044041, 150, 1044351);
|
||||
AddSkill( index, SkillName.Tailoring, 75.0, 80.0 );
|
||||
AddRes( index, typeof( Cloth ), 1044286, 150, 1044287 );
|
||||
index = AddCraft( typeof( LargeBedEastDeed ), 1044290, 1044324, 94.7, 113.1, typeof( Log ), 1044041, 150, 1044351 );
|
||||
index = AddCraft(typeof(LargeBedEastDeed), 1044290, 1044324, 94.7, 119.8, typeof(Log), 1044041, 150, 1044351);
|
||||
AddSkill( index, SkillName.Tailoring, 75.0, 80.0 );
|
||||
AddRes( index, typeof( Cloth ), 1044286, 150, 1044287 );
|
||||
AddCraft( typeof( DartBoardSouthDeed ), 1044290, 1044325, 15.7, 40.7, typeof( Log ), 1044041, 5, 1044351 );
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ namespace Server.Engines.Craft
|
|||
SetNeededExpansion( index, Expansion.SE );
|
||||
}
|
||||
|
||||
index = AddCraft( typeof( TribalPaint ), 1044496, 1040000, 80.0, 80.0, typeof( SackFlour ), 1044468, 1, 1044253 );
|
||||
index = AddCraft( typeof( TribalPaint ), 1044496, 1040000, Core.ML? 55.0 : 80.0, Core.ML? 105.0 : 80.0, typeof( SackFlour ), 1044468, 1, 1044253 );
|
||||
AddRes( index, typeof( TribalBerry ), 1046460, 1, 1044253 );
|
||||
|
||||
if ( Core.SE )
|
||||
|
|
|
|||
40
Scripts/Engines/Quests/Witch Apprentice/Items/HagCauldron.cs
Normal file
40
Scripts/Engines/Quests/Witch Apprentice/Items/HagCauldron.cs
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
using System;
|
||||
using Server;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class HagCauldron : BaseAddon
|
||||
{
|
||||
|
||||
[Constructable]
|
||||
public HagCauldron()
|
||||
{
|
||||
AddonComponent pot;
|
||||
pot = new AddonComponent(2420);
|
||||
AddComponent(pot, 0, 0, 0); //pot w/ support
|
||||
|
||||
AddonComponent fire;
|
||||
fire = new AddonComponent(4012); //fire pit
|
||||
fire.Light = LightType.Circle150;
|
||||
AddComponent(fire, 0, 0, 0);
|
||||
}
|
||||
|
||||
public HagCauldron( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
76
Scripts/Engines/Quests/Witch Apprentice/Items/HagStew.cs
Normal file
76
Scripts/Engines/Quests/Witch Apprentice/Items/HagStew.cs
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
using System;
|
||||
using Server;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class HagStew : BaseAddon
|
||||
{
|
||||
|
||||
[Constructable]
|
||||
public HagStew()
|
||||
{
|
||||
AddonComponent stew;
|
||||
stew = new AddonComponent(2416);
|
||||
stew.Name = "stew";
|
||||
stew.Visible = true;
|
||||
AddComponent(stew, 0, 0, -7); //stew
|
||||
}
|
||||
|
||||
public override void OnComponentUsed(AddonComponent stew, Mobile from)
|
||||
{
|
||||
if (!from.InRange(GetWorldLocation(), 2))
|
||||
from.SendMessage("You are too far away.");
|
||||
else
|
||||
{
|
||||
{
|
||||
stew.Visible = false;
|
||||
|
||||
BreadLoaf hagstew = new BreadLoaf(); //this decides your fillrate
|
||||
hagstew.Eat(from);
|
||||
|
||||
Timer m_timer = new ShowStew(stew);
|
||||
m_timer.Start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ShowStew : Timer
|
||||
{
|
||||
private AddonComponent stew;
|
||||
|
||||
public ShowStew(AddonComponent ac) : base(TimeSpan.FromSeconds(30))
|
||||
{
|
||||
stew = ac;
|
||||
Priority = TimerPriority.OneSecond;
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if ( stew.Visible == false )
|
||||
{
|
||||
Stop();
|
||||
stew.Visible = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public HagStew( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
154
Scripts/Gumps/ConfirmHouseResize.cs
Normal file
154
Scripts/Gumps/ConfirmHouseResize.cs
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Multis;
|
||||
using Server.Multis.Deeds;
|
||||
using Server.Network;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Gumps
|
||||
{
|
||||
public class ConfirmHouseResize : Gump
|
||||
{
|
||||
private Mobile m_Mobile;
|
||||
private BaseHouse m_House;
|
||||
private TempNoHousingRegion m_Temp;
|
||||
|
||||
public ConfirmHouseResize( Mobile mobile, BaseHouse house ) : base( 110, 100 )
|
||||
{
|
||||
m_Mobile = mobile;
|
||||
m_House = house;
|
||||
|
||||
mobile.CloseGump( typeof( ConfirmHouseResize ) );
|
||||
|
||||
Closable = false;
|
||||
|
||||
AddPage( 0 );
|
||||
|
||||
AddBackground( 0, 0, 420, 280, 0x13BE );
|
||||
AddImageTiled( 10, 10, 400, 20, 0xA40 );
|
||||
AddAlphaRegion( 10, 10, 400, 20 );
|
||||
AddHtmlLocalized( 10, 10, 400, 20, 1060635, 0x7800, false, false ); // <CENTER>WARNING</CENTER>
|
||||
AddImageTiled( 10, 40, 400, 200, 0xA40 );
|
||||
AddAlphaRegion( 10, 40, 400, 200 );
|
||||
|
||||
/* You are attempting to resize your house. You will be refunded the house's
|
||||
value directly to your bank box. All items in the house will *remain behind*
|
||||
and can be *freely picked up by anyone*. Once the house is demolished, however,
|
||||
only this account will be able to place on the land for one hour. This *will*
|
||||
circumvent the normal 7-day waiting period (if it applies to you). This action
|
||||
will not un-condemn any other houses on your account. If you have other,
|
||||
grandfathered houses, this action *WILL* condemn them. Are you sure you wish
|
||||
to continue?*/
|
||||
AddHtmlLocalized( 10, 40, 400, 200, 1080196, 0x7F00, false, true );
|
||||
|
||||
AddImageTiled( 10, 250, 400, 20, 0xA40 );
|
||||
AddAlphaRegion( 10, 250, 400, 20 );
|
||||
AddButton( 10, 250, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 );
|
||||
AddButton( 210, 250, 0xFA5, 0xFA7, 0, GumpButtonType.Reply, 0 );
|
||||
AddHtmlLocalized( 40, 250, 170, 20, 1011036, 0x7FFF, false, false ); // OKAY
|
||||
AddHtmlLocalized( 240, 250, 170, 20, 1011012, 0x7FFF, false, false ); // CANCEL
|
||||
|
||||
}
|
||||
|
||||
public override void OnResponse( NetState state, RelayInfo info )
|
||||
{
|
||||
if ( info.ButtonID == 1 && !m_House.Deleted )
|
||||
{
|
||||
if ( m_House.IsOwner( m_Mobile ) )
|
||||
{
|
||||
if ( m_House.MovingCrate != null || m_House.InternalizedVendors.Count > 0 )
|
||||
{
|
||||
m_Mobile.SendLocalizedMessage( 1080455 ); // You can not resize your house at this time. Please remove all items fom the moving crate and try again.
|
||||
return;
|
||||
}
|
||||
else if( !Guilds.Guild.NewGuildSystem && m_House.FindGuildstone() != null )
|
||||
{
|
||||
m_Mobile.SendLocalizedMessage( 501389 ); // You cannot redeed a house with a guildstone inside.
|
||||
return;
|
||||
}
|
||||
/*else if ( m_House.PlayerVendors.Count > 0 )
|
||||
{
|
||||
m_Mobile.SendLocalizedMessage( 503236 ); // You need to collect your vendor's belongings before moving.
|
||||
return;
|
||||
}*/
|
||||
else if ( m_House.HasRentedVendors && m_House.VendorInventories.Count > 0 )
|
||||
{
|
||||
m_Mobile.SendLocalizedMessage( 1062679 ); // You cannot do that that while you still have contract vendors or unclaimed contract vendor inventory in your house.
|
||||
return;
|
||||
}
|
||||
else if ( m_House.HasRentedVendors )
|
||||
{
|
||||
m_Mobile.SendLocalizedMessage( 1062680 ); // You cannot do that that while you still have contract vendors in your house.
|
||||
return;
|
||||
}
|
||||
else if ( m_House.VendorInventories.Count > 0 )
|
||||
{
|
||||
m_Mobile.SendLocalizedMessage( 1062681 ); // You cannot do that that while you still have unclaimed contract vendor inventory in your house.
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if ( m_Mobile.AccessLevel >= AccessLevel.GameMaster )
|
||||
{
|
||||
m_Mobile.SendMessage( "You do not get a refund for your house as you are not a player" );
|
||||
m_House.RemoveKeys(m_Mobile);
|
||||
m_House.Delete();
|
||||
}
|
||||
else
|
||||
{
|
||||
Item toGive = null;
|
||||
|
||||
if ( m_House.IsAosRules )
|
||||
{
|
||||
if ( m_House.Price > 0 )
|
||||
toGive = new BankCheck( m_House.Price );
|
||||
else
|
||||
toGive = m_House.GetDeed();
|
||||
}
|
||||
else
|
||||
{
|
||||
toGive = m_House.GetDeed();
|
||||
|
||||
if ( toGive == null && m_House.Price > 0 )
|
||||
toGive = new BankCheck( m_House.Price );
|
||||
}
|
||||
|
||||
if ( toGive != null )
|
||||
{
|
||||
BankBox box = m_Mobile.BankBox;
|
||||
|
||||
if ( box.TryDropItem( m_Mobile, toGive, false ) )
|
||||
{
|
||||
if ( toGive is BankCheck )
|
||||
m_Mobile.SendLocalizedMessage( 1060397, ( (BankCheck)toGive ).Worth.ToString() ); // ~1_AMOUNT~ gold has been deposited into your bank box.
|
||||
|
||||
m_House.RemoveKeys( m_Mobile );
|
||||
new TempNoHousingRegion( m_House, m_Mobile );
|
||||
m_House.Delete();
|
||||
}
|
||||
else
|
||||
{
|
||||
toGive.Delete();
|
||||
m_Mobile.SendLocalizedMessage( 500390 ); // Your bank box is full.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Mobile.SendMessage( "Unable to refund house." );
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Mobile.SendLocalizedMessage( 501320 ); // Only the house owner may do this.
|
||||
}
|
||||
}
|
||||
else if ( info.ButtonID == 0 )
|
||||
{
|
||||
m_Mobile.CloseGump( typeof( ConfirmHouseResize ) );
|
||||
m_Mobile.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Customize, m_Mobile, m_House ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1220,10 +1220,16 @@ namespace Server.Gumps
|
|||
{
|
||||
if ( isOwner && m_House.MovingCrate == null && m_House.InternalizedVendors.Count == 0 )
|
||||
{
|
||||
if( !Guilds.Guild.NewGuildSystem && m_House.FindGuildstone() != null ) {
|
||||
if( !Guilds.Guild.NewGuildSystem && m_House.FindGuildstone() != null )
|
||||
{
|
||||
from.SendLocalizedMessage( 501389 ); // You cannot redeed a house with a guildstone inside.
|
||||
}
|
||||
else {
|
||||
else if ( Core.ML && from.AccessLevel < AccessLevel.GameMaster && DateTime.Now <= m_House.BuiltOn.AddHours ( 1 ) )
|
||||
{
|
||||
from.SendLocalizedMessage( 1080178 ); // You must wait one hour between each house demolition.
|
||||
}
|
||||
else
|
||||
{
|
||||
from.CloseGump( typeof( HouseDemolishGump ) );
|
||||
from.SendGump( new HouseDemolishGump( from, m_House ) );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1614,7 +1614,8 @@ namespace Server.Items
|
|||
|
||||
if( Quality == ArmorQuality.Exceptional )
|
||||
{
|
||||
DistributeBonuses( (tool is BaseRunicTool ? 6 : Core.SE ? 15 : 14) ); // Not sure since when, but right now 15 points are added, not 14.
|
||||
if ( !( Core.ML && this is BaseShield )) // Guessed Core.ML removed exceptional resist bonuses from crafted shields
|
||||
DistributeBonuses( (tool is BaseRunicTool ? 6 : Core.SE ? 15 : 14) ); // Not sure since when, but right now 15 points are added, not 14.
|
||||
|
||||
if( Core.ML && !(this is BaseShield) )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -207,8 +207,10 @@ namespace Server.Items
|
|||
Effects.SendLocationParticles( EffectItem.Create( Location, Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5022 );
|
||||
Effects.PlaySound( Location, Map, 0x1F5 );
|
||||
|
||||
if ( !this.TrapOnOpen || !ExecuteTrap( from ) )
|
||||
base.DisplayTo( from );
|
||||
if( this.TrapOnOpen )
|
||||
{
|
||||
ExecuteTrap( from );
|
||||
}
|
||||
}
|
||||
|
||||
public override void Open( Mobile from )
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ using Server.Network;
|
|||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class Dices : Item
|
||||
public class Dices : Item, ITelekinesisable
|
||||
{
|
||||
[Constructable]
|
||||
public Dices() : base( 0xFA7 )
|
||||
|
|
@ -21,6 +21,19 @@ namespace Server.Items
|
|||
if ( !from.InRange( this.GetWorldLocation(), 2 ) )
|
||||
return;
|
||||
|
||||
Roll( from );
|
||||
}
|
||||
|
||||
public void OnTelekinesis( Mobile from )
|
||||
{
|
||||
Effects.SendLocationParticles( EffectItem.Create( Location, Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5022 );
|
||||
Effects.PlaySound( Location, Map, 0x1F5 );
|
||||
|
||||
Roll( from );
|
||||
}
|
||||
|
||||
public void Roll( Mobile from )
|
||||
{
|
||||
this.PublicOverheadMessage( MessageType.Regular, 0, false, string.Format( "*{0} rolls {1}, {2}*", from.Name, Utility.Random( 1, 6 ), Utility.Random( 1, 6 ) ) );
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,6 +53,11 @@ namespace Server.Items
|
|||
/// Was the owner criminal when he died?
|
||||
/// </summary>
|
||||
Criminal = 0x00000020,
|
||||
|
||||
/// <summary>
|
||||
/// Has this corpse been animated?
|
||||
/// </summary>
|
||||
Animated = 0x00000040,
|
||||
}
|
||||
|
||||
public class Corpse : Container, ICarvable
|
||||
|
|
@ -78,6 +83,9 @@ namespace Server.Items
|
|||
private HairInfo m_Hair; // This contains the hair of the owner
|
||||
private FacialHairInfo m_FacialHair; // This contains the facial hair of the owner
|
||||
|
||||
// For Forensics Evaluation
|
||||
public string m_Forensicist; // Name of the first PlayerMobile who used Forensic Evaluation on the corpse
|
||||
|
||||
public static readonly TimeSpan MonsterLootRightSacrifice = TimeSpan.FromMinutes( 2.0 );
|
||||
|
||||
public static readonly TimeSpan InstancedCorpseTime = TimeSpan.FromMinutes( 3.0 );
|
||||
|
|
@ -289,6 +297,13 @@ namespace Server.Items
|
|||
set { SetFlag( CorpseFlag.Channeled, value ); }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public bool Animated
|
||||
{
|
||||
get { return GetFlag( CorpseFlag.Animated ); }
|
||||
set { SetFlag( CorpseFlag.Animated, value ); }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public AccessLevel AccessLevel
|
||||
{
|
||||
|
|
|
|||
|
|
@ -268,13 +268,14 @@ namespace Server.Items
|
|||
AosWeaponAttributes secondary = weapon.WeaponAttributes;
|
||||
|
||||
m_Props.SetAll( false );
|
||||
m_Props.Set(0, true); // no lower stat requirements for weapons
|
||||
|
||||
if ( weapon is BaseRanged )
|
||||
m_Props.Set( 2, true ); // ranged weapons cannot be ubws or mageweapon
|
||||
|
||||
for ( int i = 0; i < attributeCount; ++i )
|
||||
{
|
||||
int random = GetUniqueRandom( 25 );
|
||||
int random = GetUniqueRandom( 24 );
|
||||
|
||||
if ( random == -1 )
|
||||
break;
|
||||
|
|
@ -329,15 +330,14 @@ namespace Server.Items
|
|||
case 13: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitLowerDefend, 2, 50, 2 ); break;
|
||||
case 14: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitLeechMana, 2, 50, 2 ); break;
|
||||
case 15: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitLeechStam, 2, 50, 2 ); break;
|
||||
case 16: ApplyAttribute( secondary, min, max, AosWeaponAttribute.LowerStatReq, 10, 100, 10 ); break;
|
||||
case 17: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistPhysicalBonus, 1, 15 ); break;
|
||||
case 18: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistFireBonus, 1, 15 ); break;
|
||||
case 19: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistColdBonus, 1, 15 ); break;
|
||||
case 20: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistPoisonBonus, 1, 15 ); break;
|
||||
case 21: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistEnergyBonus, 1, 15 ); break;
|
||||
case 22: ApplyAttribute( secondary, min, max, AosWeaponAttribute.DurabilityBonus, 10, 100, 10 ); break;
|
||||
case 23: weapon.Slayer = GetRandomSlayer(); break;
|
||||
case 24: GetElementalDamages( weapon ); break;
|
||||
case 16: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistPhysicalBonus, 1, 15 ); break;
|
||||
case 17: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistFireBonus, 1, 15 ); break;
|
||||
case 18: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistColdBonus, 1, 15 ); break;
|
||||
case 19: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistPoisonBonus, 1, 15 ); break;
|
||||
case 20: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistEnergyBonus, 1, 15 ); break;
|
||||
case 21: ApplyAttribute( secondary, min, max, AosWeaponAttribute.DurabilityBonus, 10, 100, 10 ); break;
|
||||
case 22: weapon.Slayer = GetRandomSlayer(); break;
|
||||
case 23: GetElementalDamages( weapon ); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -473,13 +473,16 @@ namespace Server.Items
|
|||
int baseCount = ( isShield ? 7 : 20 );
|
||||
int baseOffset = ( isShield ? 0 : 4 );
|
||||
|
||||
if ( !isShield && armor.MeditationAllowance == ArmorMeditationAllowance.All )
|
||||
m_Props.Set( 3, true ); // remove mage armor from possible properties
|
||||
if ( armor.Resource >= CraftResource.RegularLeather && armor.Resource <= CraftResource.BarbedLeather )
|
||||
{
|
||||
m_Props.Set( 0, true ); // remove lower requirements from possible properties for leather armor
|
||||
m_Props.Set( 2, true ); // remove durability bonus from possible properties
|
||||
if ( !isShield ) {
|
||||
if (armor.MeditationAllowance == ArmorMeditationAllowance.All ) {
|
||||
m_Props.Set( 3, true ); // remove mage armor from possible properties
|
||||
}
|
||||
m_Props.Set(0, true); // no lower stat requirements for any armor but shields
|
||||
}
|
||||
|
||||
if ( armor.Resource >= CraftResource.RegularLeather && armor.Resource <= CraftResource.BarbedLeather )
|
||||
m_Props.Set( 2, true ); // remove durability bonus from possible properties
|
||||
|
||||
if ( armor.RequiredRace == Race.Elf )
|
||||
m_Props.Set( 7, true ); // elves inherently have night sight and elf only armor doesn't get night sight as a mod
|
||||
|
||||
|
|
@ -547,10 +550,11 @@ namespace Server.Items
|
|||
AosElementAttributes resists = hat.Resistances;
|
||||
|
||||
m_Props.SetAll( false );
|
||||
m_Props.Set(0, true); // no lower stat requirements for hats
|
||||
|
||||
for ( int i = 0; i < attributeCount; ++i )
|
||||
{
|
||||
int random = GetUniqueRandom( 19 );
|
||||
int random = GetUniqueRandom( 18 );
|
||||
|
||||
if ( random == -1 )
|
||||
break;
|
||||
|
|
@ -568,14 +572,13 @@ namespace Server.Items
|
|||
case 8: ApplyAttribute( primary, min, max, AosAttribute.LowerManaCost, 1, 8 ); break;
|
||||
case 9: ApplyAttribute( primary, min, max, AosAttribute.LowerRegCost, 1, 20 ); break;
|
||||
case 10: ApplyAttribute( primary, min, max, AosAttribute.Luck, 1, 100 ); break;
|
||||
case 11: ApplyAttribute( secondary, min, max, AosArmorAttribute.LowerStatReq, 10, 100, 10 ); break;
|
||||
case 12: ApplyAttribute( secondary, min, max, AosArmorAttribute.SelfRepair, 1, 5 ); break;
|
||||
case 13: ApplyAttribute( secondary, min, max, AosArmorAttribute.DurabilityBonus, 10, 100, 10 ); break;
|
||||
case 14: ApplyAttribute( resists, min, max, AosElementAttribute.Physical, 1, 15 ); break;
|
||||
case 15: ApplyAttribute( resists, min, max, AosElementAttribute.Fire, 1, 15 ); break;
|
||||
case 16: ApplyAttribute( resists, min, max, AosElementAttribute.Cold, 1, 15 ); break;
|
||||
case 17: ApplyAttribute( resists, min, max, AosElementAttribute.Poison, 1, 15 ); break;
|
||||
case 18: ApplyAttribute( resists, min, max, AosElementAttribute.Energy, 1, 15 ); break;
|
||||
case 11: ApplyAttribute( secondary, min, max, AosArmorAttribute.SelfRepair, 1, 5 ); break;
|
||||
case 12: ApplyAttribute( secondary, min, max, AosArmorAttribute.DurabilityBonus, 10, 100, 10 ); break;
|
||||
case 13: ApplyAttribute( resists, min, max, AosElementAttribute.Physical, 1, 15 ); break;
|
||||
case 14: ApplyAttribute( resists, min, max, AosElementAttribute.Fire, 1, 15 ); break;
|
||||
case 15: ApplyAttribute( resists, min, max, AosElementAttribute.Cold, 1, 15 ); break;
|
||||
case 16: ApplyAttribute( resists, min, max, AosElementAttribute.Poison, 1, 15 ); break;
|
||||
case 17: ApplyAttribute( resists, min, max, AosElementAttribute.Energy, 1, 15 ); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -595,6 +598,7 @@ namespace Server.Items
|
|||
AosSkillBonuses skills = jewelry.SkillBonuses;
|
||||
|
||||
m_Props.SetAll( false );
|
||||
m_Props.Set(0, true); // no lower stat requirements for weapons
|
||||
|
||||
for ( int i = 0; i < attributeCount; ++i )
|
||||
{
|
||||
|
|
@ -647,6 +651,7 @@ namespace Server.Items
|
|||
AosSkillBonuses skills = spellbook.SkillBonuses;
|
||||
|
||||
m_Props.SetAll( false );
|
||||
m_Props.Set(0, true); // no lower stat requirements for weapons
|
||||
|
||||
for ( int i = 0; i < attributeCount; ++i )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -39,4 +39,42 @@ namespace Server.Items
|
|||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class TinkersTools : BaseTool
|
||||
{
|
||||
public override CraftSystem CraftSystem { get { return DefTinkering.CraftSystem; } }
|
||||
|
||||
[Constructable]
|
||||
public TinkersTools()
|
||||
: base(0x1EBC)
|
||||
{
|
||||
Weight = 1.0;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public TinkersTools(int uses)
|
||||
: base(uses, 0x1EBC)
|
||||
{
|
||||
Weight = 1.0;
|
||||
}
|
||||
|
||||
public TinkersTools(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -81,15 +81,18 @@ namespace Server.Items
|
|||
{
|
||||
if ( _Skills.Count == 0 )
|
||||
{
|
||||
switch ( Core.Expansion )
|
||||
_Skills.AddRange( m_Skills );
|
||||
if (Core.AOS)
|
||||
{
|
||||
case Expansion.ML: _Skills.Add( SkillName.Spellweaving ); goto case Expansion.SE;
|
||||
case Expansion.SE: _Skills.AddRange( m_SESkills ); goto case Expansion.AOS;
|
||||
case Expansion.AOS: _Skills.AddRange( m_AOSSkills ); goto default;
|
||||
default: _Skills.AddRange( m_Skills ); break;
|
||||
_Skills.AddRange( m_AOSSkills );
|
||||
if (Core.SE)
|
||||
{
|
||||
_Skills.AddRange( m_SESkills );
|
||||
if (Core.ML)
|
||||
_Skills.Add( SkillName.Spellweaving );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return _Skills;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -140,6 +140,9 @@ namespace Server
|
|||
|
||||
AOS.Damage( m_Mobile, m_From, damage, 0, 0, 0, 100, 0 );
|
||||
|
||||
if ( 0.60 <= Utility.RandomDouble() ) // OSI: randomly revealed between first and third damage tick, guessing 60% chance
|
||||
m_Mobile.RevealingAction();
|
||||
|
||||
if ( (m_Index % m_Poison.m_MessageInterval) == 0 )
|
||||
m_Mobile.OnPoisoned( m_From, m_Poison, m_Poison );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1956,16 +1956,19 @@ namespace Server.Mobiles
|
|||
delay -= 0.075;
|
||||
}
|
||||
|
||||
double offset = (double)m_Mobile.Hits / m_Mobile.HitsMax;
|
||||
if ( m_Mobile.ReduceSpeedWithDamage || m_Mobile.IsSubdued )
|
||||
{
|
||||
double offset = (double) m_Mobile.Hits / m_Mobile.HitsMax;
|
||||
|
||||
if( offset < 0.0 )
|
||||
offset = 0.0;
|
||||
else if( offset > 1.0 )
|
||||
offset = 1.0;
|
||||
if ( offset < 0.0 )
|
||||
offset = 0.0;
|
||||
else if ( offset > 1.0 )
|
||||
offset = 1.0;
|
||||
|
||||
offset = 1.0 - offset;
|
||||
offset = 1.0 - offset;
|
||||
|
||||
delay += (offset * 0.8);
|
||||
delay += ( offset * 0.8 );
|
||||
}
|
||||
|
||||
if( delay < 0.0 )
|
||||
delay = 0.0;
|
||||
|
|
|
|||
|
|
@ -125,13 +125,13 @@ namespace Server
|
|||
{
|
||||
typeof( Barracoon ), typeof( Mephitis ), typeof( Neira ),
|
||||
typeof( Rikktor ), typeof( Semidar ), typeof( EnergyVortex ),
|
||||
typeof( Beetle ), typeof( Pixie ), typeof( SilverSerpent ),
|
||||
typeof( EliteNinja ), typeof( Pixie ), typeof( SilverSerpent ),
|
||||
typeof( VorpalBunny ), typeof( FleshRenderer ), typeof( KhaldunRevenant ),
|
||||
typeof( FactionDragoon ), typeof( FactionKnight ), typeof( FactionPaladin ),
|
||||
typeof( FactionHenchman ), typeof( FactionMercenary ), typeof( FactionNecromancer ),
|
||||
typeof( FactionSorceress ), typeof( FactionWizard ), typeof( FactionBerserker ),
|
||||
typeof( FactionPaladin ), typeof( Leviathan ), typeof( FireBeetle ),
|
||||
typeof( FanDancer ), typeof( EliteNinja )
|
||||
typeof( FanDancer )
|
||||
} ),
|
||||
/* Medium */
|
||||
new SpeedInfo( 0.25, 0.5, new Type[]
|
||||
|
|
@ -206,7 +206,7 @@ namespace Server
|
|||
typeof( Kappa ), typeof( KazeKemono ), typeof( DeathwatchBeetle ),
|
||||
typeof( TsukiWolf ), typeof( YomotsuElder ), typeof( YomotsuPriest ),
|
||||
typeof( YomotsuWarrior ), typeof( RevenantLion ), typeof( Oni ),
|
||||
typeof( Gaman ), typeof( Crane )
|
||||
typeof( Gaman ), typeof( Crane ), typeof( Beetle )
|
||||
} )
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,15 +11,18 @@ namespace Server.Mobiles
|
|||
[CorpseName( "a giant beetle corpse" )]
|
||||
public class Beetle : BaseMount
|
||||
{
|
||||
public virtual double BoostedSpeed{ get{ return 0.1; } }
|
||||
|
||||
[Constructable]
|
||||
public Beetle() : this( "a giant beetle" )
|
||||
{
|
||||
}
|
||||
|
||||
public override bool SubdueBeforeTame{ get{ return true; } } // Must be beaten into submission
|
||||
public override bool ReduceSpeedWithDamage{ get{ return false; } }
|
||||
|
||||
[Constructable]
|
||||
public Beetle( string name ) : base( name, 0x317, 0x3EBC, AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
public Beetle( string name ) : base( name, 0x317, 0x3EBC, AIType.AI_Melee, FightMode.Closest, 10, 1, 0.25, 0.5 )
|
||||
{
|
||||
SetStr( 300 );
|
||||
SetDex( 100 );
|
||||
|
|
@ -86,12 +89,22 @@ namespace Server.Mobiles
|
|||
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
|
||||
// TODO: Speed boost when hit by magic.
|
||||
|
||||
public Beetle( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnHarmfulSpell( Mobile from )
|
||||
{
|
||||
if ( !Controlled && ControlMaster == null )
|
||||
CurrentSpeed = BoostedSpeed;
|
||||
}
|
||||
|
||||
public override void OnCombatantChange()
|
||||
{
|
||||
if ( Combatant == null && !Controlled && ControlMaster == null )
|
||||
CurrentSpeed = PassiveSpeed;
|
||||
}
|
||||
|
||||
#region Pack Animal Methods
|
||||
public override bool OnBeforeDeath()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -466,6 +466,8 @@ namespace Server.Mobiles
|
|||
public virtual bool AllowFemaleTamer{ get{ return true; } }
|
||||
public virtual bool SubdueBeforeTame{ get{ return false; } }
|
||||
public virtual bool StatLossAfterTame{ get{ return SubdueBeforeTame; } }
|
||||
public virtual bool ReduceSpeedWithDamage{ get{ return true; } }
|
||||
public virtual bool IsSubdued{ get{ return SubdueBeforeTame && ( Hits < ( HitsMax / 10 ) ); } }
|
||||
|
||||
public virtual bool Commandable{ get{ return true; } }
|
||||
|
||||
|
|
@ -1301,6 +1303,10 @@ namespace Server.Mobiles
|
|||
{
|
||||
}
|
||||
|
||||
public virtual void OnHarmfulSpell( Mobile from )
|
||||
{
|
||||
}
|
||||
|
||||
#region Alter[...]Damage From/To
|
||||
|
||||
public virtual void AlterDamageScalarFrom( Mobile caster, ref double scalar )
|
||||
|
|
@ -1341,8 +1347,11 @@ namespace Server.Mobiles
|
|||
int hides = Hides;
|
||||
int scales = Scales;
|
||||
|
||||
if ( (feathers == 0 && wool == 0 && meat == 0 && hides == 0 && scales == 0) || Summoned || IsBonded )
|
||||
if ( (feathers == 0 && wool == 0 && meat == 0 && hides == 0 && scales == 0) || Summoned || IsBonded || corpse.Animated )
|
||||
{
|
||||
if ( corpse.Animated )
|
||||
corpse.SendLocalizedMessageTo( from, 500464 ); // Use this on corpses to carve away meat and hide
|
||||
else
|
||||
from.SendLocalizedMessage( 500485 ); // You see nothing useful to carve from the corpse.
|
||||
}
|
||||
else
|
||||
|
|
@ -2067,7 +2076,7 @@ namespace Server.Mobiles
|
|||
}
|
||||
}
|
||||
|
||||
if ( happier )
|
||||
/* if ( happier )*/ // looks like in OSI pets say they are happier even if they are at maximum loyalty
|
||||
SayTo( from, 502060 ); // Your pet looks happier.
|
||||
|
||||
if ( Body.IsAnimal )
|
||||
|
|
|
|||
|
|
@ -42,8 +42,8 @@ namespace Server.Mobiles
|
|||
SetSkill( SkillName.Tactics, 110.0, 140.0 );
|
||||
SetSkill( SkillName.Wrestling, 115.0, 145.0 );
|
||||
|
||||
Fame = 55000;
|
||||
Karma = -55000;
|
||||
Fame = 22000;
|
||||
Karma = -15000;
|
||||
|
||||
VirtualArmor = 60;
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ namespace Server.Mobiles
|
|||
{
|
||||
public override bool SubdueBeforeTame{ get{ return true; } } // Must be beaten into submission
|
||||
public override bool StatLossAfterTame{ get{ return true; } }
|
||||
public virtual double BoostedSpeed{ get{ return 0.1; } }
|
||||
public override bool ReduceSpeedWithDamage{ get{ return false; } }
|
||||
|
||||
[Constructable]
|
||||
public FireBeetle() : base( "a fire beetle", 0xA9, 0x3E95, AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
|
|
@ -48,6 +50,18 @@ namespace Server.Mobiles
|
|||
Hue = 0x489;
|
||||
}
|
||||
|
||||
public override void OnHarmfulSpell( Mobile from )
|
||||
{
|
||||
if ( !Controlled && ControlMaster == null )
|
||||
CurrentSpeed = BoostedSpeed;
|
||||
}
|
||||
|
||||
public override void OnCombatantChange()
|
||||
{
|
||||
if ( Combatant == null && !Controlled && ControlMaster == null )
|
||||
CurrentSpeed = PassiveSpeed;
|
||||
}
|
||||
|
||||
public override bool OverrideBondingReqs()
|
||||
{
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -2291,9 +2291,6 @@ namespace Server.Mobiles
|
|||
}
|
||||
}
|
||||
|
||||
if ( m_InsuranceCost > 0 )
|
||||
SendLocalizedMessage( 1060398, m_InsuranceCost.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your bank box.
|
||||
|
||||
if ( m_InsuranceAward is PlayerMobile )
|
||||
{
|
||||
PlayerMobile pm = (PlayerMobile)m_InsuranceAward;
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ namespace Server.Mobiles
|
|||
Add( new GenericBuyInfo( typeof( KeyRing ), 8, 20, 0x1010, 0 ) );
|
||||
Add( new GenericBuyInfo( typeof( Lockpick ), 12, 20, 0x14FC, 0 ) );
|
||||
|
||||
Add( new GenericBuyInfo( typeof( TinkerTools ), 7, 20, 0x1EB8, 0 ) );
|
||||
Add( new GenericBuyInfo( typeof( TinkersTools ), 7, 20, 0x1EBC, 0 ) );
|
||||
Add( new GenericBuyInfo( typeof( Board ), 3, 20, 0x1BD7, 0 ) );
|
||||
Add( new GenericBuyInfo( typeof( IronIngot ), 5, 16, 0x1BF2, 0 ) );
|
||||
Add( new GenericBuyInfo( typeof( SewingKit ), 3, 20, 0xF9D, 0 ) );
|
||||
|
|
|
|||
|
|
@ -201,7 +201,7 @@ namespace Server.Multis
|
|||
return;
|
||||
|
||||
if ( Core.ML )
|
||||
new TempNoHousingRegion( this );
|
||||
new TempNoHousingRegion( this, null );
|
||||
|
||||
KillVendors();
|
||||
Delete();
|
||||
|
|
@ -3760,17 +3760,43 @@ namespace Server.Multis
|
|||
|
||||
public class TempNoHousingRegion : BaseRegion
|
||||
{
|
||||
public TempNoHousingRegion( BaseHouse house )
|
||||
private Mobile m_RegionOwner;
|
||||
|
||||
public TempNoHousingRegion( BaseHouse house, Mobile regionowner )
|
||||
: base( null, house.Map, Region.DefaultPriority, house.Region.Area )
|
||||
{
|
||||
Register();
|
||||
|
||||
m_RegionOwner = regionowner;
|
||||
|
||||
Timer.DelayCall( house.RestrictedPlacingTime, Unregister );
|
||||
}
|
||||
|
||||
public bool CheckAccount( Mobile mobCheck, Mobile accCheck )
|
||||
{
|
||||
if ( accCheck != null )
|
||||
{
|
||||
Account a = accCheck.Account as Account;
|
||||
|
||||
if ( a != null )
|
||||
{
|
||||
for ( int i = 0; i < a.Length; ++i )
|
||||
{
|
||||
if ( a[i] == mobCheck )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool AllowHousing( Mobile from, Point3D p )
|
||||
{
|
||||
return false;
|
||||
if ( from == m_RegionOwner || CheckAccount( from, m_RegionOwner ) )
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -127,8 +127,12 @@ namespace Server.Multis
|
|||
{
|
||||
if ( m_Owner.IsFriend( m ) && m.AccessLevel < AccessLevel.GameMaster )
|
||||
{
|
||||
m_Owner.RefreshDecay();
|
||||
m.SendLocalizedMessage( 501293 ); // Welcome back to the house, friend!
|
||||
#region Mondain's Legacy
|
||||
if ( ( Core.ML && m_Owner.IsOwner( m ) ) || !Core.ML )
|
||||
m_Owner.RefreshDecay();
|
||||
#endregion
|
||||
if ( !Core.AOS )
|
||||
m.SendLocalizedMessage( 501293 ); // Welcome back to the house, friend!
|
||||
}
|
||||
|
||||
if ( m_Owner.IsAosRules )
|
||||
|
|
|
|||
|
|
@ -222,9 +222,7 @@ namespace Server.Regions
|
|||
base.OnSpeech( e );
|
||||
|
||||
Mobile from = e.Mobile;
|
||||
|
||||
if ( !from.Alive || !m_House.IsInside( from ) || !m_House.IsActive )
|
||||
return;
|
||||
Item sign = m_House.Sign;
|
||||
|
||||
bool isOwner = m_House.IsOwner( from );
|
||||
bool isCoOwner = isOwner || m_House.IsCoOwner( from );
|
||||
|
|
@ -232,8 +230,36 @@ namespace Server.Regions
|
|||
|
||||
if ( !isFriend )
|
||||
return;
|
||||
|
||||
if ( !from.Alive )
|
||||
return;
|
||||
|
||||
if ( Core.ML && Insensitive.Equals( e.Speech, "I wish to resize my house" ) )
|
||||
{
|
||||
if ( from.Map != sign.Map || !from.InRange( sign, 0 ) )
|
||||
{
|
||||
from.SendLocalizedMessage( 500295 ); // you are too far away to do that.
|
||||
}
|
||||
else if ( DateTime.Now <= m_House.BuiltOn.AddHours ( 1 ) )
|
||||
{
|
||||
from.SendLocalizedMessage( 1080178 ); // You must wait one hour between each house demolition.
|
||||
}
|
||||
else if ( isOwner )
|
||||
{
|
||||
from.CloseGump( typeof( ConfirmHouseResize ) );
|
||||
from.CloseGump( typeof( HouseGumpAOS ) );
|
||||
from.SendGump( new ConfirmHouseResize( from, m_House ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendLocalizedMessage( 501320 ); // Only the house owner may do this.
|
||||
}
|
||||
}
|
||||
|
||||
if ( !m_House.IsInside( from ) || !m_House.IsActive )
|
||||
return;
|
||||
|
||||
if ( e.HasKeyword( 0x33 ) ) // remove thyself
|
||||
else if ( e.HasKeyword( 0x33 ) ) // remove thyself
|
||||
{
|
||||
if ( isFriend )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ namespace Server.SkillHandlers
|
|||
|
||||
public static bool MustBeSubdued( BaseCreature bc )
|
||||
{
|
||||
if (bc.Owners.Count > 0) { return false; } //Checks to see if the animal has been tamed before
|
||||
return bc.SubdueBeforeTame && (bc.Hits > (bc.HitsMax / 10));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ namespace Server.SkillHandlers
|
|||
else
|
||||
number = 500402; // You are too far away to beg from her.
|
||||
}
|
||||
else if ( from.Mounted ) // If we're on a mount, who would give us money?
|
||||
else if (!( Core.ML ) && from.Mounted ) // If we're on a mount, who would give us money? TODO: guessed it's removed since ML
|
||||
{
|
||||
number = 500404; // They seem unwilling to give you any money.
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ namespace Server.SkillHandlers
|
|||
m.Target = new ForensicTarget();
|
||||
m.RevealingAction();
|
||||
|
||||
m.SendLocalizedMessage( 500906 ); // What would you like to evaluate?
|
||||
m.SendLocalizedMessage( 501000 ); // Show me the crime.
|
||||
|
||||
return TimeSpan.FromSeconds( 1.0 );
|
||||
}
|
||||
|
|
@ -53,8 +53,13 @@ namespace Server.SkillHandlers
|
|||
{
|
||||
Corpse c = (Corpse)target;
|
||||
|
||||
if ( c.m_Forensicist != null )
|
||||
from.SendLocalizedMessage( 1042750, c.m_Forensicist ) ; // The forensicist ~1_NAME~ has already discovered that:
|
||||
else
|
||||
c.m_Forensicist = from.Name;
|
||||
|
||||
if ( ((Body)c.Amount).IsHuman )
|
||||
c.LabelTo( from, 1042751, ( c.Killer == null ? "no one" : c.Killer.Name ) );//This person was killed by ~1_KILLER_NAME~
|
||||
from.SendLocalizedMessage( 1042751, ( c.Killer == null ? "no one" : c.Killer.Name ) );//This person was killed by ~1_KILLER_NAME~
|
||||
|
||||
if ( c.Looters.Count > 0 )
|
||||
{
|
||||
|
|
@ -66,11 +71,11 @@ namespace Server.SkillHandlers
|
|||
sb.Append( ((Mobile)c.Looters[i]).Name );
|
||||
}
|
||||
|
||||
c.LabelTo( from, 1042752, sb.ToString() );//This body has been distrubed by ~1_PLAYER_NAMES~
|
||||
from.SendLocalizedMessage( 1042752, sb.ToString() );//This body has been distrubed by ~1_PLAYER_NAMES~
|
||||
}
|
||||
else
|
||||
{
|
||||
c.LabelTo( from, 501002 );//The corpse has not be desecrated.
|
||||
from.SendLocalizedMessage( 501002 );//The corpse has not be desecrated.
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -97,6 +97,12 @@ namespace Server.Spells
|
|||
contexts.Remove( m );
|
||||
}
|
||||
|
||||
public void HarmfulSpell( Mobile m )
|
||||
{
|
||||
if ( m is BaseCreature )
|
||||
((BaseCreature)m).OnHarmfulSpell( m_Caster );
|
||||
}
|
||||
|
||||
public Spell( Mobile caster, Item scroll, SpellInfo info )
|
||||
{
|
||||
m_Caster = caster;
|
||||
|
|
|
|||
|
|
@ -555,18 +555,19 @@ namespace Server.Spells
|
|||
new TravelValidator( IsTokunoDungeon ),
|
||||
new TravelValidator( IsLampRoom ),
|
||||
new TravelValidator( IsGuardianRoom ),
|
||||
new TravelValidator( IsHeartwood ),
|
||||
};
|
||||
|
||||
private static bool[,] m_Rules = new bool[,]
|
||||
{
|
||||
/*T2A(Fel) Ilshenar Wind(Tram), Wind(Fel), Dungeons(Fel), Solen(Tram), Solen(Fel), CrystalCave(Malas), Gauntlet(Malas), Gauntlet(Ferry), Stronghold, ChampionSpawn, Dungeons(Tokuno[Malas]), LampRoom(Doom), GuardianRoom(Doom) */
|
||||
/* Recall From */ { false, true, true, false, false, true, false, false, false, false, true, false, true, false, false },
|
||||
/* Recall To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
|
||||
/* Gate From */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
|
||||
/* Gate To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
|
||||
/* Mark In */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
|
||||
/* Tele From */ { true, true, true, true, true, true, true, false, true, true, false, true, true, true, true },
|
||||
/* Tele To */ { true, true, true, true, true, true, true, false, true, false, false, true, true, true, true },
|
||||
/*T2A(Fel) Ilshenar Wind(Tram), Wind(Fel), Dungeons(Fel), Solen(Tram), Solen(Fel), CrystalCave(Malas), Gauntlet(Malas), Gauntlet(Ferry), Stronghold, ChampionSpawn, Dungeons(Tokuno[Malas]), LampRoom(Doom), GuardianRoom(Doom), Heartwood */
|
||||
/* Recall From */ { false, true, true, false, false, true, false, false, false, false, true, false, true, false, false, false },
|
||||
/* Recall To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
|
||||
/* Gate From */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
|
||||
/* Gate To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
|
||||
/* Mark In */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
|
||||
/* Tele From */ { true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, false },
|
||||
/* Tele To */ { true, true, true, true, true, true, true, false, true, false, false, true, true, true, true, false },
|
||||
};
|
||||
|
||||
public static bool CheckTravel( Mobile caster, TravelCheckType type )
|
||||
|
|
@ -778,6 +779,13 @@ namespace Server.Spells
|
|||
return ( x >= 356 && y >= 5 && x < 375 && y < 25 );
|
||||
}
|
||||
|
||||
public static bool IsHeartwood( Map map, Point3D loc )
|
||||
{
|
||||
int x = loc.X, y = loc.Y;
|
||||
|
||||
return (map == Map.Trammel || map == Map.Felucca) && (x >= 6911 && y >= 254 && x < 7167 && y < 511);
|
||||
}
|
||||
|
||||
public static bool IsInvalid( Map map, Point3D loc )
|
||||
{
|
||||
if( map == null || map == Map.Internal )
|
||||
|
|
@ -918,7 +926,12 @@ namespace Server.Spells
|
|||
}
|
||||
|
||||
if( target is BaseCreature && from != null && delay == TimeSpan.Zero )
|
||||
((BaseCreature)target).OnDamagedBySpell( from );
|
||||
{
|
||||
BaseCreature c = (BaseCreature) target;
|
||||
|
||||
c.OnHarmfulSpell( from );
|
||||
c.OnDamagedBySpell( from );
|
||||
}
|
||||
}
|
||||
|
||||
public static void Damage( Spell spell, Mobile target, double damage, int phys, int fire, int cold, int pois, int nrgy )
|
||||
|
|
@ -979,7 +992,12 @@ namespace Server.Spells
|
|||
}
|
||||
|
||||
if( target is BaseCreature && from != null && delay == TimeSpan.Zero )
|
||||
((BaseCreature)target).OnDamagedBySpell( from );
|
||||
{
|
||||
BaseCreature c = (BaseCreature) target;
|
||||
|
||||
c.OnHarmfulSpell( from );
|
||||
c.OnDamagedBySpell( from );
|
||||
}
|
||||
}
|
||||
|
||||
public static void DoLeech( int damageGiven, Mobile from, Mobile target )
|
||||
|
|
@ -1097,7 +1115,12 @@ namespace Server.Spells
|
|||
WeightOverloading.DFA = DFAlgorithm.Standard;
|
||||
|
||||
if( m_Target is BaseCreature && m_From != null )
|
||||
((BaseCreature)m_Target).OnDamagedBySpell( m_From );
|
||||
{
|
||||
BaseCreature c = (BaseCreature) m_Target;
|
||||
|
||||
c.OnHarmfulSpell( m_From );
|
||||
c.OnDamagedBySpell( m_From );
|
||||
}
|
||||
|
||||
if( m_Spell != null )
|
||||
m_Spell.RemoveDelayedDamageContext( m_Target );
|
||||
|
|
|
|||
|
|
@ -32,12 +32,7 @@ namespace Server.Spells.Chivalry
|
|||
if ( !base.CheckCast() )
|
||||
return false;
|
||||
|
||||
if ( Caster.Skills[SkillName.Chivalry].Value < RequiredSkill )
|
||||
{
|
||||
Caster.SendLocalizedMessage( 1060172, RequiredSkill.ToString( "F1" ) ); // You must have at least ~1_SKILL_REQUIREMENT~ Chivalry to use this ability,
|
||||
return false;
|
||||
}
|
||||
else if ( Caster.TithingPoints < RequiredTithing )
|
||||
if ( Caster.TithingPoints < RequiredTithing )
|
||||
{
|
||||
Caster.SendLocalizedMessage( 1060173, RequiredTithing.ToString() ); // You must have at least ~1_TITHE_REQUIREMENT~ Tithing Points to use this ability,
|
||||
return false;
|
||||
|
|
@ -60,12 +55,7 @@ namespace Server.Spells.Chivalry
|
|||
|
||||
int mana = ScaleMana( RequiredMana );
|
||||
|
||||
if ( Caster.Skills[SkillName.Chivalry].Value < RequiredSkill )
|
||||
{
|
||||
Caster.SendLocalizedMessage( 1060172, RequiredSkill.ToString( "F1" ) ); // You must have at least ~1_SKILL_REQUIREMENT~ Chivalry to use this ability,
|
||||
return false;
|
||||
}
|
||||
else if ( Caster.TithingPoints < requiredTithing )
|
||||
if ( Caster.TithingPoints < requiredTithing )
|
||||
{
|
||||
Caster.SendLocalizedMessage( 1060173, RequiredTithing.ToString() ); // You must have at least ~1_TITHE_REQUIREMENT~ Tithing Points to use this ability,
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ namespace Server.Spells.Fifth
|
|||
SpellHelper.CheckReflect( (int)this.Circle, ref from, ref target );
|
||||
|
||||
int damage = (int)((Caster.Skills[SkillName.Magery].Value + Caster.Int) / 5);
|
||||
|
||||
|
||||
if ( damage > 60 )
|
||||
damage = 60;
|
||||
|
||||
|
|
@ -104,8 +104,8 @@ namespace Server.Spells.Fifth
|
|||
if ( lowestStat > 150 )
|
||||
lowestStat = 150;
|
||||
|
||||
int damage = (highestStat - lowestStat) / 4;//less damage
|
||||
|
||||
double damage = GetDamageScalar(m)*(highestStat - lowestStat) / 4;//less damage
|
||||
|
||||
if ( damage > 45 )
|
||||
damage = 45;
|
||||
|
||||
|
|
|
|||
|
|
@ -78,9 +78,11 @@ namespace Server.Spells.Fifth
|
|||
}
|
||||
|
||||
m.Paralyze( TimeSpan.FromSeconds( duration ) );
|
||||
|
||||
|
||||
m.PlaySound( 0x204 );
|
||||
m.FixedEffect( 0x376A, 6, 1 );
|
||||
|
||||
HarmfulSpell( m );
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -187,6 +187,9 @@ namespace Server.Spells.Fifth
|
|||
if ( m.ApplyPoison( m_Caster, p ) == ApplyPoisonResult.Poisoned )
|
||||
if ( SpellHelper.CanRevealCaster( m ) )
|
||||
m_Caster.RevealingAction();
|
||||
|
||||
if ( m is BaseCreature )
|
||||
( (BaseCreature) m ).OnHarmfulSpell( m_Caster );
|
||||
}
|
||||
|
||||
public override bool OnMoveOver( Mobile m )
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@ namespace Server.Spells.First
|
|||
TimeSpan length = SpellHelper.GetDuration( Caster, m );
|
||||
|
||||
BuffInfo.AddBuff( m, new BuffInfo( BuffIcon.Clumsy, 1075831, length, m, percentage.ToString() ) );
|
||||
|
||||
HarmfulSpell( m );
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@ namespace Server.Spells.First
|
|||
TimeSpan length = SpellHelper.GetDuration( Caster, m );
|
||||
|
||||
BuffInfo.AddBuff( m, new BuffInfo( BuffIcon.FeebleMind, 1075833, length, m, percentage.ToString() ) );
|
||||
|
||||
HarmfulSpell( m );
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@ namespace Server.Spells.First
|
|||
TimeSpan length = SpellHelper.GetDuration( Caster, m );
|
||||
|
||||
BuffInfo.AddBuff( m, new BuffInfo( BuffIcon.Weaken, 1075837, length, m, percentage.ToString() ) );
|
||||
|
||||
HarmfulSpell( m );
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -81,7 +81,9 @@ namespace Server.Spells.Fourth
|
|||
|
||||
string args = String.Format("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}", percentage, percentage, percentage, 10, 10, 10, 10);
|
||||
|
||||
BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.Curse, 1075835, 1075836, length, m, args.ToString()));
|
||||
BuffInfo.AddBuff( m, new BuffInfo( BuffIcon.Curse, 1075835, 1075836, length, m, args.ToString() ) );
|
||||
|
||||
HarmfulSpell( m );
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -201,6 +201,9 @@ namespace Server.Spells.Fourth
|
|||
|
||||
AOS.Damage( m, m_Caster, damage, 0, 100, 0, 0, 0 );
|
||||
m.PlaySound( 0x208 );
|
||||
|
||||
if ( m is BaseCreature )
|
||||
((BaseCreature) m).OnHarmfulSpell( m_Caster );
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -278,6 +281,9 @@ namespace Server.Spells.Fourth
|
|||
|
||||
AOS.Damage( m, caster, damage, 0, 100, 0, 0, 0 );
|
||||
m.PlaySound( 0x208 );
|
||||
|
||||
if ( m is BaseCreature )
|
||||
((BaseCreature) m).OnHarmfulSpell( caster );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -98,6 +98,8 @@ namespace Server.Spells.Fourth
|
|||
m.FixedParticles( 0x374A, 10, 15, 5032, EffectLayer.Head );
|
||||
m.PlaySound( 0x1F8 );
|
||||
}
|
||||
|
||||
HarmfulSpell( m );
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -380,6 +380,7 @@ namespace Server.Spells.Necromancy
|
|||
corpse.ItemID = Utility.Random( 0xECA, 9 ); // bone graphic
|
||||
corpse.Hue = 0;
|
||||
corpse.ProcessDelta();
|
||||
corpse.Animated = true;
|
||||
|
||||
Register( caster, summoned );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ namespace Server.Spells.Necromancy
|
|||
BuffInfo.AddBuff ( m, new BuffInfo ( BuffIcon.BloodOathCurse, 1075661, duration, m, Caster.Name.ToString () ) );
|
||||
|
||||
m_Table[m] = timer;
|
||||
|
||||
HarmfulSpell( m );
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -84,6 +84,8 @@ namespace Server.Spells.Necromancy
|
|||
|
||||
for ( int i = 0; i < mods.Length; ++i )
|
||||
m.AddResistanceMod( mods[i] );
|
||||
|
||||
HarmfulSpell( m );
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -68,6 +68,11 @@ namespace Server.Spells.Necromancy
|
|||
TimeSpan duration = TimeSpan.FromSeconds((Caster.Skills[SkillName.SpiritSpeak].Value / 12) + 1.0);
|
||||
|
||||
Timer.DelayCall(duration, new TimerStateCallback(EffectExpire_Callback), m);
|
||||
|
||||
HarmfulSpell( m );
|
||||
|
||||
BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.EvilOmen, 1075647, 1075648, duration, m));
|
||||
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -60,6 +60,8 @@ namespace Server.Spells.Necromancy
|
|||
SetMindRotScalar( Caster, m, 1.25, duration );
|
||||
else
|
||||
SetMindRotScalar( Caster, m, 2.00, duration );
|
||||
|
||||
HarmfulSpell( m );
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ namespace Server.Spells.Necromancy
|
|||
Misc.WeightOverloading.DFA = Misc.DFAlgorithm.Standard;
|
||||
|
||||
//SpellHelper.Damage( this, m, damage, 100, 0, 0, 0, 0, Misc.DFAlgorithm.PainSpike );
|
||||
HarmfulSpell( m );
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -66,8 +66,47 @@ namespace Server.Spells.Necromancy
|
|||
|
||||
m_Table[m] = t;
|
||||
}
|
||||
|
||||
HarmfulSpell( m );
|
||||
}
|
||||
|
||||
//Calculations for the buff bar
|
||||
double spiritlevel = Caster.Skills[SkillName.SpiritSpeak].Value / 10;
|
||||
if (spiritlevel < 4)
|
||||
spiritlevel = 4;
|
||||
int d_MinDamage = 4;
|
||||
int d_MaxDamage = ((int)spiritlevel + 1) * 3;
|
||||
string args = String.Format("{0}\t{1}", d_MinDamage, d_MaxDamage);
|
||||
|
||||
int i_Count = (int)spiritlevel;
|
||||
int i_MaxCount = i_Count;
|
||||
int i_HitDelay = 5;
|
||||
int i_Length = i_HitDelay;
|
||||
|
||||
while (i_Count > 1)
|
||||
{
|
||||
--i_Count;
|
||||
if (i_HitDelay > 1)
|
||||
{
|
||||
if (i_MaxCount < 5)
|
||||
{
|
||||
--i_HitDelay;
|
||||
}
|
||||
else
|
||||
{
|
||||
int delay = (int)(Math.Ceiling((1.0 + (5 * i_Count)) / i_MaxCount));
|
||||
|
||||
if (delay <= 5)
|
||||
i_HitDelay = delay;
|
||||
else
|
||||
i_HitDelay = 5;
|
||||
}
|
||||
}
|
||||
i_Length += i_HitDelay;
|
||||
}
|
||||
TimeSpan t_Duration = TimeSpan.FromSeconds(i_Length);
|
||||
BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.Strangle, 1075794, 1075795, t_Duration, m, args.ToString()));
|
||||
|
||||
FinishSequence();
|
||||
}
|
||||
|
||||
|
|
@ -171,6 +210,9 @@ namespace Server.Spells.Necromancy
|
|||
damage *= 1.75;
|
||||
|
||||
AOS.Damage( m_Target, m_From, (int)damage, 0, 0, 0, 100, 0 );
|
||||
|
||||
if ( 0.60 <= Utility.RandomDouble() ) // OSI: randomly revealed between first and third damage tick, guessing 60% chance
|
||||
m_Target.RevealingAction();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,19 +89,19 @@ namespace Server.Spells.Seventh
|
|||
else if ( !Core.AOS )
|
||||
damage /= targets.Count;
|
||||
|
||||
double toDeal;
|
||||
for ( int i = 0; i < targets.Count; ++i )
|
||||
{
|
||||
toDeal = damage;
|
||||
Mobile m = targets[i];
|
||||
|
||||
double toDeal = damage;
|
||||
|
||||
if ( !Core.AOS && CheckResisted( m ) )
|
||||
{
|
||||
toDeal *= 0.5;
|
||||
|
||||
m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy.
|
||||
}
|
||||
|
||||
toDeal *= GetDamageScalar( m );
|
||||
Caster.DoHarmful( m );
|
||||
SpellHelper.Damage( this, m, toDeal, 0, 0, 0, 0, 100 );
|
||||
|
||||
|
|
|
|||
|
|
@ -84,6 +84,8 @@ namespace Server.Spells.Seventh
|
|||
m.FixedParticles( 0x374A, 10, 15, 5054, EffectLayer.Head );
|
||||
m.PlaySound( 0x1F9 );
|
||||
}
|
||||
|
||||
HarmfulSpell( m );
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -87,20 +87,21 @@ namespace Server.Spells.Seventh
|
|||
damage = (damage * 2) / targets.Count;
|
||||
else if ( !Core.AOS )
|
||||
damage /= targets.Count;
|
||||
|
||||
|
||||
double toDeal;
|
||||
for ( int i = 0; i < targets.Count; ++i )
|
||||
{
|
||||
Mobile m = targets[i];
|
||||
|
||||
double toDeal = damage;
|
||||
toDeal = damage;
|
||||
|
||||
if ( !Core.AOS && CheckResisted( m ) )
|
||||
{
|
||||
toDeal *= 0.5;
|
||||
damage *= 0.5;
|
||||
|
||||
m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy.
|
||||
}
|
||||
|
||||
toDeal *= GetDamageScalar( m );
|
||||
Caster.DoHarmful( m );
|
||||
SpellHelper.Damage( this, m, toDeal, 0, 100, 0, 0, 0 );
|
||||
|
||||
|
|
|
|||
|
|
@ -75,6 +75,8 @@ namespace Server.Spells.Sixth
|
|||
|
||||
m.FixedParticles( 0x374A, 10, 15, 5028, EffectLayer.Waist );
|
||||
m.PlaySound( 0x1FB );
|
||||
|
||||
HarmfulSpell( m );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -188,6 +188,9 @@ namespace Server.Spells.Sixth
|
|||
|
||||
m.PlaySound( 0x204 );
|
||||
m.FixedEffect( 0x376A, 10, 16 );
|
||||
|
||||
if ( m is BaseCreature )
|
||||
((BaseCreature) m).OnHarmfulSpell( m_Caster );
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -93,6 +93,8 @@ namespace Server.Spells.Third
|
|||
|
||||
m.FixedParticles( 0x374A, 10, 15, 5021, EffectLayer.Waist );
|
||||
m.PlaySound( 0x205 );
|
||||
|
||||
HarmfulSpell( m );
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
|
|
|
|||
|
|
@ -66,7 +66,6 @@ namespace Server.Spells.Third
|
|||
Effects.SendLocationParticles( EffectItem.Create( item.Location, item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5022 );
|
||||
Effects.PlaySound( item.Location, item.Map, 0x1F5 );
|
||||
|
||||
item.DisplayTo( Caster );
|
||||
item.OnItemUsed( Caster, item );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue