void StartSkill()
{
try
{
if (!Character.Action.sAttack) return;
#region Arrow for bow
if (!Character.Action.Skill.P_M)
{
if (Data.ItemBase[Character.Information.Item.wID].Class_C == 6)
{
if (Character.Information.Item.sID == 0) //arrow yoksa slota
{
if (!ItemCheckArrow()) //inventorydeki arrowlar kontrol et
{
Character.Action.sAttack = false;
client.Send(Packet.ActionPacket(2, 0x0e)); //hic arrow yoksa hata ver
StopSkillTimer();
return;
}
}
else //arrow varsa slotta
{
Character.Information.Item.sAmount--;
client.Send(Packet.Arrow(Character.Information.Item.sAmount));
if (Character.Information.Item.sAmount <= 0) // arrow bitti
{
Character.Information.Item.sID = 0;
MsSQL.UpdateData("delete from char_items where itemnumber='item" + 7 + "' AND owner='" + Character.Information.CharacterID + "'");
if (!ItemCheckArrow()) //inventorydeki arrowlar kontrol et
{
Character.Action.sAttack = false;
client.Send(Packet.ActionPacket(2, 0x0e)); //hic arrow yoksa hata ver
StopSkillTimer();
return;
}
}
else
{
MsSQL.InsertData("UPDATE char_items SET quantity='" + Math.Abs(Character.Information.Item.sAmount) + "' WHERE itemnumber='" + "item" + 7 + "' AND owner='" + Character.Information.CharacterID + "' AND itemid='" + Character.Information.Item.sID + "'");
}
}
}
}
#endregion
if (Character.Stat.SecondMP < Data.SkillBase[Character.Action.Skill.MainSkill].Mana)
{
Character.Action.sAttack = false;
StopSkillTimer();
client.Send(Packet.ActionPacket(2, 4));
return;
}
else
{
Character.Stat.SecondMP -= Data.SkillBase[Character.Action.Skill.MainSkill].Mana;
if (Character.Stat.SecondMP < 0) Character.Stat.SecondMP = 1;
UpdateMp();
Character.Action.Skill.MainCasting = Character.Ids.GetCastingID();
List<int> lis = Character.Spawn;
Send(lis, Packet.ActionPacket(1, 0, Character.Action.Skill.MainSkill, Character.Information.UniqueID, Character.Action.Skill.MainCasting, Character.Action.Target));
if (Data.SkillBase[Character.Action.Skill.MainSkill].isAttackSkill)
{
if (Character.Action.Skill.Instant == 0)
MainSkill_Attack(lis);
else
StartSkillCastingTimer(Character.Action.Skill.Instant * 1000, lis);
}
else
{
Character.Action.sAttack = false;
Character.Action.sCasting = false;
// todo: here iterate through all target player (not only one object => efr)
if (Data.SkillBase[Character.Action.Skill.MainSkill].Properties1.ContainsKey("heal") ||
Data.SkillBase[Character.Action.Skill.MainSkill].Properties1.ContainsKey("curl"))
{
Systems Target = Character.Action.Object as Systems;
Target.SpecialBuff(Character.Action.Skill.MainSkill);
}
Effect.EffectMain(Character.Action.Object, Character.Action.Skill.MainSkill);
}
}
}
catch (Exception ex)
{
Systems.Debugger.Write(ex);
}
}