Buff framework tweaks + polish

This commit is contained in:
gsemaj
2022-07-19 01:09:25 -07:00
committed by gsemaj
parent f150595f70
commit 0c5a9400ce
8 changed files with 36 additions and 32 deletions

View File

@@ -27,13 +27,14 @@ void Buff::clear() {
}
void Buff::addStack(BuffStack* stack) {
stack->buff = this;
if(stack->onApply) stack->onApply(self, stack);
stacks.push_back(*stack);
}
bool Buff::hasClass(BuffClass buffClass) {
for(BuffStack& stack : stacks) {
if(stack.buffClass == buffClass)
if(stack.buffStackClass == buffClass)
return true;
}
return false;
@@ -42,8 +43,8 @@ bool Buff::hasClass(BuffClass buffClass) {
BuffClass Buff::maxClass() {
BuffClass buffClass = BuffClass::NONE;
for(BuffStack& stack : stacks) {
if(stack.buffClass > buffClass)
buffClass = stack.buffClass;
if(stack.buffStackClass > buffClass)
buffClass = stack.buffStackClass;
}
return buffClass;
}
@@ -53,7 +54,7 @@ bool Buff::isStale() {
}
#pragma region Handlers
void Buffs::timeBuffUpdate(EntityRef self, BuffStack* buff, int status) {
void Buffs::timeBuffUpdate(EntityRef self, BuffStack* stack, int status) {
if(self.kind != EntityKind::PLAYER)
return; // not implemented
@@ -62,21 +63,21 @@ void Buffs::timeBuffUpdate(EntityRef self, BuffStack* buff, int status) {
if(plr == nullptr)
return;
if(status == ETBU_DEL && plr->hasBuff(buff->id))
if(status == ETBU_DEL && plr->hasBuff(stack->buff->id))
return; // no premature status removal!
int cbf = plr->getCompositeCondition();
if(status == ETBU_ADD) cbf |= CSB_FROM_ECSB(buff->id);
if(status == ETBU_ADD && stack->buff->id > 0) cbf |= CSB_FROM_ECSB(stack->buff->id);
INITSTRUCT(sP_FE2CL_PC_BUFF_UPDATE, pkt);
pkt.eCSTB = buff->id; // eCharStatusTimeBuffID
pkt.eCSTB = stack->buff->id; // eCharStatusTimeBuffID
pkt.eTBU = status; // eTimeBuffUpdate
pkt.eTBT = (int)buff->buffClass;
pkt.eTBT = (int)stack->buffStackClass;
pkt.iConditionBitFlag = cbf;
self.sock->sendPacket((void*)&pkt, P_FE2CL_PC_BUFF_UPDATE, sizeof(sP_FE2CL_PC_BUFF_UPDATE));
}
void Buffs::timeBuffTimeoutViewable(EntityRef self, BuffStack* buff, int ct) {
void Buffs::timeBuffTimeoutViewable(EntityRef self, BuffStack* stack, int ct) {
if(self.kind != EntityKind::PLAYER)
return; // not implemented