diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index 4ba4f27..84634cb 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -180,9 +180,9 @@ void Obstacle::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_d a8::SetBitFlag(data->flags, kHealth); } if (GetInteractionData(hum)) { - p->set_button_name("躲藏"); - } else { p->set_button_name("脱离"); + } else { + p->set_button_name("躲藏"); } } } @@ -648,23 +648,25 @@ void Obstacle::OnCollisionTrigger(Creature* c) void Obstacle::DoHideHouseInteraction(Human* sender) { + ObstacleData* data = sender->room->GetPermanentObstacleData(GetUniId()); + if (!a8::HasBitFlag(data->flags, kHealth)) { + data->health = health_; + a8::SetBitFlag(data->flags, kHealth); + } + auto p = GetInteractionData(sender); if (p) { ClearObstacleBuff(sender); sender->SetPos(std::get<1>(*p)); + data->interaction_humans->erase(sender->GetUniId()); } else { a8::Vec2 old_pos = sender->GetPos(); sender->SetPos(GetPos()); AddObstacleBuff(sender); - ObstacleData* p = sender->room->GetPermanentObstacleData(GetUniId()); - if (!a8::HasBitFlag(p->flags, kHealth)) { - p->health = health_; - a8::SetBitFlag(p->flags, kHealth); + if (!data->interaction_humans) { + data->interaction_humans = new std::map>(); } - if (!p->interaction_humans) { - p->interaction_humans = new std::map>(); - } - (*p->interaction_humans)[sender->GetUniId()] = std::make_tuple + (*data->interaction_humans)[sender->GetUniId()] = std::make_tuple (sender->room->GetFrameNo(), old_pos); } sender->AddToNewObjects(this);