#W# Source and Scripts added. Added Scripts/Settings.cs to expose some basic tweak able settings.

This commit is contained in:
WarrentyExpired 2026-08-06 11:06:05 -04:00
parent b51c58f514
commit 3045c83799
3512 changed files with 627673 additions and 0 deletions

View file

@ -0,0 +1,66 @@
using System;
using Server.Mobiles;
namespace Server.Mobiles
{
[CorpseName( "a pig corpse" )]
public class Boar : BaseCreature
{
[Constructable]
public Boar() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a boar";
Body = 0x122;
BaseSoundID = 0xC4;
SetStr( 25 );
SetDex( 15 );
SetInt( 5 );
SetHits( 15 );
SetMana( 0 );
SetDamage( 3, 6 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 10, 15 );
SetResistance( ResistanceType.Fire, 5, 10 );
SetResistance( ResistanceType.Poison, 5, 10 );
SetSkill( SkillName.MagicResist, 9.0 );
SetSkill( SkillName.Tactics, 9.0 );
SetSkill( SkillName.Wrestling, 9.0 );
Fame = 300;
Karma = 0;
VirtualArmor = 10;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 29.1;
}
public override int Meat{ get{ return 2; } }
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
public Boar(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,72 @@
using System;
using Server.Mobiles;
namespace Server.Mobiles
{
[CorpseName( "a bull frog corpse" )]
[TypeAlias( "Server.Mobiles.Bullfrog" )]
public class BullFrog : BaseCreature
{
[Constructable]
public BullFrog() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a bull frog";
Body = 81;
Hue = Utility.RandomList( 0x5AC,0x5A3,0x59A,0x591,0x588,0x57F );
BaseSoundID = 0x266;
SetStr( 46, 70 );
SetDex( 6, 25 );
SetInt( 11, 20 );
SetHits( 28, 42 );
SetMana( 0 );
SetDamage( 1, 2 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 5, 10 );
SetSkill( SkillName.MagicResist, 25.1, 40.0 );
SetSkill( SkillName.Tactics, 40.1, 60.0 );
SetSkill( SkillName.Wrestling, 40.1, 60.0 );
Fame = 350;
Karma = 0;
VirtualArmor = 6;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 23.1;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Poor );
}
public override int Meat{ get{ return 1; } }
public override int Hides{ get{ return 4; } }
public override FoodType FavoriteFood{ get{ return FoodType.Fish | FoodType.Meat; } }
public BullFrog(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,88 @@
using System;
using Server.Mobiles;
namespace Server.Mobiles
{
[CorpseName( "a dolphin corpse" )]
public class Dolphin : BaseCreature
{
[Constructable]
public Dolphin()
: base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a dolphin";
Body = 0x97;
BaseSoundID = 0x8A;
SetStr( 21, 49 );
SetDex( 66, 85 );
SetInt( 96, 110 );
SetHits( 15, 27 );
SetDamage( 3, 6 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 15, 20 );
SetResistance( ResistanceType.Fire, 70, 80 );
SetResistance( ResistanceType.Cold, 25, 30 );
SetResistance( ResistanceType.Poison, 10, 15 );
SetResistance( ResistanceType.Energy, 10, 15 );
SetSkill( SkillName.MagicResist, 15.1, 20.0 );
SetSkill( SkillName.Tactics, 19.2, 29.0 );
SetSkill( SkillName.Wrestling, 19.2, 29.0 );
Fame = 500;
Karma = 2000;
VirtualArmor = 16;
CanSwim = true;
CantWalk = true;
}
public override int Meat { get { return 1; } }
public Dolphin( Serial serial )
: base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if( from.AccessLevel >= AccessLevel.GameMaster )
Jump();
}
public virtual void Jump()
{
if( Utility.RandomBool() )
Animate( 3, 16, 1, true, false, 0 );
else
Animate( 4, 20, 1, true, false, 0 );
}
public override void OnThink()
{
if( Utility.RandomDouble() < .005 ) // slim chance to jump
Jump();
base.OnThink();
}
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,96 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a gaman corpse" )]
public class Gaman : BaseCreature
{
[Constructable]
public Gaman() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a gaman";
Body = 248;
SetStr( 146, 175 );
SetDex( 111, 150 );
SetInt( 46, 60 );
SetHits( 131, 160 );
SetMana( 0 );
SetDamage( 6, 11 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 50, 70 );
SetResistance( ResistanceType.Fire, 30, 50 );
SetResistance( ResistanceType.Cold, 30, 50 );
SetResistance( ResistanceType.Poison, 40, 60 );
SetResistance( ResistanceType.Energy, 30, 50 );
SetSkill( SkillName.MagicResist, 37.6, 42.5 );
SetSkill( SkillName.Tactics, 70.6, 83.0 );
SetSkill( SkillName.Wrestling, 50.1, 57.5 );
Fame = 2000;
Karma = -2000;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 68.7;
}
public override int GetAngerSound()
{
return 0x4F8;
}
public override int GetIdleSound()
{
return 0x4F7;
}
public override int GetAttackSound()
{
return 0x4F6;
}
public override int GetHurtSound()
{
return 0x4F9;
}
public override int GetDeathSound()
{
return 0x4F5;
}
public override int Meat{ get{ return 10; } }
public override int Hides{ get{ return 15; } }
public override FoodType FavoriteFood{ get{ return FoodType.GrainsAndHay; } }
public override void OnDeath( Container c )
{
base.OnDeath( c );
c.DropItem( new GamanHorns( Utility.RandomBool() ? 1 : 2 ) );
}
public Gaman( 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,78 @@
using System;
using Server.Mobiles;
namespace Server.Mobiles
{
[CorpseName( "a giant toad corpse" )]
[TypeAlias( "Server.Mobiles.Gianttoad" )]
public class GiantToad : BaseCreature
{
[Constructable]
public GiantToad() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a giant toad";
Body = 80;
BaseSoundID = 0x26B;
SetStr( 76, 100 );
SetDex( 6, 25 );
SetInt( 11, 20 );
SetHits( 46, 60 );
SetMana( 0 );
SetDamage( 5, 17 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 20, 25 );
SetResistance( ResistanceType.Fire, 5, 10 );
SetResistance( ResistanceType.Energy, 5, 10 );
SetSkill( SkillName.MagicResist, 25.1, 40.0 );
SetSkill( SkillName.Tactics, 40.1, 60.0 );
SetSkill( SkillName.Wrestling, 40.1, 60.0 );
Fame = 750;
Karma = -750;
VirtualArmor = 24;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 77.1;
}
public override void GenerateLoot()
{
AddLoot( LootPack.Poor );
}
public override int Hides{ get{ return 12; } }
public override HideType HideType{ get{ return HideType.Spined; } }
public override FoodType FavoriteFood{ get{ return FoodType.Fish | FoodType.Meat; } }
public GiantToad(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int) 1);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if ( version < 1 )
{
AI = AIType.AI_Melee;
FightMode = FightMode.Closest;
}
}
}
}

View file

@ -0,0 +1,65 @@
using System;
using Server.Mobiles;
namespace Server.Mobiles
{
[CorpseName( "a goat corpse" )]
public class Goat : BaseCreature
{
[Constructable]
public Goat() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a goat";
Body = 0xD1;
BaseSoundID = 0x99;
SetStr( 19 );
SetDex( 15 );
SetInt( 5 );
SetHits( 12 );
SetMana( 0 );
SetDamage( 3, 4 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 5, 15 );
SetSkill( SkillName.MagicResist, 5.0 );
SetSkill( SkillName.Tactics, 5.0 );
SetSkill( SkillName.Wrestling, 5.0 );
Fame = 150;
Karma = 0;
VirtualArmor = 10;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 11.1;
}
public override int Meat{ get{ return 2; } }
public override int Hides{ get{ return 8; } }
public override FoodType FavoriteFood{ get{ return FoodType.GrainsAndHay | FoodType.FruitsAndVegies; } }
public Goat(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,67 @@
using System;
using Server.Mobiles;
namespace Server.Mobiles
{
[CorpseName( "a gorilla corpse" )]
public class Gorilla : BaseCreature
{
[Constructable]
public Gorilla() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a gorilla";
Body = 0x1D;
BaseSoundID = 0x9E;
SetStr( 53, 95 );
SetDex( 36, 55 );
SetInt( 36, 60 );
SetHits( 38, 51 );
SetMana( 0 );
SetDamage( 4, 10 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 20, 25 );
SetResistance( ResistanceType.Fire, 5, 10 );
SetResistance( ResistanceType.Cold, 10, 15 );
SetSkill( SkillName.MagicResist, 45.1, 60.0 );
SetSkill( SkillName.Tactics, 43.3, 58.0 );
SetSkill( SkillName.Wrestling, 43.3, 58.0 );
Fame = 450;
Karma = 0;
VirtualArmor = 20;
Tamable = true;
ControlSlots = 1;
MinTameSkill = -18.9;
}
public override int Meat{ get{ return 1; } }
public override int Hides{ get{ return 6; } }
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
public Gorilla(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,81 @@
using System;
using Server.Mobiles;
namespace Server.Mobiles
{
[CorpseName( "a deer corpse" )]
[TypeAlias( "Server.Mobiles.Greathart" )]
public class GreatHart : BaseCreature
{
[Constructable]
public GreatHart() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a great hart";
Body = 0xEA;
SetStr( 41, 71 );
SetDex( 47, 77 );
SetInt( 27, 57 );
SetHits( 27, 41 );
SetMana( 0 );
SetDamage( 5, 9 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 20, 25 );
SetResistance( ResistanceType.Cold, 5, 10 );
SetSkill( SkillName.MagicResist, 26.8, 44.5 );
SetSkill( SkillName.Tactics, 29.8, 47.5 );
SetSkill( SkillName.Wrestling, 29.8, 47.5 );
Fame = 300;
Karma = 0;
VirtualArmor = 24;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 59.1;
}
public override int Meat{ get{ return 6; } }
public override int Hides{ get{ return 15; } }
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
public GreatHart(Serial serial) : base(serial)
{
}
public override int GetAttackSound()
{
return 0x82;
}
public override int GetHurtSound()
{
return 0x83;
}
public override int GetDeathSound()
{
return 0x84;
}
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,80 @@
using System;
using Server.Mobiles;
namespace Server.Mobiles
{
[CorpseName( "a deer corpse" )]
public class Hind : BaseCreature
{
[Constructable]
public Hind() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a hind";
Body = 0xED;
SetStr( 21, 51 );
SetDex( 47, 77 );
SetInt( 17, 47 );
SetHits( 15, 29 );
SetMana( 0 );
SetDamage( 4 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 5, 15 );
SetResistance( ResistanceType.Cold, 5 );
SetSkill( SkillName.MagicResist, 15.0 );
SetSkill( SkillName.Tactics, 19.0 );
SetSkill( SkillName.Wrestling, 26.0 );
Fame = 300;
Karma = 0;
VirtualArmor = 8;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 23.1;
}
public override int Meat{ get{ return 5; } }
public override int Hides{ get{ return 8; } }
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
public Hind(Serial serial) : base(serial)
{
}
public override int GetAttackSound()
{
return 0x82;
}
public override int GetHurtSound()
{
return 0x83;
}
public override int GetDeathSound()
{
return 0x84;
}
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,65 @@
using System;
using Server.Mobiles;
namespace Server.Mobiles
{
[CorpseName( "a llama corpse" )]
public class Llama : BaseCreature
{
[Constructable]
public Llama() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a llama";
Body = 0xDC;
BaseSoundID = 0x3F3;
SetStr( 21, 49 );
SetDex( 36, 55 );
SetInt( 16, 30 );
SetHits( 15, 27 );
SetMana( 0 );
SetDamage( 3, 5 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 15, 20 );
SetSkill( SkillName.MagicResist, 15.1, 20.0 );
SetSkill( SkillName.Tactics, 19.2, 29.0 );
SetSkill( SkillName.Wrestling, 19.2, 29.0 );
Fame = 300;
Karma = 0;
VirtualArmor = 16;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 35.1;
}
public override int Meat{ get{ return 1; } }
public override int Hides{ get{ return 12; } }
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
public Llama(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,69 @@
using System;
using Server.Mobiles;
namespace Server.Mobiles
{
[CorpseName( "a mountain goat corpse" )]
public class MountainGoat : BaseCreature
{
[Constructable]
public MountainGoat() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a mountain goat";
Body = 88;
BaseSoundID = 0x99;
SetStr( 22, 64 );
SetDex( 56, 75 );
SetInt( 16, 30 );
SetHits( 20, 33 );
SetMana( 0 );
SetDamage( 3, 7 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 10, 20 );
SetResistance( ResistanceType.Fire, 5, 10 );
SetResistance( ResistanceType.Cold, 10, 20 );
SetResistance( ResistanceType.Poison, 10, 15 );
SetResistance( ResistanceType.Energy, 10, 15 );
SetSkill( SkillName.MagicResist, 25.1, 30.0 );
SetSkill( SkillName.Tactics, 29.3, 44.0 );
SetSkill( SkillName.Wrestling, 29.3, 44.0 );
Fame = 300;
Karma = 0;
VirtualArmor = 10;
Tamable = true;
ControlSlots = 1;
MinTameSkill = -0.9;
}
public override int Meat{ get{ return 2; } }
public override int Hides{ get{ return 12; } }
public override FoodType FavoriteFood{ get{ return FoodType.GrainsAndHay | FoodType.FruitsAndVegies; } }
public MountainGoat(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,222 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Server.Mobiles;
using Server.Items;
using Server.ContextMenus;
namespace Server.Mobiles
{
[CorpseName( "a horse corpse" )]
public class PackHorse : BaseCreature
{
[Constructable]
public PackHorse() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a pack horse";
Body = 291;
BaseSoundID = 0xA8;
SetStr( 44, 120 );
SetDex( 36, 55 );
SetInt( 6, 10 );
SetHits( 61, 80 );
SetStam( 81, 100 );
SetMana( 0 );
SetDamage( 5, 11 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 20, 25 );
SetResistance( ResistanceType.Fire, 10, 15 );
SetResistance( ResistanceType.Cold, 20, 25 );
SetResistance( ResistanceType.Poison, 10, 15 );
SetResistance( ResistanceType.Energy, 10, 15 );
SetSkill( SkillName.MagicResist, 25.1, 30.0 );
SetSkill( SkillName.Tactics, 29.3, 44.0 );
SetSkill( SkillName.Wrestling, 29.3, 44.0 );
Fame = 0;
Karma = 200;
VirtualArmor = 16;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 11.1;
Container pack = Backpack;
if ( pack != null )
pack.Delete();
pack = new StrongBackpack();
pack.Movable = false;
AddItem( pack );
}
public override int Meat{ get{ return 3; } }
public override int Hides{ get{ return 10; } }
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
public PackHorse( Serial serial ) : base( serial )
{
}
#region Pack Animal Methods
public override bool OnBeforeDeath()
{
if ( !base.OnBeforeDeath() )
return false;
PackAnimal.CombineBackpacks( this );
return true;
}
public override DeathMoveResult GetInventoryMoveResultFor( Item item )
{
return DeathMoveResult.MoveToCorpse;
}
public override bool IsSnoop( Mobile from )
{
if ( PackAnimal.CheckAccess( this, from ) )
return false;
return base.IsSnoop( from );
}
public override bool OnDragDrop( Mobile from, Item item )
{
if ( CheckFeed( from, item ) )
return true;
if ( PackAnimal.CheckAccess( this, from ) )
{
AddToBackpack( item );
return true;
}
return base.OnDragDrop( from, item );
}
public override bool CheckNonlocalDrop( Mobile from, Item item, Item target )
{
return PackAnimal.CheckAccess( this, from );
}
public override bool CheckNonlocalLift( Mobile from, Item item )
{
return PackAnimal.CheckAccess( this, from );
}
public override void OnDoubleClick( Mobile from )
{
PackAnimal.TryPackOpen( this, from );
}
public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
{
base.GetContextMenuEntries( from, list );
PackAnimal.GetContextMenuEntries( this, from, list );
}
#endregion
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 PackAnimalBackpackEntry : ContextMenuEntry
{
private BaseCreature m_Animal;
private Mobile m_From;
public PackAnimalBackpackEntry( BaseCreature animal, Mobile from ) : base( 6145, 3 )
{
m_Animal = animal;
m_From = from;
if ( animal.IsDeadPet )
Enabled = false;
}
public override void OnClick()
{
PackAnimal.TryPackOpen( m_Animal, m_From );
}
}
public class PackAnimal
{
public static void GetContextMenuEntries( BaseCreature animal, Mobile from, List<ContextMenuEntry> list )
{
if ( CheckAccess( animal, from ) )
list.Add( new PackAnimalBackpackEntry( animal, from ) );
}
public static bool CheckAccess( BaseCreature animal, Mobile from )
{
if ( from == animal || from.AccessLevel >= AccessLevel.GameMaster )
return true;
if ( from.Alive && animal.Controlled && !animal.IsDeadPet && ( from == animal.ControlMaster || from == animal.SummonMaster || animal.IsPetFriend( from ) ) )
return true;
return false;
}
public static void CombineBackpacks( BaseCreature animal )
{
if ( Core.AOS )
return;
if ( animal.IsBonded || animal.IsDeadPet )
return;
Container pack = animal.Backpack;
if ( pack != null )
{
Container newPack = new Backpack();
for ( int i = pack.Items.Count - 1; i >= 0; --i )
{
if ( i >= pack.Items.Count )
continue;
newPack.DropItem( pack.Items[i] );
}
pack.DropItem( newPack );
}
}
public static void TryPackOpen( BaseCreature animal, Mobile from )
{
if ( animal.IsDeadPet )
return;
Container item = animal.Backpack;
if ( item != null )
from.Use( item );
}
}
}

View file

@ -0,0 +1,143 @@
using System;
using System.Collections.Generic;
using Server.Mobiles;
using Server.Items;
using Server.ContextMenus;
namespace Server.Mobiles
{
[CorpseName("a llama corpse")]
public class PackLlama : BaseCreature
{
[Constructable]
public PackLlama() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a pack llama";
Body = 292;
BaseSoundID = 0x3F3;
SetStr( 52, 80 );
SetDex( 36, 55 );
SetInt( 16, 30 );
SetHits( 50 );
SetStam( 86, 105 );
SetMana( 0 );
SetDamage( 2, 6 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 25, 35 );
SetResistance( ResistanceType.Fire, 10, 15 );
SetResistance( ResistanceType.Cold, 10, 15 );
SetResistance( ResistanceType.Poison, 10, 15 );
SetResistance( ResistanceType.Energy, 10, 15 );
SetSkill( SkillName.MagicResist, 15.1, 20.0 );
SetSkill( SkillName.Tactics, 19.2, 29.0 );
SetSkill( SkillName.Wrestling, 19.2, 29.0 );
Fame = 0;
Karma = 200;
VirtualArmor = 16;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 11.1;
Container pack = Backpack;
if ( pack != null )
pack.Delete();
pack = new StrongBackpack();
pack.Movable = false;
AddItem( pack );
}
public override int Meat{ get{ return 1; } }
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
public PackLlama( Serial serial ) : base( serial )
{
}
#region Pack Animal Methods
public override bool OnBeforeDeath()
{
if ( !base.OnBeforeDeath() )
return false;
PackAnimal.CombineBackpacks( this );
return true;
}
public override DeathMoveResult GetInventoryMoveResultFor( Item item )
{
return DeathMoveResult.MoveToCorpse;
}
public override bool IsSnoop( Mobile from )
{
if ( PackAnimal.CheckAccess( this, from ) )
return false;
return base.IsSnoop( from );
}
public override bool OnDragDrop( Mobile from, Item item )
{
if ( CheckFeed( from, item ) )
return true;
if ( PackAnimal.CheckAccess( this, from ) )
{
AddToBackpack( item );
return true;
}
return base.OnDragDrop( from, item );
}
public override bool CheckNonlocalDrop( Mobile from, Item item, Item target )
{
return PackAnimal.CheckAccess( this, from );
}
public override bool CheckNonlocalLift( Mobile from, Item item )
{
return PackAnimal.CheckAccess( this, from );
}
public override void OnDoubleClick( Mobile from )
{
PackAnimal.TryPackOpen( this, from );
}
public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
{
base.GetContextMenuEntries( from, list );
PackAnimal.GetContextMenuEntries( this, from, list );
}
#endregion
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,64 @@
using System;
using Server.Mobiles;
namespace Server.Mobiles
{
[CorpseName( "a pig corpse" )]
public class Pig : BaseCreature
{
[Constructable]
public Pig() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a pig";
Body = 0xCB;
BaseSoundID = 0xC4;
SetStr( 20 );
SetDex( 20 );
SetInt( 5 );
SetHits( 12 );
SetMana( 0 );
SetDamage( 2, 4 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 10, 15 );
SetSkill( SkillName.MagicResist, 5.0 );
SetSkill( SkillName.Tactics, 5.0 );
SetSkill( SkillName.Wrestling, 5.0 );
Fame = 150;
Karma = 0;
VirtualArmor = 12;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 11.1;
}
public override int Meat{ get{ return 1; } }
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
public Pig(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 Server;
using Server.Items;
using Server.Mobiles;
using Server.Network;
namespace Server.Mobiles
{
[CorpseName( "a sheep corpse" )]
public class Sheep : BaseCreature, ICarvable
{
private DateTime m_NextWoolTime;
[CommandProperty( AccessLevel.GameMaster )]
public DateTime NextWoolTime
{
get{ return m_NextWoolTime; }
set{ m_NextWoolTime = value; Body = ( DateTime.UtcNow >= m_NextWoolTime ) ? 0xCF : 0xDF; }
}
public void Carve( Mobile from, Item item )
{
if ( DateTime.UtcNow < m_NextWoolTime )
{
// This sheep is not yet ready to be shorn.
PrivateOverheadMessage( MessageType.Regular, 0x3B2, 500449, from.NetState );
return;
}
from.SendLocalizedMessage( 500452 ); // You place the gathered wool into your backpack.
from.AddToBackpack( new Wool( Map == Map.Felucca ? 2 : 1 ) );
NextWoolTime = DateTime.UtcNow + TimeSpan.FromHours( 3.0 ); // TODO: Proper time delay
}
public override void OnThink()
{
base.OnThink();
Body = ( DateTime.UtcNow >= m_NextWoolTime ) ? 0xCF : 0xDF;
}
[Constructable]
public Sheep() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a sheep";
Body = 0xCF;
BaseSoundID = 0xD6;
SetStr( 19 );
SetDex( 25 );
SetInt( 5 );
SetHits( 12 );
SetMana( 0 );
SetDamage( 1, 2 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 5, 10 );
SetSkill( SkillName.MagicResist, 5.0 );
SetSkill( SkillName.Tactics, 6.0 );
SetSkill( SkillName.Wrestling, 5.0 );
Fame = 300;
Karma = 0;
VirtualArmor = 6;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 11.1;
}
public override int Meat{ get{ return 3; } }
public override MeatType MeatType{ get{ return MeatType.LambLeg; } }
public override FoodType FavoriteFood{ get{ return FoodType.FruitsAndVegies | FoodType.GrainsAndHay; } }
public override int Wool{ get{ return (Body == 0xCF ? 3 : 0); } }
public Sheep( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 );
writer.WriteDeltaTime( m_NextWoolTime );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 1:
{
NextWoolTime = reader.ReadDeltaTime();
break;
}
}
}
}
}

View file

@ -0,0 +1,69 @@
using System;
using Server.Mobiles;
namespace Server.Mobiles
{
[CorpseName( "a walrus corpse" )]
public class Walrus : BaseCreature
{
[Constructable]
public Walrus() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 )
{
Name = "a walrus";
Body = 0xDD;
BaseSoundID = 0xE0;
SetStr( 21, 29 );
SetDex( 46, 55 );
SetInt( 16, 20 );
SetHits( 14, 17 );
SetMana( 0 );
SetDamage( 4, 10 );
SetDamageType( ResistanceType.Physical, 100 );
SetResistance( ResistanceType.Physical, 20, 25 );
SetResistance( ResistanceType.Fire, 5, 10 );
SetResistance( ResistanceType.Cold, 20, 25 );
SetResistance( ResistanceType.Poison, 5, 10 );
SetResistance( ResistanceType.Energy, 5, 10 );
SetSkill( SkillName.MagicResist, 15.1, 20.0 );
SetSkill( SkillName.Tactics, 19.2, 29.0 );
SetSkill( SkillName.Wrestling, 19.2, 29.0 );
Fame = 150;
Karma = 0;
VirtualArmor = 18;
Tamable = true;
ControlSlots = 1;
MinTameSkill = 35.1;
}
public override int Meat{ get{ return 1; } }
public override int Hides{ get{ return 12; } }
public override FoodType FavoriteFood{ get{ return FoodType.Fish; } }
public Walrus(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();
}
}
}