XT
script

Porta Só passa um player por vez

Por Xtudomuito, 27 de jul. de 2015 em Scripts

29
6.4k
XtudomuitoX
27 de julho de 2015 às 19:01

Queria que alguem cria-se pra min um porta que so passa um player por vezes e que estiver level 300. e eu queria aquelas que portas teleporta e n aqui abri e fecha.

chevekoC
28 de julho de 2015 às 08:29

Como assim, 1 player por vez? Se alguém atravessa, não dá mais pra atravessar?

XtudomuitoX
28 de julho de 2015 às 22:22

fis uma area, ai tem uma porta o player so pode entra um de cada vez. tipo eu entro na sala, so vai pode entra outro quando eu sair,

RigByR
28 de julho de 2015 às 22:34

De uma olhada nisso:

http://www.xtibia.com/forum/topic/235070-limite-de-player-por-sala/

XtudomuitoX
29 de julho de 2015 às 10:42

Então amigo eu vir o seu tópico ia até pow aqui pra quem tenta min ajuda, ter como uma noção. Mas eu queria uma porta no lugar de um teleporte.

BrunoB
29 de julho de 2015 às 14:14

Então amigo eu vir o seu tópico ia até pow aqui pra quem tenta min ajuda, ter como uma noção. Mas eu queria uma porta no lugar de um teleporte.

Usando a lógica do RigBy, só fiz algumas alterações, vê se dá...

 

Em data/actions/actions.xml adicione a seguinte tag:

<action actionid="50000" script="questDoor.lua"/>
Agora em data/actions/scripts crie o arquivo x com o seguinte conteúdo:

-- Do not remove the credits --
-- [MOVEEVENT] Limite de player por sala --
-- Developed by Rigby --
-- Especially for the Xtibia.com --
local config = {
	-- Config --
	-- [ACTIONID] = {area = getPlayersInArea(AREA QUE IRA CHECAR (FROMPOS,TOPOS)), amountOfPlayers = QUANTIDADE QUE CABE}
	[50000] = {area = getPlayersInArea({x = 1030, y = 1020, z = 7}, {x = 1040, y = 1030, z = 7}), amountOfPlayers = 1}
	-- Config --
}
 
function onUse(cid, item, topos)
	if config[item.actionid] then
		if #config[item.actionid].area >= config[item.actionid].amountOfPlayers then
			return doPlayerSendCancel(cid, 'Ja tem um player fazendo a quest, aguarde...')
		end
		doTeleportThing(cid, topos, true)
	end
	return true
end
 
function getPlayersInArea(fromPos, toPos) -- Function made by Vodkart
    local players = {}
    for _, pid in ipairs(getPlayersOnline()) do
        if isInRange(getPlayerPosition(pid), fromPos, toPos) then
            table.insert(players, pid)
        end
    end
    return players
end
Agora basta colocar a actionid na porta.

Editado Julho 29 por Bruno Minervino

XtudomuitoX
29 de julho de 2015 às 16:53

erro

[29/07/2015 16:51:20] data/actions/scripts/other/doorsquest.lua:8: attempt to call global 'getPlayersInArea' (a nil value)

[29/07/2015 16:51:20] [Warning - Event::loadScript] Cannot load script (data/actions/scripts/other/doorsquest.lua)
[29/07/2015 16:51:20] cannot open data/actions/scripts/doorsquest.lua: No such file or directory
29 de julho de 2015 às 17:01

como coloca tempo maximo para o player ficar nesta area? por exemplo: ficou mais de 10min toma kick pra fora


 

como poe limite, por exemplo ficou 10 mins na sala toma kick pra fora

XtudomuitoX
30 de julho de 2015 às 11:19

Alguém

RigByR
30 de julho de 2015 às 11:37

como coloca tempo maximo para o player ficar nesta area? por exemplo: ficou mais de 10min toma kick pra fora

 

como poe limite, por exemplo ficou 10 mins na sala toma kick pra fora

 

substitui o movement por esse:

-- Do not remove the credits --
-- [MOVEEVENT] Limite de player por sala --
-- Developed by Rigby --
-- Especially for the Xtibia.com --
 
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
local pos = {x = 1073, y = 1031, z = 7} -- quando o tempo acaba para onde ele ira ser teleportado
local tempo = 10 -- tempo que pode fica em minutos
local config = {
[5555] = {area = getPlayersInArea({x = 1030, y = 1020, z = 7}, {x = 1040, y = 1030, z = 7}), amountOfPlayers = 1, teleport = {x = 1037, y = 1025, z = 7}},
}
 
    if config[item.actionid] then
        if #config[item.actionid].area < config[item.actionid].amountOfPlayers then
            doTeleportThing(cid, config[item.actionid].teleport, false)
            doPlayerSendTextMessage(cid, 25, "Welcome")
            setPlayerStorageValue(cid, 21321321, 1)
            addEvent(function()
                if not isPlayer(cid) then
                    return false
                end
                if getPlayerStorageValue(cid, 21321321) == 1 then
                    doTeleportThing(cid, pos)
                    setPlayerStorageValue(cid, 21321321, -1)
                end
            end, tempo * 60 * 1000)
        else
            doPlayerSendTextMessage(cid, 25, "The room already reached its limit "..config[item.actionid].amountOfPlayers.." player 's wait someone out .")
            doTeleportThing(cid, fromPosition)
        end
    end
return true
end
 
function getPlayersInArea(fromPos, toPos) -- Function made ​​by Vodkart
local players = {}
    for _, pid in ipairs(getPlayersOnline()) do
        if isInRange(getPlayerPosition(pid), fromPos, toPos) then
            table.insert(players, pid)
        end
    end
    return players
end
e para que ele quando desloga volta pro templo adicione isso.
em creaturescript, dentro do Login.lua antes do ultimo return true.
.lua
    if getPlayerStorageValue(cid, 21321321) == 1 then
        local pos = {x = 1073, y = 1031, z = 7} -- posição para onde ele vai
        doTeleportThing(cid, pos)
        setPlayerStorageValue(cid, 21321321, 1)
    end
30 de julho de 2015 às 18:07

 

 

    if getPlayerStorageValue(cid, 21321321) == 1 then
        local pos = {x = 1073, y = 1031, z = 7} -- posição para onde ele vai
        doTeleportThing(cid, pos)
        setPlayerStorageValue(cid, 21321321, 1)
    end

 

 

creio que ta errado essa parte, se não sempre que ele deslogar ele vai para o templo, tem que modificar ali

        setPlayerStorageValue(cid, 21321321, -1) 

edit: poderia me explicar qual a função faz a contagem para o player tomar teleport pra fora? pois queria adicionar ela em um outro script, vlw

Editado Julho 30 por roriscrave

RigByR
30 de julho de 2015 às 18:29

 

creio que ta errado essa parte, se não sempre que ele deslogar ele vai para o templo, tem que modificar ali

        setPlayerStorageValue(cid, 21321321, -1) 

edit: poderia me explicar qual a função faz a contagem para o player tomar teleport pra fora? pois queria adicionar ela em um outro script, vlw

 

Eu fiz isso porque caso o player deslogue la dentro e o tempo acaba-se o script ia buga e ele poderia fica la pra sempre.

desculpa, muda o valor de 1 para -1 no setPlayerSto....

Da uma olhada nessa parte:

            addEvent(function()
                if not isPlayer(cid) then
                    return false
                end
                if getPlayerStorageValue(cid, 21321321) == 1 then
                    doTeleportThing(cid, pos)
                    setPlayerStorageValue(cid, 21321321, -1)
                end
            end, tempo * 60 * 1000)
XtudomuitoX
30 de julho de 2015 às 18:42

Já meu pedido nds. Isso que vcs estão fazendo não é contra regras não. Pq, que eu saiba ele teria que cria outro tópico.

Editado Julho 30 por Xtudomuito

31 de julho de 2015 às 00:07

Já meu pedido nds. Isso que vcs estão fazendo não é contra regras não. Pq, que eu saiba ele teria que cria outro tópico.

 

 

mano, ele ja postou seu script completo, é so ver acima.

o erro que deu é pq tu não prestou atenção direito

29/07/2015 16:51:20] cannot open data/actions/scripts/doorsquest.lua: No such file or directory

nao foi encontrado o arquivo chamado doorsquest.lua na sua pasta data/actions/scripts. voce colocou o nome dele errado!

XtudomuitoX
31 de julho de 2015 às 13:56

to achando que o erro msm é aqui [29/07/2015 16:51:20] data/actions/scripts/other/doorsquest.lua:8: attempt to call global 'getPlayersInArea' (a nil value)