mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2024-11-22 21:40:05 +00:00
Compare commits
No commits in common. "02fd17c0e79e2a2f756354c070c0a1cf574b70f9" and "9affe76587244530ae5cdde4731c6454b3c6a25e" have entirely different histories.
02fd17c0e7
...
9affe76587
@ -85,26 +85,8 @@ static SkillResult handleSkillDamageNDebuff(SkillData* skill, int power, ICombat
|
|||||||
}
|
}
|
||||||
|
|
||||||
static SkillResult handleSkillLeech(SkillData* skill, int power, ICombatant* source, ICombatant* target) {
|
static SkillResult handleSkillLeech(SkillData* skill, int power, ICombatant* source, ICombatant* target) {
|
||||||
EntityRef sourceRef = source->getRef();
|
// TODO abilities
|
||||||
int heal = skill->values[0][power];
|
return SkillResult();
|
||||||
int healed = source->heal(sourceRef, heal);
|
|
||||||
int damage = heal * 2;
|
|
||||||
int dealt = target->takeDamage(sourceRef, damage);
|
|
||||||
|
|
||||||
sSkillResult_Leech result{};
|
|
||||||
|
|
||||||
result.Damage.eCT = target->getCharType();
|
|
||||||
result.Damage.iID = target->getID();
|
|
||||||
result.Damage.bProtected = dealt <= 0;
|
|
||||||
result.Damage.iDamage = dealt;
|
|
||||||
result.Damage.iHP = target->getCurrentHP();
|
|
||||||
|
|
||||||
result.Heal.eCT = result.Damage.eCT;
|
|
||||||
result.Heal.iID = result.Damage.iID;
|
|
||||||
result.Heal.iHealHP = healed;
|
|
||||||
result.Heal.iHP = source->getCurrentHP();
|
|
||||||
|
|
||||||
return SkillResult(sizeof(sSkillResult_Leech), &result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static SkillResult handleSkillBuff(SkillData* skill, int power, ICombatant* source, ICombatant* target) {
|
static SkillResult handleSkillBuff(SkillData* skill, int power, ICombatant* source, ICombatant* target) {
|
||||||
|
@ -61,14 +61,15 @@ void Player::removeBuff(int buffId, BuffClass buffClass) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Player::clearBuffs(bool force) {
|
void Player::clearBuffs(bool force) {
|
||||||
auto it = buffs.begin();
|
for(auto buff : buffs) {
|
||||||
while(it != buffs.end()) {
|
if(!force) {
|
||||||
Buff* buff = (*it).second;
|
removeBuff(buff.first);
|
||||||
if(!force) buff->clear();
|
} else {
|
||||||
delete buff;
|
delete buff.second;
|
||||||
it = buffs.erase(it);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
buffs.clear();
|
||||||
|
}
|
||||||
|
|
||||||
bool Player::hasBuff(int buffId) {
|
bool Player::hasBuff(int buffId) {
|
||||||
auto buff = buffs.find(buffId);
|
auto buff = buffs.find(buffId);
|
||||||
@ -168,8 +169,6 @@ void Player::step(time_t currTime) {
|
|||||||
// buffs
|
// buffs
|
||||||
for(auto buffEntry : buffs) {
|
for(auto buffEntry : buffs) {
|
||||||
buffEntry.second->combatTick(currTime);
|
buffEntry.second->combatTick(currTime);
|
||||||
if(!isAlive())
|
|
||||||
break; // unsafe to keep ticking if we're dead
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
@ -216,14 +215,15 @@ void CombatNPC::removeBuff(int buffId, BuffClass buffClass) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CombatNPC::clearBuffs(bool force) {
|
void CombatNPC::clearBuffs(bool force) {
|
||||||
auto it = buffs.begin();
|
for(auto buff : buffs) {
|
||||||
while(it != buffs.end()) {
|
if(!force) {
|
||||||
Buff* buff = (*it).second;
|
removeBuff(buff.first);
|
||||||
if(!force) buff->clear();
|
} else {
|
||||||
delete buff;
|
delete buff.second;
|
||||||
it = buffs.erase(it);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
buffs.clear();
|
||||||
|
}
|
||||||
|
|
||||||
bool CombatNPC::hasBuff(int buffId) {
|
bool CombatNPC::hasBuff(int buffId) {
|
||||||
auto buff = buffs.find(buffId);
|
auto buff = buffs.find(buffId);
|
||||||
@ -957,7 +957,6 @@ static void playerTick(CNServer *serv, time_t currTime) {
|
|||||||
auto it = plr->buffs.begin();
|
auto it = plr->buffs.begin();
|
||||||
while(it != plr->buffs.end()) {
|
while(it != plr->buffs.end()) {
|
||||||
Buff* buff = (*it).second;
|
Buff* buff = (*it).second;
|
||||||
//buff->combatTick() gets called in Player::step
|
|
||||||
buff->tick(currTime);
|
buff->tick(currTime);
|
||||||
if(buff->isStale()) {
|
if(buff->isStale()) {
|
||||||
// garbage collect
|
// garbage collect
|
||||||
|
Loading…
Reference in New Issue
Block a user