Ir para conteúdo
  • Cadastre-se

(Resolvido)[PEDIDO] Skull infinita


Ir para solução Resolvido por Ackerzin,

Posts Recomendados

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)
Link para o post
Compartilhar em outros sites

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 

Link para o post
Compartilhar em outros sites
  • 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

 

 

 

Link para o post
Compartilhar em outros sites
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)
Link para o post
Compartilhar em outros sites
4 horas atrás, Mecianosz disse:

up!

Ve oque aparece quando você tenta utilizar a magia, oque aparece em branco em cima do chat.

       112674.gif

 

 

 

Link para o post
Compartilhar em outros sites
3 minutos atrás, Ackerzin disse:

Ve oque aparece quando você tenta utilizar a magia, oque aparece em branco em cima do chat.

@Ackerzin o mais estranho é que não aparece mensagem, apensas o POFF em cima do boneco

Link para o post
Compartilhar em outros sites
2 minutos atrás, Mecianosz disse:

@Ackerzin o mais estranho é que não aparece mensagem, apensas o POFF em cima do boneco

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

       112674.gif

 

 

 

Link para o post
Compartilhar em outros sites

posta combat.cpp

 

 

 

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

                                                                                                                                                                                                                                        Aristóteles 

Link para o post
Compartilhar em outros sites

Acabei deixando passar algumas alterações, faça elas e creio que vai funcionar ?

 

spells.cpp

Spoiler

spells.cpp

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

Altere
if(!needTarget)
			return true;


	Player* targetPlayer = creature->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)
	{
		player->sendCancelMessage(RET_YOUMAYNOTATTACKTHISPLAYER);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	return true;
}

Para
if(!needTarget)
			return true;


	Player* targetPlayer = creature->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;
	}


	return true;
}



em
bool Spell::checkInstantSpell(Player* player, const Position& toPos)

altere
if(blockingSolid && tile->hasProperty(BLOCKSOLID))
	{
		player->sendCancelMessage(RET_NOTENOUGHROOM);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	if(player->getSkull() == SKULL_BLACK && isAggressive && range == -1) // CHECKME: -1 is (usually?) an area spell
	{
		player->sendCancelMessage(RET_YOUMAYNOTCASTAREAONBLACKSKULL);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	return true;
}

para
if(blockingSolid && tile->hasProperty(BLOCKSOLID))
	{
		player->sendCancelMessage(RET_NOTENOUGHROOM);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}


	return true;
}


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

altere
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(player->getSecureMode() == SECUREMODE_ON)
	{
		player->sendCancelMessage(RET_TURNSECUREMODETOATTACKUNMARKEDPLAYERS);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	return true;
}

em
bool InstantSpell::SummonMonster(const InstantSpell* spell, Creature* creature, const std::string& param)

remova
if(player->getSkull() == SKULL_BLACK)
		{
			player->sendCancelMessage(RET_NOTPOSSIBLE);
			player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
			return false;
		}


em
bool RuneSpell::Convince(const RuneSpell* spell, Creature* creature, Item*, const Position&, const Position& posTo)

remova
if(player->getSkull() == SKULL_BLACK)
		{
			player->sendCancelMessage(RET_NOTPOSSIBLE);
			player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
			return false;
		}
		

 

 

       112674.gif

 

 

 

Link para o post
Compartilhar em outros sites
4 horas atrás, Ackerzin disse:

Acabei deixando passar algumas alterações, faça elas e creio que vai funcionar ?

 

spells.cpp

  Ocultar conteúdo


spells.cpp

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

Altere
if(!needTarget)
			return true;


	Player* targetPlayer = creature->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)
	{
		player->sendCancelMessage(RET_YOUMAYNOTATTACKTHISPLAYER);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	return true;
}

Para
if(!needTarget)
			return true;


	Player* targetPlayer = creature->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;
	}


	return true;
}



em
bool Spell::checkInstantSpell(Player* player, const Position& toPos)

altere
if(blockingSolid && tile->hasProperty(BLOCKSOLID))
	{
		player->sendCancelMessage(RET_NOTENOUGHROOM);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	if(player->getSkull() == SKULL_BLACK && isAggressive && range == -1) // CHECKME: -1 is (usually?) an area spell
	{
		player->sendCancelMessage(RET_YOUMAYNOTCASTAREAONBLACKSKULL);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	return true;
}

para
if(blockingSolid && tile->hasProperty(BLOCKSOLID))
	{
		player->sendCancelMessage(RET_NOTENOUGHROOM);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}


	return true;
}


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

altere
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(player->getSecureMode() == SECUREMODE_ON)
	{
		player->sendCancelMessage(RET_TURNSECUREMODETOATTACKUNMARKEDPLAYERS);
		player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	return true;
}

em
bool InstantSpell::SummonMonster(const InstantSpell* spell, Creature* creature, const std::string& param)

remova
if(player->getSkull() == SKULL_BLACK)
		{
			player->sendCancelMessage(RET_NOTPOSSIBLE);
			player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
			return false;
		}


em
bool RuneSpell::Convince(const RuneSpell* spell, Creature* creature, Item*, const Position&, const Position& posTo)

remova
if(player->getSkull() == SKULL_BLACK)
		{
			player->sendCancelMessage(RET_NOTPOSSIBLE);
			player->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
			return false;
		}
		

 

 

@Ackerzin Agora eu consigo dar tera hur! Mas ainda notei que o char pega white skull quando ataca outro que esteja sem skull.. E depois ele não perde a skull quando sai pz.. E se ele receber dano enquanto está com a White Skull, o que está atacando ganha Yellow.. Seria legal se as skulls fossem exclusivamente recompensas para quem faz frags..

 

5 horas atrás, WooX disse:

posta combat.cpp

@WooX este é meu combat.cpp:

 

combat.cpp

Link para o post
Compartilhar em outros sites
4 horas atrás, Mecianosz disse:

@Ackerzin Agora eu consigo dar tera hur! Mas ainda notei que o char pega white skull quando ataca outro que esteja sem skull.. E depois ele não perde a skull quando sai pz.. E se ele receber dano enquanto está com a White Skull, o que está atacando ganha Yellow.. Seria legal se as skulls fossem exclusivamente recompensas para quem faz frags..

 

@WooX este é meu combat.cpp:

 

combat.cpp 40 kB · 0 downloads

no seu config.lua poem assim

worldType = "open"

       112674.gif

 

 

 

Link para o post
Compartilhar em outros sites
Agora, Ackerzin disse:

Sucesso!

@Ackerzinnem tanto, rsrsrsrsr.. Agora não pega nenhuma skull

 

Eu to usando o seguinte script em mods para o Skull System:

 

Citar

<?xml version="1.0" encoding="ISO-8859-1"?>
<mod name="Skull System" version="1.0" author="Skyforever" contact="tibiaking.com" enabled="yes">

<config name="SkullC_func"><![CDATA[

function setSkullColor(cid)

local t = {

[{1,2}] = 1,

[{3,4}] = 2,

[{5,6}] = 3,

[{7,8}] = 4,

[{9,math.huge}] = 5

}

for var, ret in pairs(t) do

if getPlayerFrags(cid) >= var[1] and getPlayerFrags(cid) <= var[2] then

doCreatureSetSkullType(cid, ret)

end

end

end

function getPlayerFrags(cid)

local time = os.time()

local times = {today = (time - 86400), week = (time - (7 * 86400))}

local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC")

if(result:getID() ~= -1) then

repeat

local content = {date = result:getDataInt("date")}

if(content.date > times.today) then

table.insert(contents.day, content)

elseif(content.date > times.week) then

table.insert(contents.week, content)

else

table.insert(contents.month, content)

end

until not result:next()

result:free()

end

local size = {day = table.maxn(contents.day),week = table.maxn(contents.week),month = table.maxn(contents.month)}

return size.day + size.week + size.month

end

]]></config>

<event type="login" name="SkullLogin" event="script"><![CDATA[

domodlib('SkullC_func')

function onLogin(cid)

registerCreatureEvent(cid, "ColorKill")

setSkullColor(cid)

return true

end]]></event>

<event type="kill" name="ColorKill" event="script"><![CDATA[

domodlib('SkullC_func')

function onKill(cid, target)

if isPlayer(cid) and isPlayer(target) then

doCreatureSetSkullType(target, 0)

addEvent(setSkullColor, 100, cid)

end

return true

end]]></event>

</mod>
 

 

Link para o post
Compartilhar em outros sites

OBS = volta para "open" o modo de pvp.

 

player.ccp

Spoiler

player.ccp

trocar isso
void Player::onEndCondition(ConditionType_t type)
{
	Creature::onEndCondition(type);
	if(type == CONDITION_INFIGHT)
	{
		onIdleStatus();
		clearAttacked();

		pzLocked = false;
		if(skull < SKULL_RED)
			setSkull(SKULL_NONE);

		g_game.updateCreatureSkull(this);
	}

	sendIcons();
}

por isso
void Player::onEndCondition(ConditionType_t type)
{
	Creature::onEndCondition(type);
	if(type == CONDITION_INFIGHT)
	{
		onIdleStatus();
		clearAttacked();

		pzLocked = false;

		g_game.updateCreatureSkull(this);
	}

	sendIcons();
}

em
void Player::dropLoot(Container* corpse)

alterar
if(skull > SKULL_WHITE || (item->getContainer() && tmp < loss) || (!item->getContainer() && tmp < itemLoss))

para
if(skull > SKULL_BLACK || (item->getContainer() && tmp < loss) || (!item->getContainer() && tmp < itemLoss))

em
void Player::onTarget(Creature* target)

alterar
if(targetPlayer->getSkull() == SKULL_NONE && getSkull() == SKULL_NONE)
				{
					setSkull(SKULL_WHITE);
					g_game.updateCreatureSkull(this);
				}

para
if(targetPlayer->getSkull() == SKULL_NONE && getSkull() == SKULL_NONE)
				{
					setSkull(SKULL_NONE);
					g_game.updateCreatureSkull(this);
				}

 

 

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

       112674.gif

 

 

 

Link para o post
Compartilhar em outros sites
16 horas atrás, Ackerzin disse:

OBS = volta para "open" o modo de pvp.

 

player.ccp

  Mostrar conteúdo oculto


player.ccp

trocar isso
void Player::onEndCondition(ConditionType_t type)
{
	Creature::onEndCondition(type);
	if(type == CONDITION_INFIGHT)
	{
		onIdleStatus();
		clearAttacked();

		pzLocked = false;
		if(skull < SKULL_RED)
			setSkull(SKULL_NONE);

		g_game.updateCreatureSkull(this);
	}

	sendIcons();
}

por isso
void Player::onEndCondition(ConditionType_t type)
{
	Creature::onEndCondition(type);
	if(type == CONDITION_INFIGHT)
	{
		onIdleStatus();
		clearAttacked();

		pzLocked = false;

		g_game.updateCreatureSkull(this);
	}

	sendIcons();
}

em
void Player::dropLoot(Container* corpse)

alterar
if(skull > SKULL_WHITE || (item->getContainer() && tmp < loss) || (!item->getContainer() && tmp < itemLoss))

para
if(skull > SKULL_BLACK || (item->getContainer() && tmp < loss) || (!item->getContainer() && tmp < itemLoss))

em
void Player::onTarget(Creature* target)

alterar
if(targetPlayer->getSkull() == SKULL_NONE && getSkull() == SKULL_NONE)
				{
					setSkull(SKULL_WHITE);
					g_game.updateCreatureSkull(this);
				}

para
if(targetPlayer->getSkull() == SKULL_NONE && getSkull() == SKULL_NONE)
				{
					setSkull(SKULL_NONE);
					g_game.updateCreatureSkull(this);
				}

 

 

@Ackerzin deu certo <3  ..  REP ++++++++

 

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.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo