Fix locking of equipment so that we don't add changed spawns causing a hangup

This commit is contained in:
Emagi 2025-06-12 13:59:21 -04:00
parent 1dbfa3cc7b
commit a73c6386eb

View File

@ -1817,15 +1817,15 @@ EquipmentItemList* Entity::GetAppearanceEquipmentList(){
} }
void Entity::SetEquipment(Item* item, int8 slot){ void Entity::SetEquipment(Item* item, int8 slot){
std::lock_guard<std::mutex> lk(MEquipment); MEquipment.lock();
if(!item && slot < NUM_SLOTS){ if(!item && slot < NUM_SLOTS){
SetInfo(&equipment.equip_id[slot], 0); SetInfo(&equipment.equip_id[slot], 0, false);
SetInfo(&equipment.color[slot].red, 0); SetInfo(&equipment.color[slot].red, 0, false);
SetInfo(&equipment.color[slot].green, 0); SetInfo(&equipment.color[slot].green, 0, false);
SetInfo(&equipment.color[slot].blue, 0); SetInfo(&equipment.color[slot].blue, 0, false);
SetInfo(&equipment.highlight[slot].red, 0); SetInfo(&equipment.highlight[slot].red, 0, false);
SetInfo(&equipment.highlight[slot].green, 0); SetInfo(&equipment.highlight[slot].green, 0, false);
SetInfo(&equipment.highlight[slot].blue, 0); SetInfo(&equipment.highlight[slot].blue, 0, false);
} }
else{ else{
if ( slot >= NUM_SLOTS ) if ( slot >= NUM_SLOTS )
@ -1834,14 +1834,17 @@ void Entity::SetEquipment(Item* item, int8 slot){
if( slot >= NUM_SLOTS ) if( slot >= NUM_SLOTS )
return; return;
SetInfo(&equipment.equip_id[slot], item->generic_info.appearance_id); SetInfo(&equipment.equip_id[slot], item->generic_info.appearance_id, false);
SetInfo(&equipment.color[slot].red, item->generic_info.appearance_red); SetInfo(&equipment.color[slot].red, item->generic_info.appearance_red, false);
SetInfo(&equipment.color[slot].green, item->generic_info.appearance_green); SetInfo(&equipment.color[slot].green, item->generic_info.appearance_green, false);
SetInfo(&equipment.color[slot].blue, item->generic_info.appearance_blue); SetInfo(&equipment.color[slot].blue, item->generic_info.appearance_blue, false);
SetInfo(&equipment.highlight[slot].red, item->generic_info.appearance_highlight_red); SetInfo(&equipment.highlight[slot].red, item->generic_info.appearance_highlight_red, false);
SetInfo(&equipment.highlight[slot].green, item->generic_info.appearance_highlight_green); SetInfo(&equipment.highlight[slot].green, item->generic_info.appearance_highlight_green, false);
SetInfo(&equipment.highlight[slot].blue, item->generic_info.appearance_highlight_blue); SetInfo(&equipment.highlight[slot].blue, item->generic_info.appearance_highlight_blue, false);
} }
MEquipment.unlock();
info_changed = true;
AddChangedZoneSpawn();
} }
bool Entity::CheckSpellBonusRemoval(LuaSpell* spell, int16 type){ bool Entity::CheckSpellBonusRemoval(LuaSpell* spell, int16 type){