1
0

Support house containers being placed inside house. Need to have an appearance set with equip_type as model type/id

This commit is contained in:
Emagi 2025-07-08 10:32:56 -04:00
parent b0f24aea5d
commit 878c422c0f
3 changed files with 19 additions and 5 deletions

View File

@ -4034,7 +4034,7 @@ void Commands::Process(int32 index, EQ2_16BitString* command_parms, Client* clie
Item* item = client->GetPlayer()->item_list.GetItemFromUniqueID(uniqueid);
//Item* item = player->GetEquipmentList()->GetItem(slot);
if (item && item->IsHouseItem())
if (item && (item->IsHouseItem() || item->IsHouseContainer()))
{
if (!client->HasOwnerOrEditAccess())
{

View File

@ -238,7 +238,7 @@ vector<Item*>* MasterItemList::GetItems(string name, int64 itype, int64 ltype, i
break;
}
case ITEM_BROKER_TYPE_HOUSEITEM:{
if(item->IsHouseItem())
if(item->IsHouseItem() || item->IsHouseContainer())
should_add = true;
break;
}
@ -1072,6 +1072,11 @@ void Item::SetItem(Item* old_item){
break;
}
case ITEM_TYPE_HOUSE_CONTAINER:{
houseitem_info = new HouseItem_Info;
if(old_item->houseitem_info) {
memcpy(houseitem_info, old_item->houseitem_info, sizeof(HouseItem_Info));
}
// House Containers
housecontainer_info = new HouseContainer_Info;
if (old_item->housecontainer_info) {
@ -1577,6 +1582,10 @@ void Item::SetItemType(int8 in_type){
memset(houseitem_info, 0, sizeof(HouseItem_Info));
}
else if(IsHouseContainer() && !housecontainer_info){
if(!houseitem_info) {
houseitem_info = new HouseItem_Info;
memset(houseitem_info, 0, sizeof(HouseItem_Info));
}
housecontainer_info = new HouseContainer_Info;
housecontainer_info->allowed_types = 0;
housecontainer_info->broker_commission = 0;
@ -2493,6 +2502,11 @@ void Item::serialize(PacketStruct* packet, bool show_name, Player* player, int16
}
case ITEM_TYPE_HOUSE_CONTAINER:{
if(houseitem_info && client->GetVersion() >= 374){
packet->setDataByName("status_rent_reduction", houseitem_info->status_rent_reduction);
packet->setDataByName("coin_rent_reduction", houseitem_info->coin_rent_reduction);
packet->setDataByName("house_only", houseitem_info->house_only);
}
//House Containers
if(housecontainer_info && client->GetVersion() >= 374){
packet->setDataByName("allowed_types", housecontainer_info->allowed_types);
@ -3736,7 +3750,7 @@ void PlayerItemList::AddItemToPacket(PacketStruct* packet, Player* player, Item*
//TODO: Add check to allow scribe
menu_data += ITEM_MENU_TYPE_SCRIBE;
}
if (item->generic_info.item_type == 10){
if (item->generic_info.item_type == ITEM_TYPE_HOUSE || item->generic_info.item_type == ITEM_TYPE_HOUSE_CONTAINER){
menu_data += ITEM_MENU_TYPE_TEST1;
menu_data += ITEM_MENU_TYPE_HOUSE;
}

View File

@ -473,7 +473,7 @@ int32 WorldDatabase::LoadHouseItem(int32 item_id)
{
LogWrite(ITEM__DEBUG, 5, "Items", "\tItem HouseItem for item_id %u", id);
LogWrite(ITEM__DEBUG, 5, "Items", "\ttype: %i, %i, %u, %.2f, %u", ITEM_TYPE_HOUSE, atoul(row[1]), atoi(row[2]), atof(row[3]), atoul(row[4]));
item->SetItemType(ITEM_TYPE_HOUSE);
item->SetItemType(ITEM_TYPE_HOUSE); // container will be overwritten by LoadHouseContainers which is ran after
item->houseitem_info->status_rent_reduction = atoi(row[2]);
item->houseitem_info->coin_rent_reduction = atof(row[3]);
item->houseitem_info->house_only = atoi(row[4]);
@ -1069,7 +1069,7 @@ void WorldDatabase::LoadItemList(int32 item_id)
LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Skill Items", LoadSkillItems(item_id));
LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Adornment Items", LoadAdornments(item_id));
LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Recipe Book Items", LoadRecipeBookItems(item_id));
LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u House Containers", LoadHouseContainers(item_id));
LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u House Containers", LoadHouseContainers(item_id)); // must be called after LoadHouseItem
LogWrite(ITEM__DEBUG, 0, "Items", "Loading Item Appearances...");
LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Item Appearances", LoadItemAppearances(item_id));