1
This commit is contained in:
parent
c0bf8c6732
commit
ba5229b31e
@ -339,7 +339,7 @@ void Creature::DoSkill(int skill_id, int target_id, const a8::Vec2& target_pos)
|
||||
if (CanUseSkill(skill_id)) {
|
||||
ResetSkill();
|
||||
playing_skill = true;
|
||||
last_use_skill_frameno_ = room->GetFrameNo();
|
||||
CurrentSkill()->last_use_frameno = room->GetFrameNo();
|
||||
if (skill_meta_->i->skill_target() == kST_Self
|
||||
) {
|
||||
skill_target_id_ = GetEntityUniId();
|
||||
@ -391,7 +391,7 @@ void Creature::UpdateSkill()
|
||||
if (skill_meta_) {
|
||||
if (curr_skill_phase < skill_meta_->phases.size()) {
|
||||
MetaData::SkillPhase* phase = &skill_meta_->phases[curr_skill_phase];
|
||||
if (phase->time_offset >= (int)((room->GetFrameNo() - last_use_skill_frameno_) * FRAME_RATE_MS)) {
|
||||
if (phase->time_offset >= CurrentSkill()->GetLeftTime()) {
|
||||
ProcSkillPhase(phase);
|
||||
++curr_skill_phase;
|
||||
}
|
||||
@ -455,3 +455,13 @@ void Creature::ProcSkillPhase(MetaData::SkillPhase* phase)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
MetaData::SkillPhase* Creature::GetCurrSkillPhase()
|
||||
{
|
||||
return curr_skill_phase < skill_meta_->phases.size() ? &skill_meta_->phases[curr_skill_phase] : nullptr;
|
||||
}
|
||||
|
||||
Skill* Creature::CurrentSkill()
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -51,19 +51,21 @@ class Creature : public MoveableEntity
|
||||
virtual bool CanUseSkill(int skill_id);
|
||||
void DoSkill(int skill_id, int target_id, const a8::Vec2& target_pos);
|
||||
void ResetSkill();
|
||||
Skill* CurrentSkill();
|
||||
MetaData::SkillPhase* GetCurrSkillPhase();
|
||||
|
||||
protected:
|
||||
size_t curr_skill_phase = 0;
|
||||
a8::Vec2 skill_dir;
|
||||
float skill_param1 = 0;
|
||||
bool playing_skill = false;
|
||||
int skill_target_id_ = 0;
|
||||
a8::Vec2 skill_target_pos_;
|
||||
|
||||
#if 0
|
||||
long long last_use_skill_frameno_ = 0;
|
||||
#endif
|
||||
a8::XTimerAttacher skill_xtimer_attacher_;
|
||||
MetaData::Skill* skill_meta_ = nullptr;
|
||||
std::map<int, Skill*> skill_hash_;
|
||||
|
||||
private:
|
||||
|
||||
@ -82,5 +84,7 @@ private:
|
||||
std::array<Buff*, kBET_End> buff_effect_ = {};
|
||||
std::list<Buff> buff_list_;
|
||||
|
||||
size_t curr_skill_phase = 0;
|
||||
std::map<int, Skill*> skill_hash_;
|
||||
std::map<MetaData::Skill*, xtimer_list*> passive_skill_metas_;
|
||||
};
|
||||
|
@ -2908,11 +2908,6 @@ Skin* Human::GetSkinByIdx(int idx)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
MetaData::Skill* Human::CurrentSkillMeta()
|
||||
{
|
||||
return skill_meta_;
|
||||
}
|
||||
|
||||
void Human::TriggerOneObjectBuff(Entity* target, BuffTriggerType_e trigger_type)
|
||||
{
|
||||
if (!target->IsEntityType(ET_Player)) {
|
||||
@ -2984,16 +2979,17 @@ void Human::AddBuffPostProc(Creature* caster, Buff* buff)
|
||||
break;
|
||||
case kBET_TurnOver:
|
||||
{
|
||||
if (curr_skill_phase < skill_meta_->phases.size()) {
|
||||
MetaData::SkillPhase* phase = &skill_meta_->phases[curr_skill_phase];
|
||||
if (phase->time_offset >= (int)((room->GetFrameNo() - last_use_skill_frameno_) * FRAME_RATE_MS)) {
|
||||
if (HasBuffEffect(kBET_Car)) {
|
||||
_UpdateMove(phase->param1.GetDouble() * 1.5);
|
||||
} else {
|
||||
_UpdateMove(phase->param1);
|
||||
}
|
||||
MetaData::SkillPhase* phase = GetCurrSkillPhase();
|
||||
#if 0
|
||||
if (phase &&
|
||||
phase->time_offset >= (int)((room->GetFrameNo() - last_use_skill_frameno_) * FRAME_RATE_MS)) {
|
||||
if (HasBuffEffect(kBET_Car)) {
|
||||
_UpdateMove(phase->param1.GetDouble() * 1.5);
|
||||
} else {
|
||||
_UpdateMove(phase->param1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case kBET_Camouflage:
|
||||
|
@ -194,7 +194,6 @@ class Human : public Creature
|
||||
void DoJump();
|
||||
virtual bool CanUseSkill(int skill_id) override;
|
||||
virtual int SelectSkillId();
|
||||
MetaData::Skill* CurrentSkillMeta();
|
||||
void DoGetOn(int obj_uniid);
|
||||
void DoGetDown();
|
||||
void FindLocation();
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include "room.h"
|
||||
#include "metamgr.h"
|
||||
#include "player.h"
|
||||
#include "skill.h"
|
||||
|
||||
const int SHUA_RANGE = 580;
|
||||
|
||||
@ -191,8 +192,8 @@ void ZombieModeAI::UpdateAttack()
|
||||
float distance = myself->GetPos().Distance(node_->target->GetPos());
|
||||
if (distance > GetAttackRange()) {
|
||||
if (myself->CanUseSkill(myself->SelectSkillId()) &&
|
||||
myself->CurrentSkillMeta()->i->skill_id() != TURN_OVER_SKILL_ID &&
|
||||
distance < myself->CurrentSkillMeta()->i->skill_distance()) {
|
||||
myself->CurrentSkill()->meta->i->skill_id() != TURN_OVER_SKILL_ID &&
|
||||
distance < myself->CurrentSkill()->meta->i->skill_distance()) {
|
||||
DoSkill();
|
||||
} else if (node_->ai_meta->i->pursuit_radius() <= 0) {
|
||||
//站桩
|
||||
|
Loading…
x
Reference in New Issue
Block a user