Postado Agosto 14, 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; } 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 Agosto 14, 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.