Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 06/26/16 em todas áreas

  1. Bluester

    [MÓDULO] Tutorial In-Game

    Eae galera do xtibia, hoje venho apresentar à vocês meu primeiro post, um módulo de Tutorial no OTC, parecido com o da PXG que você pode usar e customizar, basta ter um pouco de conhecimento ! (Se estiver em área errada peço que movam) Print: Bom, o script está pronto, mas se quiser editar, mexa apenas em configs_pt e em configs_en, nesses 2 arquivos, vocês editem o que quiserem e na pasta imgs vocês colocam as imagens (caso editem) na mesma resolução ! Link de download do módulo: Scan: Arquivos estão ocultos, para conseguir habilitar no Windows 7: Arquivos estão ocultos, para conseguir habilitar no Windows 8: Bom é só isso, até a próxima ! Créditos: Pokémon Waterfall por algumas partes dos scripts e imagens. WOP por algumas partes dos scripts e imagens. PXG por algumas imagens.
    2 pontos
  2. Eskylo

    Shopping celadon [pxg]

    Sprites utilizadas: http://www.xtibia.com/forum/topic/240705-spr-e-dat-da-pxg-07052016/ Items.otb utilizado: items.rar Para abrir/editar você precisa do RME com suporte a Transparência e Spr Extendido. Colocar items.otb utilizado em RME/data/854. Utilizar as sprites citadas acima no RME. Download: sppxg.rar sppxg.rar
    2 pontos
  3. Boa tarde pessoal, tudo bem? Hoje resolvi fazer um tutorial sobre dois recursos muito simples e úteis na hora de criar magias diferentes, inovadoras e divertidas. Motivação Eu nunca soube fazer spells direito, achava chato e monótono, portanto nunca procurei saber mais. Essa semana, acabei fazendo um evento que a recompensa era uma magia, então quis fazer algo diferente e bonito, que fugisse um pouco do padrão (dê uma olhada em: http://www.xtibia.com/forum/topic/238734-luna-event-bonus-spell-inspirado-no-sot-01/#entry1680858). Só que, na minha busca por aprender mais sobre as spells, eu vi que é um tanto nebuloso a parte de dano e de callbacks. Os tutoriais os utilizam nos scripts demonstrativos mas falam pouco a respeito. Li muito, descobri algumas coisas no empirismo e outras nas sources do TFS e me senti motivado a reunir tudo que encontrei em um tutorial. Importante: Este não é um tutorial que vai ensinar a criar uma spell, existem milhares com esse objetivo aqui no fórum e na internet em geral. O foco aqui é estudar dois recursos que podem tornar o processo criativo de spells muito mais interessante, divertido e único, abrindo possibilidades diferentes do que simplesmente uma magia que solta um efeito e dá dano. Bom, chega de mimimi e vamos ao que interessa. Conceitos Vamos começar definindo nossos dois objetos de estudo. Fórmulas, como o próprio nome já define, são expressões matemáticas usadas para representar algum valor. No nosso caso, as fórmulas de dano das magias são expressões matemáticas que sintetizam e representam o dano da nossa magia. Callbacks são, traduzindo ao pé da letra, funções que ligam de volta. Definindo melhor, são funções que disparam ações quando determinado evento/acontecimento ocorre. Isso é, elas nos dão um retorno a um evento ou chamad. Exemplos: addEvent, é um callback muito útil que dispara com o tempo chamando uma função; onDeath é um callback que dispara quando determinada criatura morre. Uma vez entendido teoricamente o que vamos estudar, mãos a obra. Entendendo Fórmulas O controle das fórmulas de dano das spells é feito pela função setCombatFormula, cuja chamada default é mostrada abaixo: setCombatFormula(combat, formulaType, min_a, min_b, max_a, max_b, min_lvl, max_lvl, min_mlvl, max_mlvl, min_dmg, max_dmg) Combat é o objeto combate em questão, normalmente ele é instanciado no inicio dos arquivos de spells como local combat = createCombatObject(). É esse objeto que controla, a partir de seus parâmetros, toda a dinâmica das spells: efeitos, dano, área, etc. Min_a e Max_a são múltiplicadores das fórmulas de dano máximo e mínimo Min_b e Max_b são números base das fórmulas de dano máximo e mínimo Min_lvl e Max_lvl são ponderadores do level na fórmula de dano máximo e mínimo baseado em ML, dividem o lvl do player. Min_mlvl e Max_mlvl são ponderadores do magic level na fórmula de dano máximo e mínimo baseado em ML, multiplicam o ml do player. Min_dmg e Max_dmg são os limites do dano máximo e mínimo, o menor dano possível é min_dmg e o maior dano possível é max_dmg. formulaType são os diferentes tipos de fórmulas que podem ser usados, isso é, formas diferentes de como os parâmetros de dano que foram passado serão utilizados. Existem três tipos relevantes de fórmulas, existe um quarto chamado undefined ou 0. Porém nele todos os parâmetros são zero. São eles: COMBAT_FORMULA_LEVELMAGIC ou 1 Essa é a fórmula mais completa das três, utiliza de todos os parâmetros para definir o dano máximo e mínimo. Basicamente, a fórmula de dano é Dano mínimo = ((player_level / min_lvl + player_mlvl) * min_mlvl) * min_a + min_b) Dano máximo = ((player_level / max_lvl + player_mlvl * max_mlvl) * max_a + max_b) Se dano mínimo > min_dmg, então dano mínimo = min_dmg Se dano máximo > max_dmg, então dano máximo = max_dmg Considerações importantes, o valor final de dano máximo e dano mínimo deve ser negativo, o mesmo vale para os valores de min_dmg e max_dmg. Portanto, para evitar confusão vai uma dica simples: Sempre coloque min_a, min_b, max_a, max_b, min_dmg e max_dmg negativos e o restante positivo. COMBAT_FORMULA_SKILL ou 2 Mais simples que o anterior, só utiliza em seu cálculo os parâmetros min_b, max_a e max_b. Leva em consideração, como veremos, level, arma e skill (referente à arma que ele estiver empunhando) do player. Min_dmg não serve para esse caso, mas max_dmg ainda vale como no anterior. Dano mínimo = min_b Dano máximo = Dano_Calculado * max_a + max_b Se dano máximo > max_dmg, então dano máximo = max_dmg Aqui Dano_Calculado é o calculo do seu dano com a sua arma, levando em conta seu level e skills. Novamente, o valor final dos danos deve ser negativo. Aqui, use todes os valores negativos e não terá problemas. COMBAT_FORMULA_DAMAGE ou 3 A mais simples das três, leva em consideração somente min_b, que será o dano mínimo e max_b, que será o dano máximo. Para não ter problemas, use valores negativos. A respeito das fórmulas é isso. São as três fórmulas pré-definidas e seus funcionamentos. Callbacks Nosso estudo sobre callbacks vai se basear na função setCombatCallback que faz o controle dos callbacks dos objetos de combate. A seguir, a declaração da função setCombatCallback: setCombatCallback(combat, callbackType, “nome da funcao”) Vamos explicar primeiro o que essa função faz. Ela adiciona ao objeto combat especificado uma função como retorno a um determinado tipo de evento. Cada tipo de callback é referente a um evento e espera da função que você passou como parâmetro alguns parâmetros. Por exemplo, queremos adicionar um callback do tipo X com a função de retorno functionX, sabendo que callbacks do tipo x esperam funções que recebam x1, x2 e x3 como parâmetro. Então temos que definir a função functionX e criar a chamada do callback: function functionX(x1, x2, x3) code end setCombatCallback(combat, X, “functionX”) Acredito que tenham entendido um pouco do funcionamento, agora vou explicar cada tipo de callback. Temos quatro tipos, mostrados a seguir: CALLBACK_PARAM_LEVELMAGICVALUE ou 1 Esse callback é definido para disparar quando o dano é aplicado. Não consegui descobrir exatamente em que momento ele é chamado, mas, quando definido, toda vez que sua magia causa dano ele vai disparar a função para a qual foi programado. Ele é utilizado para reprogramar a forma como o dano vai ser calculado. A grande sacada aqui é que você pode definir as formulas de dano como você bem entender (levando em conta level e ml) e melhor se encaixar ao seu propósito. Esse callback espera funções que recebam os parâmetros: cid, level, maglevel e um retorno com os valores máximos e mínimos de dano. Uma definição para esse callback seria: function functionX(cid, level, maglevel) min = -maglevel*1.1 + level max = -maglevel*2.2 + level*1.1 return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, “functionX”) CALLBACK_PARAM_SKILLVALUE ou 2 Similar ao anterior, porém danos com base em skills, esse callback é definido para disparar quando o dano é aplicado. Não consegui descobrir exatamente em que momento ele é chamado, mas, quando definido, toda vez que sua magia causa dano ele vai disparar a função para a qual foi programado. Ele é utilizado para reprogramar a forma como o dano vai ser calculado. A grande sacada aqui é que você pode definir as formulas de dano como você bem entender (levando em conta skills, level, ataque da arma e modo de ataque) e melhor se encaixar ao seu propósito. Esse callback espera funções que recebam os parâmetros: formulaBySkill(cid, level, skill, attack, p, factor) e um retorno com os valores máximos e mínimos de dano. Uma definição para esse callback seria: function functionX (cid, level, skill, attack, factor) min = -(1.2 * (attack * (skill + 5.8) / 25 + (level - 1) / 10) / factor) max = -(2 * (attack * (skill + 5.8) / 25 + (level - 1) / 10) / factor) return min, max end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, “functionX”) Observação importante: no servidor que eu tenho aqui, por algum motivo sobrenatural desconhecido, tem um parâmetro nulo extra entre attack e factor. Então, se você tentar usar isso no seu servidor e der erro “factor attempt to call nil value” ou algo do tipo use isso: function functionX (cid, level, skill, attack, vazio, factor) Nos sources que eu olhei esse parâmetro não existe, não achei nada a respeito dele e ele é sempre 0. Se alguém souber o que ele significa, se ele significar algo, comente ai. CALLBACK_PARAM_TARGETTILE ou 3 Esse callback é definido para disparar quando a magia atinge cada um dos tiles definidos em sua área. Ele pode ter uma diversidade de aplicações, que envolvem customizar efeitos e ações da magia de acordo com o tile que ela atinge. Vai depender da sua criatividade, mas há um leque infinito de coisas que podem ser feitas. Exemplo: Se uma área de neve for atingida por uma magia de fogo, ela descongela e vira um tile de terra ou pedra; se em um dos tiles que a magia acertar houver um item, esse item vai para a bp do player; em determinado tipo de terreno a magia dá um dano extra; e por ai vai. Esse callback espera funções que recebam os parâmetros: cid e tile. Uma definição para esse callback seria: function onTargetTile(cid, tile) addEvent(doSendMagicEffect, x*350, tile, config.effects.hit) End setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") CALLBACK_PARAM_TARGETCREATURE ou 4 Esse callback é parecido com o anterior. Ele é definido para disparar quando a magia atinge um criatura dentro da área de atuação dela. Ele pode ter uma diversidade de aplicações, que envolvem customizar efeitos e ações da magia de acordo com o tipo de criatura (diferentes monstros, se é player ou não, etc) que ela atinge. Vai depender da sua criatividade, mas há um leque infinito de coisas que podem ser feitas. Exemplo: Se um fire elemental for atingido por uma magia de fogo a vida dele aumenta ou um novo fire elemental surge; se o alvo da magia for um player há um dano adicional; se um monstro for atingido por essa magia ele é convencido e passa ate ajudar; e por ai vai Em uma magia como a que eu fiz para o evento luna, por exemplo, que dá vários hits ao longo de uma execução dela, cada hit dispara esse callback. Uma aplicação seria, então, a cada hit há uma chance de congelar e imobilizar o player. Esse callback espera funções que recebam os parâmetros: cid e target. Uma definição para esse callback seria: function onTargetCreature(cid, target) local chance = math.random(1, 18) if getGlobalStorageValue(5545) == -1 and isPlayer(target) and chance == 1 then registerCreatureEvent(target, "NoAtt") registerCreatureEvent(target, "NoSpell") registerCreatureEvent(target, "NoTgt") setGlobalStorageValue(config.storages.event, 1) addEvent(setGlobalStorageValue, 3000, 5545, -1) end chance = math.random(1, 15) if chance == 1 then doSendMagicEffect(getCreaturePosition(target), config.effects.hit) doCreatureSetNoMove(target, true) doSetItemOutfit(target, config.frozen_humans[math.random(1, #config.frozen_humans)], 1500) addEvent(backToMovement, 1800, target) end end setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") Bom gente, foi isso o que consegui coletar, entender e aprender sobre as fórmulas de dano e callbacks das magias. Qualquer coisa que queiram acrescentar ou corrigir, fiquem a vontade para comentar. Espero que gostem. Abraços,
    2 pontos
  4. Citar Bauman pode ser senso comum, fazendo sua avaliação ñ ser tão bem vista (pois o avaliador pode estar cansado de já ter lido outras mil redações citando a mesma coisa). Não sou professor de português, mas já passei por todas as provas de português do ensino médio, então aqui tem algumas correções de concordância, pontuação e alguns comentários pra ajudar a melhorar a sua argumentação: *só é comentário o que está entre *[asteriscos e colchetes]*, o que tá entre parênteses faz parte do texto. *lembrando: fiz as correções para as formas que eu acho que sejam as corretas. Posso ter me enganado em algum(ns) caso(s).
    2 pontos
  5. Deadpool

    [Encerrado]Pokémon sekai mmo - ats

    Boa noite galera, estou editando o tópico, pois este estava desatualizado, então resolvi editar e reviver o mesmo. Bem, vou apenas postar atualizações, não vou falar sobre o servidor e tals, pois isto é meio clichê. Prints: Old POKEDEX: New POKEDEX: New Helds: Mapa: New Shopping Celadon: New Pinsir Territory: New Mt. Moon: New Saffary Zone: Victory Road(Unico caminho terrestre para o Planalto Indigo) (Foto antiga, em breve posto atualizada): Vicotry Road: Lavender Tower: Pallet Town: Alguns sistemas; Como podem ver, demos um grande avanço no servidor! Qualquer duvida ou critica, pode comentar ai, ou comentar no grupo/pagina: Também estamos dando a chance de você, player, participar da nossa Equipe. Basta me contatar. Fã page: Pokémon SekaiMMO Grupo: Pokémon SekaiMMO
    1 ponto
  6. - Tema : LIBERDADE DE EXPRESSÃO E GUERRA AO TERROR : Estamos dispostos a assumir o risco ? Texto : Segundo Zygmunt Bauman, sociólogo polonês, a falta de solidez nas relações sociais, politicas e econômicas é característica da "modernidade líquida" vivida no século XX. Somado a isso surge os problemas relacionado à liberdade de expressão, se por um lado, é um direito nosso, por outro, se usado indevidamente, pode ser o estopim de vários problemas. No que se refere à liberdade de expressão ser um direito nosso, nem sempre foi assim, visto que antigamente nos era negado se expressar sobre o que o ocorria ao nosso redor. Após vários conflitos esse direito foi conquistado e consigo veio a evolução do mundo, haja vista que opiniões, criticas, que nos foi permitido, contribuíram para o surgimento de novas ideias, a tecnologia que vivenciamos hoje, reflete essa realidade. Não obstante, que o uso indevidamente da liberdade de expressão, não só pode ocasionar problemas sociais, como também incitar descontentamento naqueles não gostaram na sua forma de se expressar, os fazendo se sentirem ofendidos. Um grupo de jornalistas franceses fizeram uma "charge" irônica sobre a religião islâmica, algo que acontece frequentemente com outras religiões e demais assuntos, no entanto houve um descontentamento por parte de alguns islâmicos, ocasionando em um ataque terrorista ao local. Entende-se, portanto, que a liberdade de expressão é benéfica ao mundo, desde que seja aliado ao bom-sendo e valores éticos de nossa sociedade, para então evitarmos quaisquer problemas que possam vir a ocorrer. --------------------------------------------------------------------------------- @Caronte, @Daniel, @Danihcv, @Night Wolf, @Skulls.
    1 ponto
  7. KarlKalvin

    [mega stones] .obd

    Olá, a alguns dias eu postei um pack de kit addons da PXG com remakes em OBD, agora estou disponibilizando um pack com praticamente todas as megas stones do anime em .obd ( Estou pensando se posto também todos os pokes dessas pedras. ) Obs: Deve ter mais de 30/50 Stones Obs2: A numeração da print não é a mesma das pedras, só a ordem é semelhante. All Mega stones.rar All Mega stones.rar
    1 ponto
  8. KarlKalvin

    [mega stones] .obd

    @up
    1 ponto
  9. Thx. Citar alguns filósofos na maioria dos casos é "uma faca de dois gume", posso ganhar alguns pontos ou até mesmo perder bastante com o uso do mesmo, é algo que não sou de usar, mas após ler várias redações nota 1.000, decidi que o uso do mesmo é de grande importância. Ainda estou procurando citações que dificilmente outro estudante usariam. Obrigado pelo feedback, muita coisa por mim passou despercebido e sobre a parte do mais exemplos é que fiquei limitado a 30 linhas, a redação cobriu 29 linhas hahaha.
    1 ponto
  10. item_12009.zip item_12009.zip
    1 ponto
  11. em creaturescripts spawn.lua if isInArray(shinysName, doCorrectString(getCreatureName(cid))) then --alterado v1.9 \/ chance = 40 --1% chance
    1 ponto
  12. Não sei, também não cheguei a mexer no cliente na parte de modules . Caso eu descubra eu te aviso.
    1 ponto
  13. Deadpool

    [MÓDULO] Tutorial In-Game

    Se não pegou, provavelmente vocês têm que ir em game_interface e no arquivo .otmd, adicionar corretamente game_tutorial.
    1 ponto
  14. boxxer321

    Shopping celadon [pxg]

    sim, eu entendo... Mas é pq eu uso o dat e spr do DxP já adicionei bastante coisa nele... Mas obrigado mesmo assim!
    1 ponto
  15. Daskyn

    Trade center pxg!

    Bom , não é só vocês galerinha :v , também estou no "projeto" de refazer o mapa da PxG. OBS : Ainda estou em criação
    1 ponto
  16. Luga03

    [mapa] dxp isla quarta

    Mano, se a gente quiser ver um CP a gente vê um melhor que esse '-' Mostra print do Mapa e não de algo que tem direto '-'
    1 ponto
  17. Estou upando pelo Mega e pelo 4 shared....5 hrs por ai esta pronto. Upado senhores... So para fins scan e por conta de vcs.... Megaupload 4 shared
    1 ponto
  18. @@Caronte sempre fico em dúvida entre spells e creaturescripts. Em geral quando se usa os dois juntos sempre dá algo maravilhoso hahaha @Topic: achei bastante útil, tem algumas coisinhas que dá pra ser incrementado como a explicação do var no parametro do callback ou como forjar um combat criando uma metatable e passando no lugar do var mas por ora está excelente. REP+
    1 ponto
  19. Entendo Caronte. Obrigado pelo feedback, mas não sei se caberia aqui pq realmente é um conteúdo mais complexo que depende de conhecimentos anteriores. Acho que seria um desperdício explicar toda a dinâmica das spells para chegar ao ponto central do tutorial, sendo que tem bilhares de tutoriais que ensinam o básico. O que eu acho que poderia ter feito era indicar no inicio do tutorial conteudos mais basicos para que o leitor pudesse entendera base e ai sim vir a este tutorial, o que acha? Valeu novamente. Abraços,
    1 ponto
  20. Skulls, eu acho que é um ótimo conteúdo, só achei um pouco complicado para que está começando agora. Quando eu crio um tutorial eu sempre fico tentando dar uma olhada de quem não sabe nada do assunto, assim eu consigo ver coisas que eles não vão entender.
    1 ponto
  21. As spells "padrões" sempre foram uma decepção pra mim. Quando vi um projétio seguindo (mesmo com parede) o o alvo no (sdds) Kingdom Age vi que as spells são uma ótima maneira de inovar. Também tenho dúvidas sobre o assunto, vejo com calma depois Obg por compartilhar
    1 ponto
  22. Fala galera, tudo bem? Então, eu li o sot#01 alguns dias atrás e achei bem legal a história no qual ele gira em torno. Tive algumas idéias e, mesmo o evento não tendo acontecido por falta de inscritos, resolvi fazer pra lembrar algumas coisas, afinal tinha uns 7 anos que não mexia com scripts para otserv. O resultado, que vou mostrar abaixo, é um evento global (mas que pode muito bem ser adaptado para uma quest ou outra finalidade). Como parte da recompensa do evento, fiz de bonus uma spell baseada na frozenOrb do whitewolf. Bom vamos lá. O Evento Basicamente é um evento estilo aquela brincadeira antiga de criança "dança das cadeiras". Como assim? Bom, na área do evento o número de espaços vazios vai ser sempre o número de players restantes no evento -1. Isso implica que, em cada turno, pelo menos um player deixará o evento. Contexto Luna é uma estrela endeusada pelos elfos e muito poderosa. De tempo em tempo ela se desperta todos os players onlines são convocados para tentarem domar a sua ira. Aquele que sobreviver à ira de Luna sem se congelar será capaz de controlar seu poder até o próximo despertar. editado: Esqueci de avisar que coloquei para ele ignorar o tile central na contagem de tiles livres pois no tile central, do meu mapa, eu coloquei um frozen starlight representando a luna e, a cada round, há uma animação na luna só para ficar bonitinho. Crie um arquivo chamado lunaevent.lua dentro de scripts e coloque o código abaixo nele: Em globalevents.xml coloque a tag: <globalevent name="Luna" interval="18000000" script="lunaevent.lua" /> A recompensa do evento é uma souvenir, um frozen starlight com o nome do vencedor do evento e x horas (no caso 5) podendo utilizar o poder de luna. Bom, eu criei uma spell para ilustrar o poder de luna e como utilizar o storage que foi preenchido para o vencedor do evento para controlar o uso de uma spell. Luna Strike Primeiramente adicione a tag abaixo em spells.xml: <instant name="Luna Strike" words="exori luna" lvl="100" manapercent="5" prem="0" range="6" casterTargetOrDirection="1" blockwalls="1" exhaustion="10000" groups="1,4000" icon="156" needlearn="0" event="script" value="attack/luna strike.lua"> <vocation id="1"/> <vocation id="2"/> <vocation id="3"/> <vocation id="4"/> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> <vocation id="8"/> </instant> Crie um arquivo chamado luna strike.lua dentro de scripts/attacks e coloque o código abaixo nele: Essa magia tem duas peculiaridades: 1. Ela tem uma chance de 1/15 para cada hit que ela dá de congelar o alvo e tornalo imóvel por 1.8 segundos, o que já está implementado nesse script e já funciona. 2. Em pvp, isso é, ao atacar um player, ela tem uma chance de 1/18 de liberar a Benção de Luna e tornar o caster imune aos ataques daquele player por 3 segundos (atenção, não são de todos os players da área, somente do player que liberou a benção de luna ao receber um hit). Para implementar essa segunda parte, precisamos ir em creature scripts. Adicione as tags abaixo a creaturescripts.xml: <event type="attack" name="NoAtt" event="script" value="luna.lua"/> <event type="cast" name="NoSpell" event="script" value="luna.lua"/> <event type="target" name="NoTgt" event="script" value="luna.lua"/> Crie um arquivo chamado luna.lua dentro de scripts e coloque o código abaixo nele: Pronto, o seu evento está configura e sua magia 'Luna Strike' poderá ser castada pelo último vencedor do mesmo. Espero que gostem, os scripts estão comentados e são bem auto-explicativos, mas qualquer dúvida podem me perguntar. Abraços,
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...