Core/SmartAI: modified ACTION_EQUIP to use a bitmask to send slot updates (for more blzzlike packet handling)

--HG--
branch : trunk
This commit is contained in:
Rat
2010-11-06 23:08:33 +01:00
parent 26d8e04351
commit 3809892987
3 changed files with 27 additions and 7 deletions

View File

@@ -930,14 +930,32 @@ void SmartScript::ProcessAction(SmartScriptHolder &e, Unit* unit, uint32 var0, u
{
if(Creature* npc = (*itr)->ToCreature())
{
if (e.action.equip.entry && !e.action.equip.slot1 && !e.action.equip.slot2 && !e.action.equip.slot3)
npc->LoadEquipment(e.action.equip.entry, true);
uint32 slot[3];
if (e.action.equip.entry)
{
EquipmentInfo const *einfo = sObjectMgr.GetEquipmentInfo(e.action.equip.entry);
if (!einfo)
{
sLog.outErrorDb("SmartScript: SMART_ACTION_EQUIP uses non-existent equipment info entry %u", e.action.equip.entry);
return;
}
npc->SetCurrentEquipmentId(e.action.equip.entry);
slot[0] = einfo->equipentry[0];
slot[1] = einfo->equipentry[1];
slot[2] = einfo->equipentry[2];
}
else
{
npc->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, e.action.equip.slot1);
npc->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, e.action.equip.slot2);
npc->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, e.action.equip.slot3);
slot[0] = e.action.equip.slot1;
slot[1] = e.action.equip.slot2;
slot[2] = e.action.equip.slot3;
}
if (!e.action.equip.mask || e.action.equip.mask & 1)
npc->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, e.action.equip.slot1);
if (!e.action.equip.mask || e.action.equip.mask & 2)
npc->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, e.action.equip.slot2);
if (!e.action.equip.mask || e.action.equip.mask & 4)
npc->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, e.action.equip.slot3);
}
}
break;