Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static Positions GetPositionFromID(UInt32 itemid)
- {
- UInt32 iType = itemid / 1000;
- if (iType == 617)
- return Positions.Right;
- if (iType == 148)
- return Positions.Head;
- if (iType == 614)
- return Positions.Right;
- if (iType == 615 || iType == 616)
- return Positions.Right;
- if (iType == 619)
- return Positions.Left;
- if (iType == 622)
- return Positions.Right;
- if (iType >= 111 && iType <= 118 || iType == 123 || iType >= 141 && iType <= 148)
- return Positions.Head;
- else if (iType >= 120 && iType <= 121)
- return Positions.Necklace;
- else if (iType >= 130 && iType <= 139)
- return Positions.Armor;
- else if (iType >= 150 && iType <= 152)
- return Positions.Ring;
- else if (iType == 160)
- return Positions.Boots;
- else if (iType >= 181 && iType <= 194)
- return Positions.Garment;
- else if (iType == 201)
- return Positions.AttackTalisman;
- else if (iType == 202)
- return Positions.DefenceTalisman;
- else if (iType == 203)
- return Positions.SteedTalisman;
- else if (iType == 200)
- return Positions.SteedArmor;
- else if (iType == 300)
- return Positions.Steed;
- else if (iType == 2100)
- return Positions.Bottle;
- else if (iType == 1050 || iType == 900 || iType == 619)
- return Positions.Left;
- else if ((iType >= 410 && iType <= 490) || (iType >= 500 && iType <= 580) || (iType >= 601 && iType <= 613) || (iType >= 616 && iType <= 617 || (iType >= 619 && iType <= 620)) || (iType == 622) || (iType == 624))
- return Positions.Right;
- else if (iType >= 350 && iType <= 370)
- return Positions.RightAccessory;
- else if (iType == 380)
- return Positions.LeftAccessory;
- else if (iType >= 204 && iType <= 205)
- return Positions.Wing;
- else return (Positions)0;
- }
- public static ushort ItemPosition(uint ID)
- {
- UInt32 iType = ID / 1000;
- if (iType == 617)
- return ConquerItem.RightWeapon;
- if (iType == 148)
- return ConquerItem.Head;
- if (iType == 619)
- return ConquerItem.LeftWeapon;
- if (iType == 614)
- return ConquerItem.RightWeapon;
- if (iType == 620)
- return ConquerItem.RightWeapon;
- if (iType == 622)
- return ConquerItem.RightWeapon;
- if (iType == 615 || iType == 616)
- return ConquerItem.RightWeapon;
- else if ((ID >= 111003 && ID <= 118309) || (ID >= 123000 && ID <= 123309) || (ID >= 141003 && ID <= 144309 || ID >= 145000 && ID <= 145309))
- return ConquerItem.Head;
- else if (ID >= 120001 && ID <= 121269)
- return ConquerItem.Necklace;
- else if (ID >= 130003 && ID <= 139309)
- return ConquerItem.Armor;
- else if (ID >= 150000 && ID <= 152279)
- return ConquerItem.Ring;
- else if (ID >= 160013 && ID <= 160249)
- return ConquerItem.Boots;
- else if (ID >= 181305 && ID <= 194300)
- return ConquerItem.Garment;
- else if (ID >= 201003 && ID <= 201009)
- return ConquerItem.Fan;
- else if (ID >= 202003 && ID <= 202009)
- return ConquerItem.Tower;
- else if (ID >= 203003 && ID <= 203009)
- return ConquerItem.SteedCrop;
- else if (ID == 300000)
- return ConquerItem.Steed;
- else if (ID >= 204005 && ID <= 204009)
- return ConquerItem.SteedWing;
- else if ((ID >= 0x64193) && (ID <= 613429) || (ID >= 614000) && (ID <= 614439) || (ID >= 614000) && (ID <= 614439) || (ID >= 616000) && (ID <= 616439) || (ID >= 617000) && (ID <= 617439) || (ID >= 620000) && (ID <= 620439) || (ID >= 622000) && (ID <= 622439) || (ID >= 624000) && (ID <= 624439))
- return ConquerItem.RightWeapon;
- else if ((ID >= 900000 && ID <= 900309) || (ID >= 1050000 && ID <= 1051000) || (ID >= 619000 && ID <= 619439))
- return ConquerItem.LeftWeapon;
- else if (ID >= 2100005 && ID <= 2100125)
- return ConquerItem.Bottle;
- else if (ID >= 350001 && ID <= 380015)
- return ConquerItem.LeftWeaponAccessory;
- else if (ID >= 350001 && ID <= 380015)
- return ConquerItem.RightWeaponAccessory;
- else if (iType == 200)
- return ConquerItem.SteedArmor;
- return 0;
- }
- public static Positions ItemPositionFromID(uint itemid)
- {
- UInt32 iType = itemid / 1000;
- if (iType >= 111 && iType <= 118 || iType == 123 || iType >= 141 && iType <= 143 || iType == 145)
- return Positions.Head;
- else if (iType >= 120 && iType <= 121)
- return Positions.Necklace;
- else if (iType >= 130 && iType <= 137)
- return Positions.Armor;
- else if (iType >= 150 && iType <= 152)
- return Positions.Ring;
- else if (iType == 160)
- return Positions.Boots;
- else if (iType >= 181 && iType <= 194)
- return Positions.Garment;
- else if (iType == 201)
- return Positions.AttackTalisman;
- else if (iType == 202)
- return Positions.DefenceTalisman;
- else if (iType == 203)
- return Positions.SteedTalisman;
- else if (iType == 200)
- return Positions.SteedArmor;
- else if (iType == 204)
- return Positions.Wing;
- else if (iType == 300)
- return Positions.Steed;
- else if (iType == 2100)
- return Positions.Bottle;
- else if (iType == 1050 || iType == 900)
- return Positions.Left;
- else if ((iType >= 410 && iType <= 490) || (iType >= 500 && iType <= 580) || (iType >= 601 && iType <= 613) || (iType >= 616 && iType <= 617 || (iType >= 619 && iType <= 620)) || (iType == 622) || (iType == 624))
- return Positions.Right;
- else if (iType >= 350 && iType <= 370)
- return Positions.RightAccessory;
- else if (iType == 380)
- return Positions.LeftAccessory;
- else return (Positions)0;
- }
- public static void EquipItem(ItemUsage itemUsage, GameState client)
- {
- ConquerItem item = null;
- client.Player.AttackPacket = null;
- if (client.Inventory.TryGetItem(itemUsage.UID, out item) && client.Booth == null)
- {
- if (item.ID / 1000 >= 600)
- {
- if (itemUsage.dwParam == 4)
- {
- if (!client.Equipment.Free(5))
- {
- if (item.ID / 1000 != client.Equipment.TryGetItem(5).ID / 1000)
- {
- return;
- }
- }
- }
- }
- if (item.Suspicious) return;
- Positions pos = GetPositionFromID(item.ID);
- if (pos == Positions.Inventory)
- {
- UseItem(item, client); return;
- }
- if (ItemPosition(item.ID) == ConquerItem.Garment)
- if (client.Player.Tournament_Signed) return;
- #region Sanity checks
- bool can2hand = false;
- bool can2wpn = false;
- if (client.Player.Class >= 20 && client.Player.Class <= 25)
- {
- if (WarriorEpic(item.ID))
- can2hand = true;
- can2wpn = true;
- }
- uint dwExtra = 0;
- if (itemUsage.dwParam > 20)
- dwExtra = 20;
- if (client.Player.Class >= 11 && client.Player.Class <= 75)
- can2hand = true;
- if (client.Player.Class >= 11 && client.Player.Class <= 15 || client.Player.Class >= 51 && client.Player.Class <= 55 || client.Player.Class >= 61 && client.Player.Class <= 65 || client.Player.Class >= 71 && client.Player.Class <= 75)
- can2wpn = true;
- if (client.Player.Class >= 71 && client.Player.Class <= 75 || client.Player.Class >= 41 && client.Player.Class <= 45)
- can2wpn = true;
- if (client.Player.Class >= 50 && client.Player.Class <= 55)
- {
- can2hand = true;
- can2wpn = true;
- }
- if (client.Player.Class >= 130 && client.Player.Class <= 135 || client.Player.Class >= 140 && client.Player.Class <= 145)
- {
- can2hand = true;
- can2wpn = true;
- }
- if (client.Player.Class >= 80 && client.Player.Class <= 85)
- {
- can2hand = true;
- can2wpn = true;
- }
- if (!Equipable(item, client))
- return;
- if (ItemPosition(item.ID) == 5)
- {
- itemUsage.dwParam = 5 + dwExtra;
- if (!can2hand && !can2wpn)
- return;
- if (client.Equipment.Free(4 + dwExtra) || (client.Equipment.TryGetItem(4 + dwExtra).ID / 1000 != 500 && IsArrow(item.ID)))
- return;
- }
- if (ItemPosition(item.ID) == 4)
- {
- if (itemUsage.dwParam == 5 + dwExtra)
- if (!can2hand || !can2wpn)
- return;
- }
- if (!((itemUsage.dwParam == 4 + dwExtra || itemUsage.dwParam == 5 + dwExtra) && (ItemPosition(item.ID) == 4 || ItemPosition(item.ID) == 5)))
- {
- if (!IsAccessory(item.ID))
- itemUsage.dwParam = ItemPosition(item.ID) + dwExtra;
- }
- #region Hossu
- if (client.Player.Class >= 130 && client.Player.Class <= 135 || client.Player.Class >= 140 && client.Player.Class <= 145)
- {
- if ((itemUsage.dwParam - dwExtra) == 5)
- {
- if ((item.ID / 1000) == 421 || (item.ID / 1000) == 620) return;
- var rItem = client.Equipment.TryGetItem((byte)(4 + dwExtra));
- if (rItem != null)
- {
- if (item.ID / 1000 == 619)
- {
- if ((rItem.ID / 1000) != 421 && (rItem.ID / 1000) != 620)
- return;
- }
- else return;
- }
- }
- if ((itemUsage.dwParam - dwExtra) == 4)
- {
- var rItem = client.Equipment.TryGetItem((byte)(5 + dwExtra));
- if (rItem != null)
- {
- if (rItem.ID / 1000 == 619)
- {
- if ((item.ID / 1000) != 421 && (item.ID / 1000) != 620) return;
- }
- }
- }
- }
- #endregion
- bool twohand = IsTwoHand(item.ID);
- if (!twohand && itemUsage.dwParam == 4 + dwExtra)
- {
- if (!client.Equipment.Free((byte)(5 + dwExtra)))
- {
- if (client.Inventory.Count < 40)
- {
- if (IsArrow(client.Equipment.TryGetItem((byte)(5 + dwExtra)).ID))
- client.Equipment.Remove((byte)(5 + dwExtra));
- else
- {
- if (client.Equipment.TryGetItem((byte)(4 + dwExtra)) != null)
- {
- if (IsTwoHand(client.Equipment.TryGetItem((byte)(4 + dwExtra)).ID))
- client.Equipment.Remove((byte)(4 + dwExtra));
- }
- }
- }
- }
- }
- if ((itemUsage.dwParam - dwExtra) == 5)
- {
- if ((item.ID / 1000) == 421 || IsTwoHand(item.ID))
- return;
- var rItem = client.Equipment.TryGetItem((byte)(4 + dwExtra));
- if (rItem != null)
- {
- if (rItem.IsTwoHander())
- {
- if (IsArrow(item.ID))
- {
- if (rItem.ID / 1000 != 500) return;
- }
- else
- {
- if (IsShield(item.ID))
- {
- if ((rItem.ID / 1000) == 421) return;
- if (!client.Spells.ContainsKey(10311) && client.Player.FirstRebornClass == 25 && client.Player.SecondRebornClass == 25)//Perseverance
- {
- client.Send("You need to know Perseverance (Warrior Pure skill) to be able to wear 2-handed weapon and shield.");
- return;
- }
- }
- else if (item.ID / 1000 == 619)
- {
- if ((rItem.ID / 1000) != 421 && (rItem.ID / 1000) != 620)
- return;
- }
- else
- itemUsage.dwParam = 4 + dwExtra;
- }
- }
- }
- }
- if (itemUsage.dwParam == 4 + dwExtra)
- if (client.Player.ContainsFlag((ulong)MsgUpdate.Flags.Fly))
- if (item.ID / 1000 != 500)
- return;
- if (!((client.Player.Class >= 50 && client.Player.Class <= 55)))
- if ((item.ID / 1000) == 601)
- if ((itemUsage.dwParam - dwExtra) == 5)
- return;
- #endregion
- if (client.Player.ContainsFlag3((ulong)MsgUpdate.Flags3.PathOfShadow))
- if (item.ID / 1000 != 613) return;
- if (client.Map.ID == 1039)
- client.Player.AttackPacket = null;
- item.Position = (ushort)itemUsage.dwParam;
- if (ItemPosition(item.ID) == 5 && !IsArrow(item.ID))
- {
- if (IsTwoHand(client.Equipment.TryGetItem((byte)(4 + dwExtra)).ID))
- {
- if (!client.Spells.ContainsKey(10311))
- {
- client.Send("You need to know Perseverance (Warrior Pure skill) to be able to wear 2-handed weapon and shield.");
- return;
- }
- }
- }
- uint itemType = item.ID / 1000;
- if (itemType == 421)
- {
- if (item.Position == 5 + dwExtra)
- {
- item.Position = 0; return;
- }
- }
- if (itemType == 900)
- {
- if (!(client.Player.Class >= 20 && client.Player.Class <= 25))
- {
- item.Position = 0; return;
- }
- }
- client.Inventory.Remove(item, Enums.ItemUse.Move, true);
- if (client.Equipment.Free((byte)itemUsage.dwParam))
- {
- if (twohand)
- client.Equipment.Remove((byte)(5 + dwExtra));
- item.Position = (byte)itemUsage.dwParam;
- client.Equipment.Add(item);
- item.Mode = Enums.ItemMode.Update;
- item.Send(client);
- }
- else
- {
- if (twohand)
- client.Equipment.Remove((byte)(5 + dwExtra));
- if (IsBow(client.Equipment.TryGetItem((byte)itemUsage.dwParam).ID))
- {
- client.Player.RemoveFlag((ulong)MsgUpdate.Flags.Fly);
- }
- client.Equipment.Remove((byte)itemUsage.dwParam);
- item.Position = (byte)itemUsage.dwParam;
- client.Equipment.Add(item);
- }
- var iu = new ItemUsage(true);
- iu.ID = ItemUsage.Mode.Unknown5;
- iu.UID = itemUsage.UID;
- iu.dwParam = itemUsage.dwParam;
- client.Send(iu.ToArray());
- client.CalculateStatBonus();
- client.CalculateHPBonus();
- client.LoadItemStats();
- ClientEquip equips = new ClientEquip();
- equips.DoEquips(client);
- client.Send(equips.ToArray());
- Database.ConquerItemTable.UpdateLocation(item, client);
- client.Equipment.UpdateEntityPacket();
- MsgPlayerAttriInfo Stats = new MsgPlayerAttriInfo(client);
- client.Send(Stats.ToArray());
- if (client.Team != null)
- {
- client.Team.GetClanShareBp(client);
- }
- new MsgUserTotalRefineLev().Send(client);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement