1
This commit is contained in:
parent
016cea1b76
commit
6ba0c3cd3d
@ -51,7 +51,8 @@ void Bullet::OnHit(std::set<Entity*>& objects)
|
||||
return;
|
||||
}
|
||||
Human* hum = (Human*)target;
|
||||
if (hum->HasBuffEffect(kBET_Invincible)) {
|
||||
if (hum->HasBuffEffect(kBET_Invincible) ||
|
||||
hum->HasBuffEffect(kBET_LordMode)) {
|
||||
continue;
|
||||
}
|
||||
#if 1
|
||||
@ -61,12 +62,14 @@ void Bullet::OnHit(std::set<Entity*>& objects)
|
||||
(hum->team_id == 0 || player->team_id != hum->team_id)) {
|
||||
#endif
|
||||
#if 1
|
||||
float dmg = gun_meta->i->atk() * (1 + player->atk_add);
|
||||
float dmg = gun_meta->i->atk() * (1 + hum->GetBuffAttrRate(kHAT_Atk)) +
|
||||
hum->GetBuffAttrAbs(kHAT_Atk);
|
||||
#else
|
||||
float dmg = gun_meta->i->atk() * (1 + player->buff.damage_add + player->atk_add);
|
||||
#endif
|
||||
#if 1
|
||||
float def = hum->ability.def;
|
||||
float def = hum->ability.def * (1 + hum->GetBuffAttrRate(kHAT_Def)) +
|
||||
hum->GetBuffAttrAbs(kHAT_Def);
|
||||
#else
|
||||
float def = hum->def + hum->buff.def_add;
|
||||
#endif
|
||||
|
@ -2915,6 +2915,22 @@ void Human::DecItem(int item_id, int item_num)
|
||||
}
|
||||
}
|
||||
|
||||
float Human::GetBuffAttrAbs(int attr_type)
|
||||
{
|
||||
if (IsValidHumanAttr(attr_type)) {
|
||||
return buff_attr_abs_[attr_type];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
float Human::GetBuffAttrRate(int attr_type)
|
||||
{
|
||||
if (IsValidHumanAttr(attr_type)) {
|
||||
return buff_attr_rate_[attr_type];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Human::RecalcBuffAttr()
|
||||
{
|
||||
buff_attr_abs_ = {};
|
||||
|
@ -134,6 +134,7 @@ class Human : public Entity
|
||||
a8::Vec2 skill_target_pos;
|
||||
float skill_param1 = 0;
|
||||
bool playing_skill = false;
|
||||
xtimer_list* ad_timer_ = nullptr;
|
||||
|
||||
Human();
|
||||
virtual ~Human() override;
|
||||
@ -243,6 +244,8 @@ class Human : public Entity
|
||||
int GetItemNum(int item_id);
|
||||
void AddItem(int item_id, int item_num);
|
||||
void DecItem(int item_id, int item_num);
|
||||
float GetBuffAttrAbs(int attr_id);
|
||||
float GetBuffAttrRate(int attr_id);
|
||||
|
||||
protected:
|
||||
void _UpdateMove(int speed);
|
||||
@ -307,7 +310,6 @@ protected:
|
||||
HumanCar car_;
|
||||
|
||||
MetaData::Skill* skill_meta_ = nullptr;
|
||||
xtimer_list* ad_timer_ = nullptr;
|
||||
|
||||
private:
|
||||
CircleCollider* self_collider_ = nullptr;
|
||||
|
@ -1228,6 +1228,10 @@ void Player::_CMAdStart(f8::MsgHdr& hdr, const cs::CMAdStart& msg)
|
||||
if (GetBuffByEffectId(kBET_AdPlaying)) {
|
||||
return;
|
||||
}
|
||||
if (ad_timer_) {
|
||||
room->xtimer.DeleteTimer(ad_timer_);
|
||||
ad_timer_ = nullptr;
|
||||
}
|
||||
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(ADPLAY_BUFFID);
|
||||
if (buff_meta) {
|
||||
AddBuff(buff_meta, 1);
|
||||
@ -1238,12 +1242,14 @@ void Player::_CMAdStart(f8::MsgHdr& hdr, const cs::CMAdStart& msg)
|
||||
.SetSender(this),
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
|
||||
Player* hum = (Player*)param.sender.GetUserData();
|
||||
hum->InternalAdCancel();
|
||||
},
|
||||
&xtimer_attacher.timer_list,
|
||||
&xtimer_attacher.timer_list_,
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
|
||||
Human* hum = (Human*)param.sender.GetUserData();
|
||||
hum->ad_timer_ = nullptr;
|
||||
}
|
||||
);
|
||||
}
|
||||
@ -1251,19 +1257,45 @@ void Player::_CMAdStart(f8::MsgHdr& hdr, const cs::CMAdStart& msg)
|
||||
|
||||
void Player::_CMAdCancel(f8::MsgHdr& hdr, const cs::CMAdCancel& msg)
|
||||
{
|
||||
if (GetBuffByEffectId(kBET_LordMode)) {
|
||||
return;
|
||||
}
|
||||
if (GetBuffByEffectId(kBET_AdPlaying)) {
|
||||
RemoveBuffByEffectId(kBET_AdPlaying);
|
||||
if (ad_timer_) {
|
||||
room->xtimer.DeleteTimer(ad_timer_);
|
||||
ad_timer_ = nullptr;
|
||||
}
|
||||
}
|
||||
InternalAdCancel();
|
||||
}
|
||||
|
||||
void Player::_CMAdEnd(f8::MsgHdr& hdr, const cs::CMAdEnd& msg)
|
||||
{
|
||||
if (GetBuffByEffectId(kBET_LordMode)) {
|
||||
return;
|
||||
}
|
||||
if (GetBuffByEffectId(kBET_AdPlaying)) {
|
||||
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(ADPLAY_BUFFID);
|
||||
if (buff_meta) {
|
||||
MetaData::Buff* lord_buff_meta = nullptr;
|
||||
if (msg.param() == 1) {
|
||||
lord_buff_meta = MetaMgr::Instance()->GetBuff(buff_meta->param1);
|
||||
} else if (msg.param() == 2) {
|
||||
lord_buff_meta = MetaMgr::Instance()->GetBuff(buff_meta->param2);
|
||||
}
|
||||
if (lord_buff_meta) {
|
||||
AddBuff(lord_buff_meta, 1);
|
||||
std::vector<std::string> strings;
|
||||
a8::Split(lord_buff_meta->i->buff_param1(), strings, ':');
|
||||
for (auto& str : strings) {
|
||||
int buff_id = a8::XValue(str);
|
||||
MetaData::Buff* ext_buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
|
||||
if (ext_buff_meta) {
|
||||
AddBuff(ext_buff_meta, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
RemoveBuffByEffectId(kBET_AdPlaying);
|
||||
if (ad_timer_) {
|
||||
room->xtimer.DeleteTimer(ad_timer_);
|
||||
ad_timer_ = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Player::InternalAdCancel()
|
||||
{
|
||||
if (GetBuffByEffectId(kBET_LordMode)) {
|
||||
return;
|
||||
|
@ -99,4 +99,6 @@ class Player : public Human
|
||||
void _CMAdCancel(f8::MsgHdr& hdr, const cs::CMAdCancel& msg);
|
||||
void _CMAdEnd(f8::MsgHdr& hdr, const cs::CMAdEnd& msg);
|
||||
|
||||
private:
|
||||
void InternalAdCancel();
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user