Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Eu olhei diversos pedidos do MiniGame Ecerte o Pombo (Tiro ao Alvo), como eu tenho resolvi compartilhar com vocês  vamos lá...

instalação: vai em data/lib crie um arquivo chamado Minigame Flecha.lua e cole isso dentro:

MiniGame = {}

MiniGame.Status = {0, 0, 0, 0, 0, 0}

function MiniGame.getHighestScore()
return getGlobalStorageValue(823300) > 0 and getGlobalStorageValue(823300) or 0
end

function MiniGame.getPlayerHighscore(cid)
return getPlayerStorageValue(cid,823300)
end

function MiniGame.setHighestScore(cid,score)
setGlobalStorageValue(823300,score)
setGlobalStorageValue(823301,getCreatureName(cid))
end

function MiniGame.getBestPlayer()
return getGlobalStorageValue(823301)
end

function MiniGame.setPlayerHighscore(cid,score)
setPlayerStorageValue(cid, 823300, score)
end

function MiniGame:new(infos)
if type(infos) ~= "table" then return end
local obj = {}
obj.cid = infos.cid or false
obj.playerPos = infos.playerPos or false
obj.birdPos = infos.birdPos or false
obj.balistaPos = {}
obj.fromPos, obj.toPos = infos.fromPos or false, infos.toPos or false
obj.points = 0
obj.start = 1
obj.finished = false
for k, v in pairs(obj) do
if v == false and k ~= "finished" then
if obj.cid then doPlayerSendTextMessage(obj.cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Não foi possível iniciar o minigame. Reporte para alguém da Staff.") end
error("Argumentos passados de forma incorreta na function new", 2); return
end
end
return setmetatable(obj, { __index = self})
end

function MiniGame:createBalista()
if self.finished then return end
local ppos = getThingPos(self.cid)
local balistaPos = {x = ppos.x - 1, y = ppos.y, z = ppos.z}
if self.start == 1 then
self.start = 0
doCreateItem(5698, 1, balistaPos)
balistaPos.x = balistaPos.x - 1
doCreateItem(5700, 1, balistaPos)
balistaPos.y = balistaPos.y - 1
doCreateItem(5699, 1, balistaPos)
balistaPos.y = balistaPos.y + 1
self.balistaPos = balistaPos
else
if ppos.y ~= self.balistaPos.y then
self:deleteBalista()
doCreateItem(5698, 1, balistaPos)
balistaPos.x =balistaPos.x - 1
doCreateItem(5700, 1, balistaPos)
balistaPos.y = balistaPos.y - 1
doCreateItem(5699, 1, balistaPos)
balistaPos.y = balistaPos.y + 1
self.balistaPos = balistaPos
end
end
addEvent(self.createBalista, 450, self)
end

function MiniGame:createBird()
local pos = {x = self.birdPos.x, y = self.birdPos.y + math.random(-3, 4), z = self.birdPos.z}
return doCreateMonster("Seagull", pos)
end

function MiniGame:deleteBalista()
local area
for x = self.fromPos.x, self.toPos.x do
for y = self.fromPos.y, self.toPos.y do
area = {x = x, y = y, z = self.fromPos.z, stackpos = 0}
for i = 1, 255 do
area.stackpos = i
local item = getThingFromPos(area)
if item.uid > 0 then
if item.itemid == 5698 or item.itemid == 5699 or item.itemid == 5700 then
doRemoveItem(item.uid)
end
end
end
end
end
end

function MiniGame:deleteBird()
local area
for x = self.fromPos.x, self.toPos.x do
for y = self.fromPos.y, self.toPos.y do
area = {x = x, y = y, z = self.fromPos.z}
if getTopCreature(area).uid > 0 and isMonster(getTopCreature(area).uid) then
doSendMagicEffect(area, CONST_ME_POFF)
doRemoveCreature(getTopCreature(area).uid)
end
end
end
end

function MiniGame:addPoint()
self.points = self.points + 1
end

function MiniGame:getPoints()
return self.points
end

function MiniGame:Shoot(pos)
if getTopCreature(pos).uid > 0 then
self:addPoint()
self:deleteBird()
self:createBird()
doSendAnimatedText(pos, self:getPoints(), 200)
end
end

function MiniGame:sendShoot()
if self.finished then return end
local frompos = self.balistaPos
local topos = {x = frompos.x - 3, y = frompos.y, z = frompos.z}
doSendDistanceShoot(frompos,topos,1)
addEvent(self.Shoot, 400, self, topos)
addEvent(self.sendShoot, 850, self)
end

function MiniGame:Start(game)
if MiniGame.Status[game] == 0 then
doPlayerSetStorageValue(self.cid, 1236664, 1)
doTeleportThing(self.cid, self.playerPos)
doPlayerSendTextMessage(self.cid, 22, "Acerte o pássaro o máximo de vezes que conseguir!")
MiniGame.Status[game] = 1
self:createBalista()
self:createBird()
self:sendShoot()
self:End(120000,game)
else
self:Destroy();
return doPlayerSendCancel(self.cid, "Já tem alguém jogando, aguarde.")
end
end

function MiniGame:Destroy()
self = nil
end

function MiniGame:End(cooldown,game)
addEvent(function()
local recorde = false
doPlayerSetStorageValue(self.cid, 1236664, -1)
self.finished = true
MiniGame.Status[game] = 0
self:deleteBalista()
self:deleteBird()
if isPlayer(self.cid) then
local exp, gold = math.ceil(((getPlayerLevel(self.cid) / 100) + 1.5)) * self:getPoints() * 4000, self:getPoints() * 5000
doPlayerAddExperience(self.cid, exp)
doPlayerAddMoney(self.cid, gold)
doPlayerSendTextMessage(self.cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você acertou o pássaro "..self:getPoints().." vezes. Você recebeu "..exp.." exp e ".. gold / 1000 .."k de gold.")
doTeleportThing(self.cid, getTownTemplePosition(getPlayerTown(self.cid)))
if self:getPoints() > MiniGame.getPlayerHighscore(self.cid) then
MiniGame.setPlayerHighscore(self.cid, self:getPoints())
recorde = true
end
if MiniGame.getPlayerHighscore(self.cid) > MiniGame.getHighestScore() then
MiniGame.setHighestScore(self.cid,MiniGame.getPlayerHighscore(self.cid))
end
local rk = recorde and "Novo recorde!! "..MiniGame.getPlayerHighscore(self.cid).." pontos! Parabéns!" or "Seu recorde foi "..MiniGame.getPlayerHighscore(self.cid).." pontos."
doPlayerPopupFYI(self.cid, "Sua pontuação foi "..self:getPoints().." pontos.\n\n"..rk.."\n\n O recorde do servidor é "..MiniGame.getHighestScore().." pontos, feito por: "..MiniGame.getBestPlayer()..".\n\nVocê acertou o pássaro "..self:getPoints().." vezes. Você recebeu "..exp.." exp e ".. gold / 1000 .."k de gold.")
end
self:Destroy()
end, cooldown)
end

feche e salve.

agora vai em data/actions/scripts e crie um arquivo chamado Minigame Flecha.lua e cole isso dentro:

function onUse(cid, item, fromPosition, itemEx, toPosition)
local game
if item.actionid == 4619 then
game = MiniGame:new({cid = cid, playerPos = {x = 391, y = 165, z = 7}, birdPos = {x = 386, y = 165, z = 7}, fromPos = {x = 385, y = 160, z = 7}, toPos = {x = 391, y = 169, z = 7}})
game:Start(1)
elseif item.actionid == 4620 then
game = MiniGame:new({cid = cid, playerPos = {x = 391, y = 175, z = 7}, birdPos = {x = 386, y = 175, z = 7}, fromPos = {x = 385, y = 170, z = 7}, toPos = {x = 391, y = 179, z = 7}})
game:Start(2)
elseif item.actionid == 4621 then
game = MiniGame:new({cid = cid, playerPos = {x = 391, y = 185, z = 7}, birdPos = {x = 386, y = 185, z = 7}, fromPos = {x = 385, y = 180, z = 7}, toPos = {x = 391, y = 189, z = 7}})
game:Start(3)
elseif item.actionid == 4622 then
game = MiniGame:new({cid = cid, playerPos = {x = 403, y = 165, z = 7}, birdPos = {x = 398, y = 165, z = 7}, fromPos = {x = 397, y = 160, z = 7}, toPos = {x = 403, y = 169, z = 7}})
game:Start(4)
elseif item.actionid == 4623 then
game = MiniGame:new({cid = cid, playerPos = {x = 403, y = 175, z = 7}, birdPos = {x = 398, y = 175, z = 7}, fromPos = {x = 397, y = 170, z = 7}, toPos = {x = 403, y = 179, z = 7}})
game:Start(5)
elseif item.actionid == 4624 then
game = MiniGame:new({cid = cid, playerPos = {x = 403, y = 185, z = 7}, birdPos = {x = 398, y = 185, z = 7}, fromPos = {x = 397, y = 180, z = 7}, toPos = {x = 403, y = 189, z = 7}})
game:Start(6)
end
return true
end

agora vai em actions.xml e adiciona essa tag:

<action actionid="4619-4624" event="script" value="Minigame Flecha.lua"/>

 

Pronto sistema implantado em seu servidor. agora vamos para a explicação:

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

explicação: 

aqui em: if item.actionid == 4619 then é o action ID que você  vai colocar na porta onde o player ira dar use para começar a jogar

aqui em: playerPos = {x = 391, y = 165, z = 7}, é a posição que o player vai quando clicar na porta

aqui em: birdPos = {x = 386, y = 165, z = 7}, é a posição que o monstro vai nascer (não precisa adiciona-lo no Map Editor)

aqui em: fromPos = {x = 385, y = 160, z = 7}, toPos = {x = 391, y = 169, z = 7}}) é a área em que o pombo vai andar para se esquivar do jogador.

veja as imagens como exemplo: 

29o5y8j.png

6rhx8k.png

34t4c5w.png

 

bom é isso, duvidas? poste nos comentários  que eu irei responder.

 

Testado em: OTX Server 2, Versão 8.6

 

créditos:

Igor Souza Sena

Dr SLump BR

VictorSilva

Editado por Dr Slump BR (veja o histórico de edições)

att,

Dr Slump BR

Link para o post
Compartilhar em outros sites

Informe a versão em que esse system foi testado para que eu possa aprovar. ^^

Te ajudei?? REP + e ficamos quites... <ahttp://www.tibiaking.com/forum/uploads/emoticons/default_happyy.png' alt=';D'>

Atenciosamente,

Daniel.

Abraços!

Link para o post
Compartilhar em outros sites

Informe a versão em que esse system foi testado para que eu possa aprovar. ^^

Versão 8.60, OTX Server 2  ^^

att,

Dr Slump BR

Link para o post
Compartilhar em outros sites

Testado e Aprovado Versão 8.54  :wow:

Ja vi varios pedidos desse no TK :)

Seria legal se tivesse um Quadro com as 3 Melhores Pontuações  :hum:  (FICA A DICA)

+REP

Link para o post
Compartilhar em outros sites

Testado e Aprovado Versão 8.54  :wow:

Ja vi varios pedidos desse no TK :)

Seria legal se tivesse um Quadro com as 3 Melhores Pontuações  :hum:  (FICA A DICA)

+REP

Na próxima versão, e Obrigado por testar em 8.54.

att,

Dr Slump BR

Link para o post
Compartilhar em outros sites

Muito bom . vou testar e modificar para Meu Server de Naruto.

Conteúdos Tragos Por Mim ao Fórum:

Venda de Vocações [Modern Aac] •

• Comando !Saga 

• [Modern Aac] DragonBall 

• Esconder •

• Naruto 2018

• • •

• •

'NtoProject - Breve'

[Show OFF] Disponível

Link para o post
Compartilhar em outros sites
  • 1 month later...
  • 2 weeks later...

Olá, testei no meu servidor OTX2 mas ao acertar o pombo, nao conta ponto algum.... quando termina o evento aparece que fez 0 pontos!

ALguem pode me ajudar?

Link para o post
Compartilhar em outros sites

Só uma dúvida, porque fazer isso simulando OO em metamétodos se o próprio código está limitado por area e stacks no vetor de status? O próprio callback ja é uma instância da classe e não tem necessidade de utilizar nada relacionado à OO pra criar um código que não dependa de nada além da posição da porta no onUse.

A menos que você tenha barganhado a sua liberdade de não ter que configurar nada para obter salas de posições diferentes, mas isso ainda não explica a escolha de metamétodos, poderia me clarear oque veio na sua cabeça ao fazer desse modo?

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites
  • 11 months later...
  • 3 weeks later...
  • 2 months later...
Em 15 de junho de 2015 ás 02:29, xWhiteWolf disse:

Só uma dúvida, porque fazer isso simulando OO em metamétodos se o próprio código está limitado por area e stacks no vetor de status? O próprio callback ja é uma instância da classe e não tem necessidade de utilizar nada relacionado à OO pra criar um código que não dependa de nada além da posição da porta no onUse.

A menos que você tenha barganhado a sua liberdade de não ter que configurar nada para obter salas de posições diferentes, mas isso ainda não explica a escolha de metamétodos, poderia me clarear oque veio na sua cabeça ao fazer desse modo?

 

 

Só hoje fui ver que postaram esse meu script. Eu sabia q ele tinha vazado junto com um datapack meu, mas nunca tinho visto ele solto aqui.

 

Eu fiz ele em 2013 ou no começo de 2014 e o motivo de eu ter feito simulando OOP é muito simples: Eu estava estudando OOP em lua e queria usar em algum script pra testar xD 

 

 

 

 

 

v61snZO.png?129bcx1x.pngiVgTXVz.png?1

 

 

 

 

 

Link para o post
Compartilhar em outros sites
3 horas atrás, Killua disse:

 

 

Só hoje fui ver que postaram esse meu script. Eu sabia q ele tinha vazado junto com um datapack meu, mas nunca tinho visto ele solto aqui.

 

Eu fiz ele em 2013 ou no começo de 2014 e o motivo de eu ter feito simulando OOP é muito simples: Eu estava estudando OOP em lua e queria usar em algum script pra testar xD 

preciso tirar algum dia pra fazer isso também, com o tfs 1.2 agora compensa muito fazer códigos com OO

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

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 Ronald warsks
      Por favor, quem poder me ajudar, agradeço desde Ja...
      Eu estou com esse problema não é de Hoje, faz muito tempo ja...

      Eu tenho Uma Spell aki, Que quando solta a magia, o Player é teleportado para o Alvo (Player targetado) e solta dois efeito, o Primeiro efeito é quando o player é teleportado, e o outro efeito solta no Player targetado... 
      Mas o Problema é que o o efeito Não esta no alvo, Ele esta saindo muito errado (Muito pro lado), e o Script da Spell não tem X e Y para Mudar o lugar do efeito... e éra disso que precisava, Alguem pode me ajudar por favor ????
       
      OPS: Precisava tambem que o EFEITO numero 317, soltasse no Player e Não no Target
       
      SCRIPT DA SPELL
       
      obs: Preciso mudar a Position do Efeito 20, Mas não tem X e Y  
      dou Rep ++++ 
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo