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; } }
public static void SendHousingMerchantWindow(GamePlayer player, eMerchantWindowType merchantType) { GameServer.ServerRules.SendHousingMerchantWindow(player, merchantType); }
public static void BuyHousingItem(GamePlayer player, ushort slot, byte count, eMerchantWindowType merchantType) { GameServer.ServerRules.BuyHousingItem(player, slot, count, merchantType); }
public void SendMerchantWindow(MerchantTradeItems itemlist, eMerchantWindowType windowType) { }
/// <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); } } }
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); } } }
public void SendMerchantWindow(MerchantTradeItems itemlist, eMerchantWindowType windowType) { if (SendMerchantWindowMethod != null) SendMerchantWindowMethod(this, itemlist, windowType); }