From 4f18190a813716849b4aecf9c64dcfeb88d99167 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 28 Feb 2020 11:44:51 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E9=A3=9E=E6=9C=BA=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/android.cc | 2 +- server/gameserver/bullet.cc | 2 + server/gameserver/human.cc | 64 ++++++++++++++++---------- server/gameserver/human.h | 8 +--- server/gameserver/player.cc | 6 --- server/gameserver/playermgr.cc | 3 ++ server/gameserver/room.cc | 6 +++ server/tools/protobuild/cs_proto.proto | 4 +- 8 files changed, 55 insertions(+), 40 deletions(-) diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index 3624ecb..c4c43df 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -26,7 +26,7 @@ void Android::Initialize() { Human::Initialize(); health = meta->i->health(); - SetSkinInfo(14001); + RandSkin(); GiveEquip(); } diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 64fcede..ab4e832 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -62,12 +62,14 @@ void Bullet::OnHit(std::set& objects) float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); player->stats.damage_amount_out += finaly_dmg; hum->DecHP(finaly_dmg, player->entity_uniid, player->name, gun_meta->i->id()); + #if 0 if (a8::HasBitFlag(hum->status, HS_ReflectDamage) && hum->skill_meta) { float reflect_dmg = finaly_dmg * hum->skill_meta->value1; if (reflect_dmg > 1.0f) { player->DecHP(reflect_dmg, hum->entity_uniid, hum->name, gun_meta->i->id()); } } + #endif } } break; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 78241a0..2fdcba1 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -117,6 +117,12 @@ void Human::FillMFObjectFull(cs::MFObjectFull* full_data) p->set_disconnected(disconnected); p->set_anim_type(anim_type); p->set_anim_seq(anim_seq); + #if 1 + for (auto itr : skins) { + auto skin = p->add_skin(); + itr.ToPB(skin); + } + #else if (skin_tank.skin_id != 0) { skin_tank.ToPB(p->mutable_skin()); } else { @@ -126,6 +132,7 @@ void Human::FillMFObjectFull(cs::MFObjectFull* full_data) skin.ToPB(p->mutable_skin()); } } + #endif p->set_backpack(backpack); p->set_helmet(helmet); p->set_chest(chest); @@ -987,6 +994,7 @@ void Human::DoJump() void Human::DoSkill() { + #if 0 if (skill_meta && skill_meta->i->condition() == SC_Active) { int passed_time = (room->frame_no - last_use_skill_frameno_) * FRAME_RATE_MS; int skill_left_time = std::max(0, skill_meta->last_time * 1000 - passed_time); @@ -1160,6 +1168,7 @@ void Human::DoSkill() last_use_skill_frameno_ = room->frame_no; } } + #endif } void Human::DoGetDown() @@ -1323,7 +1332,14 @@ void Human::FillMFActivePlayerData(cs::MFActivePlayerData* player_data) player_data->set_action_target_id(action_target_id); } } + #if 1 + for (auto itr : skins) { + auto skin = player_data->add_skin(); + itr.ToPB(skin); + } + #else skin.ToPB(player_data->mutable_skin()); + #endif player_data->set_backpack(backpack); player_data->set_helmet(helmet); player_data->set_chest(chest); @@ -1344,7 +1360,7 @@ void Human::FillMFActivePlayerData(cs::MFActivePlayerData* player_data) player_data->set_max_energy_shield(max_energy_shield); } #endif - #if 1 + #if 0 if (skill_meta) { if (last_use_skill_frameno_ == 0) { player_data->set_skill_left_time(0); @@ -1424,6 +1440,7 @@ void Human::RecalcVolume() void Human::RecalcBuff() { buff = HumanAbility(); + #if 0 if (skin_jlf_meta) { buff.damage_add += skin_jlf_meta->GetAttrValue(skin_jlf.skin_lv, EA_Atk); buff.def_add += skin_jlf_meta->GetAttrValue(skin_jlf.skin_lv, EA_Def); @@ -1433,6 +1450,7 @@ void Human::RecalcBuff() buff.def_add += skin_meta->GetAttrValue(skin.skin_lv, EA_Def); buff.speed += skin_meta->GetAttrValue(skin.skin_lv, EA_Speed); } + #endif } int Human::GetInventory(int slot_id) @@ -1501,6 +1519,7 @@ void Human::FillBodyState(::google::protobuf::RepeatedPtrField<::cs::MFBodyState state->set_left_time(std::max(0, MetaMgr::Instance()->jump_time * 1000 - passed_time)); state->set_lasting_time(MetaMgr::Instance()->jump_time * 1000); } + #if 0 if (a8::HasBitFlag(status, HS_Hide) && skill_meta) { int passed_time = (room->frame_no - hide_frameno_) * FRAME_RATE_MS; cs::MFBodyState* state = states->Add(); @@ -1550,6 +1569,7 @@ void Human::FillBodyState(::google::protobuf::RepeatedPtrField<::cs::MFBodyState state->set_left_time(std::max(0, skill_meta->last_time * 1000 - passed_time)); state->set_lasting_time(skill_meta->last_time * 1000); } + #endif if (a8::HasBitFlag(status, HS_AtkAdd)) { cs::MFBodyState* state = states->Add(); state->set_state_type(HS_AtkAdd); @@ -1560,6 +1580,7 @@ void Human::FillBodyState(::google::protobuf::RepeatedPtrField<::cs::MFBodyState void Human::SummonHero() { + #if 0 Hero* hero = room->CreateHero(this); if (hero) { summon_hero_frameno_ = room->frame_no; @@ -1587,6 +1608,7 @@ void Human::SummonHero() need_sync_active_player = true; BroadcastFullState(); } + #endif } void Human::AddObserver(Human* observer) @@ -1913,34 +1935,12 @@ int Human::GetSkinConfigLv(int skin_id) void Human::SetSkinInfo(int skin_id) { + #if 0 skin.skin_id = skin_id; if (skin.skin_id != 0){ skin.skin_lv = std::max(1, GetSkinConfigLv(skin.skin_id)); } -} - -const Skin& Human::GetSkin() -{ - if (skin_jlf.skin_id != 0) { - return skin_jlf; - } - return skin; -} - -int Human::SkinId() -{ - if (skin_jlf.skin_id != 0) { - return skin_jlf.skin_id; - } - return skin.skin_id; -} - -int Human::SkinLv() -{ - if (skin_jlf.skin_id != 0) { - return skin_jlf.skin_lv; - } - return skin.skin_lv; + #endif } void Human::CheckSkinTank() @@ -2339,11 +2339,13 @@ void Human::ProcLootSkin(Loot* entity, MetaData::Equip* item_meta) skin_jlf.skin_id = item_meta->i->id(); skin_jlf.skin_lv = std::max(1, GetSkinConfigLv(skin_jlf.skin_id)); skin_jlf_meta = MetaMgr::Instance()->GetDress(skin_jlf.skin_id); + #if 0 if (skin_jlf_meta) { skill_meta = MetaMgr::Instance()->GetSkill(skin_jlf_meta->i->skill_id()); } else { skill_meta = nullptr; } + #endif RecalcBuff(); SyncAroundPlayers(__FILE__, __LINE__, __func__); } @@ -2473,6 +2475,18 @@ void Human::FreeReviveTimer() } } +void Human::RandSkin() +{ + std::vector ids = {1, 2, 3, 4, 5, 6}; + for (int i = 0; i < 3; ++i) { + int rand_idx = rand() % ids.size(); + Skin& skin = a8::FastAppend(skins); + skin.skin_id = ids[rand_idx]; + skin.skin_lv = 1; + ids.erase(ids.begin() + rand_idx); + } +} + void Human::Revive() { auto callback = diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 545ebc4..29c617c 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -49,8 +49,6 @@ class Human : public Entity MetaData::Player* meta = nullptr; MetaData::Equip* helmet_meta = nullptr; MetaData::Equip* chest_meta = nullptr; - MetaData::Dress* skin_meta = nullptr; - MetaData::Skill* skill_meta = nullptr; MetaData::Dress* skin_jlf_meta = nullptr; MetaData::Equip* skin_tank_meta = nullptr; HumanAbility buff; @@ -211,13 +209,11 @@ class Human : public Entity int GetWeaponConfigLv(int weapon_id); int GetSkinConfigLv(int skin_id); void SetSkinInfo(int skin_id); - const Skin& GetSkin(); - int SkinId(); - int SkinLv(); void CheckSkinTank(); void OnDie(); void FreeDownedTimer(); void FreeReviveTimer(); + void RandSkin(); protected: void _UpdateMove(int speed); @@ -276,7 +272,7 @@ private: bool sent_battlereport_ = false; bool sent_game_end_ = false; - Skin skin; + std::list skins; friend class FrameMaker; friend class FrameEvent; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 4aa742b..fdb068f 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -32,12 +32,6 @@ void Player::Initialize() Human::Initialize(); health = meta->i->health(); max_energy_shield = energy_shield; - skin_meta = MetaMgr::Instance()->GetDress(SkinId()); - if (skin_meta) { - skill_meta = MetaMgr::Instance()->GetSkill(skin_meta->i->skill_id()); - } else { - skill_meta = nullptr; - } RecalcBuff(); } diff --git a/server/gameserver/playermgr.cc b/server/gameserver/playermgr.cc index f6172d2..bb6c78d 100644 --- a/server/gameserver/playermgr.cc +++ b/server/gameserver/playermgr.cc @@ -73,7 +73,10 @@ Player* PlayerMgr::CreatePlayerByCMJoin(long ip_saddr, int socket, const cs::CMJ hum->skin_configs[skin.skin_id()] = skin.skin_lv(); } } + #if 0 hum->SetSkinInfo(msg.baseskin()); + #endif + hum->RandSkin(); socket_hash_[socket] = hum; return hum; } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 6d070a0..fda1e17 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -288,8 +288,10 @@ void Room::CreateAndroid(int robot_num) if (rnd_skin_robot_idx == i) { MetaData::Dress* skin_meta = MetaMgr::Instance()->RandDress(); if (skin_meta) { +#if 0 hum->skin_meta = skin_meta; hum->SetSkinInfo(skin_meta->i->id()); +#endif } } uniid_hash_[hum->entity_uniid] = hum; @@ -512,7 +514,9 @@ Hero* Room::CreateHero(Human* hum) hero->move_dir = hum->move_dir; hero->attack_dir = hum->attack_dir; hero->master = hum; + #if 0 hero->skin = hum->GetSkin(); + #endif hero->backpack = hum->backpack; hero->helmet = hum->helmet; hero->chest = hum->chest; @@ -642,6 +646,7 @@ void Room::FetchBuilding(Human* hum) void Room::OnHumanDie(Human* hum) { + #if 0 if (hum->skill_meta && hum->skill_meta->i->type() == ST_SelfDetonate) { for (auto& pair : human_hash_) { if (pair.second != hum && (pair.second->team_id == 0 || pair.second->team_id != hum->team_id)) { @@ -656,6 +661,7 @@ void Room::OnHumanDie(Human* hum) } frame_event.AddExplosionEx(hum, 0, hum->pos, 1); } + #endif --alive_count_; --App::Instance()->perf.alive_count; NotifyUiUpdate(); diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index ac99fb7..15ceb34 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -183,7 +183,7 @@ message MFPlayerFull optional int32 anim_seq = 11; // //optional int32 action_type = 12; //0: none 1:reload 2:useitem 3:relive 4: rescue //optional int32 action_duration = 22; //持续时间毫秒 - optional MFSkin skin = 13; //皮肤id + repeated MFSkin skin = 13; //皮肤id optional int32 backpack = 14; //背包 optional int32 helmet = 16; //头盔 optional int32 chest = 17; //防弹衣 @@ -423,7 +423,7 @@ message MFActivePlayerData optional int32 action_item_id = 6; optional int32 action_target_id = 7; - optional MFSkin skin = 30; //皮肤id + repeated MFSkin skin = 30; //皮肤id optional int32 backpack = 31; //背包 optional int32 helmet = 32; //头盔 optional int32 chest = 33; //防弹衣