diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 34491363..0b439b36 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -979,7 +979,7 @@ void Bullet::Raycast() glm::vec3 hit_point; sender.Get()->room->map_instance->Scale(start); sender.Get()->room->map_instance->Scale(end); - bool ret = sender.Get()->room->map_instance->Raycast(0, start, end, hit_point, hit_result); + bool ret = sender.Get()->room->map_instance->Raycast(start, end, hit_point, hit_result); if (ret && hit_result) { raycast_hited = true; sender.Get()->room->map_instance->UnScale(hit_point); diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index a1a54baf..b2ed7194 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1411,8 +1411,9 @@ void Creature::DecInventory(int slot_id, int num) inventory_[slot_id].num -= num; } -void Creature::CheckSpecObject() +void Creature::CheckSpecObject(int new_poly_flags) { + #if 0 int old_poly_ext_flags = poly_ext_flags_; poly_ext_flags_ = 0; { @@ -1461,6 +1462,7 @@ void Creature::CheckSpecObject() } } } + #endif } void Creature::SummonObstacle(Buff* buff, int id, const Position& target_pos) @@ -2384,15 +2386,18 @@ void Creature::SpecDirMove(glm::vec3 dir, float distance) room->map_instance->Scale(start); room->map_instance->Scale(end); + int same_polys_flags = 0; + std::vector spec_polys; + bool hit_result = false; - bool ret = room->map_instance->Raycast(0, start, end, hit_point, hit_result); + bool ret = room->map_instance->RaycastEx(start, end, hit_point, hit_result, same_polys_flags, spec_polys); if (ret) { room->map_instance->UnScale(hit_point); GetMutablePos().FromGlmVec3(hit_point); } room->grid_service->MoveCreature(this); - CheckSpecObject(); + //CheckSpecObject(); GetMovement()->ClearPath(); } diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 17d35d1c..01217120 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -223,7 +223,7 @@ class Creature : public MoveableEntity bool HasSpecMove(); void _UpdateSpecMove(); - void CheckSpecObject(); + void CheckSpecObject(int new_poly_flags); void SummonObstacle(Buff* buff, int id, const Position& target_pos); void SummonHero(Buff* buff, const Position& pos, const glm::vec3& dir); void FillSkillCasterState(SkillCasterState* caster_state); diff --git a/server/gameserver/mapinstance.cc b/server/gameserver/mapinstance.cc index b2c451d2..3db1c48b 100644 --- a/server/gameserver/mapinstance.cc +++ b/server/gameserver/mapinstance.cc @@ -210,7 +210,7 @@ int MapInstance::AllocUniid() return current_uniid_; } -int MapInstance::FindStraightPath(int layer, +int MapInstance::FindStraightPath( const glm::vec3& start, const glm::vec3& end, std::vector& paths) @@ -292,8 +292,7 @@ int MapInstance::FindStraightPath(int layer, return pos; } -int MapInstance::FindRandomPointAroundCircle(int layer, - const glm::vec3& center_pos, +int MapInstance::FindRandomPointAroundCircle(const glm::vec3& center_pos, float max_radius, glm::vec3& random_pt) { @@ -337,7 +336,7 @@ int MapInstance::FindRandomPointAroundCircle(int layer, } } -bool MapInstance::Raycast(int layer, const glm::vec3& start, const glm::vec3& end, +bool MapInstance::Raycast(const glm::vec3& start, const glm::vec3& end, glm::vec3& hit_point, bool& hit_result) { float spos[3]; @@ -591,7 +590,7 @@ void MapInstance::MarkMapAreaPolys() } } -bool MapInstance::RaycastEx(int layer, const glm::vec3& start, const glm::vec3& end, +bool MapInstance::RaycastEx(const glm::vec3& start, const glm::vec3& end, glm::vec3& hit_point, bool& hit_result, int& same_polys_flags, std::vector& spec_polys) { @@ -695,3 +694,8 @@ bool MapInstance::RaycastEx(int layer, const glm::vec3& start, const glm::vec3& return true; } + +int MapInstance::GetPolyFlags(Creature* c, int same_polys_flags, const std::vector& spec_polys) +{ + +} diff --git a/server/gameserver/mapinstance.h b/server/gameserver/mapinstance.h index 68dc0472..ed1fff23 100644 --- a/server/gameserver/mapinstance.h +++ b/server/gameserver/mapinstance.h @@ -26,17 +26,15 @@ class MapInstance : public std::enable_shared_from_this dtNavMesh* GetNavMesh() { return navmesh_; }; dtNavMeshQuery* GetNavMeshQuery() { return navmesh_query_; }; - int FindStraightPath(int layer, - const glm::vec3& start, + int FindStraightPath(const glm::vec3& start, const glm::vec3& end, std::vector& paths); - int FindRandomPointAroundCircle(int layer, - const glm::vec3& center_pos, + int FindRandomPointAroundCircle(const glm::vec3& center_pos, float max_radius, glm::vec3& random_pt); - bool Raycast(int layer, const glm::vec3& start, const glm::vec3& end, + bool Raycast(const glm::vec3& start, const glm::vec3& end, glm::vec3& hit_point, bool& hit_result); - bool RaycastEx(int layer, const glm::vec3& start, const glm::vec3& end, + bool RaycastEx(const glm::vec3& start, const glm::vec3& end, glm::vec3& hit_point, bool& hit_result, int& same_polys_flags, std::vector& spec_polys); bool FindNearestPoint(const glm::vec3& center, float radius, glm::vec3& nearestPt); @@ -45,6 +43,7 @@ class MapInstance : public std::enable_shared_from_this void Scale(glm::vec3& v); void UnScale(glm::vec3& v); glm::vec3 UnScaleEx(const glm::vec3& v); + int GetPolyFlags(Creature* c, int same_polys_flags, const std::vector& spec_polys); private: void CreateThings(); diff --git a/server/gameserver/movement.cc b/server/gameserver/movement.cc index caba68ff..2dcd036e 100644 --- a/server/gameserver/movement.cc +++ b/server/gameserver/movement.cc @@ -27,7 +27,7 @@ bool Movement::UpdatePosition() { curr_point.curr_pos.AddGlmVec3(curr_point.dir * owner_->GetSpeed()); owner_->SetPos(curr_point.curr_pos); - owner_->CheckSpecObject(); + //owner_->CheckSpecObject(); } if (owner_->GetPos().Distance2D2(curr_point.src_pos) - curr_point.distance >= 0.0001f) { curr_point.tar_pos.y = curr_point.curr_pos.y; @@ -83,7 +83,7 @@ void Movement::CalcTargetPos(float distance) glm::vec3 hit_point; owner_->room->map_instance->Scale(start); owner_->room->map_instance->Scale(end); - bool ret = owner_->room->map_instance->Raycast(0, start, end, hit_point, hit_result); + bool ret = owner_->room->map_instance->Raycast(start, end, hit_point, hit_result); if (ret) { owner_->room->map_instance->UnScale(hit_point); point.tar_pos.FromGlmVec3(hit_point);