This commit is contained in:
aozhiwei 2021-04-02 15:46:18 +08:00
parent cf21189e97
commit d990234c4b
6 changed files with 44 additions and 0 deletions

View File

@ -472,6 +472,11 @@ void Creature::DoSkill(int skill_id, int target_id, const a8::Vec2& skill_dir, c
RemoveBuffByEffectId(kBET_Camouflage);
}
DoSkillPostProc(true, skill_id, target_id, target_pos);
if (skill_id != TURN_OVER_SKILL_ID) {
CreatureWeakPtr ptr;
ptr.Attach(this);
room->frame_event.AddPlaySkill(ptr, skill_id);
}
} else {
DoSkillPostProc(false, skill_id, target_id, target_pos);
}

View File

@ -160,6 +160,28 @@ void FrameEvent::AddSmoke(Bullet* bullet, int item_id, a8::Vec2 pos)
}
}
void FrameEvent::AddPlaySkill(CreatureWeakPtr& sender, int skill_id)
{
if (!sender.Get()) {
return;
}
{
auto& tuple = a8::FastAppend(play_skills_);
std::get<0>(tuple).Attach(sender.Get());
auto& p = std::get<1>(tuple);
p.set_skill_id(skill_id);
}
{
int idx = play_skills_.size() - 1;
sender.Get()->TouchAllLayerHumanList
(
[idx] (Human* hum, bool& stop)
{
hum->play_skills_.push_back(idx);
});
}
}
void FrameEvent::AddHpChg(Human* sender)
{
chged_hps_.push_back(sender);
@ -325,6 +347,9 @@ void FrameEvent::Clear()
if (!smokes_.empty()) {
smokes_.clear();
}
if (!play_skills_.empty()) {
play_skills_.clear();
}
if (!emotes_.empty()) {
emotes_.clear();
}

View File

@ -22,6 +22,7 @@ public:
float fly_distance);
void AddExplosion(Bullet* bullet, int item_id, a8::Vec2 bomb_pos);
void AddSmoke(Bullet* bullet, int item_id, a8::Vec2 pos);
void AddPlaySkill(CreatureWeakPtr& sender, int skill_id);
void AddExplosionEx(CreatureWeakPtr& sender, int item_id, a8::Vec2 bomb_pos, int effect);
void AddBulletNumChg(Human* hum);
void AddHpChg(Human* hum);
@ -42,6 +43,7 @@ private:
std::vector<std::tuple<Creature*, ::cs::MFBullet>> bullets_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFExplosion>> explosions_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFSmoke>> smokes_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFPlaySkill>> play_skills_;
std::vector<std::tuple<Creature*, ::cs::MFEmote>> emotes_;
std::vector<std::tuple<Creature*, ::cs::MFBuffChg>> chged_buffs_;
std::vector<std::tuple<Human*, int, int>> chged_items_;

View File

@ -96,6 +96,14 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum)
}
}
}
for (size_t idx : hum->play_skills_) {
if (idx < room->frame_event.play_skills_.size()) {
auto& tuple = room->frame_event.play_skills_[idx];
if (std::get<0>(tuple).Get() && hum->CanSee(std::get<0>(tuple).Get())) {
*msg->add_play_skill_list() = std::get<1>(tuple);
}
}
}
for (size_t idx : hum->emotes_) {
if (idx < room->frame_event.emotes_.size()) {
auto& tuple = room->frame_event.emotes_[idx];

View File

@ -2029,6 +2029,9 @@ void Human::ClearFrameData()
if (!smokes_.empty()) {
smokes_.clear();
}
if (!play_skills_.empty()) {
play_skills_.clear();
}
if (!emotes_.empty()) {
emotes_.clear();
}

View File

@ -308,6 +308,7 @@ protected:
std::vector<int> emotes_;
std::vector<int> bullets_;
std::vector<int> smokes_;
std::vector<int> play_skills_;
std::vector<int> explosions_;
std::vector<int> chged_buffs_;
std::set<Human*> observers_;