AD

TransformItem com tempo

Por adrianokk, 21 de abr. de 2020 em Scripts

11
2.5k
adrianokkA
21 de abril de 2020 às 11:40

Esta é uma parte do Script que transforma um item em outro.

O jogador aperta no item e ele se transforma em outro..

mas quero deixar assim.

 

Ex: Jogador depois que aperta no item, o item depois de (5 Segundos) se transforma no outros.

 

ja esta setado um item como (ItemQuebrado), apenas quero Add um tempo antes dele se transformar

Editado Abril 23 por adrianokk

Yan OliveiraY
23 de abril de 2020 às 16:15
Em 21/04/2020 em 11:40, adrianokk disse:
Versão do Servidor: TFS - 0.3.5
Tipo de Script: actions
Código:
  Ocultar conteúdo

   local old_id, old_pos = itemEx.itemid, getThingPos(itemEx.uid)
    doTransformItem(itemEx.uid,  ItemQuebrado)
    addEvent(function()
    local stump = getTileItemById(old_pos, ItemQuebrado)
    if stump.uid then
    doTransformItem(stump.uid, old_id)

Esta é uma parte do Script que transforma um item em outro.

O jogador aperta no item e ele se transforma em outro..

mas quero deixar assim.

 

Ex: Jogador depois que aperta no item, o item depois de (5 Segundos) se transforma no outros.

 

ja esta setado um item como (ItemQuebrado), apenas quero Add um tempo antes dele se transformar

Seria melhor postar o script todo para entender melhor.

 

Só para entender, esse addEvent você colocou na tentativa de tentar criar os 5 segundos para transformar no item?

adrianokkA
23 de abril de 2020 às 17:30

Pronto coloquei ele todo. só faltava o tempo que ele demora para voltar ao item anteiros.
Deixa eu ver se consigo explicar.

Quando o jogador aperta (Exemplo: Em uma parede deitada --- id: 17256), a parede vira outro item (EX: Parede virada | id: 17257 ) e depois do time * 60000) (Time esta em 5 = 5 minutos)

Apos esses 5 minutos a parede volta para o ID: 17256.

o problema é que quanto o jogador aperta na parede 17256, ela se transforma na parede 17257 instantaneamente.
eu quero colocar um CD de ex:5 segundos. para que quando o jogador aperta na parede 17256 demore 5 segundos para ela virar a parede 17257  

wevertonvrbW
23 de abril de 2020 às 21:18
4 horas atrás, adrianokk disse:

Pronto coloquei ele todo. só faltava o tempo que ele demora para voltar ao item anteiros.
Deixa eu ver se consigo explicar.

Quando o jogador aperta (Exemplo: Em uma parede deitada --- id: 17256), a parede vira outro item (EX: Parede virada | id: 17257 ) e depois do time * 60000) (Time esta em 5 = 5 minutos)

Apos esses 5 minutos a parede volta para o ID: 17256.

o problema é que quanto o jogador aperta na parede 17256, ela se transforma na parede 17257 instantaneamente.
eu quero colocar um CD de ex:5 segundos. para que quando o jogador aperta na parede 17256 demore 5 segundos para ela virar a parede 17257  

 

vai la no actions/scripts e cria um arquivo.lua e cola isso dentro

Spoiler

function onUse(cid, item)
          doTransformItem(item.uid,?????) ----- nas interrogação coloca o id da parede 2 no caso parede virada

            doDecayItem(item.uid)
                return true
end

no item.xml procura a parede 2 e coloca esses atributos no item
      <attribute key="decayTo" value="??????"/> nas interrogação coloca o id da parede 1
        <attribute key="duration" value="?????"/> nas interrogação vc coloca o tempo acredito que conte em segundos

n esquece de registrar no actions.xml 

<action actionid="5555" event="script" value="NOMEDOSCRIPT.lua"/>

pra fazer funcionar em apenas 1 parede determinada no local x,y,z recomendo registrar usando uma actionid EU BOTEI ALI 5555 é so registrar ela na parede pelo map editor não esquesse de editar o NOMEDOSCRIPT
caso seja uma arvore espalhada pelo mapa ou varias paredes espalhadas por exemplo vc pode trocar o action id por itemid e colocar o id da parede 1 que todas elas vai funcionar

Editado Abril 23 por wevertonvrb

Yan OliveiraY
24 de abril de 2020 às 00:13
Melhor resposta
9 horas atrás, adrianokk disse:

Pronto coloquei ele todo. só faltava o tempo que ele demora para voltar ao item anteiros.
Deixa eu ver se consigo explicar.

Quando o jogador aperta (Exemplo: Em uma parede deitada --- id: 17256), a parede vira outro item (EX: Parede virada | id: 17257 ) e depois do time * 60000) (Time esta em 5 = 5 minutos)

Apos esses 5 minutos a parede volta para o ID: 17256.

o problema é que quanto o jogador aperta na parede 17256, ela se transforma na parede 17257 instantaneamente.
eu quero colocar um CD de ex:5 segundos. para que quando o jogador aperta na parede 17256 demore 5 segundos para ela virar a parede 17257  

 

Entendi, antes de function onUse adicione essa função:

---- FUNÇÃO QUE VOLTA O ITEM APÓS X SEGUNDOS ----
function contagemSegundosItem(cid, old_item, new_item, segundos)
local item_antigo = old_item.itemid
local old_position = getThingPos(old_item.uid)

doTransformItem(old_item.uid, new_item.itemid)

local item_tile = getTileItemById(old_position, new_item)

  if item_tile.uid then
    if segundos > 0 then
      addEvent(contagemSegundosItem, 60000, cid, old_item, new_item, segundos-1)
    else
      doTransformItem(item_tile.uid, item_antigo)	
    end
  end
end   

E na parte do function onUse onde estava seu código antigo, apague aquele bloco e chame a função:

contagemSegundosItem(cid, itemEx, ItemQuebrado, 5) -- CID, ITEM QUE VAI SER TRANSFORMADO, NOVO ITEM, E OS SEGUNDOS

Testa e me fala se der problema.

Editado Abril 24 por Yan18

adrianokkA
24 de abril de 2020 às 14:03

ty man

 

Yan OliveiraY
24 de abril de 2020 às 14:27
13 minutos atrás, adrianokk disse:

ty man

 

Funcionou certinho?

 

16 horas atrás, wevertonvrb disse:

 

vai la no actions/scripts e cria um arquivo.lua e cola isso dentro

  Mostrar conteúdo oculto

function onUse(cid, item)
          doTransformItem(item.uid,?????) ----- nas interrogação coloca o id da parede 2 no caso parede virada

            doDecayItem(item.uid)
                return true
end

no item.xml procura a parede 2 e coloca esses atributos no item
      <attribute key="decayTo" value="??????"/> nas interrogação coloca o id da parede 1
        <attribute key="duration" value="?????"/> nas interrogação vc coloca o tempo acredito que conte em segundos

n esquece de registrar no actions.xml 

<action actionid="5555" event="script" value="NOMEDOSCRIPT.lua"/>

pra fazer funcionar em apenas 1 parede determinada no local x,y,z recomendo registrar usando uma actionid EU BOTEI ALI 5555 é so registrar ela na parede pelo map editor não esquesse de editar o NOMEDOSCRIPT
caso seja uma arvore espalhada pelo mapa ou varias paredes espalhadas por exemplo vc pode trocar o action id por itemid e colocar o id da parede 1 que todas elas vai funcionar

Seu script não sentido, ele queria apenas que colocasse um tempo para que transformasse o item novamente, já estava funcionando a transformação, só precisava do tempo. Já o seu script usa a função Decay que seria "apodrecer" o item, que é usado mais para árvores, bush ou buracos (mais coisas que envolvem natureza ou ambiente, e tendo definido para o item "novo" no items.xml). Mas não é o caso do pedido do colega. E no seu script não tem um tempo definido para transformar o item.

adrianokkA
24 de abril de 2020 às 14:49

tinha dado um erro mas foi só um nome que coloquei errado na função, troquei e foi

você acredita que meu pc acabou de queimar a fonte ??

sorte que tenho um notebook reservar ¬¬''

 

Yan OliveiraY
24 de abril de 2020 às 16:35
1 hora atrás, adrianokk disse:

tinha dado um erro mas foi só um nome que coloquei errado na função, troquei e foi

você acredita que meu pc acabou de queimar a fonte ??

sorte que tenho um notebook reservar ¬¬''

 

Sobre o post, que bom que funcionou ?. Haha é assim mesmo, um nome errado, qualquer caractere errado já buga tudo,

 

Sobre seu pc, que chato cara, mas pelo menos foi só a fonte, semana retrasada perdi meu HD, tinha feito várias coisas em várias bases, tinha migrado uma base mysql para sqlite e perdi. Mas fonte é só comprar outra, se fosse HD ai seria complicado, perder suas coisas pessoal. Mas não esquece também de trocar a pasta térmica do processador para não correr risco de perder haha, ainda mais se mora em uma região quente.

 

Coloque por gentileza a resposta com o código como a melhor resposta, para caso outra pessoa queira ela encontre, e também como resolvido o tópico ?

 

Abraços.

Editado Abril 24 por Yan18

adrianokkA
24 de abril de 2020 às 16:42

onde bota como melhor tópico e como resolvido ? xD

Yan OliveiraY
30 de abril de 2020 às 02:22
Em 24/04/2020 em 16:42, adrianokk disse:

onde bota como melhor tópico e como resolvido ? xD

Haha, faz muitos anos que eu não crio um post, mas acho que é clicando no troféu.