From feef53a8b85d962550491714ca1a255dc05b0fd1 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 10 Apr 2019 14:06:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=94=BB=E5=87=BB=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/bullet.cc | 2 +- server/gameserver/human.cc | 20 ++++++++++++++++++++ server/gameserver/human.h | 2 ++ server/gameserver/obstacle.cc | 2 +- server/gameserver/player.cc | 4 ++++ server/tools/protobuild/metatable.proto | 2 +- 6 files changed, 29 insertions(+), 3 deletions(-) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 969426f..650490d 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -84,7 +84,7 @@ void Bullet::OnHit(std::vector& objects) case ET_Obstacle: { Obstacle* obstacle = (Obstacle*)target; - if (!obstacle->dead && obstacle->meta->i->attackable()) { + if (!obstacle->dead && obstacle->meta->i->attack_type() == 1) { obstacle->health = std::min(0.0f, obstacle->health - 10); obstacle->dead = std::min(obstacle->health, 0.001f) <= 0.01f; obstacle->dead_frameno = room->frame_no; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 8ff61b9..9b22454 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -361,3 +361,23 @@ void Human::ResetAction() action_target_id = 0; need_sync_active_player = true; } + +void Human::FillSMGameOver(cs::SMGameOver& msg) +{ + msg.set_team_id(0); + msg.set_team_rank(0); + msg.set_team_allcnt(1); + msg.set_game_over(true); + msg.set_victory(false); + + cs::MFPlayerStats* p = msg.add_player_stats(); + FillMFPlayerStats(p); +} + +void Human::BeKill(int killer_id, const std::string& killer_name) +{ + stats.killer_id = killer_id; + stats.killer_name = killer_name; + dead = true; + health = 0.0f; +} diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 48baa00..ff5bfb7 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -110,6 +110,8 @@ class Human : public Entity int target_id); void CancelAction(); void ResetAction(); + void FillSMGameOver(cs::SMGameOver& msg); + void BeKill(int killer_id, const std::string& killer_name); private: CircleCollider* self_collider_ = nullptr; diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index c242a89..419805a 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -40,7 +40,7 @@ void Obstacle::RecalcSelfCollider() 0.0f - door_state1->height() / 2.0f); self_collider2_->_max = Vector2D(door_state1->width(), door_state1->height()); } - } else { + } else if (meta->i->attack_type() != 2){ switch (meta->i->type()) { case 1: { diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 355ae01..1872751 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -254,6 +254,10 @@ void Player::UpdateUseItemIdx() void Player::UpdateSpectate() { + stats.killer_id = entity_uniid; + stats.killer_name = name; + dead = true; + health = 0.0f; spectate = false; } diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index c483f7a..69727d5 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -22,7 +22,7 @@ message MapThing optional float damage = 6; //伤害 optional float damage_dia = 7; //伤害半径 optional int32 drop = 8; //掉落 - optional int32 attackable = 9; //是否可攻击 + optional int32 attack_type = 9; //是否可攻击 0:不可破坏对象 1:可破坏对象 2:可穿透对象 optional int32 is_door = 10; //是否门 optional int32 is_house = 11; //是否房间 optional int32 is_tree = 12; //是否树