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...
- Fórum
- xTibia - Notícias e Suporte
- Soluções
- Archived
- Projeto Tutores de Scripting
info
Grupo: Campones
Registrado: 16/04/13
Posts: 44
Reputação: +2

Editado Abril 20 por BreisPodeu
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 26 por Mazynho
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
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.
negativo, tem como tu configurar tudo em lua, é so tirar as mensagem de greeting do xmlValeu 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
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 etcPode 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
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 por Mazynho
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 por dalvorsn
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.
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 nissoFiz 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.
info
Grupo: Campones
Registrado: 08/04/09
Posts: 60
Reputação: +1
Char no Tibia: Johnnie Skyrim

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á!
info
Grupo: Conde
Registrado: 29/04/09
Posts: 904
Reputação: +389
Char no Tibia: Jabuti Selvagem

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.
info
Grupo: Campones
Registrado: 08/04/09
Posts: 60
Reputação: +1
Char no Tibia: Johnnie Skyrim

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



info
Grupo: Campones
Registrado: 06/11/13
Posts: 99
Reputação: +2
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 endEDIT: Usei o código que você disse e a variável count está com valor nulo (nill)
Editado Abril 20 por Mazynho