修复坐骑相关bug

This commit is contained in:
aozhiwei 2020-03-13 17:40:14 +08:00
parent c36ce53e05
commit 21d43977b8
3 changed files with 17 additions and 3 deletions

View File

@ -110,6 +110,7 @@ enum BuffEffectType_e
kBET_Begin = 0, kBET_Begin = 0,
kBET_ChgAttr = 1, //改变属性 kBET_ChgAttr = 1, //改变属性
kBET_Jump = 2, //翻滚 kBET_Jump = 2, //翻滚
kBET_Car = 3, //骑乘
kBET_OnceChgAttr = 11, //一次性buff kBET_OnceChgAttr = 11, //一次性buff
kBET_End kBET_End
}; };

View File

@ -856,6 +856,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
real_dead = true; real_dead = true;
OnDie(); OnDie();
} }
DoGetDown();
} }
} }
@ -902,6 +903,7 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name, i
if (HasNoDownedTeammate()) { if (HasNoDownedTeammate()) {
ability.hp = MetaMgr::Instance()->GetSysParamAsInt("downed_recover_hp"); ability.hp = MetaMgr::Instance()->GetSysParamAsInt("downed_recover_hp");
downed = true; downed = true;
DoGetDown();
downed_timer = room->xtimer.AddRepeatTimerAndAttach( downed_timer = room->xtimer.AddRepeatTimerAndAttach(
SERVER_FRAME_RATE, SERVER_FRAME_RATE,
a8::XParams() a8::XParams()
@ -1088,6 +1090,7 @@ void Human::DoGetDown()
SyncAroundPlayers(__FILE__, __LINE__, __func__); SyncAroundPlayers(__FILE__, __LINE__, __func__);
room->NotifyUiUpdate(); room->NotifyUiUpdate();
car_ = HumanCar(); car_ = HumanCar();
CancelAction();
} }
} }
@ -2253,6 +2256,9 @@ void Human::ProcLootSkin(Loot* entity, MetaData::Equip* item_meta)
void Human::ProcLootCar(Loot* entity, MetaData::Equip* item_meta) void Human::ProcLootCar(Loot* entity, MetaData::Equip* item_meta)
{ {
if (downed) {
return;
}
if (car_.car_id != 0) { if (car_.car_id != 0) {
int entity_uniid = room->CreateLoot(car_.car_id, GetPos(), 1, 1); int entity_uniid = room->CreateLoot(car_.car_id, GetPos(), 1, 1);
Entity* loot_entity = room->GetEntityByUniId(entity_uniid); Entity* loot_entity = room->GetEntityByUniId(entity_uniid);
@ -2262,7 +2268,10 @@ void Human::ProcLootCar(Loot* entity, MetaData::Equip* item_meta)
((Loot*)loot_entity)->param2 = 0; ((Loot*)loot_entity)->param2 = 0;
room->UpdateCarObject(car_.car_uniid, loot_entity->entity_uniid, loot_entity->GetPos()); room->UpdateCarObject(car_.car_uniid, loot_entity->entity_uniid, loot_entity->GetPos());
} }
RemoveBuffById(item_meta->i->buffid()); room->TakeOffCarObject(entity_uniid, GetPos());
if (car_.meta->i->buffid()) {
RemoveBuffById(car_.meta->i->buffid());
}
} }
car_.car_uniid = entity->entity_uniid; car_.car_uniid = entity->entity_uniid;
car_.car_id = item_meta->i->id(); car_.car_id = item_meta->i->id();
@ -2272,6 +2281,7 @@ void Human::ProcLootCar(Loot* entity, MetaData::Equip* item_meta)
if (buff_meta) { if (buff_meta) {
AddBuff(buff_meta, 1); AddBuff(buff_meta, 1);
} }
CancelAction();
SyncAroundPlayers(__FILE__, __LINE__, __func__); SyncAroundPlayers(__FILE__, __LINE__, __func__);
room->TakeOnCarObject(car_.car_uniid); room->TakeOnCarObject(car_.car_uniid);
room->NotifyUiUpdate(); room->NotifyUiUpdate();
@ -2343,7 +2353,6 @@ void Human::FindLocationWithTarget(Entity* target)
void Human::OnDie() void Human::OnDie()
{ {
room->OnHumanDie(this); room->OnHumanDie(this);
DoGetDown();
SyncAroundPlayers(__FILE__, __LINE__, __func__); SyncAroundPlayers(__FILE__, __LINE__, __func__);
if (team_members) { if (team_members) {
for (auto& hum : *team_members) { for (auto& hum : *team_members) {
@ -2625,6 +2634,7 @@ void Human::ProcBuffEffect(Buff* buff)
{ {
switch (buff->meta->i->buff_effect()) { switch (buff->meta->i->buff_effect()) {
case kBET_ChgAttr: case kBET_ChgAttr:
case kBET_Car:
{ {
RecalcBuffAttr(); RecalcBuffAttr();
} }
@ -2649,7 +2659,8 @@ void Human::RecalcBuffAttr()
buff_attr_abs_ = {}; buff_attr_abs_ = {};
buff_attr_rate_ = {}; buff_attr_rate_ = {};
for (auto& buff : buff_list_) { for (auto& buff : buff_list_) {
if (buff.meta->i->buff_effect() == kBET_ChgAttr) { if (buff.meta->i->buff_effect() == kBET_ChgAttr ||
buff.meta->i->buff_effect() == kBET_Car) {
int attr_type = (int)buff.meta->param1; int attr_type = (int)buff.meta->param1;
int calc_type = (int)buff.meta->param2; int calc_type = (int)buff.meta->param2;
if (IsValidHumanAttr(attr_type)) { if (IsValidHumanAttr(attr_type)) {

View File

@ -1473,6 +1473,8 @@ void Room::UpdateCarObject(int old_uniid, int new_uniid, a8::Vec2 pos)
new_obj.pos = pos; new_obj.pos = pos;
car_hash_[new_uniid] = new_obj; car_hash_[new_uniid] = new_obj;
car_hash_.erase(old_uniid); car_hash_.erase(old_uniid);
} else {
assert(false);
} }
} }