Ir para conteúdo

Featured Replies

Postado

Olá a todos do TK! Preciso de uma ajuda no meu enforced 8.60 (TFS 0.5 exclusive edition). Eu fiz um sistema de skulls por frag (50 frags pega yellow skull, 150 frags pega green skull e assim por diante..). Quando o personagem entra no jogo, ele recebe a Skull, mas depois que pega PZ e perde PZ a skull some.. A única skull que fica permanente é a RED, mas as outras saem quando perde PZ. Como faço para deixar SKULLS INFINITAS ou PERMANENTES, que não somem quando perde battle?  REP para quem tentar ajudar, valeuuu

 

Editado por Mecianosz (veja o histórico de edições)

Resolvido por Ackerzin

Ir para solução
  • Respostas 20
  • Visualizações 1.3k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Essas são as modificações que você ira precisar, basta alterar sua source, config.lua, creaturescript. Oque as alterações fazem, Black Skull pode soltar magia, ele não leva mais dano por estar Black

  • Esse sistema só funciona corretamente com alterações na source.

  • posta a tag da magia ai, das duas de preferencia da que funciona e da que nao funciona.

Postado

Esse sistema só funciona corretamente com alterações na source.

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

Postado
  • Solução

Essas são as modificações que você ira precisar, basta alterar sua source, config.lua, creaturescript.
Oque as alterações fazem, Black Skull pode soltar magia, ele não leva mais dano por estar Black, o Skull nao sai quando sai o Battle, se morrer RedSkull, BlackSkull não perde loot.

 

 

no seu servidor em config.lua

Spoiler

-- Limits on frags / Time
	fragsLimit = 9000 * 24 * 60 * 60
	fragsSecondLimit = 9000 * 24 * 60 * 60
	fragsThirdLimit = 9000 * 24 * 60 * 60

	-- Red Skull Config
	fragsToRedSkull = 9999999
	fragsSecondToRedSkull = 9999999
	fragsThirdToRedSkull = 9999999
	redSkullLength = 1 * 24 * 60 * 60

	-- Black Skull Config
	fragsToBlackSkull = 9999999
	fragsSecondToBlackSkull = 9999999
	fragsThirdToBlackSkull = 9999999
	blackSkulledDeathHealth = 600000
	blackSkulledDeathMana = 600000
	blackSkullLength = 2 * 24 * 60 * 60
	useBlackSkull = false
	
	fragsToBanishment = 99999999
	fragsSecondToBanishment = 9999999
	fragsThirdToBanishment = 99999999
	whiteSkullTime = 5 * 60 * 1000

 

 

 creaturescripts.xml
 

Spoiler

<event type="death" name="nloot" event="script" value="nomedoseuarquivo.lua"/>

 


depois criar um arquivo
nomedoseuarquivo.lua

Spoiler

function onDeath(cid, corpse, deathList)

local config = {
onlypremium = false, -- se precisa ser premium para não perder nada
levelandskills = false, -- se ao morrer o jogador irá perder level e skill
magic = false, -- se ao morrer o jogador irá perder level e skill
loot = false, -- se ao morrer o jogador irá perder o loot
level = 10000 -- até que level irá proteger o player
}
if isPlayer(cid) and getPlayerLevel(cid) <= config.level then
if config.onlypremium == true and not isPremium(cid) then return TRUE end
if config.loot == false then doCreatureSetDropLoot(cid, false) end
if config.levelandskills == false then doPlayerSetLossSkill(cid, 0) end
if config.magic == false then doPlayerSetLossPercent(cid, PLAYERLOSS_MANA, 0) end
return true
end
return true
end

 

 

E adicionar no login.lua
 

Spoiler

 registerCreatureEvent(cid, "nloot")

 

 

combat.cpp

Spoiler

Em 
ReturnValue Combat::canTargetCreature(const Player* player, const Creature* target)

Remova
if(player->getSkull() == SKULL_BLACK)
			return RET_YOUMAYNOTATTACKTHISPLAYER;

Em
bool Combat::CombatHealthFunc(Creature* caster, Creature* target, const CombatParams& params, void* data)

Altere
if(caster && caster->getPlayer() && target->getPlayer() && target->getSkull() != SKULL_BLACK)

Para
if(caster && caster->getPlayer() && target->getPlayer())

Em
bool Combat::CombatManaFunc(Creature* caster, Creature* target, const CombatParams& params, void* data)

Altere
if(change < 0 && caster && caster->getPlayer() && target->getPlayer() && target->getSkull() != SKULL_BLACK)

Para
if(change < 0 && caster && caster->getPlayer() && target->getPlayer())

 

 


condition.cpp
 

Spoiler

Em
bool ConditionDamage::doDamage(Creature* creature, int32_t damage)

Altere
if(damage < 0 && attacker && attacker->getPlayer() && creature->getPlayer() && creature->getPlayer()->getSkull() != SKULL_BLACK)

Para
if(damage < 0 && attacker && attacker->getPlayer() && creature->getPlayer())

 

 

player.cpp
 

Spoiler

Remova
case RET_YOUMAYNOTCASTAREAONBLACKSKULL:
			sendCancel("You may not cast area spells while you have a black skull.");
			break;

Em
void Player::onEndCondition(ConditionType_t type)

Remova
if(skull < SKULL_RED)
			setSkull(SKULL_NONE);

Em
Skulls_t Player::getSkullType(const Creature* creature) const

Remova
if(player->hasAttacked(this) && !player->isEnemy(this, false))
			return SKULL_YELLOW;

 


spells.cpp
 

Spoiler

Em
bool Spell::checkInstantSpell(Player* player, Creature* creature)

Altere

if(!needTarget)
	{
		if(!isAggressive || player->getSkull() != SKULL_BLACK)
			return true;

		player->sendCancelMessage(RET_YOUMAYNOTCASTAREAONBLACKSKULL);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	if(!creature)
	{
		player->sendCancelMessage(RET_NOTPOSSIBLE);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}


Para

if(!needTarget)
	return true;


Em
bool Spell::checkRuneSpell(Player* player, const Position& toPos)


Altere
if(!needTarget)
	{
		if(!isAggressive || player->getSkull() != SKULL_BLACK)
			return true;

		player->sendCancelMessage(RET_YOUMAYNOTCASTAREAONBLACKSKULL);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	if(!targetCreature)
	{
		player->sendCancelMessage(RET_CANONLYUSETHISRUNEONCREATURES);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	Player* targetPlayer = targetCreature->getPlayer();
	if(!isAggressive || !targetPlayer || Combat::isInPvpZone(player, targetPlayer)
		|| player->getSkullType(targetPlayer) != SKULL_NONE)
		return true;

	if(player->getSecureMode() == SECUREMODE_ON)
	{
		player->sendCancelMessage(RET_TURNSECUREMODETOATTACKUNMARKEDPLAYERS);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	if(player->getSkull() != SKULL_BLACK)
		return true;

	player->sendCancelMessage(RET_YOUMAYNOTATTACKTHISPLAYER);
	player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
	return false;
}


Para
if(!needTarget)
			return true;

	if(!targetCreature)
	{
		player->sendCancelMessage(RET_CANONLYUSETHISRUNEONCREATURES);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	Player* targetPlayer = targetCreature->getPlayer();
	if(!isAggressive || !targetPlayer || Combat::isInPvpZone(player, targetPlayer)
		|| player->getSkullType(targetPlayer) != SKULL_NONE)
		return true;

	if(player->getSecureMode() == SECUREMODE_ON)
	{
		player->sendCancelMessage(RET_TURNSECUREMODETOATTACKUNMARKEDPLAYERS);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	if(player->getSkull() != SKULL_BLACK)
		return true;

	player->sendCancelMessage(RET_YOUMAYNOTATTACKTHISPLAYER);
	player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
	return false;
}

 

 

Editado por Ackerzin
mudei a ordem (veja o histórico de edições)

       112674.gif

 

 

 

Postado
  • Autor
Em 19/07/2020 em 09:53, Ackerzin disse:

Essas são as modificações que você ira precisar, basta alterar sua source, config.lua, creaturescript.
Oque as alterações fazem, Black Skull pode soltar magia, ele não leva mais dano por estar Black, o Skull nao sai quando sai o Battle, se morrer RedSkull, BlackSkull não perde loot.

 

 

no seu servidor em config.lua

  Mostrar conteúdo oculto


-- Limits on frags / Time
	fragsLimit = 9000 * 24 * 60 * 60
	fragsSecondLimit = 9000 * 24 * 60 * 60
	fragsThirdLimit = 9000 * 24 * 60 * 60

	-- Red Skull Config
	fragsToRedSkull = 9999999
	fragsSecondToRedSkull = 9999999
	fragsThirdToRedSkull = 9999999
	redSkullLength = 1 * 24 * 60 * 60

	-- Black Skull Config
	fragsToBlackSkull = 9999999
	fragsSecondToBlackSkull = 9999999
	fragsThirdToBlackSkull = 9999999
	blackSkulledDeathHealth = 600000
	blackSkulledDeathMana = 600000
	blackSkullLength = 2 * 24 * 60 * 60
	useBlackSkull = false
	
	fragsToBanishment = 99999999
	fragsSecondToBanishment = 9999999
	fragsThirdToBanishment = 99999999
	whiteSkullTime = 5 * 60 * 1000

 

 

 creaturescripts.xml
 

  Mostrar conteúdo oculto


<event type="death" name="nloot" event="script" value="nomedoseuarquivo.lua"/>

 


depois criar um arquivo
nomedoseuarquivo.lua

  Mostrar conteúdo oculto


function onDeath(cid, corpse, deathList)

local config = {
onlypremium = false, -- se precisa ser premium para não perder nada
levelandskills = false, -- se ao morrer o jogador irá perder level e skill
magic = false, -- se ao morrer o jogador irá perder level e skill
loot = false, -- se ao morrer o jogador irá perder o loot
level = 10000 -- até que level irá proteger o player
}
if isPlayer(cid) and getPlayerLevel(cid) <= config.level then
if config.onlypremium == true and not isPremium(cid) then return TRUE end
if config.loot == false then doCreatureSetDropLoot(cid, false) end
if config.levelandskills == false then doPlayerSetLossSkill(cid, 0) end
if config.magic == false then doPlayerSetLossPercent(cid, PLAYERLOSS_MANA, 0) end
return true
end
return true
end

 

 

E adicionar no login.lua
 

  Mostrar conteúdo oculto


 registerCreatureEvent(cid, "nloot")

 

 

combat.cpp

  Mostrar conteúdo oculto


Em 
ReturnValue Combat::canTargetCreature(const Player* player, const Creature* target)

Remova
if(player->getSkull() == SKULL_BLACK)
			return RET_YOUMAYNOTATTACKTHISPLAYER;

Em
bool Combat::CombatHealthFunc(Creature* caster, Creature* target, const CombatParams& params, void* data)

Altere
if(caster && caster->getPlayer() && target->getPlayer() && target->getSkull() != SKULL_BLACK)

Para
if(caster && caster->getPlayer() && target->getPlayer())

Em
bool Combat::CombatManaFunc(Creature* caster, Creature* target, const CombatParams& params, void* data)

Altere
if(change < 0 && caster && caster->getPlayer() && target->getPlayer() && target->getSkull() != SKULL_BLACK)

Para
if(change < 0 && caster && caster->getPlayer() && target->getPlayer())

 

 


condition.cpp
 

  Mostrar conteúdo oculto


Em
bool ConditionDamage::doDamage(Creature* creature, int32_t damage)

Altere
if(damage < 0 && attacker && attacker->getPlayer() && creature->getPlayer() && creature->getPlayer()->getSkull() != SKULL_BLACK)

Para
if(damage < 0 && attacker && attacker->getPlayer() && creature->getPlayer())

 

 

player.cpp
 

  Mostrar conteúdo oculto


Remova
case RET_YOUMAYNOTCASTAREAONBLACKSKULL:
			sendCancel("You may not cast area spells while you have a black skull.");
			break;

Em
void Player::onEndCondition(ConditionType_t type)

Remova
if(skull < SKULL_RED)
			setSkull(SKULL_NONE);

Em
Skulls_t Player::getSkullType(const Creature* creature) const

Remova
if(player->hasAttacked(this) && !player->isEnemy(this, false))
			return SKULL_YELLOW;

 


spells.cpp
 

  Mostrar conteúdo oculto


Em
bool Spell::checkInstantSpell(Player* player, Creature* creature)

Altere

if(!needTarget)
	{
		if(!isAggressive || player->getSkull() != SKULL_BLACK)
			return true;

		player->sendCancelMessage(RET_YOUMAYNOTCASTAREAONBLACKSKULL);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	if(!creature)
	{
		player->sendCancelMessage(RET_NOTPOSSIBLE);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}


Para

if(!needTarget)
	return true;


Em
bool Spell::checkRuneSpell(Player* player, const Position& toPos)


Altere
if(!needTarget)
	{
		if(!isAggressive || player->getSkull() != SKULL_BLACK)
			return true;

		player->sendCancelMessage(RET_YOUMAYNOTCASTAREAONBLACKSKULL);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	if(!targetCreature)
	{
		player->sendCancelMessage(RET_CANONLYUSETHISRUNEONCREATURES);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	Player* targetPlayer = targetCreature->getPlayer();
	if(!isAggressive || !targetPlayer || Combat::isInPvpZone(player, targetPlayer)
		|| player->getSkullType(targetPlayer) != SKULL_NONE)
		return true;

	if(player->getSecureMode() == SECUREMODE_ON)
	{
		player->sendCancelMessage(RET_TURNSECUREMODETOATTACKUNMARKEDPLAYERS);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	if(player->getSkull() != SKULL_BLACK)
		return true;

	player->sendCancelMessage(RET_YOUMAYNOTATTACKTHISPLAYER);
	player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
	return false;
}


Para
if(!needTarget)
			return true;

	if(!targetCreature)
	{
		player->sendCancelMessage(RET_CANONLYUSETHISRUNEONCREATURES);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	Player* targetPlayer = targetCreature->getPlayer();
	if(!isAggressive || !targetPlayer || Combat::isInPvpZone(player, targetPlayer)
		|| player->getSkullType(targetPlayer) != SKULL_NONE)
		return true;

	if(player->getSecureMode() == SECUREMODE_ON)
	{
		player->sendCancelMessage(RET_TURNSECUREMODETOATTACKUNMARKEDPLAYERS);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	if(player->getSkull() != SKULL_BLACK)
		return true;

	player->sendCancelMessage(RET_YOUMAYNOTATTACKTHISPLAYER);
	player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
	return false;
}

 

 

REPPPP

Valeu cara! Muito obrigado mesmo.. @Ackerzin

 

Porém, o black skull está quase perfeito. Eu consigo soltar "exevo gran mas frigo", mas o "tera hur" já não dá pra soltar :/

 

Valeu também  @WooX

Editado por Mecianosz (veja o histórico de edições)

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo