Mazynho 2 Postado Abril 20, 2014 Share Postado Abril 20, 2014 (editado) Você quer pegar um item e ver a quantidade de stacks que tem? Ou checar vários items separados no chão e contar quantos tem? Se for contar quantos stacks tem de um item no chão (por exemplo pegar um monte de gold e contar quantos tem) você pode simplesmente fazer: item = getTileItemById({x = 209, y = 144, z = 6}, itemid) if isItemStackable(item.id) then count = item.type end Aí você vai conseguir ter a quantidade de stacks.. Mas se você quiser pegar a quantidade de items "não-juntáveis" você vai ter que utilizar um for alterando o stackpos desde STACKPOS_GROUND até STACKPOS_TOP_MOVABLE_ITEM_OR_CREATURE e daí ir utilizando a função getThingFromPos(pos).. E além disso pode usar o .type pra ir pegando a quantidade de cada um desses items.. Espero ter ajudado =) Você quer dizer para eu fazer assim: local count = 0 for X = 0, 255 do item = getTileItemById({x = 209, y = 144, z = 6, stackpos = X}, itemid) if isItemStackable(item.id) then count = count + item.type end end EDIT: Usei o código que você disse e a variável count está com valor nulo (nill) Editado Abril 20, 2014 por Mazynho Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1639303 Compartilhar em outros sites More sharing options...
BreisPodeu 2 Postado Abril 20, 2014 Share Postado Abril 20, 2014 (editado) Cara, usa a função getThingFromPos.. Daí se quiser um item específico, teste o id do item que vc pegar e daí sim vc pega o count... Editado Abril 20, 2014 por BreisPodeu Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1639370 Compartilhar em outros sites More sharing options...
Mazynho 2 Postado Abril 26, 2014 Share Postado Abril 26, 2014 (editado) Galera poderiam tirar estas minhas três duvidas aqui: 1º - Quanto ao stackpos, se em um tile tiver 300 itens, por exemplo, qual será o stackpos dos itens 256 a 300?, pois até onde sei o stackpos só vai até 255. 2º - Como que faço para quando um player falar hi, o npc verificar se o player possui level 100, por exemplo, e caso tenha fale tal mensagem, pois colocando uma condição no inicio do script do npc ele só verifica depois que o player digitar hi teclar enter e digitar outra coisa e teclar enter. Ex: player: hi NPC: if getPlayerLevel(cid) == 100 then selfsay("E aew", cid) else selfsay("Fala noob", cid) end ... 3º - Qual a função para saber se um diretório existe? Ex: directoryExists("C:/teste.exe") retorna true/false (directoryExists, nome utilizado para exemplificar.) Editado Abril 27, 2014 por Mazynho Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1642247 Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Abril 27, 2014 Share Postado Abril 27, 2014 Galera poderiam tirar estas minhas três duvidas aqui: 1º - Quanto ao stackpos, se em um tile tiver 300 itens, por exemplo, qual será o stackpos dos itens 256 a 300?, pois até onde sei o stackpos só vai até 255. 2º - Como que faço para quando um player falar hi, o npc verificar se o player possui level 100, por exemplo, e caso tenha fale tal mensagem, pois colocando uma condição no inicio do script do npc ele só verifica depois que o player digitar hi teclar enter e digitar outra coisa e teclar enter. Ex: player: hi NPC: if getPlayerLevel(cid) == 100 then selfsay("E aew", cid) else selfsay("Fala noob", cid) end ... 3º - Qual a função para saber se um diretório existe?Ex: directoryExists("C:/teste.exe") retorna true/false (directoryExists, nome utilizado para exemplificar.) provavelmente quando ultrapassar o limite ou ele nao vai deixar add mais, ou vai apagar os debaixo, acho mais provavel apagar os de baixo if getPlayerLevel >= 100 then E tu quer saber de diretorio ou arquivos? são coisas diferentes Bem, de qualquer modo, nativamente e forma limpa não tem um meio, há sim varias gambiarras, vou citar uma delas aqui: function exists(name) if type(name)~="string" then return false end return os.rename(name,name) and true or false end function isFile(name) if type(name)~="string" then return false end if not exist(name) then return false end local f = io.open(name) if f then f:close() return true end return false end function isDir(name) return (exist(name) and not isFile(name)) end Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1642374 Compartilhar em outros sites More sharing options...
Mazynho 2 Postado Abril 27, 2014 Share Postado Abril 27, 2014 provavelmente quando ultrapassar o limite ou ele nao vai deixar add mais, ou vai apagar os debaixo, acho mais provavel apagar os de baixo if getPlayerLevel >= 100 then E tu quer saber de diretorio ou arquivos? são coisas diferentes Bem, de qualquer modo, nativamente e forma limpa não tem um meio, há sim varias gambiarras, vou citar uma delas aqui: function exists(name) if type(name)~="string" then return false end return os.rename(name,name) and true or false end function isFile(name) if type(name)~="string" then return false end if not exist(name) then return false end local f = io.open(name) if f then f:close() return true end return false end function isDir(name) return (exist(name) and not isFile(name)) end Valeu Davorsn, mechendo eu cheguei nessa gambiarra de saber se existe renomeando com o proprio nome kkkkkk, agora a 2º duvida colocando a condição no script do npc só funciona depois que o player fala hi e depois fale qualquer coisa, apenas falando hi ele só executa os comandos do .xml. Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1642421 Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Abril 27, 2014 Share Postado Abril 27, 2014 Valeu Davorsn, mechendo eu cheguei nessa gambiarra de saber se existe renomeando com o proprio nome kkkkkk, agora a 2º duvida colocando a condição no script do npc só funciona depois que o player fala hi e depois fale qualquer coisa, apenas falando hi ele só executa os comandos do .xml.negativo, tem como tu configurar tudo em lua, é so tirar as mensagem de greeting do xml Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1642493 Compartilhar em outros sites More sharing options...
Mazynho 2 Postado Abril 27, 2014 Share Postado Abril 27, 2014 negativo, tem como tu configurar tudo em lua, é so tirar as mensagem de greeting do xml Pode min dizer como faço então? Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1642569 Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Abril 28, 2014 Share Postado Abril 28, 2014 Pode min dizer como faço então?acabei de falar, "é só tirar as mensagens de greeting do xml", dai na callback onSay do npc tu faz normal, como os npcs mais antigos aquele msgcontains e etc Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1642842 Compartilhar em outros sites More sharing options...
Mazynho 2 Postado Abril 28, 2014 Share Postado Abril 28, 2014 (editado) acabei de falar, "é só tirar as mensagens de greeting do xml", dai na callback onSay do npc tu faz normal, como os npcs mais antigos aquele msgcontains e etc Dalvorsn olha o que fiz: Dexei o .xml desta como este exemplo: <?xml version="1.0" encoding="UTF-8"?> <npc name="exemplo" script="exemplo.lua" walkinterval="2000" floorchange="0" access="5" level="1" maglevel="1"> <health now="150" max="150"/> <look type="33" head="0" body="0" legs="0" feet="0" addons="0"/> </npc> e no .lua assim: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'hi') and getPlayerLevel(cid) <= 100 then selfSay("FALA noob", cid) else selfSay("Ola ".. getCreatureName(cid) .."! como vai?", cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Porém não funcionou como esperado, quando falo hi o npc fala: Welcome, test! I have been expecting you. e só entra na condição se falar hi novamente. Pode min ajudar? Editado Abril 28, 2014 por Mazynho Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1642992 Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Abril 28, 2014 Share Postado Abril 28, 2014 (editado) Usa somente as callbacks do npc, nao usa o jiddo system function onCreatureAppear(cid) --aqui e quando player chega perto end function onCreatureDisappear(cid) -- aqui e quando o player se afasta da visao do npc end function onCreatureSay(cid, type, msg) -- aqui e quando o player fala, e aqui que tem que fazer o msg container, do jeito que tu tava --fazendo no primeiro hi ele nao chamava sua funcao ele tava chamando a --callback do jiddo end function onThink() -- aqui e a callback que executa de tempos em tempos, nao sei dizer de quantos --emquantos segundos, mas deve ter configuracao pra isso no xml end Editado Abril 28, 2014 por dalvorsn Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1643071 Compartilhar em outros sites More sharing options...
Mazynho 2 Postado Abril 29, 2014 Share Postado Abril 29, 2014 Usa somente as callbacks do npc, nao usa o jiddo system function onCreatureAppear(cid) --aqui e quando player chega perto end function onCreatureDisappear(cid) -- aqui e quando o player se afasta da visao do npc end function onCreatureSay(cid, type, msg) -- aqui e quando o player fala, e aqui que tem que fazer o msg container, do jeito que tu tava --fazendo no primeiro hi ele nao chamava sua funcao ele tava chamando a --callback do jiddo end function onThink() -- aqui e a callback que executa de tempos em tempos, nao sei dizer de quantos --emquantos segundos, mas deve ter configuracao pra isso no xml end Fiz o que você falou, porém eu perco as funcionalidades do jiddo system, por exemplo ele só continua falando com o npc se eu colocar isso dentro da onCreatureSay: npcHandler:onCreatureSay(cid, type, msg) e quando coloco isso ele fala: Welcome, test! I have been expecting you, e se eu ficar falando hi ele fica repetindo o bloco de comandos. Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1643186 Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Abril 29, 2014 Share Postado Abril 29, 2014 Fiz o que você falou, porém eu perco as funcionalidades do jiddo system, por exemplo ele só continua falando com o npc se eu colocar isso dentro da onCreatureSay: npcHandler:onCreatureSay(cid, type, msg) e quando coloco isso ele fala: Welcome, test! I have been expecting you, e se eu ficar falando hi ele fica repetindo o bloco de comandos.Se tu quer usar a lib do jiddo system leia e aprenda como usá-la, os arquivos dela estão todos no pasta de npcs do seu servidor, va lendo aos poucos e testando, sem duvidas ela tem muita funcionalidades, mas sinceramente acho muito mais versátil e livre fazer diretamente com as callbacks, voce com uma tabela simples faz o talkstate, e as falas por ifs, não tem misterio nenhum nisso Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1643216 Compartilhar em outros sites More sharing options...
Zaroth1 1 Postado Maio 15, 2015 Share Postado Maio 15, 2015 Pessoal, tenho uma dúvida.. To criando um script, que quando o player usa um certo item, que no meu caso é o Mead Horn (7140) em um parede congelada com um Mammoth (7294) Ele é teletransportado 2 sqm pra trás, e nasce um Mammoth. Logo após nascer o Mammoth, a parede teria que sumir, e ficar uma parede congelada normal.. E por fim, o player recebe um storage, e nao pode mais usar o item naquela parede.. Meu script ta só no começo, e eu nao consegui que a creature surgisse: function onUse(cid, item, fromPosition, itemEx, toPosition) local pos = {x= 1087,y= 1010,z= 7} if itemEx.itemid == 7294 then doTeleportThing(cid, pos) doSendMagicEffect(getPlayerPosition(cid), 10) else doPlayerSendCancel(cid, "You are using item in the wrong place.") end return TRUE end Agradeço desde já! Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1651520 Compartilhar em outros sites More sharing options...
Killua 389 Postado Maio 15, 2015 Autor Share Postado Maio 15, 2015 Oi amigo, qual é a sua dúvida? Para criar um monstro vc pode usar a função doCreateMonster(name, pos) E uma outra dica é não se acostumar a usar o TRUE. Ele não existe na linguagem LUA e não é reconhecido por ela já que ela é case sensitive. Ele só funciona em OTs pois é declarada a variável global TRUE em alguma lib. Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1651549 Compartilhar em outros sites More sharing options...
Zaroth1 1 Postado Maio 15, 2015 Share Postado Maio 15, 2015 Certo, eu posso retirar o TRUE então? Ficou assim, mas não funcionou ainda: function onUse(cid, item, fromPosition, itemEx, toPosition) local pos = {x= 1087,y= 1010,z= 7} if itemEx.itemid == 7294 then doTeleportThing(cid, pos) doSendMagicEffect(getPlayerPosition(cid), 10) doCreateMonster(Mammoth, pos) else doPlayerSendCancel(cid, "You are using item in the wrong place.") end return end Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/13/#findComment-1651558 Compartilhar em outros sites More sharing options...
Posts Recomendados