Ir para conteúdo

zipter98

Herói
  • Total de itens

    2553
  • Registro em

  • Última visita

  • Dias Ganhos

    72

Tudo que zipter98 postou

  1. ^ recomendaria você comparar a storage com os.time, já que o autor pediu que o item pudesse ser usado uma vez por dia.
  2. Sinceramente, não estou muito a fim de procurar a razão do problema com o selfSay, então, se não se importar, use isso aqui (em efeitos práticos, dá na mesma): selfSay("O meu nome é X, eu quero duelar com vc!") addEvent(doCreatureSay, 1500, getNpcCid(), "Espero que esteja preparado mlk!") addEvent(doCreatureSay, 3000, getNpcCid(), "Vamos a isso!") Certamente deve haver outras formas de preparar ações para um momento futuro, mas minha disposição à programar não me incentiva muito a pensar nisso. addEvent é a maneira mais simples e sem complicações (logicamente, 'sem complicações' caso as condições adequadas sejam postas, o que não vejo necessidade no caso - a não ser que o NPC seja deletado aleatoriamente).
  3. Você pode usar addEvent nas funções de fala, separando-as por um intervalo em milissegundos. Por exemplo: selfSay("O meu nome é X, eu quero duelar com vc!")addEvent(selfSay, 1500, "Espero que esteja preparado mlk!")addEvent(selfSay, 3000, "Vamos a isso!")
  4. Também dá pra explorar algumas coisas usando o creatureevent onOutfit(cid, old, current). PS: Para aqueles não familiarizados com este callback, ele é executado quando uma criatura muda de outfit.
  5. Quando você pisa no tile, o step in é executado. Quando você sai dele, independente de como, o step out é executado. Logo, mesmo dando teleporte em cima do tile do moveevent o step out será executado.
  6. O que tem de mais no teleporte? Basta escrever o código em step in e step out, mesma coisa na situação da neve.
  7. zipter98

    Storange

    Se possível, poste aqui o código do moveevent da última imagem.
  8. function onUse(cid, item, frompos, item2, topos) local dolls = { [11256] = {pet = "Crystal Spider"}, [11207] = {pet = "Ashmunrah"}, [11144] = {pet = "Demon"}, [9019] = {pet = "Vampire"}, } local go = dolls[item.itemid] local summon = getCreatureSummons(cid) local store,exausted = 156249,30 --------------------------------------------------- if getPlayerStorageValue(cid, store) >= os.time() then return doPlayerSendCancel(cid, "wait " .. getPlayerStorageValue(cid, store) - os.time() .. " seconds to use this command again.") end if #summon > 0 then for _, pid in ipairs(summon) do doRemoveCreature(pid) doCreatureSay(cid, "Can go rest ["..go.pet.."]", TALKTYPE_ORANGE_1) end else doConvinceCreature(cid, doSummonCreature(go.pet, getCreaturePosition(cid))) doCreatureSay(cid, "Let battle ["..go.pet.."]", TALKTYPE_ORANGE_1) end return trueend
  9. Mesmo sendo um assunto desconexo do tópico (peço desculpas ao autor), estava me questionando justamente quanto a esse tema. Por ter ficado um tempo desligado do mundo poketibiano, não me atualizei sobre as bases mais usadas atualmente (se é esse tal DPX ou outro). Se puder responder-me em meu perfil, agradeço.
  10. local ips = {}function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end local player_ip = getPlayerIp(cid) if table.count(ips, player_ip) == 2 then doPlayerSendTextMessage(cid, 27, "There is already two players with the same IP as yours in the event.") doTeleportThing(cid, fromPosition) return true end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Welcome to the event area.") table.insert(ips, player_ip) return trueend
  11. zipter98

    Creature not found

    function onStepIn(cid) for i = 0, 5 do addEvent(function() if not isCreature(cid) then return true end doTargetCombatHealth(0, cid, COMBAT_PHYSICALDAMAGE, -250, -750, 57) end, i * 500) end return trueend
  12. zipter98

    tabela

    local pokemons = { ["pedro"] = { {name = "Mega Blastoise", level = 600, nick = "", ball = "normal"}, {name = "Mega Scizor", level = 600, nick = "", ball = "normal"}, {name = "Shiny Snorlax", level = 600, nick = "", ball = "normal"}, {name = "Mega Charizard Y", level = 600, nick = "", ball = "normal"}, {name = "Shiny Dragonite", level = 600, nick = "", ball = "normal"}, {name = "Mewtwo", level = 600, nick = "", ball = "normal"}, }, ["joao"] = { {name = "Mega Blastoise", level = 600, nick = "", ball = "normal"}, {name = "Mega Scizor", level = 600, nick = "", ball = "normal"}, {name = "Shiny Snorlax", level = 600, nick = "", ball = "normal"}, {name = "Mega Charizard Y", level = 600, nick = "", ball = "normal"}, {name = "Shiny Dragonite", level = 600, nick = "", ball = "normal"}, {name = "Mewtwo", level = 600, nick = "", ball = "normal"}, }}local index = {}for name, _ in pairs(pokemons) do table.insert(index, name)endlocal it = pokemons[index[math.random(1, #index)]][battle_turn]
  13. Ao que tudo indica, o problema não está nesse código. Anteriormente, me referi ao uso do client original da CipSoft (que é o client C++). Nas imagens que você postou, você apenas usou o OTClient. Eu preciso confirmar se o problema ocorre em ambos os clients. Na hipótese destes canais de duelo aparecerem apenas no OTClient, tenho certeza de que a causa se encontra em algum arquivo do OTC (o que, para mim, seriam novas águas, já que nunca me aventurei neste client).
  14. Isso acontece porque o sistema de duelo é escrito usando canais de chat, e, por meio do creatureevent que os manipula, é passada a impressão que são janelas de opção. Para contornar o problema que você citou e reforçar a ideia pretendida, retorna-se falso ao final do bloco de código responsável por esse sistema no creatureevent que citei. Você poderia me informar se este erro ocorre no client C++ (o original)? Se a resposta for afirmativa, saberia informar o servidor que você baixou?
  15. Acima dos dois local pos2 = getPlayerPosition(target) coloque: if not isCreature(target) then return true end
  16. @samlecter É uma ideia bem interessante, inclusive eu já li algo assim em algum fórum de poketibia. Com um sistema de Unique Item no servidor, a ideia fica bem viável. Se alguém tiver interesse no sistema, eu posso escrevê-lo depois de resolver o pedido do tópico. @mrlhsl Como você pediu pelo mais simples, farei o de tornar o pokémon inutilizável após determinado tempo. Como já faz algum tempo que não me atualizo quanto as novas bases de poketibia, não conheço as funções deste servidor. Poderia me informar os atributos que podem ser adicionados ao pokémon criado pelo sistema (como boost), e se existe alguma função que cria diretamente um pokémon na pokeball? Caso prefira, você pode postar aqui códigos que usam alguma função do tipo (como uma talkaction que crie pokémon em pokeballs). Se possível, poste o arquivo relativo ao goback, em data/actions/scripts. PS: Se o seu servidor tiver algum creatureevent onLook, poste-o também, por gentileza.
  17. Vejo duas maneiras com menor margem de erros para escrever o código: deixar o pokémon inutilizável, como você mesmo sugeriu, ou deletá-lo quando, após o tempo estipulado passar, o jogador tentar usá-lo. Deletar um item automaticamente sem o uso do decay acaba tendo muitas falhas. É possível, também, mostrar no look até quando será possível usar o pokémon. Se possível, informe qual das opções você prefere e também a base usada e o método de obtenção do pokémon.
  18. Procure o arquivo do código em data/talkactions/scripts (provavelmente tele.lua) e poste o conteúdo aqui, por gentileza.
  19. Apesar de não ter como salvar uma tabela como valor de storage, você pode converter seus valores em uma string, ou até mesmo salvá-los separadamente. Por exemplo: local pos = getThingPos(cid)setPlayerStorageValue(cid, 100, ":"..pos.x..","..pos.y..","..pos.z) E: local new_pos = getPlayerStorageValue(cid, 100):sub(2):explode(",")doTeleportThing(cid, {x = new_pos[1], y = new_pos[2], z = new_pos[3]})
  20. A ideia não é necessariamente essa. Independentemente do value (key é a storage), o jogador tem uma. O valor padrão é -1, mas isso não significa que a criatura (seja um monstro ou um player) não possui uma storage. Significa que ela não foi alterada (logo, uma linha na tabela do banco de dados não foi criada), ou, caso tenha sido, tenha voltado ao valor padrão (o valor na tabela do banco de dados continuará). A ideia de que -1 represente não ter a storage e 1 ter foi apenas uma ideia adotada e padronizada nos códigos. Entretanto, você pode sem problemas escrever códigos que contrariem esse padrão. Quanto a usar tempos em storages, a estrutura é a seguinte: setPlayerStorageValue(uid, key, os.time() + time) os.time() retorna o tempo em segundos contado a partir de 01/01/1970, e somando-o ao time (que é em segundos) você obtém o valor que representa o os.time() daqui a time segundos. Usando uma condição, você pode saber se o tempo estabelecido na storage já passou ou não: if os.time() > getPlayerStorageValue(uid, key) then --tempo já passouelse --tempo ainda não passouend
  21. Reestruturei o código visando uma melhor organização, caso não se importe. local tps, tpId = { ["Demon X"] = {pos = {x = 1044, y = 1694, z = 9}, toPos = {x = 1046, y = 1695, z = 8}, time = 10},}, 1387 function onDeath(cid) local tp = tps[getCreatureName(cid)] if not tp then return true end doCreateTeleport(tpId, tp.toPos, tp.pos) doCreatureSay(cid, "O teleport irá sumir em "..tp.time.." segundos.", TALKTYPE_ORANGE_1) addEvent(function() local teleport = getTileItemById(tp.pos, tpId).uid if teleport == 0 then return true end doRemoveItem(teleport) doSendMagicEffect(tp.pos, CONST_ME_POFF) end, tp.time * 1000) return trueend
  22. Faz tempo que não programo em Tibia, então não me recordo bem se há alguma condition de silence. Entretanto, se não me engano, é necessário fazer uma condição em cada código de spell para bloquear o uso delas.
  • Quem Está Navegando   0 membros estão online

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