This commit is contained in:
mark 2006-06-15 04:14:30 +00:00
commit 47711d616e
2644 changed files with 479454 additions and 0 deletions

View file

@ -0,0 +1,105 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
namespace Server.Mobiles
{
[CorpseName( "an ant lion corpse" )]
public class AntLion : BaseCreature
{
[Constructable]
public AntLion() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "an ant lion";
Body = 787;
BaseSoundID = 1006;
SetStr( 296, 320 );
SetDex( 81, 105 );
SetInt( 36, 60 );
SetHits( 151, 162 );
SetDamage( 7, 21 );
SetDamageType( ResistanceType.Physical, 70 );
SetDamageType( ResistanceType.Poison, 30 );
SetResistance( ResistanceType.Physical, 45, 60 );
SetResistance( ResistanceType.Fire, 25, 35 );
SetResistance( ResistanceType.Cold, 30, 40 );
SetResistance( ResistanceType.Poison, 40, 50 );
SetResistance( ResistanceType.Energy, 30, 35 );
SetSkill( SkillName.MagicResist, 70.0 );
SetSkill( SkillName.Tactics, 90.0 );
SetSkill( SkillName.Wrestling, 90.0 );
Fame = 4500;
Karma = -4500;
VirtualArmor = 45;
PackItem( new Bone( 3 ) );
PackItem( new FertileDirt( Utility.RandomMinMax( 1, 5 ) ) );
switch ( Utility.Random( 4 ) )
{
case 0: PackItem( new DullCopperOre( Utility.RandomMinMax( 1, 10 ) ) ); break;
case 1: PackItem( new ShadowIronOre( Utility.RandomMinMax( 1, 10 ) ) ); break;
case 2: PackItem( new CopperOre( Utility.RandomMinMax( 1, 10 ) ) ); break;
case 3: PackItem( new BronzeOre( Utility.RandomMinMax( 1, 10 ) ) ); break;
}
// TODO: skeleton
}
public override int GetAngerSound()
{
return 0x5A;
}
public override int GetIdleSound()
{
return 0x5A;
}
public override int GetAttackSound()
{
return 0x164;
}
public override int GetHurtSound()
{
return 0x187;
}
public override int GetDeathSound()
{
return 0x1BA;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Average, 2 );
}
public AntLion( 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();
}
}
}

View file

@ -0,0 +1,111 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
namespace Server.Mobiles
{
[CorpseName( "a solen infiltrator corpse" )] // TODO: Corpse name?
public class BlackSolenInfiltratorQueen : BaseCreature
{
[Constructable]
public BlackSolenInfiltratorQueen() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a black solen infiltrator";
Body = 807;
BaseSoundID = 959;
Hue = 0x453;
SetStr( 326, 350 );
SetDex( 141, 165 );
SetInt( 96, 120 );
SetHits( 151, 162 );
SetDamage( 10, 15 );
SetDamageType( ResistanceType.Physical, 70 );
SetDamageType( ResistanceType.Poison, 30 );
SetResistance( ResistanceType.Physical, 30, 40 );
SetResistance( ResistanceType.Fire, 30, 35 );
SetResistance( ResistanceType.Cold, 25, 35 );
SetResistance( ResistanceType.Poison, 35, 40 );
SetResistance( ResistanceType.Energy, 25, 30 );
SetSkill( SkillName.MagicResist, 90.0 );
SetSkill( SkillName.Tactics, 90.0 );
SetSkill( SkillName.Wrestling, 90.0 );
Fame = 6500;
Karma = -6500;
VirtualArmor = 50;
SolenHelper.PackPicnicBasket( this );
PackItem( new ZoogiFungus( ( 0.05 > Utility.RandomDouble() ) ? 16 : 4 ) );
}
public override int GetAngerSound()
{
return 0x259;
}
public override int GetIdleSound()
{
return 0x259;
}
public override int GetAttackSound()
{
return 0x195;
}
public override int GetHurtSound()
{
return 0x250;
}
public override int GetDeathSound()
{
return 0x25B;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich );
}
public override bool IsEnemy( Mobile m )
{
if ( SolenHelper.CheckBlackFriendship( m ) )
return false;
else
return base.IsEnemy( m );
}
public override void OnDamage( int amount, Mobile from, bool willKill )
{
SolenHelper.OnBlackDamage( from );
base.OnDamage( amount, from, willKill );
}
public BlackSolenInfiltratorQueen( 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();
}
}
}

View file

@ -0,0 +1,112 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
namespace Server.Mobiles
{
[CorpseName( "a solen infiltrator corpse" )]
public class BlackSolenInfiltratorWarrior : BaseCreature
{
[Constructable]
public BlackSolenInfiltratorWarrior() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a black solen infiltrator";
Body = 806;
BaseSoundID = 959;
Hue = 0x453;
SetStr( 206, 230 );
SetDex( 121, 145 );
SetInt( 66, 90 );
SetHits( 96, 107 );
SetDamage( 5, 15 );
SetDamageType( ResistanceType.Physical, 80 );
SetDamageType( ResistanceType.Poison, 20 );
SetResistance( ResistanceType.Physical, 20, 35 );
SetResistance( ResistanceType.Fire, 20, 35 );
SetResistance( ResistanceType.Cold, 10, 25 );
SetResistance( ResistanceType.Poison, 20, 35 );
SetResistance( ResistanceType.Energy, 10, 25 );
SetSkill( SkillName.MagicResist, 80.0 );
SetSkill( SkillName.Tactics, 80.0 );
SetSkill( SkillName.Wrestling, 80.0 );
Fame = 3000;
Karma = -3000;
VirtualArmor = 40;
SolenHelper.PackPicnicBasket( this );
PackItem( new ZoogiFungus( ( 0.05 > Utility.RandomDouble() )? 13 : 3 ) );
}
public override int GetAngerSound()
{
return 0xB5;
}
public override int GetIdleSound()
{
return 0xB5;
}
public override int GetAttackSound()
{
return 0x289;
}
public override int GetHurtSound()
{
return 0xBC;
}
public override int GetDeathSound()
{
return 0xE4;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Average, 2 );
AddLoot( LootPack.Gems, Utility.RandomMinMax( 1, 4 ) );
}
public override bool IsEnemy( Mobile m )
{
if ( SolenHelper.CheckBlackFriendship( m ) )
return false;
else
return base.IsEnemy( m );
}
public override void OnDamage( int amount, Mobile from, bool willKill )
{
SolenHelper.OnBlackDamage( from );
base.OnDamage( amount, from, willKill );
}
public BlackSolenInfiltratorWarrior( 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();
}
}
}

View file

@ -0,0 +1,150 @@
using System;
using System.Collections;
using Server.Items;
using Server.Network;
namespace Server.Mobiles
{
[CorpseName( "a solen queen corpse" )]
public class BlackSolenQueen : BaseCreature
{
private bool m_BurstSac;
public bool BurstSac{ get{ return m_BurstSac; } }
[Constructable]
public BlackSolenQueen() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a black solen queen";
Body = 807;
BaseSoundID = 959;
Hue = 0x453;
SetStr( 296, 320 );
SetDex( 121, 145 );
SetInt( 76, 100 );
SetHits( 151, 162 );
SetDamage( 10, 15 );
SetDamageType( ResistanceType.Physical, 70 );
SetDamageType( ResistanceType.Poison, 30 );
SetResistance( ResistanceType.Physical, 30, 40 );
SetResistance( ResistanceType.Fire, 30, 35 );
SetResistance( ResistanceType.Cold, 25, 35 );
SetResistance( ResistanceType.Poison, 35, 40 );
SetResistance( ResistanceType.Energy, 25, 30 );
SetSkill( SkillName.MagicResist, 70.0 );
SetSkill( SkillName.Tactics, 90.0 );
SetSkill( SkillName.Wrestling, 90.0 );
Fame = 4500;
Karma = -4500;
VirtualArmor = 45;
SolenHelper.PackPicnicBasket( this );
PackItem( new ZoogiFungus( ( Utility.RandomDouble() > 0.05 )? 5 : 25 ) );
if ( Utility.RandomDouble() < 0.05 )
PackItem( new BallOfSummoning() );
}
public override int GetAngerSound()
{
return 0x259;
}
public override int GetIdleSound()
{
return 0x259;
}
public override int GetAttackSound()
{
return 0x195;
}
public override int GetHurtSound()
{
return 0x250;
}
public override int GetDeathSound()
{
return 0x25B;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich );
}
public override bool IsEnemy( Mobile m )
{
if ( SolenHelper.CheckBlackFriendship( m ) )
return false;
else
return base.IsEnemy( m );
}
public override void OnDamage( int amount, Mobile from, bool willKill )
{
SolenHelper.OnBlackDamage( from );
if ( !willKill )
{
if ( !BurstSac )
{
if ( Hits < 50 )
{
PublicOverheadMessage( MessageType.Regular, 0x3B2, true, "* The solen's acid sac is burst open! *" );
m_BurstSac = true;
}
}
else if ( from != null && from != this && InRange( from, 1 ) )
{
SpillAcid( TimeSpan.FromSeconds( 10 ), 30, 30, from );
}
}
base.OnDamage( amount, from, willKill );
}
public override bool OnBeforeDeath()
{
SpillAcid( TimeSpan.FromSeconds( 10 ), 30, 30, 1, 4 );
return base.OnBeforeDeath();
}
public BlackSolenQueen( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 );
writer.Write( m_BurstSac );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch( version )
{
case 1:
{
m_BurstSac = reader.ReadBool();
break;
}
}
}
}
}

View file

@ -0,0 +1,151 @@
using System;
using System.Collections;
using Server.Items;
using Server.Network;
namespace Server.Mobiles
{
[CorpseName( "a solen warrior corpse" )]
public class BlackSolenWarrior : BaseCreature
{
private bool m_BurstSac;
public bool BurstSac{ get{ return m_BurstSac; } }
[Constructable]
public BlackSolenWarrior() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a black solen warrior";
Body = 806;
BaseSoundID = 959;
Hue = 0x453;
SetStr( 196, 220 );
SetDex( 101, 125 );
SetInt( 36, 60 );
SetHits( 96, 107 );
SetDamage( 5, 15 );
SetDamageType( ResistanceType.Physical, 80 );
SetDamageType( ResistanceType.Poison, 20 );
SetResistance( ResistanceType.Physical, 20, 35 );
SetResistance( ResistanceType.Fire, 20, 35 );
SetResistance( ResistanceType.Cold, 10, 25 );
SetResistance( ResistanceType.Poison, 20, 35 );
SetResistance( ResistanceType.Energy, 10, 25 );
SetSkill( SkillName.MagicResist, 60.0 );
SetSkill( SkillName.Tactics, 80.0 );
SetSkill( SkillName.Wrestling, 80.0 );
Fame = 3000;
Karma = -3000;
VirtualArmor = 35;
SolenHelper.PackPicnicBasket( this );
PackItem( new ZoogiFungus( ( 0.05 > Utility.RandomDouble() )? 13 : 3 ) );
if ( Utility.RandomDouble() < 0.05 )
PackItem( new BraceletOfBinding() );
}
public override int GetAngerSound()
{
return 0xB5;
}
public override int GetIdleSound()
{
return 0xB5;
}
public override int GetAttackSound()
{
return 0x289;
}
public override int GetHurtSound()
{
return 0xBC;
}
public override int GetDeathSound()
{
return 0xE4;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich );
AddLoot( LootPack.Gems, Utility.RandomMinMax( 1, 4 ) );
}
public override bool IsEnemy( Mobile m )
{
if ( SolenHelper.CheckBlackFriendship( m ) )
return false;
else
return base.IsEnemy( m );
}
public override void OnDamage( int amount, Mobile from, bool willKill )
{
SolenHelper.OnBlackDamage( from );
if ( !willKill )
{
if ( !BurstSac )
{
if ( Hits < 50 )
{
PublicOverheadMessage( MessageType.Regular, 0x3B2, true, "* The solen's acid sac is burst open! *" );
m_BurstSac = true;
}
}
else if ( from != null && from != this && InRange( from, 1 ) )
{
SpillAcid( TimeSpan.FromSeconds( 10 ), 30, 30, from );
}
}
base.OnDamage( amount, from, willKill );
}
public override bool OnBeforeDeath()
{
SpillAcid( TimeSpan.FromSeconds( 10 ), 30, 30, 1, 4 );
return base.OnBeforeDeath();
}
public BlackSolenWarrior( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 );
writer.Write( m_BurstSac );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch( version )
{
case 1:
{
m_BurstSac = reader.ReadBool();
break;
}
}
}
}
}

View file

@ -0,0 +1,112 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
namespace Server.Mobiles
{
[CorpseName( "a solen worker corpse" )]
public class BlackSolenWorker : BaseCreature
{
[Constructable]
public BlackSolenWorker() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a black solen worker";
Body = 805;
BaseSoundID = 959;
Hue = 0x453;
SetStr( 96, 120 );
SetDex( 81, 105 );
SetInt( 36, 60 );
SetHits( 58, 72 );
SetDamage( 5, 7 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 25, 30 );
SetResistance( ResistanceType.Fire, 20, 30 );
SetResistance( ResistanceType.Cold, 10, 20 );
SetResistance( ResistanceType.Poison, 10, 20 );
SetResistance( ResistanceType.Energy, 20, 30 );
SetSkill( SkillName.MagicResist, 60.0 );
SetSkill( SkillName.Tactics, 65.0 );
SetSkill( SkillName.Wrestling, 60.0 );
Fame = 1500;
Karma = -1500;
VirtualArmor = 28;
PackGold( Utility.Random( 100, 180 ) );
SolenHelper.PackPicnicBasket( this );
PackItem( new ZoogiFungus() );
}
public override int GetAngerSound()
{
return 0x269;
}
public override int GetIdleSound()
{
return 0x269;
}
public override int GetAttackSound()
{
return 0x186;
}
public override int GetHurtSound()
{
return 0x1BE;
}
public override int GetDeathSound()
{
return 0x8E;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Gems, Utility.RandomMinMax( 1, 2 ) );
}
public override bool IsEnemy( Mobile m )
{
if ( SolenHelper.CheckBlackFriendship( m ) )
return false;
else
return base.IsEnemy( m );
}
public override void OnDamage( int amount, Mobile from, bool willKill )
{
SolenHelper.OnBlackDamage( from );
base.OnDamage( amount, from, willKill );
}
public BlackSolenWorker( 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();
}
}
}

View file

@ -0,0 +1,110 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
namespace Server.Mobiles
{
[CorpseName( "a solen infiltrator corpse" )] // TODO: Corpse name?
public class RedSolenInfiltratorQueen : BaseCreature
{
[Constructable]
public RedSolenInfiltratorQueen() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a red solen infiltrator";
Body = 783;
BaseSoundID = 959;
SetStr( 326, 350 );
SetDex( 141, 165 );
SetInt( 96, 120 );
SetHits( 151, 162 );
SetDamage( 10, 15 );
SetDamageType( ResistanceType.Physical, 70 );
SetDamageType( ResistanceType.Poison, 30 );
SetResistance( ResistanceType.Physical, 30, 40 );
SetResistance( ResistanceType.Fire, 30, 35 );
SetResistance( ResistanceType.Cold, 25, 35 );
SetResistance( ResistanceType.Poison, 35, 40 );
SetResistance( ResistanceType.Energy, 25, 30 );
SetSkill( SkillName.MagicResist, 90.0 );
SetSkill( SkillName.Tactics, 90.0 );
SetSkill( SkillName.Wrestling, 90.0 );
Fame = 6500;
Karma = -6500;
VirtualArmor = 50;
SolenHelper.PackPicnicBasket( this );
PackItem( new ZoogiFungus( ( 0.05 < Utility.RandomDouble() )? 4 : 16 ) );
}
public override int GetAngerSound()
{
return 0x259;
}
public override int GetIdleSound()
{
return 0x259;
}
public override int GetAttackSound()
{
return 0x195;
}
public override int GetHurtSound()
{
return 0x250;
}
public override int GetDeathSound()
{
return 0x25B;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich );
}
public override bool IsEnemy( Mobile m )
{
if ( SolenHelper.CheckRedFriendship( m ) )
return false;
else
return base.IsEnemy( m );
}
public override void OnDamage( int amount, Mobile from, bool willKill )
{
SolenHelper.OnRedDamage( from );
base.OnDamage( amount, from, willKill );
}
public RedSolenInfiltratorQueen( 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();
}
}
}

View file

@ -0,0 +1,112 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
namespace Server.Mobiles
{
[CorpseName( "a solen infiltrator corpse" )]
public class RedSolenInfiltratorWarrior : BaseCreature
{
[Constructable]
public RedSolenInfiltratorWarrior() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a red solen infiltrator";
Body = 782;
BaseSoundID = 959;
SetStr( 206, 230 );
SetDex( 121, 145 );
SetInt( 66, 90 );
SetHits( 96, 107 );
SetDamage( 5, 15 );
SetDamageType( ResistanceType.Physical, 80 );
SetDamageType( ResistanceType.Poison, 20 );
SetResistance( ResistanceType.Physical, 20, 35 );
SetResistance( ResistanceType.Fire, 20, 35 );
SetResistance( ResistanceType.Cold, 10, 25 );
SetResistance( ResistanceType.Poison, 20, 35 );
SetResistance( ResistanceType.Energy, 10, 25 );
SetSkill( SkillName.MagicResist, 80.0 );
SetSkill( SkillName.Tactics, 80.0 );
SetSkill( SkillName.Wrestling, 80.0 );
Fame = 3000;
Karma = -3000;
VirtualArmor = 40;
SolenHelper.PackPicnicBasket( this );
PackItem( new ZoogiFungus( ( 0.05 < Utility.RandomDouble() )? 3 : 13 ) );
}
public override int GetAngerSound()
{
return 0xB5;
}
public override int GetIdleSound()
{
return 0xB5;
}
public override int GetAttackSound()
{
return 0x289;
}
public override int GetHurtSound()
{
return 0xBC;
}
public override int GetDeathSound()
{
return 0xE4;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Average, 2 );
AddLoot( LootPack.Gems, Utility.RandomMinMax( 1, 4 ) );
}
public override bool IsEnemy( Mobile m )
{
if ( SolenHelper.CheckRedFriendship( m ) )
return false;
else
return base.IsEnemy( m );
}
public override void OnDamage( int amount, Mobile from, bool willKill )
{
SolenHelper.OnRedDamage( from );
base.OnDamage( amount, from, willKill );
}
public RedSolenInfiltratorWarrior( 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();
}
}
}

View file

@ -0,0 +1,150 @@
using System;
using System.Collections;
using Server.Items;
using Server.Network;
namespace Server.Mobiles
{
[CorpseName( "a solen queen corpse" )]
public class RedSolenQueen : BaseCreature
{
private bool m_BurstSac;
public bool BurstSac{ get{ return m_BurstSac; } }
[Constructable]
public RedSolenQueen() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a red solen queen";
Body = 783;
BaseSoundID = 959;
SetStr( 296, 320 );
SetDex( 121, 145 );
SetInt( 76, 100 );
SetHits( 151, 162 );
SetDamage( 10, 15 );
SetDamageType( ResistanceType.Physical, 70 );
SetDamageType( ResistanceType.Poison, 30 );
SetResistance( ResistanceType.Physical, 30, 40 );
SetResistance( ResistanceType.Fire, 30, 35 );
SetResistance( ResistanceType.Cold, 25, 35 );
SetResistance( ResistanceType.Poison, 35, 40 );
SetResistance( ResistanceType.Energy, 25, 30 );
SetSkill( SkillName.MagicResist, 70.0 );
SetSkill( SkillName.Tactics, 90.0 );
SetSkill( SkillName.Wrestling, 90.0 );
Fame = 4500;
Karma = -4500;
VirtualArmor = 45;
SolenHelper.PackPicnicBasket( this );
PackItem( new ZoogiFungus( ( Utility.RandomDouble() > 0.05 )? 5 : 25 ) );
if( Utility.RandomDouble() < 0.05 )
PackItem( new BallOfSummoning() );
}
public override int GetAngerSound()
{
return 0x259;
}
public override int GetIdleSound()
{
return 0x259;
}
public override int GetAttackSound()
{
return 0x195;
}
public override int GetHurtSound()
{
return 0x250;
}
public override int GetDeathSound()
{
return 0x25B;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich );
}
public override bool IsEnemy( Mobile m )
{
if ( SolenHelper.CheckRedFriendship( m ) )
return false;
else
return base.IsEnemy( m );
}
public override void OnDamage( int amount, Mobile from, bool willKill )
{
SolenHelper.OnRedDamage( from );
if ( !willKill )
{
if ( !BurstSac )
{
if ( Hits < 50 )
{
PublicOverheadMessage( MessageType.Regular, 0x3B2, true, "* The solen's acid sac is burst open! *" );
m_BurstSac = true;
}
}
else if ( from != null && from != this && InRange( from, 1 ) )
{
SpillAcid( TimeSpan.FromSeconds( 10 ), 30, 30, from );
}
}
base.OnDamage( amount, from, willKill );
}
public override bool OnBeforeDeath()
{
SpillAcid( TimeSpan.FromSeconds( 10 ), 30, 30, 1, 4 );
return base.OnBeforeDeath();
}
public RedSolenQueen( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 );
writer.Write( m_BurstSac );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch( version )
{
case 1:
{
m_BurstSac = reader.ReadBool();
break;
}
}
}
}
}

View file

@ -0,0 +1,150 @@
using System;
using System.Collections;
using Server.Items;
using Server.Network;
namespace Server.Mobiles
{
[CorpseName( "a solen warrior corpse" )]
public class RedSolenWarrior : BaseCreature
{
private bool m_BurstSac;
public bool BurstSac{ get{ return m_BurstSac; } }
[Constructable]
public RedSolenWarrior() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a red solen warrior";
Body = 782;
BaseSoundID = 959;
SetStr( 196, 220 );
SetDex( 101, 125 );
SetInt( 36, 60 );
SetHits( 96, 107 );
SetDamage( 5, 15 );
SetDamageType( ResistanceType.Physical, 80 );
SetDamageType( ResistanceType.Poison, 20 );
SetResistance( ResistanceType.Physical, 20, 35 );
SetResistance( ResistanceType.Fire, 20, 35 );
SetResistance( ResistanceType.Cold, 10, 25 );
SetResistance( ResistanceType.Poison, 20, 35 );
SetResistance( ResistanceType.Energy, 10, 25 );
SetSkill( SkillName.MagicResist, 60.0 );
SetSkill( SkillName.Tactics, 80.0 );
SetSkill( SkillName.Wrestling, 80.0 );
Fame = 3000;
Karma = -3000;
VirtualArmor = 35;
SolenHelper.PackPicnicBasket( this );
PackItem( new ZoogiFungus( ( 0.05 < Utility.RandomDouble() )? 3 : 13 ) );
if ( Utility.RandomDouble() < 0.05 )
PackItem( new BraceletOfBinding() );
}
public override int GetAngerSound()
{
return 0xB5;
}
public override int GetIdleSound()
{
return 0xB5;
}
public override int GetAttackSound()
{
return 0x289;
}
public override int GetHurtSound()
{
return 0xBC;
}
public override int GetDeathSound()
{
return 0xE4;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich );
AddLoot( LootPack.Gems, Utility.RandomMinMax( 1, 4 ) );
}
public override bool IsEnemy( Mobile m )
{
if ( SolenHelper.CheckRedFriendship( m ) )
return false;
else
return base.IsEnemy( m );
}
public override void OnDamage( int amount, Mobile from, bool willKill )
{
SolenHelper.OnRedDamage( from );
if ( !willKill )
{
if ( !BurstSac )
{
if ( Hits < 50 )
{
PublicOverheadMessage( MessageType.Regular, 0x3B2, true, "* The solen's acid sac is burst open! *" );
m_BurstSac = true;
}
}
else if ( from != null && from != this && InRange( from, 1 ) )
{
SpillAcid( TimeSpan.FromSeconds( 10 ), 30, 30, from );
}
}
base.OnDamage( amount, from, willKill );
}
public override bool OnBeforeDeath()
{
SpillAcid( TimeSpan.FromSeconds( 10 ), 30, 30, 1, 4 );
return base.OnBeforeDeath();
}
public RedSolenWarrior( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 );
writer.Write( m_BurstSac );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch( version )
{
case 1:
{
m_BurstSac = reader.ReadBool();
break;
}
}
}
}
}

View file

@ -0,0 +1,111 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
namespace Server.Mobiles
{
[CorpseName( "a solen worker corpse" )]
public class RedSolenWorker : BaseCreature
{
[Constructable]
public RedSolenWorker() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a red solen worker";
Body = 781;
BaseSoundID = 959;
SetStr( 96, 120 );
SetDex( 81, 105 );
SetInt( 36, 60 );
SetHits( 58, 72 );
SetDamage( 5, 7 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 25, 30 );
SetResistance( ResistanceType.Fire, 20, 30 );
SetResistance( ResistanceType.Cold, 10, 20 );
SetResistance( ResistanceType.Poison, 10, 20 );
SetResistance( ResistanceType.Energy, 20, 30 );
SetSkill( SkillName.MagicResist, 60.0 );
SetSkill( SkillName.Tactics, 65.0 );
SetSkill( SkillName.Wrestling, 60.0 );
Fame = 1500;
Karma = -1500;
VirtualArmor = 28;
PackGold( Utility.Random( 100, 180 ) );
SolenHelper.PackPicnicBasket( this );
PackItem( new ZoogiFungus() );
}
public override int GetAngerSound()
{
return 0x269;
}
public override int GetIdleSound()
{
return 0x269;
}
public override int GetAttackSound()
{
return 0x186;
}
public override int GetHurtSound()
{
return 0x1BE;
}
public override int GetDeathSound()
{
return 0x8E;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Gems, Utility.RandomMinMax( 1, 2 ) );
}
public override bool IsEnemy( Mobile m )
{
if ( SolenHelper.CheckRedFriendship( m ) )
return false;
else
return base.IsEnemy( m );
}
public override void OnDamage( int amount, Mobile from, bool willKill )
{
SolenHelper.OnRedDamage( from );
base.OnDamage( amount, from, willKill );
}
public RedSolenWorker( 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();
}
}
}

View file

@ -0,0 +1,101 @@
using System;
using Server;
using Server.Items;
using Server.Network;
namespace Server.Mobiles
{
public class SolenHelper
{
public static void PackPicnicBasket( BaseCreature solen )
{
if ( 1 > Utility.Random( 100 ) )
{
PicnicBasket basket = new PicnicBasket();
basket.DropItem( new BeverageBottle( BeverageType.Wine ) );
basket.DropItem( new CheeseWedge() );
solen.PackItem( basket );
}
}
public static bool CheckRedFriendship( Mobile m )
{
if ( m is BaseCreature )
{
BaseCreature bc = (BaseCreature)m;
if ( bc.Controlled && bc.ControlMaster is PlayerMobile )
return CheckRedFriendship( bc.ControlMaster );
else if ( bc.Summoned && bc.SummonMaster is PlayerMobile )
return CheckRedFriendship( bc.SummonMaster );
}
PlayerMobile player = m as PlayerMobile;
return player != null && player.SolenFriendship == SolenFriendship.Red;
}
public static bool CheckBlackFriendship( Mobile m )
{
if ( m is BaseCreature )
{
BaseCreature bc = (BaseCreature)m;
if ( bc.Controlled && bc.ControlMaster is PlayerMobile )
return CheckBlackFriendship( bc.ControlMaster );
else if ( bc.Summoned && bc.SummonMaster is PlayerMobile )
return CheckBlackFriendship( bc.SummonMaster );
}
PlayerMobile player = m as PlayerMobile;
return player != null && player.SolenFriendship == SolenFriendship.Black;
}
public static void OnRedDamage( Mobile from )
{
if ( from is BaseCreature )
{
BaseCreature bc = (BaseCreature)from;
if ( bc.Controlled && bc.ControlMaster is PlayerMobile )
OnRedDamage( bc.ControlMaster );
else if ( bc.Summoned && bc.SummonMaster is PlayerMobile )
OnRedDamage( bc.SummonMaster );
}
PlayerMobile player = from as PlayerMobile;
if ( player != null && player.SolenFriendship == SolenFriendship.Red )
{
player.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1054103 ); // The solen revoke their friendship. You will now be considered an intruder.
player.SolenFriendship = SolenFriendship.None;
}
}
public static void OnBlackDamage( Mobile from )
{
if ( from is BaseCreature )
{
BaseCreature bc = (BaseCreature)from;
if ( bc.Controlled && bc.ControlMaster is PlayerMobile )
OnBlackDamage( bc.ControlMaster );
else if ( bc.Summoned && bc.SummonMaster is PlayerMobile )
OnBlackDamage( bc.SummonMaster );
}
PlayerMobile player = from as PlayerMobile;
if ( player != null && player.SolenFriendship == SolenFriendship.Black )
{
player.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1054103 ); // The solen revoke their friendship. You will now be considered an intruder.
player.SolenFriendship = SolenFriendship.None;
}
}
}
}