void SkillMain(byte type, PacketReader Reader)
{
try
{
if (!SkillGetOpened(Character.Action.UsingSkillID)) return;
client.Send(Packet.ActionState(1, 1));
//Console.WriteLine("Skill id: {0}", Data.SkillBase[Character.Action.UsingSkillID].Series); // Dev Mode
switch (type)
{
case 1:
if (Character.Action.sAttack) return;
if (Character.Action.sCasting) return;
if (Character.Action.nAttack) StopAttackTimer();
if (!Base.Skill.CheckWeapon(Character.Information.Item.wID, Character.Action.UsingSkillID))
{
client.Send(Packet.IngameMessages(SERVER_ACTION_DATA, IngameMessages.UIIT_SKILL_USE_FAIL_WRONGWEAPON));
client.Send(Packet.IngameMessages2(SERVER_ACTIONSTATE, IngameMessages.UIIT_SKILL_USE_FAIL_WRONGWEAPON));
return;
}
Character.Action.Target = Reader.Int32();
Character.Action.Skill.MainSkill = Character.Action.UsingSkillID;
Character.Action.UsingSkillID = 0;
Character.Action.Object = GetObjects(Character.Action.Target);
if (Data.SkillBase[Character.Action.Skill.MainSkill].isAttackSkill)
{
Character.Action.Skill = Base.Skill.Info(Character.Action.Skill.MainSkill, Character);
if (!Character.Action.Skill.canUse || Character.Action.Target == Character.Information.UniqueID) return;
obj o = null;
if (Character.Action.Object != null && Character.Action.Object.GetType().ToString() == "DarkEmu_GameServer.obj")
{
o = Character.Action.Object as obj;
if (o.Agro == null) o.Agro = new List<_agro>();
if (Character.Action.Skill.OzelEffect == 5 && o.State != 4) return;
if (o.State == 4 && Character.Action.Skill.OzelEffect != 5) return;
}
if (o == null && Character.Action.Object != null && Character.Action.Object.GetType().ToString() == "DarkEmu_GameServer.Systems")
{
if (!Character.Information.PvP || Character.State.Die) return;
Systems sys = Character.Action.Object as Systems;
if (Character.Action.Skill.OzelEffect == 5 && sys.Character.State.LastState != 5) return;
if (sys.Character.State.LastState == 4 && Character.Action.Skill.OzelEffect != 5) return;
}
Character.Action.sAttack = true;
ActionSkillAttack();
Reader.Close();
}
else
{
Character.Action.sAttack = true;
ActionSkill();
}
break;
case 0:
SkillBuff();
break;
case 2:
MovementSkill(Reader);
break;
default:
Console.WriteLine("Skillmain type: {0}", type);
break;
}
}
catch (Exception ex)
{
Systems.Debugger.Write(ex);
}
}