• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Solved Source Code

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.


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:
Code:
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

				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;
}
try this one
 
WTF is wrong with u, who said something about fun?
if u mean it didnt work, then show me the faking error
 
nerror does not appear, but still showing the amount of mana is regenerated and still appears' you regenerate 81894 mana. '
 
try this
Code:
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

				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

				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;
}
Rep+
 
try this
Code:
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.";
			}

			if((player = target->getPlayer()) && attacker != target)
			{
				if(attacker)
					ss << ucfirst(attacker->getNameDescription()) << " regenerates you with " << manaChange << " mana.";
			}

			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;
}

rep+
 
Back
Top