FA
pedido

[Pedido] Key Door

Por Farathor, 10 de dez. de 2015 em Scripts

9
3k
FarathorF
10 de dezembro de 2015 às 19:08

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

 

10 de dezembro de 2015 às 19:30

mandar o id da chave

a storage quer vc quer!

MatheusGladM
10 de dezembro de 2015 às 19:47
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"/>
FarathorF
10 de dezembro de 2015 às 20:42

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

MatheusGladM
10 de dezembro de 2015 às 21:27

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.

 

Lucas CPL
10 de dezembro de 2015 às 22:15

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>
FarathorF
11 de dezembro de 2015 às 11:44

OBS: quando eu uso a chave na porta, o actionid some, e ela volta a ser uma porta normal

MatheusGladM
12 de dezembro de 2015 às 03:04

OBS: quando eu uso a chave na porta, o actionid some, e ela volta a ser uma porta normal

 

Bem, não era pra ser desse jeito? :p

 

Voce abre a porta e o actionid some, se voce usar a chave denovo tranca a porta Oo

FarathorF
13 de dezembro de 2015 às 16:39

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 Dezembro 13 por Farathor