Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Venho trazer a vocês essa adaptação que eu fiz pra minha datapack.

Estava configurando novas door ids e pesquisei alguns tópicos procurando por scripts específicos, e não encontrei. Além disso, notei que muitas pessoas tiveram problemas para adicionar novas portas utilizando o script comum doors ou outros; ou não foram respondidas em vários tópicos.

 

 

CONFIGURAR NOVAS DOOR IDS!

Esse código é para novas portas especiais, duplicadas, de eventos ou quests..

Demonstração:

 

 

 

Instalação:

 

Utilizarei os ids:

Horizontal: Fechada: 12149 / Aberta: 12151

Vertical: Fechada: 12158 / Aberta: 12160

 

------- • -------

PARTE 1

--- • ---

 

• Abra data/itens/itens.xml e altere os dois ids das portas que você quer editar, assim como eu fiz:

	<item id="12149" article="a" name="closed door">
		<attribute key="type" value="door" />
        <attribute key="blockprojectile" value="1" />
	</item>
	<item id="12151" article="an" name="open door">
		<attribute key="type" value="door" />
	</item>

	<item id="12158" article="a" name="closed door">
		<attribute key="type" value="door" />
        <attribute key="blockprojectile" value="1" />
	</item>
	<item id="12160" article="an" name="open door">
		<attribute key="type" value="door" />
	</item>

 

• Em data/movements/scripts crie uma pasta doors

- Nessa pasta você poderá adicionar outros ids de portas futuramente e manter organizado.

- Dentro de doors, crie dois arquivos: closingdoorH e closingdoorV (.lua) e cole o mesmo código abaixo nos dois:

- Se seus ids forem diferentes presta atenção nessa parte, na antepenúltima linha dos dois scripts:

--> |    doTransformItem(item.uid, item.itemid - 2)   | <--

 

• O que essa linha faz:

- Se a minha porta ABERTA é ID12151, ao tirar o pé pra fora dela essa linha vai fazer a porta se transformar em 2 ids anteriores, nesse caso a porta FECHADA ID 12149.

(12151 - 12149 = 2)

- Então por exemplo, se a sua porta aberta for 12180 e a fechada 12150, é assim que tem que ser:

--> |    doTransformItem(item.uid, item.itemid - 30)   | <--

 

Código:

function onStepOut(cid, item, position, fromPosition)
	if(getTileInfo(position).creatures > 0) then
		return true
	end

	local newPosition = {x = position.x, y = position.y, z = position.z}
	if(isInArray(verticalOpenDoors, item.itemid)) then
		newPosition.x = newPosition.x + 1
	else
		newPosition.y = newPosition.y + 1
	end

	doRelocate(position, newPosition)
	local tmpPos = position
	tmpPos.stackpos = -1

	local i, tmpItem, tileCount = 1, {uid = 1}, getTileThingByPos(tmpPos)
	while(tmpItem.uid ~= 0 and i < tileCount) do
		tmpPos.stackpos = i
		tmpItem = getTileThingByPos(tmpPos)
		if(tmpItem.uid ~= item.uid and tmpItem.uid ~= 0 and not isMoveable(tmpItem.uid)) then
			doRemoveItem(tmpItem.uid)
		else
			i = i + 1
		end
	end

	doTransformItem(item.uid, item.itemid - 2)
	return true
end

 

Se preferir, use a versão configurável pra não se perder nas linhas:

 

 

 

 

 


local did = 2 -- Diferença de ids das portas function onStepOut(cid, item, position, fromPosition) if(getTileInfo(position).creatures > 0) then return true end local newPosition = {x = position.x, y = position.y, z = position.z} if(isInArray(verticalOpenDoors, item.itemid)) then newPosition.x = newPosition.x + 1 else newPosition.y = newPosition.y + 1 end doRelocate(position, newPosition) local tmpPos = position tmpPos.stackpos = -1 local i, tmpItem, tileCount = 1, {uid = 1}, getTileThingByPos(tmpPos) while(tmpItem.uid ~= 0 and i < tileCount) do tmpPos.stackpos = i tmpItem = getTileThingByPos(tmpPos) if(tmpItem.uid ~= item.uid and tmpItem.uid ~= 0 and not isMoveable(tmpItem.uid)) then doRemoveItem(tmpItem.uid) else i = i + 1 end end doTransformItem(item.uid, item.itemid - did) return true end

 

 

 

 

Em data/movements/movements.xml

 

<movevent type="StepOut" itemid="12151" event="script" value="doors/closingdoorh.lua"/>
<movevent type="StepOut" itemid="12160" event="script" value="doors/closingdoorv.lua"/>

 

------- • -------

PARTE 2

--- • ---

 

Em data/actions/actions.xml adicionei:

<action itemid="12149" event="script" value="doors/door01.lua"/>
<action itemid="12158" event="script" value="doors/door02.lua"/>

 

• Em data/actions/scripts crie uma pasta doors

- Nessa pasta você poderá adicionar outros ids de portas futuramente e manter organizado.

- Dentro de doors, crie dois arquivos: door01 e door02.

- No meu caso, como as duas portas tem a mesma diferença de IDS o script fica o mesmo, então vou colar apenas 1 e você configura como quiser.

 

door01.lua/door02.lua

 

function onUse(cid, fromPos, toPos, itemEx)
			
	local config = {
		did = 2, -- Diferença de IDS entre a portas fechada/aberta
		level = 100, -- level necessario
		eff = 14, -- efeito ao abrir a porta
		txt = MESSAGE_EVENT_ADVANCE, 
		-- txt = tipo e cor da mensagem.
		--
		--		...
		-- 		Exemplo: txt = MESSAGE_EVENT_ADVANCE,
		-- 		}
		--
		-- MESSAGE_STATUS_CONSOLE_RED     -> Texto em vermelho no default chat.
		-- MESSAGE_STATUS_CONSOLE_ORANGE  -> Texto em laranja no default chat.
		-- MESSAGE_STATUS_CONSOLE_BLUE    -> Texto em azul no default chat.
		-- MESSAGE_EVENT_ADVANCE          -> Texto em branco na tela.
		-- MESSAGE_STATUS_WARNING         -> Texto em vermelho na tela.
		-- MESSAGE_INFO_DESCR             -> Texto em verde na tela.
		-- MESSAGE_EVENT_DEFAULT          -> Texto em branco no server log.
}	

	
	local levelcheck = getPlayerLevel(cid)		
			
	if levelcheck >= config.level then
		doTeleportThing(cid, toPos) 
		doSendMagicEffect(getCreaturePosition(cid), (config.eff))
		doTransformItem(itemEx.uid, itemEx.itemid + config.did)
	else
			doPlayerSendTextMessage(cid, config.txt, "Voce precisa ter level " ..config.level.." para entrar aqui")
	end

end

 

Informações no script.

 

Postado

Parabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Spoiler

Congratulations, your content has been approved!
Thank you for your contribution, we of Tibia King we are grateful.
Your content will help many other users, you received +1 REP.

 

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.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo