diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 9763dbf..5d07bca 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -64,6 +64,13 @@ void InternalShot(Creature* c, is_tank_skin); } } + if (weapon_meta->i->recoil_force() > 0.000001) { + a8::Vec2 old_move_dir = c->move_dir; + c->MustBeAddBuff(c, kRecoilBuffId); + c->move_dir = c->attack_dir * -1; + c->_UpdateMove(weapon_meta->i->recoil_force()); + c->move_dir = old_move_dir; + } } Creature::Creature():MoveableEntity() diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 829856d..0b579c9 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -111,14 +111,13 @@ class Creature : public MoveableEntity void AddInventory(int slot_id, int num); void DecInventory(int slot_id, int num); std::array& GetInventoryData() { return inventory_; }; - + virtual void _UpdateMove(int speed) {}; private: virtual void AddBuffPostProc(Creature* caster, Buff* buff); virtual void OnBuffRemove(const Buff& buff); virtual void DoSkillPreProc(int skill_id, int target_id, const a8::Vec2& target_pos); virtual void DoSkillPostProc(bool used, int skill_id, int target_id, const a8::Vec2& target_pos); - virtual void _UpdateMove(int speed) {}; void UpdateSkill(); void ProcSkillPhase(MetaData::SkillPhase* phase);