void Hero::onGiveHit(Object* to, int damage) { Character::onGiveHit(to, damage); showStats(); if (to->getObjectType() & OBJECT_TYPE_CHARACTER && damage) { Character* target = (Character*)to; int levelDiff = target->getLevel() - getLevel(); float factor = levelDiff >= 0 ? levelDiff+1 : -1.0f/levelDiff; int dxp = damage * factor; addXp(dxp); if (target->getHp() <= 0) { addXp(target->getLevel() * 10 * factor); } } }
void Player::add(LineInfo& lineInfo) { timeOfLastAction = lineInfo.time; if (startTime == 0) { // Set the start time on the first action made. startTime = lineInfo.time; } if (lineInfo.type == LineType::damage || lineInfo.type == LineType::heal || lineInfo.type == LineType::nano) { affectedPlayers->addToPlayers(lineInfo); } else if (lineInfo.type == LineType::nanoCast) { nanoPrograms.add(lineInfo); } else if (lineInfo.type == LineType::xp || lineInfo.type == LineType::sk || lineInfo.type == LineType::research || lineInfo.type == LineType::aixp || lineInfo.type == LineType::pvpSoloScore || lineInfo.type == LineType::pvpTeamScore) { addXp(lineInfo); } }