remove zombie mode code

This commit is contained in:
aozhiwei 2021-08-31 11:44:43 +08:00
parent f498cafa47
commit 217cc3f938
22 changed files with 23 additions and 806 deletions

View File

@ -63,14 +63,11 @@ void Android::InternalUpdate(int delta_time)
void Android::GiveEquip()
{
MetaData::Equip* weapon_meta = MetaMgr::Instance()->GetEquip
(room->GetRoomMode() == kZombieMode ?
robot_meta->i->zbmode_weapon_id() : robot_meta->i->weapon_id());
MetaData::Equip* weapon_meta = MetaMgr::Instance()->GetEquip(robot_meta->i->weapon_id());
if (weapon_meta) {
weapons[GUN_SLOT1].weapon_idx = GUN_SLOT1;
weapons[GUN_SLOT1].weapon_id = weapon_meta->i->id();
weapons[GUN_SLOT1].weapon_lv = room->GetRoomMode() == kZombieMode ?
robot_meta->i->zbmode_weapon_lv() : robot_meta->i->weapon_lv();
weapons[GUN_SLOT1].weapon_lv = robot_meta->i->weapon_lv();
weapons[GUN_SLOT1].ammo = 0;
weapons[GUN_SLOT1].meta = weapon_meta;
weapons[GUN_SLOT1].Recalc();

View File

@ -224,21 +224,6 @@ enum VirtualPlayer_e
VP_Mine = 9000003,
};
#if 0
enum EquipAttr_e
{
EA_View = 1, //客户端用
EA_ShotRange = 2,
EA_Volume = 3,
EA_AutoAngle = 4, //客户端用
EA_BulletAngle = 5,
EA_Atk = 6,
EA_Def = 7,
EA_Speed = 8,
EA_End
};
#endif
enum EquipType_e
{
EQUIP_TYPE_WEAPON = 1,
@ -307,21 +292,18 @@ enum ObjectSyncFlags_e
enum RoomMode_e
{
kChiJiMode = 0,
kZombieMode = 1,
kRoomModeEnd
};
enum RaceType_e
{
kHumanRace = 1,
kZombieRace = 2
};
enum AIMode_e
{
kChiJiAiMode = 0,
kHumanAiMode = 1,
kZombieAiMode = 2
};
enum ColliderTag_e
@ -434,12 +416,6 @@ enum HpOpt_e
const char* const PROJ_NAME_FMT = "game%d_gameserver";
const char* const PROJ_ROOT_FMT = "/data/logs/%s";
const float TEN_W = 10000 * 10;
const int SYS_RESET_TIME = 2*60; //每日两点重置
const int DEF_WEAPON_ID = 12103;
const int SERVER_FRAME_RATE = 20;
const int SYNC_FRAME_RATE = 10;
const float FRAME_RATE_MS = 1000.0f / SERVER_FRAME_RATE;
@ -473,17 +449,12 @@ const int FIGHTING_MODE_BULLET_NUM = 10000 * 10000;
const int MAX_NODE_ID = 8;
const int MAX_INSTANCE_ID = 500;
const int WALK_ZONE_WIDTH = 100;
const int MAX_TEAM_NUM = 4;
const int MAX_SYS_HTTP_NUM = 2;
const int MAX_USER_HTTP_NUM = 8;
const int MAX_ALL_HTTP_NUM = MAX_SYS_HTTP_NUM + MAX_USER_HTTP_NUM;
const int DEFAULT_BORN_POINT_X = 3000;
const int DEFAULT_BORN_POINT_Y = 3000;
const int ADPLAY_BUFFID = 1006;
const int FIXED_OBJECT_MAXID = 20140;
@ -494,15 +465,6 @@ const int VIEW_RANGE = 512;
const int MAX_AI_LEVEL = 8;
const int HUMAN_RACE_META_START_ID = 5001;
const int ZOMBIE_RACE_META_START_ID = 6001;
const int TERMINATOR_BUFF_ID = 1033;
#if 0
const int TURN_OVER_SKILL_ID = 41001;
#endif
const int HUNLUAN_BUFFID = 6001;
const long long SPEC_MAP_OBJECT_FLAGS = A8_DEFINE_RANGE_BIT(long long, kColliderSpecTag_Begin, kColliderSpecTag_End);

View File

@ -1478,9 +1478,6 @@ bool Creature::IsProperTarget(Creature* target, bool no_teammate)
if (!no_teammate && team_id == target->team_id) {
return false;
}
if (room->GetRoomMode() == kZombieMode && GetRace() == target->GetRace()) {
return false;
}
if (target->IsInvincible()) {
return false;
}
@ -1498,11 +1495,7 @@ bool Creature::IsProperTarget(Creature* target, bool no_teammate)
bool Creature::IsEnemy(Creature* target)
{
if (room->GetRoomMode() == kZombieMode) {
return target->GetRace() != GetRace();
} else {
return team_id != target->team_id;
}
return team_id != target->team_id;
}
void Creature::TraverseProperTargets(std::function<void (Creature*, bool&)> func)

View File

@ -352,21 +352,6 @@ void FrameEvent::AddItemChg(CreatureWeakPtr& sender, int item_id, int item_num)
}
}
void FrameEvent::AddZombieIdChg(CreatureWeakPtr& sender)
{
chged_zombieids_.push_back(sender);
int idx = chged_zombieids_.size() - 1;
{
sender.Get()->TraverseAllLayerHumanList
(
[idx] (Human* hum, bool& stop)
{
hum->chged_zombieid_.push_back(idx);
});
}
}
void FrameEvent::AddDead(CreatureWeakPtr& sender, int revive_time)
{
if (sender.Get()) {
@ -500,9 +485,6 @@ void FrameEvent::Clear()
if (!chged_weapon_ammo_.empty()) {
chged_weapon_ammo_.clear();
}
if (!chged_zombieids_.empty()) {
chged_zombieids_.clear();
}
if (!dead_alive_objs_.empty()) {
dead_alive_objs_.clear();
}

View File

@ -42,7 +42,6 @@ public:
void AddSkillCdChg(CreatureWeakPtr sender, int skill_id, int left_time);
void AddSkillCurrTimesChg(CreatureWeakPtr sender, int skill_id, int curr_times);
void AddItemChg(CreatureWeakPtr& sender, int item_id, int item_num);
void AddZombieIdChg(CreatureWeakPtr& sender);
void AddDead(CreatureWeakPtr& sender, int revive_time);
void AddRevive(CreatureWeakPtr& sender);
void AddCarChg(CreatureWeakPtr& sender);
@ -65,7 +64,6 @@ private:
std::vector<CreatureWeakPtr> chged_hps_;
std::vector<std::tuple<CreatureWeakPtr, int, int>> chged_skillcds_;
std::vector<std::tuple<CreatureWeakPtr, int, int>> chged_skill_curr_times_;
std::vector<CreatureWeakPtr> chged_zombieids_;
std::vector<CreatureWeakPtr> chged_cars_;
std::vector<std::tuple<int, int, int>> dead_alive_objs_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFPropertyChg>> chged_props_;

View File

@ -366,17 +366,6 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum)
}
}
}
for (size_t idx : hum->chged_zombieid_) {
if (idx < room->frame_event.chged_zombieids_.size()) {
auto& chg_hum = room->frame_event.chged_zombieids_[idx];
{
auto p = msg->add_chged_property_list();
p->set_obj_id(chg_hum.Get()->GetUniId());
p->set_property_type(kPropZombieId);
p->set_value(chg_hum.Get()->AsHuman()->meta->i->id());
}
}
}
for (size_t idx : hum->dead_alive_objs_) {
if (idx < room->frame_event.dead_alive_objs_.size()) {
auto p = msg->add_dead_alive_objs();
@ -411,9 +400,6 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum)
}
}
}
if (room->GetRoomMode() == kZombieMode && room->BattleStarted()) {
room->FillObjectPositions((Human*)hum, *msg);
}
if (room->frame_event.airdrops_.size() > 0) {
*msg->mutable_airdrop() = room->frame_event.airdrops_.Get(0);
}
@ -428,16 +414,6 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum)
room->GetFrameNo() - hum->join_frameno <= 2) {
msg->set_alive_count(room->AliveCount());
}
if (room->GetRoomMode() == kZombieMode) {
if (room->BattleStarted()) {
int game_left_time = MetaMgr::Instance()->zbmode_game_duration * 1000 -
(room->GetFrameNo() - room->GetBattleStartFrameNo()) * FRAME_RATE_MS;
game_left_time = std::max(0, game_left_time);
msg->set_game_left_time(game_left_time);
} else {
msg->set_game_left_time(MetaMgr::Instance()->zbmode_game_duration * 1000);
}
}
}
return msg;
}

View File

@ -93,28 +93,6 @@ void GameLog::GameEnd(Player* hum)
prop = nullptr;
}
void GameLog::ZbModeEnd(Room* room)
{
int game_id = GAME_ID;
a8::MutableXObject* prop = a8::MutableXObject::NewObject();
prop->SetVal("game_uniid", a8::XValue(room->GetRoomUuid()).GetString());
prop->SetVal("room_type", a8::XValue(room->GetRoomType()).GetString());
prop->SetVal("room_mode", a8::XValue((int)room->GetRoomMode()));
prop->SetVal("battle_started", a8::XValue(room->BattleStarted() ? 1 : 0));
if (room->BattleStarted()) {
prop->SetVal("human_alive_count", room->GetAliveCountByRace(kHumanRace));
prop->SetVal("zombie_alive_count", room->GetAliveCountByRace(kZombieRace));
prop->SetVal("game_timeout", room->IsGameTimeOut() ? 1 : 0);
}
f8::TGLog::Instance()->AddTrackLog(game_id, "gameover", 0, "gameover", prop);
delete prop;
prop = nullptr;
}
void GameLog::ForceOver(Room* room)
{
int game_id = GAME_ID;

View File

@ -10,7 +10,6 @@ class GameLog : public a8::Singleton<GameLog>
public:
void GameStart(Player* hum);
void GameEnd(Player* hum);
void ZbModeEnd(Room* room);
void ForceOver(Room* room);
private:

View File

@ -3,33 +3,7 @@
int g_hint_flags = 0;
bool Global::IsVirtualItem(int itemid)
{
return (itemid == VID_Item_Exp ||
itemid == VID_Item_Gold ||
itemid == VID_Soul_Stone ||
itemid == VID_Pickaxe);
}
time_t Global::BetweenDays(time_t time1, time_t time2)
{
return (time1 + g_time_zone*3600)/3600/24 - (time2 + g_time_zone*3600)/3600/24;
}
time_t Global::GetDaySeconds(time_t time, int incdays)
{
return time_t((time + g_time_zone * 3600)/3600/24 + incdays) * 3600 * 24 - 3600 * g_time_zone;
}
bool Global::IsTimeToReset(int time)
{
return BetweenDays(g_nowtime - 60 * SYS_RESET_TIME, time - 60 * SYS_RESET_TIME) > 0;
}
int Global::g_nowtime = time(nullptr);
int Global::g_time_zone = 8;
bool Global::g_shutdown = false;
ColliderComponent* Global::last_collider = nullptr;
bool IsValidSlotId(int slot_id)

View File

@ -10,14 +10,7 @@ class Global : public a8::Singleton<Global>
friend class a8::Singleton<Global>;
public:
static bool IsVirtualItem(int itemid);
static bool IsTimeToReset(int time);
static time_t BetweenDays(time_t time1, time_t time2);
static time_t GetDaySeconds(time_t time, int incdays = 0);
static int g_nowtime;
static int g_time_zone; // 默认东八区
static bool g_shutdown;
static ColliderComponent* last_collider;
};

View File

@ -158,8 +158,6 @@ void Human::FillMFObjectLess(Room* room, Human* hum, cs::MFPlayerFull* full_data
p->set_dead(dead);
p->set_downed(downed);
p->set_disconnected(disconnected);
p->set_anim_type(anim_type);
p->set_anim_seq(anim_seq);
for (auto itr : skins) {
auto skin = p->add_skin();
itr.ToPB(skin);
@ -193,8 +191,6 @@ void Human::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data
p->set_dead(dead);
p->set_downed(downed);
p->set_disconnected(disconnected);
p->set_anim_type(anim_type);
p->set_anim_seq(anim_seq);
p->set_speed(GetSpeed() * SERVER_FRAME_RATE);
for (auto itr : skins) {
auto skin = p->add_skin();
@ -775,33 +771,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
stats.killer_name = killer_name;
stats.weapon_id = weapon_id;
GetTrigger()->Die();
if (room->GetRoomMode() == kZombieMode) {
dead = true;
downed = false;
real_dead = true;
dead_frameno = room->GetFrameNo();
DoGetDown();
if (HasBuffEffect(kBET_Camouflage)) {
RemoveBuffByEffectId(kBET_Camouflage);
}
ClearLordMode();
ClearBuffList();
room->frame_event.AddDead(GetWeakPtrRef(),
meta->i->revive_time() * 1000);
SyncAroundPlayers(__FILE__, __LINE__, __func__);
room->xtimer.AddDeadLineTimerAndAttach
(meta->i->revive_time() * SERVER_FRAME_RATE,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->Revive();
},
&xtimer_attacher.timer_list_
);
room->OnHumanDie(this);
} else {
{
dead = true;
downed = false;
SetHP(0.0f);
@ -1002,9 +972,6 @@ void Human::RemoveOutObjects(Entity* entity)
bool Human::HasLiveTeammate()
{
if (room->GetRoomMode() == kZombieMode) {
return true;
}
bool has = false;
if (GetTeam()) {
GetTeam()->TraverseMembers
@ -1023,30 +990,6 @@ bool Human::HasLiveTeammate()
bool Human::HasNoDownedTeammate()
{
if (room->GetRoomMode() == kZombieMode) {
if (GetRace() == kHumanRace) {
bool has_now_downed_teammate = false;
Human* myself = this;
room->TraverseHumanList
(
a8::XParams(),
[myself, &has_now_downed_teammate] (Human* hum, const a8::XParams& param)
{
if (myself != hum &&
!hum->dead &&
!hum->downed &&
hum->GetRace() == kHumanRace) {
has_now_downed_teammate = true;
return false;
}
return true;
}
);
return has_now_downed_teammate;
} else {
return false;
}
}
bool has = false;
if (GetTeam()) {
GetTeam()->TraverseMembers
@ -1664,115 +1607,6 @@ void Human::_UpdateMove(int speed)
}
}
void Human::ChangeToRace(RaceType_e race, int level)
{
#if 1
abort();
#endif
if (race != kHumanRace &&
race != kZombieRace) {
abort();
}
if (race_ != race && IsAndroid()) {
Android* android = (Android*)this;
android->ai->Reset();
#if 0
if (race == kHumanRace) {
android->ai->SetAiMode(kHumanAiMode);
} else if (race == kZombieRace) {
android->ai->SetAiMode(kZombieAiMode);
}
#endif
}
race_ = race;
level_ = level;
if (race_ == kHumanRace) {
meta = MetaMgr::Instance()->GetPlayer(HUMAN_RACE_META_START_ID + level_ - 1);
if (!meta) {
abort();
}
exp_ = meta->i->exp();
OnMetaChange();
} else if (race_ == kZombieRace) {
DoGetDown();
meta = MetaMgr::Instance()->GetPlayer(ZOMBIE_RACE_META_START_ID + level_ - 1);
if (!meta) {
abort();
}
exp_ = meta->i->exp();
OnMetaChange();
} else {
abort();
}
}
void Human::ChangeToRaceAndNotify(RaceType_e race, int level)
{
ChangeToRace(race, level);
room->frame_event.AddZombieIdChg(GetWeakPtrRef());
}
void Human::WinExp(Human* sender, int exp)
{
if (race_ != kHumanRace &&
race_ != kZombieRace) {
abort();
}
if (room->debug_trace) {
a8::UdpLog::Instance()->Debug
(
"WinExp before sender_id:%d uniid:%d race:%d level:%d exp:%d add_exp:%d ",
{
sender->GetUniId(),
GetUniId(),
GetRace(),
GetLevel(),
GetExp(),
exp
}
);
}
exp_ += exp;
MetaData::Player* old_meta = meta;
int start_meta_id = race_ == kHumanRace ? HUMAN_RACE_META_START_ID : ZOMBIE_RACE_META_START_ID;
ClearSkill();
do {
MetaData::Player* tmp_meta = MetaMgr::Instance()->GetPlayer(start_meta_id + level_);
if (!tmp_meta) {
break;
}
if (exp_ >= tmp_meta->i->exp()) {
meta = tmp_meta;
AddSkill(meta->i->active_skill());
ResetSkill();
++level_;
} else {
break;
}
} while (true);
if (old_meta != meta) {
room->frame_event.AddZombieIdChg(GetWeakPtrRef());
OnMetaChange();
if (GetRace() == kZombieRace && meta->i->level() == 3) {
room->OnZombieAppear(this);
}
}
if (room->debug_trace) {
a8::UdpLog::Instance()->Debug
(
"WinExp after sender_id:%d uniid:%d race:%d level:%d exp:%d add_exp:%d ",
{
sender->GetUniId(),
GetUniId(),
GetRace(),
GetLevel(),
GetExp(),
exp
}
);
}
}
void Human::_InternalUpdateMove(float speed)
{
float nx = GetMoveDir().x * speed;
@ -1927,9 +1761,6 @@ void Human::ClearFrameData()
if (!chged_race_.empty()) {
chged_race_.clear();
}
if (!chged_zombieid_.empty()) {
chged_zombieid_.clear();
}
if (!dead_alive_objs_.empty()) {
dead_alive_objs_.clear();
}
@ -2121,50 +1952,6 @@ void Human::GenBattleReportData(a8::MutableXObject* params)
params->SetVal("rank_score", stats.rank_score);
}
void Human::GenZbModeBattleReportData(a8::MutableXObject* params)
{
params->SetVal("room_mode", room->GetRoomMode());
int rank = 0;
{
std::vector<Human*> human_list;
room->TraverseHumanList(a8::XParams(),
[&human_list] (Human* hum, a8::XParams& param) -> bool
{
human_list.push_back(hum);
return true;
});
std::sort(human_list.begin(), human_list.end(),
[] (Human* a, Human* b )
{
if (a->stats.kills > b->stats.kills) {
return true;
}
if (a->stats.kills < b->stats.kills) {
return false;
}
if (a->stats.last_kill_frameno < b->stats.last_kill_frameno) {
return true;
}
return a->GetUniId() < b->GetUniId();
});
rank = human_list.size();
for (size_t i = 0; i < human_list.size(); ++i) {
if (human_list[i] == this) {
rank = i + 1;
break;
}
}
}
stats.rank = rank;
params->SetVal("account_id", account_id);
params->SetVal("session_id", session_id);
params->SetVal("map_id", room->GetMapMeta()->i->map_id());
params->SetVal("game_time", time(nullptr));
params->SetVal("rank", rank);
params->SetVal("kills", stats.kills);
params->SetVal("room_uuid", room->GetRoomUuid());
}
void Human::DeadDrop()
{
auto SkinCanDrop =
@ -2304,11 +2091,7 @@ void Human::DeadDrop()
void Human::SendBattleReport()
{
a8::MutableXObject* params = a8::MutableXObject::NewObject();
if (room->GetRoomMode() == kZombieMode) {
GenZbModeBattleReportData(params);
} else {
GenBattleReportData(params);
}
GenBattleReportData(params);
auto on_ok = [] (a8::XParams& param, a8::XObject& data)
{
};
@ -2614,27 +2397,7 @@ void Human::DropItems(Obstacle* obstacle)
void Human::Revive()
{
if (room->GetRoomMode() == kZombieMode) {
if (GetRace() == kHumanRace) {
ChangeToRaceAndNotify(kZombieRace, 1);
}
dead = false;
downed = false;
real_dead = false;
SetHP(GetMaxHP());
ClearBuffList();
{
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(kREVIVE_BUFF_ID);
if (buff_meta) {
AddBuff(this, buff_meta, 1);
}
}
room->frame_event.AddRevive(GetWeakPtrRef());
room->OnHumanRevive(this);
ResetSkill();
SyncAroundPlayers(__FILE__, __LINE__, __func__);
} else {
{
auto callback =
[] (const a8::XParams& param)
{
@ -2943,87 +2706,6 @@ ObjectSyncFlags* Human::GetObjectSyncFlags(int obj_uniid)
}
}
void Human::OnMetaChange()
{
if (GetRace() == kZombieRace) {
MetaData::Equip* weapon_meta = MetaMgr::Instance()->GetEquip(meta->i->normal_skill());
if (weapon_meta) {
default_weapon.weapon_idx = 0;
default_weapon.weapon_id = weapon_meta->i->id();
default_weapon.weapon_lv = 1;
default_weapon.ammo = 1;
default_weapon.meta = weapon_meta;
default_weapon.Recalc();
weapons[0] = default_weapon;
SetCurrWeapon(&weapons[0]);
}
}
float hp = meta->i->health();
for (auto& weapon : spec_weapons) {
if (weapon.meta) {
hp += weapon.meta ? weapon.GetAttrValue(kHAT_MaxHp) : 0;
}
}
SetHP(hp);
room->frame_event.AddHpChg(GetWeakPtrRef());
RecalcBaseAttr();
ClearSkill();
AddSkill(meta->i->active_skill());
ResetSkill();
ClearPassiveSkill();
AddPassiveSkill(meta->i->passive_skill());
}
void Human::OnChgToTerminator()
{
Buff* buff = GetBuffByEffectId(kBET_Terminator);
if (buff) {
std::vector<std::string> strings;
a8::Split(buff->meta->i->buff_param4(), strings, ':');
if (strings.size() >= 3) {
for (size_t i = 0; i < strings.size(); ++i) {
int weapon_id = a8::XValue(strings[i]);
MetaData::Equip* weapon_meta = MetaMgr::Instance()->GetEquip(weapon_id);
if (weapon_meta) {
Weapon* weapon = nullptr;
switch (i) {
case 0:
{
weapon = &weapons[0];
}
break;
case 1:
{
weapon = &weapons[GUN_SLOT1];
}
break;
case 2:
{
weapon = &weapons[GUN_SLOT2];
}
break;
default:
{
}
break;
}
weapon->weapon_idx = i;
weapon->weapon_id = weapon_meta->i->id();
weapon->weapon_lv = 1;
weapon->meta = weapon_meta;
weapon->Recalc();
weapon->ammo = weapon->GetClipVolume();
if (i == 0) {
default_weapon = *weapon;
}
}
}
}//end if
need_sync_active_player = true;
SyncAroundPlayers(__FILE__, __LINE__, __func__);
}
}
void Human::ProcReloadAction()
{
Weapon* p_weapon = GetCurrWeapon();
@ -3589,10 +3271,6 @@ void Human::OnBulletHit(Bullet* bullet)
if (IsInvincible()) {
return;
}
if (bullet->sender.Get()->room->GetRoomMode() == kZombieMode &&
bullet->sender.Get()->GetRace() == GetRace()) {
return;
}
if (HasBuffEffect(kBET_Jump) ||
HasBuffEffect(kBET_Fly)) {
return;

View File

@ -103,8 +103,6 @@ class Human : public Creature
std::string user_data;
long long last_cmmove_frameno = 0;
bool disconnected = false;
int anim_type = 0;
int anim_seq = 0;
Skin skin_jlf;
int backpack = 0;
int helmet = 0;
@ -264,9 +262,6 @@ class Human : public Creature
bool HasSpecMove();
void _UpdateSpecMove();
virtual void _UpdateMove(int speed) override;
void ChangeToRace(RaceType_e race, int level);
void ChangeToRaceAndNotify(RaceType_e race, int level);
void WinExp(Human* sender, int exp);
Car* GetCar() { return car_; }
void SetCar(Car* car) { car_ = car; }
int GetSeat() { return seat_; }
@ -290,7 +285,6 @@ protected:
private:
void ClearFrameData();
void GenBattleReportData(a8::MutableXObject* params);
void GenZbModeBattleReportData(a8::MutableXObject* params);
void FillSMGameOver(cs::SMGameOver& msg);
void SendBattleReport();
void Revive();
@ -306,8 +300,6 @@ private:
std::set<GridCell*>& inc_grids,
std::set<GridCell*>& dec_grids);
void RemoveFromScene();
void OnMetaChange();
void OnChgToTerminator();
void ProcReloadAction();
void ProcUseItemAction();
void ProcReliveAction();
@ -356,7 +348,6 @@ protected:
std::vector<int> chged_level_;
std::vector<int> chged_exp_;
std::vector<int> chged_race_;
std::vector<int> chged_zombieid_;
std::vector<int> dead_alive_objs_;
std::vector<int> chged_cars_;
std::vector<int> chged_props_;

View File

@ -170,6 +170,12 @@ namespace MetaData
return itr != car_num_limit.end() ? itr->second : 666;
}
a8::Vec2 Map::GetCenter() const
{
a8::Vec2 center(i->map_width() / 2, i->map_height() / 2);
return center;
}
void MapThing::Init()
{
{

View File

@ -36,6 +36,7 @@ namespace MetaData
void Init2();
std::string RandTemplate();
int GetCarLimit(int car_id);
a8::Vec2 GetCenter() const;
};
struct Attr

View File

@ -211,17 +211,8 @@ public:
MetaMgr::Instance()->other_fill_interval = MetaMgr::Instance()->GetSysParamAsInt("other_fill_interval", 2000);
MetaMgr::Instance()->map_cell_width = MetaMgr::Instance()->GetSysParamAsInt("map_cell_width", 64 * 8);
MetaMgr::Instance()->bullet_planck_step_length = std::max(15, MetaMgr::Instance()->GetSysParamAsInt("bullet_planck_step_length", 15));
METAMGR_READ(zbmode_gas_inactive_time, 25);
METAMGR_READ(zbmode_game_duration, 300);
METAMGR_READ(zbmode_player_num, 15);
METAMGR_READ(zbmode_init_zombie_num, 2);
if (MetaMgr::Instance()->zbmode_init_zombie_num >=
MetaMgr::Instance()->zbmode_player_num) {
abort();
}
{
METAMGR_READ(prebattle_box_id_chiji, 0);
METAMGR_READ(prebattle_box_id_zb, 0);
}
{
METAMGR_READ(newbie_first_robot_ammo, 3);
@ -380,12 +371,6 @@ public:
METAMGR_READ(level1room_robot_autodie_distance, 500);
METAMGR_READ_STR(level1room_born_point, "");
#if 0
METAMGR_READ(refresh_robot_min_num, 5);
METAMGR_READ(refresh_robot_max_num, 10);
METAMGR_READ(refresh_robot_min_time, 5);
METAMGR_READ(refresh_robot_max_time, 10);
#endif
}
if (MetaMgr::Instance()->K < 0.01f) {
abort();

View File

@ -65,10 +65,6 @@ class MetaMgr : public a8::Singleton<MetaMgr>
int newbie_gas_inactive_time = 5;
int midbrid_gas_inactive_time = 15;
int common_gas_inactive_time = 15;
int zbmode_gas_inactive_time = 15;
int zbmode_game_duration = 60 * 2;
int zbmode_player_num = 15;
int zbmode_init_zombie_num = 2;
float K = 100.0f;
float kill_param = 0.0f;
float rank_param = 0.0f;
@ -178,7 +174,6 @@ class MetaMgr : public a8::Singleton<MetaMgr>
MetaData::Player* terminator_meta = nullptr;
int prebattle_box_id_chiji = 0;
int prebattle_box_id_zb = 0;
int prebattle_can_use_skill = 0;
int watchable = 0;

View File

@ -510,10 +510,6 @@ void Player::ObstacleInteraction(Obstacle* entity)
void Player::LootInteraction(Loot* entity)
{
if (room->GetRoomMode() == kZombieMode &&
GetRace() == kZombieRace) {
return;
}
if (entity->pickuped ||
entity->count <= 0) {
return;
@ -567,7 +563,7 @@ void Player::LootInteraction(Loot* entity)
weapon->ammo = 0;
weapon->meta = item_meta;
weapon->Recalc();
if (room->GetRoomMode() == kZombieMode && HasBuffEffect(kBET_Car)) {
if (HasBuffEffect(kBET_Car)) {
} else {
AutoLoadingBullet();
}
@ -1663,11 +1659,7 @@ std::vector<std::tuple<int, int, int>>* Player::GetBox(int box_id)
}
}
int drop_id = 0;
if (room->GetRoomMode() == kZombieMode) {
drop_id = MetaMgr::Instance()->prebattle_box_id_zb;
} else {
drop_id = MetaMgr::Instance()->prebattle_box_id_chiji;
}
drop_id = MetaMgr::Instance()->prebattle_box_id_chiji;
MetaData::Drop* drop_meta = MetaMgr::Instance()->GetDrop(drop_id);
if (drop_meta) {
std::vector<std::tuple<int, int, int>> drop_items;

View File

@ -371,10 +371,6 @@ void Room::CreateAndroid(int robot_num)
alive_count_chged_frameno_ = GetFrameNo();
++PerfMonitor::Instance()->alive_count;
refreshed_robot_set_.insert(robot_meta->i->id());
if (GetRoomMode() == kZombieMode) {
hum->ChangeToRace(kHumanRace, 1);
}
if (!CanAddToScene(hum)) {
a8::SetBitFlag(hum->status, CS_Disable);
} else {
@ -744,55 +740,7 @@ void Room::InternalRemoveObjectLater(Entity* entity, a8::XTimerAttacher& xtimer_
void Room::OnHumanDie(Human* hum)
{
if (GetRoomMode() == kZombieMode) {
if (debug_trace) {
a8::UdpLog::Instance()->Debug
(
"OnHumanDie uniid:%d name:%s race:%d level:%d exp:%d killer_id:%d ",
{
hum->GetUniId(),
hum->name,
hum->GetRace(),
hum->GetLevel(),
hum->GetExp(),
hum->stats.killer_id
}
);
}
if (hum->GetRace() == kHumanRace) {
RemoveRescue(hum);
hum->DeadDrop();
std::vector<Human*> alive_humans;
alive_humans.reserve(GetRoomMaxPlayerNum());
for (auto& pair : human_hash_) {
if (pair.second != hum) {
pair.second->WinExp(hum, hum->meta->i->dead_exp());
}
if (!pair.second->dead && pair.second->GetRace() == kHumanRace) {
alive_humans.push_back(pair.second);
}
}
if (alive_humans.size() == 1) {
Human* terminator = alive_humans[0];
if (!terminator->HasBuffEffect(kBET_Terminator)) {
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(TERMINATOR_BUFF_ID);
if (buff_meta) {
terminator->AddBuff(terminator, buff_meta, 1);
}
}
}
{
Human* killer = GetPlayerByUniId(hum->stats.killer_id);
if (killer && killer != hum) {
killer->WinExp(hum, hum->meta->i->killer_exp());
}
}
} else if (hum->GetRace() == kZombieRace) {
} else {
abort();
}
NotifyUiUpdate();
} else {
{
--alive_count_;
alive_count_chged_frameno_ = GetFrameNo();
--PerfMonitor::Instance()->alive_count;
@ -975,7 +923,7 @@ bool Room::CanJoin(const std::string& accountid,
self_room_mode = kChiJiMode;
}
if (self_room_mode > kRoomModeEnd) {
self_room_mode = kZombieMode;
self_room_mode = kChiJiMode;
}
if (room_mode_ != self_room_mode) {
return false;
@ -1071,33 +1019,6 @@ void Room::FillSMUiUpdate(cs::SMUiUpdate& msg)
TypeConvert::ToPb(pair.second.pos, car->mutable_pos());
}
}
if (GetRoomMode() == kZombieMode) {
#if 1
{
zombie_alive_count_ = 0;
human_alive_count_ = 0;
for (auto& pair : human_hash_) {
if (pair.second->GetRace() == kHumanRace) {
++human_alive_count_;
} else if (pair.second->GetRace() == kZombieRace) {
++zombie_alive_count_;
}
}
}
#endif
msg.set_zombie_num(zombie_alive_count_);
msg.set_human_num(human_alive_count_);
if (BattleStarted() && human_alive_count_ <= 2 && !sent_terminator_airdrop) {
sent_terminator_airdrop = true;
MetaData::AirDrop* airdrop_meta = MetaMgr::Instance()->GetAirDrop
(map_meta_->i->terminator_airdrop());
if (airdrop_meta) {
AirDrop(airdrop_meta->i->appear_time(),
airdrop_meta->i->drop_id(),
airdrop_meta->i->id());
}
}
}
}
Team* Room::GetAliveTeam()
@ -1204,21 +1125,6 @@ void Room::UpdateGas()
break;
}
if (gas_data_.gas_mode != GasInactive && gas_data_.gas_mode != GasJump) {
#if 1
if (GetRoomMode() == kZombieMode) {
int zombie_num = 0;
for (auto& pair : human_hash_) {
if (pair.second->GetRace() == kZombieRace) {
++zombie_num;
}
}
if (zombie_num >= GetRoomMaxPlayerNum() && !game_over_) {
game_over_ = true;
game_over_frameno_ = GetFrameNo();
OnGameOver();
}
}
#endif
if (gas_data_.gas_mode != GasInactive && GetRoomMode() == kChiJiMode) {
if (!IsGameOver() && alive_count_ <= MAX_TEAM_NUM && GetAliveTeamNum() <= 1) {
game_over_ = true;
@ -1449,7 +1355,7 @@ bool Room::GenSmallCircle()
void Room::MatchTeam(Human* hum)
{
if (!hum->team_uuid.empty() && GetRoomMode() != kZombieMode) {
if (!hum->team_uuid.empty()) {
for (auto& pair : human_hash_) {
if (pair.second != hum) {
if (!hum->team_uuid.empty() && pair.second->team_uuid == hum->team_uuid) {
@ -1471,9 +1377,6 @@ void Room::MatchTeam(Human* hum)
void Room::CombineTeam()
{
if (GetRoomMode() == kZombieMode) {
return;
}
std::map<int, size_t> need_combine_teams;
std::map<int, size_t> need_combine_teams_copy;
@ -1642,28 +1545,7 @@ void Room::CombineTeam()
void Room::InitAirDrop()
{
if (GetRoomMode() == kZombieMode) {
for (int airdrop_id : map_meta_->airdrops) {
MetaData::AirDrop* airdrop_meta = MetaMgr::Instance()->GetAirDrop(airdrop_id);
if (airdrop_meta) {
xtimer.AddDeadLineTimerAndAttach
(SERVER_FRAME_RATE * airdrop_meta->i->time(),
a8::XParams()
.SetSender(this)
.SetParam1(airdrop_meta->i->appear_time())
.SetParam2(airdrop_meta->i->drop_id())
.SetParam3(airdrop_meta->i->id()),
[] (const a8::XParams& param)
{
Room* room = (Room*)param.sender.GetUserData();
if (!room->IsGameOver()) {
room->AirDrop(param.param1, param.param2, param.param3);
}
},
&xtimer_attacher_.timer_list_);
}
}
} else {
{
std::list<MetaData::AirDrop>& air_drops = MetaMgr::Instance()->GetAirDrops();
for (auto& air_drop : air_drops) {
if (air_drop.i->id() >= 1 && air_drop.i->id() <= 6) {
@ -1698,11 +1580,6 @@ void Room::AirDrop(int appear_time, int box_id, int airdrop_id)
box_id = spec_box_id;
}
}
if (GetRoomMode() == kZombieMode) {
if (airdrop_id != map_meta_->i->terminator_airdrop()) {
NotifyCountdown(TEXT("battle_server_box_countdown", "距离物资箱抵达还有%d秒"), appear_time / 1000);
}
}
if (thing_meta && thing_meta->i->type() == 2) {
a8::Vec2 dir = a8::Vec2::UP;
dir.Rotate(a8::RandAngle());
@ -1780,18 +1657,6 @@ void Room::AirDrop(int appear_time, int box_id, int airdrop_id)
);
obstacle->PushCollisionObjects();
obstacle->is_treasure_box = true;
if (room->GetRoomMode() == kZombieMode) {
obstacle->is_terminator_airdrop_box =
airdrop_id == room->map_meta_->i->terminator_airdrop();
if (obstacle->is_terminator_airdrop_box) {
room->NotifySysPiao
(
TEXT("battle_server_box_serviced", "终结者补给箱已送达"),
a8::MkRgb(0, 255, 0),
3
);
}
}
}
},
&xtimer_attacher_.timer_list_);
@ -1894,9 +1759,6 @@ void Room::OnGameOver()
pair.second->SendGameOver();
}
}
if (GetRoomMode() == kZombieMode) {
GameLog::Instance()->ZbModeEnd(this);
}
RoomMgr::Instance()->AddOverRoom(room_uuid_);
}
@ -2333,34 +2195,6 @@ void Room::SecondRandPoint()
last_human_hash_[tmp_humans[i]->GetUniId()] = tmp_humans[i];
}
}
#ifdef DEBUG
#if 0
if (GetRoomMode() == kZombieMode) {
BornPoint* born_point = nullptr;
int i = 0;
for (auto& pair : human_hash_) {
if (!born_point) {
born_point = pair.second->born_point;
} else {
++i;
pair.second->born_point = born_point;
a8::Vec2 pos = pair.second->born_point->RandPoint();
pos.x += i * 60;
pair.second->SetPos(pos);
pair.second->FindLocation();
pair.second->RefreshView();
grid_service->MoveHuman(pair.second);
#if 0
if (++i > 5) {
i = 0;
born_point = nullptr;
}
#endif
}
}
}
#endif
#endif
}
void Room::NotifyGameStart()
@ -2423,9 +2257,6 @@ void Room::NotifyGameStart()
if (room_type_ == RT_NewBrid || room_type_ == RT_MidBrid) {
NewBieRoomStart();
}
if (GetRoomMode() == kZombieMode) {
ZombieModeStart();
}
}
void Room::InitObstacleDatas()
@ -2449,17 +2280,7 @@ long long Room::GetGasInactiveTime()
return App::Instance()->debug_params.find(1) != App::Instance()->debug_params.end() ?
App::Instance()->debug_params[1] : 10;
#endif
if (room_mode_ == kZombieMode) {
#if DEBUG
if (f8::IsTestEnv()) {
return MetaMgr::Instance()->zbmode_gas_inactive_time;
} else {
return 5 + 5;
}
#else
return MetaMgr::Instance()->zbmode_gas_inactive_time;
#endif
} else {
{
if (room_type_ == RT_NewBrid) {
if (creator_game_times_ <= 0) {
return MetaMgr::Instance()->newbie_gas_inactive_time;
@ -3101,9 +2922,7 @@ void Room::UnInitDebugInfo()
a8::Vec2 Room::GetDefaultBornPoint()
{
a8::Vec2 pos = a8::Vec2(DEFAULT_BORN_POINT_X + rand() % 1400,
DEFAULT_BORN_POINT_Y + rand() % 1500);
return pos;
return map_meta_->GetCenter();
}
void Room::AddPlayerPostProc(Player* hum)
@ -3142,13 +2961,6 @@ void Room::AddPlayerPostProc(Player* hum)
}
}
}
if (GetRoomMode() == kZombieMode) {
#if 0
hum->ChangeToRace(kZombieRace, 2);
#else
hum->ChangeToRace(kHumanRace, 1);
#endif
}
#ifdef DEBUG
xtimer.AddRepeatTimerAndAttach
(SERVER_FRAME_RATE * 5,
@ -3335,56 +3147,6 @@ void Room::NewBieRoomStart()
#endif
}
void Room::ZombieModeStart()
{
if (GetRoomMode() != kZombieMode) {
abort();
}
if (human_hash_.size() != GetRoomMaxPlayerNum()) {
abort();
}
#ifdef DEBUG
debug_trace = true;
#endif
std::vector<Human*> human_list;
for (auto& pair : human_hash_) {
human_list.push_back(pair.second);
if (RoomMgr::Instance()->IsGM(pair.second->account_id)) {
debug_trace = true;
}
}
std::random_shuffle(human_list.begin(), human_list.end());
for (size_t i = 0; i < 2; ++i) {
Human* hum = human_list[i];
hum->ChangeToRace(kZombieRace, 1);
}
battle_report_timer_ = xtimer.AddDeadLineTimerAndAttach
(SERVER_FRAME_RATE * MetaMgr::Instance()->zbmode_game_duration,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Room* room = (Room*)param.sender.GetUserData();
#if 1
if (!room->game_over_) {
room->game_timeout_ = true;
room->game_over_ = true;
room->game_over_frameno_ = room->GetFrameNo();
room->OnGameOver();
}
#else
room->BattleReport();
#endif
},
&xtimer_attacher_.timer_list_,
[] (const a8::XParams& param)
{
Room* room = (Room*)param.sender.GetUserData();
room->battle_report_timer_ = nullptr;
}
);
}
Human* Room::GetOneCanEnableAndroid()
{
std::vector<Human*> humans;
@ -3700,25 +3462,6 @@ void Room::NotifySysPiao(const std::string& msg, int color, int duration)
}
}
void Room::OnZombieAppear(Human* hum)
{
if (hum->GetRace() == kZombieRace && hum->meta->i->level() == 3 && !sent_zombie_boss_notify) {
sent_zombie_boss_notify = true;
TraversePlayerList
(
a8::XParams()
.SetParam1(hum->meta->i->name()),
[] (Player* hum, a8::XParams& param)
{
hum->SendSysPiaoMsg(a8::Format(TEXT("battle_server_appear", "%s出现了").c_str(),
{param.param1.GetString()}),
a8::MkRgb(255, 0, 0),
3);
}
);
}
}
int Room::GetAliveCountByRace(RaceType_e race)
{
int count = 0;
@ -3744,19 +3487,7 @@ int Room::GetOnlinePlayerNum()
size_t Room::GetRoomMaxPlayerNum()
{
#if 1
return map_meta_->i->player();
#else
if (room_mode_ == kZombieMode) {
return MetaMgr::Instance()->zbmode_player_num;
} else {
if (IsMiniRoom()) {
return MINI_ROOM_MAX_PLAYER_NUM;
} else {
return NORMAL_ROOM_MAX_PLAYER_NUM;
}
}
#endif
}
void Room::InitAndroidAI()

View File

@ -211,7 +211,6 @@ public:
void RemoveRescue(Human* hum);
void NotifyCountdown(const std::string& msg, int time);
void NotifySysPiao(const std::string& msg, int color, int duration);
void OnZombieAppear(Human* hum);
int GetAliveCountByRace(RaceType_e race);
int GetOnlinePlayerNum();
RoomObstacle* CreateObstacle(int id, float x, float y);
@ -292,7 +291,6 @@ private:
void ForceSetBornPoint(Human* hum, BornPoint* born_point);
BornPoint* ForceTakeBornPoint(Human* hum, BornPoint* reserve_born_point);
void NewBieRoomStart();
void ZombieModeStart();
void CreateLevel0RoomSpecThings();
bool CanAddToScene(Human* hum);
void SyncFrameData();
@ -327,7 +325,6 @@ private:
const std::vector<MetaData::MapTplThing*>* loots_ = nullptr;
const std::vector<Building*>* buildings_ = nullptr;
const std::vector<MetaData::MapTplThing*>* level0room_spec_things_ = nullptr;
bool sent_zombie_boss_notify = false;
bool waiting_start_ = false;
GasData gas_data_;
@ -339,7 +336,6 @@ private:
int elapsed_time_ = 0;
int alive_count_ = 0;
long long alive_count_chged_frameno_ = 0;
int zombie_alive_count_ = 0;
int human_alive_count_ = 0;
MetaData::AirLine* airline_ = nullptr;
a8::XTimerAttacher xtimer_attacher_;

View File

@ -46,9 +46,6 @@ static RoomType_e GetHumanRoomType(const cs::CMJoin& msg, int& game_times)
}
}
#endif
if (msg.room_mode() == kZombieMode) {
return RT_OldBrid3;
}
if (!msg.team_uuid().empty() && msg.team_members().size() > 1) {
for (auto& team_member : msg.team_members()) {
@ -139,8 +136,7 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg)
#if 1
{
cs::CMJoin* mutable_msg = (cs::CMJoin*)&msg;
if (mutable_msg->room_mode() != kChiJiMode &&
mutable_msg->room_mode() != kZombieMode) {
if (mutable_msg->room_mode() != kChiJiMode) {
mutable_msg->set_room_mode(kChiJiMode);
}
}

View File

@ -73,8 +73,7 @@ void Team::CombineBornPoint()
}
} //end if
if (!member->born_point) {
member->SetX(DEFAULT_BORN_POINT_X + rand() % 100);
member->SetY(DEFAULT_BORN_POINT_Y + rand() % 200);
member->SetPos(room->GetDefaultBornPoint());
} else {
member->SetPos(member->born_point->RandPoint());
}

View File

@ -205,8 +205,6 @@ message Player
optional int32 exp = 17;
optional int32 dead_exp = 18;
optional int32 killer_exp = 19;
optional int32 zbmode_weapon_id = 20;
optional int32 zbmode_weapon_lv = 21;
optional int32 revive_time = 22;
optional string name = 23;
optional int32 normal_skill = 24;
@ -230,9 +228,6 @@ message Robot
optional int32 weapon_id = 4;
optional int32 weapon_lv = 5;
optional int32 zbmode_weapon_id = 6;
optional int32 zbmode_weapon_lv = 7;
optional int32 sex = 8;
}