nociam 90 Postado Maio 19, 2015 Share Postado Maio 19, 2015 Existe alguma funçao pra pegar todos os monstro que estão com target no meu monstro em uma area sem estar com target neles e claro?Por quero fazer uma magia aonde vai ir um efeito ate eles e ai vai trazer eles pra cima de min. Link para o comentário https://xtibia.com/forum/topic/234004-target-em-area/ Compartilhar em outros sites More sharing options...
0 zipter98 1102 Postado Maio 21, 2015 Share Postado Maio 21, 2015 (editado) A função em si está funcionando perfeitamente. Provavelmente você está testando-a sem um summon. Remova isso: print(getCreatureName(pid).." - "..isPlayer(pid) and "player" or isMonster(pid) and "monster" or isSummon(pid) and "summon" or "npc") e troque: local targeting = getMonstersTargetingCid(getCreatureSummons(cid)[1], 5, 5) --Área de dimensão 5x5 SQMs. por: local targeting = getMonstersTargetingCid(cid, 5, 5) --Área de dimensão 5x5 SQMs. Assim, serão verificados os monstros que estão atacando você, o jogador. Ah, e também uma pequena falta de atenção minha: Troque: print(getCreatureName(targeting).." is targeting your summon.") por: print(getCreatureName(pid).." is targeting your summon.") Editado Maio 21, 2015 por zipter98 Link para o comentário https://xtibia.com/forum/topic/234004-target-em-area/#findComment-1652244 Compartilhar em outros sites More sharing options...
0 zipter98 1102 Postado Maio 19, 2015 Share Postado Maio 19, 2015 (editado) Sendo x e y as dimensões da área e cid, logicamente, a criatura sob a qual a função será executada: function getMonstersTargetingCid(cid, x, y) if not isCreature(cid) then return false end local spec, uid = getSpectators(getThingPos(cid), tonumber(x) or 1, tonumber(y) or 1), {} for _, pid in pairs(spec) do if pid ~= cid and isMonster(pid) and getCreatureTarget(pid) == cid then table.insert(uid, pid) end end return uid end Exemplo de uso: local targeting = getMonstersTargetingCid(getCreatureSummons(cid)[1], 5, 5) --Área de dimensão 5x5 SQMs. if targeting and #targeting > 0 then for _, pid in pairs(targeting) do print(getCreatureName(pid).." is targeting your summon.") end else print("There's no monsters targeting your summon.") end Editado Maio 21, 2015 por zipter98 Link para o comentário https://xtibia.com/forum/topic/234004-target-em-area/#findComment-1652052 Compartilhar em outros sites More sharing options...
0 nociam 90 Postado Maio 20, 2015 Autor Share Postado Maio 20, 2015 fiz o teste mais ele sempre retorna print("There's no monsters targeting your summon.")? Link para o comentário https://xtibia.com/forum/topic/234004-target-em-area/#findComment-1652065 Compartilhar em outros sites More sharing options...
0 zipter98 1102 Postado Maio 20, 2015 Share Postado Maio 20, 2015 Alguns servidores têm problemas com o isMonster. Talvez seja o caso do seu. Tente esta versão: function getMonstersTargetingCid(cid, x, y) if not isCreature(cid) then return false end local spec, uid = getSpectators(getThingPos(cid), tonumber(x) or 1, tonumber(y) or 1), {} for _, pid in pairs(spec) do if pid ~= cid and not isPlayer(pid) and getCreatureTarget(pid) == cid then table.insert(uid, pid) end end return uid end Link para o comentário https://xtibia.com/forum/topic/234004-target-em-area/#findComment-1652067 Compartilhar em outros sites More sharing options...
0 nociam 90 Postado Maio 20, 2015 Autor Share Postado Maio 20, 2015 Nao foi ainda. Link para o comentário https://xtibia.com/forum/topic/234004-target-em-area/#findComment-1652079 Compartilhar em outros sites More sharing options...
0 zipter98 1102 Postado Maio 20, 2015 Share Postado Maio 20, 2015 Use este código e informe o que for imprimido no console: function getMonstersTargetingCid(cid, x, y) if not isCreature(cid) then return false end local spec, uid = getSpectators(getThingPos(cid), tonumber(x) or 1, tonumber(y) or 1), {} for _, pid in pairs(spec) do print(getCreatureName(pid).." - "..isPlayer(pid) and "player" or isMonster(pid) and "monster" or isSummon(pid) and "summon" or "npc") if pid ~= cid and not isPlayer(pid) and getCreatureTarget(pid) == cid then table.insert(uid, pid) end end return uid end Link para o comentário https://xtibia.com/forum/topic/234004-target-em-area/#findComment-1652141 Compartilhar em outros sites More sharing options...
0 nociam 90 Postado Maio 21, 2015 Autor Share Postado Maio 21, 2015 retorno There's no monsters targeting your summon. jeito que coloquei na magia : function getMonstersTargetingCid(cid, x, y)if not isCreature(cid) thenreturn falseendlocal spec, uid = getSpectators(getThingPos(cid), tonumber(x) or 1, tonumber(y) or 1), {}for _, pid in pairs(spec) doprint(getCreatureName(pid).." - "..isPlayer(pid) and "player" or isMonster(pid) and "monster" or isSummon(pid) and "summon" or "npc")if pid ~= cid and not isPlayer(pid) and getCreatureTarget(pid) == cid thentable.insert(uid, pid)endendreturn uidendlocal targeting = getMonstersTargetingCid(getCreatureSummons(cid)[1], 5, 5) --Área de dimensão 5x5 SQMs.if targeting and #targeting > 0 thenfor _, pid in pairs(targeting) doprint(getCreatureName(targeting).." is targeting your summon.")endelseprint("There's no monsters targeting your summon.") end Link para o comentário https://xtibia.com/forum/topic/234004-target-em-area/#findComment-1652191 Compartilhar em outros sites More sharing options...
0 nociam 90 Postado Maio 21, 2015 Autor Share Postado Maio 21, 2015 (editado) Obrigado agora posso fazer as magia que quero. [21/05/2015 14:49:11] Charizard is targeting your summon. Então ela funfo mas quero lhe pedir mais uma coisa como não tinha essa função tive que fazer uma gambiarra utilizando uma magia que tinha no servidor se pode dar uma olhada e me dizer qual delas fica mais estavel o le mais rapido ja que a sua foi usado for e a que tenho foi while preciso de uma luz de quem conhece do assunto pra me iluminar. minha magia local pos = getPosfromArea(cid, MilkDrink)local n = 0while n < #pos don = n+1thing = {x=pos[n].x,y=pos[n].y,z=pos[n].z,stackpos=253}local pid = getThingFromPosWithProtect(thing)if isCreature(pid) thenif isSummon(cid) and (isSummon(pid) or isPlayer(pid)) thenif canAttackOther(cid, pid) == "Can" thenaddEvent(sendEffWithProtect, 100, cid, pos[n], 694)doDanoWithProtect(cid, STEELDAMAGE, pos[n], MilkDrink, -min, -max, 0)sendDistanceShootWithProtect(cid, getThingPosWithDebug(cid), getThingPosWithDebug(pid), 85)endelseif ehMonstro(cid) or ehMonstro(pid) thenaddEvent(sendEffWithProtect, 100, cid, pos[n], 694)doDanoWithProtect(cid, STEELDAMAGE, pos[n], MilkDrink, -min, -max, 0)sendDistanceShootWithProtect(cid, getThingPosWithDebug(cid), getThingPosWithDebug(pid), 85)endend end com a sua função local targeting = getMonstersTargetingCid(cid, 10, 10) --Área de dimensão 5x5 SQMs.if targeting and #targeting > 0 thenfor _, pid in pairs(targeting) doaddEvent(sendEffWithProtect, 100, cid, getThingPosWithDebug(pid), 694)doDanoWithProtect(cid, STEELDAMAGE, getThingPosWithDebug(pid), MilkDrink, -min, -max, 0)sendDistanceShootWithProtect(cid, getThingPosWithDebug(cid), getThingPosWithDebug(pid), 85)endelsesendEffWithProtect(cid, getThingPosWithDebug(cid), 694) end Editado Maio 21, 2015 por nociam Link para o comentário https://xtibia.com/forum/topic/234004-target-em-area/#findComment-1652246 Compartilhar em outros sites More sharing options...
0 zipter98 1102 Postado Maio 21, 2015 Share Postado Maio 21, 2015 (editado) A versão que gasta menos memória é a segunda. Digo isso julgando tanto os códigos apresentados quanto as funções utilizadas. Editado Maio 21, 2015 por zipter98 Link para o comentário https://xtibia.com/forum/topic/234004-target-em-area/#findComment-1652283 Compartilhar em outros sites More sharing options...
0 Furabio 258 Postado Maio 25, 2015 Share Postado Maio 25, 2015 Tópico resolvido ? se sim marque o post que mais te ajudou como melhor resposta. You see!~ Tópico movido para a seção de dúvidas e pedidos resolvidos. Link para o comentário https://xtibia.com/forum/topic/234004-target-em-area/#findComment-1652641 Compartilhar em outros sites More sharing options...
Pergunta
nociam 90
Existe alguma funçao pra pegar todos os monstro que estão com target no meu monstro em uma area sem estar com target neles e claro?Por quero fazer uma magia aonde vai ir um efeito ate eles e ai vai trazer eles pra cima de min.
Link para o comentário
https://xtibia.com/forum/topic/234004-target-em-area/Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados