partial psz patch
This commit is contained in:
parent
d03acbffaf
commit
869f68488d
23 changed files with 15471 additions and 19 deletions
71
Scripts/Mobiles/Monsters/Humanoid/Melee/GreaterMongbat.cs
Normal file
71
Scripts/Mobiles/Monsters/Humanoid/Melee/GreaterMongbat.cs
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server.Items;
|
||||
using Server.Targeting;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a mongbat corpse" )]
|
||||
public class GreaterMongbat : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public GreaterMongbat() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a greater mongbat";
|
||||
Body = 39;
|
||||
BaseSoundID = 422;
|
||||
|
||||
SetStr( 56, 80 );
|
||||
SetDex( 61, 80 );
|
||||
SetInt( 26, 50 );
|
||||
|
||||
SetHits( 34, 48 );
|
||||
SetStam( 61, 80);
|
||||
SetMana( 26, 50 );
|
||||
|
||||
SetDamage( 5, 7 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 15, 25 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 15.1, 30.0 );
|
||||
SetSkill( SkillName.Tactics, 35.1, 50.0 );
|
||||
SetSkill( SkillName.Wrestling, 20.1, 35.0 );
|
||||
|
||||
Fame = 450;
|
||||
Karma = -450;
|
||||
|
||||
VirtualArmor = 10;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 71.1;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Poor );
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 1; } }
|
||||
public override int Hides{ get{ return 6; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
|
||||
|
||||
public GreaterMongbat( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
184
Scripts/Mobiles/Monsters/LBR/Jukas/ChaosDragoon.cs
Normal file
184
Scripts/Mobiles/Monsters/LBR/Jukas/ChaosDragoon.cs
Normal file
|
|
@ -0,0 +1,184 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Misc;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a chaos dragoon corpse" )]
|
||||
public class ChaosDragoon : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public ChaosDragoon() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.15, 0.4 )
|
||||
{
|
||||
Name = "a chaos dragoon";
|
||||
Body = 0x190;
|
||||
Hue = Utility.RandomSkinHue();
|
||||
|
||||
SetStr( 176, 225 );
|
||||
SetDex( 81, 95 );
|
||||
SetInt( 61, 85 );
|
||||
|
||||
SetHits( 176, 225 );
|
||||
|
||||
SetDamage( 24, 26 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 25 );
|
||||
SetDamageType( ResistanceType.Fire, 25 );
|
||||
SetDamageType( ResistanceType.Cold, 25 );
|
||||
SetDamageType( ResistanceType.Energy, 25 );
|
||||
|
||||
//SetResistance( ResistanceType.Physical, 25, 38 );
|
||||
//SetResistance( ResistanceType.Fire, 25, 38 );
|
||||
//SetResistance( ResistanceType.Cold, 25, 38 );
|
||||
//SetResistance( ResistanceType.Poison, 25, 38 );
|
||||
//SetResistance( ResistanceType.Energy, 25, 38 );
|
||||
|
||||
SetSkill( SkillName.Fencing, 77.6, 92.5 );
|
||||
SetSkill( SkillName.Healing, 60.3, 90.0 );
|
||||
SetSkill( SkillName.Macing, 77.6, 92.5 );
|
||||
SetSkill( SkillName.Anatomy, 77.6, 87.5 );
|
||||
SetSkill( SkillName.MagicResist, 77.6, 97.5 );
|
||||
SetSkill( SkillName.Swords, 77.6, 92.5 );
|
||||
SetSkill( SkillName.Tactics, 77.6, 87.5 );
|
||||
|
||||
Fame = 5000;
|
||||
Karma = -5000;
|
||||
|
||||
CraftResource res;
|
||||
|
||||
switch (Utility.Random( 6 ))
|
||||
{
|
||||
case 0: res = CraftResource.BlackScales; break;
|
||||
case 1: res = CraftResource.RedScales; break;
|
||||
case 2: res = CraftResource.BlueScales; break;
|
||||
case 3: res = CraftResource.YellowScales; break;
|
||||
case 4: res = CraftResource.GreenScales; break;
|
||||
case 5: res = CraftResource.WhiteScales; break;
|
||||
}
|
||||
|
||||
BaseWeapon melee = null;
|
||||
|
||||
switch (Utility.Random( 3 ))
|
||||
{
|
||||
case 0: melee = new Kryss(); break;
|
||||
case 1: melee = new Broadsword(); break;
|
||||
case 2: melee = new Katana(); break;
|
||||
}
|
||||
|
||||
melee.Movable = false;
|
||||
AddItem( melee );
|
||||
|
||||
DragonHelm helm = new DragonHelm();
|
||||
helm.Resource = res;
|
||||
helm.Movable = false;
|
||||
AddItem( helm );
|
||||
|
||||
DragonChest chest = new DragonChest();
|
||||
chest.Resource = res;
|
||||
chest.Movable = false;
|
||||
AddItem( chest );
|
||||
|
||||
DragonArms arms = new DragonArms();
|
||||
arms.Resource = res;
|
||||
arms.Movable = false;
|
||||
AddItem( arms );
|
||||
|
||||
DragonGloves gloves = new DragonGloves();
|
||||
gloves.Resource = res;
|
||||
gloves.Movable = false;
|
||||
AddItem( gloves );
|
||||
|
||||
DragonLegs legs = new DragonLegs();
|
||||
legs.Resource = res;
|
||||
legs.Movable = false;
|
||||
AddItem( legs );
|
||||
|
||||
ChaosShield shield = new ChaosShield();
|
||||
shield.Movable = false;
|
||||
AddItem( shield );
|
||||
|
||||
AddItem( new Shirt() );
|
||||
AddItem( new Boots() );
|
||||
|
||||
int amount = Utility.RandomMinMax( 1, 3 );
|
||||
|
||||
switch ( res )
|
||||
{
|
||||
case CraftResource.BlackScales: AddItem( new BlackScales( amount ) ); break;
|
||||
case CraftResource.RedScales: AddItem( new RedScales( amount ) ); break;
|
||||
case CraftResource.BlueScales: AddItem( new BlueScales( amount ) ); break;
|
||||
case CraftResource.YellowScales: AddItem( new YellowScales( amount ) ); break;
|
||||
case CraftResource.GreenScales: AddItem( new GreenScales( amount ) ); break;
|
||||
case CraftResource.WhiteScales: AddItem( new WhiteScales( amount ) ); break;
|
||||
}
|
||||
|
||||
new SwampDragon().Rider = this;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x2CE;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x2CC;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x2D1;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x2C8;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Rich );
|
||||
//AddLoot( LootPack.Gems );
|
||||
}
|
||||
|
||||
public override bool HasBreath{ get{ return true; } }
|
||||
public override bool AutoDispel{ get{ return true; } }
|
||||
public override bool BardImmune{ get{ return !Core.AOS; } }
|
||||
public override bool CanRummageCorpses{ get{ return true; } }
|
||||
public override bool AlwaysMurderer{ get{ return true; } }
|
||||
public override bool ShowFameTitle{ get{ return false; } }
|
||||
|
||||
public override bool OnBeforeDeath()
|
||||
{
|
||||
IMount mount = this.Mount;
|
||||
|
||||
if ( mount != null )
|
||||
mount.Rider = null;
|
||||
|
||||
return base.OnBeforeDeath();
|
||||
}
|
||||
|
||||
public override void AlterMeleeDamageTo( Mobile to, ref int damage )
|
||||
{
|
||||
if ( to is Dragon || to is WhiteWyrm || to is SwampDragon || to is Drake || to is Nightmare || to is Hiryu || to is LesserHiryu || to is Daemon )
|
||||
damage *= 3;
|
||||
}
|
||||
|
||||
public ChaosDragoon( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
206
Scripts/Mobiles/Monsters/LBR/Jukas/ChaosDragoonElite.cs
Normal file
206
Scripts/Mobiles/Monsters/LBR/Jukas/ChaosDragoonElite.cs
Normal file
|
|
@ -0,0 +1,206 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Misc;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a chaos dragoon elite corpse")]
|
||||
public class ChaosDragoonElite : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public ChaosDragoonElite()
|
||||
: base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.15, 0.4)
|
||||
{
|
||||
Name = "a chaos dragoon elite";
|
||||
Body = 0x190;
|
||||
Hue = Utility.RandomSkinHue();
|
||||
|
||||
SetStr(276, 350);
|
||||
SetDex(66, 90);
|
||||
SetInt(126, 150);
|
||||
|
||||
SetHits(276, 350);
|
||||
|
||||
SetDamage(29, 34);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
/*SetResistance(ResistanceType.Physical, 45, 55);
|
||||
SetResistance(ResistanceType.Fire, 15, 25);
|
||||
SetResistance(ResistanceType.Cold, 50);
|
||||
SetResistance(ResistanceType.Poison, 25, 35);
|
||||
SetResistance(ResistanceType.Energy, 25, 35);*/
|
||||
|
||||
|
||||
SetSkill(SkillName.Tactics, 80.1, 100.0);
|
||||
SetSkill(SkillName.MagicResist, 100.1, 110.0);
|
||||
SetSkill(SkillName.Anatomy, 80.1, 100.0);
|
||||
SetSkill(SkillName.Magery, 85.1, 100.0);
|
||||
SetSkill(SkillName.EvalInt, 85.1, 100.0);
|
||||
SetSkill(SkillName.Swords, 72.5, 95.0);
|
||||
SetSkill(SkillName.Fencing, 85.1, 100);
|
||||
SetSkill(SkillName.Macing, 85.1, 100);
|
||||
|
||||
Fame = 8000;
|
||||
Karma = -8000;
|
||||
|
||||
CraftResource res;
|
||||
|
||||
switch (Utility.Random(6))
|
||||
{
|
||||
case 0: res = CraftResource.BlackScales; break;
|
||||
case 1: res = CraftResource.RedScales; break;
|
||||
case 2: res = CraftResource.BlueScales; break;
|
||||
case 3: res = CraftResource.YellowScales; break;
|
||||
case 4: res = CraftResource.GreenScales; break;
|
||||
case 5: res = CraftResource.WhiteScales; break;
|
||||
}
|
||||
|
||||
BaseWeapon melee = null;
|
||||
|
||||
switch (Utility.Random(3))
|
||||
{
|
||||
case 0: melee = new Kryss(); break;
|
||||
case 1: melee = new Broadsword(); break;
|
||||
case 2: melee = new Katana(); break;
|
||||
}
|
||||
|
||||
melee.Movable = false;
|
||||
AddItem(melee);
|
||||
|
||||
DragonChest Tunic = new DragonChest();
|
||||
Tunic.Resource = res;
|
||||
Tunic.Movable = false;
|
||||
AddItem(Tunic);
|
||||
|
||||
DragonLegs Legs = new DragonLegs();
|
||||
Legs.Resource = res;
|
||||
Legs.Movable = false;
|
||||
AddItem(Legs);
|
||||
|
||||
DragonArms Arms = new DragonArms();
|
||||
Arms.Resource = res;
|
||||
Arms.Movable = false;
|
||||
AddItem(Arms);
|
||||
|
||||
DragonGloves Gloves = new DragonGloves();
|
||||
Gloves.Resource = res;
|
||||
Gloves.Movable = false;
|
||||
AddItem(Gloves);
|
||||
|
||||
DragonHelm Helm = new DragonHelm();
|
||||
Helm.Resource = res;
|
||||
Helm.Movable = false;
|
||||
AddItem(Helm);
|
||||
|
||||
ChaosShield shield = new ChaosShield();
|
||||
shield.Movable = false;
|
||||
AddItem(shield);
|
||||
|
||||
AddItem(new Boots(0x455));
|
||||
AddItem(new Shirt(Utility.RandomMetalHue()));
|
||||
|
||||
int amount = Utility.RandomMinMax(1, 3);
|
||||
|
||||
switch (res)
|
||||
{
|
||||
case CraftResource.BlackScales: AddItem(new BlackScales(amount)); break;
|
||||
case CraftResource.RedScales: AddItem(new RedScales(amount)); break;
|
||||
case CraftResource.BlueScales: AddItem(new BlueScales(amount)); break;
|
||||
case CraftResource.YellowScales: AddItem(new YellowScales(amount)); break;
|
||||
case CraftResource.GreenScales: AddItem(new GreenScales(amount)); break;
|
||||
case CraftResource.WhiteScales: AddItem(new WhiteScales(amount)); break;
|
||||
}
|
||||
switch (Utility.Random(9))
|
||||
{
|
||||
case 0: res = CraftResource.DullCopper; break;
|
||||
case 1: res = CraftResource.ShadowIron; break;
|
||||
case 2: res = CraftResource.Copper; break;
|
||||
case 3: res = CraftResource.Bronze; break;
|
||||
case 4: res = CraftResource.Gold; break;
|
||||
case 5: res = CraftResource.Agapite; break;
|
||||
case 6: res = CraftResource.Verite; break;
|
||||
case 7: res = CraftResource.Valorite; break;
|
||||
case 8: res = CraftResource.Iron; break;
|
||||
}
|
||||
|
||||
SwampDragon mt = new SwampDragon();
|
||||
mt.HasBarding = true;
|
||||
mt.BardingResource = res;
|
||||
mt.BardingHP = mt.BardingMaxHP;
|
||||
mt.Rider = this;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x2CE;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x2CC;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x2D1;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x2C8;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Rich);
|
||||
AddLoot(LootPack.Gems);
|
||||
}
|
||||
|
||||
public override bool HasBreath { get { return true; } }
|
||||
public override bool AutoDispel { get { return true; } }
|
||||
public override bool BardImmune { get { return !Core.AOS; } }
|
||||
public override bool CanRummageCorpses { get { return true; } }
|
||||
public override bool AlwaysMurderer { get { return true; } }
|
||||
public override bool ShowFameTitle { get { return false; } }
|
||||
|
||||
public override bool OnBeforeDeath()
|
||||
{
|
||||
IMount mount = this.Mount;
|
||||
|
||||
if ( mount != null )
|
||||
{
|
||||
if ( mount is SwampDragon )
|
||||
((SwampDragon)mount).HasBarding = false;
|
||||
|
||||
mount.Rider = null;
|
||||
}
|
||||
|
||||
return base.OnBeforeDeath();
|
||||
}
|
||||
|
||||
public override void AlterMeleeDamageTo(Mobile to, ref int damage)
|
||||
{
|
||||
if ( to is Dragon || to is WhiteWyrm || to is SwampDragon || to is Drake || to is Nightmare || to is Hiryu || to is LesserHiryu || to is Daemon )
|
||||
damage *= 3;
|
||||
}
|
||||
|
||||
public ChaosDragoonElite(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
128
Scripts/Mobiles/Monsters/ML/Animal/CuSidhe.cs
Normal file
128
Scripts/Mobiles/Monsters/ML/Animal/CuSidhe.cs
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
using Server;
|
||||
using System;
|
||||
using Server.Items;
|
||||
using Server.Gumps;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a Cu Sidhe corpse" )]
|
||||
public class CuSidhe : BaseMount
|
||||
{
|
||||
[Constructable]
|
||||
public CuSidhe() : this( "a Cu Sidhe" )
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public CuSidhe( string name ) : base( name, 277, 0x3E91, AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
double chance = Utility.RandomDouble() * 23301;
|
||||
|
||||
if ( chance <= 1 )
|
||||
Hue = 0x489;
|
||||
else if ( chance < 50 )
|
||||
Hue = Utility.RandomList( 0x657, 0x515, 0x4B1, 0x481, 0x480, 0x455 );
|
||||
else if ( chance < 500 )
|
||||
Hue = Utility.RandomList( 0x97A, 0x978, 0x901, 0x8AC, 0x5A7, 0x527 );
|
||||
|
||||
SetStr( 1201, 1225 );
|
||||
SetDex( 151, 170 );
|
||||
SetInt( 251, 282 );
|
||||
|
||||
SetDamage( 4, 5 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 0 );
|
||||
SetDamageType( ResistanceType.Cold, 50 );
|
||||
SetDamageType( ResistanceType.Energy, 50 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 55, 65 );
|
||||
SetResistance( ResistanceType.Fire, 30, 45 );
|
||||
SetResistance( ResistanceType.Cold, 70, 85 );
|
||||
SetResistance( ResistanceType.Poison, 30, 50 );
|
||||
SetResistance( ResistanceType.Energy, 70, 85 );
|
||||
|
||||
SetSkill( SkillName.Wrestling, 90.1, 96.8 );
|
||||
SetSkill( SkillName.Tactics, 90.3, 99.3 );
|
||||
SetSkill( SkillName.MagicResist, 75.3, 90.0 );
|
||||
SetSkill( SkillName.Anatomy, 65.5, 69.4 );
|
||||
SetSkill( SkillName.Healing, 72.2, 98.9 );
|
||||
|
||||
Fame = 5000; //Guessing here
|
||||
Karma = 5000; //Guessing here
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 4;
|
||||
MinTameSkill = 101.1;
|
||||
|
||||
if ( Utility.RandomDouble() < 0.2 )
|
||||
PackItem( new TreasureMap( 5, Map.Trammel ) );
|
||||
|
||||
//if ( Utility.RandomDouble() < 0.1 )
|
||||
//PackItem( new ParrotItem() );
|
||||
|
||||
PackGold( 500, 800 );
|
||||
|
||||
// TODO 0-2 spellweaving scroll
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.AosFilthyRich, 5 );
|
||||
}
|
||||
|
||||
public override void OnDoubleClick( Mobile from )
|
||||
{
|
||||
if ( from.Race != Race.Elf && from == ControlMaster && from.AccessLevel == AccessLevel.Player )
|
||||
{
|
||||
Item pads = from.FindItemOnLayer( Layer.Shoes );
|
||||
|
||||
if ( pads is PadsOfTheCuSidhe )
|
||||
from.SendMessage( "Your boots allow you to mount the Cu Sidhe", null, 0x3B2 );
|
||||
else
|
||||
{
|
||||
from.SendLocalizedMessage( 1072203 ); // Only Elves may use this.
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
base.OnDoubleClick( from );
|
||||
}
|
||||
|
||||
public override bool CanHeal{ get{ return true; } }
|
||||
public override bool CanHealOwner{ get{ return true; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies; } }
|
||||
public override bool CanAngerOnTame{ get { return true; } }
|
||||
public override bool StatLossAfterTame{ get{ return true; } }
|
||||
public override int Hides{ get{ return 10; } }
|
||||
public override int Meat{ get{ return 3; } }
|
||||
|
||||
public override WeaponAbility GetWeaponAbility()
|
||||
{
|
||||
return WeaponAbility.BleedAttack;
|
||||
}
|
||||
|
||||
public CuSidhe( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override int GetIdleSound() { return 0x577; }
|
||||
public override int GetAttackSound() { return 0x576; }
|
||||
public override int GetAngerSound() { return 0x578; }
|
||||
public override int GetHurtSound() { return 0x576; }
|
||||
public override int GetDeathSound() { return 0x579; }
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
64
Scripts/Mobiles/Monsters/ML/Animal/RagingGrizzlyBear.cs
Normal file
64
Scripts/Mobiles/Monsters/ML/Animal/RagingGrizzlyBear.cs
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a grizzly bear corpse" )]
|
||||
[TypeAlias( "Server.Mobiles.Grizzlybear" )]
|
||||
public class RagingGrizzlyBear : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public RagingGrizzlyBear() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a raging grizzly bear";
|
||||
Body = 212;
|
||||
BaseSoundID = 0xA3;
|
||||
|
||||
SetStr( 1251, 1550 );
|
||||
SetDex( 801, 1050 );
|
||||
SetInt( 151, 400 );
|
||||
|
||||
SetHits( 751, 930 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 6, 7 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 50, 70 );
|
||||
SetResistance( ResistanceType.Cold, 30, 50 );
|
||||
SetResistance( ResistanceType.Poison, 10, 20 );
|
||||
SetResistance( ResistanceType.Energy, 10, 20 );
|
||||
|
||||
Fame = 5000; //Guessing here
|
||||
Karma = -5000; //Guessing here
|
||||
|
||||
VirtualArmor = 24;
|
||||
|
||||
Tamable = false;
|
||||
|
||||
}
|
||||
|
||||
public override int Meat{ get{ return 2; } }
|
||||
public override int Hides{ get{ return 16; } }
|
||||
public override PackInstinct PackInstinct{ get{ return PackInstinct.Bear; } }
|
||||
|
||||
public RagingGrizzlyBear( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
109
Scripts/Mobiles/Monsters/ML/Humanoid/Magic/FetidEssence.cs
Normal file
109
Scripts/Mobiles/Monsters/ML/Humanoid/Magic/FetidEssence.cs
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a fetid essence corpse")]
|
||||
public class FetidEssence : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public FetidEssence () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a fetid essence";
|
||||
Body = 273;
|
||||
|
||||
SetStr( 101, 150 );
|
||||
SetDex( 210, 250 );
|
||||
SetInt( 451, 550 );
|
||||
|
||||
SetHits( 551, 650 );
|
||||
|
||||
SetDamage( 11, 13 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 30 );
|
||||
SetDamageType( ResistanceType.Poison, 70 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 40, 50 );
|
||||
SetResistance( ResistanceType.Fire, 40, 50 );
|
||||
SetResistance( ResistanceType.Cold, 40, 50 );
|
||||
SetResistance( ResistanceType.Poison, 70, 90 );
|
||||
SetResistance( ResistanceType.Energy, 75, 80 );
|
||||
|
||||
SetSkill(SkillName.Meditation, 91.4, 99.4 );
|
||||
SetSkill(SkillName.EvalInt, 88.5, 92.3 );
|
||||
SetSkill(SkillName.Magery, 97.9, 101.7 );
|
||||
SetSkill(SkillName.Poisoning, 100 );
|
||||
SetSkill(SkillName.Anatomy, 0, 4.5 );
|
||||
SetSkill( SkillName.MagicResist, 103.5, 108.8 );
|
||||
SetSkill( SkillName.Tactics, 81.0, 84.6 );
|
||||
SetSkill( SkillName.Wrestling, 81.3, 83.9 );
|
||||
|
||||
Fame = 3700; // Guessed
|
||||
Karma = -3700; // Guessed
|
||||
}
|
||||
|
||||
/*public override void GenerateLoot() -- Need to verify
|
||||
{
|
||||
AddLoot( LootPack.Meager );
|
||||
AddLoot( LootPack.Average );
|
||||
}*/
|
||||
|
||||
public override int GetAngerSound()
|
||||
{
|
||||
return 0x56d;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x56b;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x56c;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x56c;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x56e;
|
||||
}
|
||||
|
||||
public FetidEssence ( 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();
|
||||
}
|
||||
|
||||
/*private class InternalTimer : Timer
|
||||
{
|
||||
private Mobile m_From;
|
||||
private Mobile m_Mobile;
|
||||
private int m_Count;
|
||||
|
||||
public InternalTimer( Mobile from, Mobile m ) : base( TimeSpan.FromSeconds( 1.0 ), TimeSpan.FromSeconds( 1.0 ) )
|
||||
{
|
||||
m_From = from;
|
||||
m_Mobile = m;
|
||||
Priority = TimerPriority.TwoFiftyMS;
|
||||
}
|
||||
|
||||
}*/
|
||||
}
|
||||
}
|
||||
127
Scripts/Mobiles/Monsters/ML/Humanoid/Magic/InterredGrizzle .cs
Normal file
127
Scripts/Mobiles/Monsters/ML/Humanoid/Magic/InterredGrizzle .cs
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("an interred grizzle corpse")]
|
||||
public class InterredGrizzle : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public InterredGrizzle () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "an interred grizzle";
|
||||
Body = 259;
|
||||
|
||||
SetStr( 451, 500 );
|
||||
SetDex( 201, 250 );
|
||||
SetInt( 801, 850 );
|
||||
|
||||
SetHits( 1500 );
|
||||
SetStam( 150 );
|
||||
|
||||
SetDamage( 5, 6 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 30 );
|
||||
SetDamageType( ResistanceType.Fire, 70 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 35, 55 );
|
||||
SetResistance( ResistanceType.Fire, 20, 65 );
|
||||
SetResistance( ResistanceType.Cold, 55, 80 );
|
||||
SetResistance( ResistanceType.Poison, 20, 35 );
|
||||
SetResistance( ResistanceType.Energy, 60, 80 );
|
||||
|
||||
SetSkill(SkillName.Meditation, 77.7, 84.0 );
|
||||
SetSkill(SkillName.EvalInt, 72.2, 79.6 );
|
||||
SetSkill(SkillName.Magery, 83.7, 89.6);
|
||||
SetSkill(SkillName.Poisoning, 0 );
|
||||
SetSkill(SkillName.Anatomy, 0 );
|
||||
SetSkill( SkillName.MagicResist, 80.2, 87.3 );
|
||||
SetSkill( SkillName.Tactics, 104.5, 105.1 );
|
||||
SetSkill( SkillName.Wrestling, 105.1, 109.4 );
|
||||
|
||||
Fame = 3700; // Guessed
|
||||
Karma = -3700; // Guessed
|
||||
}
|
||||
|
||||
/*public override void GenerateLoot() -- Need to verify
|
||||
{
|
||||
AddLoot( LootPack.Meager );
|
||||
AddLoot( LootPack.Average );
|
||||
}*/
|
||||
|
||||
// TODO: Acid Blood
|
||||
/*
|
||||
* Message: 1070820
|
||||
* Spits pool of acid (blood, hue 0x3F), hits lost 6-10 per second/step
|
||||
* Damage is resistable (physical)
|
||||
* Acid last 10 seconds
|
||||
*/
|
||||
|
||||
public override int GetAngerSound()
|
||||
{
|
||||
return 0x581;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x582;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x580;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x583;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x584;
|
||||
}
|
||||
|
||||
/*
|
||||
public override bool OnBeforeDeath()
|
||||
{
|
||||
SpillAcid( 1, 4, 10, 6, 10 );
|
||||
|
||||
return base.OnBeforeDeath();
|
||||
}
|
||||
*/
|
||||
|
||||
public InterredGrizzle ( 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();
|
||||
}
|
||||
|
||||
private class InternalTimer : Timer
|
||||
{
|
||||
private Mobile m_From;
|
||||
private Mobile m_Mobile;
|
||||
private int m_Count;
|
||||
|
||||
public InternalTimer( Mobile from, Mobile m ) : base( TimeSpan.FromSeconds( 1.0 ), TimeSpan.FromSeconds( 1.0 ) )
|
||||
{
|
||||
m_From = from;
|
||||
m_Mobile = m;
|
||||
Priority = TimerPriority.TwoFiftyMS;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
84
Scripts/Mobiles/Monsters/ML/Humanoid/Magic/MLDryad.cs
Normal file
84
Scripts/Mobiles/Monsters/ML/Humanoid/Magic/MLDryad.cs
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server.Items;
|
||||
using Server.Targeting;
|
||||
using Server.Misc;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a dryad corpse")]
|
||||
public class MLDryad : BaseCreature
|
||||
{
|
||||
public override bool InitialInnocent { get { return true; } }
|
||||
|
||||
/* VULNERABLE TO FEY SLAYER!
|
||||
* These creatures should be able to cast Area Peace as
|
||||
* well as cause Players' armor to drop into their backpack*/
|
||||
|
||||
public override WeaponAbility GetWeaponAbility()
|
||||
{
|
||||
return WeaponAbility.Disrobe;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public MLDryad()
|
||||
: base(AIType.AI_Mage, FightMode.Aggressor, 10, 1, 0.2, 0.4) // NEED TO CHECK
|
||||
{
|
||||
Name = "a dryad";
|
||||
Body = 266;
|
||||
BaseSoundID = 0x57B;
|
||||
|
||||
SetStr(132, 149);
|
||||
SetDex(152, 168);
|
||||
SetInt(251, 280);
|
||||
|
||||
SetHits(304, 321);
|
||||
|
||||
SetDamage(6, 11);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 40, 50);
|
||||
SetResistance(ResistanceType.Fire, 15, 25);
|
||||
SetResistance(ResistanceType.Cold, 40, 45);
|
||||
SetResistance(ResistanceType.Poison, 30, 40);
|
||||
SetResistance(ResistanceType.Energy, 25, 35);
|
||||
|
||||
SetSkill(SkillName.Meditation, 80.9, 89.9);
|
||||
SetSkill(SkillName.EvalInt, 70.3, 78.7);
|
||||
SetSkill(SkillName.Magery, 70.7, 75.7);
|
||||
SetSkill(SkillName.Anatomy, 0);
|
||||
SetSkill(SkillName.MagicResist, 101.7, 117.1);
|
||||
SetSkill(SkillName.Tactics, 71.7, 79.8);
|
||||
SetSkill(SkillName.Wrestling, 72.5, 79.5);
|
||||
|
||||
Fame = 5000;
|
||||
Karma = 5000;
|
||||
|
||||
VirtualArmor = 28; // Don't know what it should be
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Rich); // Need to verify
|
||||
}
|
||||
|
||||
public override int Meat { get { return 1; } }
|
||||
|
||||
public MLDryad(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
84
Scripts/Mobiles/Monsters/ML/Humanoid/Magic/Satyr.cs
Normal file
84
Scripts/Mobiles/Monsters/ML/Humanoid/Magic/Satyr.cs
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server.Items;
|
||||
using Server.Targeting;
|
||||
using Server.Misc;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a satyr corpse")]
|
||||
public class Satyr : BaseCreature
|
||||
{
|
||||
/* These creatures should be able to cast Area Peace as
|
||||
* well as cause Players' armor to drop into their backpack
|
||||
*/
|
||||
|
||||
public override WeaponAbility GetWeaponAbility()
|
||||
{
|
||||
return WeaponAbility.Disrobe;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Satyr()
|
||||
: base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4) // NEED TO CHECK
|
||||
{
|
||||
Name = "a satyr";
|
||||
Body = 271;
|
||||
BaseSoundID = 0x586;
|
||||
|
||||
SetStr(177, 195);
|
||||
SetDex(251, 269);
|
||||
SetInt(153, 170);
|
||||
|
||||
SetHits(353, 399);
|
||||
|
||||
SetDamage(6, 11);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 55, 60);
|
||||
SetResistance(ResistanceType.Fire, 26, 35);
|
||||
SetResistance(ResistanceType.Cold, 30, 40);
|
||||
SetResistance(ResistanceType.Poison, 30, 40);
|
||||
SetResistance(ResistanceType.Energy, 30, 40);
|
||||
|
||||
SetSkill(SkillName.Poisoning, 0);
|
||||
SetSkill(SkillName.Meditation, 0);
|
||||
SetSkill(SkillName.EvalInt, 0);
|
||||
SetSkill(SkillName.Magery, 0);
|
||||
SetSkill(SkillName.Anatomy, 0);
|
||||
SetSkill(SkillName.MagicResist, 55.3, 64.3);
|
||||
SetSkill(SkillName.Tactics, 80.1, 99.3);
|
||||
SetSkill(SkillName.Wrestling, 80.6, 100.0);
|
||||
|
||||
Fame = 5000;
|
||||
Karma = -5000;
|
||||
|
||||
VirtualArmor = 28; // Don't know what it should be
|
||||
}
|
||||
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Rich); // Need to verify
|
||||
}
|
||||
|
||||
public override int Meat { get { return 1; } }
|
||||
|
||||
public Satyr(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a treefellow corpse" )]
|
||||
public class FerelTreefellow : BaseCreature
|
||||
{
|
||||
public override WeaponAbility GetWeaponAbility()
|
||||
{
|
||||
return WeaponAbility.Dismount;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public FerelTreefellow() : base( AIType.AI_Melee, FightMode.Evil, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a ferel treefellow";
|
||||
Body = 301;
|
||||
|
||||
SetStr( 1351, 1600 );
|
||||
SetDex( 301, 550 );
|
||||
SetInt( 651, 900 );
|
||||
|
||||
SetHits( 1170, 1320 );
|
||||
|
||||
SetDamage( 3, 4 ); // Estimate until Anat/Tactics is verified
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 60, 70 );
|
||||
SetResistance( ResistanceType.Cold, 70, 80 );
|
||||
SetResistance( ResistanceType.Poison, 60, 70 );
|
||||
SetResistance( ResistanceType.Energy, 40, 60 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 40.1, 55.0 );// Unknown
|
||||
SetSkill( SkillName.Tactics, 65.1, 90.0 );// Unknown
|
||||
SetSkill( SkillName.Wrestling, 65.1, 85.0 );// Unknown
|
||||
|
||||
Fame = 1000; //Unknown
|
||||
Karma = -3000; //Unknown
|
||||
|
||||
VirtualArmor = 24;
|
||||
PackItem( new Log( Utility.RandomMinMax( 23, 34 ) ) );
|
||||
}
|
||||
|
||||
public override OppositionGroup OppositionGroup
|
||||
{
|
||||
get{ return OppositionGroup.FeyAndUndead; }
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 443;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 31;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 672;
|
||||
}
|
||||
|
||||
public override bool BleedImmune{ get{ return true; } }
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Average ); //Unknown
|
||||
}
|
||||
|
||||
public FerelTreefellow( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
77
Scripts/Mobiles/Monsters/ML/Misc/Melee/CorrosiveSlime.cs
Normal file
77
Scripts/Mobiles/Monsters/ML/Misc/Melee/CorrosiveSlime.cs
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server.Items;
|
||||
using Server.Targeting;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a slimey corpse" )]
|
||||
public class CorrosiveSlime : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public CorrosiveSlime() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "a corrosive slime";
|
||||
Body = 51;
|
||||
BaseSoundID = 456;
|
||||
|
||||
Hue = Utility.RandomSlimeHue();
|
||||
|
||||
SetStr( 22, 34 );
|
||||
SetDex( 16, 21 );
|
||||
SetInt( 16, 20 );
|
||||
|
||||
SetHits( 15, 19 );
|
||||
|
||||
SetDamage( 1, 5 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 5, 10 );
|
||||
SetResistance( ResistanceType.Poison, 15, 20 );
|
||||
|
||||
SetSkill( SkillName.Poisoning, 36.0, 49.1 );
|
||||
SetSkill(SkillName.Anatomy, 0);
|
||||
SetSkill( SkillName.MagicResist, 15.9, 18.9 );
|
||||
SetSkill( SkillName.Tactics, 24.6, 26.1 );
|
||||
SetSkill( SkillName.Wrestling, 24.9, 26.1 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = -300;
|
||||
|
||||
VirtualArmor = 8;
|
||||
|
||||
Tamable = true;
|
||||
ControlSlots = 1;
|
||||
MinTameSkill = 23.1;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Poor );
|
||||
AddLoot( LootPack.Gems );
|
||||
}
|
||||
|
||||
public override Poison PoisonImmune { get { return Poison.Regular; } }
|
||||
public override Poison HitPoison { get { return Poison.Regular; } }
|
||||
public override FoodType FavoriteFood{ get{ return FoodType.Fish; } }
|
||||
|
||||
//TODO: Damage weapon via acid
|
||||
|
||||
public CorrosiveSlime( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
104
Scripts/Mobiles/Monsters/ML/Special/Ilhenir.cs
Normal file
104
Scripts/Mobiles/Monsters/ML/Special/Ilhenir.cs
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("corpse of Ilhenir")]
|
||||
public class Ilhenir : BaseCreature
|
||||
{
|
||||
|
||||
// Based off of the Bone Demon, since Stratics and UOGuide are lacking in info. Many things guessed for now.
|
||||
[Constructable]
|
||||
public Ilhenir()
|
||||
: base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
Name = "Ilhenir";
|
||||
Title = "the Stained";
|
||||
Body = 259;
|
||||
|
||||
SetStr( 1105, 1350 );
|
||||
SetDex( 82, 160 );
|
||||
SetInt( 505, 750 );
|
||||
|
||||
SetHits( 9000 );
|
||||
|
||||
SetDamage(4, 6);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 60);
|
||||
SetDamageType(ResistanceType.Fire, 20);
|
||||
SetDamageType(ResistanceType.Poison, 20);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 55, 65);
|
||||
SetResistance(ResistanceType.Fire, 50, 60);
|
||||
SetResistance(ResistanceType.Cold, 55, 65);
|
||||
SetResistance(ResistanceType.Poison, 70, 90);
|
||||
SetResistance(ResistanceType.Energy, 65, 75);
|
||||
|
||||
SetSkill(SkillName.EvalInt, 100);
|
||||
SetSkill(SkillName.Magery, 100);
|
||||
SetSkill(SkillName.Meditation, 0);
|
||||
SetSkill(SkillName.Poisoning, 5.4);
|
||||
SetSkill(SkillName.Anatomy, 117.5);
|
||||
SetSkill(SkillName.MagicResist, 120.0);
|
||||
SetSkill(SkillName.Tactics, 119.9);
|
||||
SetSkill(SkillName.Wrestling, 119.9);
|
||||
|
||||
Fame = 50000;
|
||||
Karma = -50000;
|
||||
|
||||
VirtualArmor = 44;
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.FilthyRich, 8);
|
||||
}
|
||||
|
||||
public override bool Unprovokable { get { return true; } }
|
||||
public override bool Uncalmable { get { return true; } }
|
||||
public override Poison PoisonImmune { get { return Poison.Lethal; } }
|
||||
public override int TreasureMapLevel { get { return 1; } }
|
||||
|
||||
public override int GetAngerSound()
|
||||
{
|
||||
return 0x581;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x582;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x580;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x583;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x584;
|
||||
}
|
||||
public Ilhenir(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
100
Scripts/Mobiles/Monsters/ML/Special/Meraktus.cs
Normal file
100
Scripts/Mobiles/Monsters/ML/Special/Meraktus.cs
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using Server.Items;
|
||||
using Server.Targeting;
|
||||
using Server.Misc;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName( "a minotaur corpse" )]
|
||||
public class Meraktus : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public Meraktus() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) // NEED TO CHECK
|
||||
{
|
||||
Name = "Meraktus";
|
||||
Title = "the Tormented";
|
||||
Body = 262;
|
||||
|
||||
SetStr( 1419, 1438 );
|
||||
SetDex( 309, 413 );
|
||||
SetInt( 129, 131 );
|
||||
|
||||
SetHits( 4100, 4200 );
|
||||
|
||||
SetDamage( 3, 5 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 65, 90 );
|
||||
SetResistance( ResistanceType.Fire, 65, 70 );
|
||||
SetResistance( ResistanceType.Cold, 50, 60 );
|
||||
SetResistance( ResistanceType.Poison, 40, 60 );
|
||||
SetResistance( ResistanceType.Energy, 50, 55 );
|
||||
|
||||
//SetSkill( SkillName.Meditation, Unknown );
|
||||
//SetSkill( SkillName.EvalInt, Unknown );
|
||||
//SetSkill( SkillName.Magery, Unknown );
|
||||
//SetSkill( SkillName.Poisoning, Unknown );
|
||||
SetSkill( SkillName.Anatomy, 0);
|
||||
SetSkill( SkillName.MagicResist, 107.0, 111.3 );
|
||||
SetSkill( SkillName.Tactics, 107.0, 117.0 );
|
||||
SetSkill( SkillName.Wrestling, 100.0, 105.0 );
|
||||
|
||||
Fame = 70000;
|
||||
Karma = -70000;
|
||||
|
||||
VirtualArmor = 28; // Don't know what it should be
|
||||
|
||||
// TODO: Area Ground Stomp: Damage + Dismount
|
||||
}
|
||||
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.Rich ); // Need to verify
|
||||
AddLoot(LootPack.Rich); // Need to verify
|
||||
}
|
||||
|
||||
public override int GetAngerSound()
|
||||
{
|
||||
return 0x597;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x596;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x599;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x59a;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x59c;
|
||||
}
|
||||
|
||||
public Meraktus( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
144
Scripts/Mobiles/Monsters/ML/Special/Twaulo.cs
Normal file
144
Scripts/Mobiles/Monsters/ML/Special/Twaulo.cs
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class Twaulo : BaseCreature
|
||||
{
|
||||
// COMPLETELY guessed beyond stats. Stats/skills come from Stratics and UOGuide. No idea what the special attacks should be.
|
||||
// Based on Silvani, due to them both using Blue creatures.
|
||||
[Constructable]
|
||||
public Twaulo()
|
||||
: base(AIType.AI_Archer, FightMode.Evil, 18, 1, 0.1, 0.2)
|
||||
{
|
||||
Name = "Twaulo";
|
||||
Title = "of the Glade";
|
||||
Body = 101;
|
||||
BaseSoundID = 679;
|
||||
|
||||
SetStr( 1751, 1950 );
|
||||
SetDex( 251, 450 );
|
||||
SetInt( 801, 1000 );
|
||||
|
||||
SetHits( 7500 );
|
||||
|
||||
SetDamage( 3, 4 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 65, 75 );
|
||||
SetResistance( ResistanceType.Fire, 45, 55 );
|
||||
SetResistance( ResistanceType.Cold, 50, 60 );
|
||||
SetResistance( ResistanceType.Poison, 50, 60 );
|
||||
SetResistance( ResistanceType.Energy, 50, 60 );
|
||||
|
||||
SetSkill( SkillName.Archery, 85.0, 100 ); // Guestimate
|
||||
SetSkill( SkillName.EvalInt, 0 ); // Per Stratics?!?
|
||||
SetSkill( SkillName.Magery, 0 ); // Per Stratics?!?
|
||||
SetSkill( SkillName.Meditation, 0 ); // Per Stratics?!?
|
||||
SetSkill( SkillName.MagicResist, 0 ); // Per Stratics?!?
|
||||
SetSkill( SkillName.Tactics, 85.0, 100 ); // Stratics says 0?!?
|
||||
SetSkill( SkillName.Wrestling, 0 ); // Per Stratics?!?
|
||||
|
||||
Fame = 50000;
|
||||
Karma = 50000;
|
||||
|
||||
VirtualArmor = 50;
|
||||
|
||||
AddItem(new Bow());
|
||||
PackItem(new Arrow(Utility.RandomMinMax(500, 700)));
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot( LootPack.UltraRich, 2 );
|
||||
}
|
||||
|
||||
public override OppositionGroup OppositionGroup
|
||||
{
|
||||
get{ return OppositionGroup.FeyAndUndead; }
|
||||
}
|
||||
|
||||
public override bool Unprovokable{ get{ return true; } }
|
||||
public override Poison PoisonImmune{ get{ return Poison.Regular; } }
|
||||
public override int TreasureMapLevel{ get{ return 5; } }
|
||||
|
||||
public void SpawnPixies( Mobile target )
|
||||
{
|
||||
Map map = this.Map;
|
||||
|
||||
if ( map == null )
|
||||
return;
|
||||
|
||||
int newPixies = Utility.RandomMinMax( 3, 6 );
|
||||
|
||||
for ( int i = 0; i < newPixies; ++i )
|
||||
{
|
||||
Pixie pixie = new Pixie();
|
||||
|
||||
pixie.Team = this.Team;
|
||||
pixie.FightMode = FightMode.Closest;
|
||||
|
||||
bool validLocation = false;
|
||||
Point3D loc = this.Location;
|
||||
|
||||
for ( int j = 0; !validLocation && j < 10; ++j )
|
||||
{
|
||||
int x = X + Utility.Random( 3 ) - 1;
|
||||
int y = Y + Utility.Random( 3 ) - 1;
|
||||
int z = map.GetAverageZ( x, y );
|
||||
|
||||
if ( validLocation = map.CanFit( x, y, this.Z, 16, false, false ) )
|
||||
loc = new Point3D( x, y, Z );
|
||||
else if ( validLocation = map.CanFit( x, y, z, 16, false, false ) )
|
||||
loc = new Point3D( x, y, z );
|
||||
}
|
||||
|
||||
pixie.MoveToWorld( loc, map );
|
||||
pixie.Combatant = target;
|
||||
}
|
||||
}
|
||||
|
||||
public override void AlterDamageScalarFrom( Mobile caster, ref double scalar )
|
||||
{
|
||||
if ( 0.1 >= Utility.RandomDouble() )
|
||||
SpawnPixies( caster );
|
||||
}
|
||||
|
||||
public override void OnGaveMeleeAttack( Mobile defender )
|
||||
{
|
||||
base.OnGaveMeleeAttack( defender );
|
||||
|
||||
defender.Damage( Utility.Random( 20, 10 ), this );
|
||||
defender.Stam -= Utility.Random( 20, 10 );
|
||||
defender.Mana -= Utility.Random( 20, 10 );
|
||||
}
|
||||
|
||||
public override void OnGotMeleeAttack( Mobile attacker )
|
||||
{
|
||||
base.OnGotMeleeAttack( attacker );
|
||||
|
||||
if ( 0.1 >= Utility.RandomDouble() )
|
||||
SpawnPixies( attacker );
|
||||
}
|
||||
|
||||
public Twaulo( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue