public override void Handle(NecClient client, NecPacket packet) { ItemZoneType fromZone = (ItemZoneType)packet.data.ReadByte(); byte fromContainer = packet.data.ReadByte(); short fromSlot = packet.data.ReadInt16(); short toSlot = packet.data.ReadInt16(); byte quantity = packet.data.ReadByte(); ItemLocation fromLoc = new ItemLocation(fromZone, fromContainer, fromSlot); ItemService itemService = new ItemService(client.character); _itemInstance = itemService.GetIdentifiedItem(fromLoc); //To do; get regular item instead of identified item. Mark item as in trade. client.character.tradeWindowSlot[toSlot] = _itemInstance.instanceId; ItemLocation originalLocation = _itemInstance.location; _itemInstance.location = new ItemLocation(ItemZoneType.TradeWindow, 0, toSlot); //This is bad. it changes the stored location? NecClient targetClient = server.clients.GetByCharacterInstanceId((uint)client.character.eventSelectExecCode); IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); // error check? router.Send(client, (ushort)AreaPacketId.recv_trade_add_item_r, res, ServerType.Area); if (targetClient != null) { RecvItemInstance itemInstance = new RecvItemInstance(targetClient, _itemInstance); router.Send(itemInstance); } _itemInstance.location = originalLocation; }
public ItemLocation(ItemZoneType zoneType, byte container, short slot) { this.zoneType = zoneType; this.container = container; this.slot = slot; _hashcode = ((int)zoneType << 24) + (container << 16) + slot; }
public override void Handle(NecClient client, NecPacket packet) { ItemZoneType zone = (ItemZoneType)packet.data.ReadByte(); byte bag = packet.data.ReadByte(); short slot = packet.data.ReadInt16(); byte quantity = packet.data.ReadByte(); ItemLocation location = new ItemLocation(zone, bag, slot); ItemService itemService = new ItemService(client.character); int error = 0; try { ItemInstance item = itemService.Remove(location, quantity); RecvItemRemove recvItemRemove = new RecvItemRemove(client, item); router.Send(recvItemRemove); } catch (ItemException e) { error = (int)e.type; } RecvItemDrop recvItemDrop = new RecvItemDrop(client, error); router.Send(recvItemDrop); }
public override void Handle(NecClient client, NecPacket packet) { ItemZoneType zone = (ItemZoneType)packet.data.ReadByte(); byte bag = packet.data.ReadByte(); short slot = packet.data.ReadInt16(); ulong saleGold = packet.data.ReadUInt64(); //irrelevant, check sale price server side byte quantity = packet.data.ReadByte(); ItemLocation location = new ItemLocation(zone, bag, slot); ItemService itemService = new ItemService(client.character); int error = 0; try { //ulong currentGold = itemService.Sell(location, quantity); ulong currentGold = itemService.AddGold(saleGold); RecvSelfMoneyNotify recvSelfMoneyNotify = new RecvSelfMoneyNotify(client, currentGold); router.Send(recvSelfMoneyNotify); ItemInstance itemInstance = itemService.Remove(new ItemLocation(zone, bag, slot), quantity); RecvItemRemove recvItemRemove = new RecvItemRemove(client, itemInstance); router.Send(recvItemRemove); } catch (ItemException e) { error = (int)e.type; } RecvShopSell recvShopSell = new RecvShopSell(client, error); router.Send(recvShopSell); }
public override void Handle(NecClient client, NecPacket packet) { ItemZoneType zone = (ItemZoneType)packet.data.ReadByte(); byte bag = packet.data.ReadByte(); short slot = packet.data.ReadInt16(); ulong saleGold = packet.data.ReadUInt64(); //irrelevant, check sale price server side byte quantity = packet.data.ReadByte(); //TODO ItemService itemService = new ItemService(client.character); ItemInstance itemInstance = itemService.GetIdentifiedItem(new ItemLocation(zone, bag, slot)); IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); router.Send(client, (ushort)AreaPacketId.recv_shop_sell_check_r, res, ServerType.Area); res = BufferProvider.Provide(); res.WriteUInt64(itemInstance.instanceId); // id? res.WriteInt64(Util.GetRandomNumber(1000, 25000)); // price? res.WriteInt64(Util.GetRandomNumber(100, 2500)); // identify? res.WriteInt64(Util.GetRandomNumber(100, 2500)); // curse? res.WriteInt64(Util.GetRandomNumber(1000, 2500)); // repair? router.Send(client, (ushort)AreaPacketId.recv_shop_notify_item_sell_price, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { ItemZoneType zone = (ItemZoneType)packet.data.ReadByte(); byte bag = packet.data.ReadByte(); short slot = packet.data.ReadInt16(); //9 bytes left TODO investigate, probably one is identify price which is irrelevant, check price server side ItemLocation location = new ItemLocation(zone, bag, slot); ItemService itemService = new ItemService(client.character); ItemInstance identifiedItem; int error = 0; try { identifiedItem = itemService.GetIdentifiedItem(location); RecvItemInstance recvItemInstance = new RecvItemInstance(client, identifiedItem); router.Send(recvItemInstance); identifiedItem.currentDurability = identifiedItem.maximumDurability; RecvItemUpdateDurability recvItemUpdateDurability = new RecvItemUpdateDurability(client, identifiedItem); router.Send(recvItemUpdateDurability); } catch (ItemException e) { error = (int)e.type; } RecvShopIdentify recvShopIdentify = new RecvShopIdentify(client, error); router.Send(recvShopIdentify); }
public override void Handle(NecClient client, NecPacket packet) { ItemZoneType fromZone = (ItemZoneType)packet.data.ReadByte(); byte fromBag = packet.data.ReadByte(); short fromSlot = packet.data.ReadInt16(); ItemZoneType toZone = (ItemZoneType)packet.data.ReadByte(); byte toBag = packet.data.ReadByte(); short toSlot = packet.data.ReadInt16(); byte quantity = packet.data.ReadByte(); _Logger.Debug($"fromStoreType byte [{fromZone}] toStoreType byte [{toZone}]"); _Logger.Debug($"fromBagId byte [{fromBag}] toBagId byte [{toBag}]"); _Logger.Debug($"fromSlot byte [{fromSlot}] toSlot[{toSlot}]"); _Logger.Debug($"itemCount [{quantity}]"); ItemLocation fromLoc = new ItemLocation(fromZone, fromBag, fromSlot); ItemLocation toLoc = new ItemLocation(toZone, toBag, toSlot); ItemService itemService = new ItemService(client.character); int error = 0; try { MoveResult moveResult = itemService.Move(fromLoc, toLoc, quantity); List <PacketResponse> responses = itemService.GetMoveResponses(client, moveResult); router.Send(client, responses); } catch (ItemException e) { error = (int)e.type; } RecvStorageDrawItem2 recvStorageDrawItem2 = new RecvStorageDrawItem2(client, error); router.Send(recvStorageDrawItem2); }
public ItemLocation[] NextOpenSlots(ItemZoneType itemZoneType, int amount) { if (amount > _zoneMap[itemZoneType].totalFreeSpace) { throw new ArgumentOutOfRangeException("Not enough open slots"); } return(_zoneMap[itemZoneType].GetNextXFreeSpaces(itemZoneType, amount)); }
public ItemInstance SpawnItemInstance(ItemZoneType itemZoneType, int baseId, ItemSpawnParams spawnParam) { int[] itemIds = { baseId }; ItemSpawnParams[] spawmParams = new ItemSpawnParams[1]; spawmParams[0] = spawnParam; List <ItemInstance> items = SpawnItemInstances(itemZoneType, itemIds, spawmParams); return(items[0]); }
public ItemLocation PutItemInNextOpenSlot(ItemZoneType itemZoneType, ItemInstance item) { ItemLocation nextOpenSlot = NextOpenSlot(itemZoneType); if (!nextOpenSlot.Equals(ItemLocation.InvalidLocation)) { PutItem(nextOpenSlot, item); } return(nextOpenSlot); }
public override void Handle(NecClient client, NecPacket packet) { ItemZoneType fromZone = (ItemZoneType)packet.data.ReadByte(); byte fromContainer = packet.data.ReadByte(); short fromSlot = packet.data.ReadInt16(); if (fromZone == ItemZoneType.CorpseAdventureBag) { fromZone = ItemZoneType.AdventureBag; } if (fromZone == ItemZoneType.CorpseEquippedBags) { fromZone = ItemZoneType.EquippedBags; } if (fromZone == ItemZoneType.CorpsePremiumBag) { fromZone = ItemZoneType.PremiumBag; } ItemLocation fromLoc = new ItemLocation(fromZone, fromContainer, fromSlot); //subtract 71 to get from BodyCollection to Adventurer client.map.deadBodies.TryGetValue(client.character.eventSelectReadyCode, out DeadBody deadBody); Character deadCharacter = _server.instances.GetInstance(deadBody.characterInstanceId) as Character; NecClient deadClient = _server.clients.GetByCharacterInstanceId(deadBody.characterInstanceId); if (deadCharacter != null) { deadCharacter.lootNotify = fromLoc; //gotta be able to pass this information to loot_complete2 on successful loot } //Tell your character to start looting the dead body. Updates Pose IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); //result / err check res.WriteInt32(10); //loot time router.Send(client, (ushort)AreaPacketId.recv_charabody_loot_start2_r, res, ServerType.Area); if (deadClient != null) { //Tell the other player that they are getting lootified. res = BufferProvider.Provide(); res.WriteByte((byte)fromZone); res.WriteByte(fromContainer); res.WriteInt16(fromSlot); res.WriteFloat(1); //base loot time res.WriteFloat(10); // loot time res.WriteCString($"{client.soul.name}"); // soul name res.WriteCString($"{client.character.name}"); // chara name router.Send(deadClient, (ushort)AreaPacketId.recv_charabody_notify_loot_start2, res, ServerType.Area); RecvDataNotifyCharaData cData = new RecvDataNotifyCharaData(client.character, client.soul.name); _server.router.Send(deadClient, cData.ToPacket()); } }
public override void Handle(NecClient client, NecPacket packet) { ItemZoneType zoneType = (ItemZoneType)packet.data.ReadInt32(); byte container = packet.data.ReadByte(); int itemsToSort = packet.data.ReadInt32(); _Logger.Debug($"zoneType [{zoneType}] container [{container}] itemCount [{itemsToSort}]"); short[] fromSlots = new short[itemsToSort]; short[] toSlots = new short[itemsToSort]; short[] quantities = new short[itemsToSort]; for (int i = 0; i < itemsToSort; i++) { fromSlots[i] = packet.data.ReadInt16(); toSlots[i] = packet.data.ReadInt16(); quantities[i] = packet.data.ReadInt16(); _Logger.Debug($"fromSlot short [{fromSlots[i]}] toSlot short [{toSlots[i]}] amount [{quantities[i]}]"); } ItemService itemService = new ItemService(client.character); int error = 0; try { for (int i = 0; i < itemsToSort; i++) { ItemLocation fromLoc = new ItemLocation(zoneType, container, fromSlots[i]); ItemLocation toLoc = new ItemLocation(zoneType, container, toSlots[i]); byte quantity = (byte)quantities[i]; MoveResult moveResult = itemService.Move(fromLoc, toLoc, quantity); List <PacketResponse> responses = itemService.GetMoveResponses(client, moveResult); router.Send(client, responses); } } catch (ItemException e) { error = (int)e.type; } catch (Exception e1) { error = (int)ItemExceptionType.Generic; _Logger.Exception(client, e1); } IBuffer res = BufferProvider.Provide(); res.WriteInt32(error); router.Send(client, (ushort)AreaPacketId.recv_item_sort_r, res, ServerType.Area); }
public List <ItemInstance> SpawnItemInstances(ItemZoneType itemZoneType, int[] baseIds, ItemSpawnParams[] spawnParams) { if (_character.itemLocationVerifier.GetTotalFreeSpace(itemZoneType) < baseIds.Length) { throw new ItemException(ItemExceptionType.InventoryFull); } ItemLocation[] nextOpenLocations = _character.itemLocationVerifier.NextOpenSlots(itemZoneType, baseIds.Length); List <ItemInstance> itemInstances = _itemDao.InsertItemInstances(_character.id, nextOpenLocations, baseIds, spawnParams); foreach (ItemInstance item in itemInstances) { _character.itemLocationVerifier.PutItem(item.location, item); } return(itemInstances); }
public ItemLocation NextOpenSlot(ItemZoneType itemZoneType) { int nextContainerWithSpace = _zoneMap[itemZoneType].nextContainerWithSpace; if (nextContainerWithSpace != ItemZone.NO_CONTAINERS_WITH_SPACE) { int nextOpenSlot = _zoneMap[itemZoneType].GetContainer(nextContainerWithSpace).nextOpenSlot; if (nextOpenSlot != Container.NO_OPEN_SLOTS) { ItemLocation itemLocation = new ItemLocation(itemZoneType, (byte)nextContainerWithSpace, (short)nextOpenSlot); return(itemLocation); } } return(ItemLocation.InvalidLocation); }
public override void Handle(NecClient client, NecPacket packet) { ItemZoneType fromZone = (ItemZoneType)packet.data.ReadByte(); byte fromContainer = packet.data.ReadByte(); short fromSlot = packet.data.ReadInt16(); ItemLocation fromLoc = new ItemLocation(fromZone, fromContainer, fromSlot); client.map.deadBodies.TryGetValue(client.character.eventSelectReadyCode, out DeadBody deadBody); Character deadCharacter = _server.instances.GetInstance(deadBody.characterInstanceId) as Character; ItemService itemService = new ItemService(client.character); ItemService deadCharacterItemService = new ItemService(deadCharacter); ItemInstance iteminstance = deadCharacterItemService.GetLootedItem(fromLoc); itemService.PutLootedItem(iteminstance); RecvItemInstanceUnidentified recvItemInstanceUnidentified = new RecvItemInstanceUnidentified(client, iteminstance); router.Send(client, recvItemInstanceUnidentified.ToPacket()); }
public ItemLocation[] GetNextXFreeSpaces(ItemZoneType itemZoneType, int amount) { ItemLocation[] freeSpaces = new ItemLocation[amount]; int index = 0; for (int i = 0; i < maxContainers; i++) { if (containers[i] != null && !containers[i].isFull) { int nextOpenSlot = containers[i].nextOpenSlot; while (index < amount) { freeSpaces[index] = new ItemLocation(itemZoneType, (byte)i, (short)nextOpenSlot); index++; nextOpenSlot = containers[i].GetNextOpenSlot(nextOpenSlot); } } } return(freeSpaces); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); router.Send(client, (ushort)AreaPacketId.recv_union_storage_move_item_r, res, ServerType.Area); byte fromStoreType = packet.data.ReadByte(); byte fromBagId = packet.data.ReadByte(); short fromSlot = packet.data.ReadInt16(); ItemZoneType toZone = (ItemZoneType)packet.data.ReadByte(); byte toBagId = packet.data.ReadByte(); short toSlot = packet.data.ReadInt16(); byte quantity = packet.data.ReadByte(); _Logger.Debug($"fromStoreType byte [{fromStoreType}] toStoreType byte [{toZone}]"); _Logger.Debug($"fromBagId byte [{fromBagId}] toBagIdId byte [{toBagId}]"); _Logger.Debug($"fromSlot byte [{fromSlot}] toSlot [{toSlot}]"); _Logger.Debug($"itemCount [{quantity}]"); ItemLocation fromLoc = new ItemLocation((ItemZoneType)fromStoreType, fromBagId, fromSlot); ItemLocation toLoc = new ItemLocation(toZone, toBagId, toSlot); ItemService itemService = new ItemService(client.character); int error = 0; try { MoveResult moveResult = itemService.Move(fromLoc, toLoc, quantity); List <PacketResponse> responses = itemService.GetMoveResponses(client, moveResult); router.Send(client, responses); } catch (ItemException e) { error = (int)e.type; } RecvUnionStorageMoveItem recvUnionStorageMoveItem = new RecvUnionStorageMoveItem(client, error); router.Send(recvUnionStorageMoveItem); }
public override void Handle(NecClient client, NecPacket packet) { List<ItemLocation> itemLocations = new List<ItemLocation>(); int repairCount = packet.data.ReadInt32(); for (int i = 0; i < repairCount; i++) { ItemZoneType zone = (ItemZoneType)packet.data.ReadByte(); byte bag = packet.data.ReadByte(); short slot = packet.data.ReadInt16(); ItemLocation location = new ItemLocation(zone, bag, slot); itemLocations.Add(location); } ulong repairFee = packet.data.ReadUInt64(); ItemService itemService = new ItemService(client.character); int error = 0; try { ulong currentGold = itemService.SubtractGold(repairFee); //TODO ignore the "repair fee" and check server side RecvSelfMoneyNotify recvSelfMoneyNotify = new RecvSelfMoneyNotify(client, currentGold); router.Send(recvSelfMoneyNotify); List<ItemInstance> repairedItems = itemService.Repair(itemLocations); foreach (ItemInstance repairedItem in repairedItems) { repairedItem.currentDurability = repairedItem.maximumDurability; RecvItemUpdateDurability recvItemUpdateDurability = new RecvItemUpdateDurability(client, repairedItem); router.Send(recvItemUpdateDurability); } } catch (ItemException e) { error = (int)e.type; } RecvShopRepair recvShopRepair = new RecvShopRepair(client, error); router.Send(recvShopRepair); }
public override void Handle(NecClient client, NecPacket packet) { byte exhibitSlot = packet.data.ReadByte(); ItemZoneType zone = (ItemZoneType)packet.data.ReadByte(); byte bag = packet.data.ReadByte(); short slot = packet.data.ReadInt16(); byte quantity = packet.data.ReadByte(); int time = packet.data.ReadInt32(); //0:4hours 1:8 hours 2:12 hours 3:24 hours ulong minBid = packet.data.ReadUInt64(); ulong buyoutPrice = packet.data.ReadUInt64(); string comment = packet.data.ReadCString(); ItemLocation fromLoc = new ItemLocation(zone, bag, slot); ItemService itemService = new ItemService(client.character); ulong instanceId = 0; int auctionError = 0; try { MoveResult moveResult = itemService.Exhibit(fromLoc, exhibitSlot, quantity, time, minBid, buyoutPrice, comment); instanceId = moveResult.destItem.instanceId; List <PacketResponse> responses = itemService.GetMoveResponses(client, moveResult); router.Send(client, responses); } catch (AuctionException e) { auctionError = (int)e.type; } IBuffer res = BufferProvider.Provide(); res.WriteInt32(auctionError); //error check. res.WriteInt32((int)buyoutPrice); //unknown res.WriteUInt64(instanceId); //unknown router.Send(client.map, (ushort)AreaPacketId.recv_auction_exhibit_r, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { ItemZoneType zone = (ItemZoneType)packet.data.ReadByte(); byte bag = packet.data.ReadByte(); short slot = packet.data.ReadInt16(); ItemEquipSlots equipSlot = (ItemEquipSlots)packet.data.ReadInt32(); _Logger.Debug($"storageType:{zone} bagId:{bag} bagSlotIndex:{slot} equipBit:{equipSlot}"); ItemLocation location = new ItemLocation(zone, bag, slot); ItemService itemService = new ItemService(client.character); int error = 0; try { if (equipSlot.HasFlag(ItemEquipSlots.LeftHand | ItemEquipSlots.RightHand)) //two handed weapon replaces 1h weapon and shield { ItemInstance itemRight = itemService.CheckAlreadyEquipped(ItemEquipSlots.RightHand); if (itemRight != null) { itemRight = itemService.Unequip(itemRight.currentEquipSlot); itemRight.currentEquipSlot = ItemEquipSlots.None; RecvItemUpdateEqMask recvItemUpdateEqMaskCurr = new RecvItemUpdateEqMask(client, itemRight); router.Send(recvItemUpdateEqMaskCurr, client); } ItemInstance itemLeft = itemService.CheckAlreadyEquipped(ItemEquipSlots.LeftHand); if (itemLeft != null) { itemLeft = itemService.Unequip(itemLeft.currentEquipSlot); itemLeft.currentEquipSlot = ItemEquipSlots.None; RecvItemUpdateEqMask recvItemUpdateEqMaskCurr = new RecvItemUpdateEqMask(client, itemLeft); router.Send(recvItemUpdateEqMaskCurr, client); } } else //everything else besides 2h weapons. { //update the equipment array ItemInstance equippedItem = itemService.CheckAlreadyEquipped(equipSlot); if (equippedItem != null) { equippedItem = itemService.Unequip(equippedItem.currentEquipSlot); equippedItem.currentEquipSlot = ItemEquipSlots.None; RecvItemUpdateEqMask recvItemUpdateEqMaskCurr = new RecvItemUpdateEqMask(client, equippedItem); router.Send(recvItemUpdateEqMaskCurr, client); } } //update the equipment array ItemInstance newEquippedItem = itemService.Equip(location, equipSlot); //Tell the client to move the icons to equipment slots RecvItemUpdateEqMask recvItemUpdateEqMask = new RecvItemUpdateEqMask(client, newEquippedItem); router.Send(client, recvItemUpdateEqMask.ToPacket()); //notify other players of your new look RecvDataNotifyCharaData myCharacterData = new RecvDataNotifyCharaData(client.character, client.soul.name); router.Send(client.map, myCharacterData, client); } catch (ItemException e) { error = (int)e.type; } //tell the send if everything went well or not. notify the client chat of any errors RecvItemEquip recvItemEquip = new RecvItemEquip(client, error); router.Send(recvItemEquip); //Re-do all your stats router.Send(client, itemService.CalculateBattleStats(client)); }
private ItemInstance MakeItemInstance(DbDataReader reader) { ulong instanceId = (ulong)reader.GetInt64("id"); ItemInstance itemInstance = new ItemInstance(instanceId); itemInstance.ownerId = reader.GetInt32("owner_id"); ItemZoneType zone = (ItemZoneType)reader.GetByte("zone"); byte bag = reader.GetByte("container"); short slot = reader.GetInt16("slot"); ItemLocation itemLocation = new ItemLocation(zone, bag, slot); itemInstance.location = itemLocation; itemInstance.baseId = reader.GetInt32("base_id"); itemInstance.quantity = reader.GetByte("quantity"); itemInstance.statuses = (ItemStatuses)reader.GetInt32("statuses"); itemInstance.currentEquipSlot = (ItemEquipSlots)reader.GetInt32("current_equip_slot"); itemInstance.currentDurability = reader.GetInt32("current_durability"); itemInstance.maximumDurability = reader.GetInt32("plus_maximum_durability"); if (itemInstance.maximumDurability == 0) { itemInstance.maximumDurability = 10; //toDo update item library. items shouldnt have 0 for core stats } itemInstance.enhancementLevel = reader.GetByte("enhancement_level"); itemInstance.specialForgeLevel = reader.GetByte("special_forge_level"); itemInstance.physical = reader.GetInt16("physical"); itemInstance.magical = reader.GetInt16("magical"); itemInstance.hardness = reader.GetByte("hardness"); itemInstance.plusPhysical = reader.GetInt16("plus_physical"); itemInstance.plusMagical = reader.GetInt16("plus_magical"); itemInstance.plusGp = reader.GetInt16("plus_gp"); itemInstance.plusWeight = (short)(reader.GetInt16("plus_weight") * 10); //TODO REMOVE THIS MULTIPLICATION AND FIX TRHOUGHOUT CODE itemInstance.plusRangedEff = reader.GetInt16("plus_ranged_eff"); itemInstance.plusReservoirEff = reader.GetInt16("plus_reservoir_eff"); int gemSlotNum = 0; int gemSlot1Type = reader.GetByte("gem_slot_1_type"); if (gemSlot1Type != 0) { gemSlotNum++; } int gemSlot2Type = reader.GetByte("gem_slot_2_type"); if (gemSlot2Type != 0) { gemSlotNum++; } int gemSlot3Type = reader.GetByte("gem_slot_3_type"); if (gemSlot3Type != 0) { gemSlotNum++; } GemSlot[] gemSlot = new GemSlot[gemSlotNum]; itemInstance.enchantId = reader.GetInt32("enchant_id"); itemInstance.gp = reader.GetInt16("plus_gp"); itemInstance.type = (ItemType)Enum.Parse(typeof(ItemType), reader.GetString("item_type")); itemInstance.quality = (ItemQualities)Enum.Parse(typeof(ItemQualities), reader.GetString("quality"), true); itemInstance.maxStackSize = reader.GetByte("max_stack_size"); if (reader.GetBoolean("es_hand_r")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.RightHand; } if (reader.GetBoolean("es_hand_l")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.LeftHand; } if (reader.GetBoolean("es_quiver")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.Quiver; } if (reader.GetBoolean("es_head")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.Head; } if (reader.GetBoolean("es_body")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.Torso; } if (reader.GetBoolean("es_legs")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.Legs; } if (reader.GetBoolean("es_arms")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.Arms; } if (reader.GetBoolean("es_feet")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.Feet; } if (reader.GetBoolean("es_mantle")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.Cloak; } if (reader.GetBoolean("es_ring")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.Ring; } if (reader.GetBoolean("es_earring")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.Earring; } if (reader.GetBoolean("es_necklace")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.Necklace; } if (reader.GetBoolean("es_belt")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.Belt; } if (reader.GetBoolean("es_talkring")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.Talkring; } if (reader.GetBoolean("es_avatar_head")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.AvatarHead; } if (reader.GetBoolean("es_avatar_body")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.AvatarTorso; } if (reader.GetBoolean("es_avatar_legs")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.AvatarLegs; } if (reader.GetBoolean("es_avatar_arms")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.AvatarArms; } if (reader.GetBoolean("es_avatar_feet")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.AvatarFeet; } if (reader.GetBoolean("es_avatar_feet")) { itemInstance.equipAllowedSlots |= ItemEquipSlots.AvatarCloak; } if (reader.GetBoolean("req_hum_m")) { itemInstance.requiredRaces |= Races.HumanMale; } if (reader.GetBoolean("req_hum_f")) { itemInstance.requiredRaces |= Races.HumanFemale; } if (reader.GetBoolean("req_elf_m")) { itemInstance.requiredRaces |= Races.ElfMale; } if (reader.GetBoolean("req_elf_f")) { itemInstance.requiredRaces |= Races.ElfFemale; } if (reader.GetBoolean("req_dwf_m")) { itemInstance.requiredRaces |= Races.DwarfMale; } if (reader.GetBoolean("req_por_m")) { itemInstance.requiredRaces |= Races.PorkulMale; } if (reader.GetBoolean("req_por_f")) { itemInstance.requiredRaces |= Races.PorkulFemale; } if (reader.GetBoolean("req_gnm_f")) { itemInstance.requiredRaces |= Races.GnomeFemale; } if (reader.GetBoolean("req_fighter")) { itemInstance.requiredClasses |= Classes.Fighter; } if (reader.GetBoolean("req_thief")) { itemInstance.requiredClasses |= Classes.Thief; } if (reader.GetBoolean("req_mage")) { itemInstance.requiredClasses |= Classes.Mage; } if (reader.GetBoolean("req_priest")) { itemInstance.requiredClasses |= Classes.Priest; } if (reader.GetBoolean("req_samurai")) { itemInstance.requiredClasses |= Classes.Samurai; } if (reader.GetBoolean("req_bishop")) { itemInstance.requiredClasses |= Classes.Bishop; } if (reader.GetBoolean("req_ninja")) { itemInstance.requiredClasses |= Classes.Ninja; } if (reader.GetBoolean("req_lord")) { itemInstance.requiredClasses |= Classes.Lord; } if (reader.GetBoolean("req_clown")) { itemInstance.requiredClasses |= Classes.Clown; } if (reader.GetBoolean("req_alchemist")) { itemInstance.requiredClasses |= Classes.Alchemist; } if (reader.GetBoolean("req_lawful")) { itemInstance.requiredAlignments |= Alignments.Lawful; } if (reader.GetBoolean("req_neutral")) { itemInstance.requiredAlignments |= Alignments.Neutral; } if (reader.GetBoolean("req_chaotic")) { itemInstance.requiredAlignments |= Alignments.Chaotic; } itemInstance.requiredStrength = reader.GetByte("req_str"); itemInstance.requiredVitality = reader.GetByte("req_vit"); itemInstance.requiredDexterity = reader.GetByte("req_dex"); itemInstance.requiredAgility = reader.GetByte("req_agi"); itemInstance.requiredIntelligence = reader.GetByte("req_int"); itemInstance.requiredPiety = reader.GetByte("req_pie"); itemInstance.requiredLuck = reader.GetByte("req_luk"); itemInstance.requiredSoulRank = reader.GetByte("req_soul_rank"); //todo max soul rank itemInstance.requiredLevel = reader.GetByte("req_lvl"); itemInstance.physicalSlash = reader.GetByte("phys_slash"); itemInstance.physicalStrike = reader.GetByte("phys_strike"); itemInstance.physicalPierce = reader.GetByte("phys_pierce"); itemInstance.physicalDefenseFire = reader.GetByte("pdef_fire"); itemInstance.physicalDefenseWater = reader.GetByte("pdef_water"); itemInstance.physicalDefenseWind = reader.GetByte("pdef_wind"); itemInstance.physicalDefenseEarth = reader.GetByte("pdef_earth"); itemInstance.physicalDefenseLight = reader.GetByte("pdef_light"); itemInstance.physicalDefenseDark = reader.GetByte("pdef_dark"); itemInstance.magicalAttackFire = reader.GetByte("matk_fire"); itemInstance.magicalAttackWater = reader.GetByte("matk_water"); itemInstance.magicalAttackWind = reader.GetByte("matk_wind"); itemInstance.magicalAttackEarth = reader.GetByte("matk_earth"); itemInstance.magicalAttackLight = reader.GetByte("matk_light"); itemInstance.magicalAttackDark = reader.GetByte("matk_dark"); itemInstance.hp = reader.GetByte("seffect_hp"); itemInstance.mp = reader.GetByte("seffect_mp"); itemInstance.str = reader.GetByte("seffect_str"); itemInstance.vit = reader.GetByte("seffect_vit"); itemInstance.dex = reader.GetByte("seffect_dex"); itemInstance.agi = reader.GetByte("seffect_agi"); itemInstance.@int = reader.GetByte("seffect_int"); itemInstance.pie = reader.GetByte("seffect_pie"); itemInstance.luk = reader.GetByte("seffect_luk"); itemInstance.resistPoison = reader.GetByte("res_poison"); itemInstance.resistParalyze = reader.GetByte("res_paralyze"); itemInstance.resistPetrified = reader.GetByte("res_petrified"); itemInstance.resistFaint = reader.GetByte("res_faint"); itemInstance.resistBlind = reader.GetByte("res_blind"); itemInstance.resistSleep = reader.GetByte("res_sleep"); itemInstance.resistSilence = reader.GetByte("res_silent"); itemInstance.resistCharm = reader.GetByte("res_charm"); itemInstance.resistConfusion = reader.GetByte("res_confusion"); itemInstance.resistFear = reader.GetByte("res_fear"); //itemInstance.StatusMalus = (ItemStatusEffect)Enum.Parse(typeof(ItemStatusEffect), reader.GetString("status_malus")); itemInstance.statusMalusPercent = reader.GetInt32("status_percent"); itemInstance.objectType = reader.GetString("object_type"); //not sure what this is for itemInstance.equipSlot2 = reader.GetString("equip_slot"); //not sure what this is for itemInstance.isUseableInTown = !reader.GetBoolean("no_use_in_town"); //not sure what this is for itemInstance.isStorable = !reader.GetBoolean("no_storage"); itemInstance.isDiscardable = !reader.GetBoolean("no_discard"); itemInstance.isSellable = !reader.GetBoolean("no_sell"); itemInstance.isTradeable = !reader.GetBoolean("no_trade"); itemInstance.isTradableAfterUse = !reader.GetBoolean("no_trade_after_used"); itemInstance.isStealable = !reader.GetBoolean("no_stolen"); itemInstance.isGoldBorder = reader.GetBoolean("gold_border"); //itemInstance.Lore = reader.GetString("lore"); itemInstance.iconId = reader.GetInt32("icon"); itemInstance.talkRingName = ""; //TODO fix all the data types once mysql is implemented itemInstance.bagSize = reader.GetByte("num_of_bag_slots"); //grade, //weight itemInstance.weight = (int)(reader.GetDouble("weight") * 10000); // TODO DOUBLE CHECK THIS IS CORRECT SCALE //auction itemInstance.consignerSoulName = reader.IsDBNull("consigner_soul_name") ? "" : reader.GetString("consigner_soul_name"); itemInstance.secondsUntilExpiryTime = reader.IsDBNull("expiry_datetime") ? 0 : CalcSecondsToExpiry(reader.GetInt64("expiry_datetime")); itemInstance.minimumBid = reader.IsDBNull("min_bid") ? 0 : (ulong)reader.GetInt64("min_bid"); itemInstance.buyoutPrice = reader.IsDBNull("buyout_price") ? 0 : (ulong)reader.GetInt64("buyout_price"); itemInstance.comment = reader.IsDBNull("comment") ? "" : reader.GetString("comment"); //enhancement itemInstance = CalcEnhancement(itemInstance); return(itemInstance); }
public bool IsEmptyContainer(ItemZoneType itemZoneType, int container) { return(_zoneMap[itemZoneType].GetContainer(container).count == 0); }
public int GetTotalFreeSpace(ItemZoneType itemZoneType) { return(_zoneMap[itemZoneType].totalFreeSpace); }