الموضوع: ضربة القرصان
عرض مشاركة واحدة
قديم 2019-10-01, 02:30 AM
المشاركة 6
ElSaher
.:: مشرف قسم المشاكل ::.
  • غير متواجد
افتراضي رد: ضربة القرصان

كود:
                                #region PirateSpells

                                #region GaleBomb
                                
case 11070:
                                    if (
CanUseSpell(spellattacker.Owner))
                                    {

                                        
PrepareSpell(spellattacker.Owner);
                                        
Map map;
                                        
SpellUse suse = new SpellUse(true);
                                        
suse.Attacker attacker.UID;
                                        
suse.SpellID spell.ID;
                                        
suse.SpellLevel spell.Level;
                                        
suse.X;
                                        
suse.Y;
                                        
//suse.SpellLevelHu = client_Spell.LevelHu2;
                                        
MessiProject.Network.GamePackets.SpellUse.DamageClass tar = new SpellUse.DamageClass();
                                        
int num 0;

                                        switch (
spell.Level)
                                        {
                                            case 
0:
                                            case 
1:
                                                
num 3;
                                                break;
                                            case 
2:
                                            case 
3:
                                                
num 4;
                                                break;
                                            default:
                                                
num 5;
                                                break;
                                        }
                                        
int i 0;
                                        
Kernel.Maps.TryGetValue(attacker.Owner.Map.BaseIDout map);
                                        foreach (var 
t in attacker.Owner.Screen.Objects)
                                        {
                                            if (
== null)
                                                continue;
                                            if (
t.MapObjType == MapObjectType.Entity || t.MapObjType == MapObjectType.Monster)
                                            {
                                                var 
target as Entity;
                                                if (
Kernel.GetDistance(XYtarget.Xtarget.Y) <= spell.Range)
                                                {
                                                    if (
CanAttack(attackertargetspellfalse))
                                                    {
                                                        
tar.Damage Calculate.Ranged(attackertargetspellref attack);
                                                        
tar.Hit true;
                                                        
tar.newX target.X;
                                                        
tar.newY target.Y;
                                                        
Map.Pushback(ref tar.newXref tar.newYattacker.Facing5);

                                                        if (
map != null)
                                                        {
                                                            if (
map.Floor[tar.newXtar.newYMapObjectType.Entityattacker])
                                                            {
                                                                
target.tar.newX;
                                                                
target.tar.newY;
                                                            }
                                                            else
                                                            {
                                                                
tar.newX target.X;
                                                                
tar.newY target.Y;
                                                            }
                                                        }
                                                        else
                                                        {
                                                            if (
attacker.Owner.Map.Floor[tar.newXtar.newYMapObjectType.Entityattacker])
                                                            {
                                                                
target.tar.newX;
                                                                
target.tar.newY;
                                                            }
                                                            else
                                                            {
                                                                
target.tar.newX;
                                                                
target.tar.newY;
                                                            }
                                                        }
                                                        
suse.AddTarget(targettarattack);
                                                        
ReceiveAttack(attackertargetattackref tar.Damagespell);

                                                        
i++;
                                                        if (
num) break;
                                                    }
                                                }
                                            }
                                        }

                                        if (
attacker.EntityFlag == EntityFlag.Entity)
                                            
attacker.Owner.SendScreen(susetrue);
                                    }
                                    break;
                                
#endregion

                                #region BladeTempest
                                
case 11110:
                                    {
                                        if (
CanUseSpell(spellattacker.Owner))
                                        {
                                            
PrepareSpell(spellattacker.Owner);
                                            
SpellUse suse = new SpellUse(true);
                                            
suse.Attacker attacker.UID;
                                            
suse.SpellID spell.ID;
                                            
//suse.SpellLevelHu = 0;
                                            
suse.SpellLevel spell.Level;
                                            
ushort _X attacker.X_Y attacker.Y;
                                            
ushort _tX X_tY Y;
                                            
byte dist = (byte)spell.Distance;
                                            var Array = 
attacker.Owner.Screen.Objects;
                                            
InLineAlgorithm algo = new InLineAlgorithm(attacker.XXattacker.YYdist,
                                                                               
InLineAlgorithm.Algorithm.DDA);
                                            
attacker.X;
                                            
attacker.Y;
                                            
int i 0;
                                            for (
0algo.lcoords.Counti++)
                                            {
                                                if (
attacker.Owner.Map.Floor[algo.lcoords[i].Xalgo.lcoords[i].YMapObjectType.Entity]
                                                    && !
attacker.ThroughGate(algo.lcoords[i].Xalgo.lcoords[i].Y))
                                                {
                                                    
= (ushort)algo.lcoords[i].X;
                                                    
= (ushort)algo.lcoords[i].Y;
                                                }
                                                else
                                                {
                                                    break;
                                                }
                                            }
                                            
suse.X;
                                            
suse.Y;
                                            if (!
attacker.Owner.Map.Floor[XYMapObjectType.Entitynull])
                                                return;
                                            
double disth 1.6;

                                            foreach (
Interfaces.IMapObject _obj in Array)
                                            {
                                                
bool hit false;
                                                for (
int j 0ij++)
                                                    if (
Kernel.GetDDistance(_obj.X_obj.Y, (ushort)algo.lcoords[j].X, (ushort)algo.lcoords[j].Y) <= disth)
                                                        
hit true;
                                                if (
hit)
                                                {
                                                    if (
_obj.MapObjType == MapObjectType.Monster)
                                                    {
                                                        
attacked _obj as Entity;
                                                        if (
CanAttack(attackerattackedspellattack.AttackType == Attack.Melee))
                                                        {
                                                            var 
damage Game.Attacking.Calculate.Melee(attackerattackedspellref attack0);
                                                            
ReceiveAttack(attackerattackedattackref damagespell);

                                                            
suse.AddTarget(attackeddamageattack);
                                                        }
                                                    }
                                                    else if (
_obj.MapObjType == MapObjectType.Entity)
                                                    {
                                                        
attacked _obj as Entity;
                                                        if (
CanAttack(attackerattackedspellattack.AttackType == Attack.Melee))
                                                        {
                                                            var 
damage Game.Attacking.Calculate.Melee(attackerattackedspellref attack0);
                                                            
damage = (uint)(damage 1.1);
                                                            
ReceiveAttack(attackerattackedattackref damagespell);

                                                            
suse.AddTarget(attackeddamageattack);
                                                        }
                                                    }
                                                    else if (
_obj.MapObjType == MapObjectType.SobNpc)
                                                    {
                                                        
attackedsob _obj as SobNpcSpawn;
                                                        if (
CanAttack(attackerattackedsobspell))
                                                        {
                                                            var 
damage Game.Attacking.Calculate.Melee(attackerattackedsobref attack) * 3;

                                                            
ReceiveAttack(attackerattackedsobattackdamagespell);

                                                            
suse.AddTarget(attackedsobdamageattack);
                                                        }
                                                    }
                                                }
                                            }
                                            
attacker.PX attacker.X;
                                            
attacker.PY attacker.Y;
                                            
attacker.X;
                                            
attacker.Y;
                                            
attacker.Owner.SendScreen(susetrue);
                                            
attacker.Owner.Screen.Reload(suse);
                                        }
                                        break;
                                    }
                                
#endregion

                                #region Kraken`sRevenge
                                
case 11100:
                                    {
                                        if (
CanUseSpell(spellattacker.Owner))
                                        {

                                            
PrepareSpell(spellattacker.Owner);

                                            
SpellUse suse = new SpellUse(true);
                                            
suse.Attacker attacker.UID;
                                            
suse.SpellID spell.ID;
                                            
suse.SpellLevel spell.Level;
                                            
suse.X;
                                            
suse.Y;
                                            
int num 0;

                                            switch (
spell.Level)
                                            {
                                                case 
0:
                                                case 
1:
                                                    
num 3;
                                                    break;
                                                case 
2:
                                                case 
3:
                                                    
num 4;
                                                    break;
                                                default:
                                                    
num 5;
                                                    break;
                                            }

                                            
int i 0;
                                            
BlackSpotPacket bsp = new BlackSpotPacket();
                                            foreach (var 
t in attacker.Owner.Screen.Objects/*.OrderBy(x => Kernel.GetDistance(x.X, x.Y, attacker.Owner.Entity.X, attacker.Owner.Entity.Y))*/)
                                            {
                                                if (
== null)
                                                    continue;
                                                if (
t.MapObjType == MapObjectType.Entity || t.MapObjType == MapObjectType.Monster)
                                                {
                                                    var 
target as Entity;
                                                    if (
CanAttack(attackertargetspellfalse))
                                                    {
                                                        
target.IsBlackSpotted true;
                                                        
target.BlackSpotStamp Time32.Now;
                                                        
target.BlackSpotStepSecs spell.Duration;
                                                        
Kernel.BlackSpoted.TryAdd(target.UIDtarget);
                                                        
suse.AddTarget(target, new SpellUse.DamageClass(), attack);
                                                        
i++;
                                                        if (
== num) break;
                                                    }
                                                }
                                            }
                                            if (
attacker.EntityFlag == EntityFlag.Entity)
                                                
attacker.Owner.SendScreen(susetrue);

                                            foreach (var 
h in Program.Values)
                                            {
                                                foreach (var 
t in suse.Targets.Keys)
                                                {
                                                    
h.Send(bsp.ToArray(truet));
                                                }
                                            }
                                        }
                                        break;
                                    }
                                
#endregion

                                #region ScurvyBomb
                                
case 11040:
                                    if (
CanUseSpell(spellattacker.Owner))
                                    {

                                        
PrepareSpell(spellattacker.Owner);
                                        
Map map;
                                        
SpellUse suse = new SpellUse(true);
                                        
suse.Attacker attacker.UID;
                                        
suse.SpellID spell.ID;
                                        
suse.SpellLevel spell.Level;
                                        
suse.X;
                                        
suse.Y;
                                        
//suse.SpellLevelHu = client_Spell.LevelHu2;
                                        
MessiProject.Network.GamePackets.SpellUse.DamageClass tar = new SpellUse.DamageClass();
                                        
int num 0;

                                        switch (
spell.Level)
                                        {
                                            case 
0:
                                            case 
1:
                                                
num 3;
                                                break;
                                            case 
2:
                                            case 
3:
                                                
num 4;
                                                break;
                                            default:
                                                
num 5;
                                                break;
                                        }
                                        
int i 0;
                                        
Kernel.Maps.TryGetValue(attacker.Owner.Map.BaseIDout map);
                                        foreach (var 
t in attacker.Owner.Screen.Objects)
                                        {
                                            if (
== null)
                                                continue;
                                            if (
t.MapObjType == MapObjectType.Entity || t.MapObjType == MapObjectType.Monster)
                                            {
                                                var 
target as Entity;
                                                if (
Kernel.GetDistance(XYtarget.Xtarget.Y) <= spell.Range)
                                                {
                                                    if (
CanAttack(attackertargetspellfalse))
                                                    {
                                                        
tar.Damage Calculate.Ranged(attackertargetref attack);
                                                        
tar.Hit true;
                                                        
tar.newX target.X;
                                                        
tar.newY target.Y;
                                                        
Map.Pushback(ref tar.newXref tar.newYattacker.Facing5);

                                                        if (
map != null)
                                                        {
                                                            if (
map.Floor[tar.newXtar.newYMapObjectType.Entityattacker])
                                                            {
                                                                
target.tar.newX;
                                                                
target.tar.newY;
                                                            }
                                                            else
                                                            {
                                                                
tar.newX target.X;
                                                                
tar.newY target.Y;
                                                            }
                                                        }
                                                        else
                                                        {
                                                            if (
attacker.Owner.Map.Floor[tar.newXtar.newYMapObjectType.Entityattacker])
                                                            {
                                                                
target.tar.newX;
                                                                
target.tar.newY;
                                                            }
                                                            else
                                                            {
                                                                
target.tar.newX;
                                                                
target.tar.newY;
                                                            }
                                                        }

                                                        
suse.AddTarget(targettarattack);
                                                        
ReceiveAttack(attackertargetattackref tar.Damagespell);

                                                        
i++;
                                                        if (
num) break;
                                                    }
                                                }
                                            }
                                        }

                                        if (
attacker.EntityFlag == EntityFlag.Entity)
                                            
attacker.Owner.SendScreen(susetrue);
                                    }
                                    break;
                                
#endregion

                                #region Cannon Barrage
                                
case 11050:
                                    {
                                        if (
attacker.Owner.Entity.ContainsFlag(MessiProject.Network.GamePackets.Update.Flags.XPList))
                                        {
                                            
attacker.Owner.Entity.RemoveFlag(MessiProject.Network.GamePackets.Update.Flags.XPList);
                                            
attacker.Owner.Entity.AddFlag2(MessiProject.Network.GamePackets.Update.Flags2.CannonBarrage);
                                            
attacker.Owner.Entity.CannonBarrageStamp Time32.Now;
                                            return;
                                        }


                                        
PrepareSpell(spellattacker.Owner);

                                        
SpellUse suse = new SpellUse(true);
                                        
suse.Attacker attacker.UID;
                                        
suse.SpellID spell.ID;
                                        
suse.SpellLevel spell.Level;
                                        
suse.X;
                                        
suse.Y;
                                        
//suse.SpellLevelHu = client_Spell.LevelHu2;
                                        
MessiProject.Network.GamePackets.SpellUse.DamageClass tar = new SpellUse.DamageClass();
                                        foreach (var 
t in attacker.Owner.Screen.Objects)
                                        {
                                            if (
== null)
                                                continue;
                                            if (
t.MapObjType == MapObjectType.Entity || t.MapObjType == MapObjectType.Monster)
                                            {
                                                var 
target as Entity;
                                                if (
Kernel.GetDistance(attacker.Owner.Entity.Xattacker.Owner.Entity.Ytarget.Xtarget.Y) <= spell.Range)
                                                {
                                                    if (
CanAttack(attackertargetspellfalse))
                                                    {
                                                        
tar.Damage Calculate.Ranged(attackertargetref attackclient_Spell.LevelHu2);
                                                        
suse.AddTarget(targettarattack);
                                                        
ReceiveAttack(attackertargetattackref tar.Damagespell);
                                                    }
                                                }
                                            }
                                        }

                                        if (
attacker.EntityFlag == EntityFlag.Entity)
                                            
attacker.Owner.SendScreen(susetrue);

                                        break;
                                    }
                                
#endregion

                                #region Blackbeard`sRage
                                
case 11060:
                                    {
                                        if (
attacker.Owner.Entity.ContainsFlag(MessiProject.Network.GamePackets.Update.Flags.XPList))
                                        {
                                            
attacker.Owner.Entity.RemoveFlag(MessiProject.Network.GamePackets.Update.Flags.XPList);
                                            
attacker.Owner.Entity.AddFlag2(MessiProject.Network.GamePackets.Update.Flags2.BlackbeardsRage);
                                            
attacker.Owner.Entity.BlackbeardsRageStamp Time32.Now;
                                            return;
                                        }

                                        
int num 0;
                                        switch (
spell.Level)
                                        {
                                            case 
0:
                                            case 
1:
                                                
num 3;
                                                break;
                                            case 
2:
                                            case 
3:
                                                
num 4;
                                                break;
                                            default:
                                                
num 5;
                                                break;
                                        }
                                        
int i 0;
                                        
PrepareSpell(spellattacker.Owner);

                                        
SpellUse suse = new SpellUse(true);
                                        
suse.Attacker attacker.UID;
                                        
suse.SpellID spell.ID;
                                        
suse.SpellLevel spell.Level;
                                        
suse.X;
                                        
suse.Y;
                                        
//suse.SpellLevelHu = client_Spell.LevelHu2;
                                        
MessiProject.Network.GamePackets.SpellUse.DamageClass tar = new SpellUse.DamageClass();
                                        foreach (var 
t in attacker.Owner.Screen.Objects)
                                        {
                                            if (
== null)
                                                continue;
                                            if (
t.MapObjType == MapObjectType.Entity || t.MapObjType == MapObjectType.Monster)
                                            {
                                                var 
target as Entity;
                                                if (
Kernel.GetDistance(attacker.Owner.Entity.Xattacker.Owner.Entity.Ytarget.Xtarget.Y) <= spell.Range)
                                                {
                                                    if (
CanAttack(attackertargetspellfalse))
                                                    {
                                                        
tar.Damage Calculate.Ranged(attackertargetref attackclient_Spell.LevelHu2);
                                                        
suse.AddTarget(targettarattack);
                                                        
ReceiveAttack(attackertargetattackref tar.Damagespell);
                                                        
i++;
                                                        if (
== num) break;
                                                    }
                                                }
                                            }
                                        }

                                        if (
attacker.EntityFlag == EntityFlag.Entity)
                                            
attacker.Owner.SendScreen(susetrue);

                                        break;
                                    }
                                
#endregion

                                #endregion