添加多把武器支持

This commit is contained in:
aozhiwei 2020-08-14 14:15:37 +08:00
parent 8f7ce4afee
commit 5587ef56b9
4 changed files with 27 additions and 14 deletions

View File

@ -135,7 +135,12 @@ void Human::Initialize()
RecalcSelfCollider(); RecalcSelfCollider();
volume_ = meta->volume; volume_ = meta->volume;
observers_.insert(this); observers_.insert(this);
ability.hp = meta->i->health() + (spec_weapon.meta ? spec_weapon.GetAttrValue(kHAT_MaxHp) : 0); ability.hp = meta->i->health();
for (auto& weapon : spec_weapons) {
if (weapon.meta) {
ability.hp += (weapon.meta ? weapon.GetAttrValue(kHAT_MaxHp) : 0);
}
}
} }
float Human::GetSpeed() float Human::GetSpeed()
@ -3943,7 +3948,12 @@ void Human::OnMetaChange()
curr_weapon = &weapons[0]; curr_weapon = &weapons[0];
} }
} }
ability.hp = meta->i->health() + (spec_weapon.meta ? spec_weapon.GetAttrValue(kHAT_MaxHp) : 0); ability.hp = meta->i->health();
for (auto& weapon : spec_weapons) {
if (weapon.meta) {
ability.hp += (weapon.meta ? weapon.GetAttrValue(kHAT_MaxHp) : 0);
}
}
room->frame_event.AddHpChg(this); room->frame_event.AddHpChg(this);
RecalcBaseAttr(); RecalcBaseAttr();
skill_meta_ = MetaMgr::Instance()->GetSkill(meta->i->active_skill()); skill_meta_ = MetaMgr::Instance()->GetSkill(meta->i->active_skill());

View File

@ -128,7 +128,7 @@ class Human : public MoveableEntity
long long send_msg_times = 0; long long send_msg_times = 0;
Weapon spec_weapon; std::list<Weapon> spec_weapons;
Weapon grow_weapon; Weapon grow_weapon;
std::map<int, int> weapon_configs; std::map<int, int> weapon_configs;
std::map<int, int> skin_configs; std::map<int, int> skin_configs;

View File

@ -873,22 +873,24 @@ void Player::ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google:
curr_weapon->ammo = add_num; curr_weapon->ammo = add_num;
} }
} }
if (spec_weapon.weapon_id != 0) { for (auto& spec_weapon : spec_weapons) {
MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(spec_weapon.weapon_id); MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(spec_weapon.weapon_id);
if (item_meta && if (item_meta &&
item_meta->i->equip_type() == EQUIP_TYPE_WEAPON) { item_meta->i->equip_type() == EQUIP_TYPE_WEAPON) {
if (item_meta->i->equip_subtype() != 1) { if (item_meta->i->equip_subtype() != 1) {
Weapon* weapon = &weapons[GUN_SLOT1]; int weapon_idx = GUN_SLOT1;
weapon->weapon_idx = GUN_SLOT1; if (weapons[weapon_idx].weapon_id != 0) {
if (curr_weapon != &weapons[GUN_SLOT2]) { weapon_idx = GUN_SLOT2;
curr_weapon = &weapons[GUN_SLOT1];
} }
if (weapon) { if (weapons[weapon_idx].weapon_id == 0) {
Weapon* weapon = &weapons[weapon_idx];
weapon->weapon_idx = weapon_idx;
weapon->weapon_id = spec_weapon.weapon_id; weapon->weapon_id = spec_weapon.weapon_id;
weapon->weapon_lv = spec_weapon.weapon_lv; weapon->weapon_lv = spec_weapon.weapon_lv;
weapon->ammo = spec_weapon.ammo; weapon->ammo = spec_weapon.ammo;
weapon->meta = item_meta; weapon->meta = item_meta;
weapon->Recalc(); weapon->Recalc();
curr_weapon = &weapons[GUN_SLOT1];
} }
} }
} }

View File

@ -82,11 +82,12 @@ Player* PlayerMgr::CreatePlayerByCMJoin(Player* hum,
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(weapon.weapon_id()); MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(weapon.weapon_id());
if (equip_meta) { if (equip_meta) {
hum->weapon_configs[weapon.weapon_id()] = weapon.weapon_lv(); hum->weapon_configs[weapon.weapon_id()] = weapon.weapon_lv();
hum->spec_weapon.weapon_id = weapon.weapon_id(); Weapon& spec_weapon = a8::FastAppend(hum->spec_weapons);
hum->spec_weapon.weapon_lv = weapon.weapon_lv(); spec_weapon.weapon_id = weapon.weapon_id();
hum->spec_weapon.ammo = weapon.ammo(); spec_weapon.weapon_lv = weapon.weapon_lv();
hum->spec_weapon.meta = equip_meta; spec_weapon.ammo = weapon.ammo();
hum->spec_weapon.Recalc(); spec_weapon.meta = equip_meta;
spec_weapon.Recalc();
} }
} }
} }