minor refactoring

This commit is contained in:
2020-09-28 13:11:13 -05:00
parent 4079806436
commit 884b844d65
10 changed files with 172 additions and 23 deletions

View File

@@ -32,6 +32,9 @@ void MobManager::pcAttackNpcs(CNSocket *sock, CNPacketData *data) {
sP_CL2FE_REQ_PC_ATTACK_NPCs* pkt = (sP_CL2FE_REQ_PC_ATTACK_NPCs*)data->buf;
Player *plr = PlayerManager::getPlayer(sock);
if (plr == nullptr)
return;
// sanity check
if (!validInVarPacket(sizeof(sP_CL2FE_REQ_PC_ATTACK_NPCs), pkt->iNPCCnt, sizeof(int32_t), data->size)) {
std::cout << "[WARN] bad sP_CL2FE_REQ_PC_ATTACK_NPCs packet size\n";
@@ -98,9 +101,11 @@ void MobManager::pcAttackNpcs(CNSocket *sock, CNPacketData *data) {
}
void MobManager::npcAttackPc(Mob *mob) {
// player pointer has already been validated
Player *plr = PlayerManager::getPlayer(mob->target);
if (plr == nullptr)
return;
const size_t resplen = sizeof(sP_FE2CL_PC_ATTACK_NPCs_SUCC) + sizeof(sAttackResult);
assert(resplen < CN_PACKET_BUFFER_SIZE - 8);
uint8_t respbuf[CN_PACKET_BUFFER_SIZE];
@@ -132,6 +137,9 @@ void MobManager::npcAttackPc(Mob *mob) {
void MobManager::giveReward(CNSocket *sock) {
Player *plr = PlayerManager::getPlayer(sock);
if (plr == nullptr)
return;
const size_t resplen = sizeof(sP_FE2CL_REP_REWARD_ITEM) + sizeof(sItemReward);
assert(resplen < CN_PACKET_BUFFER_SIZE - 8);
// we know it's only one trailing struct, so we can skip full validation
@@ -268,6 +276,9 @@ void MobManager::combatStep(Mob *mob, time_t currTime) {
}
Player *plr = PlayerManager::getPlayer(mob->target);
if (plr == nullptr)
return;
// did something else kill the player in the mean time?
if (plr->HP <= 0) {
mob->target = nullptr;
@@ -501,19 +512,24 @@ std::pair<int,int> MobManager::lerp(int x1, int y1, int x2, int y2, int speed) {
void MobManager::combatBegin(CNSocket *sock, CNPacketData *data) {
Player *plr = PlayerManager::getPlayer(sock);
plr->inCombat = true;
if (plr != nullptr)
plr->inCombat = true;
}
void MobManager::combatEnd(CNSocket *sock, CNPacketData *data) {
Player *plr = PlayerManager::getPlayer(sock);
plr->inCombat = false;
if (plr != nullptr)
plr->inCombat = false;
}
void MobManager::dotDamageOnOff(CNSocket *sock, CNPacketData *data) {
sP_CL2FE_DOT_DAMAGE_ONOFF *pkt = (sP_CL2FE_DOT_DAMAGE_ONOFF*)data->buf;
Player *plr = PlayerManager::getPlayer(sock);
plr->dotDamage = (bool)pkt->iFlag;
if (plr != nullptr)
plr->dotDamage = (bool)pkt->iFlag;
}
void MobManager::dealGooDamage(CNSocket *sock, int amount) {
@@ -527,6 +543,9 @@ void MobManager::dealGooDamage(CNSocket *sock, int amount) {
sSkillResult_DotDamage *dmg = (sSkillResult_DotDamage*)(respbuf + sizeof(sP_FE2CL_CHAR_TIME_BUFF_TIME_TICK));
Player *plr = PlayerManager::getPlayer(sock);
if (plr == nullptr)
return;
// update player
plr->HP -= amount;
@@ -629,6 +648,9 @@ void MobManager::pcAttackChars(CNSocket *sock, CNPacketData *data) {
sP_CL2FE_REQ_PC_ATTACK_CHARs* pkt = (sP_CL2FE_REQ_PC_ATTACK_CHARs*)data->buf;
Player *plr = PlayerManager::getPlayer(sock);
if (plr == nullptr)
return;
// Unlike the attack mob packet, attacking players packet has an 8-byte trail (Instead of 4 bytes).
if (!validInVarPacket(sizeof(sP_CL2FE_REQ_PC_ATTACK_CHARs), pkt->iTargetCnt, sizeof(int32_t) * 2, data->size)) {
std::cout << "[WARN] bad sP_CL2FE_REQ_PC_ATTACK_CHARs packet size\n";