皮肤逻辑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()
{
health = meta->i->health();
skin = 14001;
skin.skin_id = 14001;
skin.skin_lv = 1;
RecalcSelfCollider();
}

View File

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

View File

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

View File

@ -99,7 +99,7 @@ void Human::FillMFObjectFull(cs::MFObjectFull* full_data)
p->set_disconnected(disconnected);
p->set_anim_type(anim_type);
p->set_anim_seq(anim_seq);
p->set_skin(skin);
skin.ToPB(p->mutable_skin());
p->set_backpack(backpack);
p->set_helmet(helmet);
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_skin(skin);
skin.ToPB(player_data->mutable_skin());
player_data->set_backpack(backpack);
player_data->set_helmet(helmet);
player_data->set_chest(chest);
@ -1671,6 +1671,12 @@ int Human::GetWeaponConfigLv(int weapon_id)
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()
{
if (!new_objects.empty()) {

View File

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

View File

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

View File

@ -37,15 +37,22 @@ Player* PlayerMgr::CreatePlayerByCMJoin(int socket, const cs::CMJoin& msg)
hum->use_touch = msg.use_touch();
hum->avatar_url = msg.avatar_url();
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()) {
if (weapon.weapon_id() != 0 && weapon.weapon_lv() > 0) {
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;
return hum;
}

View File

@ -26,3 +26,9 @@ int Weapon::GetClipVolume()
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;
}
namespace cs
{
class MFWeapon;
class MFSkin;
}
struct GasData
{
GasMode_e gas_mode = GasInactive;
@ -47,6 +53,14 @@ struct Weapon
int GetClipVolume();
};
struct Skin
{
int skin_id = 0;
int skin_lv = 0;
void ToPB(cs::MFSkin* pb_obj);
};
struct PlayerStats
{
int kills = 0;

View File

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