Postado Fevereiro 5, 2020 5 anos tenta usar doSummonCreature(var.name, pos) e esse monstro vc consegue criar pelo /m ? [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Fevereiro 5, 2020 5 anos Autor @Vodkart sim, consigo summonar ele com o /m. Está funcionando com as duas funções, o script cria o monstro, mas continua persistindo o erro. Acredito que o monstro não está sendo verificado se pode ser criado em paredes ou não, quando o script escolhe alguma area aberta o monstro cria normal. Acho que não esta sendo verificado, estou certo?
Postado Fevereiro 5, 2020 5 anos Solução @hiquezerah está sendo verificado sim amigo, na área que escolheu, está tudo sendo no mapper editor? vc consegue criar o monstro lá nessa area com o /m? usa assim: local create_tab = { area = {{x=2795,y=879,z=7}, {x=2799,y=886,z=7}}, -- começo e fim items = { {chance = 50, itemid = 2173, amount = 1}, {chance = 10, itemid = 2494, amount = 1}, {chance = 100, itemid = 2159, amount = 20}, {chance = 100, itemid = 2160, amount = 100}, {chance = 100, name = "Gerador"}, -- monster name {chance = 100, itemid = 1111, amount = 1, actionID = 26008} -- uma chest por exemplo } } function isWalkable(pos) -- by Nord / editado por Omega if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false elseif isCreature(getTopCreature(pos).uid) then return false elseif getTileInfo(pos).protection then return false elseif hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7) then return false end return true end function doAddItenFromMap() local pos = {x= math.random(create_tab.area[1].x,create_tab.area[2].x), y=math.random(create_tab.area[1].y,create_tab.area[2].y), z=create_tab.area[1].z} local var = create_tab.items[math.random(#create_tab.items)] if isWalkable(pos) and var.chance > math.random(1, 100) then if var.name ~= nil then doCreateMonster(var.name, pos, false, true) doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA) doSendMagicEffect(pos, CONST_ME_MORTAREA) else local ret = doCreateItem(var.itemid, var.amount, pos) if var.actionID ~= nil then doItemSetAttribute(ret, "aid", var.actionID) end end else doAddItenFromMap() end end function onThink(cid, interval, lastExecution) doAddItenFromMap() return true end Editado Fevereiro 5, 2020 5 anos por Vodkart (veja o histórico de edições) [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Fevereiro 5, 2020 5 anos Opa, desculpe não ter retornado, ontem eu acabei tendo alguns projetos e não consegui entrar aqui direito, mas que bom que deu certo. Em relação ao erro do monster eu acredito que nenhum dos dois está sendo verificado se é parede ou não, estou testando umas funções para ver se consigo chegar a um check se é parede ou não e te passo Oi, tenta esse script: local create_tab = { area = {{x=2795,y=879,z=7}, {x=2799,y=886,z=7}}, -- começo e fim items = { {chance = 50, itemid = 2173, amount = 1}, {chance = 10, itemid = 2494, amount = 1}, {chance = 100, itemid = 2159, amount = 20}, {chance = 100, itemid = 2160, amount = 100}, {chance = 100, name = "Gerador"}, -- monster name {chance = 100, itemid = 1111, amount = 1, actionID = 26008} -- uma chest por exemplo } } function isWalkable(pos) -- by Nord / editado por Omega if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false elseif isCreature(getTopCreature(pos).uid) then return false elseif getTileInfo(pos).protection then return false elseif hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7) then return false end return true end function doAddItenFromMap() local var = create_tab.items[math.random(#create_tab.items)] local pos = RetornarPosicao() if var.chance > math.random(1, 100) then if var.name ~= nil then CriarMonstroPos(var.name, pos) else local ret = doCreateItem(var.itemid, var.amount, pos) if var.actionID ~= nil then doItemSetAttribute(ret, "aid", var.actionID) end end else doAddItenFromMap() end end function RetornarPosicao() local pos = {x= math.random(create_tab.area[1].x,create_tab.area[2].x), y=math.random(create_tab.area[1].y,create_tab.area[2].y), z=create_tab.area[1].z} if isWalkable(pos) == true then return pos else return RetornarPosicao() end end ---- Novo --- o Distro continuará dando o erro, porém se o monstro não for criado ele tentará criar em outra posição function CriarMonstroPos(Nome, pos) -- Eu testei esse método, por algum motivo quando da erro, o doCreateMonster(..) retorna true rsrs... if doCreateMonster(Nome, pos) == true then -- Caso de erro e o montro não seja criado, o método será chamado novamente doBroadcastMessage("Não criou", 20) -- Depois de testar, comenta essa linha, ela servira de indicação para você ver se quando não cria, ele cai aqui CriarMonstroPos(Nome, RetornarPosicao()) -- Tentar recriar o monstro passando nova posição return false end doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA) doSendMagicEffect(pos, CONST_ME_MORTAREA) end function onThink(cid, interval, lastExecution) doAddItenFromMap() return true end me retorna se mesmo dando o erro do monstro não sendo criado, ele criou em outra pos. Editado Fevereiro 5, 2020 5 anos por Pokemon Nox Oficial (veja o histórico de edições)
Postado Fevereiro 18, 2020 5 anos Autor Em 05/02/2020 em 08:52, Pokemon Nox Oficial disse: Opa, desculpe não ter retornado, ontem eu acabei tendo alguns projetos e não consegui entrar aqui direito, mas que bom que deu certo. Em relação ao erro do monster eu acredito que nenhum dos dois está sendo verificado se é parede ou não, estou testando umas funções para ver se consigo chegar a um check se é parede ou não e te passo Oi, tenta esse script: local create_tab = { area = {{x=2795,y=879,z=7}, {x=2799,y=886,z=7}}, -- começo e fim items = { {chance = 50, itemid = 2173, amount = 1}, {chance = 10, itemid = 2494, amount = 1}, {chance = 100, itemid = 2159, amount = 20}, {chance = 100, itemid = 2160, amount = 100}, {chance = 100, name = "Gerador"}, -- monster name {chance = 100, itemid = 1111, amount = 1, actionID = 26008} -- uma chest por exemplo } } function isWalkable(pos) -- by Nord / editado por Omega if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false elseif isCreature(getTopCreature(pos).uid) then return false elseif getTileInfo(pos).protection then return false elseif hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7) then return false end return true end function doAddItenFromMap() local var = create_tab.items[math.random(#create_tab.items)] local pos = RetornarPosicao() if var.chance > math.random(1, 100) then if var.name ~= nil then CriarMonstroPos(var.name, pos) else local ret = doCreateItem(var.itemid, var.amount, pos) if var.actionID ~= nil then doItemSetAttribute(ret, "aid", var.actionID) end end else doAddItenFromMap() end end function RetornarPosicao() local pos = {x= math.random(create_tab.area[1].x,create_tab.area[2].x), y=math.random(create_tab.area[1].y,create_tab.area[2].y), z=create_tab.area[1].z} if isWalkable(pos) == true then return pos else return RetornarPosicao() end end ---- Novo --- o Distro continuará dando o erro, porém se o monstro não for criado ele tentará criar em outra posição function CriarMonstroPos(Nome, pos) -- Eu testei esse método, por algum motivo quando da erro, o doCreateMonster(..) retorna true rsrs... if doCreateMonster(Nome, pos) == true then -- Caso de erro e o montro não seja criado, o método será chamado novamente doBroadcastMessage("Não criou", 20) -- Depois de testar, comenta essa linha, ela servira de indicação para você ver se quando não cria, ele cai aqui CriarMonstroPos(Nome, RetornarPosicao()) -- Tentar recriar o monstro passando nova posição return false end doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA) doSendMagicEffect(pos, CONST_ME_MORTAREA) end function onThink(cid, interval, lastExecution) doAddItenFromMap() return true end me retorna se mesmo dando o erro do monstro não sendo criado, ele criou em outra pos. Olá amigo, agradeço pela ajuda e peço desculpas por não responder antes. Eu acabei viajando e estou sem acesso a minha maquina, no momento não consigo testar para ti. Mas antes de sair eu tinha conseguido arrumar uma forma que estava sendo funcional para mim, tirei o monstro da tabela e coloquei um item qualquer, adicionei uma action para quando clicarem no item o monstro seria summonado. então está funcionado bem, obrigado mesmo! Em 05/02/2020 em 07:18, Vodkart disse: @hiquezerah está sendo verificado sim amigo, na área que escolheu, está tudo sendo no mapper editor? vc consegue criar o monstro lá nessa area com o /m? usa assim: local create_tab = { area = {{x=2795,y=879,z=7}, {x=2799,y=886,z=7}}, -- começo e fim items = { {chance = 50, itemid = 2173, amount = 1}, {chance = 10, itemid = 2494, amount = 1}, {chance = 100, itemid = 2159, amount = 20}, {chance = 100, itemid = 2160, amount = 100}, {chance = 100, name = "Gerador"}, -- monster name {chance = 100, itemid = 1111, amount = 1, actionID = 26008} -- uma chest por exemplo } } function isWalkable(pos) -- by Nord / editado por Omega if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false elseif isCreature(getTopCreature(pos).uid) then return false elseif getTileInfo(pos).protection then return false elseif hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7) then return false end return true end function doAddItenFromMap() local pos = {x= math.random(create_tab.area[1].x,create_tab.area[2].x), y=math.random(create_tab.area[1].y,create_tab.area[2].y), z=create_tab.area[1].z} local var = create_tab.items[math.random(#create_tab.items)] if isWalkable(pos) and var.chance > math.random(1, 100) then if var.name ~= nil then doCreateMonster(var.name, pos, false, true) doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA) doSendMagicEffect(pos, CONST_ME_MORTAREA) else local ret = doCreateItem(var.itemid, var.amount, pos) if var.actionID ~= nil then doItemSetAttribute(ret, "aid", var.actionID) end end else doAddItenFromMap() end end function onThink(cid, interval, lastExecution) doAddItenFromMap() return true end @Vodkart Desculpe-me a demora para responder, eu acabei viajando e não estou com acesso a maquina. Acabei não lembrando de voltar aqui e falar que eu consegui fazer que o script funcionasse de uma forma diferente, mas queria chegaria ao objetivo que eu tinha. Eu tirei o monstro da tabela e coloquei mais um item, nele eu adicionei uma action para criar um monstro quando o item for usado. Obrigado pela ajuda irmão!
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.