Ir para conteúdo
  • Cadastre-se

(Resolvido)Ajuste nesse sistema de hunt exclusiva


Ir para solução Resolvido por Vodkart,

Posts Recomendados

Galera, esse script funciona normalmente, porem gostaria de uma alteração se possível.

 gostaria que ele removesse o player quando o tempo acabar,  "porem ele tem um problema" .. quando eu ataco o mostro dentro da hunt, eu sou jogado para fora da e quando o tempo acaba ele não tira automaticamente.

 Vou resumir o sistema:  Ao usar o item você ganhar acesso de uma hunt especifica, tem tempo para usar o item novamente e também tem limite maximo de players por sala.

 

movements:

Citar

function onStepIn(cid, item, position, fromPosition)
    local config = {
    storage = 789456,
    from = {x = 1739, y = 358, z = 7}, -- coordenada do canto superior esquerdo da área.
    to = {x = 1844, y = 453, z = 7}, -- coordenada do canto inferior direito da área.
    maxPlayers = 2, -- quantos jogadores poderão entrar na área ao mesmo tempo.
    pos = {x = 1739, y = 397, z = 7}, -- para onde o jogador será teleportado.
    }
    
    local function getPlayersInArea(left, right)
        local playersInArea = {}
        for _, cid in ipairs(getPlayersOnline()) do
            if isInRange(getThingPos(cid), left, right) then
                table.insert(playersInArea, cid)
            end
        end
    return playersInArea
    end
    
    if isPlayer(cid) then
        if getPlayerStorageValue (cid, config.storage) < os.time() then
            doPlayerSendTextMessage(cid, 19, "Voce nao tem acesso a essa hunt, fale com o npc no segundo andar para adquirir uma.")
            doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
            doTeleportThing(cid, fromPosition, true)
        else
            doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
        end
    
        if table.getn(getPlayersInArea(config.from, config.to)) < config.maxPlayers and getPlayerStorageValue (cid, config.storage) > os.time() then
            doSendMagicEffect(fromPosition, CONST_ME_TELEPORT)
            doTeleportThing (cid, config.pos)
            doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
        elseif table.getn(getPlayersInArea(config.from, config.to)) >= config.maxPlayers and getPlayerStorageValue (cid, config.storage) > os.time() then
            doPlayerSendTextMessage (cid, 19, "Essa hunt ja atingiu o numero maximo de jogadores, aguarde um pouco.")
            doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
            doTeleportThing(cid, fromPosition, true)
        end
    end
return true
end

 

creaturescript:

Citar

local config = {
toKnow = 123456,
storage = 789456,
pos = {x = 1005, y = 905, z = 5}, -- para onde o jogador será teleportado caso o tempo tenha acabado.
}

function onKill(cid, target, lastHit)
    if getPlayerStorageValue (cid, config.toKnow) == 1 then
        if getPlayerStorageValue (cid, config.storage) < os.time () then
            doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
            doRemoveCreature (cid)
        end
    end
return true
end

function onLogin(cid)
    if getPlayerStorageValue (cid, config.toKnow) == 1 then
        if getPlayerStorageValue (cid, config.storage)  < os.time () then
            doTeleportThing (cid, config.pos)
            setPlayerStorageValue (cid, config.toKnow, 0)
        end
    end
return true
end

 

creature.xml

Citar

<event type="login" name="timeAcess" event="script" value="nome_arquivo.lua"/>
<event type="kill" name="timeAcessKill" event="script" value="nome_arquivo.lua"/>

 

login.lua

Citar

registerCreatureEvent(cid, "timeAcess")
registerCreatureEvent(cid, "timeAcessKill")

 

 

 

action:

Citar

function onUse(cid, item, frompos, item2, topos)
    local config = {
    timeExhausted = 12, -- tempo em horas para poder usar o item novamente.
    timeForUse = 1, -- tempo em horas que o player poderá entrar na cave.
    exhausted = 456789,
    storage = 789456,
    toKnow = 123456,
    effect = 27, -- efeito que dará ao usar o item.
    }
    
    if getPlayerStorageValue(cid, config.exhausted) < os.time() then
        setPlayerStorageValue (cid, config.storage, config.timeForUse * 60 * 60 + os.time())
        setPlayerStorageValue (cid, config.exhausted, config.timeExhausted * 60 * 60 + os.time())
        setPlayerStorageValue (cid, config.toKnow, 1)
        doSendMagicEffect (getThingPos(cid), config.effect)
        doPlayerSendTextMessage (cid, 19, "Parabéns voce tem o acesso a hunt exclusiva N-2 por 1 horas.")
        doRemoveItem(item.uid)
    else
        doPlayerSendTextMessage (cid, 19, "Aguarde 12 horas para usar esse item novamente.")
    end
return true
end

 

Link para o post
Compartilhar em outros sites

creaturescript:
 

Spoiler
local config = {
    toKnow = 123456,
    storage = 789456,
    pos = {x = 1005, y = 905, z = 5}, -- para onde o jogador será teleportado caso o tempo tenha acabado.
    }
   
    function onKill(cid, target, lastHit)
        if getPlayerStorageValue (cid, config.toKnow) == 1 then
            if ((os.time() - getPlayerStorageValue (cid, config.storage)) <= 0) then
                doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
                doRemoveCreature (cid)
            end
        end
    return true
    end
   
    function onLogin(cid)
        if getPlayerStorageValue (cid, config.toKnow) == 1 then
            if ((os.time() - getPlayerStorageValue (cid, config.storage)) <= 0) then
                doTeleportThing (cid, config.pos)
                setPlayerStorageValue (cid, config.toKnow, 0)
            end
        end
    return true
    end

 

Link para o post
Compartilhar em outros sites
18 horas atrás, So volto tarde disse:

creaturescript:
 

  Ocultar conteúdo

local config = {
toKnow = 123456,
storage = 789456,
pos = {x = 1005, y = 905, z = 5}, -- para onde o jogador será teleportado caso o tempo tenha acabado.
}

function onKill(cid, target, lastHit)
    if getPlayerStorageValue (cid, config.toKnow) == 1 then
        if getPlayerStorageValue (cid, config.storage) - os.time() > 0 then
            doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
            doRemoveCreature (cid)
        end
    end
return true
end

function onLogin(cid)
    if getPlayerStorageValue (cid, config.toKnow) == 1 then
        if getPlayerStorageValue (cid, config.storage) - os.time() > 0 then
            doTeleportThing (cid, config.pos)
            setPlayerStorageValue (cid, config.toKnow, 0)
        end
    end
return true
end

 

nao deu certo, o char ainda fica dentro da hunt.

Link para o post
Compartilhar em outros sites

recomendo a usar uma storage de controle para saber se o jogador está dentro da hunt e só assim tirar ele de lá quando o tempo acabar.

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites
40 minutos atrás, Vodkart disse:

recomendo a usar uma storage de controle para saber se o jogador está dentro da hunt e só assim tirar ele de lá quando o tempo acabar.

poderia me mostrar como posso fazer isso?

Link para o post
Compartilhar em outros sites
22 horas atrás, So volto tarde disse:

creaturescript:
 

  Ocultar conteúdo

local config = {
toKnow = 123456,
storage = 789456,
pos = {x = 1005, y = 905, z = 5}, -- para onde o jogador será teleportado caso o tempo tenha acabado.
}

function onKill(cid, target, lastHit)
    if getPlayerStorageValue (cid, config.toKnow) == 1 then
        if getPlayerStorageValue (cid, config.storage) - os.time() <= 0 then
            doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
            doRemoveCreature (cid)
        end
    end
return true
end

function onLogin(cid)
    if getPlayerStorageValue (cid, config.toKnow) == 1 then
        if getPlayerStorageValue (cid, config.storage) - os.time() <= 0 then
            doTeleportThing (cid, config.pos)
            setPlayerStorageValue (cid, config.toKnow, 0)
        end
    end
return true
end

 

 

11 minutos atrás, So volto tarde disse:

editei

Quando eu mato 1 mob eu sou teleportado.. e da esse erro..

 

Screenshot_466.png

Link para o post
Compartilhar em outros sites
4 minutos atrás, So volto tarde disse:

dnv, k

n esta teleportando quando o tempo acabou kkkk

 pra que serve esse ?     toKnow = 123456,

Link para o post
Compartilhar em outros sites
4 minutos atrás, leozincorsair disse:

n esta teleportando quando o tempo acabou kkkk

 pra que serve esse ?     toKnow = 123456,

a lógica é pra quando o tempo acabar, vc matar um bixo e ser removido do jogo, e logo após quando você entrar, você ser teleportado e a storage de controle zerada

o toknow é a storage de controle

Link para o post
Compartilhar em outros sites
1 minuto atrás, So volto tarde disse:

a lógica é pra quando o tempo acabar, vc matar um bixo e ser removido do jogo, e logo após quando você entrar, você ser teleportado e a storage de controle zerada

o toknow é a storage de controle

mais na real oque acontece é quando eu chega na hunt, mato 1 bixo ja sou teleportado pra fora

Link para o post
Compartilhar em outros sites
local storage = 789456
local from, to = {x = 1739, y = 358, z = 7}, {x = 1844, y = 453, z = 7}
local pos = {x = 1005, y = 905, z = 5}
function onThink(interval, lastExecution)
	local on = getPlayersOnline()
	if #on > 0 then
		for _, pid in pairs(on) do
			if isInRange(getPlayerPosition(pid), from, to) and getPlayerStorageValue(pid, storage) - os.time() <= 0 then
				doTeleportThing(pid, config.pos)
				doPlayerSendTextMessage(pid, 19, "tempo esgotado.")
				setPlayerStorageValue(pid, 123456, 0) -- know storage
			end
		end
	end
	return true
end

 

TAG

<globalevent name="ExitHunt" interval="30" script="nome do seu script.lua" />

obs: se o seu servidor for em milesegundos trocar o "30" por "30000"

obs: pode remover o creaturescript

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites
9 minutos atrás, Vodkart disse:

local storage = 789456
local from, to = {x = 1739, y = 358, z = 7}, {x = 1844, y = 453, z = 7}
local pos = {x = 1005, y = 905, z = 5}
function onThink(interval, lastExecution)
	local on = getPlayersOnline()
	if #on > 0 then
		for _, pid in pairs(on) do
			if isInRange(getPlayerPosition(pid), from, to) and getPlayerStorageValue(pid, storage) - os.time() <= 0 then
				doTeleportThing(pid, config.pos)
				doPlayerSendTextMessage(pid, 19, "tempo esgotado.")
				setPlayerStorageValue(pid, 123456, 0) -- know storage
			end
		end
	end
	return true
end

 

TAG


<globalevent name="ExitHunt" interval="30" script="nome do seu script.lua" />

obs: se o seu servidor for em milesegundos trocar o "30" por "30000"

obs: pode remover o creaturescript

Ainda não teleportou !

Link para o post
Compartilhar em outros sites
31 minutos atrás, Vodkart disse:

local storage = 789456
local from, to = {x = 1739, y = 358, z = 7}, {x = 1844, y = 453, z = 7}
local pos = {x = 1005, y = 905, z = 5}
function onThink(interval, lastExecution)
	local on = getPlayersOnline()
	if #on > 0 then
		for _, pid in pairs(on) do
			if isInRange(getPlayerPosition(pid), from, to) and getPlayerStorageValue(pid, storage) - os.time() <= 0 then
				doTeleportThing(pid, config.pos)
				doPlayerSendTextMessage(pid, 19, "tempo esgotado.")
				setPlayerStorageValue(pid, 123456, 0) -- know storage
			end
		end
	end
	return true
end

 

TAG


<globalevent name="ExitHunt" interval="30" script="nome do seu script.lua" />

obs: se o seu servidor for em milesegundos trocar o "30" por "30000"

obs: pode remover o creaturescript

aproveita e me tira 1 dúvida sobre isso se puder por favor, vodkart

esses dias eu fiz a exata mesma solução que você enviou aqui, porém fiquei com um pé atrás de enviar para produção já que vai estar verificando uma área de tiles toda hora com o onthink, isso causaria lag ou é só uma superstição minha?


sobre o tópico:
se ainda quiser uma solução diferente da do vodkart, vou tentar refazer e você verifica se funcionou

 

Spoiler
local config = {
    toKnow = 123456,
    storage = 789456,
    pos = {x = 1005, y = 905, z = 5}, -- para onde o jogador será teleportado caso o tempo tenha acabado.
    }
   
    function onKill(cid, target, lastHit)
        if (getPlayerStorageValue(cid, config.toKnow) == 1) then
            local time = getPlayerStorageValue(cid, config.storage) - os.time()
            if (time <= 0) then
                doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
                doTeleportThing (cid, config.pos)
                setPlayerStorageValue (cid, config.toKnow, 0)
            return true
            end
        end
    return true
    end
   

se funcionar, você pode retirar o evento de login

Link para o post
Compartilhar em outros sites
8 minutos atrás, So volto tarde disse:

aproveita e me tira 1 dúvida sobre isso se puder por favor, vodkart

esses dias eu fiz a exata mesma solução que você enviou aqui, porém fiquei com um pé atrás de enviar para produção já que vai estar verificando uma área de tiles toda hora com o onthink, isso causaria lag ou é só uma superstição minha?


sobre o tópico:
se ainda quiser uma solução diferente da do vodkart, vou tentar refazer e você verifica se funcionou

 

  Ocultar conteúdo
local config = {
    toKnow = 123456,
    storage = 789456,
    pos = {x = 1005, y = 905, z = 5}, -- para onde o jogador será teleportado caso o tempo tenha acabado.
    }
   
    function onKill(cid, target, lastHit)
        if (getPlayerStorageValue(cid, config.toKnow) == 1) then
            local time = getPlayerStorageValue(cid, config.storage) - os.time()
            if (time <= 0) then
                doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
                doTeleportThing (cid, config.pos)
                setPlayerStorageValue (cid, config.toKnow, 0)
            return true
            end
        end
    return true
    end
   

se funcionar, você pode retirar o evento de login

Nada ainda vey :(

Link para o post
Compartilhar em outros sites
2 minutos atrás, leozincorsair disse:

Nada ainda vey :(

tem que funcionar viado, ta td certo... me chama discord to on

 

@So volto tarde

 

nesse caso não... pois só está pegando a pos númerica dos jogadores... agr se for td hr checar varios tiles(num mapa grande), ai sim da um lag absurdo

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites
13 minutos atrás, Vodkart disse:

tem que funcionar viado, ta td certo... me chama discord to on

 

@So volto tarde

 

nesse caso não... pois só está pegando a pos númerica dos jogadores... agr se for td hr checar varios tiles(num mapa grande), ai sim da um lag absurdo

e somente de uma unica hunt, queria fazer isso com 6. tudo individual

Citar

function onUse(cid, item, frompos, item2, topos)
    local config = {
    timeExhausted = 12, -- tempo em horas para poder usar o item novamente.
    timeForUse = 1, -- tempo em horas que o player poderá entrar na cave.
    exhausted = 456789,
    storage = 789456,
    toKnow = 123456,
    effect = 27, -- efeito que dará ao usar o item.
    }
    
    if getPlayerStorageValue(cid, config.exhausted) < os.time() then
        setPlayerStorageValue (cid, config.storage, config.timeForUse * 60 * 60 + os.time())
        setPlayerStorageValue (cid, config.exhausted, config.timeExhausted * 60 * 60 + os.time())
        setPlayerStorageValue (cid, config.toKnow, 1)
        doSendMagicEffect (getThingPos(cid), config.effect)
        doPlayerSendTextMessage (cid, 19, "Parabéns voce tem o acesso a hunt exclusiva N-2 por 1 horas.")
        doRemoveItem(item.uid)
    else
        doPlayerSendTextMessage (cid, 19, "Aguarde 12 horas para usar esse item novamente.")
    end
return true
end

poderia arrumar esse action para por em minutos, pq em horas demora pra testar

Link para o post
Compartilhar em outros sites

refiz o sistema:

 

-- LIB
hunt_config = {
	storage = 789456,
	from = {x = 1739, y = 358, z = 7}, -- coordenada do canto superior esquerdo da área.
	to = {x = 1844, y = 453, z = 7}, -- coordenada do canto inferior direito da área.
	maxPlayers = 2, -- quantos jogadores poderão entrar na área ao mesmo tempo.
	pos = {x = 1739, y = 397, z = 7}, -- para onde o jogador será teleportado.
	exit = {x = 1005, y = 905, z = 5}
}

-- MOVEMENTS
function onStepIn(cid, item, position, fromPosition)
	local t = {} 
	if not isPlayer(cid) then return true end
	for _, pid in pairs(getPlayersOnline()) do
		if isInRange(getPlayerPosition(pid), hunt_config.from, hunt_config.to) then 
			t[#t+1] = pid
		end
	end
	if #t >= hunt_config.maxPlayers then
		doPlayerSendTextMessage (cid, 19, "Essa hunt ja atingiu o numero maximo de jogadores, aguarde um pouco.")
		doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
		doTeleportThing(cid, fromPosition, true)
	elseif getPlayerStorageValue(cid, hunt_config.storage) - os.time() <= 0 then
		doPlayerSendTextMessage(cid, 19, "Voce nao tem acesso a essa hunt, fale com o npc no segundo andar para adquirir uma.")
		doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
		doTeleportThing(cid, fromPosition, true)
	else
		
		doTeleportThing(cid, hunt_config.pos)
		doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
	end
	return true
end

-- ACTION

function onUse(cid, item, frompos, item2, topos)
	local config = {
		timeExhausted = 12, -- tempo em horas para poder usar o item novamente.
		timeForUse = 1, -- tempo em horas que o player poderá entrar na cave.
		exhausted = 456789,
	}
	if getPlayerStorageValue(cid, config.exhausted) - os.time() > 0 then
		doPlayerSendTextMessage(cid, 19, "Aguarde 12 horas para usar esse item novamente.") return true
	end
	setPlayerStorageValue(cid, hunt_config.storage, os.time()+config.timeForUse*3600)
	setPlayerStorageValue(cid, config.exhausted, os.time()+config.timeExhausted*3600)
	doSendMagicEffect(getThingPos(cid), 27)
	doPlayerSendTextMessage(cid, 19, "Parabéns voce tem o acesso a hunt exclusiva N-2 por 1 horas.")
	doRemoveItem(item.uid)
	return true
end

--GLOBAL
function onThink(interval, lastExecution)
	local on = getPlayersOnline()
	if #on > 0 then
		for _, pid in pairs(on) do
			if isInRange(getPlayerPosition(pid), hunt_config.from, hunt_config.to) and getPlayerStorageValue(pid, hunt_config.storage) - os.time() <= 0 then
				doTeleportThing(pid, hunt_config.exit)
				doPlayerSendTextMessage(pid, 19, "tempo esgotado.")
			end
		end
	end
	return true
end

 

 

 

para testar mais rapido usa assim no actions nessa linha:

 

setPlayerStorageValue(cid, hunt_config.storage, os.time()+90) -- 90 segundos de sistema

 

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo