Ir para conteúdo
  • 0

[Pedido] Key Door


Farathor

Pergunta

Então pessoal, gostaria de pedir um script que funciona da seguinte maneira, bem simples, só será possivel abrir uma determinada porta, se eu usar uma certa chave nela, ou seja, a porta só se abre, quando eu usar a chave nela

 

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0
Door = {}

function Door:new(position, keyaid, openid, closedid)
	return setmetatable({position=position, keyaid=keyaid, openid=openid, closedid=closedid, locked=true, id=closedid}, {__index = Door})
end

function Door:isLocked()
	if self.id == self.closedid then
		return self.locked
	end
end

function Door:setUid(uid)
	self.uid = uid
	return true
end

function Door:unlock(keyaid)
	if self.uid and keyaid == self.keyaid then
		self.locked = false
		self.id = self.openid
		doTransformItem(self.uid, self.openid)
		doItemSetAttribute(self.uid, "aid", 0)
		return true
	end
end

function Door:lock(keyaid)
	if self.uid and keyaid == self.keyaid then
		self.locked = true
		self.id = self.closedid
		doTransformItem(self.uid, self.closedid)
		doItemSetAttribute(self.uid, "aid", keyaid)
		return true
	end
end

function getDoorByPosition(position, doors)
	for _, door in ipairs(doors) do
		if doComparePositions(door.position, position) then
			return door
		end
	end
end


-- Door:new(posiçao, actionid, idportaabertam idportafechada)
local doors = {
	[1] = Door:new({x=156, y=54, z=7}, 1230, 5100, 5099),
	[2] = Door:new({x=152, y=54, z=7}, 1231, 5100, 5099),
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	local door = getDoorByPosition(toPosition, doors)
	if door then
		if itemEx.itemid == door.openid or itemEx.itemid == door.closedid then
			door:setUid(itemEx.uid)
			if item.uid == itemEx.uid then
				if door:isLocked() then
					doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.")
				end
			else
				if door:isLocked() then
					local unlock = door:unlock(item.actionid)
					if not unlock then
						return	doPlayerSendCancel(cid, "The key does not match.")
					end
				else
					local lock = door:lock(item.actionid)
					if not lock then
						return	doPlayerSendCancel(cid, "The key does not match.")
					end
				end
			end
		end
	end
	return true
end

Bota o mesmo action id na porta e na chave. Soh edite a tabela doors.

 

Tag:

	<action actionid="1230-1231" event="script" value="test.lua"/>
Link para o comentário
Compartilhar em outros sites

  • 0

Muda:

local unlock = door:unlock(item.actionid)
...
...
local lock = door:lock(item.actionid)

Por:

local unlock = door:unlock(item.itemid)
...
...
local lock = door:lock(item.itemid)

E bota o itemid dessa chave como actionid na porta e na tabela doors.

 

Link para o comentário
Compartilhar em outros sites

  • 0

Só que por exemplo, essa chave iria cair de monstros e quando ela dropa de monstros, vem sem actionID

Coloca isso no montros.xml

<loot>
       <item id="ID da chave" actionId="ACTIONID DA CHAVE" chance="140000"/><!-- chave -->
</loot>
Link para o comentário
Compartilhar em outros sites

  • 0

Então, é que quando fecha a porta, da pra abrir ela sem chave

E eu queria assim, a porta só pode ser aberta com a chave, não precisa trancar de novo, toda vez que ela estiver fechada, só pode ser aberta com a chave

Editado por Farathor
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...