Runic sewing kits will no longer apply durability
http://www.uodemise.com/forum/showthread.php?t=133757 Vendor Look/Browse/View will now work properly http://www.uodemise.com/forum/showthread.php?t=135531 Stacked Eggbombs will now unstack correctly http://www.uodemise.com/forum/showthread.php?t=134321 Unbonded pets should logout too http://www.uodemise.com/forum/showthread.php?t=119262 Paragon chests placed on player vendors will now behave correctly http://www.uodemise.com/forum/showthread.php?t=116864 Proper party fame/karma sharing http://www.uodemise.com/forum/showthread.php?t=122749 Guild Alliance/War update bug fixed http://www.uodemise.com/forum/showthread.php?t=115236 Fukiya properties updates and loading bug fixed http://www.uodemise.com/forum/showthread.php?t=136042 Shuriken, same problems as fukiya http://www.uodemise.com/forum/showthread.php?t=120212 greater mongbats will now be recognised as quest objectives http://www.uodemise.com/forum/showthread.php?t=128072 divine fury sound tweaks. http://www.uodemise.com/forum/showthread.php?t=136489 pet stat gains fix http://www.uodemise.com/forum/showthread.php?t=134820 Pets follow speed corrected http://www.uodemise.com/forum/showthread.php?t=124774 E-fields no longer block in trammel rulesets. http://www.uodemise.com/forum/showthread.php?t=116680 Disguise kit timer fix http://www.uodemise.com/forum/showthread.php?t=133913 Meer Mage special abilities fixes. http://www.uodemise.com/forum/showthread.php?t=122134 Missing food property if eggs, in animal lore gump http://www.uodemise.com/forum/showthread.php?t=135258 Pets will follow after an attack is completed. http://www.uodemise.com/forum/showthread.php?t=135962 Hides should not be scissored whilst still on the corpse http://www.uodemise.com/forum/showthread.php?t=118799 Pet bonding changed to include jewelry skill adjustments. http://www.uodemise.com/forum/showthread.php?t=121060 Skinning knife can be used to cut corpses http://www.uodemise.com/forum/showthread.php?t=115248 PlayerVendors will correctly send update packets to the client when hair is changed http://www.uodemise.com/forum/showthread.php?t=120216 Corrections to house sign gump http://www.uodemise.com/forum/showthread.php?t=134406 pet "guarding" system message added http://www.uodemise.com/forum/showthread.php?t=134091 Giant toads should be aggressive http://www.uodemise.com/forum/showthread.php?t=133984 bardiche and halberds are axe tools. http://www.uodemise.com/forum/showthread.php?t=122739
This commit is contained in:
parent
d688c9e0f3
commit
208acafd7e
37 changed files with 1058 additions and 226 deletions
|
|
@ -15,12 +15,12 @@ namespace Server.Mobiles
|
|||
public static Type[] ArtifactRarity11 { get { return m_ArtifactRarity11; } }
|
||||
private static Type[] m_ArtifactRarity10 = new Type[]
|
||||
{
|
||||
typeof( LegacyOfTheDreadLord ),
|
||||
typeof( TheTaskmaster )
|
||||
};
|
||||
|
||||
private static Type[] m_ArtifactRarity11 = new Type[]
|
||||
{
|
||||
typeof( LegacyOfTheDreadLord ),
|
||||
typeof( TheDragonSlayer ),
|
||||
typeof( ArmorOfFortune ),
|
||||
typeof( GauntletsOfNobility ),
|
||||
|
|
|
|||
296
Scripts/Mobiles/Monsters/LBR/Meers/EnragedCreatures.cs
Normal file
296
Scripts/Mobiles/Monsters/LBR/Meers/EnragedCreatures.cs
Normal file
|
|
@ -0,0 +1,296 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a hare corpse" )]
|
||||
public class EnragedRabbit : BaseEnraged
|
||||
{
|
||||
public EnragedRabbit( Mobile summoner ) : base( summoner )
|
||||
{
|
||||
Name = "a rabbit";
|
||||
Body = 0xcd;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0xC9;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0xCA;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0xCB;
|
||||
}
|
||||
|
||||
public EnragedRabbit( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
writer.Write( (int) 0 );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName( "a deer corpse" )]
|
||||
public class EnragedHart : BaseEnraged
|
||||
{
|
||||
public EnragedHart( Mobile summoner ) : base( summoner )
|
||||
{
|
||||
Name = "a great hart";
|
||||
Body = 0xea;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x82;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x83;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x84;
|
||||
}
|
||||
|
||||
public EnragedHart( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
writer.Write( (int) 0 );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName( "a deer corpse" )]
|
||||
public class EnragedHind : BaseEnraged
|
||||
{
|
||||
public EnragedHind( Mobile summoner ) : base( summoner )
|
||||
{
|
||||
Name = "a hind";
|
||||
Body = 0xed;
|
||||
}
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x82;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x83;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x84;
|
||||
}
|
||||
|
||||
public EnragedHind( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
writer.Write( (int) 0 );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName( "a bear corpse" )]
|
||||
public class EnragedBlackBear : BaseEnraged
|
||||
{
|
||||
public EnragedBlackBear( Mobile summoner ) : base( summoner )
|
||||
{
|
||||
Name = "a black bear";
|
||||
Body = 0xd3;
|
||||
BaseSoundID = 0xa3;
|
||||
}
|
||||
public EnragedBlackBear( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
writer.Write( (int) 0 );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[CorpseName( "an eagle corpse" )]
|
||||
public class EnragedEagle : BaseEnraged
|
||||
{
|
||||
public EnragedEagle( Mobile summoner ) : base( summoner )
|
||||
{
|
||||
Name = "an eagle";
|
||||
Body = 0x5;
|
||||
BaseSoundID = 0x2ee;
|
||||
}
|
||||
public EnragedEagle( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
writer.Write( (int) 0 );
|
||||
}
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class BaseEnraged : BaseCreature
|
||||
{
|
||||
public BaseEnraged( Mobile summoner )
|
||||
: base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
SetStr( 50, 200 );
|
||||
SetDex( 50, 200 );
|
||||
SetHits( 50, 200 );
|
||||
SetStam( 50, 200 );
|
||||
|
||||
/*
|
||||
On OSI, all stats are random 50-200, but
|
||||
str is never less than hits, and dex is never
|
||||
less than stam.
|
||||
*/
|
||||
|
||||
if( Str < Hits )
|
||||
Str = Hits;
|
||||
if( Dex < Stam )
|
||||
Dex = Stam;
|
||||
|
||||
Karma = -1000;
|
||||
Tamable = false;
|
||||
|
||||
SummonMaster = summoner;
|
||||
}
|
||||
|
||||
public override void OnThink()
|
||||
{
|
||||
|
||||
if( SummonMaster == null || SummonMaster.Deleted )
|
||||
{
|
||||
Delete();
|
||||
}
|
||||
|
||||
/*
|
||||
On OSI, without combatant, they behave as if they have been
|
||||
given "come" command, ie they wander towards their summoner,
|
||||
but never actually "follow".
|
||||
*/
|
||||
|
||||
else if( !Combat( this ))
|
||||
{
|
||||
if( AIObject != null )
|
||||
{
|
||||
AIObject.MoveTo( SummonMaster, false , 5 );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
On OSI, if the summon attacks a mobile, the summoner meer also
|
||||
attacks them, regardless of karma, etc. as long as the combatant
|
||||
is a player or controlled/summoned, and the summoner is not already
|
||||
engaged in combat.
|
||||
*/
|
||||
|
||||
else if( !Combat( SummonMaster ))
|
||||
{
|
||||
BaseCreature bc = null;
|
||||
if( Combatant is BaseCreature )
|
||||
{
|
||||
bc = (BaseCreature)Combatant;
|
||||
}
|
||||
if( Combatant.Player || ( bc != null && ( bc.Controlled || bc.SummonMaster != null )))
|
||||
{
|
||||
SummonMaster.Combatant = Combatant;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.OnThink();
|
||||
}
|
||||
}
|
||||
|
||||
private bool Combat( Mobile mobile )
|
||||
{
|
||||
Mobile combatant = mobile.Combatant;
|
||||
if( combatant == null || combatant.Deleted )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if ( combatant.IsDeadBondedPet || !combatant.Alive )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void OnSingleClick( Mobile from )
|
||||
{
|
||||
base.OnSingleClick( from );
|
||||
PrivateOverheadMessage( MessageType.Regular, 0x3B2, 1060768, from.NetState ); // enraged
|
||||
}
|
||||
|
||||
public override void AddNameProperties( ObjectPropertyList list )
|
||||
{
|
||||
base.AddNameProperties( list );
|
||||
list.Add( 1060768 ); // enraged
|
||||
}
|
||||
|
||||
public BaseEnraged( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
writer.Write( (int) 0 );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -88,11 +88,64 @@ namespace Server.Mobiles
|
|||
{
|
||||
m_NextAbilityTime = DateTime.Now + TimeSpan.FromSeconds( Utility.RandomMinMax( 20, 30 ) );
|
||||
|
||||
// TODO: Forest summon ability
|
||||
if( combatant is BaseCreature )
|
||||
{
|
||||
BaseCreature bc = (BaseCreature)combatant;
|
||||
|
||||
this.Say( true, "I call a plague of insects to sting your flesh!" );
|
||||
if( bc.Controlled )
|
||||
{
|
||||
combatant = bc.ControlMaster;
|
||||
}
|
||||
}
|
||||
|
||||
m_Table[combatant] = Timer.DelayCall( TimeSpan.FromSeconds( 0.5 ), TimeSpan.FromSeconds( 7.0 ), new TimerStateCallback( DoEffect ), new object[]{ combatant, 0 } );
|
||||
if( Utility.RandomDouble() < .1 )
|
||||
{
|
||||
int[][] coord =
|
||||
{
|
||||
new int[]{-4,-6}, new int[]{4,-6}, new int[]{0,-8}, new int[]{-5,5}, new int[]{5,5}
|
||||
};
|
||||
|
||||
BaseCreature rabid;
|
||||
|
||||
for( int i=0; i<5; i++ )
|
||||
{
|
||||
switch( i )
|
||||
{
|
||||
case 0: rabid = new EnragedRabbit( this ); break;
|
||||
case 1: rabid = new EnragedHind( this ); break;
|
||||
case 2: rabid = new EnragedHart( this ); break;
|
||||
case 3: rabid = new EnragedBlackBear( this ); break;
|
||||
default: rabid = new EnragedEagle( this ); break;
|
||||
}
|
||||
|
||||
rabid.FocusMob = combatant;
|
||||
|
||||
int x = combatant.X + coord[i][0];
|
||||
int y = combatant.Y + coord[i][1];
|
||||
|
||||
/*
|
||||
Once in a while OSI's dont spawn all 5, and
|
||||
I can only attribute this to a bad spawn location
|
||||
so I will do this.
|
||||
*/
|
||||
|
||||
Point3D loc = new Point3D( x, y, combatant.Map.GetAverageZ( x, y ));
|
||||
if ( combatant.Map.CanSpawnMobile( loc ) )
|
||||
{
|
||||
rabid.MoveToWorld( loc, combatant.Map ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
rabid.Delete();
|
||||
}
|
||||
}
|
||||
this.Say( 1071932 ); //Creatures of the forest, I call to thee! Aid me in the fight against all that is evil!
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Say( true, "I call a plague of insects to sting your flesh!" );
|
||||
m_Table[combatant] = Timer.DelayCall( TimeSpan.FromSeconds( 0.5 ), TimeSpan.FromSeconds( 7.0 ), new TimerStateCallback( DoEffect ), new object[]{ combatant, 0 } );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue