Ir para conteúdo
  • Cadastre-se

(Resolvido)Evento PvP


Ir para solução Resolvido por J.L,

Posts Recomendados

Olá, estou tentando criar um evento PvP mas não esta funcionando então decidi recorrer ao TK, preciso que o script abaixo funcione.. Nele eu precisaria que fosse automatico todos os dias as 14:00 aparece um um TP e um broadcast dizendo "Jogador X entrou no evento PvP" este tp leva a uma sala de espera que quando acabar o tempo de espera (obvio) ele te manda até a arena para que o ultimo sobrevivente ganhe 1500 itens do id 2160, e 300 do id 824 logo após ser enviado ao templo.

Aqui esta a script que eu estava usando, mas não esta automatizado e também não esta funcionando corretamente.

 

Spoiler

function onSay(cid, words, param)

if getGlobalStorageValue(24658) >= 0 then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Evento Já esta Online.")
end

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Evento Acabou de Ser Ativado.") 
local tempo_espera = 60 * 1000 -- ALTERAR tempo de espera na sala, 1 minuto

doBroadcastMessage("Evento PVP foi Ativado.",22) -- ALTERAR frase que aparece para todos quando usar o comando
setGlobalStorageValue(24658, 0) -- ALTERAR storage usado no sistema, deixar todos iguais
addEvent(
function ()


local pos_templo = {x = 1028, y = 915, z = 6} -- ALTERAR coordenada do templo do seu ot server
doBroadcastMessage("Evento Iniciado.",22) -- ALTERAR frase quando todos forem para a arena
setGlobalStorageValue(24658, 1) -- ALTERAR storage usado no sistema, deixar todos iguais
local players = getPlayersOnline()
local i = 1
local total_player = 0

while i <= #players do
local pos_player = getPlayerPosition(players)
local pos1_espera = {x = 1002, y = 800, z = 12} -- ALTERAR pos do canto superior esquerdo da sala de espera
local pos2_espera = {x = 1016, y = 809, z = 12} -- ALTERAR pos do canto inferior direito da sala de espera
if pos_player.x >= pos1_espera.x and pos_player.y >= pos1_espera.y and pos_player.x <= pos2_espera.x and pos_player.y <= pos2_espera.y then
total_player = total_player + 1
end

i = i + 1
end

i = 1
if total_player <= 1 then
doBroadcastMessage("Evento Cancelado, Players Insuficientes.",22) -- ALTERAR Frase de evento cancelado por falta de players 
setGlobalStorageValue(24658, -1) -- ALTERAR storage usado no sistema, deixar todos iguais

while i <= #players do
local pos_player = getPlayerPosition(players)
local pos1_espera = {x = 1002, y = 800, z = 12} -- ALTERAR pos do canto superior esquerdo da sala de espera
local pos2_espera = {x = 1016, y = 809, z = 12} -- ALTERAR pos do canto inferior direito da sala de espera
if pos_player.x >= pos1_espera.x and pos_player.y >= pos1_espera.y and pos_player.x <= pos2_espera.x and pos_player.y <= pos2_espera.y then
doTeleportThing(players, pos_templo)
end

i = i + 1
end

return TRUE
end 

while i <= #players do
local pos_player = getPlayerPosition(players)
local pos1_espera = {x = 1002, y = 800, z = 12} -- ALTERAR pos do canto superior esquerdo da sala de espera
local pos2_espera = {x = 1016, y = 809, z = 12} -- ALTERAR pos do canto inferior direito da sala de espera
local pos_arena = {x = 1095, y = 963, z = 12} -- ALTERAR do inicio da arena
if pos_player.x >= pos1_espera.x and pos_player.y >= pos1_espera.y and pos_player.x <= pos2_espera.x and pos_player.y <= pos2_espera.y then
doTeleportThing(players, pos_arena)
doPlayerSendTextMessage(players, MESSAGE_STATUS_CONSOLE_BLUE, "Batalhe pela sua vida.") -- ALTERAR frase que vai aparecer para o player quando ele entrar na arena
end

i = i + 1
end

end
,tempo_espera)

return true
end

 

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

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

 

 

 

  • 532144234_Logo_NTO_BLOOD_Finish_HIM_By_Antonio_Luckas(3).png.fd58d1af125a7e82ccdd751637e9ca93.png
Link para o post
Compartilhar em outros sites
  • Solução

Terá que fazer algo parecido com o sitema de torneio usado em poketibia

 

muda isso aqui no config.lua:

Spoiler

worldType = "pvp-enforced"
protectionLevel = 1

 

data/lib adicione um arquivo .lua e renomeie para Torneio.lua e coloque dentro

Spoiler

torneio = {
awardTournament = 2160,---- Premio
awardAmount = 1500,---- quantia do Premio

playerTemple = {x = 1096, y = 1009, z = 7}, ---- posiçao do Templo
tournamentFight = {x = 909, y = 978, z = 7}, ----- Area (Mapa) do torneio
area = {fromx = 899, fromy = 968, fromz = 7, tox = 919, toy = 989, toz= 7},---- fromx = 899, fromy = 968, fromz = 7 : posiçao superior a esquerda do Mapa do torneio /// tox = 919, toy = 989, toz= 7 : Posiçao inferior direito do Mapa do Torneio
waitPlace = {x = 992, y = 998, z = 7}, ---- Sala de Espera (Coloque No-logout na area)
waitArea = {fromx = 987, fromy = 993, fromz = 7, tox = 997, toy = 1003, toz= 7}, ---- fromx = 899, fromy = 968, fromz = 7 : posiçao superior a esquerda do Mapa Sala de espera /// tox = 919, toy = 989, toz= 7 : Posiçao  do Mapa sala de espera (piso)

startHour = "14:00:00", ---- Hora que Inicia as Iscriçoes do Torneio
endHour = "14:05:00", ----- Hora que Começa a Batalha
price = 10000, ------ Custo para se inscrever no torneio

}

function getPlayersInArea(area)

local players = {}

for x = area.fromx,area.tox do
for y = area.fromy,area.toy do
for z = area.fromz,area.toz do

local m = getTopCreature({x=x, y=y, z=z}).uid

if m ~= 0 and isPlayer(m) then
table.insert(players, m)
end
end
end
end
return players
end


vai em Globaleevents adicione Torneio.lua e dentro dele coloque

Spoiler

function onTimer()

if #getPlayersInArea(torneio.area) > 1 then
doBroadcastMessage("[Torneio] O torneio desta vez não teve vencedor, tentar na próxima vez!") return true end 

for _, pid in ipairs(getPlayersInArea(torneio.waitArea)) do
doTeleportThing(pid, torneio.tournamentFight)

doPlayerSendTextMessage(pid, 21, "[Torneio] O torneio começou, e que vença o melhor ! HEHEHEHE.")        -- mensagem de inicio do evento
end
return true
end

 

Adicione a tag em globalevents.xml

Spoiler

<globalevent name="TournamentStart" time="14:05" event="script" value="Torneio.lua"/>

 

vai em Actions adicione Torneio.lua e dentro:

Atençao: Voce faz uma area do Torneio no Map editor e Coloca PVP-Zone no Mapa editor e coloca uma Alavanca com a uid "18279" 

Spoiler

function onUse(cid, item)
if #getPlayersInArea(torneio.area) > 1 then

doPlayerSendTextMessage(cid, 20 ,"Somente o Ultimo Sobrevivente poderar Usar essa Alavanca") return true end
doTeleportThing(cid, torneio.playerTemple)
doPlayerSendTextMessage(cid, 21, "[Torneio] Jovem Treinador Parabéns, você ganhou o torneio e ganhou ["..getItemNameById(torneio.awardTournament).."] .")

setPlayerStorageValue(cid,130131,getPlayerStorageValue(cid,130131)+1)
doPlayerSendTextMessage(cid,MESSAGE_EVENT_ORANGE,"[Torneio-Score] Voce Agora Tem ["..(getPlayerStorageValue(cid,130131) + 1).."] Torneio SCORES.")
doPlayerAddItem(cid, torneio.awardTournament, torneio.awardAmount)

doPlayerAddItem(cid, 824, 300)
return true
end
end

 

Em Actions.xml adcione a tag 

Spoiler

<action uniqueid="18279" event="script" value="Torneio.lua"/>

 

Agora o NPC TORNEIO. em  data/NPC adicione um xml, renomeie para o nome desejado e coloque

Spoiler

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Tournament" script="Torneio.lua" walkinterval="2000" floorchange="0">
<health now="150" max="150"/>
<look type="664" head="20" body="100" legs="50" feet="99" corpse="2212"/>]

<parameters>
<parameter key="message_greet" value="Ola |PLAYERNAME|. Voce Gostaria de Participar de Um torneio? Digite [torneio/enter] !."/>
</parameters>
</npc>

 

em NPC/SCRIPTS/seunpc.lua

Spoiler
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end

function creatureSayCallback(cid, type, msg)

if(not npcHandler:isFocused(cid)) then
return false
end

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

if msgcontains(msg, 'torneio') or msgcontains(msg, 'enter') then



selfSay('Você quer participar do torneio por ['..torneio.price..'] dollars? [Sim/Yes]', cid)
talkState[talkUser] = 2


elseif talkState[talkUser] == 2 then

if msgcontains(msg, 'yes') or msgcontains(msg, 'sim') then

if os.date("%X") < torneio.startHour or os.date("%X") > torneio.endHour then
selfSay('As inscrições para o torneio terminaram, volte Amanha AS 14:00 para nova inscriçao!.', cid)
return true
end

if doPlayerRemoveMoney(cid, torneio.price) then
doTeleportThing(cid, torneio.waitPlace)
setPlayerStorageValue(cid,130130,1)
doPlayerSendTextMessage(cid, 21, "Bem-vindo, esta é a sala de espera, você espera aqui enquanto o torneio não começa. hora de início: {"..torneio.endHour.."}.")
else

selfSay('Voce nao Tem Dinheiro ('..torneio.price..').', cid)
end
else
selfSay('Voce nao quer participar do Torneio? Vem no Proximo Dia / Todos os Dias as [11:35]!', cid)
talkState[talkUser] = 0
end
end
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 

 

Já configurei para o horário e os premios que voce quer!

Areas em AZUL é onde voce PODE MUDAR

Areas em VERMELHO é onde voce DEVE MUDAR

 

 

  •               6oI4lwi.gif
  • FusionPoké Estará aberto este mês para testes !
  • Curta A Page e Fique Por Dentro Das Novidades Do Servidor!   Like Aqui!
  •                         qNmeLvu.png
Link para o post
Compartilhar em outros sites
Spoiler

area = {fromx = 899, fromy = 968, fromz = 7, tox = 919, toy = 989, toz= 7},---- fromx = 899, fromy = 968, fromz = 7 : posiçao superior a esquerda do Mapa do torneio /// tox = 919, toy = 989, toz= 7 : Posiçao inferior direito do Mapa do Torneio
waitPlace = {x = 992, y = 998, z = 7}, ---- Sala de Espera (Coloque No-logout na area)
waitArea = {fromx = 987, fromy = 993, fromz = 7, tox = 997, toy = 1003, toz= 7}, ---- fromx = 899, fromy = 968, fromz = 7 : posiçao superior a esquerda do Mapa Sala de espera /// tox = 919, toy = 989, toz= 7 : Posiçao  do Mapa sala de espera (piso)

como configuro a area? esse tox = 919, toy = 989, toz = 7.. me deixaram confuso

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

 

 

 

  • 532144234_Logo_NTO_BLOOD_Finish_HIM_By_Antonio_Luckas(3).png.fd58d1af125a7e82ccdd751637e9ca93.png
Link para o post
Compartilhar em outros sites

Voce tem que ajustar as coordenadas para que formem um QUADRADO em volta da arena e sala de espera.

fromx = Canto superior                              fromx = Da posição X (eixo x no mapa)

tomx = Canto inferior                                  tomx = Até A posição X (eixo no mapa)

o mesmo fuciona para os demais, o Z são os andares da arena

 

 

em 

waitPlace = {x = 992, y = 998, z = 7}, ---- Sala de Espera (Coloque No-logout na area)

é o para a posição na sala de espera que o player sera teleportado

  •               6oI4lwi.gif
  • FusionPoké Estará aberto este mês para testes !
  • Curta A Page e Fique Por Dentro Das Novidades Do Servidor!   Like Aqui!
  •                         qNmeLvu.png
Link para o post
Compartilhar em outros sites

@J.L saquei.. obrigado ja vou testar

3 horas atrás, J.L disse:

vai em Actions adicione Torneio.lua e dentro:

Atençao: Voce faz uma area do Torneio no Map editor e Coloca PVP-Zone no Mapa editor e coloca uma Alavanca com a uid "18279" 

Spoiler

[14:35:07.909] [Error - LuaInterface::loadFile] data/actions/scripts/Torneio.lua:16: '<eof>' expected near 'end'
[14:35:07.910] [Warning - Event::loadScript] Cannot load script (data/actions/scripts/Torneio.lua)
[14:35:07.910] data/actions/scripts/Torneio.lua:16: '<eof>' expected near 'end'


deu esse erro na action

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

 

 

 

  • 532144234_Logo_NTO_BLOOD_Finish_HIM_By_Antonio_Luckas(3).png.fd58d1af125a7e82ccdd751637e9ca93.png
Link para o post
Compartilhar em outros sites

tente assim

Spoiler

function onUse(cid, item)

if #getPlayersInArea(torneio.area) > 1 then
doPlayerSendTextMessage(cid, 20 ,"Somente o Ultimo Sobrevivente poderar Usar essa Alavanca") return true end

doTeleportThing(cid, torneio.playerTemple)
setPlayerStorageValue(cid,130131,getPlayerStorageValue(cid,130131)+1)
doPlayerSendTextMessage(cid, 21, "[Torneio] Jovem Treinador Parabéns, você ganhou o torneio e ganhou "..getItemNameById(torneio.awardTournament)..".")
doPlayerAddItem(cid, torneio.awardTournament, torneio.awardAmount)
doPlayerAddItem(cid, 82??4, 300)
return true
end

 

  •               6oI4lwi.gif
  • FusionPoké Estará aberto este mês para testes !
  • Curta A Page e Fique Por Dentro Das Novidades Do Servidor!   Like Aqui!
  •                         qNmeLvu.png
Link para o post
Compartilhar em outros sites
1 hora atrás, J.L disse:

tente assim

  Ocultar conteúdo

function onUse(cid, item)

if #getPlayersInArea(torneio.area) > 1 then
doPlayerSendTextMessage(cid, 20 ,"Somente o Ultimo Sobrevivente poderar Usar essa Alavanca") return true end

doTeleportThing(cid, torneio.playerTemple)
setPlayerStorageValue(cid,130131,getPlayerStorageValue(cid,130131)+1)
doPlayerSendTextMessage(cid, 21, "[Torneio] Jovem Treinador Parabéns, você ganhou o torneio e ganhou "..getItemNameById(torneio.awardTournament)..".")
doPlayerAddItem(cid, torneio.awardTournament, torneio.awardAmount)
doPlayerAddItem(cid, 82??4, 300)
return true
end

 

como faço pros 1500 itens do id 2160 e os 300 itens do id 824 vir dentro da mesma bag?

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

 

 

 

  • 532144234_Logo_NTO_BLOOD_Finish_HIM_By_Antonio_Luckas(3).png.fd58d1af125a7e82ccdd751637e9ca93.png
Link para o post
Compartilhar em outros sites
1 hora atrás, King Laker disse:

como faço pros 1500 itens do id 2160 e os 300 itens do id 824 vir dentro da mesma bag?

 

 

Spoiler

function onUse(cid, item)

if #getPlayersInArea(torneio.area) > 1 then
doPlayerSendTextMessage(cid, 20 ,"Somente o Ultimo Sobrevivente poderar Usar essa Alavanca") return true end

doTeleportThing(cid, torneio.playerTemple)
setPlayerStorageValue(cid,130131,getPlayerStorageValue(cid,130131)+1)
doPlayerSendTextMessage(cid, 21, "[Torneio] Jovem Treinador Parabéns, você ganhou o torneio e ganhou "..getItemNameById(torneio.awardTournament)..".")
doPlayerAddItem(cid, 2160 , 1500)
doPlayerAddItem(cid, 824, 300)
return true
end

 

Funcionou tudo certinho ?

  •               6oI4lwi.gif
  • FusionPoké Estará aberto este mês para testes !
  • Curta A Page e Fique Por Dentro Das Novidades Do Servidor!   Like Aqui!
  •                         qNmeLvu.png
Link para o post
Compartilhar em outros sites

@J.L até agora sim mano, funcionou tudo certo só oque preciso é que os itens saiam dentro de uma bp especifica
EDIT1: editei a action aqui para receber a bp, obrigado

Action (inutilizei o premio que da no torneio.lua da Lib então edite no action torneio.lua)
 

Spoiler

function onUse(cid, item)

if #getPlayersInArea(torneio.area) > 1 then
doPlayerSendTextMessage(cid, 20 ,"Somente o ultimo sobrevivente podera usar essa alavanca") return true end

doTeleportThing(cid, torneio.playerTemple)
setPlayerStorageValue(cid,130131,getPlayerStorageValue(cid,130131)+1)
doPlayerSendTextMessage(cid, 21, "[Evento PvP] Jovem Shinobi Parabéns, voce ganhou o evento PvP e recebeu o devido premio.")
local bag = doPlayerAddItem(cid, 1999, 1)
doAddContainerItem(bag, 2160, 1500)
doAddContainerItem(bag, 824, 300)
return true
end

 

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

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

 

 

 

  • 532144234_Logo_NTO_BLOOD_Finish_HIM_By_Antonio_Luckas(3).png.fd58d1af125a7e82ccdd751637e9ca93.png
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