This commit is contained in:
aozhiwei 2019-08-28 11:16:01 +08:00
parent 531bdb3e22
commit b8a837e126
8 changed files with 61 additions and 23 deletions

View File

@ -113,11 +113,15 @@ void Human::FillMFObjectFull(cs::MFObjectFull* full_data)
p->set_disconnected(disconnected);
p->set_anim_type(anim_type);
p->set_anim_seq(anim_seq);
if (skin_tank.skin_id != 0) {
skin_tank.ToPB(p->mutable_skin());
} else {
if (skin_jlf.skin_id != 0) {
skin_jlf.ToPB(p->mutable_skin());
} else {
skin.ToPB(p->mutable_skin());
}
}
p->set_backpack(backpack);
p->set_helmet(helmet);
p->set_chest(chest);
@ -318,8 +322,12 @@ void Human::RecalcSelfCollider()
AddCollider(self_collider_);
}
self_collider_->pos = a8::Vec2();
if (skin_tank_meta) {
self_collider_->rad = skin_tank_meta->i->rad();
} else {
self_collider_->rad = meta->i->radius();
}
}
bool Human::IsCollision()
{
@ -2242,3 +2250,39 @@ void Human::SendBattleReport()
);
delete params;
}
void Human::ProcLootSkin(Loot* entity, MetaData::Equip* item_meta)
{
if (item_meta->i->is_luck()) {
if (item_meta->i->is_luck() == 2) {
if (skin_tank.skin_id != 0) {
int entity_uniid = room->CreateLoot(skin_tank.skin_id, pos, 1, 1);
Entity* loot_entity = room->GetEntityByUniId(entity_uniid);
if (loot_entity && loot_entity->entity_type == ET_Loot) {
((Loot*)loot_entity)->bullet_num = skin_tank.bullet_num;
}
}
skin_tank.skin_id = item_meta->i->id();
skin_tank.skin_lv = std::max(1, GetSkinConfigLv(skin_tank.skin_id));
skin_tank.bullet_num = entity->bullet_num;
skin_tank_meta = item_meta;
RecalcSelfCollider();
RecalcBuff();
SyncAroundPlayers();
} else {
if (skin_jlf.skin_id != 0) {
room->DropItem(pos, skin_jlf.skin_id, 1, skin_jlf.skin_lv);
}
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 (skin_jlf_meta) {
skill_meta = MetaMgr::Instance()->GetSkill(skin_jlf_meta->i->skill_id());
} else {
skill_meta = nullptr;
}
RecalcBuff();
SyncAroundPlayers();
}
}
}

View File

@ -32,6 +32,7 @@ struct xtimer_list;
class CircleCollider;
class AabbCollider;
class Obstacle;
class Loot;
class Human : public Entity
{
public:
@ -50,7 +51,7 @@ class Human : public Entity
MetaData::Dress* skin_meta = nullptr;
MetaData::Skill* skill_meta = nullptr;
MetaData::Dress* skin_jlf_meta = nullptr;
MetaData::Dress* skin_tank_meta = nullptr;
MetaData::Equip* skin_tank_meta = nullptr;
HumanAbility buff;
a8::Vec2 move_dir;
@ -207,6 +208,7 @@ class Human : public Entity
protected:
void _UpdateMove(int speed);
void ProcLootSkin(Loot* entity, MetaData::Equip* item_meta);
private:
void ClearFrameData();

View File

@ -18,6 +18,7 @@ class Loot : public Entity
int count = 0;
int item_level = 0;
bool pickuped = false;
int bullet_num = 0;
Loot();
virtual ~Loot() override;

View File

@ -536,21 +536,7 @@ void Player::LootInteraction(Loot* entity)
break;
case 8:
{
if (item_meta->i->is_luck()) {
if (skin_jlf.skin_id != 0) {
room->DropItem(pos, skin_jlf.skin_id, 1, skin_jlf.skin_lv);
}
skin_jlf.skin_id = entity->item_id;
skin_jlf.skin_lv = std::max(1, GetSkinConfigLv(skin_jlf.skin_id));
skin_jlf_meta = MetaMgr::Instance()->GetDress(skin_jlf.skin_id);
if (skin_jlf_meta) {
skill_meta = MetaMgr::Instance()->GetSkill(skin_jlf_meta->i->skill_id());
} else {
skill_meta = nullptr;
}
RecalcBuff();
SyncAroundPlayers();
}
ProcLootSkin(entity, item_meta);
}
break;
default:

View File

@ -476,13 +476,13 @@ Hero* Room::CreateHero(Human* hum)
return hero;
}
void Room::CreateLoot(int equip_id, a8::Vec2 pos, int count, int equip_lv)
int Room::CreateLoot(int equip_id, a8::Vec2 pos, int count, int equip_lv)
{
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(equip_id);
if (equip_meta) {
if (equip_meta->i->equip_type() == 2 &&
MetaMgr::Instance()->fighting_mode) {
return;
return 0;
}
Loot* entity = new Loot();
entity->room = this;
@ -512,6 +512,9 @@ void Room::CreateLoot(int equip_id, a8::Vec2 pos, int count, int equip_lv)
uniid_hash_[entity->entity_uniid] = entity;
grid_service.AddEntity(entity);
entity->BroadcastFullState();
return entity->entity_uniid;
} else {
return 0;
}
}

View File

@ -76,7 +76,7 @@ public:
void DropItem(a8::Vec2 pos, int item_id, int item_count, int item_lv);
Hero* CreateHero(Human* hum);
void CreateLoot(int equip_id, a8::Vec2 pos, int count, int equip_lv);
int CreateLoot(int equip_id, a8::Vec2 pos, int count, int equip_lv);
void CreateBullet(Human* hum, Weapon* weapon,
a8::Vec2 pos, a8::Vec2 dir, float fly_distance);

View File

@ -63,6 +63,7 @@ struct Skin
{
int skin_id = 0;
int skin_lv = 0;
int bullet_num = 0;
void ToPB(cs::MFSkin* pb_obj);
};

View File

@ -77,6 +77,7 @@ message Equip
optional string bullet_born_offset = 30; //
optional float bullet_angle = 34; //
optional string name = 35; //
optional float rad = 36; //
optional string inventory_slot = 31; //
optional int32 _inventory_slot = 32; //