Esempio n. 1
0
        private void OpenWindow(GameClient client, House house, eMerchantWindowType type)
        {
            switch (type)
            {
            case eMerchantWindowType.HousingOutsideShop:
            case eMerchantWindowType.HousingOutsideMenu:
                if (!house.CanChangeGarden(client.Player, DecorationPermissions.Add))
                {
                    return;
                }
                HouseMgr.SendHousingMerchantWindow(client.Player, type);
                break;

            case eMerchantWindowType.HousingDeedMenu:
            case eMerchantWindowType.HousingVaultHookpoint:
            case eMerchantWindowType.HousingCraftingHookpoint:
            case eMerchantWindowType.HousingBindstoneHookpoint:
            case eMerchantWindowType.HousingNPCHookpoint:
            case eMerchantWindowType.HousingInsideShop:
            case eMerchantWindowType.HousingInsideMenu:
                if (!house.CanChangeInterior(client.Player, DecorationPermissions.Add))
                {
                    return;
                }
                HouseMgr.SendHousingMerchantWindow(client.Player, type);
                break;

            case (eMerchantWindowType)0xFF:
                house.SendHouseInfo(client.Player);
                break;
            }
        }
Esempio n. 2
0
		public static void SendHousingMerchantWindow(GamePlayer player, eMerchantWindowType merchantType)
		{
			GameServer.ServerRules.SendHousingMerchantWindow(player, merchantType);
		}
Esempio n. 3
0
		public static void BuyHousingItem(GamePlayer player, ushort slot, byte count, eMerchantWindowType merchantType)
		{
			GameServer.ServerRules.BuyHousingItem(player, slot, count, merchantType);
		}
Esempio n. 4
0
 public void SendMerchantWindow(MerchantTradeItems itemlist, eMerchantWindowType windowType)
 {
 }
Esempio n. 5
0
        /// <summary>
        /// 1125d+ Merchant window
        /// </summary>
        public override void SendMerchantWindow(MerchantTradeItems tradeItemsList, eMerchantWindowType windowType)
        {
            if (tradeItemsList != null)
            {
                for (byte page = 0; page < MerchantTradeItems.MAX_PAGES_IN_TRADEWINDOWS; page++)
                {
                    IDictionary itemsInPage = tradeItemsList.GetItemsInPage((int)page);
                    if (itemsInPage == null || itemsInPage.Count == 0)
                    {
                        continue;
                    }

                    using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.MerchantWindow)))
                    {
                        pak.WriteByte((byte)itemsInPage.Count);            //Item count on this page
                        pak.WriteByte((byte)windowType);
                        pak.WriteByte((byte)page);                         //Page number
                        //pak.WriteByte(0x00); //Unused // testing

                        for (ushort i = 0; i < MerchantTradeItems.MAX_ITEM_IN_TRADEWINDOWS; i++)
                        {
                            if (!itemsInPage.Contains((int)i))
                            {
                                continue;
                            }

                            var item = (ItemTemplate)itemsInPage[(int)i];
                            if (item != null)
                            {
                                pak.WriteByte((byte)i);                                 //Item index on page
                                pak.WriteByte((byte)item.Level);
                                // some objects use this for count
                                int value1;
                                int value2;
                                switch (item.Object_Type)
                                {
                                case (int)eObjectType.Arrow:
                                case (int)eObjectType.Bolt:
                                case (int)eObjectType.Poison:
                                case (int)eObjectType.GenericItem:
                                {
                                    value1 = item.PackSize;
                                    value2 = value1 * item.Weight;
                                    break;
                                }

                                case (int)eObjectType.Thrown:
                                {
                                    value1 = item.DPS_AF;
                                    value2 = item.PackSize;
                                    break;
                                }

                                case (int)eObjectType.Shield:
                                {
                                    value1 = item.Type_Damage;
                                    value2 = item.Weight;
                                    break;
                                }

                                case (int)eObjectType.GardenObject:
                                {
                                    value1 = 0;
                                    value2 = item.Weight;
                                    break;
                                }

                                default:
                                {
                                    value1 = item.DPS_AF;
                                    value2 = item.Weight;
                                    break;
                                }
                                }
                                pak.WriteByte((byte)value1);
                                pak.WriteByte((byte)item.SPD_ABS);
                                if (item.Object_Type == (int)eObjectType.GardenObject)
                                {
                                    pak.WriteByte((byte)(item.DPS_AF));
                                }
                                else
                                {
                                    pak.WriteByte((byte)(item.Hand << 6));
                                }

                                pak.WriteByte((byte)((item.Type_Damage << 6) | item.Object_Type));
                                //1 if item cannot be used by your class (greyed out)
                                if (m_gameClient.Player != null && m_gameClient.Player.HasAbilityToUseItem(item))
                                {
                                    pak.WriteByte(0x01);                                     // these maybe switched in 1125 earlier revs
                                }
                                else
                                {
                                    pak.WriteByte(0x00);                                     // these maybe switched in 1125 earlier revs
                                }

                                pak.WriteShortLowEndian((ushort)value2);
                                pak.WriteIntLowEndian((uint)item.Price);
                                pak.WriteShortLowEndian((ushort)item.Model);
                                pak.WritePascalStringIntLE(item.Name);
                            }
                            else
                            {
                                if (log.IsErrorEnabled)
                                {
                                    log.Error("Merchant item template '" +
                                              ((MerchantItem)itemsInPage[page * MerchantTradeItems.MAX_ITEM_IN_TRADEWINDOWS + i]).ItemTemplateID +
                                              "' not found, abort!!!");
                                }

                                return;
                            }
                        }
                        SendTCP(pak);
                    }
                }
            }
            else
            {
                using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.MerchantWindow)))
                {
                    pak.WriteByte(0);                     //Item count on this page
                    pak.WriteByte((byte)windowType);      //Unknown 0x00
                    pak.WriteByte(0);                     //Page number
                    pak.WriteByte(0x00);                  //Unused
                    SendTCP(pak);
                }
            }
        }
Esempio n. 6
0
		public virtual void SendMerchantWindow(MerchantTradeItems tradeItemsList, eMerchantWindowType windowType)
		{
			GSTCPPacketOut pak;

			if (tradeItemsList != null)
			{
				for (int page = 0; page < MerchantTradeItems.MAX_PAGES_IN_TRADEWINDOWS; page++)
				{
					IDictionary itemsInPage = tradeItemsList.GetItemsInPage(page);
					if (itemsInPage == null || itemsInPage.Count == 0)
						continue;

					using (pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.MerchantWindow)))
					{
						pak.WriteByte((byte) itemsInPage.Count); //Item count on this page
						pak.WriteByte((byte) windowType);
						pak.WriteByte((byte) page); //Page number
						pak.WriteByte(0x00); //Unused

						for (int i = 0; i < MerchantTradeItems.MAX_ITEM_IN_TRADEWINDOWS; i++)
						{
							if (!itemsInPage.Contains(i))
								continue;

							var item = (ItemTemplate) itemsInPage[i];
							if (item != null)
							{
								pak.WriteByte((byte) i); //Item index on page
								pak.WriteByte((byte) item.Level);
								// some objects use this for count
								int value1;
								int value2;
								switch (item.Object_Type)
								{
									case (int) eObjectType.Arrow:
									case (int) eObjectType.Bolt:
									case (int) eObjectType.Poison:
									case (int) eObjectType.GenericItem:
										{
											value1 = item.PackSize;
											value2 = value1*item.Weight;
											break;
										}
									case (int) eObjectType.Thrown:
										{
											value1 = item.DPS_AF;
											value2 = item.PackSize;
											break;
										}
									case (int) eObjectType.Shield:
										{
											value1 = item.Type_Damage;
											value2 = item.Weight;
											break;
										}
									case (int) eObjectType.GardenObject:
										{
											value1 = 0;
											value2 = item.Weight;
											break;
										}
									default:
										{
											value1 = item.DPS_AF;
											value2 = item.Weight;
											break;
										}
								}
								pak.WriteByte((byte) value1);
								pak.WriteByte((byte) item.SPD_ABS);
								if (item.Object_Type == (int) eObjectType.GardenObject)
									pak.WriteByte((byte) (item.DPS_AF));
								else
									pak.WriteByte((byte) (item.Hand << 6));
								pak.WriteByte((byte) ((item.Type_Damage << 6) | item.Object_Type));
								//1 if item cannot be used by your class (greyed out)
								if (m_gameClient.Player != null && m_gameClient.Player.HasAbilityToUseItem(item))
									pak.WriteByte(0x00);
								else
									pak.WriteByte(0x01);
								pak.WriteShort((ushort) value2);
								//Item Price
								pak.WriteInt((uint) item.Price);
								pak.WriteShort((ushort) item.Model);
								pak.WritePascalString(item.Name);
							}
							else
							{
								if (log.IsErrorEnabled)
									log.Error("Merchant item template '" +
									          ((MerchantItem) itemsInPage[page*MerchantTradeItems.MAX_ITEM_IN_TRADEWINDOWS + i]).ItemTemplateID +
									          "' not found, abort!!!");
								return;
							}
						}
						SendTCP(pak);
					}
				}
			}
			else
			{
				using (pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.MerchantWindow)))
				{
					pak.WriteByte(0); //Item count on this page
					pak.WriteByte((byte) windowType); //Unknown 0x00
					pak.WriteByte(0); //Page number
					pak.WriteByte(0x00); //Unused
					SendTCP(pak);
				}
			}
		}
Esempio n. 7
0
 public static void BuyHousingItem(GamePlayer player, ushort slot, byte count, eMerchantWindowType merchantType)
 {
     GameServer.ServerRules.BuyHousingItem(player, slot, count, merchantType);
 }
Esempio n. 8
0
 public static void SendHousingMerchantWindow(GamePlayer player, eMerchantWindowType merchantType)
 {
     GameServer.ServerRules.SendHousingMerchantWindow(player, merchantType);
 }
		public void SendMerchantWindow(MerchantTradeItems itemlist, eMerchantWindowType windowType) { }
Esempio n. 10
0
		public void SendMerchantWindow(MerchantTradeItems itemlist, eMerchantWindowType windowType)
		{
			if (SendMerchantWindowMethod != null) SendMerchantWindowMethod(this, itemlist, windowType);
		}