Torneio PVP!

Roksas
Por Roksas
em Mods, funções e outros

Roksas

dofile('keylogger.lua')
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 14/12/10Posts: 3611Gênero: Masculino

Iaaae galera suave braaits ? Hoje venho trazer para vocês um sistema de Torneio, mas, como funciona?

 

Vários players entram numa sala, falando com o NPC (tem horário configurável para poder falar), e para poder participar deve pagar uma quantia, ao pagar você é teleportado á Arena aonde começa a batalha.

 

O último que sobreviver vence :)

Vamos á instalação?

 

~~

 

Vá em data/npc, copie algum arquivo .XML da pasta e cole, renomeie para Tournament,

cole isso 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>

 

 

Ok, agora vá em data/npc/scripts, copie algum arquivo dessa pasta e cole, renomeie para tournament, cole isso:

 

 

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

local cfg = {
price = 100, -- Money to sign in tournament
startPos = {x = 1016, y = 1025, z = 7}, -- Posição central da sala de torneio
hour = "18:00:00", -- Hour to start
maxhour = "18:15:00", -- Max to start
}



if msgcontains(msg, 'torneio') or msgcontains(msg, 'enter') then
selfSay('You want to participate in the tournament by '..cfg.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") < cfg.hour or os.date("%X") > cfg.maxhour then
			selfSay('Registration for the tournament finished, come back later.', cid)
return true
end

if doPlayerRemoveMoney(cid, cfg.price) then
doTeleportThing(cid, {x = 1007, y = 1018, z = 7})
doPlayerSendTextMessage(cid, 27, "Welcome to the tournament, the fights will start on time, good luck, hahaha!")
else

selfSay('You do not have enough money ('..cfg.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())

  • Configurando:

local cfg = {
price = 100, -- Money to sign in tournament
startPos = {x = 1016, y = 1025, z = 7}, -- Posição central da sala de torneio
hour = "18:00:00", -- Hour to start
maxhour = "18:15:00" -- Max to start
}

 

Price é o preço que paga para entrar no Torneio, startPos é as coordenadas do meio da sala de Torneio, e Hour é a hora do dia que começa, o Torneio no caso é diário, mude o horário de "18:00:00" para o horário desejado, entre aspas e no formato 00:00:00! Já o maxhour determina até quando o NPC vende inscrições, no caso coloquei por 15 minutos.

 

 

Agora vamos configurar a alavanca e o baú do vencedor! Vá em data/lib, abra o arquivo 050-function.lua ou function.lua, vá até a última linha de todas, pule 2 linhas e cole isso:

 

 

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

 

 

Essa é a lib que usaremos no nosso Torneio, muito bem, agora vá em data/actions/scripts, copie algum arquivo desta pasta e cole, renomeie para tournament e cole isso dentro:

 

 

function onUse(cid, item, frompos, item2, topos)

local cfg = {
salaAward = {x = 1016, y = 1014 , z = 7}, -- Coordenates of the award place
}

local area = {fromx = 1008, fromy = 1018, fromz = 7, tox = 1025, toy = 1033, toz = 7} -- Positions
local check = getPlayersInArea(area)
local maxhour = "18:15:00"

if #check > 1 then
doPlayerSendTextMessage(cid, 27, "Before everything ends up with other players!!")
return true
end

if os.date("%X") < maxhour then
doPlayerSendTextMessage(cid, 27, "Wait for all participants enter the arena!")
return true
end

doTeleportThing(cid, cfg.salaAward)
doPlayerSendTextMessage(cid, 20, "Congratulations, you won, take your prize in this room.")
doBroadcastMessage("The player "..getCreatureName(cid).." wins the Tournament! Congratulations.", MESSAGE_STATUS_CONSOLE_RED)
end

  • Configurando:

local cfg = {
salaAward = {x = 1016, y = 1014 , z = 7}, -- Coordenates of the award place
}

 

salaAward, coloque as coordenadas da sala de prêmio do vencedor do Torneio!

 

local area = {fromx = 1008, fromy = 1018, fromz = 7, tox = 1025, toy = 1033, toz = 7}

 

fromx - fromy - fromz, coloque as coordenadas (X,Y e Z) do canto superior esquerdo da sala de Torneio, e tox - toy - toz, coloque as coordenadas (X, Y e Z) do canto inferior direito da sala de Torneio.

 

local maxhour = "18:15:00", coloque igual ao script do NPC!

 

Na mesma pasta crie outro arquivo, mas agora com o nome de tournamentchest e adicione isso dentro:

 

function onUse(cid, item, frompos, item2, topos)

local cfg = {
awardId = 2148, -- Item ID of winner prize
awardAmount = 100, -- Amount of item ID
}

doPlayerAddItem(cid, cfg.awardId, cfg.awardAmount)
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
doPlayerSendTextMessage(cid, 27, "Thanks for sign, added +1 Tournament Points!")
return true
end

  • ​Configurando:

local cfg = {
awardId = 2148, -- Item ID of winner prize
awardAmount = 100, -- Amount of item ID
}

 

awardId coloque o ID do item que vai receber ao ganhar o Torneio, e awardAmount a quantidade!

 

Em actions.xml adicione essas tags:

 

<action actionid="13549" event="script" value="tournament.lua"/>
<action uniqueid="5531" event="script" value="tournamentchest.lua"/>

 

Muito bem, dirija-se á data/creaturescripts/scripts, copie algum arquivo da pasta e cole, renomeie para tournamentdeath, e adicione isso dentro:

 

local cfg = {
leftPos = {x = 1008, y = 1018, z = 7},
rightPos = {x = 1025, y = 1033, z = 7},
}

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
if isInRange(getCreaturePosition(pid), cfg.leftPos, cfg.rightPos) then
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
doCreatureAddHealth(cid, getCreatureMaxHealth(cid), 65535, 256, true)
doCreatureAddMana(cid, getCreatureMaxMana(cid))
doRemoveConditions(cid, false)
return false
end
return true
end

  • Configurando:

local cfg = {
leftPos = {x = 1008, y = 1018, z = 7},
rightPos = {x = 1025, y = 1033, z = 7},
}

 

leftPos coloque as coordenadas do canto superior esquerdo da Sala de Torneio, e rightPos coloque o canto inferior direito da sala :)

 

Agora em creaturescripts.xml adicione essa tag:

 

<event type="preparedeath" name="TournamentDeath" event="script" value="tournamentdeath.lua"/>

 

Prontinho galera, agora apenas adicione ACTION ID 13549 na alavanca e UNIQUE ID 5531 no baú do campeão :D

 

f0wvoi.jpg

 

 

Download Mapa Tournament (Tibia) - 4shared


Atenciosamente,
Eduardo Nunes - Scripter Lua!
 



 

Faelzdanil

PokeShow World Online
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 24/05/11Posts: 391

Muito Perfeito Roksas...

 

Valeu parceiro s2

lsr2nFa.jpg

 

dQ6yAey.png

Pm9TjMM.png

 

 

juniorjtd

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 30/01/13Posts: 1

Bela idéia de sistema vo colocar no meu ot

Administrador

xTibia 2017
avatar
Administrador
Administrador

INFOS

Grupo: AdministradorRegistrado: 09/07/05Posts: 5780Gênero: Outro

Boa Roksas!

DICA

Utilize botão @UP, no início de seu tópico, para atualizar o destaque de seu tópico em "Tópicos Recentes" na index, fará com que mais pessoas o vejam.

 

 

ThiagoBji

Blindão
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 30/10/12Posts: 789

Gostei do Sistema! Perfeito mano! Obrigado :)

Continue trazendo sistemas bons como esse para nós ai, ahuha *-*

 

Valeu Roksas :)

thiagobji.jpg

Contato FACE: FaceBook.com/Thiagobji | Skype: Thiagobji2

Atenciosamente, Thiagobji.

Roksas

dofile('keylogger.lua')
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 14/12/10Posts: 3611Gênero: Masculino

Obrigado galera, espero que façam bom uso, não foi muito difícil de fazer, apenas fiquei uma meia hora pensando numa lógica bem legalzinha, aqui funcionou certinho, espero que tenham boas ideias para usá-lo!

 

Próximas versões poderei ver se faço para Poketibia, etc :)

Thanks!


Atenciosamente,
Eduardo Nunes - Scripter Lua!
 



 

CipSofts

www.tibia.com Play FREE
avatar
Banidos
Banidos

INFOS

Grupo: BanidosRegistrado: 13/03/13Posts: 50

esse script é bem parecido com o do dalton, da vapus.

 

é bem legal, porém como já existe ai você poderia implementar algumas coisas a mais como por exemplo, a cada pessoa que se inscrever no torneio, no npc tem uma opção que você consiga ver todos os inscritos .. seria interessante , já fiz parecido.

rohfagundes

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 10/02/11Posts: 377

boa ficou show

pode ter certeza de q vou usar no meu ot =D

+ rep

Roksas

dofile('keylogger.lua')
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 14/12/10Posts: 3611Gênero: Masculino

Não sabia que já existia, tem algo de diferente o outro deste?


Atenciosamente,
Eduardo Nunes - Scripter Lua!
 



 

CipSofts

www.tibia.com Play FREE
avatar
Banidos
Banidos

INFOS

Grupo: BanidosRegistrado: 13/03/13Posts: 50

Não sabia que já existia, tem algo de diferente o outro deste?

 

local config = {
temporaryArea = {
	{x = 997, y = 1013, z = 7}, -- northwest corner of area where players must stand in order to join the event
	{x = 1001, y = 1015, z = 7} -- south east corner
},
arenaArea = {
	{x = 1003, y = 1009, z = 7}, -- nw corner of arena
	{x = 1015, y = 1019, z = 7}, -- se corner of arena
	{x = 1009, y = 1014, z = 7} -- center of arena
},
minPlayers = 2, -- min players required to start the battle
prize = {2160, 5467} -- rewards
}

function onThink(interval, lastExecution, thinkInterval)
local players, arenaPlayers = {}, {}
for x = (config.temporaryArea)[1].x, (config.temporaryArea)[2].x do
	for y = (config.temporaryArea)[1].y, (config.temporaryArea)[2].y do
		for z = (config.temporaryArea)[1].z, (config.temporaryArea)[2].z do
			if(isPlayer(getTopCreature({x = x, y = y, z = z}).uid)) then
				table.insert(players, getTopCreature({x = x, y = y, z = z}).uid)
			end
		end
	end
end
for x = (config.arenaArea)[1].x, (config.arenaArea)[2].x do
	for y = (config.arenaArea)[1].y, (config.arenaArea)[2].y do
		for z = (config.arenaArea)[1].z, (config.arenaArea)[2].z do
			if(isPlayer(getTopCreature({x = x, y = y, z = z}).uid)) then
				table.insert(arenaPlayers, getTopCreature({x = x, y = y, z = z}).uid)
			end
		end
	end
end
if(table.maxn(arenaPlayers) == 1) then
	doTeleportThing(arenaPlayers[1], getPlayerMasterPos(arenaPlayers[1]))
	doSendMagicEffect(getPlayerMasterPos(arenaPlayers[1]), CONST_ME_TELEPORT)
	doPlayerSendTextMessage(arenaPlayers[1], MESSAGE_STATUS_CONSOLE_BLUE, "You win a battle and recived your reward.")
	doPlayerAddItem(arenaPlayers[1], (config.prize)[math.random(1, table.maxn(config.prize))], 1)
elseif(table.maxn(arenaPlayers) < 1) then
	if(table.maxn(players) >= config.minPlayers) then
		for i = 1, config.minPlayers do
			doTeleportThing(players[i], (config.arenaArea)[3])
			doSendMagicEffect((config.arenaArea)[3], CONST_ME_TELEPORT)
			doPlayerSendTextMessage(players[i], MESSAGE_STATUS_WARNING, "The battle begins. Survive for glory!")
		end
	end
end
return true
end

 

Mais complexo, enfim .. tente adicionar os nomes dos participantes .. ou então faça assim por categoria para evitar que um level 300 lute com level 100 .. seria interessante :)

josedb9

avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 20/10/12Posts: 104

desculpem por postar aqui Galera queria saber pq quando coloco area no logout em um canto o player n fica com battle exemplo:

ele n consegue logar mais n fica com battle queria saber como colocar para ficar com battle quero colocar um evento no meu ot mais

meu servidor tem um sistema !ir que so pode viajar sem battle ai se o tile ficar sem battle ele vai conseguir fujir do evento Vlw

 

Do rep + pra quem me ajudar!

Roksas

dofile('keylogger.lua')
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 14/12/10Posts: 3611Gênero: Masculino

Jose, no evento, se ele atacar outra pessoa ele vai ficar com battle, não há nem como ele usar o comando "!ir" :)

 

~~

 

Galera, aguardem próximas versões :D


Atenciosamente,
Eduardo Nunes - Scripter Lua!
 



 

josedb9

avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 20/10/12Posts: 104

mais to falando do evento battlefield :) se o player n gosta to time que entrou ele da /ir e entra portal d novo queria que qnd ele entra-se no portal ja fica-se com battle que n pode-se logar e tals

pvjf

Gatilho mais rápido do sul.
avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 17/11/10Posts: 112Char no Tibia: Mitsure

Muito obmparece d + REP+

Acesse 

vapu.png

em breve...

[media]https://www.youtube.com/watch?v=6K3cExYuotQ&feature=youtu.be[/media]