Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Informações Gerais

Nome: Sistema de futebol

Autor: Zathao

Testado em: The Forgotten Server 0.3.6

Versão Tibia: 8.54

Sistema

O sistema se resume em uma partida completa

de futebol entre 2 jogadores, sendo controlada por um juiz e

apoiada por uma torcida para cada player.

Juiz: Da informações referentes ao placar,

ao tempo de espera para iniciar o lance e informa

quando é gol.

Torcida: Apoia os jogadores. Cada jogador

tem uma torcida fanática que

não para de dar forças, apoiando com isentivos e

comemorando loucamente um gol!

Ao termino do jogo, o vencedor recebe um troféu

com o nome do ganhador e do vencedor!

Video Demonstrativo

Instalação

- Crie um arquivo chamado futebol.lua na pasta data/actions/scripts/

- Adicione este codigo dentro do arquivo:



----------------------------------------

----- ###  Sistema de Futebol  ### -----

----------------------------------------

-- Feito por: zathao				  --

-- Msn: [email protected] --

-- email: [email protected]   --

----------------------------------------


-- Configurações Gerais

local config = {

-- Posição que o jogadores devem estar na hora de puxar a alavanca

posJogador1 = {x=82,y=153,z=7, stackpos=1},

posJogador2 = {x=84,y=153,z=7, stackpos=1},


-- Posição inicial dos jogadores na partida

posTeleporte1 = {x=81,y=160,z=7, stackpos=1},

posTeleporte2 = {x=85,y=160,z=7, stackpos=1},


posBola = {x=83,y=160,z=7, stackpos=1}, -- Posição inicial da bola


nomeNpc = "Juiz", -- Lembrando que o npc deve existir

posNpc = {x=83,y=155,z=7, stackpos=1}, -- Posição inicial do npc


gols = 5, -- Quantidade de gols para ganhar o jogo


tempoPrePartida = 5, -- Tempo de espera para começar a partida (segundos)


quantidadeTorcedores = 7, -- Para cada equipe


-- Posição inicial em que o script irá começar preencher com os torcedores

posTorcida1 = {x=76,y=165,z=7, stackpos=1},

posTorcida2 = {x=84,y=165,z=7, stackpos=1},


-- Posição dos gols

posGol1 = {

{x=75,y=159,z=7, stackpos=1},

{x=75,y=160,z=7, stackpos=1},

{x=75,y=161,z=7, stackpos=1}

},

posGol2 = {

{x=91,y=159,z=7, stackpos=1},

{x=91,y=160,z=7, stackpos=1},

{x=91,y=161,z=7, stackpos=1}

}

}


local jogador1 = nil

local jogador2 = nil


local listaTorcedores1 = ""

local listaTorcedores2 = ""


local npcUid = nil


local placar = { 0,0 }


local eventoTorcida = nil

local eventoGol = nil


local function inicioJogo()

doCreatureSay(npcUid, "Valendo!", TALKTYPE_YELL)


doSendMagicEffect(config.posTeleporte1, 12)

doSendMagicEffect(config.posTeleporte2, 12)


doCreatureSetNoMove(jogador1, false)

doCreatureSetNoMove(jogador2, false)


end


local function torcida(nome1, nome2)

local chanceTorcida1 = math.random(1,2)

local chanceTorcida2 = math.random(1,2)


if(chanceTorcida1>1)then

local uids = string.explode(listaTorcedores1, ",")

local torcedor = uids[math.random(1,#uids)]

doCreatureSay(torcedor, "Vai "..nome1.."!", TALKTYPE_YELL)

end


if(chanceTorcida2>1)then

local uids = string.explode(listaTorcedores2, ",")

local torcedor = uids[math.random(1,#uids)]

doCreatureSay(torcedor, "Vai "..nome2.."!", TALKTYPE_YELL)

end


eventoTorcida = addEvent(torcida,4000, nome1, nome2)

end


local function delayMsg(msg)

doCreatureSay(npcUid, msg, TALKTYPE_YELL)

end


local function testeGol(nome1,nome2)

for i=1,#config.posGol1 do

for j=1,10 do

local testPos = {x=config.posGol1[i].x, y=config.posGol1[i].y, z=config.posGol1[i].z, stackpos=j}

local thing = getThingFromPos(testPos)


if(thing.itemid==2109)then

if(placar[2]==config.gols-1)then

doPlayerSendTextMessage(jogador2, MESSAGE_INFO_DESCR, "Parabéns! Você ganhou a partida.")

doPlayerSendTextMessage(jogador1, MESSAGE_INFO_DESCR, "Lamento, mas você perdeu o jogo.")


doTeleportThing(jogador1, config.posJogador1)

doTeleportThing(jogador2, config.posJogador2)


doSendMagicEffect(config.posJogador1, 12)

doSendMagicEffect(config.posJogador2, 12)


local item = doPlayerAddItem(jogador2, 5805)

doItemSetAttribute(item, "description", nome2.." conquistou este troféu apos derrotar "..nome1.." em uma partida de futebol.")


doRemoveCreature(npcUid)


stopEvent(eventoTorcida)

stopEvent(eventoGol)


local uids1 = string.explode(listaTorcedores1, ",")

local uids2 = string.explode(listaTorcedores2, ",")


for k = 1, #uids1 do

doRemoveCreature(uids1[k])

doRemoveCreature(uids2[k])

end


jogador1 = nil

jogador2 = nil


listaTorcedores1 = ""

listaTorcedores2 = ""


config.posTorcida1 = {x=76,y=165,z=7, stackpos=1}

config.posTorcida2 = {x=84,y=165,z=7, stackpos=1}


npcUid = nil


placar = { 0,0 }


else


doTeleportThing(jogador1, config.posTeleporte1)

doTeleportThing(jogador2, config.posTeleporte2)


doSendMagicEffect(config.posTeleporte1, 10)

doSendMagicEffect(config.posTeleporte2, 10)


doCreatureSetNoMove(jogador1, true)

doCreatureSetNoMove(jogador2, true)


doCreatureSetLookDirection(jogador1, 1)

doCreatureSetLookDirection(jogador2, 3)


doCreateItem(2109, 1, config.posBola)

doSendMagicEffect(config.posBola, 13)


local uids = string.explode(listaTorcedores2, ",")


for k = 1, #uids do

doCreatureSay(uids[k], "GOOOOL!", TALKTYPE_YELL)

end


placar[2] = placar[2]+1


local msg = "Gol do "..nome2.."! O placar atual é "..nome1..": "..placar[1].." e "..nome2..": "..placar[2].."."

addEvent(delayMsg,1000, msg)


msg = "A próxima rodada irá começar em cerca de "..config.tempoPrePartida.." segundos. Concentrem-se!"

addEvent(delayMsg,6000, msg)


addEvent(inicioJogo,7000+(config.tempoPrePartida*1000))

end


doRemoveItem(thing.uid)

end

end

end


for i=1,#config.posGol2 do

for j=1,10 do

local testPos = {x=config.posGol2[i].x, y=config.posGol2[i].y, z=config.posGol2[i].z, stackpos=j}

local thing = getThingFromPos(testPos)


if(thing.itemid==2109)then

if(placar[1]==config.gols-1)then

doPlayerSendTextMessage(jogador1, MESSAGE_INFO_DESCR, "Parabéns! Você ganhou a partida.")

doPlayerSendTextMessage(jogador2, MESSAGE_INFO_DESCR, "Lamento, mas você perdeu o jogo.")


doTeleportThing(jogador1, config.posJogador1)

doTeleportThing(jogador2, config.posJogador2)


doSendMagicEffect(config.posJogador1, 12)

doSendMagicEffect(config.posJogador2, 12)


local item = doPlayerAddItem(jogador1, 5805)

doItemSetAttribute(item, "description", nome1.." conquistou este troféu apos derrotar "..nome2.." em uma partida de futebol.")


doRemoveCreature(npcUid)


stopEvent(eventoTorcida)

stopEvent(eventoGol)


local uids1 = string.explode(listaTorcedores1, ",")

local uids2 = string.explode(listaTorcedores2, ",")


for k = 1, #uids1 do

doRemoveCreature(uids1[k])

doRemoveCreature(uids2[k])

end


jogador1 = nil

jogador2 = nil


listaTorcedores1 = ""

listaTorcedores2 = ""


config.posTorcida1 = {x=76,y=165,z=7, stackpos=1}

config.posTorcida2 = {x=84,y=165,z=7, stackpos=1}


npcUid = nil


placar = { 0,0 }


else


doTeleportThing(jogador1, config.posTeleporte1)

doTeleportThing(jogador2, config.posTeleporte2)


doSendMagicEffect(config.posTeleporte1, 10)

doSendMagicEffect(config.posTeleporte2, 10)


doCreatureSetNoMove(jogador1, true)

doCreatureSetNoMove(jogador2, true)


doCreatureSetLookDirection(jogador1, 1)

doCreatureSetLookDirection(jogador2, 3)


doCreateItem(2109, 1, config.posBola)

doSendMagicEffect(config.posBola, 13)


local uids = string.explode(listaTorcedores1, ",")


for k = 1, #uids do

doCreatureSay(uids[k], "GOOOOL!", TALKTYPE_YELL)

end


placar[1] = placar[1]+1


local msg = "Gol do "..nome1.."! O placar atual é "..nome1..": "..placar[1].." e "..nome2..": "..placar[2].."."

addEvent(delayMsg,1000, msg)


msg = "A próxima rodada irá começar em cerca de "..config.tempoPrePartida.." segundos. Concentrem-se!"

addEvent(delayMsg,7000, msg)


addEvent(inicioJogo,8000+(config.tempoPrePartida*1000))

end


doRemoveItem(thing.uid)

end

end

end


eventoGol = addEvent(testeGol,100,nome1,nome2)

end


function onUse(cid, item, fromPosition, itemEx, toPosition)


if (isPlayer(jogador1) == true and isPlayer(jogador2) == true)then

doPlayerSendCancel(cid, "Lamento, mas o campo ja está em uso.")

doSendMagicEffect(fromPosition, 2)

return false

end


local coisa1 = getThingFromPos(config.posJogador1).uid

local coisa2 = getThingFromPos(config.posJogador2).uid


if(isPlayer(coisa1))then

jogador1 = coisa1

end


if(isPlayer(coisa2))then

jogador2 = coisa2

end


if(jogador1==nil or jogador2==nil)then

doPlayerSendCancel(cid, "Desculpe, mas você precisa de outro player para começar um jogo.")

doSendMagicEffect(fromPosition, 2)

return false

else

doTeleportThing(jogador1, config.posTeleporte1)

doTeleportThing(jogador2, config.posTeleporte2)


doSendMagicEffect(config.posTeleporte1, 10)

doSendMagicEffect(config.posTeleporte2, 10)


doCreatureSetNoMove(jogador1, true)

doCreatureSetNoMove(jogador2, true)


doCreatureSetLookDirection(jogador1, 1)

doCreatureSetLookDirection(jogador2, 3)


doCreateItem(2109, 1, config.posBola)

doSendMagicEffect(config.posBola, 13)


npcUid = doCreateNpc(config.nomeNpc, config.posNpc)

doCreatureSetLookDirection(npcUid, 2)

doSendMagicEffect(config.posNpc, 10)

doCreatureSetNoMove(npcUid, true)


local nome1 = getCreatureName(jogador1)

local nome2 = getCreatureName(jogador2)


local msg = "Saudações "..nome1.." e "..nome2..". Serei o juiz desta partida. Ganhará o primeiro a fazer "..config.gols.." gols."

addEvent(delayMsg,1000, msg)


msg = "A partida irá começar em cerca de "..config.tempoPrePartida.." segundos. Concentrem-se!"

addEvent(delayMsg,9000, msg)


local uidMonstro

local randomOutfit


for i=1,config.quantidadeTorcedores do

uidMonstro = doCreateMonster("Torcedor",config.posTorcida1)

doCreatureSetLookDirection(uidMonstro, 0)

doSendMagicEffect(config.posTorcida1, 10)

doCreatureSetNoMove(uidMonstro, true)


config.posTorcida1.x = config.posTorcida1.x + 1


randomOutfit = {

lookType = 128,

lookHead = math.random(1,66),

lookAddons = math.random(0,2),

lookLegs = math.random(1,66),

lookFeet = math.random(1,66)

}


doCreatureChangeOutfit(uidMonstro, randomOutfit)


if(listaTorcedores1=="")then

listaTorcedores1 = uidMonstro

else

listaTorcedores1 = listaTorcedores1..","..uidMonstro

end

end


for i=1,config.quantidadeTorcedores do

uidMonstro = doCreateMonster("Torcedor",config.posTorcida2)

doCreatureSetLookDirection(uidMonstro, 0)

doSendMagicEffect(config.posTorcida2, 10)

doCreatureSetNoMove(uidMonstro, true)


config.posTorcida2.x = config.posTorcida2.x + 1


randomOutfit = {

lookType = 128,

lookHead = math.random(67,132),

lookAddons = math.random(0,2),

lookLegs = math.random(67,132),

lookFeet = math.random(67,132)

}


doCreatureChangeOutfit(uidMonstro, randomOutfit)


if(listaTorcedores2=="")then

listaTorcedores2 = uidMonstro

else

listaTorcedores2 = listaTorcedores2..","..uidMonstro

end

end


addEvent(inicioJogo,10000+(config.tempoPrePartida*1000))

eventoTorcida = addEvent(torcida,10000+(config.tempoPrePartida*1000), nome1, nome2)

eventoGol =  addEvent(testeGol,10000+(config.tempoPrePartida*1000), nome1, nome2)


local teste = string.explode(listaTorcedores1,",")


end


return true

end

- Posição do Npc:

{x=83,y=155,z=7, stackpos=1}

- Posição inicial de preenchimento das torcidas:

posTorcida1 = {x=76,y=165,z=7, stackpos=1}

posTorcida2 = {x=84,y=165,z=7, stackpos=1}

- Posição dos gols

posGol1 = {

{x=75,y=159,z=7, stackpos=1}

{x=75,y=160,z=7, stackpos=1}

{x=75,y=161,z=7, stackpos=1}

}

posGol2 = {

{x=91,y=159,z=7, stackpos=1}

{x=91,y=160,z=7, stackpos=1}

{x=91,y=161,z=7, stackpos=1}

}

--

É isso pessoal, espero que tenham gostado.

Esse é o primeiro script que posto aqui. Todo tipo de crítica será bem vinda.

Obrigado!

- Agora adicione no arquivo actions.xml em data/actions este conteúdo:

<action actionid="5000" event="script" value="futebol.lua">

- Crie um arquivo chamado juiz.lua em data/npc/scripts e cole este conteúdo:

local focuses = {}

local function isFocused(cid)

for i, v in pairs(focuses) do

  if(v == cid) then

   return true

  end

end

return false

end[/left]


local function addFocus(cid)

if(not isFocused(cid)) then

  table.insert(focuses, cid)

end

end

local function removeFocus(cid)

for i, v in pairs(focuses) do

  if(v == cid) then

   table.remove(focuses, i)

   break

  end

end

end

local function lookAtFocus()

for i, v in pairs(focuses) do

  if(isPlayer(v)) then

   doNpcSetCreatureFocus(v)

   return

  end

end

doNpcSetCreatureFocus(0)

end

function onCreatureAppear(cid)

end

function onCreatureDisappear(cid)

if(isFocused(cid)) then

  selfSay("Hmph!")

  removeFocus(cid)

  if(isPlayer(cid)) then --Be sure he's online

   closeShopWindow(cid)

  end

end

end

function onCreatureSay(cid, type, msg)

end

function onPlayerCloseChannel(cid)

if(isFocused(cid)) then

  selfSay("Hmph!")

  closeShopWindow(cid)

  removeFocus(cid)

end

end

function onThink()

for i, focus in pairs(focuses) do

  if(not isCreature(focus)) then

   removeFocus(focus)

  else

   local distance = getDistanceTo(focus) or -1

   if((distance > 4) or (distance == -1)) then

	selfSay("Hmph!")

	closeShopWindow(focus)

	removeFocus(focus)

   end

  end

end

lookAtFocus()

end

- E conclua com a criação de um arquivo chamado juiz.xml em data/npc/ contendo este conteúdo:

<!--?xml version="1.0" encoding="UTF-8"?-->

<npc name="Juiz" script="juiz.lua" walkinterval="2000" floorchange="0">

<health now="100" max="100">

<look type="128" head="17" body="54" legs="114" feet="0" addons="2">

<parameters>

</parameters>

</look></health></npc>

- E por ultimo, vamos criar nosso torcedor fanático! torcedor.xml em data/monster/ contendo isto:

<!--?xml version="1.0" encoding="UTF-8"?-->

<monster name="Torcedor" namedescription="a torcedor" race="blood" experience="0" speed="0" manacost="250">

<health now="20" max="20">

<look type="255" head="114" body="132" legs="132" feet="132" corpse="6080">

<targetchange interval="2000" chance="20">

<strategy attack="100" defense="0">

<flags>

  <flag summonable="1">

  <flag attackable="1">

  <flag hostile="1">

  <flag illusionable="1">

  <flag convinceable="1">

  <flag pushable="1">

  <flag canpushitems="0">

  <flag canpushcreatures="0">

  <flag targetdistance="1">

  <flag staticattack="90">

  <flag runonhealth="20">

</flag></flag></flag></flag></flag></flag></flag></flag></flag></flag></flag></flags>

<attacks>

  <attack name="melee" interval="2000" skill="0" attack="0">

</attack></attacks>

<defenses armor="1" defense="2">

<elements>

  <element firepercent="-10">

</element></elements>

<voices interval="5000" chance="10">

</voices>

<loot>

  <item id="3976" countmax="10" chance="50000"><!-- worm -->

  <item id="2666" countmax="3" chance="80000"><!-- meat -->

  <item id="2671" countmax="2" chance="70000"><!-- ham -->

</item></item></item></loot>

</defenses></strategy></targetchange></look></health></monster>

- Finalizando com a adição desde código em monsters.xml em data/monster/ contendo isto:

<monster name="Torcedor" file="torcedor.xml">

Pronto esta tudo pronto! Indo para ultima parte.

Configuração

- Primeiramente, seria bom ter um campo com as mesmas dimensões

como na imagem:

v6hhed.png

- No cabeçalho do código, esta uma série de configurações

pré-definidas para facilitar a entrada e adaptação do script em um no ot. Sendo elas:

- Alavanca!

Coloque um item de sua preferencia com a action id 5000

- Posição que o jogadores devem estar na hora de puxar a alavanca:

posJogador1 = {x=82,y=153,z=7, stackpos=1}

posJogador2 = {x=84,y=153,z=7, stackpos=1}

- Posição inicial de partida, a qual os jogadores serão teleportados:

posTeleporte1 = {x=81,y=160,z=7, stackpos=1}

posTeleporte2 = {x=85,y=160,z=7, stackpos=1}

- Posição da bola:

posBola = {x=83,y=160,z=7, stackpos=1}

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

avatarlogoedit.png

Scripter

  • Respostas 23
  • Visualizações 6k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

Posted Images

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo