Ir para conteúdo
  • Cadastre-se

(Resolvido)[PEDIDO] Skull infinita


Ir para solução Resolvido por Ackerzin,

Posts Recomendados

 

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

 

 

 

O sistema ficou perfeito para meu server, mas identifiquei uma pequena possível melhoria: seria legal se os players sem skull pegassem pz (red battle/swords) ao atacar uma pessoa com yellow skull (que não a tenha atacado anteriormente). É um detalhe bem pequeno, porque se um yellow skull ataca outro yellow skull, ele já está pegando pz normalmente.

Editado por Mecianosz (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo