Ir para conteúdo
  • 0

Script incompleto (ajudem a completar)


wevertonvrb

Pergunta

esse script solta um efeito no corpo do monstro quando o monstro dropa determinados itens
porem o efeito é rapido eu gostaria de adicionar uma especie de timer ou replay fazendo com que o efeito se repita por 10 segundos eis o script
 

Spoiler

local items = {11447,11446,12245}     
local effect = 169                                 
local function func(cid, position, corpseid, effect)
      if not isCreature(cid) then return true end
      local corpse = getTileItemById(position, corpseid).uid
      if corpse <= 1 then return end
      if not isContainer(corpse) then return true end
      for slot = 0, (getContainerSize(corpse)-1) do
          local item = getContainerItem(corpse, slot)
          if item.uid <= 1 then return end
          if isInArray(items,item.itemid) then
             return doSendMagicEffect(position, effect)
        
             end
      end
end
function onKill(cid, target, lastHit)

    if not ehMonstro(target) then return true end
    local corpse = getMonsterInfo(getCreatureName(target)).lookCorpse
    
    addEvent(func, 5, getCreatureSummons(cid)[1], getThingPos(target), corpse, effect)
return true
end

 

@Poccnn forcinha amor?

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

o erro do seu script está em quando ele tenta pegar o corpse.

 

na minha visao nao tem como fazer isso com onkill, mas tem como fazer com ondeath, porque a ondeath já fornece o corpse como um de seus parametros


 

function onDeath(cid, corpse, deathList)    if not ehMonstro(cid) then return true end        addEvent(func, 5, getCreatureSummons(deathList[1])[1], getThingPos(cid), corpse, effect)return trueend 

se nao der certo tenta trocar por

 

    addEvent(func, 5, getCreatureSummons(deathList[1])[1], getThingPos(cid), corpse.uid, effect)

é necessário registrar o creatureEvent nos monsters que vão ativar o script quando morrerem

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

  • 0
7 hours ago, Eskylo said:

o erro do seu script está em quando ele tenta pegar o corpse.

 

na minha visao nao tem como fazer isso com onkill, mas tem como fazer com ondeath, porque a ondeath já fornece o corpse como um de seus parametros

 

 

function onDeath(cid, corpse, deathList)    if not ehMonstro(cid) then return true end        addEvent(func, 5, getCreatureSummons(deathList[1])[1], getThingPos(cid), corpse, effect)return trueend 

se nao der certo tenta trocar por

 

    addEvent(func, 5, getCreatureSummons(deathList[1])[1], getThingPos(cid), corpse.uid, effect)

é necessário registrar o creatureEvent nos monsters que vão ativar o script quando morrerem

Pelo que entendi o script já funciona, ele só quer fazer o efeito se repetir por 10 segundos.

function replayEffect(pos, eff, count)

i = count or 0

if i >= 10 then return end

doSendMagicEffect(position, effect)

replayEffect(pos, eff, i+1)

end

 

Troca

return doSendMagicEffect(position, effect) por return replayEffect(position, effect) e ajusta onde eu coloquei 10 pra um número que satisfaça o tempo que você deseja.

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Skulls disse:

Pelo que entendi o script já funciona, ele só quer fazer o efeito se repetir por 10 segundos.

function replayEffect(pos, eff, count)

i = count or 0

if i >= 10 then return end

doSendMagicEffect(position, effect)

replayEffect(pos, eff, i+1)

end

 

Troca

return doSendMagicEffect(position, effect) por return replayEffect(position, effect) e ajusta onde eu coloquei 10 pra um número que satisfaça o tempo que você deseja.

 

Realmente! Eu li o tópico quando tava com sono '-' Quem fez o script pensou em uma manobra pra pegar o uid do corpse e deu certo, mas tem uma pequena chance de bugar se tiver 2 corpses iguais um em cima do outro eu acho, talvez não se a  getTileItemById pegar sempre o top item.

 

O script que você postou ficou bom, acho que só faltou o addEvent pros effects não sairem todos ao mesmo tempo:

 

 

addEvent(replayEffect, (i+1)*1000, pos, eff, i+1)

Ficando

local items = {11447,11446,12245}     local effect = 169function replayEffect(pos, eff, count)i = count or 0if i >= 10 then return enddoSendMagicEffect(position, effect)addEvent(replayEffect, (i+1)*1000, pos, eff, i+1)endlocal function func(cid, position, corpseid, effect)      if not isCreature(cid) then return true end      local corpse = getTileItemById(position, corpseid).uid      if corpse <= 1 then return end      if not isContainer(corpse) then return true end      for slot = 0, (getContainerSize(corpse)-1) do          local item = getContainerItem(corpse, slot)          if item.uid <= 1 then return end          if isInArray(items,item.itemid) then             return replayEffect(position, effect)                     end      endendfunction onKill(cid, target, lastHit)    if not ehMonstro(target) then return true end    local corpse = getMonsterInfo(getCreatureName(target)).lookCorpse        addEvent(func, 5, getCreatureSummons(cid)[1], getThingPos(target), corpse, effect)return trueend

 

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

  • 0
Em 26/06/2016 at 10:08, Poccnn disse:

Gazela! Você está de volta. Só uma perguntinha; foi você quem que fez esse script? 

 

mais ou menos amor eu n sei quase nada de script mas fico pegando pedaços de varios scripts montando algo que eu queira rsrsrs

eu consegui deixar deste jeito ai, mas como vc sabe eu pesso muita ajuda com timer e isso tb n deixar de ser uma especie de timer

acredito que o da garota deva funcionar irei testar assim q possivel

Link para o comentário
Compartilhar em outros sites

  • 0
On 26/06/2016 at 10:53 AM, Eskylo said:

 

Realmente! Eu li o tópico quando tava com sono '-' Quem fez o script pensou em uma manobra pra pegar o uid do corpse e deu certo, mas tem uma pequena chance de bugar se tiver 2 corpses iguais um em cima do outro eu acho, talvez não se a  getTileItemById pegar sempre o top item.

 

O script que você postou ficou bom, acho que só faltou o addEvent pros effects não sairem todos ao mesmo tempo:

 

 

addEvent(replayEffect, (i+1)*1000, pos, eff, i+1)

Ficando

local items = {11447,11446,12245}     local effect = 169function replayEffect(pos, eff, count)i = count or 0if i >= 10 then return enddoSendMagicEffect(position, effect)addEvent(replayEffect, (i+1)*1000, pos, eff, i+1)endlocal function func(cid, position, corpseid, effect)      if not isCreature(cid) then return true end      local corpse = getTileItemById(position, corpseid).uid      if corpse <= 1 then return end      if not isContainer(corpse) then return true end      for slot = 0, (getContainerSize(corpse)-1) do          local item = getContainerItem(corpse, slot)          if item.uid <= 1 then return end          if isInArray(items,item.itemid) then             return replayEffect(position, effect)                     end      endendfunction onKill(cid, target, lastHit)    if not ehMonstro(target) then return true end    local corpse = getMonsterInfo(getCreatureName(target)).lookCorpse        addEvent(func, 5, getCreatureSummons(cid)[1], getThingPos(target), corpse, effect)return trueend

 

Tem razao, tava no celular esqueci de por o addEvent, mas é isso ai mesmo.

 

Abraços,

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...