110 lines
3.4 KiB
C++
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
|
|
}
|