This commit is contained in:
aozhiwei 2024-03-05 19:38:15 +08:00
parent 3155c9edaf
commit 2eb1c62333
3 changed files with 43 additions and 28 deletions

View File

@ -1554,25 +1554,27 @@ void CallFuncBuff::BatchRandomPosSummonObstacle()
glm::vec3 center = glm::vec3(x, y, z); glm::vec3 center = glm::vec3(x, y, z);
for (int i = 0; i < num; ++i) { for (int i = 0; i < num; ++i) {
glm::vec3 out_point = center; glm::vec3 out_point = center;
owner->room->map_instance->RandPoint(center, range, out_point); bool ret = owner->room->map_instance->RandPoint(center, range, out_point);
Obstacle* ob = owner->SummonObstacle(this, if (ret) {
id, Obstacle* ob = owner->SummonObstacle(this,
out_point, id,
owner->GetAttackDir()); out_point,
if (ob) { owner->GetAttackDir());
std::shared_ptr<std::vector<float>> vars = std::make_shared<std::vector<float>>(); if (ob) {
vars->push_back(ob->GetUniId()); std::shared_ptr<std::vector<float>> vars = std::make_shared<std::vector<float>>();
vars->push_back(ob->GetPos().GetX()); vars->push_back(ob->GetUniId());
vars->push_back(ob->GetPos().GetY()); vars->push_back(ob->GetPos().GetX());
vars->push_back(ob->GetPos().GetZ()); vars->push_back(ob->GetPos().GetY());
for (int buff_id : meta->_buff_param8_int_list) { vars->push_back(ob->GetPos().GetZ());
owner->TryAddBuff( for (int buff_id : meta->_buff_param8_int_list) {
GetCaster().Get(), owner->TryAddBuff(
buff_id, GetCaster().Get(),
skill_meta, buff_id,
init_args, skill_meta,
vars init_args,
); vars
);
}
} }
} }
} }

View File

@ -972,16 +972,19 @@ void Creature::DoSkill(int skill_id,
if (skill->GetMinorType()) { if (skill->GetMinorType()) {
auto old_context_dir = context_dir; auto old_context_dir = context_dir;
auto old_context_pos = context_pos; auto old_context_pos = context_pos;
context_dir = skill_dir_; context_dir = skill_dir;
context_pos = GetPos(); context_pos = GetPos();
context_pos.AddGlmVec3(skill_dir_ * skill_distance); context_pos.AddGlmVec3(skill_dir * skill_distance);
#ifdef MYDEBUG #ifdef MYDEBUG
a8::XPrintf("skill_dir:%f %f %f skill_distance:%f\n", a8::XPrintf("skill_dir:%f %f %f skill_distance:%f skill_target_pos:%f %f %f\n",
{ {
skill_dir_.x, skill_dir.x,
skill_dir_.y, skill_dir.y,
skill_dir_.z, skill_dir.z,
skill_distance skill_distance,
context_pos.GetX(),
context_pos.GetY(),
context_pos.GetZ(),
}); });
#endif #endif
SetAttackDir(skill_dir); SetAttackDir(skill_dir);

View File

@ -369,10 +369,20 @@ bool MapInstance::RandPoint(const glm::vec3& center, float range, glm::vec3& out
glm::vec3 start = center; glm::vec3 start = center;
glm::vec3 dir = GlmHelper::UP; glm::vec3 dir = GlmHelper::UP;
GlmHelper::RotateY(dir, (10 + rand() % 360)/ 180.0f); GlmHelper::RotateY(dir, glm::radians(1.0f + (float)(rand() % 360)));
GlmHelper::Normalize(dir); GlmHelper::Normalize(dir);
glm::vec3 end = center + dir * range; glm::vec3 end = center + dir * (float)(rand() % (int)std::max(1.0f, range));
out_point = center;
#ifdef MYDEBUG
a8::XPrintf("MapInstance::RandPoint:%f %f %f\n",
{
out_point.x,
out_point.y,
out_point.z,
});
#endif
return true;
Scale(start); Scale(start);
Scale(end); Scale(end);
if (Raycast if (Raycast