Postado Julho 19, 2020 4 anos 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 Julho 19, 2020 4 anos por Mecianosz (veja o histórico de edições)
Postado Julho 19, 2020 4 anos 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 Julho 19, 2020 4 anos 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 Julho 19, 2020 4 anos por Ackerzin mudei a ordem (veja o histórico de edições)
Postado Julho 20, 2020 4 anos 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 Julho 25, 2020 4 anos 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.