From 6139504fb24b672462799fc37d4941a1085aef9e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 9 Jun 2021 18:39:18 +0800 Subject: [PATCH] 1 --- server/gameserver/android.cc | 1 + server/gameserver/creature.cc | 17 +++++++++-------- server/gameserver/creature.h | 1 + server/gameserver/hero.cc | 1 + server/gameserver/player.cc | 5 +++++ server/gameserver/room.cc | 8 ++++++++ server/gameserver/room.h | 4 ++++ 7 files changed, 29 insertions(+), 8 deletions(-) diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index 40886dd..907f89e 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -39,6 +39,7 @@ void Android::Initialize() RandSkin(); GiveEquip(); RecalcBaseAttr(); + SetInfiniteBulletMode(); } void Android::Update(int delta_time) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 8345f27..7f6c014 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -115,14 +115,6 @@ Creature::Creature():MoveableEntity() weak_ptr_chunk_.Set(this); inventory_[IS_1XSCOPE].num = 1; - - if (MetaMgr::Instance()->fighting_mode) { - inventory_[IS_9MM].num = FIGHTING_MODE_BULLET_NUM; - inventory_[IS_556MM].num = FIGHTING_MODE_BULLET_NUM; - inventory_[IS_762MM].num = FIGHTING_MODE_BULLET_NUM; - inventory_[IS_12GAUGE].num = FIGHTING_MODE_BULLET_NUM; - inventory_[IS_RPG].num = FIGHTING_MODE_BULLET_NUM; - } } Creature::~Creature() @@ -1844,3 +1836,12 @@ bool Creature::TryMove(const a8::Vec2& target_pos, a8::Vec2& out_pos) } return move_ok; } + +void Creature::SetInfiniteBulletMode() +{ + inventory_[IS_9MM].num = FIGHTING_MODE_BULLET_NUM; + inventory_[IS_556MM].num = FIGHTING_MODE_BULLET_NUM; + inventory_[IS_762MM].num = FIGHTING_MODE_BULLET_NUM; + inventory_[IS_12GAUGE].num = FIGHTING_MODE_BULLET_NUM; + inventory_[IS_RPG].num = FIGHTING_MODE_BULLET_NUM; +} diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 1ec03ab..fc9328d 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -177,6 +177,7 @@ class Creature : public MoveableEntity float GetMaxHP(); void GetHitEnemys(std::set& enemys); bool TryMove(const a8::Vec2& target_pos, a8::Vec2& out_pos); + void SetInfiniteBulletMode(); private: diff --git a/server/gameserver/hero.cc b/server/gameserver/hero.cc index c49443f..e441e7a 100644 --- a/server/gameserver/hero.cc +++ b/server/gameserver/hero.cc @@ -43,6 +43,7 @@ void Hero::Initialize() weapons[GUN_SLOT1].Recalc(); SetCurrWeapon(&weapons[GUN_SLOT1]); } + SetInfiniteBulletMode(); } void Hero::FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 47108af..c5d6f85 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -38,6 +38,9 @@ void Player::Initialize() Human::Initialize(); max_energy_shield = energy_shield; RecalcBaseAttr(); + if (room->IsInfiniteBulletMode()) { + SetInfiniteBulletMode(); + } } void Player::Update(int delta_time) @@ -1160,6 +1163,8 @@ void Player::_CMExecCommand(f8::MsgHdr& hdr, const cs::CMExecCommand& msg) int item_id = a8::XValue(cmds[1]); int item_num = a8::XValue(cmds[2]); GMAddItem(item_id, item_num); + } else if (cmd == "infinite_bullet_mode") { + room->SetInfiniteBulletMode(); } else if (cmd == "shuaguai" && cmds.size() >= 3) { int hero_id = a8::XValue(cmds[1]); int hero_num = a8::XValue(cmds[2]); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 9f8387c..d2dad36 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -3872,3 +3872,11 @@ void Room::GetPartObjectWatchList(Entity* entity, std::vector& watch_lis return true; }); } + +void Room::SetInfiniteBulletMode() +{ + infinite_bullet_mode_ = true; + for (auto& pair : accountid_hash_) { + pair.second->SetInfiniteBulletMode(); + } +} diff --git a/server/gameserver/room.h b/server/gameserver/room.h index cc51ecc..7fd8604 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -182,6 +182,8 @@ public: Incubator* GetIncubator() { return incubator_;}; void ShuaMon(const a8::Vec2& center, std::vector& airdrop_mon_list, float radius); void GetPartObjectWatchList(Entity* entity, std::vector& watch_list); + void SetInfiniteBulletMode(); + bool IsInfiniteBulletMode() { return infinite_bullet_mode_; }; private: void ShuaAndroid(); @@ -336,6 +338,8 @@ private: Incubator* incubator_ = nullptr; + bool infinite_bullet_mode_ = false; + friend class Incubator; friend class Team; };