اسم العضو كلمة المرور حفظ البيانات؟ تسجيل عضوية



ايجى4يو || Egy4u


  ايجى4يو || Egy4u > أقسام كونكر برفيت > تطوير سيرفرات كـــونـــكر تـــهيس

اعلانات ايجى4يو


المشاركات: 27 [+]
: [+]
:
: [+]
محمد مصطفي غير متواجد حالياً
محمد مصطفي
( مراقب اقسام كونكر برفيت )
التحكم في بلاص الايتيم Compse and Quick Control

ان شاء الله هشرح دلوقتي طريقة التحكم في بلاص الايتيم ازاي تخليه أسرع

وازاي تخليه بطيء وبرضو هقولك ازاي تلغيه خالص

أولآ مكان الكود هتفتح فولدر Network كلاس PacketHandler.cs

دا الكود الي هنشتغل عليه

Html

private static void ComposePlus(Compose composeClient.GameClient client
        { 

            
ConquerItem Item null
            
ConquerItem[] Minors null
            if (
client.Inventory.TryGetItem(compose[0], out Item) || (client.Equipment.TryGetItem(compose[0]) != null)) 
            { 
                if (
Item == null && client.Inventory.TryGetItem(compose[0], out Item) == false && 
                    
client.Equipment.TryGetItem(compose[0]) != null
                    
Item client.Equipment.TryGetItem(compose[0]); 

                if (
compose.Mode == Compose.DragonBallUpgrade || compose.Mode == Compose.MeteorUpgrade
                { 
                    
Minors = new ConquerItem[compose.Countx]; 
                    for (
int i 0compose.Countxi++) 
                    { 
                        if (!
client.Inventory.TryGetItem(compose[2], out Minors[i])) 
                            return; 
                        else if (
Minors[i].UID == Item.UID
                            return; 
                    } 
                } 
                else 
                { 
                    
Minors = new ConquerItem[compose.Count 1]; 
                    for (
int i 0compose.Count 1i++) 
                    { 
                        if (!
client.Inventory.TryGetItem(compose[1], out Minors[i])) 
                            return; 
                        else if (
Minors[i].UID == Item.UID
                            return; 
                    } 
                } 
                
ushort pos ItemPosition(Item.ID); 
                if (
pos == ConquerItem.Bottle || pos == ConquerItem.Garment || pos == ConquerItem.LeftWeaponAccessory || 
                    
pos == ConquerItem.RightWeaponAccessory || pos == ConquerItem.SteedArmor
                    return; 

                if (
compose.Mode == Compose.ChanceUpgrade || compose.Mode == Compose.QuickCompose
                { 
                    if (
Item.Plus 12 && Item.PlusProgress != 0
                    { 
                        
double percent = (double)Item.PlusProgress / (double)Database.DataHolder.ComposePlusPoints(Item.Plus) * 100
                        if (
Kernel.Rate(percent)) 
                        { 
                            
Item.PlusProgress 0
                            
Item.Plus++; 
                        } 
                        else 
                            
Item.PlusProgress 0
                        
Item.Mode TroZenA.Game.Enums.ItemMode.Update
                        
Item.Send(client); 
                        
Database.ConquerItemTable.UpdatePlus(Item); 
                        
Database.ConquerItemTable.UpdatePlusProgress(Item); 
                        if (
Item.Plus >= 9
                            
Kernel.SendWorldMessage
                                new 
Message
                                    
"Congratulations, " client.Entity.Name " has upgraded His " 
                                    
Database.ConquerItemInformation.BaseInformations[Item.ID].Name " to + " 
                                    
Item.Plus " and " Item.PlusProgress " in Progress!"System.Drawing.Color.Red
                                    
Network.GamePackets.Message.TopLeft), Program.GamePool); 
                    } 
                    return; 
                } 
                
bool done false
                foreach (var 
item in Minors
                { 
                    var 
ItemPlus item
                    
Database.ConquerItemInformation infos 
                        new 
TroZenA.Database.ConquerItemInformation(Item.IDItem.Plus); 
                    switch (
compose.Mode
                    { 
                        case 
Compose.DragonBallUpgrade
                            { 
                                if (
Item.ID 10 == (byte)Game.Enums.ItemQuality.Super
                                    break; 
                                
byte chance 
                                    (
byte
                                        (
70 
                                         ((
infos.BaseInformation.Level - (infos.BaseInformation.Level 100 30 0)) / 
                                          (
10 Item.ID 10))); 
                                if (
Item.Durability Item.MaximDurability
                                    break; 
                                if (
Kernel.Rate(chance) || (compose.Count == compose.Countx 2)) 
                                { 
                                    switch ((
Game.Enums.ItemQuality)(Item.ID 10)) 
                                    { 
                                        case 
Game.Enums.ItemQuality.Normal
                                        case 
Game.Enums.ItemQuality.NormalV1
                                        case 
Game.Enums.ItemQuality.NormalV2
                                        case 
Game.Enums.ItemQuality.NormalV3
                                            
Item.ID = (Item.ID - (Item.ID 10)) + (byte)Game.Enums.ItemQuality.Refined
                                            break; 
                                        default: 
                                            
Item.ID++; 
                                            break; 
                                    } 
                                    
Database.ConquerItemTable.UpdateItemID(Item); 
                                    
Item.Mode TroZenA.Game.Enums.ItemMode.Update
                                    
Item.Send(client); 
                                    
client.Send(new ItemUsage(true
                                    { 
                                        
UID client.Entity.UID
                                        
dwParam 1
                                        
ID ItemUsage.DragonBallUpgrade 
                                    
}); 
                                } 
                                else 
                                { 
                                    
Item.Durability = (ushort)(Item.Durability 2); 
                                    
Database.ConquerItemTable.UpdateDurabilityItem(Item); 
                                    
Item.Mode TroZenA.Game.Enums.ItemMode.Update
                                    
Item.Send(client); 
                                } 

                                
client.Inventory.Remove(ItemPlusTroZenA.Game.Enums.ItemUse.Remove); 
                                break; 
                            } 
                        case 
Compose.MeteorUpgrade
                            { 
                                if (
infos.BaseInformation.Level == ItemMaxLevel(ItemPosition(infos.BaseInformation.ID))) 
                                    break; 
                                
byte chance 70
                                
chance -= (byte)(infos.BaseInformation.Level 10 3); 
                                
chance -= (byte)(((Item.ID 10) + 1) * 3); 
                                if (
Item.Durability Item.MaximDurability
                                    break; 
                                
uint newid 0
                                if (!
done
                                    
newid infos.CalculateUplevel(); 
                                
done true
                                if (
newid != && newid != Item.ID
                                { 
                                    if (
Kernel.Rate(chance) || (compose.Count == compose.Countx 2)) 
                                    { 
                                        
Item.ID newid
                                        
infos = new TroZenA.Database.ConquerItemInformation(Item.IDItem.Plus); 
                                        
Item.Durability Item.MaximDurability infos.BaseInformation.Durability
                                        
Database.ConquerItemTable.UpdateItemID(Item); 
                                        
Database.ConquerItemTable.UpdateDurabilityItem(Item); 
                                        
Item.Mode TroZenA.Game.Enums.ItemMode.Update
                                        
Item.Send(client); 

                                        
client.Send(new ItemUsage(true
                                        { 
                                            
UID client.Entity.UID
                                            
dwParam 1
                                            
ID ItemUsage.MeteorUpgrade 
                                        
}); 
                                    } 
                                    else 
                                    { 
                                        
Item.Durability = (ushort)(Item.Durability 2); 
                                        
Database.ConquerItemTable.UpdateDurabilityItem(Item); 
                                        
Item.Mode TroZenA.Game.Enums.ItemMode.Update
                                        
Item.Send(client); 
                                    } 
                                } 
                                
client.Inventory.Remove(ItemPlusTroZenA.Game.Enums.ItemUse.Remove); 
                                break; 
                            } 
                        case 
Compose.CurrentSteed
                        case 
Compose.Plus
                            { 
                                if (
pos == ConquerItem.Wings && Item.Plus >= 12 && Item.PlusProgress <= 2000000
                                { 
                                    
Item.PlusProgress += Database.DataHolder.StonePlusPoints(ItemPlus.Plus); 
                                    
Item.Mode Game.Enums.ItemMode.Update
                                    
Item.Send(client); 
                                    
Database.ConquerItemTable.UpdatePlusProgress(Item); 
                                    
client.Inventory.Remove(ItemPlusGame.Enums.ItemUse.Remove); 
                                } 
                                if (
Item.Plus 12 && Item.GetItemType() != ConquerItem.ItemTypes.GarmentID_1 && Item.GetItemType() != ConquerItem.ItemTypes.GarmentID_2 && Item.GetItemType() != ConquerItem.ItemTypes.BottleID && Item.GetItemType() != ConquerItem.ItemTypes.RightAccessory1 && Item.GetItemType() != ConquerItem.ItemTypes.RightAccessory2 && Item.GetItemType() != ConquerItem.ItemTypes.RightAccessory3 && Item.GetItemType() != ConquerItem.ItemTypes.LeftAccessory
                                { 
                                    
Item.PlusProgress += Database.DataHolder.StonePlusPoints(ItemPlus.Plus); 
                                    while (
Item.PlusProgress >= Database.DataHolder.ComposePlusPoints(Item.Plus) && Item.Plus != 12
                                    { 
                                        
Item.PlusProgress -= Database.DataHolder.ComposePlusPoints(Item.Plus); 
                                        
Item.Plus++; 
                                        if (
Item.Plus == 12
                                            
Item.PlusProgress 0
                                    } 
                                    
Item.Mode TroZenA.Game.Enums.ItemMode.Update
                                    
Item.Send(client); 
                                    
Database.ConquerItemTable.UpdatePlus(Item); 
                                    
Database.ConquerItemTable.UpdatePlusProgress(Item); 
                                    
client.Inventory.Remove(ItemPlusTroZenA.Game.Enums.ItemUse.Remove); 
                                    if (
Item.Plus >= 9
                                        
Kernel.SendWorldMessage(new Message("Congratulations, " client.Entity.Name " has upgraded His " Database.ConquerItemInformation.BaseInformations[Item.ID].Name " to + " Item.Plus " and " Item.PlusProgress " in Progress!"System.Drawing.Color.RedNetwork.GamePackets.Message.TopLeft), Program.GamePool); 
                                } 
                                break; 
                            } 
                        case 
Compose.NewSteed
                            { 
                                if (
pos == ConquerItem.Steed && Item.Plus >= 12 && Item.PlusProgress <= 2000000
                                { 
                                    
Item.PlusProgress += Database.DataHolder.StonePlusPoints(ItemPlus.Plus); 
                                    
Item.Mode Game.Enums.ItemMode.Update
                                    
Item.Send(client); 
                                    
Database.ConquerItemTable.UpdatePlusProgress(Item); 
                                    
client.Inventory.Remove(ItemPlusGame.Enums.ItemUse.Remove); 
                                } 
                                if (
Item.Plus 12
                                { 
                                    
Item.PlusProgress += Database.DataHolder.StonePlusPoints(ItemPlus.Plus); 
                                    while (
Item.PlusProgress >= Database.DataHolder.ComposePlusPoints(Item.Plus) && Item.Plus != 12
                                    { 
                                        
Item.PlusProgress -= Database.DataHolder.ComposePlusPoints(Item.Plus); 
                                        
Item.Plus++; 
                                        if (
Item.Plus == 12
                                            
Item.PlusProgress 0
                                    } 
                                    
Item.Mode TroZenA.Game.Enums.ItemMode.Update
                                    
Item.Send(client); 
                                    
Database.ConquerItemTable.UpdatePlus(Item); 
                                    
client.Inventory.Remove(ItemPlusTroZenA.Game.Enums.ItemUse.Remove); 
                                } 

                                
int color1 = (int)Item.SocketProgress
                                
int color2 = (int)ItemPlus.SocketProgress

                                
int G1 color1 0xFF
                                
int G2 color2 0xFF
                                
int B1 = (color1 >> 8) & 0xFF
                                
int B2 = (color2 >> 8) & 0xFF
                                
int R1 = (color1 >> 16) & 0xFF
                                
int R2 = (color2 >> 16) & 0xFF
                                
Item.NextGreen = (byte)((int)Math.Floor(0.9 G1) + (int)Math.Floor(0.1 G2) + 1); 
                                
Item.NextBlue = (byte)((int)Math.Floor(0.9 B1) + (int)Math.Floor(0.1 B2) + 1); 
                                
Item.NextRed = (byte)((int)Math.Floor(0.9 R1) + (int)Math.Floor(0.1 R2) + 1); 
                                
Item.SocketProgress = (uint)(Item.NextGreen | (Item.NextBlue << 8) | (Item.NextRed << 16)); 

                                
Item.Mode TroZenA.Game.Enums.ItemMode.Update
                                
Item.Send(client); 
                                
Database.ConquerItemTable.UpdatePlusProgress(Item); 
                                
Database.ConquerItemTable.UpdateSocketProgress(Item); 
                                
Database.ConquerItemTable.UpdateNextSteedColor(Item); 
                                
client.Inventory.Remove(ItemPlusTroZenA.Game.Enums.ItemUse.Remove); 
                                break; 
                            } 
                    } 
                } 



نقرآ الكواد ونقسمه أجزاء ونشرح كل جزء لوحده

اول كود دا عباره عن ايه

Html

ConquerItem Item null
            
ConquerItem[] Minors null
دا بيقول الايتيم ونظيره يعني الأيتيم الي انت هتستعمله والنظير الي هو ال ستون Stone حجر التبليص

مفيش أي مشكله دا بيعرف بس نخش ع الي بعده

الكود دا ,

Html

if (client.Inventory.TryGetItem(compose[0], out Item) || (client.Equipment.TryGetItem(compose[0]) != null)) 
            { 
                if (
Item == null && client.Inventory.TryGetItem(compose[0], out Item) == false && 
                    
client.Equipment.TryGetItem(compose[0]) != null
                    
Item client.Equipment.TryGetItem(compose[0]); 
برضو عادي مجرد شرط لألغاء العمليه Cancel

المهم الكود بتاعنا الي هنشتغل عليه دا ,

Html

if (compose.Mode == Compose.ChanceUpgrade || compose.Mode == Compose.QuickCompose
                { 
                    if (
Item.Plus 12 && Item.PlusProgress != 0
                    { 
                        
double percent = (double)Item.PlusProgress / (double)Database.DataHolder.ComposePlusPoints(Item.Plus) * 100
                        if (
Kernel.Rate(percent)) 
                        { 
                            
Item.PlusProgress 0
                            
Item.Plus++; 
                        } 
                        else 
                            
Item.PlusProgress 0
                        
Item.Mode TroZenA.Game.Enums.ItemMode.Update
                        
Item.Send(client); 
                        
Database.ConquerItemTable.UpdatePlus(Item); 
                        
Database.ConquerItemTable.UpdatePlusProgress(Item); 
                        if (
Item.Plus >= 9
                            
Kernel.SendWorldMessage
                                new 
Message
                                    
"Congratulations, " client.Entity.Name " has upgraded His " 
                                    
Database.ConquerItemInformation.BaseInformations[Item.ID].Name " to + " 
                                    
Item.Plus " and " Item.PlusProgress " in Progress!"System.Drawing.Color.Red
                                    
Network.GamePackets.Message.TopLeft), Program.GamePool); 
                    } 
                    return; 
                } 
نقراه اول جزء ,

Html

if (Item.Plus 12 && Item.PlusProgress != 0
دا شرط وبيقول لو بلاص الايتيم أقل من 12 و البروجرس او بوينتات البلاص لا تساوي الصفر نفذ الأمر الاتي

والي هو النسبه المئويه ,

Html

double percent = (double)Item.PlusProgress / (double)Database.DataHolder.ComposePlusPoints(Item.Plus) * 100
دا الكود الي بيعطي النسبه المئويه و هي عباره عن بوينتات البروجريس / الاجمالي * 100

أهم كود عندنا ,

Html

if (Kernel.Rate(percent)) 
                        { 
                            
Item.PlusProgress 0
                            
Item.Plus++; 
                        } 
لو النسبه المئويه اتحققت هنخلي البروجريس = 0 وهنرفع الايتيم بلاص زياده

لحد دلوقتي بشرح كود ال Quick Compose

طيب ازاي اتحكم بقا ؟؟

نخلي الكود كدا ,

Html

double percent = (double)Item.PlusProgress / (double)Database.DataHolder.ComposePlusPoints(Item.Plus) * 100 
كدا أنا هقسم الناتج علي 2 ودا هيقلل الفرصه بنسبة 50%

كدا النسبه هتبقا قليله و Quick صعب جدآ

لو عاوز تريح دماغك وتلغيه خالص وتخلي كل العمليات فاشله

بالعربي مفيش Quick بيجيب نتيجه

بأكتر من طريقه الاولي

نخلي الكود بتاع الباكت هاندلر كدا ,

Html

double percent = (double)Item.PlusProgress/* / (double)Database.DataHolder.ComposePlusPoints(Item.Plus)*/ 100
وممكن نغير النوع double ل int و كدا مفيش أي نسبه هتتحقق

و ممكن نخلي الكود كدا مثلا ,

Html

double percent 0
كدا النسبه المئويه صفر

أتمني الشرح يكون وافي وأي استفسار سيبه

في رعاية الله ,


المشاركات: 2,619 [+]
: [+]
:
: [+]
egy4u متواجد حالياً
egy4u
( :: مؤسس المنتدي ::
:: WwW.Egy4U.CoM ::
:: لا إله إلا الله ::
)
رد: التحكم في بلاص الايتيم Compse and Quick Control

تسلم علي مجهودك والمواضيع الحصرية الي بتنزلها

المشاركات: 27 [+]
: [+]
:
: [+]
محمد مصطفي غير متواجد حالياً
محمد مصطفي
( مراقب اقسام كونكر برفيت )
رد: التحكم في بلاص الايتيم Compse and Quick Control

اقتباس:
المشاركة الأصلية كتبت بواسطة egy4u مشاهدة المشاركة
تسلم علي مجهودك والمواضيع الحصرية الي بتنزلها
نورت يا قلبي ,,,