2020-03-02 17:11:57 +08:00

110 lines
3.4 KiB
C++

#include "precompile.h"
#include "buff.h"
#include "metamgr.h"
#include "human.h"
#include "room.h"
#include "collider.h"
int Buff::GetLeftTime()
{
int passed_ms = (owner->room->frame_no - add_frameno) * FRAME_RATE_MS;
return std::max(GetLastingTime() - passed_ms, 0);
}
int Buff::GetLastingTime()
{
return meta->i->duration_time() * 1000;
}
void Buff::FillMFBuff(cs::MFBuff* buff_pb)
{
buff_pb->set_buff_id(meta->i->buff_id());
buff_pb->set_left_time(GetLeftTime());
buff_pb->set_lasting_time(GetLastingTime());
}
void Buff::ProcLastBurn(const a8::XParams& param)
{
#if 0
Human* hum = (Human*)param.sender.GetUserData();
Buff* buff = (Buff*)param.param1.GetUserData();
if (!hum->dead && !hum->HasBuffEffect(kBET_Invincible)) {
float power = buff->meta->param1;
float def = hum->ability.def;
float finally_dmg = power * (1 - def/MetaMgr::Instance()->K);
// hum->stats.damage_amount_out += finaly_dmg;
hum->DecHP(finally_dmg,
hum->last_attacker_id,
hum->last_attacker_name,
hum->last_attacker_weapon_id);
}
#endif
}
void Buff::ProcReleaseDcgr(const a8::XParams& param)
{
#if 0
Human* sender = (Human*)param.sender.GetUserData();
Buff* buff = (Buff*)param.param1.GetUserData();
MetaData::Buff* add_buff = MetaMgr::Instance()->GetBuff(buff->meta->param3);
if (!sender->dead && add_buff) {
CircleCollider collider;
collider.owner = sender;
collider.rad = buff->meta->param2;
for (auto& cell : sender->grid_list) {
for (Human* hum : cell->human_list) {
if (hum != sender && !hum->HasBuffEffect(kBET_Invincible)) {
if (hum->TestCollision(&collider)) {
hum->AddBuff(add_buff, buff->skill_lv);
}
}
}
}
}
#endif
}
void Buff::ProcReleaseFireBomb(const a8::XParams& param)
{
#if 0
Human* sender = (Human*)param.sender.GetUserData();
Buff* buff = (Buff*)param.param1.GetUserData();
if (!sender->dead) {
SectorCollider collider;
collider.owner = sender;
collider.angle = buff->meta->param2;
collider.rad = buff->meta->param3;
for (auto& cell : sender->grid_list) {
for (Human* hum : cell->human_list) {
if (hum != sender && !hum->dead && !hum->HasBuffEffect(kBET_Invincible)) {
if (hum->TestCollision(&collider)) {
float power = buff->meta->param4 + sender->ability.atk;
float def = hum->ability.def;
float finally_dmg = power * (1 - def/MetaMgr::Instance()->K);
sender->stats.damage_amount_out += finally_dmg;
hum->DecHP(
finally_dmg,
sender->entity_uniid,
sender->name,
0
);
}
}
}
}
}
#endif
}
void Buff::ProcLastRecover(const a8::XParams& param)
{
#if 0
Human* sender = (Human*)param.sender.GetUserData();
Buff* buff = (Buff*)param.param1.GetUserData();
if (!sender->dead) {
sender->RecoverHp(buff->meta->param1);
}
#endif
}