This commit is contained in:
aozhiwei 2022-08-16 19:31:11 +08:00
parent a25f61ce0d
commit 788a330047
4 changed files with 58 additions and 28 deletions

View File

@ -19,7 +19,7 @@ else()
endif() endif()
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DNDEBUG -DNEWGS") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DNDEBUG -DNEWGS")
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DDEBUG -fsanitize=address -fno-omit-frame-pointer -DNEWGS") set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DDEBUG -fsanitize=address -fno-omit-frame-pointer -DNEWGS -DPVE")
include_directories( include_directories(
AFTER AFTER

View File

@ -1714,18 +1714,21 @@ void Creature::UpdatePoisoning()
} }
bool need_notify = poisoning_time > 1000; bool need_notify = poisoning_time > 1000;
while (poisoning_time > 1000) { while (poisoning_time > 1000) {
float dmg = 0; if (room->IsPveRoom()) {
if (room->GetGasData().is_last_gas) {
dmg = room->GetGasData().new_area_meta->i->hurt();
} else { } else {
dmg = room->GetGasData().old_area_meta->i->hurt(); float dmg = 0;
} if (room->GetGasData().is_last_gas) {
dmg *= 1 + GetAbility()->GetAttrRate(kHAT_PoisoningReduction); dmg = room->GetGasData().new_area_meta->i->hurt();
dmg = std::max(10.0f, dmg); } else {
DecHP(dmg, VP_Gas, TEXT("battle_server_killer_gas", "毒圈"), VW_Gas); dmg = room->GetGasData().old_area_meta->i->hurt();
if (dead) { }
poisoning_time = 0; dmg *= 1 + GetAbility()->GetAttrRate(kHAT_PoisoningReduction);
break; dmg = std::max(10.0f, dmg);
DecHP(dmg, VP_Gas, TEXT("battle_server_killer_gas", "毒圈"), VW_Gas);
if (dead) {
poisoning_time = 0;
break;
}
} }
poisoning_time -= 1000; poisoning_time -= 1000;
} }

View File

@ -1530,18 +1530,31 @@ void Human::FillMFGasData(cs::MFGasData* gas_data)
gas_data->set_duration(0); gas_data->set_duration(0);
} }
} else { } else {
if (room->GetGasData().old_area_meta->i->wait_time() <= 0) { if (room->IsPveRoom()) {
gas_data->set_duration(0); gas_data->set_duration(0);
} else { } else {
long long duration = room->GetGasData().old_area_meta->i->wait_time() * 20 - if (room->GetGasData().old_area_meta->i->wait_time() <= 0) {
(room->GetFrameNo() - room->GetGasData().gas_start_frameno); gas_data->set_duration(0);
gas_data->set_duration(std::max(duration * 50, (long long)1000) / 1000); } else {
long long duration = room->GetGasData().old_area_meta->i->wait_time() * 20 -
(room->GetFrameNo() - room->GetGasData().gas_start_frameno);
gas_data->set_duration(std::max(duration * 50, (long long)1000) / 1000);
}
} }
} }
TypeConvert::ToPb(room->GetGasData().pos_old, gas_data->mutable_pos_old()); if (room->IsPveRoom()) {
TypeConvert::ToPb(room->GetGasData().pos_new, gas_data->mutable_pos_new()); #if 0
gas_data->set_rad_old(room->GetGasData().rad_old); TypeConvert::ToPb(room->GetGasData().pos_old, gas_data->mutable_pos_old());
gas_data->set_rad_new(room->GetGasData().rad_new); TypeConvert::ToPb(room->GetGasData().pos_new, gas_data->mutable_pos_new());
gas_data->set_rad_old(room->GetGasData().rad_old);
gas_data->set_rad_new(room->GetGasData().rad_new);
#endif
} else {
TypeConvert::ToPb(room->GetGasData().pos_old, gas_data->mutable_pos_old());
TypeConvert::ToPb(room->GetGasData().pos_new, gas_data->mutable_pos_new());
gas_data->set_rad_old(room->GetGasData().rad_old);
gas_data->set_rad_new(room->GetGasData().rad_new);
}
} }
void Human::RecalcVolume() void Human::RecalcVolume()

View File

@ -1183,10 +1183,14 @@ void Room::UpdateGas()
} }
if (gas_data_.gas_mode != GasInactive && gas_data_.gas_mode != GasJump) { if (gas_data_.gas_mode != GasInactive && gas_data_.gas_mode != GasJump) {
if (gas_data_.gas_mode != GasInactive && GetRoomMode() == kChiJiMode) { if (gas_data_.gas_mode != GasInactive && GetRoomMode() == kChiJiMode) {
if (!IsGameOver() && alive_count_ <= MAX_TEAM_NUM && GetAliveTeamNum() <= 1) { if (IsPveRoom()) {
game_over_ = true;
game_over_frameno_ = GetFrameNo(); } else {
OnGameOver(); if (!IsGameOver() && alive_count_ <= MAX_TEAM_NUM && GetAliveTeamNum() <= 1) {
game_over_ = true;
game_over_frameno_ = GetFrameNo();
OnGameOver();
}
} }
for (auto& pair : human_hash_) { for (auto& pair : human_hash_) {
if (pair.second->real_dead || if (pair.second->real_dead ||
@ -1292,14 +1296,24 @@ void Room::UpdateGasInactivePvp()
void Room::UpdateGasInactivePve() void Room::UpdateGasInactivePve()
{ {
gas_data_.gas_mode = GasWaiting;
gas_data_.gas_start_frameno = GetFrameNo();
battle_start_frameno_ = GetFrameNo();
NotifyUiUpdate();
ClearPostBattleAutoFreeList();
OnBattleStart();
} }
void Room::UpdateGasWaiting() void Room::UpdateGasWaiting()
{ {
if (GetFrameNo() - gas_data_.gas_start_frameno >= if (IsPveRoom()) {
gas_data_.old_area_meta->i->wait_time() * SERVER_FRAME_RATE) {
gas_data_.gas_mode = GasMoving; } else {
gas_data_.gas_start_frameno = GetFrameNo();; if (GetFrameNo() - gas_data_.gas_start_frameno >=
gas_data_.old_area_meta->i->wait_time() * SERVER_FRAME_RATE) {
gas_data_.gas_mode = GasMoving;
gas_data_.gas_start_frameno = GetFrameNo();;
}
} }
} }