void SkillBuff()
{
try
{
if (SkillGetSameBuff(Character.Action.UsingSkillID))
return;
if (Character.Speed.DefaultSpeed != Character.Speed.RunSpeed && Data.SkillBase[Character.Action.UsingSkillID].Properties1.ContainsKey("hste"))
return;
else if (Character.Speed.DefaultSpeed + Character.Speed.Updateded[20] != Character.Speed.RunSpeed && Data.SkillBase[Character.Action.UsingSkillID].Properties1.ContainsKey("hste") && Character.Information.Berserking)
return;
if (Data.SkillBase[Character.Action.UsingSkillID].Name.Contains("SKILL_OP") && Character.Information.GM == 0) return;
if (Data.SkillBase[Character.Action.UsingSkillID].Name.Contains("TRADE")) return;
if (!Base.Skill.CheckWeapon(Character.Information.Item.wID, Character.Action.UsingSkillID))
{
client.Send(Packet.ActionPacket(2, 0x0D));
client.Send(Packet.IngameMessages2(SERVER_ACTIONSTATE, IngameMessages.UIIT_SKILL_USE_FAIL_WRONGWEAPON));
return;
}
if (Character.Action.ImbueID != 0 &&
Data.SkillBase[Character.Action.UsingSkillID].SkillType == Global.s_data.SkillTypes.IMBUE &&
!Data.SkillBase[Character.Action.UsingSkillID].Properties1.ContainsKey("hste"))
return;
if (Character.Action.Buff.count > 21) return;
byte slot = SkillBuffGetFreeSlot();
if (slot == 255) return;
if (Character.Stat.SecondMP < Data.SkillBase[Character.Action.UsingSkillID].Mana) { client.Send(Packet.ActionPacket(2, 4)); Character.Action.Cast = false; return; }
else
{
Character.Stat.SecondMP -= Data.SkillBase[Character.Action.UsingSkillID].Mana;
if (Character.Stat.SecondMP < 0) Character.Stat.SecondMP = 1;
UpdateMp();
Character.Action.CastingSkill = Character.Ids.GetCastingID();
if (Data.SkillBase[Character.Action.UsingSkillID].RadiusType == Global.s_data.RadiusTypes.ONETARGET)
{
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++;
foreach (KeyValuePair<string, int> p in Data.SkillBase[Character.Action.UsingSkillID].Properties1)
{
if (SkillAdd_Properties(this, p.Key, true, slot))
{
Character.Action.Cast = false;
return;
};
}
}
List<int> lis = Character.Spawn;
Send(Packet.ActionPacket(1, 0, Character.Action.UsingSkillID, Character.Information.UniqueID, Character.Action.CastingSkill, 0));
Character.Action.Cast = true;
Effect.EffectMain(Character.Action.Object, Character.Action.UsingSkillID);
StartCastingTimer(Data.SkillBase[Character.Action.UsingSkillID].CastingTime, lis);
}
}
catch (Exception ex)
{
Console.WriteLine("Skill buff {0}", ex);
}
}