Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Saudações meus caros amigos do TK!

 

Preciso da ajuda de algum gênio para um problema !

É o seguinte: eu tenho um evento no meu server que consiste em dividir 2 times (Green e Red), onde cada membro de cada time possui uma storage registrada justamente para diferenciar cada membro entre aliado e inimigo, isso vale para manter a cor do outfit, manter efeitos durante o evento, selecionar o vencedor, dentre outras funções.

Mas então me surgiu uma ideia: por que não contar as kills dos players durante o evento? Basta eu criar um creaturescript que conte cada vez que eu matar um player (onKill), logo em seguida eu salvo uma globalstorage referente a cada time, diferenciando pela propria storage dos jogadores, faço um incremento a cada vez que um player matar um inimigo, e pronto! SÓ QUE NÃO !!!!!

Eu fiz dessa forma, e realmente quando um player mata um inimigo o seu time recebe 1 ponto, só que se 2 ou mais players atacarem o mesmo inimigo e o matarem, o time recebe 2 ou mais pontos ! É como se o script tivesse contando os pontos pela quantidade de players atacando o inimigo e o matando, e não necessariamente contando a quantidade de inimigos mortos !!!

Quem pode me ajudar nessa empreitada?

Vou mandar o código que fiz :

-- ativando funcao para red team
	local storageIdGreen = 10001
	local storageIdRed = 10002
	local storageID = 10100
	local townid = 13

eventconfig = {
	GSR = 10400,
	GSG = 10600,
	narrow = 3
}

function onKill(cid, target, lastHit)
if isPlayer(cid) then
			if getPlayerStorageValue(cid, storageIdRed) == 1 then
					setGlobalStorageValue(eventconfig.GSR, getGlobalStorageValue(eventconfig.GSR)+1)
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Booa ! Ponto pra sua equipe! Seu time possui "..getGlobalStorageValue(eventconfig.GSR).." pontos! Um vencedor precisa de "..eventconfig.narrow.." pontos !")			
			end


-- time verde matando
			if getPlayerStorageValue(cid, storageIdGreen) == 1 then
					setGlobalStorageValue(eventconfig.GSG, getGlobalStorageValue(eventconfig.GSG)+1)
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Booa ! Ponto pra sua equipe! Seu time possui "..getGlobalStorageValue(eventconfig.GSG).." pontos! Um vencedor precisa de "..eventconfig.narrow.." pontos !")			
			end

Se alguém souber de alguma solução, ou de como tratar esses globalstorages, por favor, me ajudem!

Baiak 24h -> www.baiakinfinity.ml

Link para o post
Compartilhar em outros sites

Certo, eu tentei fazer ele por onPrepareDeath, até deu certo só que na hora de contar as kills na variável global ele explode kkkkk.

Ele não conta da forma correta!

Ex:

Seu time recebeu ponto ! Total: [1]

Seu time recebeu ponto ! Total: [2]

Seu time recebeu ponto ! Total: [1]

Seu time recebeu ponto ! Total: [1]

... e por aí vai... 

 

Eu imagino que seja porque essa variável global que eu criei lá nas libs (pasta libs) seja alguma string, porque quando eu tentei criar uma variável local pra testar um incremento e deixar ela recebendo o getGlobalStorageValue, o script explodiu, informando algo do tipo.

 

Vou enviar o código atual com PrepareDeath:

function onPrepareDeath(cid, deathList)

local storageIdGreen = 10001
local storageIdRed = 10002

local config = {
	pos_rock_green = {x=489, y=281, z=7, stackpos=1},
	pos_TP_green = {x=488, y=278, z=7, stackpos=1},
	pos_rock_red = {x=479, y=278, z=7, stackpos=1},
	pos_TP_red = {x=477, y=281, z=7, stackpos=1},
	townid = 13
}

if isPlayer(cid) then
			if getPlayerStorageValue(cid, storageIdRed) == 1 then
					setGlobalStorageValue(eventconfig.GSG, getGlobalStorageValue(eventconfig.GSG) + 1)
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Total: ["..getGlobalStorageValue(eventconfig.GSR).."]")		
			end
			if getPlayerStorageValue(cid, storageIdGreen) == 1 then
					setGlobalStorageValue(eventconfig.GSR, getGlobalStorageValue(eventconfig.GSR) + 1)
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Total: ["..getGlobalStorageValue(eventconfig.GSG).."]")
					-- local getglob = getGlobalStorageValue(eventconfig.GSR)
			end

-- for i = 1, #deathList do
-- pid = deathList[i]
-- if isPlayer(pid) then
			

-- fim do evento
	if getGlobalStorageValue(eventconfig.GSR) >= eventconfig.narrow or getGlobalStorageValue(eventconfig.GSG) >= eventconfig.narrow then
			--criar as rocks para evitar players de entrarem no evento instantaneamente e confundirem o GM
			doCreateItem(1285,1,config.pos_rock_green)
			doCreateItem(1285,1,config.pos_TP_green)
			doCreateItem(1285,1,config.pos_rock_red)
			doCreateItem(1285,1,config.pos_TP_red)

			if getPlayerStorageValue(cid, storageIdRed) == 1 then
				doBroadcastMessage("{RED TEAM} é o vencedor do evento ! Total: ["..eventconfig.narrow.."] Kills !", 25)
			end

			
			if getPlayerStorageValue(cid, storageIdGreen) == 1 then
				doBroadcastMessage("{GREEN TEAM} é o vencedor do evento ! Total: ["..eventconfig.narrow.."] Kills !", 25)
			end
				for _, cid in ipairs(getPlayersOnline()) do
					if getPlayerStorageValue(cid, storageIdRed) == 1 or getPlayerStorageValue(cid, storageIdGreen) == 1 then
						doTeleportThing(cid, getTownTemplePosition(config.townid))
							if getGlobalStorageValue(eventconfig.GSG) ~= 0 then
								setGlobalStorageValue(eventconfig.GSG, 0)
							end
							if getGlobalStorageValue(eventconfig.GSR) ~= 0 then
								setGlobalStorageValue(eventconfig.GSR, 0)
							end
					end
				end
	end
end

return true
end

libs do evento (pasta libs):

eventconfig = {
	GSR = 10400,
	GSG = 10600,
	narrow = 3
}

ME ajuda kkkk :"(

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

Baiak 24h -> www.baiakinfinity.ml

Link para o post
Compartilhar em outros sites
local storageIdGreen = 10001
local storageIdRed = 10002
local config = {
  pos_rock_green = {x=489, y=281, z=7, stackpos=1},
  pos_TP_green = {x=488, y=278, z=7, stackpos=1},
  pos_rock_red = {x=479, y=278, z=7, stackpos=1},
  pos_TP_red = {x=477, y=281, z=7, stackpos=1},
  townid = 13
}
function onPrepareDeath(cid, deathList)
  if isPlayer(cid) and getPlayerStorageValue(cid, storageIdRed) > 0 or getPlayerStorageValue(cid, storageIdGreen) > 0 then
    local storage = getPlayerStorageValue(cid, storageIdRed) > 0 and eventconfig.GSG or eventconfig.GSR
    setGlobalStorageValue(storage, getGlobalStorageValue(storage)+1)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Total: ["..getGlobalStorageValue(storage).."]")
    if getGlobalStorageValue(storage) == eventconfig.narrow then
      doCreateItem(1285,1,config.pos_rock_green)
      doCreateItem(1285,1,config.pos_TP_green)
      doCreateItem(1285,1,config.pos_rock_red)
      doCreateItem(1285,1,config.pos_TP_red)
      doBroadcastMessage("O "..(storage == eventconfig.GSG and "{RED TEAM}" or "{GREEN TEAM}").." é o vencedor do evento ! Total: ["..eventconfig.narrow.."] Kills !", 25)
      for _, cid in ipairs(getPlayersOnline()) do
        if getPlayerStorageValue(cid, storageIdRed) > 0 or getPlayerStorageValue(cid, storageIdGreen) > 0 then
          doTeleportThing(cid, getTownTemplePosition(config.townid))
        end
      end
      setGlobalStorageValue(eventconfig.GSG, 0)
      setGlobalStorageValue(eventconfig.GSR, 0)
    end
  end
  return true
end

 

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

O script continua não contando as mortes mano :( Fiz o teste aqui, atacando com 1 player ou com 2, ele não conta as mortes, sempre [1].

Baiak 24h -> www.baiakinfinity.ml

Link para o post
Compartilhar em outros sites
6 minutos atrás, IceWar disse:

O script continua não contando as mortes mano :( Fiz o teste aqui, atacando com 1 player ou com 2, ele não conta as mortes, sempre [1].

 

registrou o evento no onLogin?

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

Registrei sim mano, substitui certinho mas mesmo assim não tive sucesso. A unica solução que encontrei mesmo foi fazer contabilizar as kills de forma individual. Fiz um script que conseguiu contabilizar as kills por player, e não pelo time, aí deu certo :(.

Vou deixar o meu script que deu certo aqui, se vc achar melhor implementar a ideia nele (de contar as kills tanto por players quanto por equipes) ficaria interessante também, pros players terem uma espécie de frags dentro do evento...

 

function onPrepareDeath(cid, deathList, lastHitKiller, mostDamageKiller)
dofile('data/lib/EventPoints.lua')

local storageIdGreen = 10001
local storageIdRed = 10002

-- apenas para rapida alteracao de quantidade de kills para acabar o evento, a titulo de testes.
local eventconfigs = {
	narrow = 3,
	constante = 1
}

local config = {
	pos_rock_green = {x=489, y=281, z=7, stackpos=1},
	pos_TP_green = {x=488, y=278, z=7, stackpos=1},
	pos_rock_red = {x=479, y=278, z=7, stackpos=1},
	pos_TP_red = {x=477, y=281, z=7, stackpos=1},
	townid = 13
}

if isPlayer(cid) then
			if getPlayerStorageValue(cid, storageIdRed) == 1 then
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Voce possui : ["..getPlayerStorageValue(cid, eventconfig.GSR).."] pontos.")
						setPlayerStorageValue(deathList[1], eventconfig.GSG, getPlayerStorageValue(deathList[1], eventconfig.GSG) + eventconfigs.constante)
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O(a) "..getCreatureName(deathList[1]).." possui um total de: ["..getPlayerStorageValue(deathList[1], eventconfig.GSG).."] pontos.")		
			end
			if getPlayerStorageValue(cid, storageIdGreen) == 1 then
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Voce possui : ["..getPlayerStorageValue(cid, eventconfig.GSG).."] pontos.")
						setPlayerStorageValue(deathList[1], eventconfig.GSR, getPlayerStorageValue(deathList[1], eventconfig.GSR) + eventconfigs.constante)
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O(a) "..getCreatureName(deathList[1]).." possui um total de: ["..getPlayerStorageValue(deathList[1], eventconfig.GSR).."] pontos.")
			end			

-- fim do evento
	if getPlayerStorageValue(deathList[1], eventconfig.GSR) >= eventconfigs.narrow or getPlayerStorageValue(deathList[1], eventconfig.GSG) >= eventconfigs.narrow then
			--criar as rocks para evitar players de entrarem no evento instantaneamente e confundirem o GM
			doCreateItem(1285,1,config.pos_rock_green)
			doCreateItem(1285,1,config.pos_TP_green)
			doCreateItem(1285,1,config.pos_rock_red)
			doCreateItem(1285,1,config.pos_TP_red)

			if getPlayerStorageValue(deathList[1], storageIdRed) == 1 then
				doBroadcastMessage("{RED TEAM} é o vencedor do evento ! Total: ["..eventconfigs.narrow.."] Kills !", 25)
			end

			
			if getPlayerStorageValue(deathList[1], storageIdGreen) == 1 then
				doBroadcastMessage("{GREEN TEAM} é o vencedor do evento ! Total: ["..eventconfigs.narrow.."] Kills !", 25)
			end
				for _, cid in ipairs(getPlayersOnline()) do
					if getPlayerStorageValue(deathList[1], storageIdRed) == 1 or getPlayerStorageValue(deathList[1], storageIdGreen) == 1 then
						if getPlayerStorageValue(cid, storageIdRed) == 1 or getPlayerStorageValue(cid, storageIdGreen) == 1 then
							doTeleportThing(cid, getTownTemplePosition(config.townid))
								if getPlayerStorageValue(cid, eventconfig.GSG) ~= 0 or getPlayerStorageValue(deathList[1], eventconfig.GSG) ~= 0 then
									setPlayerStorageValue(cid, eventconfig.GSG, 0)
									setPlayerStorageValue(deathList[1], eventconfig.GSG, 0)
								end
								if getPlayerStorageValue(cid, eventconfig.GSR) ~= 0 or getPlayerStorageValue(deathList[1], eventconfig.GSR) ~= 0 then
									setPlayerStorageValue(cid, eventconfig.GSR, 0)
									setPlayerStorageValue(deathList[1], eventconfig.GSR, 0)
								end
						end
					end
				end
	end
end

return true
end

 

Baiak 24h -> www.baiakinfinity.ml

Link para o post
Compartilhar em outros sites

Ok, vou postar os 3 códigos que precisei usar: as libs, o creaturescripts do onpreparedeath e onkill.

 

EventPoints.lua - libs:

eventconfig = {
	GSR = 10400,
	GSG = 10600,
	narrow = 3
}

 

Creaturescripts/scripts/Event_Dead.lua:

function onPrepareDeath(cid, deathList, lastHitKiller, mostDamageKiller)
dofile('data/lib/EventPoints.lua')

local storageIdGreen = 10001
local storageIdRed = 10002

-- apenas para rapida alteracao de quantidade de kills para acabar o evento, a titulo de testes.
local eventconfigs = {
	narrow = 3,
	constante = 1
}

local config = {
	pos_rock_green = {x=489, y=281, z=7, stackpos=1},
	pos_TP_green = {x=488, y=278, z=7, stackpos=1},
	pos_rock_red = {x=479, y=278, z=7, stackpos=1},
	pos_TP_red = {x=477, y=281, z=7, stackpos=1},
	townid = 13
}

if isPlayer(cid) then
			if getPlayerStorageValue(cid, storageIdRed) == 1 then
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Voce possui : ["..getPlayerStorageValue(cid, eventconfig.GSR).."] pontos.")
						setPlayerStorageValue(deathList[1], eventconfig.GSG, getPlayerStorageValue(deathList[1], eventconfig.GSG) + eventconfigs.constante)
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O(a) "..getCreatureName(deathList[1]).." possui um total de: ["..getPlayerStorageValue(deathList[1], eventconfig.GSG).."] pontos.")		
			end
			if getPlayerStorageValue(cid, storageIdGreen) == 1 then
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Voce possui : ["..getPlayerStorageValue(cid, eventconfig.GSG).."] pontos.")
						setPlayerStorageValue(deathList[1], eventconfig.GSR, getPlayerStorageValue(deathList[1], eventconfig.GSR) + eventconfigs.constante)
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O(a) "..getCreatureName(deathList[1]).." possui um total de: ["..getPlayerStorageValue(deathList[1], eventconfig.GSR).."] pontos.")
			end			

-- fim do evento
	if getPlayerStorageValue(deathList[1], eventconfig.GSR) >= eventconfigs.narrow or getPlayerStorageValue(deathList[1], eventconfig.GSG) >= eventconfigs.narrow then
			--criar as rocks para evitar players de entrarem no evento instantaneamente e confundirem o GM
			doCreateItem(1285,1,config.pos_rock_green)
			doCreateItem(1285,1,config.pos_TP_green)
			doCreateItem(1285,1,config.pos_rock_red)
			doCreateItem(1285,1,config.pos_TP_red)

			if getPlayerStorageValue(deathList[1], storageIdRed) == 1 then
				doBroadcastMessage("{RED TEAM} é o vencedor do evento ! Total: ["..eventconfigs.narrow.."] Kills !", 25)
			end

			
			if getPlayerStorageValue(deathList[1], storageIdGreen) == 1 then
				doBroadcastMessage("{GREEN TEAM} é o vencedor do evento ! Total: ["..eventconfigs.narrow.."] Kills !", 25)
			end
				for _, cid in ipairs(getPlayersOnline()) do
					if getPlayerStorageValue(deathList[1], storageIdRed) == 1 or getPlayerStorageValue(deathList[1], storageIdGreen) == 1 then
						if getPlayerStorageValue(cid, storageIdRed) == 1 or getPlayerStorageValue(cid, storageIdGreen) == 1 then
							doTeleportThing(cid, getTownTemplePosition(config.townid))
								if getPlayerStorageValue(cid, eventconfig.GSG) ~= 0 or getPlayerStorageValue(deathList[1], eventconfig.GSG) ~= 0 then
									setPlayerStorageValue(cid, eventconfig.GSG, 0)
									setPlayerStorageValue(deathList[1], eventconfig.GSG, 0)
								end
								if getPlayerStorageValue(cid, eventconfig.GSR) ~= 0 or getPlayerStorageValue(deathList[1], eventconfig.GSR) ~= 0 then
									setPlayerStorageValue(cid, eventconfig.GSR, 0)
									setPlayerStorageValue(deathList[1], eventconfig.GSR, 0)
								end
						end
					end
				end
	end
end

return true
end

 

Creaturescripts/scripts/eventkill.lua:

function onKill(cid, target)
dofile('data/lib/EventPoints.lua')

local green = 10001
local red = 10002
-- local GSR = 10400
-- local GSG = 10600

if isPlayer(cid) then
	if getPlayerStorageValue(cid, red) == 1 then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu time recebeu ponto ! Voce possui: ["..getPlayerStorageValue(cid, eventconfig.GSR).."] kills.")		
	end
	
	if getPlayerStorageValue(cid, green) == 1 then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu time recebeu ponto ! Voce possui: ["..getPlayerStorageValue(cid, eventconfig.GSG).."] kills.")
	end
end

return true
end

prontinho !

Baiak 24h -> www.baiakinfinity.ml

Link para o post
Compartilhar em outros sites
<event type="PrepareDeath" name="EventDeath" event="script" value="nome do seu script.lua"/>

 

no login.lua adc

 

registerCreatureEvent(cid, "EventDeath")

 

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

Já fiz isso tb... como eu disse, está funcionando, mas apenas contando as kills de forma individual, não para o time todo. Tem como vc adaptar este script que eu fiz para contar, além do jeito que já está (contando as kills individualmente) contar pro time?

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

Baiak 24h -> www.baiakinfinity.ml

Link para o post
Compartilhar em outros sites

sim mas eu revi o meu cṕdigo e não encontrei erro... como inicia o seu evento? as storages para os jogadores são adicionadas?

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

As storages dos times, os jogadores conseguem ao entrar num teleport (10001 e 10002).

As storages das kills eu não cheguei a iniciar, elas iniciam quando o player mata algum inimigo. (no caso as storages que estão no libs - 10400 e 10600)

Cada membro do time carrega a storage correspondente ao seu time, seja ela pro time vermelho (10002) e pro time verde (10001).

O evento eu sempre inicio de forma manual, mas se quiser fazer surgir um teleport através de um comando para dividir os times, seria interessante kkk.

Vlw !

Baiak 24h -> www.baiakinfinity.ml

Link para o post
Compartilhar em outros sites

Se o evento for só de matar durante X tempo e for coisa simples eu posso criar um do 0 totalmente automatico que faz o balance dos players depois que eles entrarem em uma wait room.

 

ai tendo restrições de level, multi IP, etc...

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

Sim, poderia ser, aí surge um TP no templo com avisos, dizendo que o evento vai começar.

O tp vai levar os caras pra uma determinada sala, onde depois eles serão divididos automaticamente em 2 times e vão fazendo a WAR até que o limite de kills seja atingido por um dos times, que seria o vencedor !

seria legal...

vc é demais <3

Baiak 24h -> www.baiakinfinity.ml

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.


  • Conteúdo Similar

    • Por Xagah
      Olá, bom dia a todos.
       
      Como tenho visto muitíssimos pedidos neste sentido, lhes apresento o LMS - Last Man Standing com BroadCast




       
    • Por Leohige
      Evento Loteria 
       
       
      Esse evento loteria é diferente dos demais que existem hoje nos servidores, é baseado em cima de um evento que ocorre no CraftLandia (um servidor de Minecraft).
      Quando o evento for iniciado o jogador poderá pagar um valor (configurável) para tentar acertar o número premiado (que vai de 1 até o número configurado). O evento tem um tempo de duração (configurável) e o primeiro jogador a acertar qual é o número premiado levará um premio em dinheiro (configurável) e o evento será encerrado.
       
      Demonstrações:
       
       
       
       
      Comandos:
       
       
      Configuração:
       
       
      Caso queira implementar este evento em seu servidor, crie os arquivos abaixo.
       
      data/lib/lottery/event.lua (as configurações ficam neste arquivo)
       
       
      data/globalevents/scripts/lottery.lua
       
       
      data/globalevents/globalevents.xml
       
      você pode por com um intervalo de tempo
       
       
      ou horário fixo
       
       
      data/talkactions/scripts/lottery.lua
       
       
      data/talkactions/talkactions.xml
       
       
      Tradução para PT-BR!
       
      Caso deseje traduzir o evento, substitua o Lottery.messages inteiro em data/lib/lottery/event.lua por este
       
       
      Qualquer problema, sugestão, bug ou dúvida utilize este tópico!!!
    • Por Killua
      Últimas atualizações:
       
      16/12/2013:
       
       


       
       
      Introdução:
       
       
      Este é o meu já conhecido evento Blood Castle Automático que estava em outro fórum que acabou. Estou trazendo ele aqui para que ele não "morra".
       
       
       
       
      Informações:  
       
      #Dica: Acho que fica legal o premio do evento ser um item que da double exp por um tempo.
       
       
      Atualização [12/04/2014]
       
       
      Resolvi refazer o código, para facilitar a instalação e melhorar o funcionamento do evento.
       
       
      O que mudou?
       
       
       
       
       
      Instalando o evento:
       
      Lib:
       


       
       
      Movements: 
       


       
       
       
      Creaturescripts: 
       


       
      Monsters: 
       

          O evento pode acontecer de duas maneiras: automática ou manualmente. Vou por as duas possibilidades:     Automática:   

       
       
      Manual:
       


       
       
      Como Configurar:
       
       
      * Se você for colocar, dentro do evento, um teleporte para as pessoas que não quiserem mais participar, coloque o Action ID 9371 nele.
       
       
      * Lembre-se de por NO-LOGOUT tool e NO-PVP tool em toda área do evento!!
       
       
      Todas as demais explicações estão na lib, mas vou demonstrar como configurar os mais "confusos".
       
       
      No modo automático, você configura de quanto em quanto o tempo o evento vai acontecer. Nessa tag:
      <globalevent name="Blood Castle" interval="3600" event="script" value="BloodGlobalEvent.lua"/> Aqui está 3600 segundos, ou seja, 1 hora.
      * Se seu servidor for em milisegundos, multiplique o número por 1000, assim: 3600 segundos * 1000 = 3600000 milisegundos = 1 hora.
       
      No modo manual, para iniciar o evento, basta usar a talkaction /blood-start com seu god.
       
       
      Em posGuarda, vc deve colocar a posicao do Guarda do Portao, como mostrado abaixo:  
        As posPedras são onde ficam as pedras que tampam a passagem enquanto o evento não esta aberto, conforme na imagem abaixo:  
        Em estátua, vc deve colocar a posição em que o arcanjo vai ser criado, conforme na imagem abaixo:  

        Nas posParedes, vc deve por a posição das paredes que bloqueiam a entrada do castelo e que são removidas quando o guarda morre, conforme abaixo:  
        Em fromPos e toPos, você vai por o canto superior esquerdo e o canto inferior direito do mapa do seu evento, respectivamente. Dessa maneira:  
        As outras configurações eu acredito que já estejam bem explicadas.     Espero que gostem dessa nova versão. Recomendo a todos que já usam o evento, reinstalar com essa nova versão.   Qualquer dúvida ou bug, postem que irei responder.
    • Por King Laker
      Olá, passei um tempo procurando este script até que um amigo do TK disponibilizou (credito no fim do post)
      Edit1: O evento funciona assim, o evento começa as 14:00:00 para inscrições realizando as inscrições você é levado para sala de espera (coloque no-logout e protection) onde você tera de esperar 5 minutos passado os 5 minutos todos na sala de espera serão teleportados para uma arena que você pode fazer facilmente e configurar conforme explicado na script --> apenas lembre de colocar o no-logout e pvp tool na arena.
      (As 13:59:00 vai aparecer um broadcast dizendo que o Npc PvP irá aparecer em 1 minutos que você terá então 5 minutos para se inscrever com o custo de 10k (configurável na script do actions) a área onde o npc nasce é configurável, o npc sumirá após 6 minutos (1 minuto depois do inicio da matança)-) 
      O ultimo vivo na arena terá de clicar na alavanca e será teleportado para o templo (coordenadas configuráveis) ganhando o devido premio do evento (configuravel na script do actions).
      Vamos lá:

      data/lib adicione um arquivo .lua e renomeie para Torneio.lua e coloque dentro
       
      vai em Globalevents adicione Torneio.lua e dentro dele coloque
       
      (se sua versão é em millisegundos então mude para)
       
      Adicione a tag em globalevents.xml
       
      se seu servidor for em millisegundos:
       
      vai em Actions adicione Torneio.lua e dentro:
      Atenção: Voce faz uma area do Torneio no Map editor e Coloca PVP-Zone e no-logout no Mapa editor e coloca uma Alavanca com a uniqueid "18279" e actionid "18279" antes verifique se não tem a action e unique id no seu servidor com o mesmo numero (18279) [ a alavanca serve para quando o ultimo player vivo no evento volte para o templo e receba os premios]
       
      Em Actions.xml adcione a tag 
       
      Agora o NPC TORNEIO em  data/NPC adicione um xml, renomeie para o nome torneio.xml (pode mudar mais tarde, se não souber oque esta fazendo não mexa)
       
      em NPC/SCRIPTS/torneio.lua
       
      LEIA:
       
      ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       
      aqui um script que achei no TK que você pode usar no seu evento, ele faz o npc aparecer 1 minuto depois do horario marcado na posição que você quiser, com um broadcast dizendo que ele esta chegando. (é bom para dizer que o evento esta começando)
      vá em globalevents.xml e adicione a tag
      Dica: Coloque 1 minuto antes do inicio do evento (configuravel no lib/torneio.lua) no meu caso seria as 12:00:00 hrs (meio dia)
       
      se o seu servidor não for millisegundos use
       
      va em globalevents/scripts e crie um arquivo .lua com o nome de npcpvp
       
      se o seu servidor não for em millisegundos use assim:
       

      Creditos:
      @J.L por disponibilizar os script do Evento PvP.
      @Stigal por disponibilizar o script do Npc que aparece sozinho na hr marcada.
      @King Laker por editar e mesclar os scripts.
    • Por Absolute
      Olá TKzianos de plantão rs!
      Trago hoje um evento criado pelo mestre Collor e modificado por mim! É o evento RAIN ITEMS! O Nome já diz tudo, nada melhor para os players do que chover items não é? rs.
       

       

       
       
       
      Como funciona?
      Em dias marcados irá ocorrer uma chuva de determinados items (configuráveis). 
      Os Items irão cair em X posições que você irá configurar no sistema.
      Os players terão de ser ágeis para coletar o item em sua backpack.
       
       
       
      Vamos ao que interessa!
       
      Em data/mods crie um arquivo com o nome de w-rainItems.xml e dentro coloque o seguinte conteúdo:
      <?xml version="1.0" encoding="UTF-8"?> <mod name="Rain Item" version="1.0.0" author="Collor/Abs" contact="lu.lukinha" enabled="yes"> <config name="config_rain_item"> <![CDATA[ configRainItem = { days = { ['Monday'] = {'11:00:20', '19:00:20'}, ['Tuesday'] = {'11:00:20', '19:00:20'}, ['Wednesday'] = {'11:00:20', '19:00:20'}, ['Thursday'] = {'11:00:20', '19:00:20'}, ['Friday'] = {'11:00:10', '19:00:20'}, ['Saturday'] = {'11:00:00', '19:00:20'}, ['Sunday'] = {'11:00:20', '19:00:30'} }, items = { 2644, -- king 9778, -- yalaha mask 8865, -- dark lords cape 8890, -- robe of the underworld 3983, -- bast skirt 9933, -- firewalker boots 7735, -- star wand 2640, -- softy 9693, -- addon 8306, -- remover 2506, -- dragon scale helmet 8888, -- master archers armor 9777, -- yalahari leg piece 8850, -- chain bolter 6433, -- necromancer shield 8903, -- spellbook of lost souls 2496, -- horned helmet 9776, -- yalahari armor 2469, -- dragon scale legs 6391, -- nightmare shield 8925, -- solar 7422, -- jade hammer 2390, -- mls 7722, -- stamina 8300, -- upgrade 8266, -- koshei 2346 -- 100pkt }, positions = { {x=997, y=981, z=7}, {x=998, y=981, z=7}, {x=999, y=981, z=7}, {x=1000, y=981, z=7}, {x=1001, y=981, z=7}, {x=1002, y=981, z=7}, {x=997, y=982, z=7}, {x=998, y=982, z=7}, {x=999, y=982, z=7}, {x=1000, y=982, z=7}, {x=1001, y=982, z=7}, {x=1002, y=982, z=7}, {x=997, y=983, z=7}, {x=998, y=983, z=7}, {x=999, y=983, z=7}, {x=1000, y=983, z=7}, {x=1001, y=983, z=7}, {x=997, y=984, z=7}, {x=999, y=984, z=7}, {x=1000, y=984, z=7}, {x=1001, y=984, z=7}, {x=1002, y=984, z=7}, {x=994, y=985, z=7}, {x=995, y=985, z=7}, {x=996, y=985, z=7}, {x=997, y=985, z=7}, {x=998, y=985, z=7}, {x=999, y=985, z=7}, {x=1000, y=985, z=7}, {x=1001, y=985, z=7}, {x=1002, y=985, z=7}, {x=1003, y=985, z=7}, {x=1004, y=985, z=7}, {x=1005, y=985, z=7}, {x=1006, y=985, z=7}, {x=994, y=986, z=7}, {x=995, y=986, z=7}, {x=996, y=986, z=7}, {x=997, y=986, z=7}, {x=998, y=986, z=7}, {x=999, y=986, z=7}, {x=1000, y=986, z=7}, {x=1001, y=986, z=7}, {x=1002, y=986, z=7}, {x=1003, y=986, z=7}, {x=1004, y=986, z=7}, {x=1005, y=986, z=7}, {x=1006, y=986, z=7}, {x=996, y=987, z=7}, {x=996, y=988, z=7}, {x=996, y=989, z=7}, {x=996, y=990, z=7}, {x=996, y=991, z=7}, {x=996, y=992, z=7}, {x=996, y=993, z=7}, {x=1003, y=987, z=7}, {x=1003, y=988, z=7}, {x=1003, y=989, z=7}, {x=1003, y=990, z=7}, {x=1003, y=991, z=7}, {x=1003, y=992, z=7}, {x=1003, y=993, z=7}, {x=996, y=994, z=7}, {x=997, y=994, z=7}, {x=998, y=994, z=7}, {x=1001, y=994, z=7}, {x=1002, y=994, z=7}, {x=1003, y=994, z=7}, {x=996, y=995, z=7}, {x=997, y=995, z=7}, {x=998, y=995, z=7}, {x=999, y=995, z=7}, {x=1000, y=995, z=7}, {x=1001, y=995, z=7}, {x=1002, y=995, z=7}, {x=1003, y=995, z=7}, {x=996, y=996, z=7}, {x=997, y=996, z=7}, {x=998, y=996, z=7}, {x=1001, y=996, z=7}, {x=1002, y=996, z=7}, {x=1003, y=996, z=7}, {x=996, y=997, z=7}, {x=997, y=997, z=7}, {x=998, y=997, z=7}, {x=999, y=997, z=7}, {x=1000, y=997, z=7}, {x=1001, y=997, z=7}, {x=1002, y=997, z=7}, {x=1003, y=997, z=7}, {x=996, y=998, z=7}, {x=997, y=998, z=7}, {x=998, y=998, z=7}, {x=999, y=998, z=7}, {x=1001, y=998, z=7}, {x=1002, y=998, z=7}, {x=1003, y=998, z=7}, {x=996, y=999, z=7}, {x=998, y=999, z=7}, {x=999, y=999, z=7}, {x=1001, y=999, z=7}, {x=1002, y=999, z=7}, {x=1003, y=999, z=7}, {x=996, y=1000, z=7}, {x=997, y=1000, z=7}, {x=998, y=1000, z=7}, {x=999, y=1000, z=7}, {x=1001, y=1000, z=7}, {x=1002, y=1000, z=7}, {x=1003, y=1000, z=7}, {x=996, y=1001, z=7}, {x=997, y=1001, z=7}, {x=998, y=1001, z=7}, {x=999, y=1001, z=7}, {x=1000, y=1001, z=7}, {x=1001, y=1001, z=7}, {x=1002, y=1001, z=7}, {x=1003, y=1001, z=7}, {x=996, y=1002, z=7}, {x=997, y=1002, z=7}, {x=998, y=1002, z=7}, {x=999, y=1002, z=7}, {x=1000, y=1002, z=7}, {x=1001, y=1002, z=7}, {x=1002, y=1002, z=7}, {x=1003, y=1002, z=7}, {x=998, y=1003, z=7}, {x=999, y=1003, z=7}, {x=1000, y=1003, z=7}, {x=1001, y=1003, z=7}, {x=1002, y=1003, z=7}, {x=1003, y=1003, z=7}, {x=990, y=998, z=7}, {x=991, y=998, z=7}, {x=991, y=999, z=7}, {x=992, y=999, z=7}, {x=991, y=1000, z=7}, {x=992, y=1000, z=7}, {x=993, y=1000, z=7}, {x=994, y=1000, z=7}, {x=995, y=1000, z=7}, {x=982, y=1001, z=7}, {x=983, y=1001, z=7}, {x=984, y=1001, z=7}, {x=985, y=1001, z=7}, {x=986, y=1001, z=7}, {x=987, y=1001, z=7}, {x=988, y=1001, z=7}, {x=989, y=1001, z=7}, {x=990, y=1001, z=7}, {x=991, y=1001, z=7}, {x=992, y=1001, z=7}, {x=993, y=1001, z=7}, {x=994, y=1001, z=7}, {x=995, y=1001, z=7}, {x=983, y=1002, z=7}, {x=984, y=1002, z=7}, {x=988, y=1002, z=7}, {x=989, y=1002, z=7}, {x=990, y=1002, z=7}, {x=991, y=1002, z=7}, {x=992, y=1002, z=7}, {x=993, y=1002, z=7}, {x=994, y=1002, z=7}, {x=995, y=1002, z=7}, {x=984, y=1003, z=7}, {x=985, y=1003, z=7}, {x=986, y=1003, z=7}, {x=987, y=1003, z=7}, {x=988, y=1003, z=7}, {x=989, y=1003, z=7}, {x=990, y=1003, z=7}, {x=991, y=1003, z=7}, {x=992, y=1003, z=7}, {x=993, y=1003, z=7}, {x=984, y=1004, z=7}, {x=985, y=1004, z=7}, {x=986, y=1004, z=7}, {x=987, y=1004, z=7}, {x=988, y=1004, z=7}, {x=984, y=1005, z=7}, {x=985, y=1005, z=7}, {x=986, y=1005, z=7}, {x=987, y=1005, z=7}, {x=988, y=1005, z=7}, {x=983, y=1006, z=7}, {x=984, y=1006, z=7}, {x=985, y=1006, z=7}, {x=986, y=1006, z=7}, {x=987, y=1006, z=7}, {x=988, y=1006, z=7}, {x=980, y=1007, z=7}, {x=981, y=1007, z=7}, {x=982, y=1007, z=7}, {x=983, y=1007, z=7}, {x=984, y=1007, z=7}, {x=985, y=1007, z=7}, {x=986, y=1007, z=7}, {x=987, y=1007, z=7}, {x=988, y=1007, z=7}, {x=980, y=1008, z=7}, {x=981, y=1008, z=7}, {x=982, y=1008, z=7}, {x=983, y=1008, z=7}, {x=980, y=1009, z=7}, {x=981, y=1009, z=7}, {x=982, y=1009, z=7}, {x=983, y=1009, z=7}, {x=1004, y=998, z=7}, {x=1005, y=998, z=7}, {x=1006, y=998, z=7}, {x=1006, y=999, z=7}, {x=1002, y=993, z=7}, {x=1002, y=987, z=7}, {x=1002, y=988, z=7}, {x=996, y=984, z=7} }, delayTime = 1, -- pomiedzy broadcastem a zrzuceniem itemu amountOfPos = 20, storage = 51836 -- set free storage } ]]> </config> <lib name="lib_rain_item"> <![CDATA[ domodlib("config_rain_item") function throwItem() local i, itemPos = 1, {} repeat local pos = configRainItem.positions[math.random(#configRainItem.positions)] if isInArray(itemPos, pos) then pos = configRainItem.positions[math.random(#configRainItem.positions)] else itemPos[i] = pos i = i + 1 end until i == configRainItem.amountOfPos for _, pos in pairs(itemPos) do doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE) for __, effect in pairs({34, 55, 56}) do doSendMagicEffect(pos, effect) end addEvent(doCreateItem, 100, configRainItem.items[math.random(#configRainItem.items)], 1, pos) doSetStorage(configRainItem.storage, -1) end end ]]> </lib> <globalevent name="Rain_Item_Days" interval="1000" event="script"> <![CDATA[ domodlib("lib_rain_item") local daysOpen = {} for k, v in pairs(configRainItem.days) do table.insert(daysOpen, k) end function onThink(interval) if isInArray(daysOpen, os.date('%A')) then if isInArray(configRainItem.days[os.date('%A')], os.date('%X', os.time())) then if getStorage(configRainItem.storage) ~= 1 then doBroadcastMessage('Rain Items will start in '..configRainItem.delayTime..' min. Go to temple or depot!') doSetStorage(configRainItem.storage, 1) addEvent(throwItem, configRainItem.delayTime * 60 * 1000) end end end return true end ]]> </globalevent> <talkaction words="!startrain" access="5" event="script"> <![CDATA[ domodlib("lib_rain_item") function onSay(cid, words, param) if getStorage(configRainItem.storage) > 0 then return doPlayerSendCancel(cid, 'Rain Item is already running.') end doBroadcastMessage('Rain Items will start in ' .. configRainItem.delayTime .. ' min. Go to temple or depot!') doSetStorage(configRainItem.storage, 1) addEvent(throwItem, configRainItem.delayTime * 60 * 1000) return true end ]]> </talkaction> <globalevent name="Rain_Item_Start" type="startup" event="script"> <![CDATA[ domodlib("lib_rain_item") function onStartup() doSetStorage(configRainItem.storage, -1) return true end ]]> </globalevent> </mod> Configurando:
      1-
      days = {
                          ['Monday'] = {'11:00:20', '19:00:20'}, = Aqui são os dias e horário que ocorrerão o evento, no caso do exemplo está Segunda Feira ás 11 horas e as 19 horas.
      Você deverá alterar o dia e a hora conforme desejar, o dia em inglês claro. Não sabe inglês faz cursinho na openenglish sqn.
       
      2-
      items = {
                          2644, -- king = 2644 é o ID do item que irá chover. O -- king não é anda apenas um exemplo pode deixar com o nome, o que vale é o ID!
       
      3-
      positions = {
                          {x=997, y=981, z=7}, = Mais do que claro, é as posições do mapa onde irá cair os items!
       
       

       
       
       
       
      Nota: Caso queira iniciar o evento manualmente fora de hora execute o comando !startrain com seu ADM.
       
       

       
       
       
       
      É isso aí galera, caso haja algum dúvida perguntem aqui no tópico!
       
       
       
      Não gostou? Não critica, só olha e tenta fazer melhor
       
       
       
      Absolute.
       
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo