void WorldSession::HandleAddDynamicTargetOpcode(WorldPacket & recvPacket) { uint64 guid; uint32 spellid; uint32 flags; recvPacket >> guid >> spellid >> flags; SpellEntry * sp = dbcSpell.LookupEntryForced(spellid); if ( !sp ) return; // Summoned Elemental's Freeze if (spellid == 33395) { if (!_player->m_Summon) return; } else if ( guid != _player->m_CurrentCharm ) { return; } /* burlex: this is.. strange */ SpellCastTargets targets; targets.m_targetMask = flags; if(flags == 0) targets.m_unitTarget = guid; else if(flags & TARGET_FLAG_UNIT) { WoWGuid guid; // recvPacket >> flags; // skip one byte recvPacket >> guid; targets.m_unitTarget = guid.GetOldGuid(); }
void WorldSession::HandleEquipmentSetSave(WorldPacket& data) { CHECK_INWORLD_RETURN LOG_DEBUG("Received CMSG_EQUIPMENT_SET_SAVE"); WoWGuid GUID; uint32 setGUID; data >> GUID; setGUID = Arcemu::Util::GUID_LOPART(GUID.GetOldGuid()); if (setGUID == 0) setGUID = objmgr.GenerateEquipmentSetID(); Arcemu::EquipmentSet* set = new Arcemu::EquipmentSet(); set->SetGUID = setGUID; data >> set->SetID; data >> set->SetName; data >> set->IconName; for (uint32 i = EQUIPMENT_SLOT_START; i < EQUIPMENT_SLOT_END; ++i) { GUID.Clear(); data >> GUID; set->ItemGUID[i] = Arcemu::Util::GUID_LOPART(GUID.GetOldGuid()); } bool success; success = _player->GetItemInterface()->m_EquipmentSets.AddEquipmentSet(set->SetGUID, set); if (success) { LOG_DEBUG("Player %u successfully stored equipment set %u at slot %u ", _player->getGuidLow(), set->SetGUID, set->SetID); _player->SendEquipmentSetSaved(set->SetID, set->SetGUID); } else { LOG_DEBUG("Player %u couldn't store equipment set %u at slot %u ", _player->getGuidLow(), set->SetGUID, set->SetID); } }
void WorldSession::HandleEquipmentSetDelete(WorldPacket& data) { CHECK_INWORLD_RETURN LOG_DEBUG("Received CMSG_EQUIPMENT_SET_DELETE"); WoWGuid setGUID; bool success; data >> setGUID; uint32 GUID = Arcemu::Util::GUID_LOPART(setGUID.GetOldGuid()); success = _player->GetItemInterface()->m_EquipmentSets.DeleteEquipmentSet(GUID); if (success) { LOG_DEBUG("Equipmentset with GUID %u was successfully deleted.", GUID); } else { LOG_DEBUG("Equipmentset with GUID %u couldn't be deleted.", GUID); } }
void WorldSession::HandleEquipmentSetUse(WorldPacket& data) { CHECK_INWORLD_RETURN LOG_DEBUG("Received CMSG_EQUIPMENT_SET_USE"); WoWGuid GUID; int8 SrcBagID; uint8 SrcSlotID; uint8 result = 0; for (int8 i = EQUIPMENT_SLOT_START; i < EQUIPMENT_SLOT_END; ++i) { uint64 ItemGUID = 0; GUID.Clear(); data >> GUID; data >> SrcBagID; data >> SrcSlotID; ItemGUID = GUID.GetOldGuid(); // Let's see if we even have this item auto item = _player->GetItemInterface()->GetItemByGUID(ItemGUID); if (item == nullptr) { // Nope we don't probably WPE hack :/ result = 1; continue; } int8 dstslot = i; int8 dstbag = static_cast<int8>(INVALID_BACKPACK_SLOT); // This is the best case, we already have the item equipped if ((SrcBagID == dstbag) && (SrcSlotID == dstslot)) continue; // Let's see if we have an item in the destination slot auto dstslotitem = _player->GetItemInterface()->GetInventoryItem(dstslot); if (dstslotitem == nullptr) { // we have no item equipped in the slot, so let's equip AddItemResult additemresult; int8 EquipError = _player->GetItemInterface()->CanEquipItemInSlot(dstbag, dstslot, item->getItemProperties(), false, false); if (EquipError == INV_ERR_OK) { dstslotitem = _player->GetItemInterface()->SafeRemoveAndRetreiveItemFromSlot(SrcBagID, SrcSlotID, false); additemresult = _player->GetItemInterface()->SafeAddItem(item, dstbag, dstslot); if (additemresult != ADD_ITEM_RESULT_OK) { // We failed for w/e reason, so let's revert auto check = _player->GetItemInterface()->SafeAddItem(item, SrcBagID, SrcSlotID); if (!check) { LOG_ERROR("HandleEquipmentSetUse", "Error while adding item %u to player %s twice", item->getEntry(), _player->GetNameString()); result = 0; } else result = 1; } } else { result = 1; } } else { // There is something equipped so we need to swap if (!_player->GetItemInterface()->SwapItems(INVALID_BACKPACK_SLOT, dstslot, SrcBagID, SrcSlotID)) result = 1; } } _player->SendEquipmentSetUseResult(result); }
void WorldSession::HandleChangeVehicleSeat( WorldPacket &recv_data ){ if( _player->GetCurrentVehicle() == NULL ) return; switch( recv_data.GetOpcode() ){ case CMSG_REQUEST_VEHICLE_PREV_SEAT: _player->GetCurrentVehicle()->MovePassengerToPrevSeat( _player ); break; case CMSG_REQUEST_VEHICLE_NEXT_SEAT: _player->GetCurrentVehicle()->MovePassengerToNextSeat( _player ); break; // Used when switching from a normal seat to a controlling seat, or to an accessory case CMSG_REQUEST_VEHICLE_SWITCH_SEAT:{ WoWGuid vehicle; uint8 seat = 0; recv_data >> vehicle; recv_data >> seat; if( vehicle.GetOldGuid() == _player->GetCurrentVehicle()->GetOwner()->GetGUID() ){ _player->GetCurrentVehicle()->MovePassengerToSeat( _player, seat ); }else{ Unit *u = _player->GetMapMgr()->GetUnit( vehicle.GetOldGuid() ); if( u == NULL ) return; if( u->GetVehicleComponent() == NULL ) return; // Has to be same vehicle, or an accessory of the vehicle if( _player->GetVehicleBase()->GetGUID() != u->GetVehicleBase()->GetGUID() ) return; _player->GetCurrentVehicle()->EjectPassenger( _player ); u->GetVehicleComponent()->AddPassengerToSeat( _player, seat ); } break;} // Used when switching from controlling seat to accessory, or from accessory to accessory case CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE:{ WoWGuid src_guid; WoWGuid dst_guid; uint8 seat = 0; recv_data >> src_guid; Unit *src_vehicle = _player->GetMapMgr()->GetUnit( src_guid.GetOldGuid() ); if( src_vehicle == NULL ) return; if(_player->GetVehicleBase()) ReadMovementInfo(recv_data, &_player->GetVehicleBase()->movement_info); recv_data >> dst_guid; recv_data >> seat; if( src_vehicle->GetVehicleComponent() == NULL ) return; if( src_vehicle->GetGUID() != _player->GetCurrentVehicle()->GetOwner()->GetGUID() ) return; Unit *dst_vehicle = _player->GetMapMgr()->GetUnit( dst_guid.GetOldGuid() ); if( dst_vehicle == NULL ) return; if( dst_vehicle->GetVehicleComponent() == NULL ) return; if( src_vehicle->GetGUID() == dst_vehicle->GetGUID() ){ src_vehicle->GetVehicleComponent()->MovePassengerToSeat( _player, seat ); }else{ // Has to be the same vehicle or an accessory of the vehicle if( src_vehicle->GetVehicleBase()->GetGUID() != dst_vehicle->GetVehicleBase()->GetGUID() ) return; _player->GetCurrentVehicle()->EjectPassenger( _player ); dst_vehicle->GetVehicleComponent()->AddPassengerToSeat( _player, seat ); } break;} } }
void WorldSession::HandleChangeVehicleSeat( WorldPacket &recv_data ){ if( _player->GetCurrentVehicle() == NULL ) return; switch( recv_data.GetOpcode() ){ case CMSG_REQUEST_VEHICLE_PREV_SEAT: _player->GetCurrentVehicle()->MovePassengerToPrevSeat( _player ); break; case CMSG_REQUEST_VEHICLE_NEXT_SEAT: _player->GetCurrentVehicle()->MovePassengerToNextSeat( _player ); break; case CMSG_REQUEST_VEHICLE_SWITCH_SEAT:{ WoWGuid vehicle; uint8 seat = 0; recv_data >> vehicle; recv_data >> seat; if( vehicle.GetOldGuid() == _player->GetCurrentVehicle()->GetOwner()->GetGUID() ){ _player->GetCurrentVehicle()->MovePassengerToSeat( _player, seat ); }else{ Unit *u = _player->GetMapMgr()->GetUnit( vehicle.GetOldGuid() ); if( u == NULL ) return; if( u->GetVehicleComponent() == NULL ) return; // We can only switch to accessory or back to the parent vehicle if( !_player->GetCurrentVehicle()->HasAccessoryWithGUID( vehicle.GetOldGuid() ) && !u->GetVehicleComponent()->HasAccessoryWithGUID( _player->GetCurrentVehicle()->GetOwner()->GetGUID() ) ) return; _player->GetCurrentVehicle()->EjectPassenger( _player ); u->GetVehicleComponent()->AddPassengerToSeat( _player, seat ); } break;} case CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE:{ WoWGuid src_guid; WoWGuid dst_guid; uint8 seat = 0; MovementInfo mov; recv_data >> src_guid; mov.init( recv_data ); recv_data >> dst_guid; recv_data >> seat; Unit *src_vehicle = _player->GetMapMgr()->GetUnit( src_guid.GetOldGuid() ); if( src_vehicle == NULL ) return; if( src_vehicle->GetVehicleComponent() == NULL ) return; if( src_vehicle->GetGUID() != _player->GetCurrentVehicle()->GetOwner()->GetGUID() ) return; Unit *dst_vehicle = _player->GetMapMgr()->GetUnit( dst_guid.GetOldGuid() ); if( dst_vehicle == NULL ) return; if( dst_vehicle->GetVehicleComponent() == NULL ) return; if( src_vehicle->GetGUID() == dst_vehicle->GetGUID() ){ src_vehicle->GetVehicleComponent()->MovePassengerToSeat( _player, seat ); }else{ // We can only switch to accessory or back to parent vehicle if( !src_vehicle->GetVehicleComponent()->HasAccessoryWithGUID( dst_vehicle->GetGUID() ) && !dst_vehicle->GetVehicleComponent()->HasAccessoryWithGUID( src_vehicle->GetGUID() ) ) return; _player->GetCurrentVehicle()->EjectPassenger( _player ); dst_vehicle->GetVehicleComponent()->AddPassengerToSeat( _player, seat ); } break;} } }