public void SpecialBuff(int skillID)
{
try
{
Character.Action.UsingSkillID = skillID;
if (SkillGetSameBuff(Character.Action.UsingSkillID)) return;
if (Character.Action.Buff.count > 21) return;
byte slot = SkillBuffGetFreeSlot();
if (slot == 255) return;
Character.Action.Buff.SkillID[slot] = Character.Action.UsingSkillID;
Character.Action.Buff.OverID[slot] = Character.Ids.GetBuffID();
Character.Action.Buff.slot = slot;
Character.Action.Buff.count++;
List<int> lis = Character.Spawn;
//add properties
foreach (KeyValuePair<string, int> p in Data.SkillBase[Character.Action.UsingSkillID].Properties1)
{
if (SkillAdd_Properties(this, p.Key, true, slot))
{
return;
};
}
// if imbue add to current imbue
if (Data.SkillBase[Character.Action.UsingSkillID].SkillType == Global.s_data.SkillTypes.IMBUE &&
!Data.SkillBase[Character.Action.UsingSkillID].Properties1.ContainsKey("hste"))
{
if (Character.Action.ImbueID != 0) return;
Character.Action.ImbueID = Character.Action.UsingSkillID;
}
Send(lis, Packet.SkillIconPacket(Character.Information.UniqueID, Character.Action.UsingSkillID, Character.Action.Buff.OverID[Character.Action.Buff.slot], false));
if (Data.SkillBase[Character.Action.UsingSkillID].Properties1.ContainsKey("dura") &&
(Data.SkillBase[Character.Action.UsingSkillID].RadiusType == Global.s_data.RadiusTypes.ONETARGET || (Data.SkillBase[Character.Action.UsingSkillID].RadiusType != Global.s_data.RadiusTypes.ONETARGET && Data.SkillBase[Character.Action.UsingSkillID].efrUnk1 != 3)))
{
// Skills with duration and self targeted
//Character.Action.CastingSkill = Character.Ids.GetCastingID();
//Send(lis, Packet.ActionPacket(1, 0, Character.Action.UsingSkillID, Character.Information.UniqueID, Character.Action.CastingSkill, 0));
StartBuffTimer(Data.SkillBase[Character.Action.UsingSkillID].Properties1["dura"], Character.Action.Buff.slot);
}
else if (Data.SkillBase[Character.Action.UsingSkillID].Properties1.ContainsKey("onff"))
{
// mana consume/time buffs
//Send(lis, Packet.SkillIconPacket(Character.Information.UniqueID, Character.Action.UsingSkillID, Character.Action.Buff.OverID[Character.Action.Buff.slot], false));
string series = Data.SkillBase[Character.Action.UsingSkillID].Series.Remove(Data.SkillBase[Character.Action.UsingSkillID].Series.Length - 2);
Character.Action.Buff.InfiniteBuffs.Add(series, Character.Action.Buff.slot);
}
else if (!Data.SkillBase[Character.Action.UsingSkillID].Properties1.ContainsKey("dura"))
{
// fast buffs
//Send(lis, Packet.SkillIconPacket(Character.Information.UniqueID, Character.Action.UsingSkillID, Character.Action.Buff.OverID[Character.Action.Buff.slot], false));
SkillBuffEnd(Character.Action.Buff.slot);
}
Character.Action.Buff.slot = 255;
}
catch (Exception ex)
{
Console.WriteLine("SpecialBuff error {0}", ex);
Systems.Debugger.Write(ex);
}
}