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);
|
RemoveBuffByEffectId(kBET_Camouflage);
|
||||||
}
|
}
|
||||||
DoSkillPostProc(true, skill_id, target_id, target_pos);
|
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 {
|
} else {
|
||||||
DoSkillPostProc(false, skill_id, target_id, target_pos);
|
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)
|
void FrameEvent::AddHpChg(Human* sender)
|
||||||
{
|
{
|
||||||
chged_hps_.push_back(sender);
|
chged_hps_.push_back(sender);
|
||||||
@ -325,6 +347,9 @@ void FrameEvent::Clear()
|
|||||||
if (!smokes_.empty()) {
|
if (!smokes_.empty()) {
|
||||||
smokes_.clear();
|
smokes_.clear();
|
||||||
}
|
}
|
||||||
|
if (!play_skills_.empty()) {
|
||||||
|
play_skills_.clear();
|
||||||
|
}
|
||||||
if (!emotes_.empty()) {
|
if (!emotes_.empty()) {
|
||||||
emotes_.clear();
|
emotes_.clear();
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ public:
|
|||||||
float fly_distance);
|
float fly_distance);
|
||||||
void AddExplosion(Bullet* bullet, int item_id, a8::Vec2 bomb_pos);
|
void AddExplosion(Bullet* bullet, int item_id, a8::Vec2 bomb_pos);
|
||||||
void AddSmoke(Bullet* bullet, int item_id, a8::Vec2 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 AddExplosionEx(CreatureWeakPtr& sender, int item_id, a8::Vec2 bomb_pos, int effect);
|
||||||
void AddBulletNumChg(Human* hum);
|
void AddBulletNumChg(Human* hum);
|
||||||
void AddHpChg(Human* hum);
|
void AddHpChg(Human* hum);
|
||||||
@ -42,6 +43,7 @@ private:
|
|||||||
std::vector<std::tuple<Creature*, ::cs::MFBullet>> bullets_;
|
std::vector<std::tuple<Creature*, ::cs::MFBullet>> bullets_;
|
||||||
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFExplosion>> explosions_;
|
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFExplosion>> explosions_;
|
||||||
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFSmoke>> smokes_;
|
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::MFEmote>> emotes_;
|
||||||
std::vector<std::tuple<Creature*, ::cs::MFBuffChg>> chged_buffs_;
|
std::vector<std::tuple<Creature*, ::cs::MFBuffChg>> chged_buffs_;
|
||||||
std::vector<std::tuple<Human*, int, int>> chged_items_;
|
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_) {
|
for (size_t idx : hum->emotes_) {
|
||||||
if (idx < room->frame_event.emotes_.size()) {
|
if (idx < room->frame_event.emotes_.size()) {
|
||||||
auto& tuple = room->frame_event.emotes_[idx];
|
auto& tuple = room->frame_event.emotes_[idx];
|
||||||
|
@ -2029,6 +2029,9 @@ void Human::ClearFrameData()
|
|||||||
if (!smokes_.empty()) {
|
if (!smokes_.empty()) {
|
||||||
smokes_.clear();
|
smokes_.clear();
|
||||||
}
|
}
|
||||||
|
if (!play_skills_.empty()) {
|
||||||
|
play_skills_.clear();
|
||||||
|
}
|
||||||
if (!emotes_.empty()) {
|
if (!emotes_.empty()) {
|
||||||
emotes_.clear();
|
emotes_.clear();
|
||||||
}
|
}
|
||||||
|
@ -308,6 +308,7 @@ protected:
|
|||||||
std::vector<int> emotes_;
|
std::vector<int> emotes_;
|
||||||
std::vector<int> bullets_;
|
std::vector<int> bullets_;
|
||||||
std::vector<int> smokes_;
|
std::vector<int> smokes_;
|
||||||
|
std::vector<int> play_skills_;
|
||||||
std::vector<int> explosions_;
|
std::vector<int> explosions_;
|
||||||
std::vector<int> chged_buffs_;
|
std::vector<int> chged_buffs_;
|
||||||
std::set<Human*> observers_;
|
std::set<Human*> observers_;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user