diff --git a/server/gameserver/android.ai.cc b/server/gameserver/android.ai.cc index a85189a..ad03584 100644 --- a/server/gameserver/android.ai.cc +++ b/server/gameserver/android.ai.cc @@ -126,7 +126,11 @@ void AndroidAI::DoAttack() } if (owner->updated_times % 10 == 0) { Human* enemy = owner->room->FindEnemy((Human*)owner); - if (enemy && !enemy->HasBuffEffect(BET_Invincible) && !enemy->HasBuffEffect(BET_Hide)) { + if (enemy && + !enemy->HasBuffEffect(BET_Invincible) && + !enemy->HasBuffEffect(BET_Hide) && + !enemy->HasBuffEffect(BET_InGrass) + ) { Human* sender = (Human*)owner; a8::Vec2 shot_dir = enemy->pos - sender->pos; if (std::abs(shot_dir.x) > FLT_EPSILON || diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index 4619303..410d31d 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -25,7 +25,7 @@ Android::~Android() void Android::Initialize() { Human::Initialize(); - SetSkinInfo(15001); + SetSkinInfo(MetaMgr::Instance()->RandTank()); GiveEquip(); skin_meta = MetaMgr::Instance()->GetTank(SkinId()); if (skin_meta) { diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 60d8c6f..b4b7554 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -189,7 +189,7 @@ enum BuffEffectType_e BET_Begin = 0, BET_ChgAttr = 1, //改变属性 BET_Vertigo = 2, //眩晕 - BET_Unuse = 3, // + BET_InGrass = 3, //在草丛 BET_LastBurn = 4, //持续灼烧 BET_Invincible = 5, //无敌 BET_Hide = 6, //隐身 diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index db4a842..c427079 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1542,8 +1542,8 @@ void Human::ProcBuffEffect(Buff* buff) void Human::OnAttack() { if (a8::HasBitFlag(status, HS_InGrass)) { - if (HasBuffEffect(BET_Hide)) { - RemoveBuffByEffectId(BET_Hide); + if (HasBuffEffect(BET_InGrass)) { + RemoveBuffByEffectId(BET_InGrass); } if (grass_hide_timer_list_) { room->xtimer.ModifyTimer(grass_hide_timer_list_, diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 5568f78..d3fb9dc 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -64,6 +64,7 @@ public: std::map> maptpl_size_hash; std::map dress_hash; std::map tank_hash; + std::vector tankid_list; std::map driver_hash; std::map skill_hash; std::map buff_hash; @@ -206,6 +207,7 @@ private: item.i = &meta; item.Init(); tank_hash[item.i->id()] = &item; + tankid_list.push_back(meta.id()); } for (auto& meta : driver_meta_list) { @@ -486,6 +488,11 @@ MetaData::Tank* MetaMgr::GetTank(int tank_id) return itr != loader_->tank_hash.end() ? itr->second : nullptr; } +int MetaMgr::RandTank() +{ + return !loader_->tankid_list.empty() ? loader_->tankid_list[rand() % loader_->tankid_list.size()] : 0; +} + float MetaMgr::GetRankRewardParam(int rank) { auto itr = loader_->rankreward_hash.find(rank); diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index b834fa9..a41a341 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -38,6 +38,7 @@ class MetaMgr : public a8::Singleton MetaData::Dress* GetDress(int dress_id); MetaData::Driver* GetDriver(int driver_id); MetaData::Tank* GetTank(int tank_id); + int RandTank(); float GetRankRewardParam(int rank); float GetKillRewardParam(int kill_num); std::vector* GetRobotList();