Ir para conteúdo

Featured Replies

Postado

Boa tarde galera do tk, estou precisando de uma ajuda, o sistema funciona da seguinte forma é uma estatua que voce clica e é teleportado pra x local para fazer a quest em 3 sqm só na vertical, ai ao clicar você é teleportado nasce um monstro na sua frente ( obs: caso alguem tente entrar na quest não vai conseguir, caso tente aparece uma mensagem na parte de baixo ( nao no chat ) avisando que tem jogador la dentro. )

Ai apos matar o monstro atras dele tem outra estatua que quando vc clica vc ganha x item e é teleportado para cima novamente!

Esta quest é possivel entrar sempre porém o item só ganha uma vez!

 

TFS 0.3.6

Editado por Straikar (veja o histórico de edições)

  • 2 weeks later...
  • Respostas 15
  • Visualizações 565
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • fiz um script que da pra colocar mais de um monstro e recompensas pra cada um no mesmo script vá em: data/actions/actions.xml   <action actionid="ACTIOND-ID-DA-ESTATUA;ACTIONID;ACTIONI

  • Anderson Sacani
    Anderson Sacani

    Atualizei o script a cima, agora removi todos os bugs. está 100% funcional!

  • Anderson Sacani
    Anderson Sacani

    --[[ Observação: No mapa colocar o uid 5032 na estátua que dará recompensa No mapa colocar o uid 5033 na estátua que teleportará o jogador para dentro da sala ]] local config = { rewar

Posted Images

Postado
Em 06/02/2023 em 17:21, Straikar disse:

Boa tarde galera do tk, estou precisando de uma ajuda, o sistema funciona da seguinte forma é uma estatua que voce clica e é teleportado pra x local para fazer a quest em 3 sqm só na vertical, ai ao clicar você é teleportado nasce um monstro na sua frente ( obs: caso alguem tente entrar na quest não vai conseguir, caso tente aparece uma mensagem na parte de baixo ( nao no chat ) avisando que tem jogador la dentro. )

Ai apos matar o monstro atras dele tem outra estatua que quando vc clica vc ganha x item e é teleportado para cima novamente!

Esta quest é possivel entrar sempre porém o item só ganha uma vez!

 

TFS 0.3.6


fiz um script que da pra colocar mais de um monstro e recompensas pra cada um no mesmo script

vá em:
data/actions/actions.xml
 

<action actionid="ACTIOND-ID-DA-ESTATUA;ACTIONID;ACTIONID" script="questVertical.lua" />

INSIRA TODOS os actions ID das estatus, tanto das de entrada (clica pra entrar na sala), como as de recompensa
ps: se for em sequencia, tipo 5001,5002,5003... só é necessário colocar o primeiro e o ultimo, ex: 5001-5003, porém PRESTE BASTANTE ATENÇÃO!


Agora vá em:
data/actions/scripts/questVertical.lua  (caso não exista pode criar e excluir os scripts antigos dessa quest)
e copie esse código dentro:
 

--[[ SCRIPT FEITO POR FEETADS - TIBIAKING ]]--
		--[[straikar - 15/02/23]]--			/ discord: FeeTads#0246



local config = {
	-- actions ID da estatua da entrada
	[25486] = {storage_timer = 5341352, posPlayer = {x = 1000, y = 1000, z = 7}, monster_name = "Papao", posMonstro = {x = 1000, y = 1000, z = 7}, posSaida = {x = 1000, y = 1000, z = 7}, fromP={x = 931, y = 1270, z = 9}, toP={x = 936, y = 1276, z = 9}},
	[25487] = {storage_timer = 5341353, posPlayer = {x = 1001, y = 1001, z = 7}, monster_name = "Papao2", posMonstro = {x = 1001, y = 1001, z = 7}, posSaida = {x = 1001, y = 1001, z = 7}, fromP={x = 931, y = 1270, z = 9}, toP={x = 936, y = 1276, z = 9}},
	-- caso queira colocar outros, só repetir ^ e mudar a storage, o action id e as posições etc..
	
	
	use_cooldown_global = false,		-- se vc colocar true aqui, TODAS as salas de quest onde o player tentar entrar, vão ter o mesmo cooldown ou seja 1 sala a cada 5 mins, se for false, pode entrar em outra sala logo em seguida
	storage_timer_global = 5341350,		-- storage de exaust pra entrar de novo
	exaust_entrar_denovo = 5 * 60,	 	-- 5*60 = 5 minutos
	need_level = 100,					-- level necessário para entrar / caso não precise coloque 1 ou 8
	remover_player_tempo = true,		-- remover o player depois de tanto tempo la dentro? / evita o player ficar la trapando o dia todo
	remover_timer = 10*60,				-- quando tempo la dentro pra remover? / 10*60 = 10 minutos
}

local REWARD = {

	--[action id] = {rewards = {{item, quantidade}, {item, quantidade}}},		-- pode colocar quantas rewards quiser
	[5032] = {storage_reward = 5441400, rewards = {{2160, 1}, {2148, 100}, {2152, 50}}},
	[5033] = {storage_reward = 5441401, rewards = {{2160, 1}}},		-- quando diminuir a quantidadede recompensa, ceritifique que deixou certo a quantidade de {} pra n bugar o script

	repetir_reward = false,    					-- ganhar a recompensa sempre que fizer a quest?
	teleportar_final = {x=1000,y=1000,z=7},		-- pra onde teleportar quando ele clicar na estatua de recompensa? (normalmente eh o templo)
}


-- função de tempo
local function getTimeString(self)
    local format = {
        {'dia', self / 60 / 60 / 24},
        {'hora', self / 60 / 60 % 24},
        {'minuto', self / 60 % 60},
        {'segundo', self % 60}
    }
    
    local out = {}
    for k, t in ipairs(format) do
        local v = math.floor(t[2])
        if(v > 0) then
            table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' e ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
        end
    end
    local ret = table.concat(out)
    if ret:len() < 16 and ret:find('segundo') then
        local a, b = ret:find(' e ')
        ret = ret:sub(b+1)
    end
    return ret
end

-- FUNÇÃO PARA KICKAR O PLAYER DA SALA APÓS TANTO TEMPO
local function removePlayersTime(frompos, topos)
	for x = frompos.x, topos.x  do
		for y = frompos.y, topos.y do
			local remove, clean = true, true
			local pos = {x = x, y = y, z = frompos.z}
			local m = getTopCreature(pos).uid
			if m ~= 0 and isPlayer(m) then
				doTeleportThing(m, getTownTemplePosition(1))
			end
		end
	end
	return true
end

-- FUNÇÃO PARA REMOVER O BOSS AO KICKAR O PLAYER DA SALA
local function verificaBoss(frompos, topos)
	for x = frompos.x, topos.x  do
		for y = frompos.y, topos.y do
			if isMonster(getThingFromPos({x = x, y = y, z = frompos.z, stackpos = 253}).uid) then
				doRemoveCreature(getThingFromPos({x = x, y = y, z = frompos.z, stackpos = 253}).uid)
			end
		end
	end
end

local function give_reward(cid, entregar)
	
	local text = 'você recebeu '			-- string que salvará o nome das recompensas
	if entregar then				-- existe as rewards?
		for i=1, #entregar do
			doPlayerAddItem(cid, entregar[i][1], entregar[i][2])		-- adiciona os item ao player
			text = text..entregar[i][2]..getItemNameById(entregar[i][1])..entregar[i][1] > 1 and "s" or ""
			if i == #entregar then
				text = text.."."	-- caso seja o ultimo coloca ponto final
			else
				text = text..", "	-- se não, bota virgula
			end
		end
		doPlayerSendTextMessage(cid, 22, text)
	end
	
	return true
end

local saveEvent = {}   -- evento pra checkar o player na sala de espera

function onUse(cid, item, frompos, itemEx, topos)
	
	local check = {}
	local actionID = item.actionid
	if config[actionID] then
		-- checa o cooldown e se pode entrar na sala
		if config.use_cooldown_global then
			if getPlayerStorageValue(cid, config.storage_timer_global) - os.time() > 0 then
				doPlayerSendCancel(cid, 'Aguarde, você ainda não pode entrar, está com cooldown de'..getTimeString(getPlayerStorageValue(cid, config.storage_timer_global) - os.time())..'.') 
				return true
			end
		else
			if getPlayerStorageValue(cid, config[actionID].storage_timer) > 0 then
				doPlayerSendCancel(cid, 'Aguarde, você ainda não pode entrar, está com cooldown de'..getTimeString(getPlayerStorageValue(cid, config[actionID].storage_timer) - os.time())..'.') 
				return true
			end
		end
		if #getPlayersInArea(config.[actionID].fromP, config.[actionID].toP) > 0 then
			doPlayerSendCancel(cid, 'Aguarde, tem jogadores la dentro.') 
			return true
		end
		if getPlayerLevel(cid) < config.need_level then
			doPlayerSendCancel(cid, 'Você não tem o level necessário.') 
			return true
		end
		-- caso tenha o level, e não tenha player la dentro, então faz a quest acontecer
		verificaBoss(config.[actionID].fromP, config.[actionID].to)		-- remove o boss do antigo player caso haja
		doTeleportThing(cid, config[actionID].posPlayer)			-- teleporta o player pra posição
		doCreateMonster(config[actionID].monster_name, config[actionID].posMonstro, false, true)		-- cria o monstro na posição
		if config.remover_player_tempo then			-- se remover o player depois de tanto tempo for true
			saveEvent[getPlayerGUID(cid)] = addEvent(function() 
				removePlayersTime(config.[actionID].fromP, config.[actionID].toP) 
			end, config.remover_timer * 1000) -- remover o player depois do tempo
		end
		if config.use_cooldown_global then
			setPlayerStorageValue(cid, config.storage_timer_global, os.time() + config.exaust_entrar_denovo)	-- cooldown caso seja de todas as salas / n mexer
		else
			setPlayerStorageValue(cid, config[actionID].storage_timer, os.time() + config.exaust_entrar_denovo)		-- cooldown pra entrar de novo / n mexer
		end
		return true
	end


	-- ESTATUA DE RECOMPENSA
	if REWARD[actionID] then					-- caso tenha clicado na estatua de recompensa
		local entregar = REWARD[actionID].rewards
		if getPlayerStorageValue(cid, REWARD[actionID].storage_reward) == -1 then				-- caso nunca tenha recebido a recompensa
			give_reward(cid, entregar)
		else									-- caso ja tenha recebido
			if REWARD.repetir_reward then		-- checa se pode repetir a recompensa
				give_reward(cid, entregar)
			else								-- se não só da a mensagem q ja recebeu
				doPlayerSendTextMessage(cid, 22, "Você já recebeu sua recompensa.")
			end
		end
	doTeleportThing(cid, REWARD.teleportar_final) 	-- teleporta o player pra posição quando clicar na estatua de recompensa
	stopEvent(saveEvent[getPlayerGUID(cid)])		-- para o evento de jogar ele pro templo
    saveEvent[getPlayerGUID(cid)] = nil
	end

return true
end

 

Postado
  • Autor

Não deu certo

 

image.thumb.png.cd7dbc4b7ae9726e9ddd70e7bbc539f8.png

 

no actions.xml esta assim        <action actionid="5001;5002" script="desafio2.lua" />

e na script assim

 

local config = {
    -- actions ID da estatua da entrada
    [25486] = {storage_timer = 5341352, posPlayer = {x = 940, y = 1274, z = 9}, monster_name = "Papao", posMonstro = {x = 940, y = 1273, z = 9}, posSaida = {x = 941, y = 1277, z = 9}, fromP={x = 938, y = 1270, z = 9}, toP={x = 942, y = 1276, z = 9}},
    [25487] = {storage_timer = 5341353, posPlayer = {x = 1001, y = 1001, z = 7}, monster_name = "Papao2", posMonstro = {x = 1001, y = 1001, z = 7}, posSaida = {x = 1001, y = 1001, z = 7}, fromP={x = 931, y = 1270, z = 9}, toP={x = 936, y = 1276, z = 9}},
    -- caso queira colocar outros, só repetir ^ e mudar a storage, o action id e as posições etc..
    
    
    use_cooldown_global = false,        -- se vc colocar true aqui, TODAS as salas de quest onde o player tentar entrar, vão ter o mesmo cooldown ou seja 1 sala a cada 5 mins, se for false, pode entrar em outra sala logo em seguida
    storage_timer_global = 5341350,        -- storage de exaust pra entrar de novo
    exaust_entrar_denovo = 5 * 60,         -- 5*60 = 5 minutos
    need_level = 100,                    -- level necessário para entrar / caso não precise coloque 1 ou 8
    remover_player_tempo = true,        -- remover o player depois de tanto tempo la dentro? / evita o player ficar la trapando o dia todo
    remover_timer = 10*60,                -- quando tempo la dentro pra remover? / 10*60 = 10 minutos
}

local REWARD = {

    --[action id] = {rewards = {{item, quantidade}, {item, quantidade}}},        -- pode colocar quantas rewards quiser
    [5002] = {storage_reward = 5441400, rewards = {{2160, 1}}},
    [5033] = {storage_reward = 5441401, rewards = {{2160, 1}}},        -- quando diminuir a quantidadede recompensa, ceritifique que deixou certo a quantidade de {} pra n bugar o script

    repetir_reward = false,                        -- ganhar a recompensa sempre que fizer a quest?
    teleportar_final = {x=1000,y=1000,z=7},        -- pra onde teleportar quando ele clicar na estatua de recompensa? (normalmente eh o templo)
}


-- função de tempo
local function getTimeString(self)
    local format = {
        {'dia', self / 60 / 60 / 24},
        {'hora', self / 60 / 60 % 24},
        {'minuto', self / 60 % 60},
        {'segundo', self % 60}
    }
    
    local out = {}
    for k, t in ipairs(format) do
        local v = math.floor(t[2])
        if(v > 0) then
            table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' e ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
        end
    end
    local ret = table.concat(out)
    if ret:len() < 16 and ret:find('segundo') then
        local a, b = ret:find(' e ')
        ret = ret:sub(b+1)
    end
    return ret
end

-- FUNÇÃO PARA KICKAR O PLAYER DA SALA APÓS TANTO TEMPO
local function removePlayersTime(frompos, topos)
    for x = frompos.x, topos.x  do
        for y = frompos.y, topos.y do
            local remove, clean = true, true
            local pos = {x = x, y = y, z = frompos.z}
            local m = getTopCreature(pos).uid
            if m ~= 0 and isPlayer(m) then
                doTeleportThing(m, getTownTemplePosition(1))
            end
        end
    end
    return true
end

-- FUNÇÃO PARA REMOVER O BOSS AO KICKAR O PLAYER DA SALA
local function verificaBoss(frompos, topos)
    for x = frompos.x, topos.x  do
        for y = frompos.y, topos.y do
            if isMonster(getThingFromPos({x = x, y = y, z = frompos.z, stackpos = 253}).uid) then
                doRemoveCreature(getThingFromPos({x = x, y = y, z = frompos.z, stackpos = 253}).uid)
            end
        end
    end
end

local function give_reward(cid, entregar)
    
    local text = 'você recebeu '            -- string que salvará o nome das recompensas
    if entregar then                -- existe as rewards?
        for i=1, #entregar do
            doPlayerAddItem(cid, entregar[i][1], entregar[i][2])        -- adiciona os item ao player
            text = text..entregar[i][2]..getItemNameById(entregar[i][1])..entregar[i][1] > 1 and "s" or ""
            if i == #entregar then
                text = text.."."    -- caso seja o ultimo coloca ponto final
            else
                text = text..", "    -- se não, bota virgula
            end
        end
        doPlayerSendTextMessage(cid, 22, text)
    end
    
    return true
end

local saveEvent = {}   -- evento pra checkar o player na sala de espera

function onUse(cid, item, frompos, itemEx, topos)
    
    local check = {}
    local actionID = item.actionid
    if config[actionID] then
        -- checa o cooldown e se pode entrar na sala
        if config.use_cooldown_global then
            if getPlayerStorageValue(cid, config.storage_timer_global) - os.time() > 0 then
                doPlayerSendCancel(cid, 'Aguarde, você ainda não pode entrar, está com cooldown de'..getTimeString(getPlayerStorageValue(cid, config.storage_timer_global) - os.time())..'.') 
                return true
            end
        else
            if getPlayerStorageValue(cid, config[actionID].storage_timer) > 0 then
                doPlayerSendCancel(cid, 'Aguarde, você ainda não pode entrar, está com cooldown de'..getTimeString(getPlayerStorageValue(cid, config[actionID].storage_timer) - os.time())..'.') 
                return true
            end
        end
        if #getPlayersInArea(config.[actionID].fromP, config.[actionID].toP) > 0 then
            doPlayerSendCancel(cid, 'Aguarde, tem jogadores la dentro.') 
            return true
        end
        if getPlayerLevel(cid) < config.need_level then
            doPlayerSendCancel(cid, 'Você não tem o level necessário.') 
            return true
        end
        -- caso tenha o level, e não tenha player la dentro, então faz a quest acontecer
        verificaBoss(config.[actionID].fromP, config.[actionID].to)        -- remove o boss do antigo player caso haja
        doTeleportThing(cid, config[actionID].posPlayer)            -- teleporta o player pra posição
        doCreateMonster(config[actionID].monster_name, config[actionID].posMonstro, false, true)        -- cria o monstro na posição
        if config.remover_player_tempo then            -- se remover o player depois de tanto tempo for true
            saveEvent[getPlayerGUID(cid)] = addEvent(function() 
                removePlayersTime(config.[actionID].fromP, config.[actionID].toP) 
            end, config.remover_timer * 1000) -- remover o player depois do tempo
        end
        if config.use_cooldown_global then
            setPlayerStorageValue(cid, config.storage_timer_global, os.time() + config.exaust_entrar_denovo)    -- cooldown caso seja de todas as salas / n mexer
        else
            setPlayerStorageValue(cid, config[actionID].storage_timer, os.time() + config.exaust_entrar_denovo)        -- cooldown pra entrar de novo / n mexer
        end
        return true
    end


    -- ESTATUA DE RECOMPENSA
    if REWARD[actionID] then                    -- caso tenha clicado na estatua de recompensa
        local entregar = REWARD[actionID].rewards
        if getPlayerStorageValue(cid, REWARD[actionID].storage_reward) == -1 then                -- caso nunca tenha recebido a recompensa
            give_reward(cid, entregar)
        else                                    -- caso ja tenha recebido
            if REWARD.repetir_reward then        -- checa se pode repetir a recompensa
                give_reward(cid, entregar)
            else                                -- se não só da a mensagem q ja recebeu
                doPlayerSendTextMessage(cid, 22, "Você já recebeu sua recompensa.")
            end
        end
    doTeleportThing(cid, REWARD.teleportar_final)     -- teleporta o player pra posição quando clicar na estatua de recompensa
    stopEvent(saveEvent[getPlayerGUID(cid)])        -- para o evento de jogar ele pro templo
    saveEvent[getPlayerGUID(cid)] = nil
    end

return true
end

Postado
Em 15/02/2023 em 21:22, Straikar disse:

Não deu certo

Não deu certo pq vc botou nome errado ou o arquivo no lugar errado, o próprio erro te falou isso.
"no such file or directory"
vc colocou no XML que o arquivo ta na raiz do actions
data/actions/scripts/desafio2.lua < ele ta exatamente nesse diretório? pq a distro falou que não, se tiver dentro de pasta coloque o diretório correto

<action actionid="5001;5002" script="PASTA/desafio2.lua" /> << caso esteja dentro de alguma pasta

se atente a arrumar os action ID dentro do arquivo pois vai dar erro caso você n arrume.

como esta no script 
-- actions ID da estatua da entrada
    [25486] = {...},
    [25487]  = {...},
mude esse action pro action da primeira estatua
SE ATENTE BEM AOS ACTIONS

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