From 4979413751b4f6df4455960612e58a897ad14e33 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 14 Apr 2021 10:52:00 +0800 Subject: [PATCH 01/13] 1 --- server/gameserver/human.cc | 1 + server/tools/protobuild/cs_proto.proto | 1 + 2 files changed, 2 insertions(+) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 6a5f1244..b0d688d6 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -248,6 +248,7 @@ void Human::FillMFPlayerStats(cs::MFPlayerStats* stats_pb) stats_pb->set_player_avatar_url(avatar_url); stats_pb->set_charid(meta->i->id()); stats_pb->set_team_id(team_id); + stats_pb->set_nickname(name); if (!dead) { stats_pb->set_time_alive(room->GetFrameNo() * 1000.0f / SERVER_FRAME_RATE); diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 9fbfd35e..59ad856e 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -669,6 +669,7 @@ message MFPlayerStats optional int32 sex = 37 [default = 0]; //性别 optional int32 charid = 38; //人物id optional int32 team_id = 39; //tamid + optional string nickname = 43; //昵称 } //空投 From d8bceb939870b39201b442dd0c2188fc51eea449 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 14 Apr 2021 11:24:09 +0800 Subject: [PATCH 02/13] 1 --- server/gameserver/creature.cc | 7 +++++++ server/gameserver/creature.h | 1 + server/gameserver/room.cc | 1 + server/gameserver/skill.cc | 8 ++++++++ server/gameserver/skill.h | 1 + 5 files changed, 18 insertions(+) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 04ef1854..6d8ba0d4 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1466,3 +1466,10 @@ void Creature::SetCurrWeapon(Weapon* weapon) #endif curr_weapon_ = weapon; } + +void Creature::ResetAllSkillCd() +{ + for (auto& pair : skill_hash_) { + pair.second->ResetSkillCd(); + } +} diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 1c4d5c37..f947c9e8 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -139,6 +139,7 @@ class Creature : public MoveableEntity Weapon* ChooseNextWeapon(int curr_weapon_slot_id, int begin_slot_id, int end_slot_id); Weapon* GetCurrWeapon() { return curr_weapon_; }; void SetCurrWeapon(Weapon* weapon); + void ResetAllSkillCd(); private: diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index d872b612..ceb0197b 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -1706,6 +1706,7 @@ void Room::ShuaPlane() for (auto& pair : human_hash_) { pair.second->MustBeAddBuff(pair.second, FLY_BUFFID); + pair.second->ResetAllSkillCd(); pair.second->SetPos(plane.curr_pos); pair.second->attack_dir = plane.dir; pair.second->SetMoveDir(plane.dir); diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 971770fc..4a59ad89 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -132,3 +132,11 @@ void Skill::NotifySkillState() owner->room->frame_event.AddSkillCurrTimesChg(owner->AllocWeakPtr(), meta->i->skill_id(), GetCurrTimes()); } } + +void Skill::ResetSkillCd() +{ + curr_times_ = 0; + if (inc_times_timer_) { + owner->room->xtimer.ModifyTimer(inc_times_timer_, GetCd() / FRAME_RATE_MS); + } +} diff --git a/server/gameserver/skill.h b/server/gameserver/skill.h index 117f8b7a..56949d96 100644 --- a/server/gameserver/skill.h +++ b/server/gameserver/skill.h @@ -34,6 +34,7 @@ class Skill int GetMaxTimes(); void DecTimes(); void FillMFSkill(cs::MFSkill* skill_pb); + void ResetSkillCd(); void ClearPassiveSkillBuff(); void AddPassiveSkillBuff(); From 737e6fd80f4e29d20f4c4b19f0a9e957fc62e038 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 14 Apr 2021 13:04:49 +0800 Subject: [PATCH 03/13] 1 --- third_party/a8engine | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/a8engine b/third_party/a8engine index 1bcc2495..2b5f0d3b 160000 --- a/third_party/a8engine +++ b/third_party/a8engine @@ -1 +1 @@ -Subproject commit 1bcc24955410e67342d5e44c2e35addff5111fca +Subproject commit 2b5f0d3b41e764d61181089b95c4fa568b1e1942 From 7cd4411ac22758fe902fe4cec0483620bf0bc457 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 14 Apr 2021 13:17:34 +0800 Subject: [PATCH 04/13] 1 --- server/gameserver/skill.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 4a59ad89..36a5f2e6 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -7,6 +7,7 @@ void Skill::Initialzie() { + curr_times_ = GetMaxTimes(); switch (meta->i->skill_type()) { case kActiveSkill: { @@ -135,8 +136,11 @@ void Skill::NotifySkillState() void Skill::ResetSkillCd() { - curr_times_ = 0; - if (inc_times_timer_) { - owner->room->xtimer.ModifyTimer(inc_times_timer_, GetCd() / FRAME_RATE_MS); + if (meta->i->skill_id() != TURN_OVER_SKILL_ID) { + curr_times_ = 0; + if (inc_times_timer_) { + owner->room->xtimer.ModifyTimer(inc_times_timer_, GetCd() / FRAME_RATE_MS); + NotifySkillState(); + } } } From 4b3dc61c9c8c2055c6651cc11a710e3dab4f6bc4 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 14 Apr 2021 15:16:37 +0800 Subject: [PATCH 05/13] 1 --- server/gameserver/mapmgr.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/gameserver/mapmgr.cc b/server/gameserver/mapmgr.cc index 375b3073..42b24c8c 100644 --- a/server/gameserver/mapmgr.cc +++ b/server/gameserver/mapmgr.cc @@ -51,7 +51,10 @@ void MapMgr::AttachRoom(Room* room, RoomInitInfo& init_info) if (!map_instance) { map_instance = RandMapInstance(init_info.room_mode); } else if (map_instance->GetMapMeta()->i->map_mode() != init_info.room_mode) { +#ifdef DEBUG +#else map_instance = RandMapInstance(init_info.room_mode); +#endif } if (!map_instance) { From 2b908fcba96565a9766ae38681faed628efd6b8e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 14 Apr 2021 16:07:27 +0800 Subject: [PATCH 06/13] 1 --- server/gameserver/metadata.cc | 11 +++++ server/gameserver/metadata.h | 1 + server/gameserver/room.cc | 54 ++++++++++++++++--------- server/gameserver/room.h | 1 + server/tools/protobuild/metatable.proto | 2 + 5 files changed, 50 insertions(+), 19 deletions(-) diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index dfbb4d4c..c2a69c05 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -80,6 +80,17 @@ namespace MetaData abort(); } } + first_safearea_center = a8::Vec2(i->map_width() / 2.0f, + i->map_height() / 2.0f); + if (!i->first_safearea_center().empty()) { + std::vector strings; + a8::Split(i->first_safearea_center(), strings, ':'); + if (strings.size() != 2) { + abort(); + } + first_safearea_center = a8::Vec2(a8::XValue(strings[0]).GetDouble(), + a8::XValue(strings[1]).GetDouble()); + } if (i->player() < 10) { abort(); } diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index 85bb08fe..c6d97906 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -28,6 +28,7 @@ namespace MetaData int refresh_robot_min_time = 0; int refresh_robot_max_time = 0; std::vector buff_list; + a8::Vec2 first_safearea_center; void Init(); std::string RandTemplate(); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index ceb0197b..01210fc7 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -1226,27 +1226,11 @@ void Room::UpdateGasMoving() } if (std::abs(gas_data_.gas_progress - gas_data_.rad_new) <= 0.001f) { int pre_area_id = gas_data_.new_area_meta->i->id(); - a8::Vec2 pre_pos = gas_data_.pos_new; if (!MetaMgr::Instance()->GetSafeArea(pre_area_id + 1)) { gas_data_.is_last_gas = true; return; } - gas_data_.gas_mode = GasWaiting; - gas_data_.old_area_meta = MetaMgr::Instance()->GetSafeArea(pre_area_id); - gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(pre_area_id + 1); - gas_data_.gas_progress = gas_data_.old_area_meta->i->rad(); - gas_data_.gas_start_frameno = GetFrameNo(); - gas_data_.pos_old = pre_pos; - gas_data_.pos_old_bk = gas_data_.pos_old; - { - bool gen_ok = GenSmallCircle(gas_data_.pos_old, - gas_data_.old_area_meta->i->rad(), - gas_data_.new_area_meta->i->rad(), - gas_data_.pos_new); - assert(gen_ok); - } - gas_data_.rad_old = gas_data_.old_area_meta->i->rad(); - gas_data_.rad_new = gas_data_.new_area_meta->i->rad(); + ForwardGasRing(1); if (!MetaMgr::Instance()->GetSafeArea(gas_data_.new_area_meta->i->id() + 2)) { #if 1 //最后一圈 @@ -1291,8 +1275,7 @@ void Room::UpdateGasJump() gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(map_meta_->i->safearea() + 1); gas_data_.gas_progress = gas_data_.old_area_meta->i->rad(); gas_data_.gas_start_frameno = GetFrameNo(); - gas_data_.pos_old = a8::Vec2(map_meta_->i->map_width() / 2.0f, - map_meta_->i->map_height() / 2.0f); + gas_data_.pos_old = map_meta_->first_safearea_center; gas_data_.pos_old_bk = gas_data_.pos_old; { bool gen_ok = GenSmallCircle(gas_data_.pos_old, @@ -1303,6 +1286,9 @@ void Room::UpdateGasJump() } gas_data_.rad_old = gas_data_.old_area_meta->i->rad(); gas_data_.rad_new = gas_data_.new_area_meta->i->rad(); + if (map_meta_->i->init_gas_ring() > 0) { + ForwardGasRing(map_meta_->i->init_gas_ring()); + } battle_start_frameno_ = GetFrameNo(); xtimer.DeleteTimer(auto_jump_timer_); auto_jump_timer_ = nullptr; @@ -3649,3 +3635,33 @@ void Room::InitAndroidAI() } #endif } + +void Room::ForwardGasRing(int n) +{ + while (n > 0) { + int pre_area_id = gas_data_.new_area_meta->i->id(); + if (!MetaMgr::Instance()->GetSafeArea(pre_area_id + 1)) { + gas_data_.is_last_gas = true; + return; + } + a8::Vec2 pre_pos = gas_data_.pos_new; + gas_data_.old_area_meta = MetaMgr::Instance()->GetSafeArea(pre_area_id); + gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(pre_area_id + 1); + gas_data_.gas_progress = gas_data_.old_area_meta->i->rad(); + gas_data_.gas_start_frameno = GetFrameNo(); + gas_data_.pos_old = pre_pos; + gas_data_.pos_old_bk = gas_data_.pos_old; + { + bool gen_ok = GenSmallCircle(gas_data_.pos_old, + gas_data_.old_area_meta->i->rad(), + gas_data_.new_area_meta->i->rad(), + gas_data_.pos_new); + if (!gen_ok) { + abort(); + } + } + gas_data_.rad_old = gas_data_.old_area_meta->i->rad(); + gas_data_.rad_new = gas_data_.new_area_meta->i->rad(); + --n; + } +} diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 06971266..3ef2d512 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -248,6 +248,7 @@ private: void ShuaLastGas(); size_t GetRoomMaxPlayerNum(); void InitAndroidAI(); + void ForwardGasRing(int n); #ifdef DEBUG void InitDebugInfo(); diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index c25ec344..4e9a4693 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -34,6 +34,8 @@ message Map optional int32 safearea = 11; optional string game_start_buff_list = 12; optional string map_pic = 13; + optional string first_safearea_center = 14; + optional int32 init_gas_ring = 15; } message MapThing From ef57d6432536075e8742b382855c6b98ba40c6a5 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 15 Apr 2021 13:30:45 +0800 Subject: [PATCH 07/13] 1 --- server/gameserver/molotor_cocktail_mitask.cc | 6 +++--- server/gameserver/posiongas_mitask.cc | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/server/gameserver/molotor_cocktail_mitask.cc b/server/gameserver/molotor_cocktail_mitask.cc index 3d65a2e5..e255c881 100644 --- a/server/gameserver/molotor_cocktail_mitask.cc +++ b/server/gameserver/molotor_cocktail_mitask.cc @@ -64,14 +64,14 @@ void MolotorCocktailMiTask::Check() } } ); - a8::Vec2 old_buff_vec2_param1 = sender.Get()->buff_vec2_param1; - sender.Get()->buff_vec2_param1 = sender.Get()->GetPos(); for (Creature* target : objects) { if (!target->GetBuffById(meta->i->buffid())) { + a8::Vec2 old_buff_vec2_param1 = target->buff_vec2_param1; + target->buff_vec2_param1 = target->GetPos(); target->MustBeAddBuff(sender.Get(), meta->i->buffid()); + target->buff_vec2_param1 = old_buff_vec2_param1; } } - sender.Get()->buff_vec2_param1 = old_buff_vec2_param1; } } diff --git a/server/gameserver/posiongas_mitask.cc b/server/gameserver/posiongas_mitask.cc index 9a4efc39..6a349b1b 100644 --- a/server/gameserver/posiongas_mitask.cc +++ b/server/gameserver/posiongas_mitask.cc @@ -64,14 +64,14 @@ void PosionGasMiTask::Check() } } ); - a8::Vec2 old_buff_vec2_param1 = sender.Get()->buff_vec2_param1; - sender.Get()->buff_vec2_param1 = sender.Get()->GetPos(); for (Creature* target : objects) { if (!target->GetBuffById(meta->i->buffid())) { + a8::Vec2 old_buff_vec2_param1 = target->buff_vec2_param1; + target->buff_vec2_param1 = target->GetPos(); target->MustBeAddBuff(sender.Get(), meta->i->buffid()); + target->buff_vec2_param1 = old_buff_vec2_param1; } } - sender.Get()->buff_vec2_param1 = old_buff_vec2_param1; } } From 0d49fb23378377fee88942640f18801d6e6e6c11 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 15 Apr 2021 13:36:30 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=09=E9=80=89=E6=AD=A6?= =?UTF-8?q?=E5=99=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/creature.cc | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 6d8ba0d4..d83a098b 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1144,7 +1144,14 @@ void Creature::Shot(a8::Vec2& target_dir, bool& shot_ok, float fly_distance) int weapon_idx = GetCurrWeapon()->weapon_idx; *GetCurrWeapon() = Weapon(); GetCurrWeapon()->weapon_idx = weapon_idx; - SetCurrWeapon(ChooseNextWeapon(slot_id, SPEC1_IS_BEGIN, SPEC1_IS_END)); + Weapon* next_weapon = ChooseNextWeapon(slot_id, SPEC1_IS_BEGIN, SPEC1_IS_END); + if (!next_weapon) { + next_weapon = ChooseNextWeapon(SPEC2_IS_BEGIN, SPEC2_IS_BEGIN, SPEC2_IS_END); + } + if (!next_weapon) { + next_weapon = AutoChgWeapon(); + } + SetCurrWeapon(next_weapon); AutoLoadingBullet(); } } @@ -1165,7 +1172,14 @@ void Creature::Shot(a8::Vec2& target_dir, bool& shot_ok, float fly_distance) int weapon_idx = GetCurrWeapon()->weapon_idx; *GetCurrWeapon() = Weapon(); GetCurrWeapon()->weapon_idx = weapon_idx; - SetCurrWeapon(ChooseNextWeapon(slot_id, SPEC2_IS_BEGIN, SPEC2_IS_END)); + Weapon* next_weapon = ChooseNextWeapon(slot_id, SPEC2_IS_BEGIN, SPEC2_IS_END); + if (!next_weapon) { + next_weapon = ChooseNextWeapon(SPEC1_IS_BEGIN, SPEC1_IS_BEGIN, SPEC1_IS_END); + } + if (!next_weapon) { + next_weapon = AutoChgWeapon(); + } + SetCurrWeapon(next_weapon); AutoLoadingBullet(); } } @@ -1448,7 +1462,7 @@ Weapon* Creature::ChooseNextWeapon(int curr_weapon_slot_id, int begin_slot_id, i break; } } - return next_weapon ? next_weapon : AutoChgWeapon(); + return next_weapon; } void Creature::SetCurrWeapon(Weapon* weapon) From b188d479a1a606b7fe0d61197a23b0967e771841 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 15 Apr 2021 15:22:11 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8A=80=E8=83=BD?= =?UTF-8?q?=E9=98=B6=E6=AE=B5=E6=97=B6=E9=97=B4=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/android.ai.cc | 3 +++ server/gameserver/creature.cc | 10 +++++++++- server/gameserver/creature.h | 4 ++-- server/gameserver/player.cc | 7 +++++-- server/gameserver/zombiemode.ai.cc | 3 +++ 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/server/gameserver/android.ai.cc b/server/gameserver/android.ai.cc index 3c0bd229..d675bce6 100644 --- a/server/gameserver/android.ai.cc +++ b/server/gameserver/android.ai.cc @@ -429,6 +429,9 @@ void AndroidNewAI::UpdateNewAI() abort(); } } + if (hum->playing_skill) { + hum->UpdateSkill(); + } ++node_.exec_frame_num; hum->shot_hold = false; switch (node_.main_state) { diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index d83a098b..dd5eb4d5 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -482,6 +482,12 @@ bool Creature::CanUseSkill(int skill_id) if (!skill) { return false; } + if (dead) { + return false; + } + if (playing_skill) { + return false; + } return skill->GetCurrTimes() > 0; } @@ -562,7 +568,7 @@ void Creature::ResetSkill() void Creature::UpdateSkill() { - if (CurrentSkill()) { + if (CurrentSkill() && !dead) { if (curr_skill_phase < CurrentSkill()->meta->phases.size()) { MetaData::SkillPhase* phase = &CurrentSkill()->meta->phases[curr_skill_phase]; if (phase->time_offset >= CurrentSkill()->GetPassedTime()) { @@ -572,6 +578,8 @@ void Creature::UpdateSkill() } else { playing_skill = false; } + } else { + playing_skill = false; } } diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index f947c9e8..6dcfeac4 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -45,6 +45,7 @@ class Creature : public MoveableEntity std::function on_move_collision; bool poisoning = false; long long poisoning_time = 0; + bool playing_skill = false; Weapon car_weapon; a8::Vec2 buff_vec2_param1; @@ -140,6 +141,7 @@ class Creature : public MoveableEntity Weapon* GetCurrWeapon() { return curr_weapon_; }; void SetCurrWeapon(Weapon* weapon); void ResetAllSkillCd(); + void UpdateSkill(); private: @@ -148,7 +150,6 @@ private: 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); - void UpdateSkill(); void ProcSkillPhase(MetaData::SkillPhase* phase); void ProcBuffEffect(Creature* caster, Buff* buff); void TriggerOneObjectBuff(Skill* skill, Creature* target, BuffTriggerType_e trigger_type); @@ -177,7 +178,6 @@ private: a8::Vec2 skill_dir_; float skill_param1 = 0; - bool playing_skill = false; size_t curr_skill_phase = 0; Skill* curr_skill_ = nullptr; int skill_target_id_ = 0; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 68795aaf..e2393bbf 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -129,7 +129,10 @@ void Player::InternalUpdate(int delta_time) if (has_use_item_id) { UpdateUseItemId(); } - } + if (playing_skill) { + UpdateSkill(); + } + } } void Player::UpdateMove() @@ -624,7 +627,7 @@ void Player::LootInteraction(Loot* entity) case IS_15XSCOPE: { if (item_meta->i->_inventory_slot() - IS_1XSCOPE > curr_scope_idx) { - curr_scope_idx = item_meta->i->_inventory_slot() - IS_1XSCOPE; + curr_scope_idx = item_meta->i->_inventory_slot() - IS_1XSCOPE; } } break; diff --git a/server/gameserver/zombiemode.ai.cc b/server/gameserver/zombiemode.ai.cc index 18441dfe..0cbedbe6 100644 --- a/server/gameserver/zombiemode.ai.cc +++ b/server/gameserver/zombiemode.ai.cc @@ -93,6 +93,9 @@ void ZombieModeAI::UpdateAI() abort(); } } + if (hum->playing_skill) { + hum->UpdateSkill(); + } ++node_->exec_frame_num; hum->shot_hold = false; switch (node_->main_state) { From 2eb85601a16edba46aea50f0da1adf987166f8b4 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 15 Apr 2021 15:24:34 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9C=A9=E6=99=95?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/human.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index b0d688d6..f9fe1c9b 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1770,12 +1770,14 @@ void Human::_UpdateSpecMove() void Human::_UpdateMove(int speed) { - do { - int distance = std::min(5, speed); - _InternalUpdateMove(distance); - speed -= distance; - } while (speed > 0); - CheckSpecObject(); + if (!HasBuffEffect(kBET_Vertigo)) { + do { + int distance = std::min(5, speed); + _InternalUpdateMove(distance); + speed -= distance; + } while (speed > 0); + CheckSpecObject(); + } } void Human::ChangeToRace(RaceType_e race, int level) From f15c76e30f615e736916a9060e98da247623ccff Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 15 Apr 2021 15:36:56 +0800 Subject: [PATCH 11/13] 1 --- server/gameserver/creature.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index dd5eb4d5..a0b1d0a3 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -517,7 +517,10 @@ void Creature::DoSkill(int skill_id, std::set target_list; SelectSkillTargets(CurrentSkill(), GetPos(), target_list); TriggerBuff(CurrentSkill(), target_list, kBTT_UseSkill); - UpdateSkill(); + if (!CurrentSkill()->meta->phases.empty() && + CurrentSkill()->meta->phases[0].time_offset <= 0) { + UpdateSkill(); + } } else { Entity* entity = room->GetEntityByUniId(skill_target_id_); if (entity && entity->IsEntityType(ET_Player)) { From 6a7334b756e27f920706ff2ac3e5df197378a6a9 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 15 Apr 2021 15:42:27 +0800 Subject: [PATCH 12/13] 1 --- server/gameserver/creature.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index a0b1d0a3..b0a154eb 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -857,9 +857,11 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff) break; case kBET_SummonObstacle: { - a8::Vec2 target_pos = caster->GetPos() + caster->skill_dir_ * caster->skill_distance_; - target_pos = buff_vec2_param1; - SummonObstacle(buff->meta->param1, target_pos); + if (!dead) { + a8::Vec2 target_pos = caster->GetPos() + caster->skill_dir_ * caster->skill_distance_; + target_pos = buff_vec2_param1; + SummonObstacle(buff->meta->param1, target_pos); + } } break; case kBET_Sprint: From e3acf841218b79db3627b36787885c85b03d28f7 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 15 Apr 2021 16:10:07 +0800 Subject: [PATCH 13/13] 1 --- server/gameserver/creature.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index b0a154eb..79b31763 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1212,6 +1212,7 @@ void Creature::Shot(a8::Vec2& target_dir, bool& shot_ok, float fly_distance) last_shot_frameno_ = room->GetFrameNo(); if (!need_sync_active_player && IsPlayer()) { room->frame_event.AddBulletNumChg((Human*)this); + room->frame_event.AddWeaponAmmoChg((Human*)this); } shot_ok = true; }