Ir para conteúdo
  • Cadastre-se

Posts Recomendados

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.

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Tricoder
      Preview

       
      Script
      data/items/items.xml
      <item id="8981" article="a" name="gold premium card"> <attribute key="weight" value="0" /> <attribute key="description" value="Use this card to receive 7 premium days." /> </item> data/actions/actions.xml
      <action itemid="8981" script="other/premiumcard.lua"/> data/actions/scripts/premium_card
      local t = { days = 7, effect = CONST_ME_HOLYAREA } function onUse(cid, item, fromPosition, itemEx, toPosition) doPlayerRemoveItem(cid, 8981, 1) return TRUE, doPlayerAddPremiumDays(cid, t.days), doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You now have +" .. t.days .. " premium days!"), doSendMagicEffect(fromPosition, t.effect) end Créditos: God Mythera
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo