From 8f5c31284c61106ccde559ea3327197a9845690a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Sep 2022 17:01:23 +0800 Subject: [PATCH 1/6] 1 --- server/gameserver/human.cc | 6 +++--- server/gameserver/incubator.cc | 18 +++++++++--------- server/gameserver/player.cc | 5 +++++ server/gameserver/pvedata.cc | 12 ++++++------ server/gameserver/pvedata.h | 4 +++- 5 files changed, 26 insertions(+), 19 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 6d03e242..6dd12121 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1037,7 +1037,7 @@ void Human::FillSMGameOver(cs::SMGameOver& msg) { msg.set_total_team_num(room->GetTeamNum()); if (room->IsPveRoom()) { - msg.set_pve_wave(room->pve_data.wave); + msg.set_pve_wave(room->pve_data.GetWave()); msg.set_pve_max_wave(room->pve_data.max_wave); msg.set_pve_instance_id(room->pve_instance->pb->gemini_id()); } @@ -1058,7 +1058,7 @@ void Human::FillSMGameOver(cs::SMGameOver& msg) { if (room->IsPveRoom()) { msg.set_mode(GetTeam()->GetMemberNum() <= 1 ? 1 : 2); - msg.set_my_rank(room->pve_data.wave); + msg.set_my_rank(room->pve_data.GetWave()); msg.set_max_rank(room->pve_data.max_wave); } else { if (GetTeam()->GetMemberNum() <= 1) { @@ -1918,7 +1918,7 @@ void Human::SendUIUpdate() room->FillSMUiUpdate(notifymsg); if (room->IsPveRoom()) { notifymsg.set_score(stats.pve_rank_score); - notifymsg.set_wave(room->pve_data.wave + 1); + notifymsg.set_wave(room->pve_data.GetWave() + 1); notifymsg.set_max_wave(room->pve_data.max_wave); notifymsg.set_mon_num(room->pve_data.mon_num); notifymsg.set_boss_state(room->pve_data.boss_state); diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 0312c5cd..0b7ce976 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -255,7 +255,7 @@ void Incubator::ActiveAndroid(Human* hum, Human* android) void Incubator::OnEnterNewWave(int wave) { #ifdef DEBUG - a8::XPrintf("OnEnterNewWave2 wave:%d \n", {wave}); + a8::XPrintf("OnEnterNewWave2 wave:%d \n", {wave + 1}); #endif if (room->IsGameOver()) { return; @@ -270,7 +270,7 @@ void Incubator::OnEnterNewWave(int wave) timeout_ = true; return; } - room->pve_data.wave = wave + 1; + room->pve_data.SetWave(wave + 1); room->OnEnterNewWave(wave + 1); if (wave < 0) { abort(); @@ -371,11 +371,11 @@ void Incubator::SpawnWaveMon(int wave) int Incubator::GetPveLeftTime() { - if (room->pve_data.wave >= wave_timers_.size() || - room->pve_data.wave < 0) { + if (room->pve_data.GetWave() >= wave_timers_.size() || + room->pve_data.GetWave() < 0) { return 0; } - xtimer_list* timer = wave_timers_[room->pve_data.wave]; + xtimer_list* timer = wave_timers_[room->pve_data.GetWave()]; if (!timer) { return 0; } @@ -385,21 +385,21 @@ int Incubator::GetPveLeftTime() bool Incubator::IsLastWave() { - return room->pve_data.wave >= room->pve_mode_meta->waves.size(); + return room->pve_data.GetWave() >= room->pve_mode_meta->waves.size(); } void Incubator::NextWave() { - if (room->pve_data.wave < wave_timers_.size()) { + if (room->pve_data.GetWave() < wave_timers_.size()) { int acc_time = 0; { - xtimer_list* timer = wave_timers_[room->pve_data.wave]; + xtimer_list* timer = wave_timers_[room->pve_data.GetWave()]; int remain_time = room->xtimer.GetRemainTime(timer); room->xtimer.ModifyTimer(timer, 0); acc_time = remain_time; } - for (int i = room->pve_data.wave; i < wave_timers_.size(); ++i) { + for (int i = room->pve_data.GetWave(); i < wave_timers_.size(); ++i) { xtimer_list* timer = wave_timers_[i]; int remain_time = room->xtimer.GetRemainTime(timer); room->xtimer.ModifyTimer(timer, remain_time - acc_time); diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 68a5b44a..0c39a88d 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -86,6 +86,11 @@ void Player::Initialize() } } } +#ifdef DEBUG + { + + } +#endif need_sync_active_player = true; } } diff --git a/server/gameserver/pvedata.cc b/server/gameserver/pvedata.cc index c95b194a..3253d0c8 100644 --- a/server/gameserver/pvedata.cc +++ b/server/gameserver/pvedata.cc @@ -71,7 +71,7 @@ void PveData::OnBeKill(Hero* hero) #ifdef DEBUG a8::XPrintf("PveData::OnBeKill wave:%d refreshed_mon:%d killed_num:%d\n", { - wave, + GetWave(), refreshed_mon, killed_num }); @@ -79,8 +79,8 @@ void PveData::OnBeKill(Hero* hero) if (refreshed_mon > 0) { if (killed_num >= refreshed_mon) { - if (wave < room->pve_mode_meta->round_score.size()) { - int win_score = room->pve_mode_meta->round_score[wave]; + if (GetWave() < room->pve_mode_meta->round_score.size()) { + int win_score = room->pve_mode_meta->round_score[GetWave()]; room->TraverseHumanList ( a8::XParams(), @@ -91,8 +91,8 @@ void PveData::OnBeKill(Hero* hero) }); } if (room->IsDestoryRoom()) { - if (wave < room->pve_mode_meta->next_door.size()) { - a8::Vec2 point = room->pve_mode_meta->next_door[room->pve_data.wave]; + if (GetWave() < room->pve_mode_meta->next_door.size()) { + a8::Vec2 point = room->pve_mode_meta->next_door[room->pve_data.GetWave()]; #if 0 room->CreateObstacle(PVE_DOOR_THING_ID, point.x, point.y); #endif @@ -110,7 +110,7 @@ void PveData::FlyDoor(Room* room, a8::Vec2& point, int radius) #ifdef DEBUG a8::XPrintf("FlyDoor wave:%d refreshed_mon:%d killed_num:%d\n", { - wave, + GetWave(), refreshed_mon, killed_num }); diff --git a/server/gameserver/pvedata.h b/server/gameserver/pvedata.h index 307d478b..0cf79dc6 100644 --- a/server/gameserver/pvedata.h +++ b/server/gameserver/pvedata.h @@ -3,7 +3,6 @@ class Hero; struct PveData { - int wave = 0; int max_wave = 0; int mon_num = 0; int boss_state = 0; @@ -13,6 +12,8 @@ struct PveData bool pve_kill_boss = false; + int GetWave() { return wave_; }; + void SetWave(int wave) { wave_ = wave; }; void AddDamageInfo(int sender_id, int receiver_id, float dmg); void OnBeKill(Hero* hero); @@ -21,6 +22,7 @@ private: void FlyDoor(Room* room, a8::Vec2& point, int radius); private: + int wave_ = 0; std::map> damage_hash_; From 245277a7bef1eb668a657a3756be50ac0b1a3397 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Sep 2022 17:06:32 +0800 Subject: [PATCH 2/6] 1 --- server/gameserver/human.cc | 4 ++-- server/gameserver/incubator.cc | 6 ------ server/gameserver/incubator.h | 1 - server/gameserver/room.cc | 9 ++------- 4 files changed, 4 insertions(+), 16 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 6dd12121..c202eb71 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1037,7 +1037,7 @@ void Human::FillSMGameOver(cs::SMGameOver& msg) { msg.set_total_team_num(room->GetTeamNum()); if (room->IsPveRoom()) { - msg.set_pve_wave(room->pve_data.GetWave()); + msg.set_pve_wave(room->pve_data.GetWave() + 1); msg.set_pve_max_wave(room->pve_data.max_wave); msg.set_pve_instance_id(room->pve_instance->pb->gemini_id()); } @@ -1058,7 +1058,7 @@ void Human::FillSMGameOver(cs::SMGameOver& msg) { if (room->IsPveRoom()) { msg.set_mode(GetTeam()->GetMemberNum() <= 1 ? 1 : 2); - msg.set_my_rank(room->pve_data.GetWave()); + msg.set_my_rank(room->pve_data.GetWave() + 1); msg.set_max_rank(room->pve_data.max_wave); } else { if (GetTeam()->GetMemberNum() <= 1) { diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 0b7ce976..1b205561 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -383,12 +383,6 @@ int Incubator::GetPveLeftTime() return remain_time * FRAME_RATE_MS; } -bool Incubator::IsLastWave() -{ - return room->pve_data.GetWave() >= room->pve_mode_meta->waves.size(); -} - - void Incubator::NextWave() { if (room->pve_data.GetWave() < wave_timers_.size()) { diff --git a/server/gameserver/incubator.h b/server/gameserver/incubator.h index 635f3bd8..9164ed34 100644 --- a/server/gameserver/incubator.h +++ b/server/gameserver/incubator.h @@ -16,7 +16,6 @@ class Incubator void ActiveAndroid(Human* hum, Human* android); bool IsTimeOut() { return timeout_; }; int GetPveLeftTime(); - bool IsLastWave(); void NextWave(); private: diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 0668651b..6c4ade2f 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -1193,13 +1193,8 @@ void Room::UpdateGas() ( pve_data.pve_kill_boss || IsAllRealDead() || - incubator_->IsTimeOut() || - ( - incubator_->IsLastWave() && - pve_data.refreshed_mon > 0 && - pve_data.killed_num >= pve_data.refreshed_mon) - ) - ) { + incubator_->IsTimeOut() + )) { game_over_ = true; game_over_frameno_ = GetFrameNo(); OnGameOver(); From d09da157b05c94d91362beac6e0e1be3a848b30e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Sep 2022 17:18:43 +0800 Subject: [PATCH 3/6] 1 --- server/gameserver/pvedata.cc | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/server/gameserver/pvedata.cc b/server/gameserver/pvedata.cc index 3253d0c8..abbfe25f 100644 --- a/server/gameserver/pvedata.cc +++ b/server/gameserver/pvedata.cc @@ -91,15 +91,19 @@ void PveData::OnBeKill(Hero* hero) }); } if (room->IsDestoryRoom()) { - if (GetWave() < room->pve_mode_meta->next_door.size()) { - a8::Vec2 point = room->pve_mode_meta->next_door[room->pve_data.GetWave()]; - #if 0 - room->CreateObstacle(PVE_DOOR_THING_ID, point.x, point.y); - #endif - FlyDoor(room, point, 50); + if (GetWave() + 1 < max_wave) { + if (GetWave() < room->pve_mode_meta->next_door.size()) { + a8::Vec2 point = room->pve_mode_meta->next_door[room->pve_data.GetWave()]; +#if 0 + room->CreateObstacle(PVE_DOOR_THING_ID, point.x, point.y); +#endif + FlyDoor(room, point, 50); + } } } else { - room->GetIncubator()->NextWave(); + if (GetWave() + 1 < max_wave) { + room->GetIncubator()->NextWave(); + } } } } From d9b974aad622ce33af5563024a70eeb44b212199 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Sep 2022 17:20:44 +0800 Subject: [PATCH 4/6] 1 --- server/gameserver/pvedata.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/gameserver/pvedata.cc b/server/gameserver/pvedata.cc index abbfe25f..0501f119 100644 --- a/server/gameserver/pvedata.cc +++ b/server/gameserver/pvedata.cc @@ -86,7 +86,9 @@ void PveData::OnBeKill(Hero* hero) a8::XParams(), [this, win_score] (Human* hum, a8::XParams& param) { - hum->WinPveScore(win_score); + if (!hum->dead) { + hum->WinPveScore(win_score); + } return true; }); } From 8136a7614381444f2f112a76b7ea8d47353135eb Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Sep 2022 17:41:56 +0800 Subject: [PATCH 5/6] 1 --- server/gameserver/human.cc | 4 ++++ server/gameserver/incubator.cc | 1 + server/gameserver/pvedata.cc | 6 ++++++ 3 files changed, 11 insertions(+) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index c202eb71..ea3f2192 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -607,7 +607,11 @@ void Human::FillMFPlayerStats(cs::MFPlayerStats* stats_pb) stats_pb->set_history_heal_amount(stats.history_heal_amount); stats_pb->set_gold(stats.gold); + #if 1 + stats_pb->set_score(stats.pve_rank_score); + #else stats_pb->set_score(stats.score); + #endif stats_pb->set_pass_score(stats.pass_score); stats_pb->set_rank_score(stats.rank_score); stats_pb->set_has_pass(has_pass); diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 1b205561..27ad3130 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -331,6 +331,7 @@ void Incubator::SpawnWaveMon(int wave) Hero* hero = (Hero*)param.sender.GetUserData(); Human* hum = hero->room->GetOneAlivePlayer(); if (hum) { + hum->room->pve_data.AddDamageInfo(hum->GetUniId(), hero->GetUniId(), 1); hero->BeKill(hum->GetUniId(), hum->name, hum->GetCurrWeapon()->weapon_id); } else { hero->BeKill(VP_Gas, TEXT("battle_server_killer_gas", "毒圈"), VW_Gas); diff --git a/server/gameserver/pvedata.cc b/server/gameserver/pvedata.cc index 0501f119..80469054 100644 --- a/server/gameserver/pvedata.cc +++ b/server/gameserver/pvedata.cc @@ -44,6 +44,9 @@ void PveData::OnBeKill(Hero* hero) Human* hum = room->GetHumanByUniId(pair.first); if (hum) { int win_score = pair.second / total_dmg * base_score; +#ifdef DEBUG + a8::XPrintf("kill_score:%f \n", {win_score}); +#endif hum->WinPveScore(win_score); } } @@ -87,6 +90,9 @@ void PveData::OnBeKill(Hero* hero) [this, win_score] (Human* hum, a8::XParams& param) { if (!hum->dead) { +#ifdef DEBUG + a8::XPrintf("round_score:%f \n", {win_score}); +#endif hum->WinPveScore(win_score); } return true; From c157ca0e6f9555dd40719fb7568711fc3f2ddb3b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Sep 2022 20:20:30 +0800 Subject: [PATCH 6/6] 1 --- server/gameserver/roomobstacle.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index caa6a19e..c6117ae3 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -359,6 +359,7 @@ void RoomObstacle::Active() break; } if (meta->i->life_time() > 0) { + #if 1 room->xtimer.AddDeadLineTimerAndAttach ( meta->i->life_time() / FRAME_RATE_MS, @@ -375,6 +376,7 @@ void RoomObstacle::Active() }, &xtimer_attacher.timer_list_ ); + #endif } }