皮肤逻辑ok

This commit is contained in:
aozhiwei 2019-05-23 10:35:45 +08:00
parent 1163463151
commit 94f57bd47d
10 changed files with 70 additions and 29 deletions

View File

@ -22,7 +22,8 @@ Android::~Android()
void Android::Initialize() void Android::Initialize()
{ {
health = meta->i->health(); health = meta->i->health();
skin = 14001; skin.skin_id = 14001;
skin.skin_lv = 1;
RecalcSelfCollider(); RecalcSelfCollider();
} }

View File

@ -48,7 +48,7 @@ void Hero::FillMFObjectFull(cs::MFObjectFull* full_data)
pos.ToPB(p->mutable_pos()); pos.ToPB(p->mutable_pos());
attack_dir.ToPB(p->mutable_dir()); attack_dir.ToPB(p->mutable_dir());
p->set_skin(skin); skin.ToPB(p->mutable_skin());
p->set_backpack(backpack); p->set_backpack(backpack);
p->set_helmet(helmet); p->set_helmet(helmet);
p->set_chest(chest); p->set_chest(chest);

View File

@ -15,7 +15,7 @@ class Hero : public Entity
Human* master = nullptr; Human* master = nullptr;
int skin = 0; Skin skin;
int backpack = 0; int backpack = 0;
int helmet = 0; int helmet = 0;
int chest = 0; int chest = 0;

View File

@ -99,7 +99,7 @@ void Human::FillMFObjectFull(cs::MFObjectFull* full_data)
p->set_disconnected(disconnected); p->set_disconnected(disconnected);
p->set_anim_type(anim_type); p->set_anim_type(anim_type);
p->set_anim_seq(anim_seq); p->set_anim_seq(anim_seq);
p->set_skin(skin); skin.ToPB(p->mutable_skin());
p->set_backpack(backpack); p->set_backpack(backpack);
p->set_helmet(helmet); p->set_helmet(helmet);
p->set_chest(chest); p->set_chest(chest);
@ -1117,7 +1117,7 @@ void Human::FillMFActivePlayerData(cs::MFActivePlayerData* player_data)
player_data->set_action_target_id(action_target_id); player_data->set_action_target_id(action_target_id);
} }
} }
player_data->set_skin(skin); skin.ToPB(player_data->mutable_skin());
player_data->set_backpack(backpack); player_data->set_backpack(backpack);
player_data->set_helmet(helmet); player_data->set_helmet(helmet);
player_data->set_chest(chest); player_data->set_chest(chest);
@ -1671,6 +1671,12 @@ int Human::GetWeaponConfigLv(int weapon_id)
return itr != weapon_configs.end() ? itr->second : 0; return itr != weapon_configs.end() ? itr->second : 0;
} }
int Human::GetSkinConfigLv(int skin_id)
{
auto itr = skin_configs.find(skin_id);
return itr != skin_configs.end() ? itr->second : 0;
}
void Human::ClearFrameData() void Human::ClearFrameData()
{ {
if (!new_objects.empty()) { if (!new_objects.empty()) {

View File

@ -60,7 +60,7 @@ class Human : public Entity
int action_duration = 0; int action_duration = 0;
int action_item_id = 0; int action_item_id = 0;
int action_target_id = 0; int action_target_id = 0;
int skin = 0; Skin skin;
int backpack = 0; int backpack = 0;
int helmet = 0; int helmet = 0;
int chest = 0; int chest = 0;
@ -102,6 +102,7 @@ class Human : public Entity
float def = 0.0f; float def = 0.0f;
std::map<int, int> weapon_configs; std::map<int, int> weapon_configs;
std::map<int, int> skin_configs;
Human(); Human();
virtual ~Human() override; virtual ~Human() override;
@ -176,6 +177,7 @@ class Human : public Entity
void SendUIUpdate(); void SendUIUpdate();
void SendWxVoip(); void SendWxVoip();
int GetWeaponConfigLv(int weapon_id); int GetWeaponConfigLv(int weapon_id);
int GetSkinConfigLv(int skin_id);
private: private:
void ClearFrameData(); void ClearFrameData();

View File

@ -28,7 +28,7 @@ void Player::Initialize()
Human::Initialize(); Human::Initialize();
health = meta->i->health(); health = meta->i->health();
max_energy_shield = energy_shield; max_energy_shield = energy_shield;
skin_meta = MetaMgr::Instance()->GetDress(skin); skin_meta = MetaMgr::Instance()->GetDress(skin.skin_id);
if (skin_meta) { if (skin_meta) {
skill_meta = MetaMgr::Instance()->GetSkill(skin_meta->i->skill_id()); skill_meta = MetaMgr::Instance()->GetSkill(skin_meta->i->skill_id());
} else { } else {
@ -547,11 +547,12 @@ void Player::LootInteraction(Loot* entity)
break; break;
case 8: case 8:
{ {
if (skin != 0) { if (skin.skin_id != 0) {
room->DropItem(pos, skin, 1, 1); room->DropItem(pos, skin.skin_id, 1, skin.skin_lv);
} }
skin = entity->item_id; skin.skin_id = entity->item_id;
skin_meta = MetaMgr::Instance()->GetDress(skin); skin.skin_lv = std::max(1, GetSkinConfigLv(skin.skin_id));
skin_meta = MetaMgr::Instance()->GetDress(skin.skin_id);
if (skin_meta) { if (skin_meta) {
skill_meta = MetaMgr::Instance()->GetSkill(skin_meta->i->skill_id()); skill_meta = MetaMgr::Instance()->GetSkill(skin_meta->i->skill_id());
} else { } else {

View File

@ -37,15 +37,22 @@ Player* PlayerMgr::CreatePlayerByCMJoin(int socket, const cs::CMJoin& msg)
hum->use_touch = msg.use_touch(); hum->use_touch = msg.use_touch();
hum->avatar_url = msg.avatar_url(); hum->avatar_url = msg.avatar_url();
hum->energy_shield = msg.energy_shield(); hum->energy_shield = msg.energy_shield();
hum->skin = msg.baseskin();
// hum->basemelee = msg.basemelee();
// hum->elo_score = msg.elo_score();
// hum->gmode = msg.gmode();
for (auto& weapon : msg.weapons()) { for (auto& weapon : msg.weapons()) {
if (weapon.weapon_id() != 0 && weapon.weapon_lv() > 0) { if (weapon.weapon_id() != 0 && weapon.weapon_lv() > 0) {
hum->weapon_configs[weapon.weapon_id()] = weapon.weapon_lv(); hum->weapon_configs[weapon.weapon_id()] = weapon.weapon_lv();
} }
} }
for (auto& skin : msg.skins()) {
if (skin.skin_id() != 0 && skin.skin_lv() > 0) {
hum->skin_configs[skin.skin_id()] = skin.skin_lv();
}
}
#if 1
hum->skin.skin_id = msg.baseskin();
if (hum->skin.skin_id != 0){
hum->skin.skin_lv = std::max(1, hum->GetSkinConfigLv(hum->skin.skin_id));
}
#endif
socket_hash_[socket] = hum; socket_hash_[socket] = hum;
return hum; return hum;
} }

View File

@ -26,3 +26,9 @@ int Weapon::GetClipVolume()
return meta->i->clip_volume(); return meta->i->clip_volume();
} }
} }
void Skin::ToPB(cs::MFSkin* pb_obj)
{
pb_obj->set_skin_id(skin_id);
pb_obj->set_skin_lv(skin_lv);
}

View File

@ -17,6 +17,12 @@ namespace MetaData
struct EquipUpgrade; struct EquipUpgrade;
} }
namespace cs
{
class MFWeapon;
class MFSkin;
}
struct GasData struct GasData
{ {
GasMode_e gas_mode = GasInactive; GasMode_e gas_mode = GasInactive;
@ -47,6 +53,14 @@ struct Weapon
int GetClipVolume(); int GetClipVolume();
}; };
struct Skin
{
int skin_id = 0;
int skin_lv = 0;
void ToPB(cs::MFSkin* pb_obj);
};
struct PlayerStats struct PlayerStats
{ {
int kills = 0; int kills = 0;

View File

@ -125,6 +125,13 @@ message MFWeapon
optional int32 ammo = 4; // optional int32 ammo = 4; //
} }
//
message MFSkin
{
optional int32 skin_id = 1; //id
optional int32 skin_lv = 2; //
}
//- //-
message MFPlayerPart message MFPlayerPart
{ {
@ -149,7 +156,7 @@ message MFPlayerFull
optional int32 anim_seq = 11; // optional int32 anim_seq = 11; //
//optional int32 action_type = 12; //0: none 1:reload 2:useitem 3:relive 4: rescue //optional int32 action_type = 12; //0: none 1:reload 2:useitem 3:relive 4: rescue
//optional int32 action_duration = 22; // //optional int32 action_duration = 22; //
optional int32 skin = 13; //id optional MFSkin skin = 13; //id
optional int32 backpack = 14; // optional int32 backpack = 14; //
optional int32 helmet = 16; // optional int32 helmet = 16; //
optional int32 chest = 17; // optional int32 chest = 17; //
@ -312,7 +319,7 @@ message MFHeroFull
optional MFVector2D dir = 3; // optional MFVector2D dir = 3; //
optional int32 masert_uniid = 4; //id optional int32 masert_uniid = 4; //id
optional int32 skin = 13; //id optional MFSkin skin = 13; //id
optional int32 backpack = 14; // optional int32 backpack = 14; //
optional int32 helmet = 16; // optional int32 helmet = 16; //
optional int32 chest = 17; // optional int32 chest = 17; //
@ -380,7 +387,7 @@ message MFActivePlayerData
optional int32 action_item_id = 6; optional int32 action_item_id = 6;
optional int32 action_target_id = 7; optional int32 action_target_id = 7;
optional int32 skin = 30; //id optional MFSkin skin = 30; //id
optional int32 backpack = 31; // optional int32 backpack = 31; //
optional int32 helmet = 32; // optional int32 helmet = 32; //
optional int32 chest = 33; // optional int32 chest = 33; //
@ -575,23 +582,20 @@ message CMJoin
{ {
optional int32 server_id = 1; //serverid optional int32 server_id = 1; //serverid
optional string team_uuid = 2; //id () optional string team_uuid = 2; //id ()
optional int32 team_mode = 3; // 0: 1: optional string account_id = 3; //id account_id
optional int32 player_count = 4; //(1) optional int32 team_mode = 4; // 0: 1:
optional bool auto_fill = 5; // optional int32 player_count = 5; //(1)
optional int32 bot = 6; // optional bool auto_fill = 6; //
optional string name = 7; // optional int32 bot = 7; //
optional bool use_touch = 8; //zzz optional string name = 8; //
optional string account_id = 9; //id account_id optional bool use_touch = 9; //zzz
repeated int32 emotes = 10; // repeated int32 emotes = 10; //
optional string avatar_url = 11; // optional string avatar_url = 11; //
optional int32 energy_shield = 12; // optional int32 energy_shield = 12; //
optional int32 baseskin = 13; //id optional int32 baseskin = 13; //id
optional int32 basemelee = 14; //xx optional int32 basemelee = 14; //xx
optional int32 elo_score = 15;
repeated MFPlug plugs = 16;
repeated MFWeapon weapons = 17; // repeated MFWeapon weapons = 17; //
repeated MFSkin skins = 18; // key: id value:
optional string gmode = 21;
} }
// //