(WIP) Start implementing ICombatant

Start by replacing `hitMob` with `takeDamage` interface function.
Simplify `pcAttackChars` a little by utilizing the new interface, then add more interface functions as needed.

A lot of the combat logic is tied to the `Mob` class. Need to start moving stuff over to CombatNPC.
This commit is contained in:
gsemaj
2022-04-11 23:14:03 -04:00
committed by gsemaj
parent dd9891f668
commit d9e0a4a281
6 changed files with 106 additions and 99 deletions

View File

@@ -148,7 +148,7 @@ bool doDebuff(CNSocket *sock, sSkillResult_Buff *respdata, int i, int32_t target
}
Mob* mob = (Mob*)npc;
Combat::hitMob(sock, mob, 0);
mob->takeDamage(sock, 0);
respdata[i].eCT = 4;
respdata[i].iID = mob->id;
@@ -220,7 +220,7 @@ bool doDamageNDebuff(CNSocket *sock, sSkillResult_Damage_N_Debuff *respdata, int
Mob* mob = (Mob*)npc;
Combat::hitMob(sock, mob, 0); // just to gain aggro
mob->takeDamage(sock, 0);
respdata[i].eCT = 4;
respdata[i].iDamage = duration / 10;
@@ -289,7 +289,7 @@ bool doDamage(CNSocket *sock, sSkillResult_Damage *respdata, int i, int32_t targ
Mob* mob = (Mob*)npc;
Player *plr = PlayerManager::getPlayer(sock);
int damage = Combat::hitMob(sock, mob, std::max(PC_MAXHEALTH(plr->level) * amount / 1000, mob->maxHealth * amount / 1000));
int damage = mob->takeDamage(sock, std::max(PC_MAXHEALTH(plr->level) * amount / 1000, mob->maxHealth * amount / 1000));
respdata[i].eCT = 4;
respdata[i].iDamage = damage;
@@ -344,7 +344,7 @@ bool doLeech(CNSocket *sock, sSkillResult_Heal_HP *healdata, int i, int32_t targ
Mob* mob = (Mob*)npc;
int damage = Combat::hitMob(sock, mob, amount * 2);
int damage = mob->takeDamage(sock, amount * 2);
damagedata->eCT = 4;
damagedata->iDamage = damage;