Ir para conteúdo

zipter98

Herói
  • Total de itens

    2553
  • Registro em

  • Última visita

  • Dias Ganhos

    72

Tudo que zipter98 postou

  1. local egg = { ["Amarelo"] = {id = 6541, mon = "Demon"}, ["Vermelho"] = {id = 6542, mon = "Vampire"}, ["Azul"] = {id = 6543, mon = "Ferumbras"}, ["Verde"] = {id = 6544, mon = "Warlock"}, ["Roxo"] = {id = 6545, mon = "Cyclops"}, ["Branco"] = {id = 2695, mon = "Dragon"} } function onUse(cid, item, fromPosition, itemEx, toPosition) if getTilePzInfo(getCreaturePosition(cid)) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você não pode sumonar seu pet em protection zone.") return true end if #getCreatureSummons(cid) >= 1 then doCreatureSay(cid, "Não preciso mais de você!", TALKTYPE_SAY) doRemoveCreature(getCreatureSummons(cid)[1]) return true end for k, v in pairs(egg) do if item.itemid == v.id then doCreatureSay(cid, "Venha me ajudar, "..v.mon.."!", TALKTYPE_SAY) local x = doSummonCreature(v.mon, getCreaturePosition(cid)) doConvinceCreature(cid, x) end end return true end
  2. A causa do erro é a inexistência do código da função getThingFromPosition no seu servidor. Troque: doTransformItem(getThingFromPosition({x=461, y=592, z=14, stackpos=1}).uid, 1945)--lever pos por: doTransformItem(getThingfromPos({x=461, y=592, z=14, stackpos=1}).uid, 1945)--lever pos
  3. zipter98

    novo teleport

    Seu servidor já tem um sistema de teleporte. Qual a necessidade de criar outro? Você só precisa mudar umas coisinhas em tele.lua. Se a base for PDA (e, no caso, é), na tabela places você adiciona um novo elemento: [Um_numero_acima_do_anterior] = {name = "Phenac", id = ID_da_cidade, sto = um_numero_acima_do_anterior}, Depois, adicionar as condições de VIP e nível: Acima de: if myplace ~= "" and townid > 0 then telepos = getTownTemplePosition(townid) end coloque: if not isPremium(cid) or getPlayerLevel(cid) < LEVEL_MÍNIMO then doPlayerSendCancel(cid, "You can't teleport to this place.") return true end Se tiver alguma dúvida ou apresentar algum erro, é preferível que poste o código aqui. Ou você pode usar o script que postaram acima, whatever.
  4. zipter98

    [ERRO] Drop item

    Troque: function corpse.examine(cid, position, corpse_id) por: function examine(cid, position, corpse_id) Depois, troque: addEvent(corpse.examine, 5, cid, getThingPos(target), corpse_id) por: addEvent(examine, 5, cid, getThingPos(target), corpse_id)
  5. zipter98

    area de cura

    Cura vida e mana? Por que seria um globalevent? A cura só acontece em alguns horários do dia, ou talvez de tempo em tempo? A vida/mana é recuperada de uma vez ou periodicamente?
  6. Abaixo dos dois: if param.count > 0 or math.random(0, 1) == 1 then coloque: if not isPlayer(param.cid) then return true end
  7. Troque: if getPlayerItemCount(cid, need[1].id) < need[1].qt then selfSay("Você não me trouxe os itens necessários...", cid) selfSay("Lembre-se, eu preciso de todos esses itens...", cid) talkState[talkUser] = 0 return true end por: for i = 1, #need do if getPlayerItemCount(cid, need[i].id) < need[i].qt then selfSay("Você não me trouxe os itens necessários...", cid) selfSay("Lembre-se, eu preciso de todos esses itens...", cid) talkState[talkUser] = 0 return true end end Troque: local stoFinish = {92121} por: local stoFinish = 92121 Troque: setPlayerStorageValue(cid, stoFinish, 0) por: setPlayerStorageValue(cid, stoFinish, 1)
  8. A correção do seu código seria a seguinte: local items = {1212, 1215, 1218, 1239} function onMoveItem(moveItem, frompos, position, cid, toPosition) if isContainer(moveItem.uid) then doBroadcastMessage("reconheceu container!") for i = 1, #items do if #getItemsInContainerById(moveItem.uid, items[i]) > 0 then doBroadcastMessage("reconheceu um dos itens dentro!") break end end Para fazer o que você quer, ajudaria se este callback tivesse mais parâmetros. Caso contrário, recomendaria usar um outro onMoveItem. Mesma funcionalidade, porém parâmetros diferentes e mais abrangentes.
  9. zipter98

    Sistema deoxys

    Sabe em configuration.lua, a tabela onde você configura o moveset do pokémon? Lá, você tem que configurar o Deoxys com as spells que o transformam tendo o nome da transformação. Por exemplo: move1 = {name = "Deoxys Attack", level = 100, cd = 5, dist = 1, target = 0, f = 0, t = "psychic"}, move2 = {name = "Deoxys Defense", level = 100, cd = 5, dist = 1, target = 0, f = 0, t = "psychic"}, move3 = {name = "Deoxys Speed", level = 100, cd = 5, dist = 1, target = 0, f = 0, t = "psychic"}, Certifique-se de ter colocado o código da spell no local adequado.
  10. Em data/lib, coloque a seguinte função em 050-function.lua: function isWalkable(pos, creature, proj, pz)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 2 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end No código de headbutt, abaixo de: local lvl = {25, 40, 60, 80, 150, 1000} --lvls coloque: local fromPos, toPos, canSummon = {x = pos.x - 1, y = pos.y - 1}, {x = pos.x + 1, y = pos.y + 1} for x = fromPos.x, toPos.x do if canSummon then break end for y = fromPos.y, toPos.y do if isWalkable({x = x, y = y, z = pos.z}, true) then canSummon = true break end end end if not canSummon then doPlayerSendTextMessage(master, 27, "Sorry, there's no way to create a monster here.") return true end
  11. OK, últimas confirmações, suponho. Abaixo do último print que postei, coloque: print(moveTable and "moveTable true" or "moveTable false/nil") Remova: print(movestable[name] and "true" or "false") Troque o código da função: function getNewMoveTable(table, n) Pelo seguinte: function getNewMoveTable(table, n) if table == nil then print(0) return false end print(1) local moves = {table.move1, table.move2, table.move3, table.move4, table.move5, table.move6, table.move7, table.move8, table.move9, table.move10, table.move11, table.move12} print(2) print("moves type: "..type(moves)) local returnValue = moves if n then print(3) returnValue = moves[n] end print(4) print("returnValue type: "..type(returnValue)) return returnValue end Novamente, informe o que for imprimido no console. PS: Esse erro acontece com todos os pokémons que você tenta mega-evoluir, ou só com algum específico?
  12. zipter98

    Sistema deoxys

    É, definitivamente é um PDA. Em pokemon moves.lua (data/lib), coloque o seguinte código perto de blocos semelhantes: elseif spell:find("Deoxys") then local transformation_effect = xxx --Efeito ao transformar. local oldPosition, oldLookdir, newPoke, HP_percentage = getThingPos(cid), getCreatureLookDir(cid) doSendMagicEffect(getThingPos(cid), transformation_effect) doRemoveCreature(cid) if isSummon(cid) then local master = getCreatureMaster(cid) HP_percentage = getCreatureHealth(newPoke) * 100 / getCreatureMaxHealth(newPoke) doSummonMonster(master, spell) newPoke = getCreatureSummons(master)[1] adjustStatus(newPoke, getPlayerSlotItem(master, 8).uid, true, false) doUpdateMoves(master) else HP_percentage = getCreatureHealth(newPoke) * 100 / getCreatureMaxHealth(newPoke) newPoke = doCreateMonster(spell, oldPosition) adjustWildPoke(newPoke) end doCreatureSetLookDir(newPoke, oldLookdir) doCreatureAddHealth(newPoke, -(getCreatureHealth(newPoke) - getCreatureMaxHealth(newPoke) * HP_percentage / 100)) Depois, em configuration.lua, ao configurar a tabela de moves, as spells que transformam o Deoxys têm que ter o mesmo nome da transformação.
  13. Hm, abaixo de: local moveTable, index = getNewMoveTable(movestable[name]), 0 coloque: print(type(moveTable)) Informe o que for imprimido no console.
  14. zipter98

    Sistema deoxys

    Procurei por esta base e, pelo que me parece, é também um PDA. Poderia postar o conteúdo do arquivo level system.lua, localizado em data/lib?
  15. Troque: cfg.refuel = 5 * 60 * 1000 por: cfg.refuel = 5 * 60
  16. Em move1.lua, abaixo de: if not move then coloque: print(movestable[name] and "true" or "false") Informe o que for imprimido no console (true ou false).
  17. zipter98

    Sistema deoxys

    Sem falar a base fica difícil ajudar, colega.
  18. Poste o código da função getNewMoveTable, localizada em data/lib/cooldown bar.lua.
  19. Isso aí você faz em Lua, não em C++. Em qualquer arquivo de data/lib, coloque: LANGUAGE_STORAGE = 4929 Languages = { --["linguagem"] = valor_da_storage, ["english"] = 1, ["portuguese"] = 2, ["spanish"] = 3, } function getPlayerLanguage(cid) if not isPlayer(cid) then return true end for lang, value in pairs(Languages) do if value == getPlayerStorageValue(cid, LANGUAGE_STORAGE) then return lang end end return "none" end function setPlayerLanguage(cid, new_language) if not isPlayer(cid) or not Languages[new_language] then return true end setPlayerStorageValue(cid, LANGUAGE_STORAGE, Languages[new_language]) end Para alterar a linguagem do jogador: setPlayerLanguage(cid, nova_linguagem) Ex.: setPlayerLanguage(cid, "english") setPlayerLanguage(cid, "portuguese") Para obter a linguagem do jogador: getPlayerLanguage(cid) Que retorna valores como: english portuguese Em login.lua, recomendo colocar, abaixo de: function onLogin(cid) o seguinte bloco de código: if getPlayerLanguage(cid) == "none" then setPlayerLanguage(cid, "portuguese") end Exemplo de uso do sistema: local test_messages = { ["portuguese"] = "Mensagem de teste.", ["english"] = "Test message.", ["spanish"] = "Mensaje de prueba." } function onSay(cid) doPlayerPopupFYI(cid, test_messages[getPlayerLanguage(cid)]) return true end
  20. Abaixo de: elseif pokemon.spell == "StickSlash" then doAreaCombatHealth(sumomdonego, element, getThingPos(getCreatureTarget(cid)), 0, -((num1)+(lvpokemon*(num3))), -((num2)+(lvpokemon*(num3))), 212) return 0 coloque: elseif pokemon.spell == "nome_da_spell" then local Kecleon_config = { {lookBody = 113, lookHead = 110, lookLegs = 115, lookFeet = 113}, {lookBody = 107, lookHead = 106, lookLegs = 107, lookFeet = 105}, {lookBody = xxx, lookHead = xxx, lookLegs = xxx, lookFeet = xxx}, --etc } if getCreatureName(sumomdonego) ~= "Kecleon" then return false end local color = Kecleon_config[math.random(#Kecleon_config)] color.lookType = getCreatureOutfit(sumomdonego).lookType doSetCreatureOutfit(sumomdonego, color, -1) return true
  21. Você não precisa reproduzir o catch.lua. Basta colocar a nova pokébola na tabela e depois aplicar as condições dela no código. Também, seria bem mais viável você criar uma fórmula que altere a catch rate do que fazer uma tabela como essa. Um pequeno bloco de código para exemplificar o que eu disse, aplicável no catch.lua original: Abaixo de: catchinfo.chance = x.chance colocaria-se: if item.itemid == 14158 and (pokes[name].type == "poison" or pokes[name].type2 == "poison") then catchinfo.chance = x.chance - (30 * x.chance / 100) end Assim, a pokébola de ID 14158 teria 30% de chance a mais de capturar pokémons do elemento poison (supus que você quisesse algo assim pelo nome da tabela). A configuração da pokébola seria padrão: configuration.lua e catch.lua (há inclusive tutoriais aqui no XTibia ensinando a configurá-las adequadamente). Você não precisa criar novos arquivos para novas pokébolas.
  22. Não entendi muito bem a explicação. Você quer fazer pokébolas como as novas da PxG, que possuem rate aumentada em certos tipos de pokémons? Se for isso, basta criá-las e configuradas como todas as outras existentes e criar condições no catch.lua de actions, checando o nome ou características do pokémon alvo.
  23. Troque: node1:addChildKeyword({'yes'}, StdModule.promotePlayer, {npcHandler = npcHandler, cost = 0, level = 1, promotion = 1, text = 'Congratulations! You are now promoted.'}) por: node1:addChildKeyword({'yes'}, StdModule.promotePlayer, {npcHandler = npcHandler, recuse = {9, 10, 11, 12}, cost = 0, level = 1, promotion = 1, text = 'Congratulations! You are now promoted.'}) Depois, em data/npc/lib/npcsystem/modules.lua, no código da função function StdModule.promotePlayer(cid, message, keywords, parameters, node) Abaixo de: elseif(not doPlayerRemoveMoney(cid, parameters.cost)) then npcHandler:say('You do not have enough money!', cid) coloque: elseif parameters.recuse and isInArray(parameters.recuse, getPlayerVocation(cid)) then npcHandler:say("You can't change your vocation at the moment!", cid)
  24. Eu sei. Eu basicamente peguei o bloco de código que havia escrito inicialmente e taquei no novo código. Não estava preocupado com a funcionalidade do código, onde uma simples função resolveria o problema, mas sim em ele ser ou não executado. E, como você pôde ver, não estava. :^) @@ricardoberg Vou fazer a spell dentro de dois minutos e posto. Não sei como as spells da sua base funcionam, então fiz um código à maneira tradicional: local Kecleon_config = { {lookBody = 113, lookHead = 110, lookLegs = 115, lookFeet = 113}, {lookBody = 107, lookHead = 106, lookLegs = 107, lookFeet = 105}, {lookBody = xxx, lookHead = xxx, lookLegs = xxx, lookFeet = xxx}, --etc } function onCastSpell(cid) local caster = cid if isPlayer(cid) then if #getCreatureSummons(cid) == 0 then doPlayerSendCancel(cid, "You don't have summons.") return false end caster = getCreatureSummons(cid)[1] end if getCreatureName(caster) ~= "Kecleon" then return false end local color = Kecleon_config[math.random(#Kecleon_config)] color.lookType = getCreatureOutfit(caster).lookType doSetCreatureOutfit(caster, color, -1) return true end
  25. De qualquer maneira a coloração será sortida. Pergunto se você quer configurar as cores que podem ser sorteadas ou se prefere que as opções sejam todas as cores possíveis do Tibia. A primeira opção seria mais esteticamente viável, porque, ao invés de cores totalmente aleatórias, você poderia escolher as combinações de cor que o Kecleon pode assumir.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...