عرض مشاركة واحدة
قديم 2020-03-17, 02:41 AM
المشاركة #11  
Tarek Roshdi
  • غير متواجد
افتراضي رد: حل مشكلة perfection x2
كل حاجة عندي فيها بريفكشن هوضحها لحضرتك واسف لو هشغلك معايا كتير لأني مش عارف اوصل لحل
Handle.cs

كود:
   #region Perfection
            
if (attacker.PlayerFlag == PlayerFlag.Player)
            {

                
uint rand = (uint)Rayzo.Kernel.Random.Next(12);
                switch (
rand)
                {
                    case 
1:
                        {
                            
#region Perfection
                            
Game.Enums.PerfectionEffect effect Enums.PerfectionEffect.CalmWind;
                            
byte chance 1;
                            new 
MsgRefineEffect().GenerateEffectandChance(attacker.Ownerref effectref chance);
                            if (
Kernel.Rate(chance))
                            {
                                new 
MsgRefineEffect().SendEffect(attackerattackedeffect);
                            }
                            
#endregion
                            
break;
                        }
                    case 
2:
                        {
                            
#region Perfection
                            
byte chance 0;
                            new 
MsgRefineEffect().HandleLuckyStrike(attackerref chance);
                            if (
Kernel.Rate(chance))
                            {
                                
Network.Writer.WriteUInt16((ushort)(<< 10), 36attack.ToArray());
                                new 
MsgRefineEffect().SendEffect(attackerattackedGame.Enums.PerfectionEffect.LuckyStrike);
                                
damage *= 2;
                            }
                            
#endregion
                            
break;
                        }

                }

            }
            
#endregion
            #region Perfection
            
if (attacked.PlayerFlag == PlayerFlag.Player)
            {
                
uint rand = (uint)Rayzo.Kernel.Random.Next(12);
                switch (
rand)
                {

                    case 
1:
                        {
                           
// if (attacked.PlayerFlag == PlayerFlag.Player)
                            
{
                                
#region Perfection
                                
byte chance 1;
                                new 
MsgRefineEffect().HandleStrickeLock(attackerref chance);
                                if (
Kernel.Rate(chance))
                                {
                                    
Game.Enums.PerfectionEffect effect Enums.PerfectionEffect.Stricklock;
                                    new 
MsgRefineEffect().SendEffect(attackedattackereffect);
                                    return;
                                }
                                
#endregion
                            
}

                            break;
                        }
                    case 
2:
                        {

                          
//  if (attacked.PlayerFlag == PlayerFlag.Player)
                            
{
                                
#region Perfection
                                
Game.Enums.PerfectionEffect effect Enums.PerfectionEffect.MirrorofSin;
                                
byte chance 0;
                                new 
MsgRefineEffect().HandleMirror(attackedref chance);
                                if (
Kernel.Rate(chance))
                                {
                                    new 
MsgRefineEffect().SendEffect(attackedattackereffect);
                                    if (!
attacker.ContainsFlag4(Rayzo.Network.GamePackets.MsgUpdate.Flags4.Omnipotence) || !attacker.ContainsFlag3((ulong)Rayzo.Network.GamePackets.MsgUpdate.Flags3.BladeFlurry)) return;
                                    {
                                        
attacked.AddFlag((ulong)Network.GamePackets.MsgUpdate.Flags.XPList);
                                        
attacker.Owner.XPListStamp Time32.Now;
                                    }
                                }
                                
#endregion
                            
}
                            break;
                        }

                }

            }


            
#endregion
            #region Perfection X2
            
byte Tiempo 0;
            new 
MsgRefineEffect().HandleLuckyStrike(attackerref Tiempo);
            if (
Kernel.Rate(Tiempo))
            {
                
Network.Writer.WriteUInt16((ushort)(<< 10), 36attack.ToArray());
                new 
MsgRefineEffect().SendEffect(attackerattackedGame.Enums.PerfectionEffect.LuckyStrike);
                
damage damage 2;
            }
            
#endregion 

Gamestate.cs

كود:
#region Perfiction
            
if (Player.Perfection != null)
            {
                if (
this.Equipment.TotalPerfectionLevel >= Player.Perfection.Id)
                {
                    
Player.BaseMinAttack += Player.Perfection.PhysicalAttack;
                    
Player.BaseMaxAttack += Player.Perfection.PhysicalAttack;
                    
Player.Defence += Player.Perfection.PhysicalDefense;
                    
Player.BaseMagicAttack += Player.Perfection.MagicAttack;
                    
Player.MagicDefence += Player.Perfection.MagicDefense;
                }
            } 

MsgRefineEffect.cs

كود:
   public byte GetChance(Client.GameState clientGame.Enums.PerfectionEffect effect)
        {
            if (
client.Equipment.TotalPerfectionLevel == 0) return 0;
            
byte Chance 10;
            if (
effect == Game.Enums.PerfectionEffect.CalmWind)
            {
                if (
client.Equipment.TotalPerfectionLevel == 3Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 90Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 170Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 250Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 285Chance += 1;
            }
            if (
effect == Game.Enums.PerfectionEffect.BloodSpawn)
            {
                if (
client.Equipment.TotalPerfectionLevel >= 40Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 240Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 288Chance += 1;
            }
            if (
effect == Game.Enums.PerfectionEffect.DivineGuard)
            {
                if (
client.Equipment.TotalPerfectionLevel <= 40Chance += 5;
            }
            if (
effect == Game.Enums.PerfectionEffect.CoreStrike)
            {
                if (
client.Equipment.TotalPerfectionLevel == 50Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 80Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 135Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 205Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 245Chance += 1;
            }
            if (
effect == Game.Enums.PerfectionEffect.DrainingTouch)
            {
                if (
client.Equipment.TotalPerfectionLevel >= 35Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 220Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 276Chance += 1;
            }
            if (
effect == Game.Enums.PerfectionEffect.FreeSoul)
            {
                if (
client.Equipment.TotalPerfectionLevel >= 25Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 95Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 130Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 195Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 279Chance += 1;
            }
            if (
effect == Game.Enums.PerfectionEffect.InvisibleArrow)
            {
                if (
client.Equipment.TotalPerfectionLevel >= 65Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 225Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 282Chance += 1;
            }
            if (
effect == Game.Enums.PerfectionEffect.KillingFlash)
            {
                if (
client.Equipment.TotalPerfectionLevel >= 55Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 165Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 294Chance += 1;
            }
            if (
effect == Game.Enums.PerfectionEffect.LightofStamina)
            {
                if (
client.Equipment.TotalPerfectionLevel >= 1Chance += 5;
            }
            if (
effect == Game.Enums.PerfectionEffect.LuckyStrike)
            {
                if (
client.Equipment.TotalPerfectionLevel >= 15Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 115Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 215Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 314Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 320Chance += 1;
            }
            if (
effect == Game.Enums.PerfectionEffect.MirrorofSin)
            {
                if (
client.Equipment.TotalPerfectionLevel >= 60Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 190Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 291Chance += 1;
            }
            if (
effect == Game.Enums.PerfectionEffect.ShieldBreak)
            {
                if (
client.Equipment.TotalPerfectionLevel == 155 && client.Equipment.TotalPerfectionLevel <= 254Chance += 50 100;
                if (
client.Equipment.TotalPerfectionLevel == 255 && client.Equipment.TotalPerfectionLevel <= 296Chance += 70 100;
                if (
client.Equipment.TotalPerfectionLevel == 297 && client.Equipment.TotalPerfectionLevel <= 311Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel == 312 && client.Equipment.TotalPerfectionLevel <= 321Chance += 150 100;
                if (
client.Equipment.TotalPerfectionLevel == 322 && client.Equipment.TotalPerfectionLevel >= 322Chance += 2;
            }
            if (
effect == Game.Enums.PerfectionEffect.StraightLife)
            {
                if (
client.Equipment.TotalPerfectionLevel >= 30Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 125Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 210Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 265Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 303Chance += 1;
            }
            if (
effect == Game.Enums.PerfectionEffect.Stricklock)
            {
                if (
client.Equipment.TotalPerfectionLevel >= 30Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 125Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 210Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 265Chance += 1;
                if (
client.Equipment.TotalPerfectionLevel >= 303Chance += 1;
            }
            return 
Chance;
        }
        public 
void SendEffect(Game.Player attackerGame.Player attackedGame.Enums.PerfectionEffect effect)
        {
            if (
attacker == null || attacked == null) return;
            var 
proto = new MsgRefineEffectProto();
            
proto.AttackerUID attacker.UID;
            if (
attacked.PlayerFlag == Game.PlayerFlag.Player)
                
proto.AttackedUID attacked.UID;
            else if (
attacked.PlayerFlag == Game.PlayerFlag.Monster && attacked != null && attacked.UID != 0)
            {
                
proto.AttackedUID attacked.UID;
            }
            
proto.Effect = (uint)effect;
            var 
proto2 Kernel.FinalizeProtoBuf(proto3254);
            
attacker.Owner.SendScreen(proto2true);
            if (
effect == Game.Enums.PerfectionEffect.DrainingTouch)
            {
                
attacker.Hitpoints attacker.MaxHitpoints;
            }
            if (
effect == Game.Enums.PerfectionEffect.KillingFlash)
            {
                if (!
attacker.ContainsFlag4(Rayzo.Network.GamePackets.MsgUpdate.Flags4.Omnipotence) || !attacker.ContainsFlag3((ulong)Rayzo.Network.GamePackets.MsgUpdate.Flags3.BladeFlurry)) return;
                {
                    
attacker.AddFlag((ulong)Network.GamePackets.MsgUpdate.Flags.XPList);

                    
attacker.Owner.XPListStamp Time32.Now;
                }
            }
            if (
effect == Game.Enums.PerfectionEffect.DivineGuard)
            {
                
attacker.AddFlag3((ulong)Network.GamePackets.MsgUpdate.Flags3.DivineGuard);
                
attacker.Defence = (ushort)(((attacker.Defence) * 20) / 100);
                
attacker.DivineGuardStamp Time32.Now;
            }
            if (
effect == Game.Enums.PerfectionEffect.ShieldBreak)
            {
                
attacker.AddFlag3((ulong)Network.GamePackets.MsgUpdate.Flags3.ShieldBreak);
                
attacker.ShieldBreakStamp Time32.Now;
                
attacker.Block += (ushort)(((attacker.Block) * 2) / 10);
            }
            if (
effect == Game.Enums.PerfectionEffect.StraightLife)
            {
                
attacker.BringToLife();
            }
            if (
effect == Game.Enums.PerfectionEffect.LightofStamina && attacked.PlayerFlag == Game.PlayerFlag.Player && attacker.Owner.Equipment.TotalPerfectionLevel attacked.Owner.Equipment.TotalPerfectionLevel || effect == Game.Enums.PerfectionEffect.LightofStamina && attacked.PlayerFlag == Game.PlayerFlag.Monsterattacker.Stamina 100;
        }
        public 
void GenerateEffectandChance(Client.GameState clientref Game.Enums.PerfectionEffect effectref byte chance)
        {
            
effect = (Game.Enums.PerfectionEffect)Kernel.Random.Next(314);
            
chance GetChance(clienteffect);
            while (
chance == 10)
            {
                
effect = (Game.Enums.PerfectionEffect)Kernel.Random.Next(314);
                
chance GetChance(clienteffect);
            }
        }
        public 
void HandleStrickeLock(Game.Player clientref byte chance)
        {
            
chance GetChance(client.OwnerGame.Enums.PerfectionEffect.Stricklock);
        }
        public 
void HandleFreeSoul(Game.Player clientref byte chance)
        {
            
chance GetChance(client.OwnerGame.Enums.PerfectionEffect.FreeSoul);
        }
        public 
void HandleStraightLife(Game.Player clientref byte chance)
        {
            
chance GetChance(client.OwnerGame.Enums.PerfectionEffect.StraightLife);
        }
        public 
void HandleBloodSpawn(Game.Player clientref byte chance)
        {
            
chance GetChance(client.OwnerGame.Enums.PerfectionEffect.BloodSpawn);
        }
        public 
void HandleMirror(Game.Player clientref byte chance)
        {
            
chance GetChance(client.OwnerGame.Enums.PerfectionEffect.MirrorofSin);
        }
        public 
void HandleLuckyStrike(Game.Player clientref byte chance)
        {
            
chance GetChance(client.OwnerGame.Enums.PerfectionEffect.LuckyStrike);
        } 


Equipments.cs

كود:
        public ushort TotalPerfectionLevel
        
{
            
get
            
{
                
ushort Count 0;
                foreach (
Network.GamePackets.MsgItemInfo item in Objects)
                {
                    if (
item == null) continue;
                    if (
item.Position 19 || item.Position == || item.Position == || item.Position == 15 || item.Position == 16 || item.Position == 17) continue;
                    
Count += (ushort)(ItemHandler.IsTwoHand(item.ID) ? item.PerfectionLevel item.PerfectionLevel);
                }
                return 
Count;
            }
        }