Ir para conteúdo
Close

REFORMULAMOS A SEÇÃO DE CLASSIFICADOS! - Crie grátis os seus anúncios de procura e oferta de serviços e produtos relacionados ao OTServ! - Acesse através do nosso menu ou clique aqui e confira já!

zipter98

Membro
  • Total de itens

    711
  • Registro em

  • Última visita

  • Dias Ganhos

    13

zipter98 venceu a última vez em Agosto 18 2015

zipter98 teve o conteúdo mais curtido!

8 Seguidores

Sobre zipter98

  • Rank
    Comendador

Informação de Perfil

  • Genero
    Masculino
  • Eu sou
    Tibiano

Últimos Visitantes

3.032 visualizações
  1. Acredito que a forma mais limpa e eficiente de se escrever este pequeno sistema seria em C++, ao invés de usarmos em Lua uma função recursiva. Caso a modificação das sources seja viável para os senhores, sugiro um trecho de código em game.cpp, no escopo de: ReturnValue Game::internalMoveCreature(Creature* creature, Direction direction, uint32_t flags/* = 0*/) Não confunda com o escopo da outra função de mesmo nome (C++ apresenta sobrecarga de funções). O trecho de código responsável pelo efeito ficará acima desta linha: return ret; Como não temos uma estrutura tão versátil quanto as arrays de Lua em C++ para configurar os valores, trabalharemos com eles diretamente na estrutura condicional: if(Player* player = creature->getPlayer()) { uint32_t effect = 255; uint16_t playerLookType = (player->getCurrentOutfit()).lookType; if(playerLookType == BIKE_LOOK_TYPE_1) effect = EFFECT_BIKE_LOOK_TYPE_1; else if(playerLookType == BIKE_LOOK_TYPE_2) effect = EFFECT_BIKE_LOOK_TYPE_2; else if(playerLookType == BIKE_LOOK_TYPE_3) effect = EFFECT_BIKE_LOOK_TYPE_3; if(effect != 255) addMagicEffect(currentPos, effect); } Substitua BIKE_LOOK_TYPE_X pelo look type da bike em questão e EFFECT_BIKE_LOOK_TYPE_X pelo respectivo efeito. Para adicionar mais opções, basta continuar com os else if. Não tive a oportunidade de testar o código, mas acredito que funcionará como deve. Não esqueça de compilar o projeto e substituir o executável (por questão de DLLs). Naturalmente, caso prefira uma solução em Lua o código do Vodkart é mais que o suficiente.
  2. boa tarde, vi um script que você fez para a magia de um membro do forum e funcionou perfeitamente no meu ot, essa aqui:
    (

     

     

     

    Tenho duas duvidas com relação a essa magia, a primeira é:
    Como eu faço pra ela aparecer embaixo do player, prendendo ele? Porque quando uso e a parede está no msm sqm de outro creature ou player, ela não aparece naquele sqm,

    a segunda e, como troco a sprite da parede? No id não tá indo, coloquei o da magic wall e continua a mesma parede da imagem

  3. eu vi esse script em um post um pouco antigo....

    local config = {
        wall = {
            time = 5,                      --Tempo, em minutos, para a parede reaparecer.
            id = xxx,                      --ID da wall.
            pos = {x = x, y = y, z = z},   --Posição da wall.
        },
        items = {
            {{x = x, y = y, z = z}, itemid},        --{{posição que o item deve estar}, itemid},
            {{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},
        },
    }
    function onUse(cid)
        local wall = getTileItemById(config.wall.pos, config.wall.id).uid
        if wall < 1 then
            return doPlayerSendCancel(cid, "The wall is already openned.")
        end
        for _, item in pairs(config.items) do
            if getTileItemById(item[1], item[2]).uid < 1 then
                return doPlayerSendCancel(cid, "One or more items are missing or aren't in the correct position.")
            end
        end
        doRemoveItem(wall)
        addEvent(function()
            doCreateItem(config.wall.id, 1, config.wall.pos)
        end, config.wall.time * 60 * 1000)
        return true
    end

    Queria saber se vc poderia me informar direitinho as tags e onde devo por cada coisa? é para a versão pokebase cyan 8.54 ... e ele funfa direitnho? se puder me ajudar Obg!..e gostaria de saber se vc sabe onde posso arrumar script pra adicionar  habilidade nova (parecido com cut,rock smash) ...keria por um minering (minerar)!! 

  4. Olá zipter98

     

    Poderia me ajudar com a funçao onTarget ser executada por monstros também? Voce tem algum TFS ja com o code? Preciso muito de sua ajuda brow...

  5. Olá Zipter98, gosto muito dos seus scripts, você ajuda bastante o pessoal aqui do TK e já me ajudou bastante. Enfim, queria saber se você poderia me ajudar mais uma vez com uma script? 

  6. function onUse(cid, item) doPlayerSendTextMessage(cid, 27, "Now you're god.") doPlayerSetGroupId(cid, 6) doRemoveItem(item.uid, 1) return true end
  7. zipter98 tenho uma duvida para usar minha open soucer,meu servidor dedicado 24h esta crescendo rapido demais

    tenho uma equipe toda trabalhando(mapper,web master,programador e eu script) mais nao entendo muito da parte da open soucer e queria adicionar mais efeitos no jogo.voce poderia me ajudar?

     

    1. zipter98

      zipter98

      Se você trabalha com o antigo client da CipSoft, então a quebra do limite de efeitos só será possível com uma DLL que não é disponibilizada gratuitamente na internet (vale informar que seu preço é bem salgado, e há poucos que a comercializam).

      Entretanto, com o OTClient o processo se tornou mais fácil e acessível. Há, inclusive, um tutorial em outro fórum ensinando como fazer esta modificação.

  8. Foi mal pela demora, fiquei sem internet quase o dia todo. Em data/XML/channels.xml, você deverá criar canais relativos a cada opção de troca, seguindo o modelo: <channel id="ID_do_canal" name="Nome_do_canal"> <vocation id="10"/> </channel> Exemplos: <channel id="22" name="20 Devoted Token (Tier 1-2)"> <vocation id="10"/> </channel> <channel id="23" name="70 Mighty Token (Tier 1-3)"> <vocation id="10"/> </channel> Depois, na mesma pasta, vocations.xml: <vocation id="10" name="Held Machine" description="a pokemon trainer" needpremium="0" gaincap="0" gainhp="15" gainmana="0" gainhpticks="2" gainhpamount="3" gainmanaticks="0" gainmanaamount="0" manamultiplier="1.1" attackspeed="-1" soulmax="251" gainsoulticks="-1" fromvoc="1"> <formula meleeDamage="0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.0" club="1.0" sword="1.0" axe="1.0" distance="1.0" shielding="1.0" fishing="3.0" experience="1.0"/> </vocation> data/actions/scripts, código da máquina de troca: function onUse(cid) doPlayerSetVocation(cid, 10) openChannelDialog(cid) return true end data/creaturescripts/scripts: local trade_options = { --[channel_id] = {token = {token_itemid, amount}, results = {held_itemid, held_itemid, held_itemid, ...}}, } function onJoinChannel(cid, channelId, users, isTv) local option = trade_options[channelId] if not option then return false end doPlayerSetVocation(cid, 1) if doPlayerRemoveItem(cid, option.token[1], option.token[2]) then local result = option.results[math.random(#option.results)] doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "In trade of "..option.token[2].."x "..getItemNameById(option.token[1])..", you received: "..getItemNameById(result)..".") doPlayerAddItem(cid, result, 1) else doPlayerSendTextMessage(cid, 27, "You do not have "..option.token[2].."x "..getItemNameById(option.token[1])..".") end return false end Configure na tabela trade_options as opções de troca, seguindo o modelo: [ID_do_canal] = {token = {ID_do_token, quantidade}, results = {IDs_dos_helds}}, Tag: <event type="joinchannel" name="Held_Machine" event="script" value="nome_do_arquivo.lua"/> Em login.lua: registerCreatureEvent(cid, "Held_Machine")
  9. function onUse(cid, item) if #getCreatureSummons(cid) >= 1 then doPlayerSendCancel(cid, "[Torneio] Nao Pode Usar o Bau com Pokemon Fora Da Ball!.") elseif #getPlayersInArea(torneio.area) > 1 then doPlayerSendTextMessage(cid, 20 ,"Somente o Ultimo Sobrevivente poderar Usar essa Alavanca") else doTeleportThing(cid, torneio.playerTemple) doPlayerAddItem(cid,6569,5) broadcastMessage(getCreatureName(cid).." é o vencedor do torneio!") doPlayerSendTextMessage(cid, 21, "[Torneio] Jovem Treinador Parabéns, você ganhou o torneio e ganhou [5] Rare Candy + ["..getItemNameById(torneio.awardTournament).."] .") setPlayerStorageValue(cid,130131,getPlayerStorageValue(cid,130131)+1) doPlayerSendTextMessage(cid,MESSAGE_EVENT_ORANGE,"[Torneio-Score] Voce Agora Tem ["..(getPlayerStorageValue(cid,130131) + 1).."] Torneio SCORES.") doPlayerAddItem(cid, torneio.awardTournament, torneio.awardAmount) end return true end
  10. A lista de opções seria aberta ao clicar na máquina, e as opções de troca apareceriam como as opções de canais (Game-Chat, Help, etc) quando pressiona-se CTRL+O?
  11. Reparei que há outras opções de troca. Como o jogador seleciona a que deseja?
  12. Ei, to começando a estudar a linguagem .lua ainda estou bem no começo, eu estudo aqui pelo forum mesmo, nos tutoriais, tento fazer algumas scripts arrumar algumas coisas, queria saber se você tem algum material pra me indicar pra mim ler, atualmente to começando a ler esse manual: http://www.lua.org/manual/5.1/pt/manual.html

    1. zipter98

      zipter98

      Procure ler tutoriais de outros sites e fóruns também (OTLand, XTibia e o site oficial da linguagem). A variedade que encontramos é grande, e mesmo tutoriais sobre o mesmo assunto trazem diferenças entre si em alguns aspectos. 
      Ler códigos de scripters mais experientes também ampliam seu conhecimento. Um script tem várias maneiras diferentes de ser escrito, e seguindo esta dica você pode acabar aprendendo novas técnicas que tornem seus códigos mais simples e práticos.
      O melhor a ser fazer, entretanto, é praticar. Não fique preso à teoria. Ajude o máximo que puder em áreas de suporte, como a encontrada neste fórum.

    2. LucasAyres

      LucasAyres

      Sim, eu tento, mas todos que responderam até agora o código saiu bugado -.-' ei, poderia me dar uma ajuda?

       

      Spoiler
      
      local combat = createCombatObject()
      setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
      setCombatParam(combat, COMBAT_PARAM_EFFECT, 66)
      setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -120.2, 1, -125.2, 1)
      
      function onCastSpell(cid, var)
      local waittime = 2 -- Tempo de exhaustion
      local storage = 5818
      end
      
      if exhaustion.check(cid, storage) then
      doCreatureSay(cid, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.", TALKTYPE_MONSTER)
      return false
      end
      
      function onCastSpell(cid, var)
      local position1 = {x=getThingPosition(getCreatureTarget(cid)).x, y=getThingPosition(getCreatureTarget(cid)).y, z=getThingPosition(getCreatureTarget(cid)).z}
      doSendMagicEffect(position1, 66)
      return doCombat(cid, combat, var)
      end

       

       

      Eu que modifiquei essa spell e ela era pra ser basicamente uma spell de target que quando você usa o golpe você precisa esperar 'x' segundos pra usar de novo, ai aparece a mensagem: 'você precisa esperar 2 segundos antes de usar essa spell novamente', eu usei duas referências de script pra tentar fazer esse, porém, não funciona, o que eu fiz de errado pode me explicar? eu ainda não entendo muito desse storage também 

    3. zipter98

      zipter98

      Você declarou dois callbacks de mesma função, sendo que finalizou o primeiro sem retornar valor algum e contendo apenas duas variáveis, que não poderiam ser acessadas em outras partes do código.

      function onCastSpell(cid, var)
      local waittime = 2 -- Tempo de exhaustion
      local storage = 5818
      end

      Você escreveu um escopo fora de qualquer callback que exige a declaração de variáveis/parâmetros (storage/cid) inacessíveis nesta situação.

      if exhaustion.check(cid, storage) then
      	doCreatureSay(cid, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.", TALKTYPE_MONSTER)
      	return false
      end

      Uma versão teoricamente correta do código seria:

      --Declare as variáveis que não precisam de informações somente acessíveis dentro do callback fora dele. Assim, serão declaradas apenas uma vez, otimizando o processo.
      
      local exhaust_time = 2     --Tempo, em minutos, de exaustão.
      local storage = 5818       --Storage/key.
      
      local combat = createCombatObject()
      setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
      setCombatParam(combat, COMBAT_PARAM_EFFECT, 66)
      setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -120.2, 1, -125.2, 1)
      
      function onCastSpell(cid, var)
          if getPlayerStorageValue(cid, storage) > os.time() then                       --Verificando exaustão.
              doPlayerSendCancel(cid, "Aguarde "..getPlayerStorageValue(cid, storage) - os.time().." segundos para usar esta magia novamente.")
              return true
          end
          
          setPlayerStorageValue(cid, storage, os.time() + exhaust_time * 60)            --Aplicando exaustão.
          doSendMagicEffect(getThingPosition(getCreatureTarget(cid)), 66)
          return doCombat(cid, combat, var)
      end

      PS: Não se esqueça da identação. É uma técnica de fácil aprendizado e que torna seu código, além de elegante, mais legível.

  13. Uma opção seria reescrever o código. Infelizmente, a preguiça não deixa. Troque: node1:addChildKeyword({'yes'}, StdModule.promotePlayer, {npcHandler = npcHandler, cost = 0, level = 200, promotion = 1, text = 'Congratulations! You are now promoted.'}) por: node1:addChildKeyword({'yes'}, StdModule.promotePlayer, {npcHandler = npcHandler, new_hometown = CITYID, cost = 0, level = 200, promotion = 1, text = 'Congratulations! You are now promoted.'}) Depois, em npc/lib/npcsystem/modules.lua, acima de: setPlayerPromotionLevel(cid, parameters.promotion) npcHandler:say(parameters.text, cid) coloque: if parameters.new_hometown then doPlayerSetTown(cid, parameters.new_hometown) doTeleportThing(cid, getTownTemplePosition(parameters.new_hometown)) end
  14. E como é que essa máquina funciona? Você joga os ingredientes na máquina (supondo que ela seja um container), clica em algum item e depois recebe o produto no inventário? Seria de grande ajuda você explicar.

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia partindo do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer publicidade para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução! A publicação do seu anuncio é instantânea!

×