Ir para conteúdo
Banner com Efeitos

Featured Replies

Postado

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 :p 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.pngDiscord: 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.

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo