Ir para conteúdo

Tournament PVP V2.0


Roksas

Posts Recomendados

Sistema de Torneio V2.0

 

divisor.png

Saudações galera, tudo de bão e do mió? :)

Recebi alguns pedidos e vim trazer hoje para vocês o V2.0 do meu sistema de Torneio.

 

Changelog:

 

V2.0: Arrumado alguns BUGS.
V2.0: Agora temos sala de espera.
V2.0: Funciona também em Naruto, Pokemon & seus derivados!

 

Instalação:

 

divisor.png

Siga para data/lib, nessa mesma pasta crie um arquivo chamado tournament.lua e adicione dentro:

 

 

torneio = {
awardTournament = 2148,
awardAmount = 2,
playerTemple = {x = 1008, y = 1018, z = 7},
tournamentFight = {x = 1017, y = 1026, z = 7},
area = {fromx = 1008, fromy = 1018, fromz = 7, tox = 1024, toy = 1033, toz= 7},
waitPlace = {x = 1017, y = 1044, z = 7},  
waitArea = {fromx = 1010, fromy = 1040, fromz = 7, tox = 1024, toy = 1050, toz= 7},
startHour = "17:40:00",
endHour = "17:50:00",
price = 10000,
revivePoke = 2494,
}

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

 

 

Em data/npc/ crie um arquivo chamado Tournament.xml e adicione dentro:

 

 

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Tournament" script="tournament.lua" walkinterval="2000" floorchange="0">
<health now="150" max="150"/>
<look type="128" head="20" body="100" legs="50" feet="99" corpse="2212"/>]
<parameters>
<parameter key="message_greet" value="Hello |PLAYERNAME|. If you want to participate in the tournament say: {torneio} or {enter}."/>
</parameters>
</npc>

 

 

Entre na pasta scripts dentro de data/npc/ e crie um arquivo chamado tournament.lua e adicione dentro:

 

 

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

if getPlayerItemCount(cid, torneio.revivePoke) >= 1 then
selfSay('You can not enter the tournament with {revives}, please throw them out.', cid)
return true
end

selfSay('You want to participate in the tournament by '..torneio.price..' gps / dollars?', 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('Registration for the tournament finished, come back later.', cid)
return true
end

if doPlayerRemoveMoney(cid, torneio.price) then
doTeleportThing(cid, torneio.waitPlace)
doPlayerSendTextMessage(cid, 21, "Welcome, this is the waiting room, you wait here while the tournament does not start. Start time: {"..torneio.endHour.."}.")
else

selfSay('You do not have enough money ('..torneio.price..').', cid)
end
else
selfSay('Sure you do not want to participate? Okay, see you next time!', cid)
talkState[talkUser] = 0
end
end
end

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

 

 

Agora vá para a pasta data/globalevents/scripts, dentro dela crie um arquivo chamado tournament.lua e adicione dentro:

 

 

function onTime ()

if #getPlayersInArea(torneio.area) > 1 then
doBroadcastMessage("The tournament this time had no winner, try next time!") return true end

for _, pid in ipairs(getPlayersInArea(torneio.waitArea)) do
doTeleportThing(pid, torneio.tournamentFight)
doPlayerSendTextMessage(pid, 21, "The tournament started, and the best will win warrior! Hahaha.")
end
return true
end

 

 

Em globalevents.xml adicione essa tag:

 

<globalevent name="TournamentStart" time="17:47" event="script" value="tournament.lua"/>

 

Em data/actions/scripts, crie um arquivo chamado tournament.lua e adicione dentro:

 

 

function onUse(cid, item)

if #getPlayersInArea(torneio.area) > 1 then
doPlayerSendTextMessage(cid, 20 ,"Finish with others first, young warrior!") return true end

doTeleportThing(cid, torneio.playerTemple)
doPlayerSendTextMessage(cid, 21, "Young warrior Congratulations, you won the tournament, and won one "..getItemNameById(torneio.awardTournament).." as a reward.")
doPlayerAddItem(cid, torneio.awardTournament, torneio.awardAmount)
return true
end

 

 

Abra com o bloco de notas o arquivo actions.xml e adicione a seguinte tag:

 

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

 

 

 

 

 

 

 

 

 

Configuração:

 

divisor.png

O arquivo que instalamos na pasta data/lib (tournament.lua), abra-o com o bloco de notas e vamos configurar esta parte:

 

torneio = {
awardTournament = 2148,
awardAmount = 2,
playerTemple = {x = 1008, y = 1018, z = 7},
tournamentFight = {x = 1017, y = 1026, z = 7},
area = {fromx = 1008, fromy = 1018, fromz = 7, tox = 1024, toy = 1033, toz= 7},
area2 = {x = 1008, y = 1018, z = 7}, {x = 1024, y = 1033, z = 7},
waitPlace = {x = 1017, y = 1044, z = 7},  
waitArea = {fromx = 1010, fromy = 1040, fromz = 7, tox = 1024, toy = 1050, toz= 7},
startHour = "17:40:00",
endHour = "17:50:00",
price = 10000,
revivePoke = 2494,
}

  • awardTournament colocamos o ItemID da recompensa do vencedor do torneio, awardAmount a quantidade.

  • playerTemple colocamos as coordenadas do templo de alguma cidade, é para lá que ele vai ser teleportado ao vencer. tournamentFight colocamos as coordenadas do CENTRO da Arena de Torneios.

  • Em area colocamos: (fromx, fromy e fromz) as coordenadas do canto superior esquerdo da Arena, (tox, toy e toz) colocamos as coordenadas do canto inferior direito da Arena.

  • Em waitPlace colocamos as coordenadas do CENTRO, da Sala de Espera para começar o Torneio! Já o waitArea é a mesma coisa do "area" só que nesse é os cantos superior esquerdo e inferior direito da Sala de Espera.

  • startHour colocamos a hora em que o NPC começa a vender entradas para o Torneio, é a hora do dia, com hora/minutos/e segundos, no formato "00:00:00", lá tem que ficar entre aspas! Já o endHour é a hora que ele para de vender as entradas e que começa o Torneio pra valer!

  • Galera, o revivePoke, se seu OTServer for de Tibia, não MEXAM! Agora, se for Pokétibia, você muda o valor do revivePoke para o Item ID dos revives, isso serve para o player não levar revives pro Torneio.

  • Em globalevents.xml na tag:

<globalevent name="TournamentStart" time="17:47" event="script" value="tournament.lua"/>
  • Aqui time="17:47" coloque o horário TERMINA as inscrições para o Torneio, é o mesmo do que endHour do lib. Mas aqui você só pode por em formato horas:minutos (00:00)

Prontinho, agora é só ir no RME Map Editor e colocar UNIQUE ID 18279 em uma alavanca ou item dentro da Arena, isso serve para o player que ganhar ir embora com seu prêmio :)

 

 

 

 

 

 

 

Finalizações:

 

divisor.png

 

Bom galera, é isso por hoje, espero que façam um bom e ótimo uso. Estou disposto a aceitar DICAS/SUGESTÕES/CRÍTICAS & BUGS! Muito obrigado pela atenção!

 

 

 

 

divisor.png

 

f0wvoi.jpg

 

 

Editado por Roksas
Link para o comentário
Compartilhar em outros sites

function onTime ()
   if #getPlayersInArea(torneio.area) > 1 then
   doBroadcastMessage("The tournament this time had no winner, try next time!") return true end
    for _, pid in ipairs(getPlayersInArea(torneio.waitArea)) do
	    doTeleportThing(pid, torneio.tournamentFight)
	    doPlayerSendTextMessage(pid, 21, "The tournament started, and the best will win warrior! Hahaha.")
    end
    return true
   end

Action.

function onUse(cid, item)

   if #getPlayersInArea(torneio.area) > 1 then
       doPlayerSendTextMessage(cid, 20 ,"Finish with others first, young warrior!")
       return true
   end
       doTeleportThing(cid, torneio.playerTemple)
       doPlayerSendTextMessage(cid, 21, "Young warrior Congratulations, you won the tournament, and won one "..getNameById(torneio.awardTournament).." as a reward.")
       doPlayerAddItem(cid, torneio.awardTournament, torneio.awardAmount)
       return true
   end

 

Acho meio que 'bobeira' adicionar variaveis globais na lib, mas isso ai, melhorou da v1.

Link para o comentário
Compartilhar em outros sites

Error...

 

 

 

[24/04/2013 00:10:41] [Error - LuaScriptInterface::loadFile] cannot open data/actions/scripts/default.lua: No such file or directory

[24/04/2013 00:10:41] [Warning - Event::loadScript] Cannot load script (data/actions/scripts/default.lua)

[24/04/2013 00:10:41] cannot open data/actions/scripts/default.lua: No such file or directory

[24/04/2013 00:10:41] [Warning - Actions::registerEvent] Duplicate registered item uid: 5015

[24/04/2013 00:10:45] [Warning - Event::loadScript] Event onTimer not found (data/globalevents/scripts/tournament.lua)

[24/04/2013 00:10:45] [Warning - Event::loadScript] Event onTimer not found (data/globalevents/scripts/tournament1.lua)

[24/04/2013 00:10:45] [Warning - Event::loadScript] Event onTimer not found (data/globalevents/scripts/tournament2.lua)

[24/04/2013 00:10:45] [Warning - Event::loadScript] Event onTimer not found (data/globalevents/scripts/tournament3.lua)

[24/04/2013 00:10:45] [Warning - Event::loadScript] Event onTimer not found (data/globalevents/scripts/tournament4.lua)

[24/04/2013 00:10:45] [Warning - Event::loadScript] Event onTimer not found (data/globalevents/scripts/tournament5.lua)

[24/04/2013 00:10:45] [Warning - Event::loadScript] Event onTimer not found (data/globalevents/scripts/tournament6.lua)

[24/04/2013 00:10:45] [Warning - Event::loadScript] Event onTimer not found (data/globalevents/scripts/tournament7.lua)

[24/04/2013 00:10:45] [Warning - Event::loadScript] Event onTimer not found (data/globalevents/scripts/tournament8.lua)

[24/04/2013 00:10:45] [Warning - Event::loadScript] Event onTimer not found (data/globalevents/scripts/tournament9.lua)

[24/04/2013 00:10:45] [Warning - Event::loadScript] Event onTimer not found (data/globalevents/scripts/tournament10.lua)

Link para o comentário
Compartilhar em outros sites

Roksas fiz tudo certinho coloquei as posições certas so que os player estão esperando na area de espera certinho quando da o horario eles nao estao sendo mandado para a area do torneio . Porque ?

 

esseerro ao carregar [25/04/2013 14:55:38] [Warning - Event::loadScript] Event onTimer not found (data/globalevents/scripts/tournament.lua)

Link para o comentário
Compartilhar em outros sites

Sim mano e esse mesmo

 

Instalei de novo agora nao da mais nenhum erro na distro mais ainda os player nao estao sendo teleportado para area do torneio

 

@Edit tentei de novo e for teleportado , Mais ele manda todos os player para a mesma posição ? nao teria como escolhe mais posição para os player ficar ?

 

e so arrumar esse erro [25/04/2013 15:41:15] [Error - Action Interface]

[25/04/2013 15:41:15] data/actions/scripts/tournament.lua:onUse

[25/04/2013 15:41:15] Description:

[25/04/2013 15:41:15] data/actions/scripts/tournament.lua:7: attempt to call global 'getNameById' (a nil value)

[25/04/2013 15:41:15] stack traceback:

[25/04/2013 15:41:15] data/actions/scripts/tournament.lua:7: in function <data/actions/scripts/tournament.lua:1>

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...