Ir para conteúdo

zipter98

Membro
  • Registro em

  • Última visita

Tudo que zipter98 postou

  1. Se possível, poste a tabela flys, de configuration.lua (data/lib), e também informe o nome do pokémon ao qual você está montado ao deslogar. Aparentemente, você esqueceu de configurá-lo na tabela que mencionei.
  2. Antes de tudo: Não deve-se fazer isso em situações em que são checados os items de um container: for x=0, (getContainerSize(item.uid)) do Supondo que o container tenha 8 slots, o looping será executado 9 vezes (por começar no 0). Assim, seria verificado um slot que não existe, ocasionando um erro. Obs.: Os slots começam a ser contados no 0, e não no 1. O correto seria: for x=0, getContainerSize(item.uid) - 1 do A propósito, acho mais viável colocar um simples actionid na tag da action, ao invés dos ids das corpses dos pokémons. Aí, num onDeath, bastaria setar este aid na corpse. @topic O problema é o seguinte: ao remover um item da corpse, o seguinte passa a ocupar o slot do que foi removido. Por exemplo, na corpse de um Charizard encontra-se, no slot 0, 33 essences of fire, e no slot 1, 1 nail. Com este código de autoloot, ao remover as 33 essences of fire, o nail passa a ocupar o antigo slot das essences of fire (no caso, o slot 0). Assim, na próxima execução do looping, não haverá item algum no slot 1, causando o erro. Há algumas maneiras de corrigir isso. A que lhe recomendo seguir é a seguinte: Troque: for x=0, (getContainerSize(item.uid)) do local itens = getContainerItem(item.uid, x) --if isInArray(toloot, itens.itemid) then table.insert(items, {i=itens.itemid, q=itens.type}) doRemoveItem(itens.uid) --break --end end por: for x=0, getContainerSize(item.uid) - 1 do local itens = getContainerItem(item.uid, 0) --if isInArray(toloot, itens.itemid) then table.insert(items, {i=itens.itemid, q=itens.type}) doRemoveItem(itens.uid) --break --end end
  3. zipter98 postou uma resposta no tópico em Suporte Tibia OTServer
    É mais provável que, nos códigos das seguintes funções, não esteja sendo verificado se o jogador possui uma pokeball no slot. Se possível, poste o código delas (se encontram em algum lugar de data/lib). doUpdateMoves(cid) doUpdatePokemonsBar(cid) onPokeHealthChange(cid) doPlayerChangeModeIcon(cid)
  4. zipter98 postou uma resposta no tópico em Suporte Tibia OTServer
    Ao invés de repetir a função duas vezes, o melhor a se fazer seria colocá-la antes do if pegar <= 1*(b.catchrate) then
  5. ^ Tenta isso: <?xml version="1.0" encoding="UTF-8"?> <npc name="Papai Noel" script="papai_noel.lua" walkinterval="1500" speed="100" walkradius="2" floorchange="0"> <health max="100" now="100"/> <look type="160" head="0" body="113" legs="94" feet="132" addons="0" mount="0"/> <parameters> <!--MESSAGES--> <parameter key="message_greet" value="HO-HO-HO, |PLAYERNAME| bem-vindo. Voce gostaria de um presente?"/> <parameter key="message_farewell" value="Hohoho, tenha um feliz natal, |PLAYERNAME|."/> </parameters> </npc>
  6. Tem só um errinho básico na action: usando doPlayerRemoveItem, o item não será removido caso esteja sendo usado de outro lugar que não seja a bag do player (por exemplo, no chão). Para corrigir isso, basta trocar o: doPlayerRemoveItem(cid, 11401, 1) Por: doRemoveItem(item.uid, 1) De resto, nice code.
  7. Ou você pode usar esse código: local items = { [actionid] = itemid, [actionid] = itemid, [actionid] = itemid, [actionid] = itemid, [actionid] = {itemid, itemid}, } local storage = 7601 function onUse(cid, item, frompos, item2, topos) if items[item.actionid] then if getPlayerStorageValue(cid, storage) < 1 then local _item = items[item.actionid] if type(_item) == "table" then for i = 1, #_item do doPlayerAddItem(cid, _item[i], 1) end else doPlayerAddItem(cid, _item, 1) end doPlayerSendTextMessage(cid, 27, "Hey, you found something!") setPlayerStorageValue(cid, storage, 1) else return doPlayerSendCancel(cid, "You already got your item.") end end return true end Cada baú, 1 actionid. Não se esqueça de configurar a tabela items. Na tag, você coloca as actionids (serão 5, no total). Se preferir, você pode optar pelo seguinte código: local items = { [{x = x, y = y, z = z}] = itemid, -- [{posição do baú}] = id do item, [{x = x, y = y, z = z}] = itemid, [{x = x, y = y, z = z}] = itemid, [{x = x, y = y, z = z}] = itemid, [{x = x, y = y, z = z}] = {itemid, itemid}, } local storage = 7601 function onUse(cid, item, frompos, item2, topos) if items[topos] then if getPlayerStorageValue(cid, storage) < 1 then local _item = items[topos] if type(_item) == "table" then for i = 1, #_item do doPlayerAddItem(cid, _item[i], 1) end else doPlayerAddItem(cid, _item, 1) end doPlayerSendTextMessage(cid, 27, "Hey, you found something!") setPlayerStorageValue(cid, storage, 1) else return doPlayerSendCancel(cid, "You already got your item.") end end return true end Dessa vez, é apenas 1 actionid para todos os baús. Eu indiquei no código como configurar a tabela items. Qualquer dúvida, só falar. agr que li que vc queria com uniqueid. mas enfim, se alguém quiser usar aid, tá aí ;s
  8. Alteração no código: function onUse(cid, item, frompos, item2, topos) if item.uid == 60003 then if getPlayerStorageValue(cid,60003) == -1 then doPlayerSendTextMessage(cid,25,"You have found a item.") doPlayerAddItem(cid, 55571, 1) setPlayerStorageValue(cid, 60003, 1) else doPlayerSendTextMessage(cid,25,"It is empty.") end end return true end O jogador não vai receber mais o item dentro da bag de ID 1987, porém também não receberá tal bag. É isso que você quer? Já sobre o outro pedido, se ninguém te ajudar, eu faço pra você.
  9. ^ É porque, nos códigos referentes a esses comandos, há a seguinte condição para que sejam usados: if getCreatureName(cid) == "[kpdo]Cater" then Ou seja, apenas o personagem de nome [kpdo]Cater pode usá-los. Basta remover esta linha, juntamente com seu respectivo return false e end, e seu problema estará resolvido. Por exemplo, fazendo o que eu disse no script clonepoke.lua (comando /cp, que cria pokémons), ficaria assim:
  10. Deve ter algum arquivo em data/creaturescripts/scripts referente ao AoL. Dá uma procurada lá.
  11. Todas as configurações foram indicadas no script, basta segui-las corretamente e irá funcionar. Tag: <action actionid="xxx" event="script" value="createhelmet.lua"/> Troque xxx pelo actionid que será colocado na alavanca. Em data/actions/scripts, crie um arquivo com extensão .lua e coloque o seguinte código, com nome createhelmet: function onUse(cid, item, fromPosition, item2, toPosition) local fromid, toid = id1, id2 --Em id1, você coloca o id da alavanca virada para um lado. Em id2, o id da alavanca virada para o outro lado. local alavanca = item.itemid == fromid and toid or fromid local positions = { {{x = xxx, y = yyy, z = zzz}, itemid}, --Aqui você coloca, respectivamente, as coordenadas e o ID de seu item correspondente. {{x = xxx, y = yyy, z = zzz}, itemid}, {{x = xxx, y = yyy, z = zzz}, itemid}, {{x = xxx, y = yyy, z = zzz}, itemid}, {{x = xxx, y = yyy, z = zzz}, itemid}, {{x = xxx, y = yyy, z = zzz}, itemid}, {{x = xxx, y = yyy, z = zzz}, itemid}, } local helmet = { position = {x = xxx, y = yyy, z = zzz}, --Aqui você coloca as coordenadas de onde o helmet será criado. id = itemid, --Aqui você coloca o ID do helmet. } local effect = 5 --Aqui você coloca o effect que aparecerá no helmet, ao ser criado. local dist_effect = 3 --Distance effect, que vai dos item-materiais ao helmet. for i = 1, #positions do local item_pos = getTileItemById(positions[i][1], positions[i][2]).uid if item_pos < 1 then return doPlayerSendCancel(cid, "Some item is missing, or you put the item on the wrong place.") end end for i = 1, #positions do local _item = getTileItemById(positions[i][1], positions[i][2]).uid if _item > 0 then doRemoveItem(_item, 1) doSendDistanceShoot(positions[i][1], helmet.position, dist_effect) end end doSendMagicEffect(helmet.position, effect) doCreateItem(helmet.id, 1, helmet.position) doTransformItem(item.uid, alavanca) return true end
  12. Pode postar seu arquivo createpokeball.lua (data/talkactions/scripts)? É estranho estar acontecendo isso. Pensei em duas possíveis causas pra este bug: ou o nome do pokémon está diferente na tabela pokes, de configuration.lua, ou o erro está sendo causado pela função doCorrectString. Descartando a primeira opção, visto que você disse que configurou tudo corretamente, farei uma pequena função que substituirá o doCorrectString. Já sobre o problema de apenas parte do nick estar aparecendo ao serem summonados, poste seu level system.lua, encontrado em data/lib. Aparentemente, foi configurado para, caso haja no nome do pokémon a string "Shiny", seja pega apenas a parte posterior a ela. É possível "corrigir" isso fazendo uma pequena alteração no arquivo, ou mudando o nome dos pokémons de "Mega Shiny" para "Shiny Mega".
  13. Acontece que você não fechou a tabela boost_stones. Aqui seu código corrigido:
  14. zipter98 postou uma resposta no tópico em Suporte & Pedidos
    Não, você teria que fazer alterações nas sources também. ;s
  15. zipter98 postou uma resposta no tópico em Suporte Tibia OTServer
    2º function onSay(cid, words, param) if not param then return doPlayerSendCancel(cid, "Especifique os parâmetros.") end local p = param:explode(",") local itemid = tonumber(p[1]) local qnt = tonumber(p[2]) local msg = p[3] if not itemid then return doPlayerSendCancel(cid, "Sorry, not possible.") elseif not qnt then qnt = 1 --quantidade padrão elseif not msg then msg = "You received "..qnt.." "..getItemNameById(itemid).." from the admin." --msg padrão end for _, pid in pairs(getPlayersOnline()) do doPlayerAddItem(pid, itemid, qnt) doPlayerSendTextMessage(pid, 27, msg) end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You gave to all players online "..qnt.." "..getItemNameById(itemid)..".") return true end Suponho que saiba fazer a tag em talkactions.xml, certo? Modo de uso é como você especificou no tópico: itemid,quantidade,mensagem
  16. if v < 29 then Se as charges do seu AoL forem menores que 29, ou seja, você tiver morrido 29 vezes com ele, você não vai perder items, experiência, ou seja lá o quê você deixa de perder com AoL. Se você colocar como mostrou (v >= 1), o item vai ser removido automaticamente, visto que, caso as charges não sejam maiores ou iguais a 1, é programado para remover o item. doPlayerSetLossSkill(cid, false) E sobre essa função: como eu já disse, não faço ideia do quê AoL faz, e me baseei no código do danihcv. Você pode removê-la, se quiser. doItemSetAttribute(getPlayerSlotItem(cid, 2).uid, "charges", v - 1) E sobre isso: os atributos tem valor inicial nulo. Neste código, fiz uma coisinha na variável v para que, no caso do valor do atributo charges ser nulo, o valor adotado seja 0. Setando o valor deste atributo para v - 1, as charges passariam a ser negativas.
  17. Faz um bom tempo que não scripteio, mas pelo que entendi da sua descrição, isso talvez baste. E eu não sei como esse AoL funciona (não jogo Tibia). Na verdade, só li o código do danihcv e tirei minha conclusão sobre. Como ele quer que o item tenha 30 cargas, basta usar atributos. Fica mais fácil. function onDeath(cid, corpse, deathList, lastHitKiller, mostDamageKiller) if isPlayer(cid) then if getPlayerSlotItem(cid, 2).itemid == 2173 then local v = getItemAttribute(getPlayerSlotItem(cid, 2).uid, "charges") or 0 if v < 29 then doCreatureSetDropLoot(cid, false) doPlayerSetLossSkill(cid, false) doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, 10) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA) doItemSetAttribute(getPlayerSlotItem(cid, 2).uid, "charges", v + 1) else doRemoveItem(getPlayerSlotItem(cid, 2).uid) end end end return true end
  18. Pode postar seu configuration.lua (data/lib)? Em spoiler, pls.

Informação Importante

Confirmação de Termo