Mob-related cleanup.

* NPCs now keep track of their chunk information like PlayerView does
for players
* NPCManager::sendToViewable() parallels PlayerManager::sendToViewable()
* Nano damage and debuffs now count as attacking a mob
* Mobs will de-aggro if something else killed their target
This commit is contained in:
2020-09-25 02:00:26 +02:00
parent 72d625fd8d
commit 279cb78d5f
7 changed files with 66 additions and 99 deletions

View File

@@ -309,13 +309,10 @@ bool doDebuff(CNSocket *sock, int32_t *pktdata, sSkillResult_Damage_N_Debuff *re
Mob* mob = MobManager::Mobs[pktdata[i]];
mob->appearanceData.iHP -= amount;
if (mob->appearanceData.iHP <= 0)
MobManager::killMob(sock, mob);
int damage = MobManager::hitMob(sock, mob, amount);
respdata[i].eCT = 4;
respdata[i].iDamage = amount;
respdata[i].iDamage = damage;
respdata[i].iID = mob->appearanceData.iNPC_ID;
respdata[i].iHP = mob->appearanceData.iHP;
respdata[i].iConditionBitFlag = mob->appearanceData.iConditionBitFlag |= iCBFlag;
@@ -380,16 +377,10 @@ bool doDamage(CNSocket *sock, int32_t *pktdata, sSkillResult_Damage *respdata, i
}
Mob* mob = MobManager::Mobs[pktdata[i]];
mob->appearanceData.iHP -= amount;
int damage = MobManager::hitMob(sock, mob, amount);
// wake up sleeping monster
mob->appearanceData.iConditionBitFlag &= ~CSB_BIT_MEZ;
if (mob->appearanceData.iHP <= 0)
MobManager::killMob(sock, mob);
respdata[i].eCT = 4;
respdata[i].iDamage = amount;
respdata[i].iDamage = damage;
respdata[i].iID = mob->appearanceData.iNPC_ID;
respdata[i].iHP = mob->appearanceData.iHP;
@@ -433,16 +424,10 @@ bool doLeech(CNSocket *sock, int32_t *pktdata, sSkillResult_Heal_HP *healdata, i
}
Mob* mob = MobManager::Mobs[pktdata[i]];
mob->appearanceData.iHP -= amount;
// wake up sleeping monster
mob->appearanceData.iConditionBitFlag &= ~CSB_BIT_MEZ;
if (mob->appearanceData.iHP <= 0)
MobManager::killMob(sock, mob);
int damage = MobManager::hitMob(sock, mob, amount);
damagedata->eCT = 4;
damagedata->iDamage = amount;
damagedata->iDamage = damage;
damagedata->iID = mob->appearanceData.iNPC_ID;
damagedata->iHP = mob->appearanceData.iHP;