more gargoyle additions from servuo

This commit is contained in:
Mark Sturgill 2013-11-02 16:21:12 -07:00
parent f566daea30
commit fa1df8eae5
3 changed files with 188 additions and 4 deletions

View file

@ -222,7 +222,13 @@ namespace Server
Agility, //*
Cunning, //*
Strength, //*
Bless //*
Bless, //*
Sleep,
StoneForm,
SpellPlague,
SpellTrigger,
NetherBolt,
Fly
}
public sealed class AddBuffPacket : Packet
@ -231,6 +237,7 @@ namespace Server
: this( m, info.ID, info.TitleCliloc, info.SecondaryCliloc, info.Args, (info.TimeStart != DateTime.MinValue) ? ((info.TimeStart + info.TimeLength) - DateTime.UtcNow) : TimeSpan.Zero )
{
}
public AddBuffPacket( Mobile mob, BuffIcon iconID, int titleCliloc, int secondaryCliloc, TextDefinition args, TimeSpan length )
: base( 0xDF )
{
@ -292,12 +299,10 @@ namespace Server
this.EnsureCapacity( 13 );
m_Stream.Write( (int)mob.Serial );
m_Stream.Write( (short)iconID ); //ID
m_Stream.Write( (short)0x0 ); //Type 0 for removal. 1 for add 2 for Data
m_Stream.Fill( 4 );
}
}
}

View file

@ -86,6 +86,76 @@ namespace Server.Mobiles
public partial class PlayerMobile : Mobile, IHonorTarget
{
#region Stygian Abyss
public override void ToggleFlying()
{
if (Race != Race.Gargoyle)
{
return;
}
else if (Flying)
{
Freeze(TimeSpan.FromSeconds(1));
Animate(61, 10, 1, true, false, 0);
Flying = false;
BuffInfo.RemoveBuff(this, BuffIcon.Fly);
SendMessage("You have landed.");
BaseMount.Dismount(this);
return;
}
BlockMountType type = MountBlockReason;
if (!Alive)
{
SendLocalizedMessage(1113082); // You may not fly while dead.
}
else if (IsBodyMod && !(BodyMod == 666 || BodyMod == 667))
{
SendLocalizedMessage(1112453); // You can't fly in your current form!
}
else if (type != BlockMountType.None)
{
switch (type)
{
case BlockMountType.Dazed:
SendLocalizedMessage(1112457);
break; // You are still too dazed to fly.
case BlockMountType.BolaRecovery:
SendLocalizedMessage(1112455);
break; // You cannot fly while recovering from a bola throw.
case BlockMountType.DismountRecovery:
SendLocalizedMessage(1112456);
break; // You cannot fly while recovering from a dismount maneuver.
}
return;
}
else if (Hits < 25) // TODO confirm
{
SendLocalizedMessage(1112454); // You must heal before flying.
}
else
{
if (!Flying)
{
// No message?
if (Spell is FlySpell)
{
FlySpell spell = (FlySpell)Spell;
spell.Stop();
}
new FlySpell(this).Cast();
}
else
{
Flying = false;
BuffInfo.RemoveBuff(this, BuffIcon.Fly);
}
}
}
#endregion
private class CountAndTimeStamp
{
private int m_Count;
@ -123,7 +193,7 @@ namespace Server.Mobiles
private int m_ExecutesLightningStrike; // move to Server.Mobiles??
private DateTime m_LastOnline;
private Server.Guilds.RankDefinition m_GuildRank;
private Guilds.RankDefinition m_GuildRank;
private int m_GuildMessageHue, m_AllianceMessageHue;
@ -2757,6 +2827,14 @@ namespace Server.Mobiles
MeerMage.StopEffect( this, false );
#region Stygian Abyss
if (Flying)
{
Flying = false;
BuffInfo.RemoveBuff(this, BuffIcon.Fly);
}
#endregion
SkillHandlers.StolenItem.ReturnOnDeath( this, c );
if ( m_PermaFlags.Count > 0 )

View file

@ -0,0 +1,101 @@
using System;
namespace Server.Spells
{
public class FlySpell : Spell
{
private static readonly SpellInfo m_Info = new SpellInfo("Gargoyle Flight", null, -1, 9002);
private bool m_Stop;
public FlySpell(Mobile caster)
: base(caster, null, m_Info)
{
}
public override bool ClearHandsOnCast
{
get
{
return false;
}
}
public override bool RevealOnCast
{
get
{
return false;
}
}
public override double CastDelayFastScalar
{
get
{
return 0;
}
}
public override TimeSpan CastDelayBase
{
get
{
return TimeSpan.FromSeconds(.25);
}
}
public override TimeSpan GetCastRecovery()
{
return TimeSpan.Zero;
}
public override int GetMana()
{
return 0;
}
public override bool ConsumeReagents()
{
return true;
}
public override bool CheckFizzle()
{
return true;
}
public void Stop()
{
this.m_Stop = true;
this.Disturb(DisturbType.Hurt, false, false);
}
public override bool CheckDisturb(DisturbType type, bool checkFirst, bool resistable)
{
if (type == DisturbType.EquipRequest || type == DisturbType.UseRequest/* || type == DisturbType.Hurt*/)
return false;
return true;
}
public override void DoHurtFizzle()
{
}
public override void DoFizzle()
{
}
public override void OnDisturb(DisturbType type, bool message)
{
if (message && !this.m_Stop)
this.Caster.SendLocalizedMessage(1113192); // You have been disrupted while attempting to fly!
}
public override void OnCast()
{
this.Caster.Flying = false;
BuffInfo.RemoveBuff(this.Caster, BuffIcon.Fly);
this.Caster.Animate(60, 10, 1, true, false, 0);
this.Caster.SendLocalizedMessage(1112567); // You are flying.
this.Caster.Flying = true;
BuffInfo.AddBuff(this.Caster, new BuffInfo(BuffIcon.Fly, 1112567));
this.FinishSequence();
}
}
}