From d19d911ce84d9fcef9c8d58b6dca692a18eadab7 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 14 Nov 2023 13:09:45 +0800 Subject: [PATCH] 1 --- server/gameserver/car.h | 4 ++-- server/gameserver/entity.h | 3 +++ server/gameserver/hero_agent.cc | 13 ++++++++++++- server/gameserver/loot.h | 4 ++-- server/gameserver/roomobstacle.h | 2 ++ 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/server/gameserver/car.h b/server/gameserver/car.h index 30ebecb9..db8ff744 100644 --- a/server/gameserver/car.h +++ b/server/gameserver/car.h @@ -17,8 +17,8 @@ class Car : public Creature virtual void Initialize() override; virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override; virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override; - virtual bool IsCar() { return true;}; - virtual Car* AsCar() { return this;}; + virtual bool IsCar() override { return true;}; + virtual Car* AsCar() override { return this;}; virtual void OnBulletHit(IBullet* bullet) override; virtual void OnExplosionHit(Explosion* e) override; virtual std::string GetName() override; diff --git a/server/gameserver/entity.h b/server/gameserver/entity.h index de44f85f..7d97cf63 100644 --- a/server/gameserver/entity.h +++ b/server/gameserver/entity.h @@ -13,6 +13,7 @@ class Human; class Explosion; class Loot; class Car; +class RoomObstacle; class Entity { public: @@ -30,8 +31,10 @@ class Entity virtual bool IsCreature(Room* room) { return false;}; virtual bool IsLoot() { return false;}; virtual bool IsCar() { return false;}; + virtual bool IsRoomObstacle() { return false;}; virtual Loot* AsLoot() { return nullptr;}; virtual Car* AsCar() { return nullptr;}; + virtual RoomObstacle* AsRoomObstacle() { return nullptr;}; virtual long long GetDeadFrameNo(Room* room) { return 0;}; virtual void OnBulletHit(IBullet* bullet) {}; virtual void OnExplosionHit(Explosion* explosion) {}; diff --git a/server/gameserver/hero_agent.cc b/server/gameserver/hero_agent.cc index 9589718b..df36fafa 100644 --- a/server/gameserver/hero_agent.cc +++ b/server/gameserver/hero_agent.cc @@ -18,6 +18,9 @@ #include "master_agent.h" #include "team_agent.h" #include "skill.h" +#include "loot.h" +#include "car.h" +#include "roomobstacle.h" #include "mt/Hero.h" #include "mt/Equip.h" @@ -1262,7 +1265,15 @@ int HeroAgent::SearchPickupObj() bool HeroAgent::PickupObjIsValid() { - return curr_pickup_obj_.Get(); + if (curr_pickup_obj_.Get()) { + if (curr_pickup_obj_.Get()->IsLoot()) { + Loot* loot = curr_pickup_obj_.Get()->AsLoot(); + return !loot->pickuped; + } else if (curr_pickup_obj_.Get()->IsRoomObstacle()) { + RoomObstacle* ob = curr_pickup_obj_.Get()->AsRoomObstacle(); + } + } + return false; } void HeroAgent::AbandonPickup(int min_time, int max_time) diff --git a/server/gameserver/loot.h b/server/gameserver/loot.h index 18933a3b..b5be2503 100644 --- a/server/gameserver/loot.h +++ b/server/gameserver/loot.h @@ -34,8 +34,8 @@ class Loot : public RoomEntity virtual void Initialize() override; virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override; virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override; - virtual bool IsLoot() { return true;}; - virtual Loot* AsLoot() { return this;}; + virtual bool IsLoot() override { return true;}; + virtual Loot* AsLoot() override { return this;}; protected: Loot(); diff --git a/server/gameserver/roomobstacle.h b/server/gameserver/roomobstacle.h index 0cef8907..19505796 100644 --- a/server/gameserver/roomobstacle.h +++ b/server/gameserver/roomobstacle.h @@ -26,6 +26,8 @@ class RoomObstacle : public Obstacle virtual void Initialize() override; virtual bool DoInteraction(Human* sender) override; virtual void OnBattleStart(Room* room) override; + virtual bool IsRoomObstacle() override { return true;}; + virtual RoomObstacle* AsRoomObstacle() override { return this;}; void ActiveTimerFunc(); void UpdateTimerFunc(); void Active();