1
This commit is contained in:
parent
cf21189e97
commit
d990234c4b
@ -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);
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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_;
|
||||
|
@ -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];
|
||||
|
@ -2029,6 +2029,9 @@ void Human::ClearFrameData()
|
||||
if (!smokes_.empty()) {
|
||||
smokes_.clear();
|
||||
}
|
||||
if (!play_skills_.empty()) {
|
||||
play_skills_.clear();
|
||||
}
|
||||
if (!emotes_.empty()) {
|
||||
emotes_.clear();
|
||||
}
|
||||
|
@ -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_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user