From 0b0c5801ab6efa010146e152d80e03744ae60c5f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 16 Jul 2019 13:30:25 +0800 Subject: [PATCH] 1 --- server/gameserver/frameevent.cc | 6 +++++- server/gameserver/frameevent.h | 2 +- server/gameserver/human.cc | 23 ++++++++++++++--------- server/gameserver/metadata.cc | 4 ++-- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/server/gameserver/frameevent.cc b/server/gameserver/frameevent.cc index 39cb8d4..55ae929 100644 --- a/server/gameserver/frameevent.cc +++ b/server/gameserver/frameevent.cc @@ -57,7 +57,8 @@ void FrameEvent::AddShot(Human* hum) } } -void FrameEvent::AddBullet(Human* hum, a8::Vec2 born_pos, a8::Vec2 dir, float fly_distance, int hit_time) +void FrameEvent::AddBullet(Human* hum, a8::Vec2 born_pos, a8::Vec2 dir, float fly_distance, + int hit_time, int target_id) { { auto& tuple = a8::FastAppend(bullets_); @@ -77,6 +78,9 @@ void FrameEvent::AddBullet(Human* hum, a8::Vec2 born_pos, a8::Vec2 dir, float fl if (hit_time != 0) { p.set_hit_time(hit_time); } + if (target_id != 0) { + p.set_target_id(target_id); + } } { int bullet_idx = bullets_.size() - 1; diff --git a/server/gameserver/frameevent.h b/server/gameserver/frameevent.h index 93a803a..701eba6 100644 --- a/server/gameserver/frameevent.h +++ b/server/gameserver/frameevent.h @@ -15,7 +15,7 @@ public: void AddAirDrop(int appear_time, int box_id, a8::Vec2 box_pos); void AddEmote(Human* hum, int emote_id); void AddShot(Human* hum); - void AddBullet(Human* hum, a8::Vec2 born_pos, a8::Vec2 dir, float fly_distance, int hit_time); + void AddBullet(Human* hum, a8::Vec2 born_pos, a8::Vec2 dir, float fly_distance, int hit_time, int target_id = 0); void AddExplosion(int item_id, a8::Vec2 bomb_pos, int effect); void AddSmoke(Bullet* bullet, int item_id, a8::Vec2 pos); void AddDead(Human* hum); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 12bb741..159444c 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -245,7 +245,11 @@ void Human::DirectShot(MetaData::Equip* bullet_meta) if (bullet_meta->i->equip_subtype() == BulletType_Missile) { hit_time = bullet_meta->i->time() * 1000; } - room->frame_event.AddBullet(this, bullet_born_pos, attack_dir, fly_distance, hit_time); + if (bullet_meta->i->equip_subtype() == BulletType_Missile) { + room->frame_event.AddBullet(this, bullet_born_pos, attack_dir, fly_distance, hit_time, skill_target_id); + } else { + room->frame_event.AddBullet(this, bullet_born_pos, attack_dir, fly_distance, hit_time); + } if (room->BattleStarted()) { if (bullet_meta->i->equip_subtype() != BulletType_Missile) { room->CreateBullet(this, bullet_meta, bullet_born_pos, bullet_dir, fly_distance); @@ -714,6 +718,7 @@ void Human::DoSkill() OnAttack(); } use_skill = false; + need_sync_active_player = true; } void Human::FindLocation() @@ -1944,7 +1949,7 @@ void Human::ProcSkillPhase(MetaData::SkillPhase* phase) if (sender && bullet_meta) { Human* target = sender->room->GetHumanByUniId(param.param2); if (target && !target->dead) { - + target->DecHP(10, sender->entity_uniid, sender->name, bullet_meta->i->id()); } } }; @@ -1993,13 +1998,13 @@ void Human::ProcSkillPhase(MetaData::SkillPhase* phase) if (bullet_meta) { DirectShot(bullet_meta); if (bullet_meta->i->equip_subtype() == BulletType_Missile) { - room->xtimer.AddRepeatTimerAndAttach(bullet_meta->i->time() * SERVER_FRAME_RATE, - a8::XParams() - .SetSender(this) - .SetParam1(phase->param1.GetInt()) - .SetParam2(skill_target_id), - missile_trace_func, - &xtimer_attacher.timer_list_); + room->xtimer.AddDeadLineTimerAndAttach(bullet_meta->i->time() * SERVER_FRAME_RATE, + a8::XParams() + .SetSender(this) + .SetParam1(phase->param1.GetInt()) + .SetParam2(skill_target_id), + missile_trace_func, + &xtimer_attacher.timer_list_); } } } diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index dfbb58c..f749a80 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -357,11 +357,11 @@ namespace MetaData if (!buff_meta) { abort(); } - auto itr = trigger_type_buffs.find(buff_meta->i->buff_id()); + auto itr = trigger_type_buffs.find(buff_meta->i->trigger_type()); if (itr != trigger_type_buffs.end()) { itr->second.insert(buff_meta); } else { - trigger_type_buffs[buff_meta->i->buff_id()] = std::set({buff_meta}); + trigger_type_buffs[buff_meta->i->trigger_type()] = std::set({buff_meta}); } } }