From 349d23c8c782a45eda7a1db1ec560a1fa697499b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 30 Sep 2021 18:41:50 +0800 Subject: [PATCH] 1 --- server/gameserver/hero.cc | 14 ++++++++++++++ server/gameserver/hero.h | 1 + server/gameserver/human.cc | 9 +++++++++ server/gameserver/player.cc | 10 ++++++++++ 4 files changed, 34 insertions(+) diff --git a/server/gameserver/hero.cc b/server/gameserver/hero.cc index 34a5d9b..37e3af3 100644 --- a/server/gameserver/hero.cc +++ b/server/gameserver/hero.cc @@ -13,6 +13,7 @@ #include "collider.h" #include "bullet.h" #include "explosion.h" +#include "roomobstacle.h" Hero::Hero():Creature() { @@ -381,3 +382,16 @@ std::string Hero::GetName() { return meta->i->name(); } + +void Hero::DropItems(Obstacle* obstacle) +{ + bool is_treasure_box = false; + if (obstacle->IsEntitySubType(EST_RoomObstacle)) { + is_treasure_box = ((RoomObstacle*)obstacle)->is_treasure_box; + } + int drop_id = obstacle->meta->i->drop(); + if (drop_id == 0) { + return; + } + room->ScatterDrop(obstacle->GetPos(), drop_id); +} diff --git a/server/gameserver/hero.h b/server/gameserver/hero.h index ff8c609..03519b4 100644 --- a/server/gameserver/hero.h +++ b/server/gameserver/hero.h @@ -31,6 +31,7 @@ public: virtual void Update(int delta_time) override; virtual void DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id) override; virtual std::string GetName() override; + virtual void DropItems(Obstacle* obstacle) override; virtual float GetSpeed() override; virtual float GetRadius() override; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 96fb29f..6eb5319 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3480,8 +3480,14 @@ void Human::ProcLootWeapon(AddItemDTO& dto) void Human::LootInteraction(Loot* entity) { +#ifdef DEBUG + a8::XPrintf("LootInteraction start %d:%d\n", {entity->GetUniId(), entity->item_id}); +#endif if (entity->pickuped || entity->count <= 0) { +#ifdef DEBUG + a8::XPrintf("LootInteraction error1 %d:%d\n", {entity->GetUniId(), entity->item_id}); +#endif return; } AddItemDTO dto; @@ -3515,6 +3521,9 @@ void Human::LootInteraction(Loot* entity) void Human::ProcAddItemDto(AddItemDTO& dto) { if (!dto.item_meta) { +#ifdef DEBUG + a8::XPrintf("LootInteraction error20 %d:%d\n", {dto.uniid, dto.item_id}); +#endif return; } switch (dto.item_meta->i->equip_type()) { diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index d561738..b9e9767 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -479,8 +479,14 @@ void Player::ProcInteraction() } for (auto obj_id : interaction_objids) { Entity* entity = room->GetEntityByUniId(obj_id); +#ifdef DEBUG + a8::XPrintf("LootInteraction %d\n", {obj_id}); +#endif if (entity) { if (entity->GetPos().Distance(GetPos()) > 600) { +#ifdef DEBUG + a8::XPrintf("LootInteraction error3 %d\n", {entity->GetUniId()}); +#endif continue; } switch (entity->GetEntityType()) { @@ -507,6 +513,10 @@ void Player::ProcInteraction() } break; } + } else { +#ifdef DEBUG + a8::XPrintf("LootInteraction error4 %d\n", {obj_id}); +#endif } } interaction_objids.Clear();