|
static void ComposePlus(Compose compose, Client.GameState client)
if (Item.Plus < 8 && Item.PlusProgress != 0)
static void ComposePlus(
static void ComposePlus(Compose compose, Client.GameState client)
{
ConquerItem Item = null;
ConquerItem[] Minors = null;
if (client.Inventory.TryGetItem(compose[0], out Item) || (client.Equipment.TryGetItem(compose[0]) != null) || (compose.Mode == Compose.QuickCompose))
{
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 = 0; i < compose.Countx; i++)
{
if (!client.Inventory.TryGetItem(compose[i + 2], out Minors[i]))
return;
else
if (Minors[i].UID == Item.UID)
return;
}
}
else
{
Minors = new ConquerItem[compose.Count - 1];
for (int i = 0; i < compose.Count - 1; i++)
{
if (!client.Inventory.TryGetItem(compose[i + 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) //mohsen.. i'm remove crop
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);
if (Kernel.Rate(percent))
{
Item.PlusProgress = 0;
Item.Plus++;
}
else
Item.PlusProgress = 0;
Item.Mode = MrDesha.Game.Enums.ItemMode.Update;
Item.Send(client);
Database.ConquerItemTable.UpdatePlus(Item);
Database.ConquerItemTable.UpdatePlusProgress(Item);
if (Item.Plus >= 6)
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.Values);
}
return;
}
if (compose.Mode == Compose.MeteorUpgrade || compose.Mode == Compose.DragonBallUpgrade)
{
Database.ConquerItemInformation info = new Database.ConquerItemInformation(Item.ID, Item.Plus);
Minors = new ConquerItem[compose.Count - 2];
for (Int32 i = 0; i < compose.Count - 2; i++)
{
if (!client.Inventory.TryGetItem(compose[i + 2], out Minors[i]))
return;
else
if (Minors[i].UID == Item.UID)
return;
}
switch (compose.Mode)
{
case Compose.DragonBallUpgrade:
{
if (Item.ID % 10 == (Byte)Game.Enums.ItemQuality.Super)
break;
if (Item.Durability < Item.MaximDurability)
break;
// Byte chance = (Byte)(70 - ((infos.BaseInformation.Level - (infos.BaseInformation.Level > 100 ? 30 : 0)) / (10 - Item.ID % 10)));
Byte cost = DragonBallUpgradeCost(Item, info);
double chance = (((double)compose.Countx / (double)cost) * 100);
if (MyMath.Success(chance))
{
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 = Game.Enums.ItemMode.Update;
Item.Send(client);
client.Send(new ItemUsage(true)
{
UID = client.Entity.UID,
dwParam = 1,
ID = ItemUsage.DragonBallUpgrade
});
}
else
{
Item.Durability = (UInt16)(Item.Durability / 2);
Item.Mode = Game.Enums.ItemMode.Update;
Item.Send(client);
}
foreach (var item in Minors)
client.Inventory.Remove(item, Game.Enums.ItemUse.Remove);
if (compose.Countx > cost)
{
var diff = compose.Countx - cost;
client.Inventory.Add((UInt32)(Minors[0].ID == 720028 ? 1088000 : 1088001), 0, (Byte)diff);
}
break;
}
case Compose.MeteorUpgrade:
{
if (info.BaseInformation.Level == PacketHandler.ItemMaxLevel(PacketHandler.ItemPosition(info.BaseInformation.ID)))
break;
if (Item.Durability < Item.MaximDurability)
{
client.MessageBox("Please! Repair It.", null, null);
break;
}
Byte cost = MeteorUpgradeCost(Item.ID);
if (PacketHandler.ItemPosition(Item.ID) == (UInt16)ConquerItem.Armor || PacketHandler.ItemPosition(Item.ID) == (UInt16)ConquerItem.Head || PacketHandler.IsShield(Item.ID))
{
if (info.BaseInformation.Level >= 110)
cost = 1;
}
else
{
if (info.BaseInformation.Level >= 115)
cost = 1;
}
double chance = (((double)compose.Countx / (double)cost) * 100);
UInt32 newid = info.CalculateUplevel();
if (newid != 0 && newid != Item.ID)
{
if (MyMath.Success(chance))
{
Item.ID = newid;
info = new Database.ConquerItemInformation(Item.ID, Item.Plus);
Item.Durability = Item.MaximDurability = info.BaseInformation.Durability;
Database.ConquerItemTable.UpdateItemID(Item);
Item.Mode = Game.Enums.ItemMode.Update;
Item.Send(client);
client.Send(new ItemUsage(true)
{
UID = client.Entity.UID,
dwParam = 1,
ID = ItemUsage.MeteorUpgrade
});
}
else
{
Item.Durability = (UInt16)(Item.Durability / 2);
Item.Mode = Game.Enums.ItemMode.Update;
Item.Send(client);
}
}
foreach (var item in Minors)
client.Inventory.Remove(item, Game.Enums.ItemUse.Remove);
if (compose.Countx > cost)
{
var diff = compose.Countx - cost;
client.Inventory.Add((UInt32)(Minors[0].ID == 720028 ? 1088000 : 1088001), 0, (Byte)diff);
}
break;
}
}
}
foreach (var item in Minors)
{
var ItemPlus = item;
Database.ConquerItemInformation infos = new MrDesha.Database.ConquerItemInformation(Item.ID, Item.Plus);
switch (compose.Mode)
{
case Compose.CurrentSteed:
case Compose.Plus:
{
if (Item.Plus == 12 && Item.GetItemType() == ConquerItem.ItemTypes.WingID || Item.Plus == 12 && pos == ConquerItem.Wing || Item.Plus == 12 && pos == ConquerItem.Steed)
{
Item.PlusProgress += Database.DataHolder.StonePlusPoints(ItemPlus.Plus);
Item.PlusProgress -= Database.DataHolder.ComposePlusPoints(Item.Plus);
Item.Mode = MrDesha.Game.Enums.ItemMode.Update;
Item.Send(client);
Database.ConquerItemTable.UpdatePlusProgress(Item);
client.Inventory.Remove(ItemPlus, MrDesha.Game.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 = MrDesha.Game.Enums.ItemMode.Update;
Item.Send(client);
Database.ConquerItemTable.UpdatePlus(Item);
Database.ConquerItemTable.UpdatePlusProgress(Item);
client.Inventory.Remove(ItemPlus, MrDesha.Game.Enums.ItemUse.Remove);
if (Item.Plus >= 7)
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.Values);
}
break;
}
case Compose.NewSteed:
{
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 = MrDesha.Game.Enums.ItemMode.Update;
Item.Send(client);
Database.ConquerItemTable.UpdatePlus(Item);
client.Inventory.Remove(ItemPlus, MrDesha.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 = MrDesha.Game.Enums.ItemMode.Update;
Item.Send(client);
Database.ConquerItemTable.UpdatePlusProgress(Item);
Database.ConquerItemTable.UpdateSocketProgress(Item);
// Database.ConquerItemTable.UpdateNextSteedColor(Item);
client.Inventory.Remove(ItemPlus, MrDesha.Game.Enums.ItemUse.Remove);
break;
}
}
}
}
}
الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1) | |
أدوات الموضوع | |
|