From c8618d3dea5356c0fed222eae218a2fe833abbd3 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 29 Jul 2020 19:40:57 +0800 Subject: [PATCH] 1 --- server/gameserver/constant.h | 1 + server/gameserver/human.cc | 44 +++++++++++++++++++++++++++++++----- server/gameserver/human.h | 5 +++- server/gameserver/room.cc | 4 ++-- 4 files changed, 45 insertions(+), 9 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index ef3faa9..46ae74b 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -132,6 +132,7 @@ enum BuffEffectType_e kBET_Terminator = 13, //终结者模式 kBET_PlayShotAni = 14, //播放射击动画 kBET_Vertigo = 15, //眩晕 + kBET_DecHp = 16, //扣血 kBET_End }; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 4c53fdc..b8dbf73 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1901,7 +1901,19 @@ void Human::_UpdateSpecMove() } } if (move_end) { - if (GetBuffByEffectId(kBET_JumpTo)) { + Buff* buff = GetBuffByEffectId(kBET_JumpTo); + if (buff) { + if (buff->skill_meta == skill_meta_ && + !skill_meta_->phases.empty()) { + std::set target_list; + metatable::Skill* mutable_skill_meta = (metatable::Skill*)skill_meta_->i; + float old_skill_distance = skill_meta_->i->skill_distance(); + mutable_skill_meta->set_skill_distance(skill_meta_->phases[0].param1.GetDouble()); + SelectSkillTargets(GetPos(), target_list); + mutable_skill_meta->set_skill_distance(old_skill_distance); + + TriggerBuff(target_list, kBTT_SkillHit); + } RemoveBuffByEffectId(kBET_JumpTo); } if (GetBuffByEffectId(kBET_BePull)) { @@ -2747,21 +2759,21 @@ void Human::TriggerOneObjectBuff(Entity* target, BuffTriggerType_e trigger_type) case kBuffTargetSelf: //自己 { if (hum == this) { - hum->AddBuff(this, buff_meta, GetSkillLv()); + hum->AddBuff(this, buff_meta, GetSkillLv(), skill_meta_); } } break; case kBuffTargetFriendly: //友军 { if (hum->team_id == team_id) { - hum->AddBuff(this, buff_meta, GetSkillLv()); + hum->AddBuff(this, buff_meta, GetSkillLv(), skill_meta_); } } break; case kBuffTargetEnemy: //敌军 { if (hum->team_id != team_id) { - hum->AddBuff(this, buff_meta, GetSkillLv()); + hum->AddBuff(this, buff_meta, GetSkillLv(), skill_meta_); } } break; @@ -2779,7 +2791,10 @@ void Human::TriggerBuff(std::set& target_list, BuffTriggerType_e trigge } } -void Human::AddBuff(Human* caster, MetaData::Buff* buff_meta, int skill_lv) +void Human::AddBuff(Human* caster, + MetaData::Buff* buff_meta, + int skill_lv, + MetaData::Skill* buff_skill_meta) { if (GetBuffById(buff_meta->i->buff_id())) { return; @@ -2808,7 +2823,7 @@ void Human::AddBuff(Human* caster, MetaData::Buff* buff_meta, int skill_lv) buff->skill_lv = skill_lv; buff->owner = this; buff->meta = buff_meta; - //buff->skill_meta + buff->skill_meta = buff_skill_meta; buff->add_frameno = room->GetFrameNo(); buff->xtimer_attacher.xtimer = &room->xtimer; buff_effect_[buff->meta->i->buff_effect()] = buff; @@ -2994,6 +3009,23 @@ void Human::ProcBuffEffect(Human* caster, Buff* buff) } break; + case kBET_Vertigo: + { + int i = 0; + } + break; + case kBET_DecHp: + { + #if 0 + float def = hum->ability.def * (1 + hum->GetBuffAttrRate(kHAT_Def)) + + hum->GetBuffAttrAbs(kHAT_Def); + #endif + DecHP(buff->meta->param1, + caster->GetEntityUniId(), + caster->name, + 0); + } + break; default: { } diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 4022b5f..67deca3 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -249,7 +249,10 @@ class Human : public MoveableEntity float GetSkillAtkAdd(int skill_id); void TriggerOneObjectBuff(Entity* target, BuffTriggerType_e trigger_type); void TriggerBuff(std::set& target_list, BuffTriggerType_e trigger_type); - void AddBuff(Human* caster, MetaData::Buff* buff_meta, int skill_lv); + void AddBuff(Human* caster, + MetaData::Buff* buff_meta, + int skill_lv, + MetaData::Skill* buff_skill_meta = nullptr); void RemoveBuffById(int buff_id); void RemoveBuffByEffectId(int buff_effect_id); void ClearBuffList(); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 5d27156..3d88c4d 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -1988,7 +1988,7 @@ long long Room::GetGasInactiveTime() if (f8::IsTestEnv()) { return MetaMgr::Instance()->zbmode_gas_inactive_time + 10000; } else { - return 5; + return 5 + 100; } #else return MetaMgr::Instance()->zbmode_gas_inactive_time; @@ -2662,7 +2662,7 @@ void Room::AddPlayerPostProc(Player* hum) } if (GetRoomMode() == kZombieMode) { #if 1 - hum->ChangeToRace(kZombieRace, 2); + hum->ChangeToRace(kZombieRace, 3); #else hum->ChangeToRace(kHumanRace, 1); #endif