From b89a7ac80e4018dfea65d2a612883b75ca1e09b1 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sun, 2 Apr 2023 17:24:40 +0800 Subject: [PATCH] 1 --- server/gameserver/buff/callfunc.cc | 40 ++++++++++++++++++++---------- server/gameserver/creature.cc | 20 +++++++++++++++ 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index 09bc444d..951d442c 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -703,30 +703,44 @@ void CallFuncBuff::ClearSummonHero() void CallFuncBuff::SummonObstacleSpecPoint() { - #if 0 - int hero_id = meta->_int_buff_param2; + int id = meta->_int_buff_param2; float x = meta->GetBuffParam3(this); float y = meta->GetBuffParam4(this); float z = meta->GetBuffParam5(this); if (!owner->dead || meta->dead_valid() != 0) { - Hero* hero = owner->SummonHero(this, - glm::vec3(x, y, z), - owner->GetAttackDir()); + Obstacle* ob = owner->SummonObstacle(this, + glm::vec3(x, y, z), + owner->GetAttackDir()); } - #endif } void CallFuncBuff::SummonObstacleSpecDistance() { - #if 0 int hero_id = meta->_int_buff_param2; float distance = meta->GetBuffParam3(this); if (!owner->dead || meta->dead_valid() != 0) { - glm::vec3 born_pos = owner->GetPos().ToGlmVec3(); - Hero* hero = owner->SummonHero(this, - born_pos, - owner->GetAttackDir()); - if (hero) { + bool hit_result; + glm::vec3 hit_point; + glm::vec3 start = owner->GetPos().ToGlmVec3(); + glm::vec3 end = owner->GetPos().ToGlmVec3() + owner->GetAttackDir() * distance; + glm::vec3 born_pos = owner->GetPos().ToGlmVec3() + owner->GetAttackDir() * distance; + owner->room->map_instance->Scale(start); + owner->room->map_instance->Scale(end); + if (owner->room->map_instance->Raycast + ( + start, + end, + hit_point, + hit_result + )) { + owner->room->map_instance->UnScale(hit_point); + born_pos = hit_point; + } + Obstacle* ob = owner->SummonObstacle(this, + born_pos, + owner->GetAttackDir()); + if (ob) { + #if 0 std::shared_ptr> vars = std::make_shared>(); vars->push_back(hero->GetUniId()); for (int buff_id : meta->_buff_param6_int_list) { @@ -738,9 +752,9 @@ void CallFuncBuff::SummonObstacleSpecDistance() vars ); } + #endif } } - #endif } void CallFuncBuff::ClearSummonObstacle() diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 0247c003..4641c7c8 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -3075,6 +3075,26 @@ std::shared_ptr> Creature::CalcReporterList(const mt::Equip* weapo return p; } +Obstacle* Creature::SummonObstacle(Buff* buff, + const glm::vec3& pos, + const glm::vec3& dir + ) +{ + #if 0 + Obstacle* hero = nullptr; + const mt::Hero* hero_meta = mt::Hero::GetById(buff->meta->_int_buff_param2); + if (hero_meta) { + hero = InternalSummonHero(buff, + hero_meta, + GetAttackDir(), + pos + ); + hero->hero_level = GetBattleContext()->GetHeroLevel(); + } + return hero; + #endif +} + void Creature::RemoveSurplusObstacle(int id, int num) { #if 0