ModernUO/Projects/Scripts/Mobiles/Animals/Mounts/Beetle.cs
2019-08-02 18:16:11 -07:00

171 lines
3.8 KiB
C#

using System.Collections.Generic;
using Server.ContextMenus;
using Server.Items;
namespace Server.Mobiles
{
public class Beetle : BaseMount
{
[Constructible]
public Beetle(string name = "a giant beetle") :
base(name, 0x317, 0x3EBC, AIType.AI_Melee, FightMode.Closest, 10, 1, 0.25, 0.5)
{
SetStr(300);
SetDex(100);
SetInt(500);
SetHits(200);
SetDamage(7, 20);
SetDamageType(ResistanceType.Physical, 100);
SetResistance(ResistanceType.Physical, 30, 40);
SetResistance(ResistanceType.Fire, 20, 30);
SetResistance(ResistanceType.Cold, 20, 30);
SetResistance(ResistanceType.Poison, 20, 30);
SetResistance(ResistanceType.Energy, 20, 30);
SetSkill(SkillName.MagicResist, 80.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Wrestling, 100.0);
Fame = 4000;
Karma = -4000;
Tamable = true;
ControlSlots = 3;
MinTameSkill = 29.1;
Container pack = Backpack;
pack?.Delete();
pack = new StrongBackpack();
pack.Movable = false;
AddItem(pack);
}
public Beetle(Serial serial) : base(serial)
{
}
public override string CorpseName => "a giant beetle corpse";
public virtual double BoostedSpeed => 0.1;
public override bool SubdueBeforeTame => true; // Must be beaten into submission
public override bool ReduceSpeedWithDamage => false;
public override FoodType FavoriteFood => FoodType.Meat;
public override int GetAngerSound()
{
return 0x21D;
}
public override int GetIdleSound()
{
return 0x21D;
}
public override int GetAttackSound()
{
return 0x162;
}
public override int GetHurtSound()
{
return 0x163;
}
public override int GetDeathSound()
{
return 0x21D;
}
public override void OnHarmfulSpell(Mobile from)
{
if (!Controlled && ControlMaster == null)
CurrentSpeed = BoostedSpeed;
}
public override void OnCombatantChange()
{
if (Combatant == null && !Controlled && ControlMaster == null)
CurrentSpeed = PassiveSpeed;
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
#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 GetContextMenuEntries(Mobile from, List<ContextMenuEntry> list)
{
base.GetContextMenuEntries(from, list);
PackAnimal.GetContextMenuEntries(this, from, list);
}
#endregion
}
}