From 3f7f8c4b4246c2206f4972dac1bfca8eefed9019 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 7 Jun 2021 11:43:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=09=2010=20=20=20=20=20=20=20?= =?UTF-8?q?=20=E6=B5=A3=E7=86=8A=E7=9A=84=E5=9C=B0=E9=9B=B7=EF=BC=8C?= =?UTF-8?q?=E7=82=B8=E6=AD=BB=E7=9A=84=E7=9B=AE=E6=A0=87=E6=9C=AA=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E5=87=BB=E6=9D=80ICON?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/human.cc | 26 ++++++++++---------------- server/gameserver/obstacle.cc | 11 ++++++++++- server/gameserver/room.cc | 6 ++++++ server/gameserver/room.h | 1 + server/gameserver/roomobstacle.cc | 6 +++++- 5 files changed, 32 insertions(+), 18 deletions(-) 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;