Postado Novembro 24, 2015 10 anos Como não possuía um freeze system para o TFS 1.x o Slavi Dodo decidiu fazer um, ele funciona da seguinte maneira, você freeza um jogador Não se move e não casta spell. Não faça modificações se você não tem a completa consciência do que você está fazendo!! Em creature.cpp mexa na substitua void Creature::onWalk() { if (getWalkDelay() <= 0) { Direction dir; uint32_t flags = FLAG_IGNOREFIELDDAMAGE; if (getNextStep(dir, flags)) { ReturnValue ret = g_game.internalMoveCreature(this, dir, flags); if (ret != RETURNVALUE_NOERROR) { if (Player* player = getPlayer()) { player->sendCancelMessage(ret); player->sendCancelWalk(); } forceUpdateFollowPath = true; } } else { if (listWalkDir.empty()) { onWalkComplete(); } stopEventWalk(); } } if (cancelNextWalk) { listWalkDir.clear(); onWalkAborted(); cancelNextWalk = false; } if (eventWalk != 0) { eventWalk = 0; addEventWalk(); } } por void Creature::onWalk() { if (getWalkDelay() <= 0) { Direction dir; uint32_t flags = FLAG_IGNOREFIELDDAMAGE; if (Player* player = getPlayer()) { bool freezed = player->isFreezed(); if (!freezed) { if (getNextStep(dir, flags)) { ReturnValue ret = g_game.internalMoveCreature(this, dir, flags); if (ret != RETURNVALUE_NOERROR) { player->sendCancelMessage(ret); player->sendCancelWalk(); forceUpdateFollowPath = true; } } else { if (listWalkDir.empty()) { onWalkComplete(); } stopEventWalk(); } } else { stopEventWalk(); } } else { if (getNextStep(dir, flags)) { ReturnValue ret = g_game.internalMoveCreature(this, dir, flags); if (ret != RETURNVALUE_NOERROR) { forceUpdateFollowPath = true; } } else { if (listWalkDir.empty()) { onWalkComplete(); } stopEventWalk(); } } } if (cancelNextWalk) { listWalkDir.clear(); onWalkAborted(); cancelNextWalk = false; } if (eventWalk != 0) { eventWalk = 0; addEventWalk(); } } em player.h procure por: bool isInGhostMode() const { e coloque na linha abaixo: bool isFreezed() const { return freezed; } void switchFreezed() { freezed = !freezed; } procure por: bool ghostMode; e coloque na linha abaixo: bool freezed; em luaScript.h adicione as linhas abaixo aonde você ver algo parecido static int luaPlayerSetFreezed(lua_State* L); static int luaPlayerIsFreezed(lua_State* L); em luaScript.cpp procure por: registerMethod("Player", "setGhostMode", LuaScriptInterface::luaPlayerSetGhostMode); e adicione na linha abaixo: registerMethod("Player", "isFreezed", LuaScriptInterface::luaPlayerIsFreezed); registerMethod("Player", "setFreezed", LuaScriptInterface::luaPlayerSetFreezed); procure por: int LuaScriptInterface::luaPlayerSetGhostMode(lua_State* L) e adicione isso abaixo: int LuaScriptInterface::luaPlayerSetFreezed(lua_State* L) { // player:luaPlayerSetFreezed(enabled) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } bool enabled = getBoolean(L, 2); if (player->isFreezed() == enabled) { pushBoolean(L, true); return 1; } player->switchFreezed(); pushBoolean(L, true); return 1; } int LuaScriptInterface::luaPlayerIsFreezed(lua_State* L) { // player:isFreezed() const Player* player = getUserdata<const Player>(L, 1); if (player) { pushBoolean(L, player->isFreezed()); } else { lua_pushnil(L); } return 1; } actions.xml <action itemid="2282" script="freeze.lua"/> freeze.lua function onUse(cid, item, fromPosition, itemEx, toPosition) local player = Player(cid) if exhaustion.get(cid,storage) then player:sendCancelMessage("You are echausted.") return true end if getTilePzInfo(toPosition) == true then player:sendCancelMessage("You are on pz.") return true end if not isPlayer(itemEx.uid) or cid == itemEx.uid then player:sendCancelMessage("You can only use this on players.") return true end local target = Player(itemEx.uid) if target:isFreezed() then player:sendCancelMessage("Target is already freezed") return true end target:setFreezed(true) target:say("Freezed!", TALKTYPE_MONSTER_SAY) exhaustion.set(cid,storage,cooldown) addEvent(removeFreeze, 3000, target.uid) return true end function removeFreeze(uid) Player(uid):say("Melted", TALKTYPE_MONSTER_SAY) Player(uid):setFreezed(false) end Se quiser mudar o item, mude no actions.xml "2282" Créditos: Slavi Doido Discord: vankk #7765 Precisando de ajuda? Entre em contato comigo via Discord. Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.
Postado Dezembro 1, 2015 10 anos Muito bom! Obrigada por trazer ao fórum, vai ser útil pra muita gente, inclusive os donos de baiak.
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.