mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2025-12-19 19:10:35 +00:00
Buff framework tweaks + polish
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user