Postado Novembro 24, 2015 9 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 9 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.