diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 16471e8..26462f6 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -767,22 +767,16 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) name }); } else { - MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(weapon_id); - if (equip_meta) { - info.killer_id = killer->GetEntityUniId(); - info.killer_team_id = killer->team_id; - SendRollMsgEx - (info, - TEXT("battle_server_dead_weapon", "%s 使用 ${weapon_text_icon} 干掉了 %s").c_str(), - { - killer_name, - #if 0 - equip_meta->i->name(), - #endif - name - } - ); - } + info.killer_id = killer->GetEntityUniId(); + info.killer_team_id = killer->team_id; + SendRollMsgEx + (info, + TEXT("battle_server_dead_weapon", "%s 使用 ${weapon_text_icon} 干掉了 %s").c_str(), + { + killer_name, + name + } + ); } } } else { diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index 2afd667..e0d69ff 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -308,7 +308,16 @@ void Obstacle::Explosion(Bullet* bullet) float dmg = meta->i->damage(); float def = hum->ability.def; float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); - hum->DecHP(finaly_dmg, VP_Mine, TEXT("battle_server_killer_mine", "地雷"), VW_Mine); + if (GetMasterId(bullet->room)) { + Human* master = bullet->room->GetHumanByUniId(GetMasterId(bullet->room)); + if (master) { + hum->DecHP(finaly_dmg, master->GetEntityUniId(), master->GetName(), VW_Mine); + } else { + hum->DecHP(finaly_dmg, VP_Mine, TEXT("battle_server_killer_mine", "地雷"), VW_Mine); + } + } else { + hum->DecHP(finaly_dmg, VP_Mine, TEXT("battle_server_killer_mine", "地雷"), VW_Mine); + } } } break; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index d49530e..7a15df0 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -202,6 +202,12 @@ Entity* Room::GetEntityByUniId(int uniid) return itr != uniid_hash_.end() ? itr->second : nullptr; } +Human* Room::GetHumanByUniId(int uniid) +{ + Entity* entity = GetEntityByUniId(uniid); + return entity && entity->GetEntityType() == ET_Player ? (Human*)entity : nullptr; +} + int Room::AliveCount() { return alive_count_; diff --git a/server/gameserver/room.h b/server/gameserver/room.h index fa8b66a..4944178 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -82,6 +82,7 @@ public: Player* GetPlayerByAccountId(const std::string& accountid); Player* GetPlayerByUniId(int uniid); Entity* GetEntityByUniId(int uniid); + Human* GetHumanByUniId(int uniid); Human* GetFirstNewBie() { return first_newbie_; } int GetRealPlayerNum() { return accountid_hash_.size();} diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index 33c7ce7..cb62bc7 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -222,7 +222,11 @@ void RoomObstacle::Explosion() float dmg = meta->i->damage(); float def = hum->ability.def; float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); - hum->DecHP(finaly_dmg, VP_Mine, TEXT("battle_server_killer_mine", "地雷"), VW_Mine); + if (master.Get()) { + hum->DecHP(finaly_dmg, master.Get()->GetEntityUniId(), master.Get()->GetName(), VW_Mine); + } else { + hum->DecHP(finaly_dmg, VP_Mine, TEXT("battle_server_killer_mine", "地雷"), VW_Mine); + } } } break;