aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/DBCStructure.h2
-rw-r--r--src/game/DBCfmt.h2
-rw-r--r--src/game/ObjectMgr.cpp4
-rw-r--r--src/game/Spell.cpp35
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);