diff options
-rw-r--r-- | src/game/DBCStructure.h | 2 | ||||
-rw-r--r-- | src/game/DBCfmt.h | 2 | ||||
-rw-r--r-- | src/game/ObjectMgr.cpp | 4 | ||||
-rw-r--r-- | src/game/Spell.cpp | 35 |
4 files changed, 38 insertions, 5 deletions
diff --git a/src/game/DBCStructure.h b/src/game/DBCStructure.h index ac5b2bf419f..a4a5d040ac1 100644 --- a/src/game/DBCStructure.h +++ b/src/game/DBCStructure.h @@ -964,7 +964,7 @@ struct ItemEntry { uint32 ID; // 0 uint32 Class; // 1 - //uint32 SubClass; // 2 some items have strnage subclasses + uint32 SubClass; // 2 some items have strnage subclasses int32 Unk0; // 3 int32 Material; // 4 uint32 DisplayId; // 5 diff --git a/src/game/DBCfmt.h b/src/game/DBCfmt.h index 734cad30d11..ab41fbe37d4 100644 --- a/src/game/DBCfmt.h +++ b/src/game/DBCfmt.h @@ -63,7 +63,7 @@ const char GtOCTRegenHPfmt[]="f"; const char GtRegenHPPerSptfmt[]="f"; const char GtRegenMPPerSptfmt[]="f"; const char Holidaysfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; -const char Itemfmt[]="nixiiiii"; +const char Itemfmt[]="niiiiiii"; const char ItemBagFamilyfmt[]="nxxxxxxxxxxxxxxxxx"; //const char ItemDisplayTemplateEntryfmt[]="nxxxxxxxxxxixxxxxxxxxxx"; //const char ItemCondExtCostsEntryfmt[]="xiii"; diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index ca3b35a1cf3..87e7d10bdcb 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -866,8 +866,8 @@ void ObjectMgr::LoadEquipmentTemplates() sLog.outString( ">> Loaded %u equipment template", sEquipmentStorage.RecordCount ); sLog.outString(); - // This DBC is currently only used for item templates and creature equipments checks. - sItemStore.Clear(); + // Creature items can be not listed in item_template + //sItemStore.Clear(); -- so used in spell casting } CreatureModelInfo const* ObjectMgr::GetCreatureModelInfo(uint32 modelid) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index b394206af4f..1236129e155 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -3241,7 +3241,40 @@ void Spell::WriteAmmoToPacket( WorldPacket * data ) } } } - // TODO: implement selection ammo data based at ranged weapon stored in equipmodel/equipinfo/equipslot fields + else + { + for (uint8 i = 0; i < 3; ++i) + { + if(uint32 item_id = m_caster->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + i)) + { + if(ItemEntry const * itemEntry = sItemStore.LookupEntry(item_id)) + { + if(itemEntry->Class==ITEM_CLASS_WEAPON) + { + switch(itemEntry->SubClass) + { + case ITEM_SUBCLASS_WEAPON_THROWN: + ammoDisplayID = itemEntry->DisplayId; + ammoInventoryType = itemEntry->InventoryType; + break; + case ITEM_SUBCLASS_WEAPON_BOW: + case ITEM_SUBCLASS_WEAPON_CROSSBOW: + ammoDisplayID = 5996; // is this need fixing? + ammoInventoryType = INVTYPE_AMMO; + break; + case ITEM_SUBCLASS_WEAPON_GUN: + ammoDisplayID = 5998; // is this need fixing? + ammoInventoryType = INVTYPE_AMMO; + break; + } + + if(ammoDisplayID) + break; + } + } + } + } + } *data << uint32(ammoDisplayID); *data << uint32(ammoInventoryType); |