ModernUO/Projects/UOContent/Mobiles/Animals/Mounts/Kirin.cs
Kamron Batman bdee7bc671
fix: Fixes NPC slowness. (#955)
* Adds the following configurations:
  * `movement.delay.npcMinDelay` - 0.1 - Pets or Non-monster NPCs
  * `movement.delay.npcMaxDelay` - 0.4 - Pets or Non-monster NPCs
  * `movement.delay.monsterMinDelay` - 0.4 - Non-pet Monsters or NPC vs Player Combat
  * `movement.delay.monsterMaxDelay` - 0.8 - Non-pet Monsters or NPC vs Player Combat
  * `movement.delay.monsterMinDex` - 150 - Dex maximum for delay by dex
  * `movement.delay.MinDex` - 190 - Dex maximum for delay by dex
2022-03-10 22:55:06 -08:00

139 lines
4.4 KiB
C#

using System;
using Server.Items;
using Server.Network;
namespace Server.Mobiles
{
public class Kirin : BaseMount
{
[Constructible]
public Kirin(string name = "a ki-rin") : base(name, 132, 0x3EAD, AIType.AI_Mage, FightMode.Evil, 10, 1)
{
BaseSoundID = 0x3C5;
SetStr(296, 325);
SetDex(86, 105);
SetInt(186, 225);
SetHits(191, 210);
SetDamage(16, 22);
SetDamageType(ResistanceType.Physical, 70);
SetDamageType(ResistanceType.Fire, 10);
SetDamageType(ResistanceType.Cold, 10);
SetDamageType(ResistanceType.Energy, 10);
SetResistance(ResistanceType.Physical, 55, 65);
SetResistance(ResistanceType.Fire, 35, 45);
SetResistance(ResistanceType.Cold, 25, 35);
SetResistance(ResistanceType.Poison, 25, 35);
SetResistance(ResistanceType.Energy, 25, 35);
SetSkill(SkillName.EvalInt, 80.1, 90.0);
SetSkill(SkillName.Magery, 60.4, 100.0);
SetSkill(SkillName.Meditation, 90.1, 100.0);
SetSkill(SkillName.MagicResist, 85.3, 100.0);
SetSkill(SkillName.Tactics, 20.1, 22.5);
SetSkill(SkillName.Wrestling, 80.5, 92.5);
Fame = 9000;
Karma = 9000;
Tamable = true;
ControlSlots = 2;
MinTameSkill = 95.1;
}
public Kirin(Serial serial) : base(serial)
{
}
public override string CorpseName => "a ki-rin corpse";
public override bool AllowFemaleRider => false;
public override bool AllowFemaleTamer => false;
public override bool InitialInnocent => true;
public override TimeSpan MountAbilityDelay => TimeSpan.FromHours(1.0);
public override OppositionGroup OppositionGroup => OppositionGroup.FeyAndUndead;
public override int Meat => 3;
public override int Hides => 10;
public override HideType HideType => HideType.Horned;
public override FoodType FavoriteFood => FoodType.FruitsAndVegies | FoodType.GrainsAndHay;
public override void OnDisallowedRider(Mobile m)
{
m.SendLocalizedMessage(1042319); // The Ki-Rin refuses your attempts to mount it.
}
public override bool DoMountAbility(int damage, Mobile attacker)
{
if (Rider == null || attacker == null) // sanity
{
return false;
}
if (Rider.Hits - damage < 30 && Rider.Map == attacker.Map && Rider.InRange(attacker, 18)
) // Range and map checked here instead of other base fuction because of abiliites that don't need to check this
{
attacker.BoltEffect(0);
// 35~100 damage, unresistable, by the Ki-rin.
attacker.Damage(
Utility.RandomMinMax(35, 100),
this,
false
); // Don't inform mount about this damage, Still unsure wether or not it's flagged as the mount doing damage or the player. If changed to player, without the extra bool it'd be an infinite loop
Rider.LocalOverheadMessage(
MessageType.Regular,
0x3B2,
1042534
); // Your mount calls down the forces of nature on your opponent.
Rider.FixedParticles(0, 0, 0, 0x13A7, EffectLayer.Waist);
Rider.PlaySound(0xA9); // Ki-rin's whinny.
return true;
}
return false;
}
public override void GenerateLoot()
{
AddLoot(LootPack.Rich);
AddLoot(LootPack.LowScrolls);
AddLoot(LootPack.Potions);
}
public override void OnDeath(Container c)
{
base.OnDeath(c);
if (Utility.RandomDouble() < 0.35)
{
c.DropItem(new KirinBrains());
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (version == 0)
{
AI = AIType.AI_Mage;
}
}
}
}