Ir para conteúdo
  • 0

[Resolvido] TFS [1.3] Alavanca Script


amoxicilinaaaaa

Pergunta

Olá xtibianos estou usando tfs 1.3 , e fiz uma quest com uma alavanca por tempo mais estou tendo alguns problemas, e queria ajuda de alguém do fórum com conhecimento pra me ajudar. Então ai vai a script e o erro que da na console. Ajuda ae @Bennyyw

 

movement.lua

2

function onUse(cid, item, fromPosition, itemEx, toPosition, words, param, channel, item2, topos)
local quest = {level = 50 -- level mínimo
max_times = 3, -- quantas vezes poderá usar
timetowait = {1, "day"}, -- tempo para usar novamente após atingir o max_times
max_players = 3, -- máximo de players dentro da área
room = {from = {x = 32312, y = 32507, z = 8}, to = {x = 32312, y = 32507, z = 8}}-- posição do canto superior esquerdo, posição do canto inferior direito da sala
newpos = {x = 32327, y = 32528, z = 18}, -- posição para onde o player será teleportado ao entrar
stone = {id = 1304, pos = {x = 32320, y = 32516, z = 8}} -- id da pedra, posição
timetokick = {2, "min"},-- tempo para ser kikado da sala
local pos = {X=32331, Y=32526, Z=7, stackpos=1}
kickpos = {x = 32331 , y = 32526, z = 7}} -- quando kikados da área, o player vai para essa posição


local p, inside = getPlayerPosition(cid), getPlayersInArea(quest.room.from, quest.room.to)

if getPlayerStorageValue(cid, 84309) > os.time() then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can use again at " .. os.date("%d %B %Y %X", getPlayerStorageValue(cid, 84309))..".")
return true
else
if getPlayerStorageValue(cid, 84310) == quest.max_times then
setPlayerStorageValue(cid, 84310, -1)
end
end

if #inside >= quest.max_players then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Wait for the team to leave the room.")
doSendMagicEffect(p, CONST_ME_POFF)
return true
end

if getPlayerLevel(cid) < quest.level then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You need at least level " .. quest.level .. " to go.")
doSendMagicEffect(p, CONST_ME_POFF)
return true
end

local max_times = getPlayerStorageValue(cid, 84310) > 0 and getPlayerStorageValue(cid, 84310) or 0

if (max_times + 1) == quest.max_times then
setPlayerStorageValue(cid, 84309, mathtime(quest.timetowait) + os.time())
end

local stone = getTileItemById(quest.stone.pos, quest.stone.id).uid
if stone > 0 then
doSendMagicEffect(quest.stone.pos, CONST_ME_POFF)
doRemoveItem(stone)
end

doTeleportThing(cid, quest.room.newpos)
doSendMagicEffect(quest.room.newpos, CONST_ME_TELEPORT)
setPlayerStorageValue(cid, 84310, max_times+1)
addEvent(kickFromArea, mathtime(quest.timetokick) * 1000, cid)

return true
end

else function getPlayersInArea(fromPos, toPos)
local players = {}
for _, pid in ipairs(getPlayersOnline()) do
if isInRange(getPlayerPosition(pid), fromPos, toPos) then
table.insert(players, pid)
end
end
return players
end

else function mathtime(table) -- by dwarfer
local unit = {"sec", "min", "hour", "day"}
for i, v in pairs(unit) do
if v == table[2] then
return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
end
end
return error("Bad declaration in mathtime function.")
end

else function kickFromArea(cid)
local stone = getTileItemById(quest.stone.pos, quest.stone.id)
if stone.uid == 0 then
doCreateItem(quest.stone.id, 1, quest.stone.pos)
end
if isPlayer(cid) and isInRange(getPlayerPosition(cid), quest.room.from, quest.room.to) then
doTeleportThing(cid, quest.kickpos)
end
doSendMagicEffect(quest.kickpos, CONST_ME_TELEPORT)
end

Imagem:

kkkk.png?1536684633

 

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

11 respostass a esta questão

Posts Recomendados

  • 0

RESOLVIDO.

 

SCRIPT

Citar
local config = {
    level = 50, -- level mínimo
    maxTimes = 3, -- quantas vezes poderá usar
    timeToWait = {1, 'day'}, -- tempo para usar novamente após atingir o max_times
    maxPlayers = 3, -- máximo de players dentro da área
    room = {fromPos = Position(32312, 32507, 8), toPos = Position(32312, 32507, 8)}, -- posição do canto superior esquerdo, posição do canto inferior direito da sala
    newPos = Position(32327, 32528, 8), -- posição para onde o player será teleportado ao entrar
    stone = {id = 1304, pos = Position(32320, 32516, 8)}, -- id da pedra, posição
    timeToKick = {2, 'min'}, -- tempo para ser kikado da sala
    kickPos = Position(32331, 32526, 7), -- quando kikados da área, o player vai para essa posição
}
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if player:hasExhaustion(84309) then
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "You can use again at " .. os.date("%d %B %Y %X", player:getStorageValue(84309))..".")
        return true
    end
    if player:getStorageValue(84310) == config.maxTimes then
        player:setStorageValue(84310, -1)
    end
    if #getPlayersInArea(config.room.fromPos, config.room.toPos) >= config.maxPlayers then
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, 'Wait for the team to leave the room.')
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        return true
    end
    if player:getLevel() < config.level then
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "You need at least level " .. config.level .. " to go.")
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        return true
    end
    local max_times = player:getStorageValue(84310) > 0 and player:getStorageValue(84310) or 0
    if (max_times + 1) == config.maxTimes then
        player:setStorageValue(84309, mathtime(config.timeToWait) + os.time())
    end
    local stone = Tile(config.stone.pos):getItemById(config.stone.id)
    if stone then
        stone:getPosition():sendMagicEffect(CONST_ME_POFF)
        stone:remove()
    end
    player:teleportTo(config.newPos)
    player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
    player:setStorageValue(84310, math.max(0, max_times) + 1)
    addEvent(kickFromArea, mathtime(config.timeToKick) * 1000, player.uid)
    return true
end
 
function getPlayersInArea(fromPos, toPos)
    local players, playerss = {}, Game.getPlayers()
    for i = 1, #playerss do
        local player = playerss[i]
        if isInRange(player:getPosition(), fromPos, toPos) then
            table.insert(players, player)
        end
    end
    return players
end
 
function mathtime(table) -- by dwarfer
    local unit = {"sec", "min", "hour", "day"}
    for i, v in pairs(unit) do
        if v == table[2] then
            return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
        end
    end
    return error("Bad declaration in mathtime function.")
end
 
function kickFromArea(cid)
    local stone = Tile(config.stone.pos):getItemById(config.stone.id)
    if not stone then
        Game.createItem(config.stone.id, 1, config.stone.pos)
    end
    local player = Player(cid)
    if player and isInRange(player:getPosition(), config.room.fromPos, config.room.toPos) then
        player:teleportTo(config.kickPos)
        player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
    end
end

 

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

  • 0
function onUse(cid, item, fromPosition, itemEx, toPosition, words, param, channel, item2, topos)
local quest = {
level = 50, -- level mínimo
max_times = 3, -- quantas vezes poderá usar
timetowait = {1, "day"}, -- tempo para usar novamente após atingir o max_times
max_players = 3, -- máximo de players dentro da área
room = {from = {x = 32312, y = 32507, z = 8}, to = {x = 32312, y = 32507, z = 8}},-- posição do canto superior esquerdo, posição do canto inferior direito da sala
newpos = {x = 32327, y = 32528, z = 18},                                  -- posição para onde o player será teleportado ao entrar
stone = {id = 1304, pos = {x = 32320, y = 32516, z = 8}},                  -- id da pedra, posição
timetokick = {2, "min"},             -- tempo para ser kikado da sala
}             
local pos =   {
{x=32331, y=32526, z=7, stackpos=1},
kickpos = {x = 32331 , y = 32526, z = 7}    
} -- quando kikados da área, o player vai para essa posição


local p, inside = getPlayerPosition(cid), getPlayersInArea(quest.room.from, quest.room.to)

if getPlayerStorageValue(cid, 84309) > os.time() then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can use again at " .. os.date("%d %B %Y %X", getPlayerStorageValue(cid, 84309))..".")
return true
else
if getPlayerStorageValue(cid, 84310) == quest.max_times then
setPlayerStorageValue(cid, 84310, -1)
end
end

if #inside >= quest.max_players then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Wait for the team to leave the room.")
doSendMagicEffect(p, CONST_ME_POFF)
return true
end

if getPlayerLevel(cid) < quest.level then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You need at least level " .. quest.level .. " to go.")
doSendMagicEffect(p, CONST_ME_POFF)
return true
end

local max_times = getPlayerStorageValue(cid, 84310) > 0 and getPlayerStorageValue(cid, 84310) or 0

if (max_times + 1) == quest.max_times then
setPlayerStorageValue(cid, 84309, mathtime(quest.timetowait) + os.time())
end

local stone = getTileItemById(quest.stone.pos, quest.stone.id).uid
if stone > 0 then
doSendMagicEffect(quest.stone.pos, CONST_ME_POFF)
doRemoveItem(stone)
end

doTeleportThing(cid, quest.room.newpos)
doSendMagicEffect(quest.room.newpos, CONST_ME_TELEPORT)
setPlayerStorageValue(cid, 84310, max_times+1)
addEvent(kickFromArea, mathtime(quest.timetokick) * 1000, cid)

return true
end

function getPlayersInArea(fromPos, toPos)
local players = {}
for _, pid in ipairs(getPlayersOnline()) do
if isInRange(getPlayerPosition(pid), fromPos, toPos) then
table.insert(players, pid)
end
end
return players
end

function mathtime(table) -- by dwarfer
local unit = {"sec", "min", "hour", "day"}
for i, v in pairs(unit) do
if v == table[2] then
return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
end
end
return error("Bad declaration in mathtime function.")
end

function kickFromArea(cid)
local stone = getTileItemById(quest.stone.pos, quest.stone.id)
if stone.uid == 0 then
doCreateItem(quest.stone.id, 1, quest.stone.pos)
end
if isPlayer(cid) and isInRange(getPlayerPosition(cid), quest.room.from, quest.room.to) then
doTeleportThing(cid, quest.kickpos)
end
doSendMagicEffect(quest.kickpos, CONST_ME_TELEPORT)
end

 

Link para o comentário
Compartilhar em outros sites

  • 0
Em 12/09/2018 em 11:30, Pinpao disse:

function onUse(cid, item, fromPosition, itemEx, toPosition, words, param, channel, item2, topos)
local quest = {
level = 50, -- level mínimo
max_times = 3, -- quantas vezes poderá usar
timetowait = {1, "day"}, -- tempo para usar novamente após atingir o max_times
max_players = 3, -- máximo de players dentro da área
room = {from = {x = 32312, y = 32507, z = 8}, to = {x = 32312, y = 32507, z = 8}},-- posição do canto superior esquerdo, posição do canto inferior direito da sala
newpos = {x = 32327, y = 32528, z = 18},                                  -- posição para onde o player será teleportado ao entrar
stone = {id = 1304, pos = {x = 32320, y = 32516, z = 8}},                  -- id da pedra, posição
timetokick = {2, "min"},             -- tempo para ser kikado da sala
}             
local pos =   {
{x=32331, y=32526, z=7, stackpos=1},
kickpos = {x = 32331 , y = 32526, z = 7}    
} -- quando kikados da área, o player vai para essa posição


local p, inside = getPlayerPosition(cid), getPlayersInArea(quest.room.from, quest.room.to)

if getPlayerStorageValue(cid, 84309) > os.time() then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can use again at " .. os.date("%d %B %Y %X", getPlayerStorageValue(cid, 84309))..".")
return true
else
if getPlayerStorageValue(cid, 84310) == quest.max_times then
setPlayerStorageValue(cid, 84310, -1)
end
end

if #inside >= quest.max_players then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Wait for the team to leave the room.")
doSendMagicEffect(p, CONST_ME_POFF)
return true
end

if getPlayerLevel(cid) < quest.level then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You need at least level " .. quest.level .. " to go.")
doSendMagicEffect(p, CONST_ME_POFF)
return true
end

local max_times = getPlayerStorageValue(cid, 84310) > 0 and getPlayerStorageValue(cid, 84310) or 0

if (max_times + 1) == quest.max_times then
setPlayerStorageValue(cid, 84309, mathtime(quest.timetowait) + os.time())
end

local stone = getTileItemById(quest.stone.pos, quest.stone.id).uid
if stone > 0 then
doSendMagicEffect(quest.stone.pos, CONST_ME_POFF)
doRemoveItem(stone)
end

doTeleportThing(cid, quest.room.newpos)
doSendMagicEffect(quest.room.newpos, CONST_ME_TELEPORT)
setPlayerStorageValue(cid, 84310, max_times+1)
addEvent(kickFromArea, mathtime(quest.timetokick) * 1000, cid)

return true
end

function getPlayersInArea(fromPos, toPos)
local players = {}
for _, pid in ipairs(getPlayersOnline()) do
if isInRange(getPlayerPosition(pid), fromPos, toPos) then
table.insert(players, pid)
end
end
return players
end

function mathtime(table) -- by dwarfer
local unit = {"sec", "min", "hour", "day"}
for i, v in pairs(unit) do
if v == table[2] then
return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
end
end
return error("Bad declaration in mathtime function.")
end

function kickFromArea(cid)
local stone = getTileItemById(quest.stone.pos, quest.stone.id)
if stone.uid == 0 then
doCreateItem(quest.stone.id, 1, quest.stone.pos)
end
if isPlayer(cid) and isInRange(getPlayerPosition(cid), quest.room.from, quest.room.to) then
doTeleportThing(cid, quest.kickpos)
end
doSendMagicEffect(quest.kickpos, CONST_ME_TELEPORT)
end

 

esta dando esse erro na console quando uso alavanca:

erros.png.40f7438d49cadb7089c3351af46e9080.png

 

será que tenho que registra alguma coisa em login.lua ?

tag que estou usando no action:

<action actionid="ACTION_ID_DA_ALAVANCA" script="alavancatempo.lua" />

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

  • 0

.

Spoiler

function onUse(cid, item, fromPosition, itemEx, toPosition, words, param, channel, item2, topos)
	local quest = {level = 50} -- level mínimo
	max_times = 3, -- quantas vezes poderá usar
	timetowait = {1, "day"}, -- tempo para usar novamente após atingir o max_times
	max_players = 3, -- máximo de players dentro da área
	room = {from = {x = 32312, y = 32507, z = 8}, to = {x = 32312, y = 32507, z = 8}}-- posição do canto superior esquerdo, posição do canto inferior direito da sala
	newpos = {x = 32327, y = 32528, z = 18}, -- posição para onde o player será teleportado ao entrar
	stone = {id = 1304, pos = {x = 32320, y = 32516, z = 8}} -- id da pedra, posição
	timetokick = {2, "min"},-- tempo para ser kikado da sala
	local pos = {X=32331, Y=32526, Z=7, stackpos=1}
	kickpos = {x = 32331 , y = 32526, z = 7}} -- quando kikados da área, o player vai para essa posição

	local p, inside = getPlayerPosition(cid), getPlayersInArea(quest.room.from, quest.room.to)

	if getPlayerStorageValue(cid, 84309) > os.time() then
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can use again at " .. os.date("%d %B %Y %X", getPlayerStorageValue(cid, 84309))..".")
	return true
	else
	if getPlayerStorageValue(cid, 84310) == quest.max_times then
	setPlayerStorageValue(cid, 84310, -1)
	end
	end

	if #inside >= quest.max_players then
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Wait for the team to leave the room.")
	doSendMagicEffect(p, CONST_ME_POFF)
	return true
	end

	if getPlayerLevel(cid) < quest.level then
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You need at least level " .. quest.level .. " to go.")
	doSendMagicEffect(p, CONST_ME_POFF)
	return true
	end

	local max_times = getPlayerStorageValue(cid, 84310) > 0 and getPlayerStorageValue(cid, 84310) or 0

	if (max_times + 1) == quest.max_times then
	setPlayerStorageValue(cid, 84309, mathtime(quest.timetowait) + os.time())
	end

	local stone = getTileItemById(quest.stone.pos, quest.stone.id).uid
	if stone > 0 then
	doSendMagicEffect(quest.stone.pos, CONST_ME_POFF)
	doRemoveItem(stone)
	end

	doTeleportThing(cid, quest.room.newpos)
	doSendMagicEffect(quest.room.newpos, CONST_ME_TELEPORT)
	setPlayerStorageValue(cid, 84310, max_times+1)
	addEvent(kickFromArea, mathtime(quest.timetokick) * 1000, cid)

	return true
	end

	else 
	function getPlayersInArea(fromPos, toPos)
	local players = {}
	for _, pid in ipairs(Game.getPlayers()) do
		if isInRange(getPlayerPosition(pid), fromPos, toPos) then
			table.insert(players, pid)
		end
	end
	return players
	end

	else function mathtime(table) -- by dwarfer
	local unit = {"sec", "min", "hour", "day"}
	for i, v in pairs(unit) do
	if v == table[2] then
	return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
	end
	end
	return error("Bad declaration in mathtime function.")
	end

	else function kickFromArea(cid)
	local stone = getTileItemById(quest.stone.pos, quest.stone.id)
	if stone.uid == 0 then
	doCreateItem(quest.stone.id, 1, quest.stone.pos)
	end
	if isPlayer(cid) and isInRange(getPlayerPosition(cid), quest.room.from, quest.room.to) then
	doTeleportThing(cid, quest.kickpos)
	end
	doSendMagicEffect(quest.kickpos, CONST_ME_TELEPORT)
end

 

 

Link para o comentário
Compartilhar em outros sites

  • 0
13 horas atrás, Crypter disse:

.

  Ocultar conteúdo


function onUse(cid, item, fromPosition, itemEx, toPosition, words, param, channel, item2, topos)
	local quest = {level = 50} -- level mínimo
	max_times = 3, -- quantas vezes poderá usar
	timetowait = {1, "day"}, -- tempo para usar novamente após atingir o max_times
	max_players = 3, -- máximo de players dentro da área
	room = {from = {x = 32312, y = 32507, z = 8}, to = {x = 32312, y = 32507, z = 8}}-- posição do canto superior esquerdo, posição do canto inferior direito da sala
	newpos = {x = 32327, y = 32528, z = 18}, -- posição para onde o player será teleportado ao entrar
	stone = {id = 1304, pos = {x = 32320, y = 32516, z = 8}} -- id da pedra, posição
	timetokick = {2, "min"},-- tempo para ser kikado da sala
	local pos = {X=32331, Y=32526, Z=7, stackpos=1}
	kickpos = {x = 32331 , y = 32526, z = 7}} -- quando kikados da área, o player vai para essa posição

	local p, inside = getPlayerPosition(cid), getPlayersInArea(quest.room.from, quest.room.to)

	if getPlayerStorageValue(cid, 84309) > os.time() then
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can use again at " .. os.date("%d %B %Y %X", getPlayerStorageValue(cid, 84309))..".")
	return true
	else
	if getPlayerStorageValue(cid, 84310) == quest.max_times then
	setPlayerStorageValue(cid, 84310, -1)
	end
	end

	if #inside >= quest.max_players then
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Wait for the team to leave the room.")
	doSendMagicEffect(p, CONST_ME_POFF)
	return true
	end

	if getPlayerLevel(cid) < quest.level then
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You need at least level " .. quest.level .. " to go.")
	doSendMagicEffect(p, CONST_ME_POFF)
	return true
	end

	local max_times = getPlayerStorageValue(cid, 84310) > 0 and getPlayerStorageValue(cid, 84310) or 0

	if (max_times + 1) == quest.max_times then
	setPlayerStorageValue(cid, 84309, mathtime(quest.timetowait) + os.time())
	end

	local stone = getTileItemById(quest.stone.pos, quest.stone.id).uid
	if stone > 0 then
	doSendMagicEffect(quest.stone.pos, CONST_ME_POFF)
	doRemoveItem(stone)
	end

	doTeleportThing(cid, quest.room.newpos)
	doSendMagicEffect(quest.room.newpos, CONST_ME_TELEPORT)
	setPlayerStorageValue(cid, 84310, max_times+1)
	addEvent(kickFromArea, mathtime(quest.timetokick) * 1000, cid)

	return true
	end

	else 
	function getPlayersInArea(fromPos, toPos)
	local players = {}
	for _, pid in ipairs(Game.getPlayers()) do
		if isInRange(getPlayerPosition(pid), fromPos, toPos) then
			table.insert(players, pid)
		end
	end
	return players
	end

	else function mathtime(table) -- by dwarfer
	local unit = {"sec", "min", "hour", "day"}
	for i, v in pairs(unit) do
	if v == table[2] then
	return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
	end
	end
	return error("Bad declaration in mathtime function.")
	end

	else function kickFromArea(cid)
	local stone = getTileItemById(quest.stone.pos, quest.stone.id)
	if stone.uid == 0 then
	doCreateItem(quest.stone.id, 1, quest.stone.pos)
	end
	if isPlayer(cid) and isInRange(getPlayerPosition(cid), quest.room.from, quest.room.to) then
	doTeleportThing(cid, quest.kickpos)
	end
	doSendMagicEffect(quest.kickpos, CONST_ME_TELEPORT)
end

 

 

usei esse que você postou e esta aparecendo na console tentei mudar as " para ' e não deu certo.

123456.png.e5f18c8567c33f1b1b4f91c7823994dc.png

Link para o comentário
Compartilhar em outros sites

  • 0
Spoiler

function onUse(cid, item, fromPosition, itemEx, toPosition, words, param, channel, item2, topos)
local quest = {
level = 50, -- level mínimo
max_times = 3, -- quantas vezes poderá usar
timetowait = {1, "day"}, -- tempo para usar novamente após atingir o max_times
max_players = 3, -- máximo de players dentro da área
room = {from = {x = 32312, y = 32507, z = 8}, to = {x = 32312, y = 32507, z = 8}},-- posição do canto superior esquerdo, posição do canto inferior direito da sala
newpos = {x = 32327, y = 32528, z = 18},                                  -- posição para onde o player será teleportado ao entrar
stone = {id = 1304, pos = {x = 32320, y = 32516, z = 8}},                  -- id da pedra, posição
timetokick = {2, "min"},             -- tempo para ser kikado da sala
}             
local pos =   {
{x=32331, y=32526, z=7, stackpos=1},
kickpos = {x = 32331 , y = 32526, z = 7}    
} -- quando kikados da área, o player vai para essa posição


local p, inside = getPlayerPosition(cid), getPlayersInArea(quest.room.from, quest.room.to)

if getPlayerStorageValue(cid, 84309) > os.time() then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can use again at " .. os.date("%d %B %Y %X", getPlayerStorageValue(cid, 84309))..".")
return true
else
if getPlayerStorageValue(cid, 84310) == quest.max_times then
setPlayerStorageValue(cid, 84310, -1)
end
end

if #inside >= quest.max_players then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Wait for the team to leave the room.")
doSendMagicEffect(p, CONST_ME_POFF)
return true
end

if getPlayerLevel(cid) < quest.level then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You need at least level " .. quest.level .. " to go.")
doSendMagicEffect(p, CONST_ME_POFF)
return true
end

local max_times = getPlayerStorageValue(cid, 84310) > 0 and getPlayerStorageValue(cid, 84310) or 0

if (max_times + 1) == quest.max_times then
setPlayerStorageValue(cid, 84309, mathtime(quest.timetowait) + os.time())
end

local stone = getTileItemById(quest.stone.pos, quest.stone.id).uid
if stone > 0 then
doSendMagicEffect(quest.stone.pos, CONST_ME_POFF)
doRemoveItem(stone)
end

doTeleportThing(cid, quest.room.newpos)
doSendMagicEffect(quest.room.newpos, CONST_ME_TELEPORT)
setPlayerStorageValue(cid, 84310, max_times+1)
addEvent(kickFromArea, mathtime(quest.timetokick) * 1000, cid)

return true
end

function getPlayersInArea(fromPos, toPos)
local players = {}
for _, pid in ipairs(Game.getPlayers()) do
if isInRange(getPlayerPosition(pid), fromPos, toPos) then
table.insert(players, pid)
end
end
return players
end

function mathtime(table) -- by dwarfer
local unit = {"sec", "min", "hour", "day"}
for i, v in pairs(unit) do
if v == table[2] then
return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
end
end
return error("Bad declaration in mathtime function.")
end

function kickFromArea(cid)
local stone = getTileItemById(quest.stone.pos, quest.stone.id)
if stone.uid == 0 then
doCreateItem(quest.stone.id, 1, quest.stone.pos)
end
if isPlayer(cid) and isInRange(getPlayerPosition(cid), quest.room.from, quest.room.to) then
doTeleportThing(cid, quest.kickpos)
end
doSendMagicEffect(quest.kickpos, CONST_ME_TELEPORT)
end

 

 

Link para o comentário
Compartilhar em outros sites

  • 0
Citar

function onUse(cid, item, fromPosition, itemEx, toPosition, words, param, channel, item2, topos)
local quest = {
level = 50, -- level mínimo
max_times = 3, -- quantas vezes poderá usar
timetowait = {1, "day"}, -- tempo para usar novamente após atingir o max_times
max_players = 3, -- máximo de players dentro da área
room = {from = {x = 32477, y = 32481, z = 8}, to = {x = 32488, y = 32489, z = 8}},-- posição do canto superior esquerdo, posição do canto inferior direito da sala
newpos = {x = 32479, y = 32484, z = 8},                                  -- posição para onde o player será teleportado ao entrar
stone = {id = 1304, pos = {x = 32320, y = 32516, z = 8}},                  -- id da pedra, posição
timetokick = {2, "min"},             -- tempo para ser kikado da sala
}            
local pos = {{x=32497, y=32481, z=6, stackpos=1},
kickpos = {x = 32497 , y = 32481, z = 6}} -- quando kikados da área, o player vai para essa posição


local p, inside = getPlayerPosition(cid), getPlayersInArea(quest.room.from, quest.room.to)

if getPlayerStorageValue(cid, 84309) > os.time() then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can use again at " .. os.date("%d %B %Y %X", getPlayerStorageValue(cid, 84309))..".")
return true
else
if getPlayerStorageValue(cid, 84310) == quest.max_times then
setPlayerStorageValue(cid, 84310, -1)
end
end

if #inside >= quest.max_players then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Wait for the team to leave the room.")
doSendMagicEffect(p, CONST_ME_POFF)
return true
end

if getPlayerLevel(cid) < quest.level then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You need at least level " .. quest.level .. " to go.")
doSendMagicEffect(p, CONST_ME_POFF)
return true
end

local max_times = getPlayerStorageValue(cid, 84310) > 0 and getPlayerStorageValue(cid, 84310) or 0

if (max_times + 1) == quest.max_times then
setPlayerStorageValue(cid, 84309, mathtime(quest.timetowait) + os.time())
end

local stone = getTileItemById(quest.stone.pos, quest.stone.id).uid
if stone > 0 then
doSendMagicEffect(quest.stone.pos, CONST_ME_POFF)
doRemoveItem(stone)
end

doTeleportThing(cid, quest.room.newpos)
doSendMagicEffect(quest.room.newpos, CONST_ME_TELEPORT)
setPlayerStorageValue(cid, 84310, max_times+1)
addEvent(kickFromArea, mathtime(quest.timetokick) * 1000, cid)

return true
end

function getPlayersInArea(fromPos, toPos)
local players = {}
for _, pid in ipairs(Game.getPlayers()) do
if isInRange(getPlayerPosition(pid), fromPos, toPos) then
tabl e.insert(players, pid)
end
end
return players
end

function mathtime(table) -- by dwarfer
local unit = {"sec", "min", "hour", "day"}
for i, v in pairs(unit) do
if v == table[2] then
return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
end
end
return error("Bad declaration in mathtime function.")
end

function kickFromArea(cid)
local stone = getTileItemById(quest.stone.pos, quest.stone.id)
if stone.uid == 0 then
doCreateItem(quest.stone.id, 1, quest.stone.pos)
end
if isPlayer(cid) and isInRange(getPlayerPosition(cid), quest.room.from, quest.room.to) then
doTeleportThing(cid, quest.kickpos)
end
doSendMagicEffect(quest.kickpos, CONST_ME_TELEPORT)
end

Continua o mesmo erro. @Crypter

xtpz.png?1537454487

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

  • 0
Em 20/09/2018 em 11:43, amoxicilinaaaaa disse:

Continua o mesmo erro. @Crypter

xtpz.png?1537454487

Tente assim:

function onUse(cid, item, fromPosition, itemEx, toPosition, words, param, channel, item2, topos)
  local quest = {
    level = 50, -- level mínimo
    max_times = 3, -- quantas vezes poderá usar
    timetowait = {1, "day"}, -- tempo para usar novamente após atingir o max_times
    max_players = 3, -- máximo de players dentro da área
    room = {from = {x = 32477, y = 32481, z = 8}, to = {x = 32488, y = 32489, z = 8}}, -- posição do canto superior esquerdo, posição do canto inferior direito da sala
    newpos = {x = 32479, y = 32484, z = 8}, -- posição para onde o player será teleportado ao entrar
    stone = {id = 1304, pos = {x = 32320, y = 32516, z = 8}}, -- id da pedra, posição
    timetokick = {2, "min"}, -- tempo para ser kikado da sala
  }
  
  local pos = {x=32497, y=32481, z=6, stackpos=1}
  kickpos = {x = 32497 , y = 32481, z = 6} -- quando kikados da área, o player vai para essa posição


  local p, inside = getPlayerPosition(cid), getPlayersInArea(quest.room.from, quest.room.to)

  if getPlayerStorageValue(cid, 84309) > os.time() then
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can use again at " .. os.date("%d %B %Y %X", getPlayerStorageValue(cid, 84309))..".")
    return true
  else
    if getPlayerStorageValue(cid, 84310) == quest.max_times then
      setPlayerStorageValue(cid, 84310, -1)
    end
  end

  if #inside >= quest.max_players then
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Wait for the team to leave the room.")
    doSendMagicEffect(p, CONST_ME_POFF)
    return true
  end

  if getPlayerLevel(cid) < quest.level then
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You need at least level " .. quest.level .. " to go.")
    doSendMagicEffect(p, CONST_ME_POFF)
    return true
  end

  local max_times = getPlayerStorageValue(cid, 84310) > 0 and getPlayerStorageValue(cid, 84310) or 0

  if (max_times + 1) == quest.max_times then
    setPlayerStorageValue(cid, 84309, mathtime(quest.timetowait) + os.time())
  end

  local stone = getTileItemById(quest.stone.pos, quest.stone.id).uid
  if stone > 0 then
    doSendMagicEffect(quest.stone.pos, CONST_ME_POFF)
    doRemoveItem(stone)
  end

  doTeleportThing(cid, quest.room.newpos)
  doSendMagicEffect(quest.room.newpos, CONST_ME_TELEPORT)
  setPlayerStorageValue(cid, 84310, max_times+1)
  addEvent(kickFromArea, mathtime(quest.timetokick) * 1000, cid)

  return true
end

function getPlayersInArea(fromPos, toPos)
  local players = {}
  for _, pid in ipairs(Game.getPlayers()) do
    if isInRange(getPlayerPosition(pid), fromPos, toPos) then
      tabl e.insert(players, pid)
    end
  end
  return players
end

function mathtime(table) -- by dwarfer
  local unit = {"sec", "min", "hour", "day"}
  for i, v in pairs(unit) do
    if v == table[2] then
      return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
    end
  end
  return error("Bad declaration in mathtime function.")
end

function kickFromArea(cid)
  local stone = getTileItemById(quest.stone.pos, quest.stone.id)
  if stone.uid == 0 then
    doCreateItem(quest.stone.id, 1, quest.stone.pos)
  end
  if isPlayer(cid) and isInRange(getPlayerPosition(cid), quest.room.from, quest.room.to) then
    doTeleportThing(cid, quest.kickpos)
  end
  doSendMagicEffect(quest.kickpos, CONST_ME_TELEPORT)
end

 

Link para o comentário
Compartilhar em outros sites

  • 0
9 minutos atrás, DarkWore disse:

Tente assim:


function onUse(cid, item, fromPosition, itemEx, toPosition, words, param, channel, item2, topos)
  local quest = {
    level = 50, -- level mínimo
    max_times = 3, -- quantas vezes poderá usar
    timetowait = {1, "day"}, -- tempo para usar novamente após atingir o max_times
    max_players = 3, -- máximo de players dentro da área
    room = {from = {x = 32477, y = 32481, z = 8}, to = {x = 32488, y = 32489, z = 8}}, -- posição do canto superior esquerdo, posição do canto inferior direito da sala
    newpos = {x = 32479, y = 32484, z = 8}, -- posição para onde o player será teleportado ao entrar
    stone = {id = 1304, pos = {x = 32320, y = 32516, z = 8}}, -- id da pedra, posição
    timetokick = {2, "min"}, -- tempo para ser kikado da sala
  }
  
  local pos = {x=32497, y=32481, z=6, stackpos=1}
  kickpos = {x = 32497 , y = 32481, z = 6} -- quando kikados da área, o player vai para essa posição


  local p, inside = getPlayerPosition(cid), getPlayersInArea(quest.room.from, quest.room.to)

  if getPlayerStorageValue(cid, 84309) > os.time() then
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can use again at " .. os.date("%d %B %Y %X", getPlayerStorageValue(cid, 84309))..".")
    return true
  else
    if getPlayerStorageValue(cid, 84310) == quest.max_times then
      setPlayerStorageValue(cid, 84310, -1)
    end
  end

  if #inside >= quest.max_players then
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Wait for the team to leave the room.")
    doSendMagicEffect(p, CONST_ME_POFF)
    return true
  end

  if getPlayerLevel(cid) < quest.level then
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You need at least level " .. quest.level .. " to go.")
    doSendMagicEffect(p, CONST_ME_POFF)
    return true
  end

  local max_times = getPlayerStorageValue(cid, 84310) > 0 and getPlayerStorageValue(cid, 84310) or 0

  if (max_times + 1) == quest.max_times then
    setPlayerStorageValue(cid, 84309, mathtime(quest.timetowait) + os.time())
  end

  local stone = getTileItemById(quest.stone.pos, quest.stone.id).uid
  if stone > 0 then
    doSendMagicEffect(quest.stone.pos, CONST_ME_POFF)
    doRemoveItem(stone)
  end

  doTeleportThing(cid, quest.room.newpos)
  doSendMagicEffect(quest.room.newpos, CONST_ME_TELEPORT)
  setPlayerStorageValue(cid, 84310, max_times+1)
  addEvent(kickFromArea, mathtime(quest.timetokick) * 1000, cid)

  return true
end

function getPlayersInArea(fromPos, toPos)
  local players = {}
  for _, pid in ipairs(Game.getPlayers()) do
    if isInRange(getPlayerPosition(pid), fromPos, toPos) then
      tabl e.insert(players, pid)
    end
  end
  return players
end

function mathtime(table) -- by dwarfer
  local unit = {"sec", "min", "hour", "day"}
  for i, v in pairs(unit) do
    if v == table[2] then
      return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
    end
  end
  return error("Bad declaration in mathtime function.")
end

function kickFromArea(cid)
  local stone = getTileItemById(quest.stone.pos, quest.stone.id)
  if stone.uid == 0 then
    doCreateItem(quest.stone.id, 1, quest.stone.pos)
  end
  if isPlayer(cid) and isInRange(getPlayerPosition(cid), quest.room.from, quest.room.to) then
    doTeleportThing(cid, quest.kickpos)
  end
  doSendMagicEffect(quest.kickpos, CONST_ME_TELEPORT)
end

 

aparece esse erro no console quando uso a alavanca

print_sub_lua_sonsole_erro.png

Link para o comentário
Compartilhar em outros sites

  • 0
local config = {
    level = 50, -- level mínimo
    maxTimes = 3, -- quantas vezes poderá usar
    timeToWait = {1, 'day'}, -- tempo para usar novamente após atingir o max_times
    maxPlayers = 1, -- máximo de players dentro da área
    room = {fromPos = Position(32477, 32481, 8), toPos = Position(32488, 32489, 8)}, -- posição do canto superior esquerdo, posição do canto inferior direito da sala
    newPos = Position(32479, 32484, 8), -- posição para onde o player será teleportado ao entrar
    stone = {id = 3687, pos = Position(32483, 32484, 8)}, -- id da pedra, posição
    timeToKick = {2, 'min'}, -- tempo para ser kikado da sala
    kickPos = Position(32490, 32483, 7), -- quando kikados da área, o player vai para essa posição
}
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if player:hasExhaustion(84309) then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Você pode usar novamente em " .. os.date("%d %B %Y %X", player:getStorageValue(84309))..".")
        return true
    end
    if player:getStorageValue(84310) == config.maxTimes then
        player:setStorageValue(84310, -1)
    end
    if #getPlayersInArea(config.room.fromPos, config.room.toPos) >= config.maxPlayers then
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'Sinto muito, mais já tem jogadores lá dentro.')
        return true
    end
    if player:getLevel() < config.level then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Você precisa de pelo menos nível " .. config.level .. " para entrar.")
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        return true
    end
    local max_times = player:getStorageValue(84310) > 0 and player:getStorageValue(84310) or 0
    if (max_times + 1) == config.maxTimes then
        player:setStorageValue(84309, mathtime(config.timeToWait) + os.time())
    end
    local stone = Tile(config.stone.pos):getItemById(config.stone.id)
    if stone then
        stone:getPosition():sendMagicEffect(CONST_ME_POFF)
        stone:remove()
    end
    player:teleportTo(config.newPos)
    player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
    player:setStorageValue(84310, math.max(0, max_times) + 1)
    addEvent(kickFromArea, mathtime(config.timeToKick) * 1000, player.uid)
    player:say("você veio ao meu mundo.", TALKTYPE_MONSTER_SAY)
    player:say("Muhahaha....", TALKTYPE_MONSTER_SAY)
    return true
end
 
function getPlayersInArea(fromPos, toPos)
    local players, playerss = {}, Game.getPlayers()
    for i = 1, #playerss do
        local player = playerss[i]
        if isInRange(player:getPosition(), fromPos, toPos) then
            table.insert(players, player)
        end
    end
    return players
end
 
function mathtime(table) -- by dwarfer
    local unit = {"sec", "min", "hour", "day"}
    for i, v in pairs(unit) do
        if v == table[2] then
            return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
        end
    end
    return error("Bad declaration in mathtime function.")
end
 
function kickFromArea(cid)
    local stone = Tile(config.stone.pos):getItemById(config.stone.id)
    if not stone then
        Game.createItem(config.stone.id, 1, config.stone.pos)
    end
    local player = Player(cid)
    if player and isInRange(player:getPosition(), config.room.fromPos, config.room.toPos) then
        player:teleportTo(config.kickPos)
        player:say("Poff...", TALKTYPE_MONSTER_SAY)
        player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
    end
end

Aqui esta a solução do problema, ao que tentaram me ajudar vlw, e um curtir. xD

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...