Djowz
Djowz's Style
- Joined
- Dec 29, 2011
- Messages
- 47
- Reaction score
- 1
Good people, my problem that the setting 'showHealingDamage' because instead of showing only the healing of life. he also show regenerate mana.
if someone could help me it would be very grateful I will post here the source code and a picture showing the problem better.
PIC:
if someone could help me it would be very grateful I will post here the source code and a picture showing the problem better.
HTML:
bool Game::combatChangeMana(Creature* attacker, Creature* target, int32_t manaChange,
CombatType_t combatType/* = COMBAT_MANADRAIN*/, bool inherited/* = false*/)
{
const Position& targetPos = target->getPosition();
if(manaChange > 0)
{
bool deny = false;
CreatureEventList statsChangeEvents = target->getCreatureEvents(CREATURE_EVENT_STATSCHANGE);
for(CreatureEventList::iterator it = statsChangeEvents.begin(); it != statsChangeEvents.end(); ++it)
{
if(!(*it)->executeStatsChange(target, attacker, STATSCHANGE_MANAGAIN, COMBAT_HEALING, manaChange))
deny = true;
}
if(deny)
return false;
target->changeMana(manaChange);
if(g_config.getBool(ConfigManager::SHOW_HEALING_DAMAGE) && !target->isGhost() &&
(g_config.getBool(ConfigManager::SHOW_HEALING_DAMAGE_MONSTER) || !target->getMonster()))
{
const SpectatorVec& list = getSpectators(targetPos);
SpectatorVec textList;
for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
{
if(!(*it)->getPlayer())
continue;
if((*it) != attacker && (*it) != target && (*it)->getPosition().z == target->getPosition().z)
textList.push_back(*it);
}
std::stringstream ss;
MessageDetails* details = new MessageDetails(manaChange, COLOR_DARKPURPLE);
if(!textList.empty())
{
if(!attacker)
ss << ucfirst(target->getNameDescription()) << " is regenerated with " << manaChange << " mana.";
else if(attacker != target)
ss << ucfirst(attacker->getNameDescription()) << " regenerates " << target->getNameDescription() << " with " << manaChange << " mana.";
else
ss << ucfirst(attacker->getNameDescription()) << " regenerates himself with " << manaChange << " mana.";
addStatsMessage(textList, MSG_HEALED_OTHERS, ss.str(), targetPos, details);
ss.str("");
}
Player* player = NULL;
if(attacker && (player = attacker->getPlayer()))
{
if(attacker != target)
ss << "You regenerate " << target->getNameDescription() << " with " << manaChange << " mana.";
else
ss << "You regenerate yourself with " << manaChange << " mana.";
player->sendStatsMessage(MSG_HEALED, ss.str(), targetPos, details);
ss.str("");
}
if((player = target->getPlayer()) && attacker != target)
{
if(attacker)
ss << ucfirst(attacker->getNameDescription()) << " regenerates you with " << manaChange << " mana.";
else
ss << "You are regenerated with " << manaChange << " mana.";
player->sendStatsMessage(MSG_HEALED, ss.str(), targetPos, details);
}
delete details;
}
}
else if(!inherited && Combat::canDoCombat(attacker, target, true) != RET_NOERROR)
{
const SpectatorVec& list = getSpectators(targetPos);
addMagicEffect(list, targetPos, MAGIC_EFFECT_POFF);
return false;
}
else
{
int32_t manaLoss = std::min(target->getMana(), -manaChange);
if(manaLoss > 0)
{
bool deny = false;
CreatureEventList statsChangeEvents = target->getCreatureEvents(CREATURE_EVENT_STATSCHANGE);
for(CreatureEventList::iterator it = statsChangeEvents.begin(); it != statsChangeEvents.end(); ++it)
{
if(!(*it)->executeStatsChange(target, attacker, STATSCHANGE_MANALOSS, combatType, manaLoss))
deny = true;
}
if(deny)
return false;
target->drainMana(attacker, combatType, manaLoss);
const SpectatorVec& list = getSpectators(targetPos);
SpectatorVec textList;
for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
{
if(!(*it)->getPlayer())
continue;
if((*it) != attacker && (*it) != target && (*it)->getPosition().z == target->getPosition().z)
textList.push_back(*it);
}
std::stringstream ss;
MessageDetails* details = new MessageDetails(manaLoss, COLOR_BLUE);
if(!textList.empty())
{
if(!attacker)
ss << ucfirst(target->getNameDescription()) << " loses " << manaLoss << " mana.";
else if(attacker != target)
ss << ucfirst(target->getNameDescription()) << " loses " << manaLoss << " mana due to an attack by " << attacker->getNameDescription();
else
ss << ucfirst(target->getNameDescription()) << " loses " << manaLoss << " mana due to a self attack.";
addStatsMessage(textList, MSG_DAMAGE_OTHERS, ss.str(), targetPos, details);
ss.str("");
}
Player* player;
if(attacker && (player = attacker->getPlayer()))
{
if(attacker != target)
ss << ucfirst(target->getNameDescription()) << " loses " << manaLoss << " mana due to your attack.";
else
ss << "You lose " << manaLoss << " mana due to your attack.";
player->sendStatsMessage(MSG_DAMAGE_DEALT, ss.str(), targetPos, details);
ss.str("");
}
if((player = target->getPlayer()) && attacker != target)
{
if(attacker)
ss << "You lose " << manaLoss << " mana due to an attack by " << attacker->getNameDescription();
else
ss << "You lose " << manaLoss << " mana.";
player->sendStatsMessage(MSG_DAMAGE_RECEIVED, ss.str(), targetPos, details);
}
delete details;
}
}
return true;
}
PIC:
Last edited: