Ir para conteúdo
  • Cadastre-se

(Resolvido)Função onTime Globalevents 0.4


Ir para solução Resolvido por x1zy,

Posts Recomendados

Bom, eu tenho um globalevent por intervalos, e eu queria modificar para versão onTime, que executa o evento em determinada hora e dia... tentei mas nao consegui, alguem pode arrumar pra mim, isso ja serve para eu aprender, enfim... se puder modificar pra mim agradeço... e melhor ainda se explicar as modificações... 

 

lastman.lua

 

Spoiler

local createpos = {x=174,y=47,z=7} -- local onde, a cada 2 horas, o teleport irá aparecer
 local topos = {x=70,y=341,z=6} -- Onde o teleport irá levar os players
 local msg = "O Last man standing Event Teleport acabou de fechar! Ele irá reaparecer de novo a cada 2 horas! Todos os participantes, preparem-se para a batalha!" 
 local timetoclose = 120 -- valor em segundos de quanto tempo o portal ficará aberto 

 local function remove() 
 local tp = getTileItemById(createpos,1387).uid 
 if tp ~= 0 then 
 doRemoveItem(tp) 
 doBroadcastMessage(msg) 
 end 
 end 

 function onThink(interval) 
 doCreateTeleport(1387, topos, createpos) 
 doBroadcastMessage("Last man standing event Teleport esta aberto!\nCatch o teleport vai fechar dentro de "..timetoclose.." segundos! O teleport esta localizado na sala de Eventos.") 
 addEvent(remove,timetoclose*1000) 
 return true 
 end

 

arena.lua

 

Spoiler

local t = { 
    tmp =     { 
            {x = 67, y = 338, z = 6}, -- quina à noroeste (acima e à esquerda) da area onde os players devem estar para ingressar no evento 
            {x = 73, y = 344, z = 6} -- quina à Sudeste (abaixo e à direita)
            }, 
    arena = { 
            {x = 46, y = 317, z = 7}, -- Quina de cima e à esquerda
            {x = 95, y = 365, z = 7}, -- quina de baixo e à direita
            {x = 70, y = 341, z = 7} -- Centro da Arena
            }, 
    
    noPlayers = {x=160, y=54, z=7}, -- Para onde serão teleportados caso não haja campeão
    semChamps = {x=160, y=54, z=7}, -- Local para onde serão teleportados os 'players' caso passem os minutos sem campeão
            
    from = {x = 53, y = 324, z = 7}, -- quina de cima e à esquerda de onde os players serão transportados (escolha será aleatória) 
    to = {x = 82, y = 351, z = 7}, -- quina de baixo e à direita de onde os players serão transportados (escolha será aleatória) 

    minPlayers = 10, -- Número mínimo de players para iniciar o evento
    noPlayers = 1, -- Se houver este número de player na área o evento não começa 
    prize = {6527}
}    -- prêmio que o vencedor vai receber
    local expRewChamps = 0 -- Coloque aqui a experiência que o campeão ganhará. Deixe zero se não quiser.
     local expRewPart = 0 -- Coloque aqui a experiência que todos os 'players' que participarão ganharão. Deixe zero se não quiser.


local kick = 0 

function onThink() 
    local arenaPlayers = {} 
        
        for x = t.arena[1].x, t.arena[2].x do 
            for y = t.arena[1].y, t.arena[2].y do 
                for z = t.arena[1].z, t.arena[2].z do 
                    local pos = {x = x, y = y, z = z} 
                    local n = getTileInfo(pos).creatures 
             
                        if n ~= 0 then 
                            pos.stackpos = 1 
                            local c = getThingfromPos(pos) 
                                while c.uid ~= 0 do 
                                    if c.itemid == 1 and c.type == 1 then 
                                        table.insert(arenaPlayers, c.uid) 
                                            if #arenaPlayers == n then 
                                                break 
                                            end 
                                    end 
                                    pos.stackpos = pos.stackpos + 1 
                                    c = getThingfromPos(pos) 
                                end 
                        end 
                end 
            end 
        end 

        if #arenaPlayers == 1 then 
            local p = getPlayerMasterPos(arenaPlayers[1]) 
                doTeleportThing(arenaPlayers[1], p) 
                doSendMagicEffect(p, CONST_ME_TELEPORT) 
                doPlayerSendTextMessage(arenaPlayers[1], MESSAGE_STATUS_CONSOLE_BLUE, "Voce ganhou este evento e recebeu este premio") 
                doBroadcastMessage(getCreatureName(arenaPlayers[1]) .." venceu o Last Man Standing Event.") 
                doPlayerAddItem(arenaPlayers[1], t.prize[math.random(#t.prize)], 10)
                    if (expRewChamps > 0) then
                        doPlayerAddExperience(arenaPlayers[1],expRewChamps)
                        doSendMagicEffect(getPlayerPosition(arenaPlayers[1]), CONST_ME_MAGIC_RED)
                        doSendAnimatedText(getPlayerPosition(arenaPlayers[1]), "Exp!", TEXTCOLOR_WHITE)
                    end
                kick = 0 
        elseif #arenaPlayers > 1 then 
            if kick == 0 then 
                kick = os.time() 
            else 
                if os.time() - kick >= 840 then 
                    kick = 0 
                    for i = 1, #arenaPlayers do 
                        doTeleportThing(arenaPlayers,t.semChamps)
                        if (expRewPart > 0) then
                            doPlayerAddExperience(arenaPlayers[1],expRewPart)
                        end    
                        doPlayerSendTextMessage(arenaPlayers, MESSAGE_STATUS_WARNING, "Muito tarde, tente de novo mais tarde.") 
                    end 
                end 
            end 
        elseif #arenaPlayers == 0 then 
            kick = 0 

        local players = {} 
            for x = t.tmp[1].x, t.tmp[2].x do 
                for y = t.tmp[1].y, t.tmp[2].y do 
                    for z = t.tmp[1].z, t.tmp[2].z do 
                        local c = getTopCreature({x = x, y = y, z = z}) 
                            if c.type == 1 then 
                                table.insert(players, c.uid) 
                            end 
                    end 
                end 
            end 

            if #players >= t.minPlayers then 
                for i = 1, #players do 
                    local p = {x = math.random(t.from.x, t.to.x), y = math.random(t.from.y, t.to.y), z = math.random(t.from.z, t.to.z)} 
                    doTeleportThing(players, p) 
                    doSendMagicEffect(p, CONST_ME_TELEPORT) 
                    doPlayerSendTextMessage(players, MESSAGE_STATUS_WARNING, "A batalha começou. Sobrevivam para a glória!") 
                end 
            else 
                for i = 1, #players do 
                    doTeleportThing(players,t.noPlayers) 
                    doPlayerSendTextMessage(players, MESSAGE_STATUS_WARNING, "O evento não começou porque não haviam player suficientes!") 
                end 
            end 
        end 
    return true 
end

 

Scriptszinhos:

 

Não abandone seu tópico, quando você tiver a dúvida resolvida sozinho tente ensinar aos outros como resolve-la (você pode não ser o único com o problema) e quando ela for resolvida por outra pessoa não se esqueça de marcar como melhor resposta e deixar o gostei.

Link para o post
Compartilhar em outros sites
  • Solução
<globalevent name="EVENTNAME" time="16:20:00" script="SCRIPTNAME.lua" />
local cfg = {
	storage = 82342,
	createpos = {x = 174, y = 47, z = 7},
	topos = {x = 70, y = 341, z = 6},
	msg = "O Last man standing Event Teleport acabou de fechar! Ele irá reaparecer de novo a cada 2 horas! Todos os participantes, preparem-se para a batalha!",
	timetoclose = 120
}

local function remove() 
	local tp = getTileItemById(cfg.createpos, 1387).uid 
	if tp ~= 0 then 
		doRemoveItem(tp) 
		doBroadcastMessage(cfg.msg) 
		setGlobalStorageValue(cfg.storage, 0)
	end 
 end 

function onTime(interval)
	if not getGlobalStorageValue(cfg.storage) == 1 then
		setGlobalStorageValue(cfg.storage, 1)
		doCreateTeleport(1387, cfg.topos, cfg.createpos) 
		doBroadcastMessage("Last man standing event Teleport esta aberto!\nCatch o teleport vai fechar dentro de "..cfg.timetoclose.." segundos! O teleport esta localizado na sala de Eventos.") 
		addEvent(remove, cfg.timetoclose * 1000)
	end
	return true 
end

 

 

 

 

Editado por x1zy (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
30 minutos atrás, x1zy disse:

<globalevent name="EVENTNAME" time="16:20:00" script="SCRIPTNAME.lua" />

local cfg = {
	storage = 82342,
	createpos = {x = 174, y = 47, z = 7},
	topos = {x = 70, y = 341, z = 6},
	msg = "O Last man standing Event Teleport acabou de fechar! Ele irá reaparecer de novo a cada 2 horas! Todos os participantes, preparem-se para a batalha!",
	timetoclose = 120
}

local function remove() 
	local tp = getTileItemById(cfg.createpos, 1387).uid 
	if tp ~= 0 then 
		doRemoveItem(tp) 
		doBroadcastMessage(cfg.msg) 
		setGlobalStorageValue(cfg.storage, 0)
	end 
 end 

function onTime(interval)
	if not getGlobalStorageValue(cfg.storage) == 1 then
		setGlobalStorageValue(cfg.storage, 1)
		doCreateTeleport(1387, cfg.topos, cfg.createpos) 
		doBroadcastMessage("Last man standing event Teleport esta aberto!\nCatch o teleport vai fechar dentro de "..cfg.timetoclose.." segundos! O teleport esta localizado na sala de Eventos.") 
		addEvent(remove, cfg.timetoclose * 1000)
	end
	return true 
end

 

 

 

 



Já tentei fazer isso. Dá event onthink not found :/

Scriptszinhos:

 

Não abandone seu tópico, quando você tiver a dúvida resolvida sozinho tente ensinar aos outros como resolve-la (você pode não ser o único com o problema) e quando ela for resolvida por outra pessoa não se esqueça de marcar como melhor resposta e deixar o gostei.

Link para o post
Compartilhar em outros sites

eu editar o post, faz pelo onThink mesmo, com interval de 30seg.
lembrando que eu não testei, posta se tiver erros no console.
outra questão, não sei se você vai ter que usar os dias em Inglês ou Português. testa nos 2.

 

local days = {
	['Wednesday'] = "16:20:00", -- quarta
	['Friday'] = "16:20:00"
}

local cfg = {
	storage = 82342,
	createpos = {x = 174, y = 47, z = 7},
	topos = {x = 70, y = 341, z = 6},
	msg = "O Last man standing Event Teleport acabou de fechar! Ele irá reaparecer de novo a cada 2 horas! Todos os participantes, preparem-se para a batalha!",
	timetoclose = 120
}

local function remove() 
	local tp = getTileItemById(cfg.createpos, 1387).uid 
	if tp ~= 0 then 
		doRemoveItem(tp) 
		doBroadcastMessage(cfg.msg) 
		setGlobalStorageValue(cfg.storage, 0)
	end 
 end 

function onThink(interval) 
	if not getGlobalStorageValue(cfg.storage) == 1 then
		getDay = days[os.date("%A")]
		if getDay and getDay == os.date("%H") then
			setGlobalStorageValue(cfg.storage, 1)
			doCreateTeleport(1387, cfg.topos, cfg.createpos) 
			doBroadcastMessage("Last man standing event Teleport esta aberto!\nCatch o teleport vai fechar dentro de "..cfg.timetoclose.." segundos! O teleport esta localizado na sala de Eventos.") 
			addEvent(remove, cfg.timetoclose * 1000)
		end	
	end
	return true 
end

 

Link para o post
Compartilhar em outros sites

@x1zy Obrigado!!! agora modifiquei com mais calma e funcionou o ontime!

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

Scriptszinhos:

 

Não abandone seu tópico, quando você tiver a dúvida resolvida sozinho tente ensinar aos outros como resolve-la (você pode não ser o único com o problema) e quando ela for resolvida por outra pessoa não se esqueça de marcar como melhor resposta e deixar o gostei.

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo