public void processUnmountItem(ref byte[] rpcData) { byte sourceSlot = rpcData[0]; byte destSlot = rpcData[1]; UInt32 clothingItemId = Store.dbManager.WorldDbHandler.GetItemGOIDAtInventorySlot(rpcData[0]); DataLoader dataLoader = DataLoader.getInstance(); ClothingItem item = dataLoader.getItemValues(clothingItemId); // Update Appeareance as we know which appeareance to update (as we unmount item it should be ok to set zeros for the values) string partModel = null; string partColor = null; switch (item.getClothesType()) { case "1950892361": case "FEMALE HAT": case "MALE HAT": partModel = "hat"; break; case "2001027401": case "FEMALE GLASSES": case "MALE GLASSES": partModel = "glasses"; partColor = "glassescolor"; break; case "1750286665": // New Way but lets stay old values there case "FEMALE SHIRT": case "MALE SHIRT": partModel = "shirt"; partColor = "shirtcolor"; break; case "1816609097": case "FEMALE GLOVES": case "MALE GLOVES": partModel = "gloves"; break; case "2001682761": case "FEMALE COAT": case "MALE COAT": partModel = "coat"; partColor = "coatcolor"; break; case "1397768521": case "MALE PANTS": case "FEMALE PANTS": partModel = "pants"; partColor = "pantscolor"; break; case "1733050697": case "FEMALE LEGGINGS": partModel = "leggins"; break; case "2001092937": case "FEMALE SHOES": case "MALE SHOES": partModel = "shoes"; partColor = "shoecolor"; break; } if (partModel != null) { Store.dbManager.WorldDbHandler.updateRsiPartValue(partModel, 0); } if (partColor != null && item.getColorId() > 0) { Store.dbManager.WorldDbHandler.updateRsiPartValue(partColor, 0); } // Move slot UInt16 newSlotId = Store.dbManager.WorldDbHandler.getFirstNewSlot(); Store.dbManager.WorldDbHandler.updateInventorySlot(sourceSlot, newSlotId); // Send move packet ServerPackets pak = new ServerPackets(); pak.sendInventoryItemMove(sourceSlot, newSlotId, Store.currentClient); Store.dbManager.WorldDbHandler.setRsiValues(); int[] current = Store.currentClient.playerData.getRsiValues(); Store.currentClient.playerData.setRsiValues(current); byte[] rsiData = PacketsUtils.getRSIBytes(current); pak.sendAppeareanceUpdate(Store.currentClient, rsiData); }
public void processMountItem(ref byte[] rpcData) { byte sourceSlot = rpcData[0]; byte destSlot = rpcData[1]; UInt32 clothingItemId = Store.dbManager.WorldDbHandler.GetItemGOIDAtInventorySlot(rpcData[0]); DataLoader dataLoader = DataLoader.getInstance(); ClothingItem item = dataLoader.getItemValues(clothingItemId); string partModel = null; string partColor = null; UInt16 toRealSlotId = 0; switch (item.getClothesType()) { case "1950892361": case "FEMALE HAT": case "MALE HAT": toRealSlotId = 0x61; partModel = "hat"; break; case "2001027401": case "FEMALE GLASSES": case "MALE GLASSES": toRealSlotId = 0x62; partModel = "glasses"; partColor = "glassescolor"; break; case "1750286665": // New Way but lets stay old values there case "FEMALE SHIRT": case "MALE SHIRT": toRealSlotId = 0x63; partModel = "shirt"; partColor = "shirtcolor"; break; case "1816609097": case "FEMALE GLOVES": case "MALE GLOVES": toRealSlotId = 0x64; partModel = "gloves"; break; case "2001682761": case "FEMALE COAT": case "MALE COAT": toRealSlotId = 0x65; partModel = "coat"; partColor = "coatcolor"; break; case "1397768521": case "MALE PANTS": case "FEMALE PANTS": toRealSlotId = 0x66; partModel = "pants"; partColor = "pantscolor"; break; case "1733050697": case "FEMALE LEGGINGS": toRealSlotId = 0x67; partModel = "leggins"; break; case "2001092937": case "FEMALE SHOES": case "MALE SHOES": toRealSlotId = 0x68; partModel = "shoes"; partColor = "shoecolor"; break; } if (partModel != null) { Store.dbManager.WorldDbHandler.updateRsiPartValue(partModel, item.getModelId()); } if (partColor != null) { Store.dbManager.WorldDbHandler.updateRsiPartValue(partColor, item.getColorId()); } Store.dbManager.WorldDbHandler.setRsiValues(); int[] current = Store.currentClient.playerData.getRsiValues(); Store.currentClient.playerData.setRsiValues(current); byte[] rsiData = PacketsUtils.getRSIBytes(current); // Move the wear item from the wearing slot to the next new slot (but maybe doesnt work if inventory is full) ServerPackets pak = new ServerPackets(); if (Store.dbManager.WorldDbHandler.isSlotinUseByItem(toRealSlotId)) { UInt16 newSlotId = Store.dbManager.WorldDbHandler.getFirstNewSlot(); Store.dbManager.WorldDbHandler.updateInventorySlot(toRealSlotId, newSlotId); pak.sendInventoryItemMove(toRealSlotId, newSlotId, Store.currentClient); } pak.sendAppeareanceUpdate(Store.currentClient, rsiData); Store.dbManager.WorldDbHandler.updateInventorySlot(sourceSlot, toRealSlotId); pak.sendInventoryItemMove(sourceSlot, toRealSlotId, Store.currentClient); }