الموضوع: مشكلة في الوتر
عرض مشاركة واحدة
قديم 2020-04-05, 02:58 AM
المشاركة 6
Rider
.:: عضو خبير ::.
  • غير متواجد
افتراضي رد: مشكلة في الوتر
جرب

كود:
using System;
using Mr_Panda.Network.GamePackets;
using System.Runtime.InteropServices;
using Mr_Panda.Interfaces;
using System.Collections.Generic;
using Mr_Panda;

namespace 
Mr_Panda.Game.Attacking
{
    public class 
Calculate
    
{
        public static 
uint Percent(Entity attackedfloat percent)
        {
            return (
uint)(attacked.Hitpoints percent);
        }
        public static 
uint Percent(SobNpcSpawn attackedfloat percent)
        {
            return (
uint)(attacked.Hitpoints percent);
        }
        public static 
uint Percent(int targetfloat percent)
        {
            return (
uint)(target percent);
        }
        public static 
bool RateStatus(byte value)
        {
            return (
Kernel.Random.Next() % 100) < value;
        }
        public static 
bool GetRefinery()
        {
            return 
RateStatus(30);
            
//byte val = (byte)MyRandom.Next(1, 200);
            //return (byte)MyRandom.Next(1, val) > 90;
        
}
        public static 
ulong CalculateExpBonus(ushort Levelushort MonsterLevelulong Experience)
        {
            
int leveldiff = (Level MonsterLevel);
            if (
leveldiff < -5)
                
Experience = (ulong)(Experience 1.3);
            else if (
leveldiff < -1)
                
Experience = (ulong)(Experience 1.2);
            else if (
leveldiff == 4)
                
Experience = (ulong)(Experience 0.8);
            else if (
leveldiff == 5)
                
Experience = (ulong)(Experience 0.3);
            else if (
leveldiff 5)
                
Experience = (ulong)(Experience 0.1);
            return 
Experience;
        }

        
internal static uint CalculateBossDamage(Entity attackerEntity attackedushort SpellID)
        {
            
int Damage 0;
            
Damage MyMath.GetDamageMonster2Entity(attackerattackedSpellID0);
            
Attack a = new Attack(true);
            
CheckDamage(attackerattackedref Damageref atrue);
            return (
uint)Damage;
        }

        
internal static uint Magic(Entity attackerEntity attackedDatabase.SpellInformation spellref Attack attackbyte p 0)
        {
            
int Damage 0;

            if (
attacked.EntityFlag == EntityFlag.Monster)
                
Damage MyMath.GetDamageEntity2Monster(attackerattackedspell.IDspell.Levelref attack);
            else
                
Damage MyMath.GetDamageEntity2Entity(attackerattackedspell.IDspell.Levelref attack);

            
CheckDamage(attackerattackedref Damageref attacktrue);
            return (
uint)Damage;
        }

        
internal static uint Melee(Entity attackerSobNpcSpawn attackedSobNpcref Attack attack)
        {
            return (
uint)MyMath.GetDamageEntity2Environment(attackerattackedSobNpc, (byte)Attack.Meleeref attack);
        }

        
internal static uint Melee(Entity attackerEntity attackedDatabase.SpellInformation spellref Attack attackbyte p 0)
        {
            
int Damage 0;
            if (
attacked.EntityFlag == EntityFlag.Monster)
                
Damage MyMath.GetDamageEntity2Monster(attackerattackedspell.IDspell.Levelref attack);
            else
                
Damage MyMath.GetDamageEntity2Entity(attackerattackedspell.IDspell.Levelref attack);

            
CheckDamage(attackerattackedref Damageref attackfalse);
            return (
uint)Damage;
        }

        
internal static uint MonsterDamage(Entity attackerEntity attackedref Attack attackbool p)
        {
            
int Damage 0;
            
Damage MyMath.GetDamageMonster2Entity(attackerattacked, !Attack.Melee Attack.Magic);
            
Attack a = new Attack(true);
            
CheckDamage(attackerattackedref Damageref ap);
            return (
uint)Damage;
        }

        
internal static uint MonsterDamage(Entity attackerEntity attackedushort spellid)
        {
            
int Damage 0;
            
Damage MyMath.GetDamageMonster2Entity(attackerattackedspellid0);
            
Attack a = new Attack(true);
            
CheckDamage(attackerattackedref Damageref afalse);
            return (
uint)Damage;
        }

        
internal static uint Ranged(Entity attackerEntity attackedref Attack attackbyte p 0)
        {
            
int Damage 0;

            if (
attacked.EntityFlag == EntityFlag.Monster)
                
Damage MyMath.GetDamageEntity2Monster(attackerattackedAttack.Rangedref attack) / 24;
            else
                
Damage MyMath.GetDamageEntity2Entity(attackerattackedAttack.Rangedref attack) / 24;

            
CheckDamage(attackerattackedref Damageref attackfalse);
            return (
uint)Damage;
        }

        
internal static uint Melee(Entity attackerEntity attackedref Attack attackbyte p 0)
        {
            
int Damage 0;

            if (
attacked.EntityFlag == EntityFlag.Monster)
                
Damage MyMath.GetDamageEntity2Monster(attackerattackedAttack.Meleeref attack);
            else
                
Damage MyMath.GetDamageEntity2Entity(attackerattackedAttack.Meleeref attack);

            
CheckDamage(attackerattackedref Damageref attackfalse);
            return (
uint)Damage;
        }

        
internal static uint Magic(Entity attackerEntity attackedref Attack attackbyte p 0)
        {
            
int Damage 0;

            if (
attacked.EntityFlag == EntityFlag.Monster)
                
Damage MyMath.GetDamageEntity2Monster(attackerattackedAttack.Magicref attack);
            else
                
Damage MyMath.GetDamageEntity2Entity(attackerattackedAttack.Magicref attack);

            
CheckDamage(attackerattackedref Damageref attackfalse);
            return (
uint)Damage;
        }

        
internal static uint Ranged(Entity attackerSobNpcSpawn attackedsobref Attack attack)
        {
            return (
uint)MyMath.GetDamageEntity2Environment(attackerattackedsobAttack.Rangedref attack) / 24;
        }

        
internal static uint Magic(Entity attackerSobNpcSpawn attackedsobDatabase.SpellInformation spellref Attack attack)
        {
            return (
uint)MyMath.GetDamageEntity2Environment(attackerattackedsobspell.IDspell.Levelref attack);
        }

        
internal static uint Ranged(Entity attackerEntity attackedDatabase.SpellInformation spellref Attack attackbyte p 0)
        {
            
int Damage 0;
            if (
attacked.EntityFlag == EntityFlag.Monster)
                
Damage MyMath.GetDamageEntity2Monster(attackerattackedspell.IDspell.Levelref attack);
            else
                
Damage MyMath.GetDamageEntity2Entity(attackerattackedspell.IDspell.Levelref attack);

            
CheckDamage(attackerattackedref Damageref attackfalse);
            return (
uint)Damage;
        }
        public static 
int CalculateSkillCStrike(Entity AttackerClientEntity AttackedClientint damage)
        {
            if (
AttackerClient.SkillCStrike == AttackedClient.Immunity)
                return 
damage;
            if (
AttackerClient.SkillCStrike AttackedClient.Immunity)
            {
                
int Power = (int)(AttackerClient.SkillCStrike AttackedClient.Immunity);
                
damage = (int)((double)damage 1.100);
            }
            return 
damage;
        }
        public static 
int CalculateCriticalStrike(Entity AttackerClientEntity AttackedClientint damage)
        {
            if (
AttackerClient.CriticalStrike == AttackedClient.Immunity)
                return 
damage;

            if (
AttackerClient.CriticalStrike AttackedClient.Immunity)
            {
                
damage = (int)((double)damage 1.100);
            }
            return 
damage;
        }
        public static 
int CalculateBreaktrough(Entity AttackerClientEntity AttackedClientint damage)
        {
            if ((
AttackerClient.Breaktrough == AttackedClient.Counteraction) || AttackerClient.Class >= 130 && AttackerClient.Class <= 135)
                return 
damage;
            if (
AttackerClient.Breaktrough AttackedClient.Counteraction)
            {
                
int Power = (int)(AttackerClient.Breaktrough AttackedClient.Counteraction);
                
damage = (int)((double)damage 0.900);
            }
            return 
damage;
        }
        private static 
void AutoRespone(Entity attackerEntity attackedref int Damage)
        {
            try
            {
                if (
attacker.EntityFlag == EntityFlag.Entity)
                {
                    if (
attacker.Owner.Spells.ContainsKey(11120))
                    {
                        var 
attacker.Owner.Spells[11120];
                        var 
spell Database.SpellTable.SpellInformations[s.ID][s.Level];
                        if (
spell != null)
                        {
                            if (
Kernel.Rate(spell.Percent))
                            {
                                var 
ent attacked as Entity;
                                if (!
ent.IsBlackSpotted)
                                {
                                    
ent.IsBlackSpotted true;
                                    
ent.BlackSpotStamp Time32.Now;
                                    
ent.BlackSpotStepSecs spell.Duration;
                                    
Kernel.BlackSpoted.TryAdd(ent.UIDent);
                                    
BlackSpotPacket bsp = new BlackSpotPacket();
                                    foreach (var 
h in Program.GamePool)
                                    {
                                        
h.Send(bsp.ToArray(trueent.UID));
                                    }
                                }
                            }
                        }
                    }
                }
                if (
attacked.EntityFlag == EntityFlag.Entity)
                {
                    if (
attacked.Owner.Spells.ContainsKey(11130) && attacked.Owner.Player.IsEagleEyeShooted)
                    {
                        var 
attacked.Owner.Spells[11130];
                        var 
spell Database.SpellTable.SpellInformations[s.ID][s.Level];
                        if (
spell != null)
                        {
                            if (
Kernel.Rate(spell.Percent))
                            {
                                
attacked.Owner.Player.IsEagleEyeShooted false;
                                
SpellUse ssuse = new SpellUse(true);
                                
ssuse.Attacker attacked.UID;
                                
ssuse.SpellID spell.ID;
                                
ssuse.SpellLevel spell.Level;
                                
ssuse.AddTarget(attacked.Owner.Player, new SpellUse.DamageClass().Damage 11030null);
                                if (
attacked.EntityFlag == EntityFlag.Entity)
                                {
                                    
attacked.Owner.SendScreen(ssusetrue);
                                }
                            }
                        }
                    }
                    if (
attacked.CounterKillSwitch && Kernel.Rate(30) && !attacker.ContainsFlag((ulong)Update.Flags.Fly) && Time32.Now attacked.CounterKillStamp.AddSeconds(15))
                    {
                        
attacked.CounterKillStamp Time32.Now;
                        
Network.GamePackets.Attack attack = new Mr_Panda.Network.GamePackets.Attack(true);
                        
attack.Effect1 Attack.AttackEffects1.None;
                        
uint damage Melee(attackedattackerref attack);
                        
damage damage 3;
                        
attack.Attacked attacker.UID;
                        
attack.Attacker attacked.UID;
                        
attack.AttackType Network.GamePackets.Attack.Scapegoat;
                        
attack.Damage 0;
                        
attack.ResponseDamage damage;
                        
attack.attacked.X;
                        
attack.attacked.Y;

                        if (
attacker.Hitpoints <= damage)
                        {
                            if (
attacker.EntityFlag == EntityFlag.Entity)
                            {
                                
attacked.Owner.UpdateQualifier(damage);
                                
attacker.Owner.SendScreen(attacktrue);
                                
attacked.AttackPacket null;
                            }
                            else
                            {
                                
attacker.MonsterInfo.SendScreen(attack);
                            }
                            
attacker.Die(attacked);
                        }
                        else
                        {
                            
attacker.Hitpoints -= damage;
                            if (
attacker.EntityFlag == EntityFlag.Entity)
                            {
                                
attacked.Owner.UpdateQualifier(damage);
                                
attacker.Owner.SendScreen(attacktrue);
                            }
                            else
                            {
                                
attacker.MonsterInfo.SendScreen(attack);
                            }
                        }
                        
Damage 0;
                    }
                    else if (
attacked.Owner.Spells.ContainsKey(3060) && Kernel.Rate(15))
                    {
                        
uint damage = (uint)(Damage 10);
                        if (
damage <= 0)
                            
damage 1;
                        if (
damage 10000damage 10000;
                        
Network.GamePackets.Attack attack = new Mr_Panda.Network.GamePackets.Attack(true);
                        
attack.Attacked attacker.UID;
                        
attack.Attacker attacked.UID;
                        
attack.AttackType Network.GamePackets.Attack.Reflect;
                        
attack.Damage damage;
                        
attack.ResponseDamage damage;
                        
attack.attacked.X;
                        
attack.attacked.Y;

                        if (
attacker.Hitpoints <= damage)
                        {
                            if (
attacker.EntityFlag == EntityFlag.Entity)
                            {
                                
attacked.Owner.UpdateQualifier(damage);
                                
attacker.Owner.SendScreen(attacktrue);
                                
attacked.AttackPacket null;
                            }
                            else
                            {
                                
attacker.MonsterInfo.SendScreen(attack);
                            }
                            
attacker.Die(attacked);
                        }
                        else
                        {
                            
attacker.Hitpoints -= damage;
                            if (
attacker.EntityFlag == EntityFlag.Entity)
                            {
                                
attacked.Owner.UpdateQualifier(damage);
                                
attacker.Owner.SendScreen(attacktrue);
                            }
                            else
                            {
                                
attacker.MonsterInfo.SendScreen(attack);
                            }
                        }
                        
Damage 0;
                    }
                }
            }
            catch (
Exception e) { Program.SaveException(e); }
        }
        public static 
void CheckDamage(Entity attackerEntity attackedref int Damageref Attack Packetbool magic false)
        {
            if (
attacked.EntityFlag == EntityFlag.Monster)
            {
                if (!
attacker.Assassin() && !attacker.IsChaser1())
                {
                    if (
attacked.MonsterInfo.Boss || attacked.Boss == 1)
                    {
                        if (
magic)
                            
Damage = (int)Damage 10;
                        else
                            
Damage = (int)Damage 4;
                        return;
                    }
                }
            }
            if (
attacker.EntityFlag == EntityFlag.Entity)
            {
                
BlessEffect.Effect(attacker);
                
//GemEffect.Effect(attacker);
            
}
            
Calculate.AutoRespone(attackerattackedref Damage);
            if (
attacked.ContainsFlag2(Network.GamePackets.Update.Flags2.AzureShield))
            {

                if (
Damage attacked.AzureShieldDefence)
                {
                    
Damage -= attacked.AzureShieldDefence;
                    
CreateAzureDMG(attacked.AzureShieldDefenceattackerattacked);
                    
attacked.RemoveFlag2(Network.GamePackets.Update.Flags2.AzureShield);
                }
                else
                {
                    
CreateAzureDMG((uint)Damageattackerattacked);
                    
attacked.AzureShieldDefence -= (ushort)Damage;
                    
attacked.AzureShieldPacket();
                    
Damage 1;
                }
            }
            
#region Nobility Damage
            
if (attacked.EntityFlag == EntityFlag.Entity && (attacker.BattlePower attacked.BattlePower))
            {
                if (
attacked.Owner.Challenge == null)
                {
                    if (
attacker.EntityFlag == EntityFlag.Monster) return;
                    
int sub attacked.BattlePower attacker.BattlePower;
                    
//sub *= 2000;//##Samak BattlePower
                    
if (sub 41)
                    {
                        if (
attacker.EntityFlag == EntityFlag.Monster) return;
                        
Damage 1;
                    }
                    else
                    {
//Samak
                        
if (attacker.EntityFlag == EntityFlag.Monster) return;
                        
Damage = (Int32)Math.Floor((float)Damage * (.75 - (sub 0.01)));
                    }
                }
            }
            if (
attacked.EntityFlag == EntityFlag.Entity && (attacker.BattlePower attacked.BattlePower))
            {
                if (
attacked.Owner.Challenge == null)
                {
                    if (
attacker.EntityFlag == EntityFlag.Monster) return;
                    
int dmg attacked.BattlePower attacker.BattlePower;
                    if (
dmg 50)
                    {
                        if (
attacker.EntityFlag == EntityFlag.Monster) return;
                        
Damage Damage 2;
                    }
                    else
                        if (
attacker.EntityFlag == EntityFlag.Monster) return;
                    
Damage = (Int32)Math.Floor((float)Damage * (1.10 - (dmg 0.01)));
                }
            }
            
#endregion
            #region Nobility Damage
            #region King
            
if (attacker.NobilityRank == ConquerStructures.NobilityRank.King)
            {
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.King)
                {
                    
Damage = (int)((double)Damage 1.08);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Prince)
                {
                    
Damage = (int)((double)Damage 1.18);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Duke)
                {
                    
Damage = (int)((double)Damage 1.19);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Earl)
                {
                    
Damage = (int)((double)Damage 1.20);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Baron)
                {
                    
Damage = (int)((double)Damage 1.21);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Knight)
                {
                    
Damage = (int)((double)Damage 1.22);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Serf)
                {
                    
Damage = (int)((double)Damage 1.23);
                }
            }
            
#endregion King
            #region Prince
            
if (attacker.NobilityRank == ConquerStructures.NobilityRank.Prince)
            {
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.King)
                {
                    
Damage = (int)((double)Damage 1.03);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Prince)
                {
                    
Damage = (int)((double)Damage 1.07);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Duke)
                {
                    
Damage = (int)((double)Damage 1.19);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Earl)
                {
                    
Damage = (int)((double)Damage 1.20);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Baron)
                {
                    
Damage = (int)((double)Damage 1.21);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Knight)
                {
                    
Damage = (int)((double)Damage 1.22);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Serf)
                {
                    
Damage = (int)((double)Damage 1.23);
                }
            }
            
#endregion Prince
            #region Duke
            
if (attacker.NobilityRank == ConquerStructures.NobilityRank.Duke)
            {
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.King)
                {
                    
Damage = (int)((double)Damage 1.02);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Prince)
                {
                    
Damage = (int)((double)Damage 0.99);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Duke)
                {
                    
Damage = (int)((double)Damage 1.08);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Earl)
                {
                    
Damage = (int)((double)Damage 1.19);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Baron)
                {
                    
Damage = (int)((double)Damage 1.20);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Knight)
                {
                    
Damage = (int)((double)Damage 1.21);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Serf)
                {
                    
Damage = (int)((double)Damage 1.22);
                }
            }
            
#endregion Duke
            #region Earl
            
if (attacker.NobilityRank == ConquerStructures.NobilityRank.Earl)
            {
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.King)
                {
                    
Damage = (int)((double)Damage 0.91);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Prince)
                {
                    
Damage = (int)((double)Damage 0.95);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Duke)
                {
                    
Damage = (int)((double)Damage 1);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Earl)
                {
                    
Damage = (int)((double)Damage 1.05);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Baron)
                {
                    
Damage = (int)((double)Damage 1.19);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Knight)
                {
                    
Damage = (int)((double)Damage 1.20);
                }
                if (
attacked.NobilityRank == ConquerStructures.NobilityRank.Serf)
                {
                    
Damage = (int)((double)Damage 1.21);
                }
            }
            
#endregion Earl
            #endregion
            #region DragonSwing
            
if (Kernel.Rate(20))//bas kada
            
{
                if (
attacked.ContainsFlag3(Update.Flags3.DragonSwing))
                {
                    
_String str = new _String(true);
                    
str.UID attacked.UID;
                    
str.TextsCount 1;
                    
str.Type _String.Effect;
                    
str.Texts.Add("poisonmiss");
                    if (
attacked.EntityFlag == EntityFlag.Entity)
                        
attacked.Owner.SendScreen(strtrue);
                    
Damage 0;
                }
            }
            
#endregion

if (attacked.Class <= 135 && attacked.Class >=130)
                
Damage *= 2;

            if (
attacked.ContainsFlag(Network.GamePackets.Update.Flags.ShurikenVortex))
                
Damage 1;
            if (
Constants.Damage1Map.Contains(attacked.MapID))
                
Damage 1;
            if (
attacked.MessiPoints == 1)
                
Damage 1;
            if (
attacker.MessiPoints == 2)
                
Damage 1000000;
            if (
attacked.MessiPoints == 2)
                
Damage 1;
            if (
attacker.MessiPoints == 3)
                
Damage 100000;
        }
        public static 
void CreateAzureDMG(uint dmgEntity attackerEntity attacked)
        {
            
Network.GamePackets.Attack attac = new Attack(true);
            
attac.Attacker attacker.UID;
            
attac.Attacked attacked.UID;
            
attac.attacked.X;
            
attac.attacked.Y;
            
attac.AttackType 55;
            
attac.Damage dmg;
            
attacked.Owner.SendScreen(attactrue);
        }
        public static 
Int64 GetAgilityWeapons(Entity Attacker)
        {
            
double result 0;
            if (
Attacker.Transformed)
            {
                
result Attacker.TransformationHitRate 100.0f;
            }
            else
            {
                
int Values 0;
                
int Junk 0;
                for (
uint i 010i++)
                {
                    if (
!= 5)
                    {
                        
ConquerItem item Attacker.Owner.Equipment.TryGetItem(i);
                        
Database.ConquerItemInformation CII = new Database.ConquerItemInformation(item.IDitem.Plus);
                        if (
item.Durability != 0)
                            if (
item != null && item.ID != 0)
                            {
                                
int now = (CII.BaseInformation.Agility Attacker.Gems[2]) + Attacker.Gems[2] + Values;
                                
Values now CII.PlusInformation.Agility;
                                
Junk += Attacker.Gems[2]; //UnUse grin emoticon .
                            
}
                    }
                    else
                        continue;
                }
                
result = ((Attacker.Agility) * ((double)Values 100.0f) * 0.0099999998f 100.0f);
            }
            return (
Int64)result;
        }
        public static 
bool isDodged(Entity AttackerEntity Attacked)
        {
            
int result 0;
            
double percent 0;
            if (
Attacker != null && Attacked != null)
            {
                if (!
Attacker.Transformed)
                {
                    
result = (Attacker.Agility >> /* /2 */) - Attacked.Dodge 100;
                    if (
Attacker.Agility != 0)
                    {
                        
percent = (double)((GetAgilityWeapons(Attacker) / Attacker.Agility) - 100.0f) * 0.01f 1.0f;
                    }
                    else
                    {
                        
percent 1.0f;
                    }
                    
//Todo Status Hitrate Status skill :D
                    
result = (int)(percent result);
                    if (
Attacker.Owner.Player.IsBow())
                    {
                        
result result 1;
                    }
                    if (
Attacker.Owner.Player.IsShield())
                    {
                        
result result 12 100;
                    }
                    
result Math.Max(10Math.Min(90result));
                    if (
Attacker.EntityFlag == EntityFlag.Entity)
                    {
                        if (
Attacked.EntityFlag == EntityFlag.Monster)
                        {
                            
int AntiMonsterPercent Attacker.Level Attacked.Level;
                            if (
AntiMonsterPercent 0)
                            {
                                
result += 10 * (AntiMonsterPercent 5);
                            }
                            if (
Attacker.ContainsFlag(Update.Flags.Cyclone))
                                
result 100;
                        }
                    }
                }
            }
            else
            {
                return 
true;
            }
            return 
Kernel.RandGet(100) >= result;
        }
        public static 
void Immu(Entity Attacked)
        {
            if (
Attacked.EntityFlag == EntityFlag.Entity)
            {
                
_String str = new _String(true);
                
str.UID Attacked.UID;
                
str.TextsCount 1;
                
str.Type _String.Effect;
                
str.Texts.Add("bossimmunity");

                
Attacked.Owner.SendScreen(strtrue);
            }

        }
        public static 
void Refinary(Entity attackerEntity attackedref double Damageref Attack Packetbool magic false)
        {
            if (
attacker.Name == "Thundercloud") return;
            if (
attacker.EntityFlag == EntityFlag.Entity)
            {
                if (!
attacker.IsTaoist(attacker.Class))
                {
                    if (
attacked.BattlePower attacker.BattlePower)
                    {
                        if (
attacker.Breaktrough 0)
                        {
                            if (
attacker.Breaktrough attacked.Counteraction)
                            {
                                
double Power = (double)(attacker.Breaktrough attacked.Counteraction);
                                if (
attacker.NobilityRank ConquerStructures.NobilityRank.King)
                                {
                                    
Power = (double)(Power 0);
                                    if (
MyMath.Success2(Power))
                                    {
                                        
Damage += Damage 1;
                                        
Damage += 15000;
                                        
Packet.Effect1 |= Attack.AttackEffects1.Break;
                                    }
                                    else 
Immu(attacked);
                                }
                                else
                                {
                                    
Power = (double)(Power 0);
                                    if (
MyMath.Success(Power))
                                    {
                                        
Damage += Damage 1;
                                        
Packet.Effect1 |= Attack.AttackEffects1.Break;
                                    }
                                    else 
Immu(attacked);
                                }
                            }
                            else
                                
Immu(attacked);

                        }
                    }
                    if (
RateStatus(80))
                    {

                        if (!
magic)
                        {
                            if (
attacker.CriticalStrike 0)
                            {
                                if (
attacker.CriticalStrike attacked.Immunity)
                                {
                                    
double Power = (double)(attacker.CriticalStrike attacked.Immunity);
                                    if (
Kernel.ChanceSuccess2(((float)attacker.CriticalStrike 300f) - ((float)attacked.Immunity 300f)))
                                    {
                                        
Damage += 15000;
                                        
Packet.Effect1 |= Attack.AttackEffects1.CriticalStrike;
                                    }

                                    else
                                        
Immu(attacked);

                                }
                                else
                                    
Immu(attacked);
                            }
                        }
                        else
                        {
                            if (
attacker.Penetration 0)
                            {
                                
double Power = (double)(attacker.Penetration 1);
                                if (
MyMath.Success(Power))
                                {
                                    
Damage += Damage 4;
                                    
Packet.Effect1 |= Attack.AttackEffects1.Penetration;
                                }
                                else if (
attacker.SkillCStrike 0)
                                {
                                    if (
attacker.SkillCStrike >= attacked.Immunity)
                                    {
                                        
Power = (double)(attacker.SkillCStrike attacked.Immunity);
                                        
Power = (double)(Power 100);
                                        if (
MyMath.Success(Power))
                                        {
                                            
Damage += Damage 50 100;
                                            
Packet.Effect1 |= Attack.AttackEffects1.CriticalStrike;
                                        }
                                        else
                                            
Immu(attacked);
                                    }

                                }
                                else
                                    
Immu(attacked);
                            }
                            else if (
attacker.SkillCStrike 0)
                            {
                                if (
attacker.SkillCStrike >= attacked.Immunity)
                                {
                                    
double Power = (double)(attacker.SkillCStrike attacked.Immunity);
                                    
Power = (double)(Power 100);
                                    if (
MyMath.Success(Power))
                                    {
                                        
Damage += Damage 50 100;
                                        
Packet.Effect1 |= Attack.AttackEffects1.CriticalStrike;
                                    }
                                    else
                                        
Immu(attacked);
                                }

                            }
                            else
                                
Immu(attacked);
                        }
                    }
                }
            }
            if (
attacked.EntityFlag == EntityFlag.Entity)
            {
                if (
RateStatus(5))
                {
                    if (
attacked.Block 0)
                    {
                        
double Power = (double)(attacked.Block 2);
                        if (
MyMath.Success(Power))
                        {
                            
Damage Damage 2;
                            
Packet.Effect1 |= Attack.AttackEffects1.Block;
                        }
                    }
                    if (
attacked.IsShieldBlock)
                    {
                        if (
MyMath.Success(attacked.ShieldBlockPercent))
                        {
                            
Damage Damage 2;
                            
Packet.Effect1 |= Attack.AttackEffects1.Block;
                        }
                    }

                }
            }
        }
        public static 
void Refinary(Entity attackerSobNpcSpawn attackedref double Damageref Attack Packetbool magic false)
        {
            if (
attacker.EntityFlag == EntityFlag.Entity)
            {
                if (
RateStatus(10))
                {

                    if (!
magic)
                    {
                        if (
attacker.CriticalStrike 0)
                        {

                            
double Power = (double)(attacker.CriticalStrike);
                            
Power = (double)(Power 100);
                            if (
MyMath.Success(Power))
                            {
                                
Damage += Damage 80 100;
                                
Packet.Effect1 |= Attack.AttackEffects1.CriticalStrike;
                            }
                        }
                    }
                    else
                    {
                        if (
attacker.Penetration 0)
                        {
                            
double Power = (double)(attacker.Penetration 100);
                            if (
MyMath.Success(Power))
                            {
                                
Damage Damage 50 100;
                                
Packet.Effect1 |= Attack.AttackEffects1.Penetration;
                            }

                        }
                        if (
attacker.SkillCStrike 0)
                        {
                            
double Power = (double)(attacker.SkillCStrike);
                            
Power = (double)(Power 100);
                            if (
MyMath.Success(Power))
                            {
                                
Damage += Damage 50 100;
                                
Packet.Effect1 |= Attack.AttackEffects1.CriticalStrike;
                            }
                        }
                    }
                }
            }
        }
    }

}
namespace 
Mr_Panda
{
    public class 
StatusConstants
    
{
        public const 
int AdjustSet = -30000,
                         
AdjustFull = -32768,
                         
AdjustPercent 30000;
    }
    public class 
MathHelper
    
{
        public static 
int BitFold32(int lower16int higher16)
        {
            return (
lower16) | (higher16 << 16);
        }
        public static 
void BitUnfold32(int bits32out int lower16out int upper16)
        {
            
lower16 = (int)(bits32 UInt16.MaxValue);
            
upper16 = (int)(bits32 >> 16);
        }
        public static 
void BitUnfold64(ulong bits64out int lower32out int upper32)
        {
            
lower32 = (int)(bits64 UInt32.MaxValue);
            
upper32 = (int)(bits64 >> 32);
        }
        public static 
int RoughDistance(int x1int y1int x2int y2)
        {
            return 
Math.Max(Math.Abs(x1 x2), Math.Abs(y1 y2));
        }
        public static 
int ConquerDirection(int x1int y1int x2int y2)
        {
            
double angle Math.Atan2(y2 y1x2 x1);
            
angle -= Math.PI 2;

            if (
angle 0angle += Math.PI;

            
angle *= / (Math.PI);
            return (int)
angle;
        }
        public static 
int MulDiv(int numberint numeratorint denominator)
        {
            return (
number numerator denominator 2) / denominator;
        }
        public static 
bool OverflowAdd(ref int accint add)
        {
            if (
int.MaxValue acc add)
                return 
true;
            
acc Math.Max(acc add0);
            return 
false;
        }
        public static 
int AdjustDataEx(int dataint adjustint maxData 0)
        {
            if (
adjust >= StatusConstants.AdjustPercent)
                return 
MulDiv(dataadjust StatusConstants.AdjustPercent100);

            if (
adjust <= StatusConstants.AdjustSet)
                return -
adjust StatusConstants.AdjustSet;

            if (
adjust == StatusConstants.AdjustFull)
                return 
maxData;

            return 
data adjust;
        }
    }
    public class 
GemTypes
    
{
        public const 
int
            Phoenix 
0,
            
Dragon 1,
            
Fury 2,
            
Rainbow 3,
            
Kylin 4,
            
Violet 5,
            
Moon 6,
            
Tortoise 7,
            
Thunder 10,
            
Glory 12,

            
First Phoenix,
            
Last Glory 1;

        public static 
readonly string[] Animation = new string[]
                {
                    
"phoenix",
                    
"goldendragon",
                    
"fastflash",
                    
"rainbow",
                    
"goldenkylin",
                    
"purpleray",
                    
"moon",
                    
"recovery"
                
};

        public static 
readonly int[][] Effects = new[]
                {
                    new[] { 
051015 },
                    new[] { 
051015 },
                    new[] { 
051015 },
                    new[] { 
0101525 },
                    new[] { 
050100200 },
                    new[] { 
03050100 },
                    new[] { 
0153050 },
                    new[] { 
024},
                    new[] { 
000},
                    new[] { 
000},
                    new[] { 
0100300500 },
                    new[] { 
000},
                    new[] { 
0100300500 }
                };
    }