diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index e1ebff17..b614b26a 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -147,6 +147,11 @@ void CallFuncBuff::Activate() ClearSummonObstacle(); } break; + case BuffCallFunc_e::kResetSkillCd: + { + ResetSkillCd(); + } + break; default: { } @@ -775,3 +780,12 @@ void CallFuncBuff::ClearSummonObstacle() float num = meta->GetBuffParam3(this); owner->RemoveSurplusObstacle(id, num); } + +void CallFuncBuff::ResetSkillCd() +{ + int skill_id = meta->_int_buff_param2; + Skill* skill = owner->GetSkill(skill_id); + if (skill) { + skill->ResetSkillCd(); + } +} diff --git a/server/gameserver/buff/callfunc.h b/server/gameserver/buff/callfunc.h index e79d17ee..86d5d393 100644 --- a/server/gameserver/buff/callfunc.h +++ b/server/gameserver/buff/callfunc.h @@ -24,6 +24,7 @@ A8_DECLARE_CLASS_ENUM(BuffCallFunc_e, int, kSummonObstacleSepcPoint = 24, kSummonObstacleSpecDistance = 25, kClearSummonObstacle = 26, + kResetSkillCd = 27 ); @@ -51,6 +52,7 @@ class CallFuncBuff : public Buff void SummonObstacleSpecPoint(); void SummonObstacleSpecDistance(); void ClearSummonObstacle(); + void ResetSkillCd(); float hold_param2_ = 0.0; }; diff --git a/server/gameserver/gridcell.cc b/server/gameserver/gridcell.cc index 9958e264..ada7687f 100644 --- a/server/gameserver/gridcell.cc +++ b/server/gameserver/gridcell.cc @@ -13,9 +13,11 @@ GridCell::GridCell() { entitys_.reserve(MAX_ROOM_IDX); creatures_.reserve(MAX_ROOM_IDX); + obstacles_.reserve(MAX_ROOM_IDX); for (int i = 0; i < MAX_ROOM_IDX; ++i) { entitys_.push_back(std::set()); creatures_.push_back(std::set()); + obstacles_.push_back(std::set()); } } @@ -24,6 +26,7 @@ void GridCell::ClearRoomData(Room* room) { entitys_[room->GetRoomIdx()].clear(); creatures_[room->GetRoomIdx()].clear(); + obstacles_[room->GetRoomIdx()].clear(); } void GridCell::TraverseHumanList(std::function func, diff --git a/server/gameserver/mapinstance.cc b/server/gameserver/mapinstance.cc index 71a8f63a..f0bb6c12 100644 --- a/server/gameserver/mapinstance.cc +++ b/server/gameserver/mapinstance.cc @@ -529,6 +529,7 @@ void MapInstance::MarkMapAreaPolys() int ext_flag = 0; dtPoly* poly = &tile->polys[i]; if ((poly->flags & SAMPLE_POLYFLAGS_SWIM) == SAMPLE_POLYFLAGS_SWIM) { + #if 0 const mt::MapArea* last_area_meta = nullptr; for (int ii = 0; ii < poly->vertCount; ++ii) { const float* vc = &tile->verts[poly->verts[ii]*3]; @@ -573,6 +574,7 @@ void MapInstance::MarkMapAreaPolys() } break; } + #endif } else if ((poly->flags & SAMPLE_POLYFLAGS_GLASS) == SAMPLE_POLYFLAGS_GLASS) { for (int ii = 0; ii < poly->vertCount; ++ii) { const float* vc = &tile->verts[poly->verts[ii]*3]; diff --git a/server/gameserver/netdata.cc b/server/gameserver/netdata.cc index e406d4a1..f9e6f1d5 100644 --- a/server/gameserver/netdata.cc +++ b/server/gameserver/netdata.cc @@ -976,7 +976,7 @@ float BattleDataContext::GetBrainLifePct() float BattleDataContext::GetSkillCdPct() { - return hero_ability_->GetSkillCdPct(); + return hero_ability_->GetSkillCdPct() + owner_.Get()->GetAbility()->GetAttrAddition(kHAT_SkillTime); } float BattleDataContext::GetRescueTimePct() diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 82e5d09f..73fa9a34 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -58,7 +58,7 @@ int Skill::GetCd() meta->skill_type() == kPassiveSkill) { return meta->skill_cd() * 1000; } else { - return meta->skill_cd() * 1000 * (1 + owner->GetBattleContext()->GetSkillCdPct()); + return meta->skill_cd() * 1000 * (1 - owner->GetBattleContext()->GetSkillCdPct()); } }