DarkEmu_GameServer.Systems.SkillBuffCasting C# (CSharp) Метод

SkillBuffCasting() приватный Метод

private SkillBuffCasting ( List list ) : void
list List
Результат void
        void SkillBuffCasting(List<int> list)
        {
            try
            {
                Character.Action.Buff.Casting = true;

                // add buff's special attributes (example: harmony terapy spawn packet etc)
                HandleSpecialBuff(Character.Action.UsingSkillID);

                Send(list, Packet.SkillPacket(0, Character.Action.CastingSkill));

                // every skill is handled as surround range radius
                if (Data.SkillBase[Character.Action.UsingSkillID].RadiusType == Global.s_data.RadiusTypes.ONETARGET || Data.SkillBase[Character.Action.UsingSkillID].SkillType == Global.s_data.SkillTypes.IMBUE)
                {
                    this.SpecialBuff(Character.Action.UsingSkillID);
                }
                else if (Data.SkillBase[Character.Action.UsingSkillID].RadiusType != Global.s_data.RadiusTypes.ONETARGET && Data.SkillBase[Character.Action.UsingSkillID].efrUnk1 != 3) // i use it as efr not handled here :) (example: harmony)
                {
                    byte currentSimult = 0;
                    lock (Systems.clients)
                    {
                        for (int i = 0; i <= Systems.clients.Count - 1; i++)
                        {
                            try
                            {
                                Systems s = Systems.clients[i];

                                //double distance = Formule.gamedistance((float)this.Character.Position.x, (float)this.Character.Position.y, s.Character.Position.x, s.Character.Position.y);
                                double distance = Formule.gamedistance(this.Character.Position, s.Character.Position);
                                if (distance <= Data.SkillBase[Character.Action.UsingSkillID].Distance / 10)
                                {
                                    if (Data.SkillBase[Character.Action.UsingSkillID].SimultAttack == 0 || currentSimult < Data.SkillBase[Character.Action.UsingSkillID].SimultAttack)
                                    {
                                        // todo: here handle inv and steal detect // only add "buff" to char on pvp state (dttp)
                                        s.SpecialBuff(Character.Action.UsingSkillID);
                                        currentSimult++;
                                    }
                                    else break;
                                }
                            }
                            catch (Exception ex)
                            {
                                //Console.WriteLine("SkillBuffCast Error on index {1}/{2}: {0}", ex, i, Systems.clients.Count);
                                Systems.Debugger.Write(ex);
                            }
                        }
                    }
                }

                if (Data.SkillBase[Character.Action.UsingSkillID].SkillType == Global.s_data.SkillTypes.IMBUE ||
                   (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
                    Send(list, Packet.SkillIconPacket(Character.Information.UniqueID, Character.Action.UsingSkillID, Character.Action.Buff.OverID[Character.Action.Buff.slot],false));
                    client.Send(Packet.PlayerStat(Character));
                    UpdateMp();
                    client.Send(Packet.ActionState(2, 0));
                    StartBuffTimer(Data.SkillBase[Character.Action.UsingSkillID].Properties1["dura"], Character.Action.Buff.slot);

                }
                else if (Data.SkillBase[Character.Action.UsingSkillID].Properties1.ContainsKey("onff"))
                {
                    //area buffs / mana consumer - time buffs
                    Send(list, Packet.SkillIconPacket(Character.Information.UniqueID, Character.Action.UsingSkillID, Character.Action.Buff.OverID[Character.Action.Buff.slot], false));
                    client.Send(Packet.PlayerStat(Character));
                    UpdateMp();
                    client.Send(Packet.ActionState(2, 0));

                    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(list, Packet.SkillIconPacket(Character.Information.UniqueID, Character.Action.UsingSkillID, Character.Action.Buff.OverID[Character.Action.Buff.slot], false));
                    client.Send(Packet.PlayerStat(Character));
                    UpdateMp();
                    client.Send(Packet.ActionState(2, 0));

                    SkillBuffEnd(Character.Action.Buff.slot);

                }
                Character.Action.Buff.Casting = false;
                Character.Action.Buff.slot = 255;

            }
            catch (Exception ex)
            {
                Console.WriteLine("SkillBuffCast Error: {0}",ex);
                Systems.Debugger.Write(ex);
            }
        }
Systems