Ir para conteúdo

Diogo

Visconde
  • Total de itens

    366
  • Registro em

  • Última visita

  • Dias Ganhos

    2

Histórico de Reputação

  1. Upvote
    Diogo recebeu reputação de vvdda91 em Criando Quests Bacanas   
    Vejo muitas pessoas que criam quests toscas do tipo "puxe a alavanca, mate o monstro e pegue o prêmio".
     
    Sim, é uma quest melhor que "caia no buraco, mate tudo e pegue o prêmio", mas conceitualmente não tem diferença nenhuma.
     
    Vejo também dezenas de pessoas clamarem pelo "RPG no OTServ", mas nem elas mesmas sabem o que diabos é esse RPG.
     
    Então que tal eu dar essas dicas aqui?
     
    Vou me basear em quests de Diablo II e jogos como Rohan Online / WoW, então são coisas óbvias, mas que passam despercebidas na criação de muitas quests de OTServ.
     
    Sem mais delongas...
     
     
    Usando aquela coisa legal chamada criatividade...
     
    Criatividade é o ato de criar.
     
    O ato de criar é colocar uma idéia inovadora em prática.
     
    Inovar é fazer o que não é habitual/comum.
     
    Ok, e pra que serve essas definições idiotas?
     
    Simples: se ser criativo é fazer algo que não é comum, vamos jogar quests de "mate e ganhe" no lixo e inovar!
     
    Em um RPG, o personagem vive em um contexto, não em um jogo.
     
    Ele tem um mundo próprio, com construções com as quais ele interage, personagem com os quais interage... Enfim, um ambiente próprio daquele mundo.
     
    Se é um mundo com monstros que são inimigos dos humanos, então obviamente seu personagem terá que matar monstros.
     
    Mas monstros são obrigatoriamente burros? Acho que não.
     
    Se eles são espertos o suficiente para se organizarem em uma raid, por que não seriam para roubar um item da família real que dá poder a eles e esconder esse item em uma fortaleza?
     
    Se hunters são espertos o suficiente para usar arco-e-flecha, por que não podem preparar traps se escondendo atrás de muros onde apenas ataques distantes os atingiriam? (Demons da anihilator seguiam essa lógica)
     
    E ainda usar de táticas de caça para levar um monstro forte o suficiente para ficar próximo do invasor, de forma que ele esteja tão preocupado para se defender que não possa sequer pensar em atacar os próprios hunters?
     
    Ou além disso, se eles possuem ouro em seu corpo, como o obteram? Talvez controlando um depósito de ouro que há tempos era dos humanos?
     
    Indo ainda mais além, por que eles não podem ter uma cidade própria, subterrânea e oculta?
     
    Por que não podem ser organizados o bastante para seguirem um caminho de destruição e dominação?
     
    Por que? Por que? Por que?
     
    Não se limitem ao que já viram. Por mais idiota que possa parecer, use o incomum.
     
     
     
    Transformando criatividade em algo útil
     
    Depois de ter suas idéias, é hora de trabalhá-las. Você tem o diamante bruto, mas precisa poli-lo para ficar algo chamativo e cobiçado.
     
    Uma coisa estúpida a se fazer é colocar quests sem motivo.
     
    Uma alavanca no meio do nada, um monstro qualquer saindo dela e um prêmio nada a ver.
     
    Para cada quest, deve haver uma história que a ambiente.
     
    Para cada quest, faça com que tenha um NPC que leve a ela ou dê pistas.
     
    Para cada quest, deve haver um local que condiza.
     
    Para cada quest, deve haver um prêmio que condiza.
     
    Pessoas podem até tropeçar em quests, mas ainda assim a quest tem que possuir todas as características acima.
     
    Talvez a do NPC possa ser suprimida, mas quando possível deve ser utilizada.
     
    Tá, já sabemos como ambientar uma quest, já tô pronto?
     
    Nananinanão.
     
     
     
    Criando correntes de quests
     
     
     
    Chega.
     
     
    Acho que entenderam o espírito, certo?
     
    Uma coisa leva a outra, e só é possível fazer uma quest se tiver feito a antecessora.
     
    E como os prêmios compensam...
     
    Vejam como começa com coisas fáceis, de forma que o jogador possa ir fazendo novas quests enquanto vai se fortalecendo no jogo.
     
    Claro, é apenas um exemplo, mas depois de uma cidade dos monstros poderiam descobrir que era apenas uma vila, que tinha todo um mundo subterrâneo usado pelos monstros, que eles estavam planejando um ataque em massa, etc etc etc.
     
    Resumindo: Uma coisa leva a outra... Mas com lógica e imaginação.
     
     
     
    Conclusão
     
    Crie uma verdadeira história, não simples quests sem conexão.
     
    Faça com que o jogador do seu servidor tenha um objetivo final, não apenas matar monstros para ficar forte.
     
    Inove em suas quests!
     
    ---
     
    E é isso galera.
     
    Espero que tenham gostado.
     
    Críticas e sugestões são bem vindas.
  2. Upvote
    Diogo recebeu reputação de Goomba em Rpg #1 - Introdução E Apresentação   
    Obs: Essa série de artigos não trata da escrita de fanfictions de Tibia, que são confundidas com Roleplaying, e sim do Role Play nos jogos.
     
    Oláááá, enfermeira leitor!
     



    Oláááá Enfermeira!

     
    Hoje, aqui, agora, começo uma série de artigos que abrangirão um tema super incrível e super ignorado no mundo do OTServ:
     
    O Role Play.
     
    Você, leitor querido e alienado leitor, talvez esteja se perguntando:
     
     
    Bom, se seu servidor de fundo de quintal só tiver jogadores desse estilo...
     



    Requisitos máximos para jogar Tibia

     
    ...então pode parar de ler por aqui e ir editar algum char para pklizar geral, seu malandrão.
     
    Mas se você tem ou planeja ter um servidor mais sério, gosta de desenvolvimento de jogos, gosta de ler, se interessa pelo tema, está aqui por curiosidade, ou me acha sexy, então Role Play tem tudo a ver com você.
     
    Pensando bem, se me acha sexy, talvez deva procurar um oculista oftalmologista.
     
    Nah! Minha mãe me acha lindo!
     



    Acabei de tirar essa

     
    Ficando um pouco mais sério - mas só um pouco -, vamos ao que interessa. O que diabos é Role Play?
     
    No sentido literal, essas duas palavras querem dizer "representar (play) um papel (role)". No sentido figurado, querem dizer... Representar um personagem, ou algo do tipo.
     
    Agora é a parte desagradável em que digo que nas poucas linhas que já escrevi, eu menti para você. Pois é.
     
    Eu não vou ensinar representação, teatro, essas coisas maneiras que realmente dão fama e dinheiro.
     



    Haha, você é mesmo engraçado, senhor autor.

     
    Tá, a piada foi ruim, vamos continuar.
     
    O Role Play, em jogos (RPG - Role Playing Game), é uma parte nada fundamental. Sim, a verdade nua e crua. Mas comecemos pelo início.
     
     



    Se esse couro viesse dentro dos bichinhos do Tibia...

     
    Sabe essas situações super comuns em vários jogos online que se dizem RPGs?
     
    Então... Nada disso é Role Play.
     
     
    Isso é o Roll Play (traduzindo, vira algo como "jogo contínuo"). É um estilo de jogo amplamente divulgado e extremamente fácil de se implementar.
     
    Não, não me diga "mas aquele joguinho de RPG que eu jogo só tem isso"...
     
    Sinto informar que esse joguinho seu não é totalmente feito de Role Play.
     
    O mundo dos games pegou o termo Role Play, engoliu, digeriu e... Transformou-o.
     
    Ao menos é isso que acontece com a maioria dos jogos online.
     
    Lembra-se de quando eu disse que Role Play significa "representar um papel"?
     
    Vamos aprofundar o significado dessas palavras.
     
    Quando você representa um papel, você se coloca no lugar de um personagem imaginário, em um mundo/ambiente imaginário.
     
    Vale lembrar que esse ambiente imaginário tem suas próprias regras.
     
    Nosso mundo também tem suas regras (leis da física como gravidade, inércia, etc), das quais não podmos sair.
     



    Energia = Massa * Velocidade da luz ao quadrado... Eu acho.

     
    Quando vamos para um mundo virtual, ele também tem suas regras.
     
    Por exemplo, na maioria dos jogos, há áreas em que é impossível realizar PVP. Se você pensar nisso, não faz o menor sentido. Mas é necessário para que os jogadores se sintam corfortáveis e seguros pelo menos naquele local do jogo.
     
    Já imaginou? Você sente vontade de bater em alguém mas uma força superior invisível impede seus punhos de tocarem na pessoa? Sinistro...
     
    Quando você está sendo um personagem em um mundo virtual, normalmente gosta de aventuras e limites morais do mundo real, como "não bater atoa nas pessoas", não existem.
     
    Por que? Será que é só porque "aquilo é de mentirinha", ou há outro motivo?
     
    Será que você realmente se sente irritado quando um bonequinho que nem existe rouba de você um item que também nem existe?
     
    Se parar para pensar, isso não faz o menor sentido. Sentir-se irritado por algo assim é ridículo.
     
     
    Você não gastou tempo para conseguir aquele loot. Você simplesmente sentou em frente o computador para horas de entretenimento por causa da sua falta do que fazer.
     
    Se não estivesse jogando o jogo, provavelmente estaria fazendo alguma outra coisa tão improdutiva quanto. Então não faz diferença ganhar ou não aquele loot.
     
    Foi seu personagem que se esforçou. Seu personagem que matou monstros. Seu personagem que gastou a energia dele.
     
     
    Exato! Porque isso é um RPG! Um Role Playing Game! Um jogo de representação de papéis! O personagem não existe! É só isso, um per-so-na-gem que é representado graças a você!
     
    Mas isso não muda o fato de que todos nós ficamos irados quando nosso item valioso é roubado, quando nosso tempo é desperdiçado... Porque realmente representamos!
     
    Veja bem, aquele item só é valioso, porque o mundo do jogo o fez ser valioso.
     
    Sim!
     
    E é aqui que entramos no que realmente expressarei nessa série de artigos:
     
    Na criação de um mundo que atraia e faça o jogador realmente se sentir na pele do personagem.
     
     
    É mesmo? Você se sente no carrinho do Gunbound? Eu acho que não.
     
    Mas o Gunbound não foi feito para isso. Nem o xadrez foi feito para você se sentir uma torre atacando um soldado rato.
     
    Os RPGs sim.
     
     
    Putz! Quem faz esses quotes? Cara chato...
     
    Bom, eu disse que a maioria era assim, e que a indústria de jogos transformou o conceito, não é?
     
    Pois bem, o conceito parece ter se transformado justamente nisso:
     
    Crie um mundo virtual qualquer com cidades, áreas de caça e quests sem criatividade, e chame de RPG.
     
    Mas criar um Role Play expressivo de verdade, que faça o personagem realmente se envolver, vai muito além disso.
     
    Um exemplo maravilhoso que acho que todos conhecem é Diablo II.
     



    Diablo 2... FEEL THE POWER!

     
    No Diablo II você sente o mundo ser quase palpável, quase uma realidade alternativa. Você joga, se envolve na história daquele mundo corrompido.
     
    Você tem que matar monstros sim. Mas não para matar. Tem um motivo para aqueles monstros morrerem.
     
     
    Não, eles estão tentando te impedir de salvar o mundo de uma besta diabólica.
     
    Enfim, o que estou tentando expressar é que a construção de um Role Playing Game real, a criação do Role Play, vai mundo além de criar cidades, monstros, áreas de hunt e NPCs aleatórios.
     
    É preciso uma história. Ambientar os personagens. Fazer quests que se interliguem, que tenham consequências para o personagem conseguir crescer. Até mesmo quests ou eventos que influenciem no jogo todo; por exemplo, a Guerra do Império do Ragnarok, que dá o controle de um castelo para a guild vencedora.
     
    Mas como já eu disse, Role Play não é necessário.
     
    Esqueça esse artigo, crie seu servidor só de áreas de hunt e seja feliz.
     
    É uma pena que alguns jogadores não ficarão tão felizes... Mas quem liga para eles? Você é um DEUS!
     



    Divirta-se sozinho no seu mundo, mister God.

     
    -- Artigo no Blog
  3. Upvote
    Diogo recebeu reputação de Linikinhow em Aprendendo Algoritmos #1   
    Algoritmos


     

    Aula 1

    Introdução, apresentação ao Visualg e primeiro algoritmo

     
    Introdução
     
    Quando falamos em programação no Open Tibia, muitos já pensam logo em códigos prontos para baixar, modificar meia dúzia de palavras e usar.
    Alguns nem fazem por mal, simplesmente não têm tempo para aprender a fazer por si mesmos, acham inútil recriar a roda ou ainda nem saberiam como fazer.
    As aulas/tutoriais que ministrarei no XTibia de Lógica de Programação e Algoritmos para quem quer aprender a programar e não tem nem noção por onde começar.
    São aulas básicas, e no campo dos Algoritmos iremos ver desde o que é um algoritmo até a criação de algoritmos para resolver tarefas complexas.
     
     
    Sobre a matéria
     
    Algoritmos são uma parte importante da programação e, como verá no decorrer do curso, o sucesso de todo e qualquer programa depende de algoritmos.
    Usaremos o programa VisuAlg para começar essa matéria por uma questão de não querer prender ninguém a nenhuma linguagem específica e ao mesmo tempo abrir portas para que o aluno possa partir para qualquer linguagem a partir daqui.
    Entretanto, em um segundo momento usaremos C, por ser muito mais robusto e completo do que a linguagem do VisuAlg que é baseada em Pascal.
     
     
    A linguagem de programação do VisuAlg
     
    O VisuAlg usa uma uma linguagem de programação semi-própria.
     
    Por que semi-própria?
     
    Ela é baseada totalmente em Pascal, uma linguagem de programação antiga, e no Portugol, que é uma pseudo-linguagem usada justamente para algoritmos.
    O resultado é uma linguagem simples de entender, em português e capaz de chegar a um nível bem poderoso de programação.
    Iremos ir aprendendo a linguagem juntamente com os algoritmos, então não se assuste.
     
     
    O VisuAlg
     
    O Visualg foi criado com o intuito justamente de lecionar.
    Um professor, insatisfeito com programas feitos em papel (sim, acreditem, algumas faculdades ensinam algoritmos no papel), quis criar um ambiente de aprendizado próximo da realidade, e ainda assim didático.
    Usando algo parecido com Portugol (veremos mais a frente nessa aula) e Pascal (linguagem de programação), ele chegou até o VisuAlg, um ambiente totalmente didático, de simples aprendizado e boas ferramentas de debug (veremos em outra aula).
     
    Para baixar o programa: http://ueboo.com/files/741852/setupv2(2).exe_369258.php
     
    Essa é a versão 2 do VisuAlg.
    Depois de baixar basta instalar e vamos lá.
     
     
    Começando com o VisuAlg
     
    Quando você abre o VisuAlg, aparece algo assim:
    Então vamos entender (quase) linha por linha:
    É onde você coloca o nome do seu algoritmo. Tem que ficar entre aspas SEMPRE.
     
    Percebe as duas barras antes? Isso significa que aquilo é um comentário, e não faz parte do programa em si.
    É util para o programador se organizar.
     
    Aqui fica a declaração de variáveis, veremos só mais para frente.
     
    O começo dos comandos (como diz o comentário) e a palavra-chave que marca o fim.
     
    Tanto algoritmo, var, inicio e fimalgoritmo são palavras-chave ou palavras reservadas do VisuAlg.
     
    Isso significa que elas tem um significado especial para o VisuAlg, e usá-las fora do local em que devem estar pode (e provavelmente vai) dar algum erro.
     
    Tá, vi tudo isso, mas o que isso quer dizer na prática?
     
    Quer dizer que em QUALQUER algoritmo (dentro do VisuAlg) primeiro dizemos qual é o nome dele.
    Logo depois, vem a parte de declaração de variáveis.
    Então o corpo (comandos) do algoritmo e chegamos ao fim.
     
    Simples não!?
     
     
    Criando um algoritmo
     
    Vamos então criar nosso primeiro programa:
     
    Primeiro vem o que?
    Como visto, é o nome do algoritmo, então vamos colocar... Meu primeiro algoritmo.
     
    Depois as variáveis. Ainda não chegamos nessa parte, então vamos pular.
     
    Logo em seguida, os comandos do programa entre inicio e fimalgoritmo.
     
    O que queremos que o algoritmo faça? Que ele imprima algo na tela.
     
    Aqui veremos nosso primeiro comando, o escreva.
     
    Quando você usar o comando escreva, ele irá mostrar (imprimir) algo na tela.
     
    Agora que temos tudo pronto, vamos juntar:

    algoritmo "Meu primeiro algoritmo" inicio escreva ("O VaL é legal.") fimalgoritmo
    Agora aperte F9 e tcham tcham tcham tcham!
     

     
    Incrível, não!?
     
    Ficamos por aqui para não ter muito conteúdo em uma aula só.
     
     
    Exercícios
     
    As respotas estarão em Spoiler logo depois, caso tenham dúvidas/críticas/elogios, postem aqui.
     
     
    Respostas
     
     
     
    Obs.: Antes que chegue um metido a sabe-tudo aqui, as respostas estão de acordo com o que foi ensinado na aula.
     
     
    Abraços e até a próxima.
     
    ---
     
    Edit: O link para download estava vindo com arquivo corrompido, modifiquei-o.
  4. Upvote
    Diogo recebeu reputação de DaNDaNrOxX em Hatsunezinha-Cuidado Com Ele No Seu Projeto   
    Quem é Danilo e quem é Gabriel?
     
    O que essas malditas imagens provam? É um falando uma coisa, e outro falando o oposto.
     
    Mas resumindo:
     
    PLAGIOU O QUE MEUS FILHOS, NENHUM DE VOCÊS É DONO DOS DIREITOS DE IMAGEM DE HARRY POTTER, OS DOIS SÃO PLAGIADORES, E SE O ZEZINHO DA PADARIA QUISER ELE PEGA OS SPRITES DE VOCÊS E USA COMO QUISER E VOCÊS NÃO TEM ABSOLUTAMENTE NENHUMA RAZÃO DE RECLAMAR!
     
    Deviam ficar felizes se dois dias depois de lançarem o servidor de vocês e surgirem as cópias alguém se dignar a falar a fonte, isso sim.
     
    Vão chupar um canavial de rola vocês dois, na moral.
  5. Upvote
    Diogo recebeu reputação de Jvchequer em Como Vcs Deixam O Mophus Voltar A Equipe   
    Vai ler sobre física quântica que você ganha mais se preocupar com o fulano indo pra XYZ.
  6. Upvote
    Diogo recebeu reputação de Henrique Moura em Como Vcs Deixam O Mophus Voltar A Equipe   
    Vai ler sobre física quântica que você ganha mais se preocupar com o fulano indo pra XYZ.
  7. Upvote
    Diogo recebeu reputação de masquente em Hatsunezinha-Cuidado Com Ele No Seu Projeto   
    Quem é Danilo e quem é Gabriel?
     
    O que essas malditas imagens provam? É um falando uma coisa, e outro falando o oposto.
     
    Mas resumindo:
     
    PLAGIOU O QUE MEUS FILHOS, NENHUM DE VOCÊS É DONO DOS DIREITOS DE IMAGEM DE HARRY POTTER, OS DOIS SÃO PLAGIADORES, E SE O ZEZINHO DA PADARIA QUISER ELE PEGA OS SPRITES DE VOCÊS E USA COMO QUISER E VOCÊS NÃO TEM ABSOLUTAMENTE NENHUMA RAZÃO DE RECLAMAR!
     
    Deviam ficar felizes se dois dias depois de lançarem o servidor de vocês e surgirem as cópias alguém se dignar a falar a fonte, isso sim.
     
    Vão chupar um canavial de rola vocês dois, na moral.
  8. Upvote
    Diogo recebeu reputação de Henrique Moura em Hatsunezinha-Cuidado Com Ele No Seu Projeto   
    Quem é Danilo e quem é Gabriel?
     
    O que essas malditas imagens provam? É um falando uma coisa, e outro falando o oposto.
     
    Mas resumindo:
     
    PLAGIOU O QUE MEUS FILHOS, NENHUM DE VOCÊS É DONO DOS DIREITOS DE IMAGEM DE HARRY POTTER, OS DOIS SÃO PLAGIADORES, E SE O ZEZINHO DA PADARIA QUISER ELE PEGA OS SPRITES DE VOCÊS E USA COMO QUISER E VOCÊS NÃO TEM ABSOLUTAMENTE NENHUMA RAZÃO DE RECLAMAR!
     
    Deviam ficar felizes se dois dias depois de lançarem o servidor de vocês e surgirem as cópias alguém se dignar a falar a fonte, isso sim.
     
    Vão chupar um canavial de rola vocês dois, na moral.
  9. Upvote
    Diogo deu reputação a Secrets em Hatsunezinha-Cuidado Com Ele No Seu Projeto   
    O cara paga de spriter mas rippa e rouba sprites
     
    Rippar roubar dá na mesma...
     
    Curtiu o resumo? resp maiz plax (heauheaeaeuhae)
  10. Upvote
    Diogo recebeu reputação de arthur199 em Criando Quests Bacanas   
    Vejo muitas pessoas que criam quests toscas do tipo "puxe a alavanca, mate o monstro e pegue o prêmio".
     
    Sim, é uma quest melhor que "caia no buraco, mate tudo e pegue o prêmio", mas conceitualmente não tem diferença nenhuma.
     
    Vejo também dezenas de pessoas clamarem pelo "RPG no OTServ", mas nem elas mesmas sabem o que diabos é esse RPG.
     
    Então que tal eu dar essas dicas aqui?
     
    Vou me basear em quests de Diablo II e jogos como Rohan Online / WoW, então são coisas óbvias, mas que passam despercebidas na criação de muitas quests de OTServ.
     
    Sem mais delongas...
     
     
    Usando aquela coisa legal chamada criatividade...
     
    Criatividade é o ato de criar.
     
    O ato de criar é colocar uma idéia inovadora em prática.
     
    Inovar é fazer o que não é habitual/comum.
     
    Ok, e pra que serve essas definições idiotas?
     
    Simples: se ser criativo é fazer algo que não é comum, vamos jogar quests de "mate e ganhe" no lixo e inovar!
     
    Em um RPG, o personagem vive em um contexto, não em um jogo.
     
    Ele tem um mundo próprio, com construções com as quais ele interage, personagem com os quais interage... Enfim, um ambiente próprio daquele mundo.
     
    Se é um mundo com monstros que são inimigos dos humanos, então obviamente seu personagem terá que matar monstros.
     
    Mas monstros são obrigatoriamente burros? Acho que não.
     
    Se eles são espertos o suficiente para se organizarem em uma raid, por que não seriam para roubar um item da família real que dá poder a eles e esconder esse item em uma fortaleza?
     
    Se hunters são espertos o suficiente para usar arco-e-flecha, por que não podem preparar traps se escondendo atrás de muros onde apenas ataques distantes os atingiriam? (Demons da anihilator seguiam essa lógica)
     
    E ainda usar de táticas de caça para levar um monstro forte o suficiente para ficar próximo do invasor, de forma que ele esteja tão preocupado para se defender que não possa sequer pensar em atacar os próprios hunters?
     
    Ou além disso, se eles possuem ouro em seu corpo, como o obteram? Talvez controlando um depósito de ouro que há tempos era dos humanos?
     
    Indo ainda mais além, por que eles não podem ter uma cidade própria, subterrânea e oculta?
     
    Por que não podem ser organizados o bastante para seguirem um caminho de destruição e dominação?
     
    Por que? Por que? Por que?
     
    Não se limitem ao que já viram. Por mais idiota que possa parecer, use o incomum.
     
     
     
    Transformando criatividade em algo útil
     
    Depois de ter suas idéias, é hora de trabalhá-las. Você tem o diamante bruto, mas precisa poli-lo para ficar algo chamativo e cobiçado.
     
    Uma coisa estúpida a se fazer é colocar quests sem motivo.
     
    Uma alavanca no meio do nada, um monstro qualquer saindo dela e um prêmio nada a ver.
     
    Para cada quest, deve haver uma história que a ambiente.
     
    Para cada quest, faça com que tenha um NPC que leve a ela ou dê pistas.
     
    Para cada quest, deve haver um local que condiza.
     
    Para cada quest, deve haver um prêmio que condiza.
     
    Pessoas podem até tropeçar em quests, mas ainda assim a quest tem que possuir todas as características acima.
     
    Talvez a do NPC possa ser suprimida, mas quando possível deve ser utilizada.
     
    Tá, já sabemos como ambientar uma quest, já tô pronto?
     
    Nananinanão.
     
     
     
    Criando correntes de quests
     
     
     
    Chega.
     
     
    Acho que entenderam o espírito, certo?
     
    Uma coisa leva a outra, e só é possível fazer uma quest se tiver feito a antecessora.
     
    E como os prêmios compensam...
     
    Vejam como começa com coisas fáceis, de forma que o jogador possa ir fazendo novas quests enquanto vai se fortalecendo no jogo.
     
    Claro, é apenas um exemplo, mas depois de uma cidade dos monstros poderiam descobrir que era apenas uma vila, que tinha todo um mundo subterrâneo usado pelos monstros, que eles estavam planejando um ataque em massa, etc etc etc.
     
    Resumindo: Uma coisa leva a outra... Mas com lógica e imaginação.
     
     
     
    Conclusão
     
    Crie uma verdadeira história, não simples quests sem conexão.
     
    Faça com que o jogador do seu servidor tenha um objetivo final, não apenas matar monstros para ficar forte.
     
    Inove em suas quests!
     
    ---
     
    E é isso galera.
     
    Espero que tenham gostado.
     
    Críticas e sugestões são bem vindas.
  11. Upvote
    Diogo recebeu reputação de AandersonC em Criando Quests Bacanas   
    Vejo muitas pessoas que criam quests toscas do tipo "puxe a alavanca, mate o monstro e pegue o prêmio".
     
    Sim, é uma quest melhor que "caia no buraco, mate tudo e pegue o prêmio", mas conceitualmente não tem diferença nenhuma.
     
    Vejo também dezenas de pessoas clamarem pelo "RPG no OTServ", mas nem elas mesmas sabem o que diabos é esse RPG.
     
    Então que tal eu dar essas dicas aqui?
     
    Vou me basear em quests de Diablo II e jogos como Rohan Online / WoW, então são coisas óbvias, mas que passam despercebidas na criação de muitas quests de OTServ.
     
    Sem mais delongas...
     
     
    Usando aquela coisa legal chamada criatividade...
     
    Criatividade é o ato de criar.
     
    O ato de criar é colocar uma idéia inovadora em prática.
     
    Inovar é fazer o que não é habitual/comum.
     
    Ok, e pra que serve essas definições idiotas?
     
    Simples: se ser criativo é fazer algo que não é comum, vamos jogar quests de "mate e ganhe" no lixo e inovar!
     
    Em um RPG, o personagem vive em um contexto, não em um jogo.
     
    Ele tem um mundo próprio, com construções com as quais ele interage, personagem com os quais interage... Enfim, um ambiente próprio daquele mundo.
     
    Se é um mundo com monstros que são inimigos dos humanos, então obviamente seu personagem terá que matar monstros.
     
    Mas monstros são obrigatoriamente burros? Acho que não.
     
    Se eles são espertos o suficiente para se organizarem em uma raid, por que não seriam para roubar um item da família real que dá poder a eles e esconder esse item em uma fortaleza?
     
    Se hunters são espertos o suficiente para usar arco-e-flecha, por que não podem preparar traps se escondendo atrás de muros onde apenas ataques distantes os atingiriam? (Demons da anihilator seguiam essa lógica)
     
    E ainda usar de táticas de caça para levar um monstro forte o suficiente para ficar próximo do invasor, de forma que ele esteja tão preocupado para se defender que não possa sequer pensar em atacar os próprios hunters?
     
    Ou além disso, se eles possuem ouro em seu corpo, como o obteram? Talvez controlando um depósito de ouro que há tempos era dos humanos?
     
    Indo ainda mais além, por que eles não podem ter uma cidade própria, subterrânea e oculta?
     
    Por que não podem ser organizados o bastante para seguirem um caminho de destruição e dominação?
     
    Por que? Por que? Por que?
     
    Não se limitem ao que já viram. Por mais idiota que possa parecer, use o incomum.
     
     
     
    Transformando criatividade em algo útil
     
    Depois de ter suas idéias, é hora de trabalhá-las. Você tem o diamante bruto, mas precisa poli-lo para ficar algo chamativo e cobiçado.
     
    Uma coisa estúpida a se fazer é colocar quests sem motivo.
     
    Uma alavanca no meio do nada, um monstro qualquer saindo dela e um prêmio nada a ver.
     
    Para cada quest, deve haver uma história que a ambiente.
     
    Para cada quest, faça com que tenha um NPC que leve a ela ou dê pistas.
     
    Para cada quest, deve haver um local que condiza.
     
    Para cada quest, deve haver um prêmio que condiza.
     
    Pessoas podem até tropeçar em quests, mas ainda assim a quest tem que possuir todas as características acima.
     
    Talvez a do NPC possa ser suprimida, mas quando possível deve ser utilizada.
     
    Tá, já sabemos como ambientar uma quest, já tô pronto?
     
    Nananinanão.
     
     
     
    Criando correntes de quests
     
     
     
    Chega.
     
     
    Acho que entenderam o espírito, certo?
     
    Uma coisa leva a outra, e só é possível fazer uma quest se tiver feito a antecessora.
     
    E como os prêmios compensam...
     
    Vejam como começa com coisas fáceis, de forma que o jogador possa ir fazendo novas quests enquanto vai se fortalecendo no jogo.
     
    Claro, é apenas um exemplo, mas depois de uma cidade dos monstros poderiam descobrir que era apenas uma vila, que tinha todo um mundo subterrâneo usado pelos monstros, que eles estavam planejando um ataque em massa, etc etc etc.
     
    Resumindo: Uma coisa leva a outra... Mas com lógica e imaginação.
     
     
     
    Conclusão
     
    Crie uma verdadeira história, não simples quests sem conexão.
     
    Faça com que o jogador do seu servidor tenha um objetivo final, não apenas matar monstros para ficar forte.
     
    Inove em suas quests!
     
    ---
     
    E é isso galera.
     
    Espero que tenham gostado.
     
    Críticas e sugestões são bem vindas.
  12. Upvote
    Diogo deu reputação a Mophus em [Tbnews] Envolva-Se   
    Teaser #3 – Novos outfits e… cavalos!

     
    O test server está online mas os teasers ainda não acabaram! Vamos conhecer mais algumas das novas 'quests', novos outfits e mais algumas criaturas/montarias.
     
    Febre do Pântano
    Ottokar, a alma da casa dos pobres em Venore, luta desesperadamente contra a febre do pântano no local. Para manter tudo sob controle e prevenir que se espalhe pela cidade, ele precisa de um certo número de medicine bags (bolsa de medicamentos) todos os dias.
     



     
    Swamp trolls parecem carregar com eles alguns, mas Ottokar não pode deixar as pessoas que sofrem sozinhas. Em troca das bolsas de medicamentos, ele vai lhe dar os pertences dos pacientes falecidos. Quem sabe você é sortudo o suficiente para conseguir slug drug, que dizem ser necessário para domar slugs (lesmas)?
     



     
    Se a febre se espalhar pela cidade, entretanto, cidadãos enlouquecidos pela febre irão atacar Venore.
     



     
    Se você conseguir alguns pedaços de suas roupas, você poderá se vestir como eles. Enfim, você vai ajudar Ottokar ou esperar que a febre se espalhe?
     



     
    A Voz do Mestre
     
    Uma torre mágica apareceu ao leste de Edron. Um mad mage sem nenhuma conexão com a Academia criou este edifício e conduziu diversos experimentos – e alguns deles falharam horrivelmente. O mago não está por lá, mas as cavernas parecem cheias com seus servos. Eles carregam resíduos de slimes, que serão úteis para você conseguir seu elementalist outfit.
     



     
    Matando todos os servos, irá provocar o mago a aparecer e você poderá lutar com ele. Entretanto, se todos os servos morrerem, fungus irão se espalhar por toda a torre e só poderão ser removidos com a ajuda de um slime gobbler. Os servos e o mago só voltarão após todos os fungos serem comidos.
     



     
    Overhunting
     
    Você já ouviu falar do white deer da floresta de Ab’Dendriel? Estas lindas criaturas são amadas e reverenciadas pelos elfos, apesar de que comerciantes escrupulosos estão mais interessados em sua valiosa pele e chifres. Então, para conseguir dinheiro, aventureiros caçam este veado, e assim, colocam a espécie em extinção. Além disso, matando white deers irá perturbar o delicado equilíbrio ecológico de seus inimigos naturais, os lobos, que começarão a passar fome. Então, se a população de veados cair muito, o número de lobos famintos vai aumentar. Sendo assim, você pode ajudar os elfos a restaurar o equilíbrio natural lurando lobos em armadilhas especiais, e entregando seus corpos para que a população de veados possa crescer novamente.
     



     
    Cavalos
     
    Finalmente, cavalos chegaram ao Tibia! As novas estações de cavalos perto de Thais e Venore não só conectam a cidade através de um serviço de carruagem, mas permitem jogadores de alugar um cavalo por uma pequena taxa diária.
     



     
    Algumas vezes, os cavalos irão fugir, e o serviço será suspendido até que um número suficiente de cavalos sejam perseguidos novamente até o celeiro. Rumores dizem que você pode tentar domar outros tipos de cavalos, enquanto os cavalos do celeiro estão soltos.
     



     
    Invasão de Insectóides
     
    Estranhos insectóides foram vistos em Greenshore. Se você não matar um número suficiente deles, eles acabarão comendo as folhas e a grama deixando para trás um deserto. Mate o suficiente dessas criaturas rastejantes para parar a invasão e deixar a terra ficar verde novamente.
     



     
    No Summer Update, não vai faltar lugares para explorar e suas decisões serão muito importantes. Continue de olho no Portal Tibia para mais informações direto do test server!
     
    Atenciosamente,
    Mophus&PortalTibia
  13. Upvote
    Diogo recebeu reputação de MasterViciado em Criando Quests Bacanas   
    Vejo muitas pessoas que criam quests toscas do tipo "puxe a alavanca, mate o monstro e pegue o prêmio".
     
    Sim, é uma quest melhor que "caia no buraco, mate tudo e pegue o prêmio", mas conceitualmente não tem diferença nenhuma.
     
    Vejo também dezenas de pessoas clamarem pelo "RPG no OTServ", mas nem elas mesmas sabem o que diabos é esse RPG.
     
    Então que tal eu dar essas dicas aqui?
     
    Vou me basear em quests de Diablo II e jogos como Rohan Online / WoW, então são coisas óbvias, mas que passam despercebidas na criação de muitas quests de OTServ.
     
    Sem mais delongas...
     
     
    Usando aquela coisa legal chamada criatividade...
     
    Criatividade é o ato de criar.
     
    O ato de criar é colocar uma idéia inovadora em prática.
     
    Inovar é fazer o que não é habitual/comum.
     
    Ok, e pra que serve essas definições idiotas?
     
    Simples: se ser criativo é fazer algo que não é comum, vamos jogar quests de "mate e ganhe" no lixo e inovar!
     
    Em um RPG, o personagem vive em um contexto, não em um jogo.
     
    Ele tem um mundo próprio, com construções com as quais ele interage, personagem com os quais interage... Enfim, um ambiente próprio daquele mundo.
     
    Se é um mundo com monstros que são inimigos dos humanos, então obviamente seu personagem terá que matar monstros.
     
    Mas monstros são obrigatoriamente burros? Acho que não.
     
    Se eles são espertos o suficiente para se organizarem em uma raid, por que não seriam para roubar um item da família real que dá poder a eles e esconder esse item em uma fortaleza?
     
    Se hunters são espertos o suficiente para usar arco-e-flecha, por que não podem preparar traps se escondendo atrás de muros onde apenas ataques distantes os atingiriam? (Demons da anihilator seguiam essa lógica)
     
    E ainda usar de táticas de caça para levar um monstro forte o suficiente para ficar próximo do invasor, de forma que ele esteja tão preocupado para se defender que não possa sequer pensar em atacar os próprios hunters?
     
    Ou além disso, se eles possuem ouro em seu corpo, como o obteram? Talvez controlando um depósito de ouro que há tempos era dos humanos?
     
    Indo ainda mais além, por que eles não podem ter uma cidade própria, subterrânea e oculta?
     
    Por que não podem ser organizados o bastante para seguirem um caminho de destruição e dominação?
     
    Por que? Por que? Por que?
     
    Não se limitem ao que já viram. Por mais idiota que possa parecer, use o incomum.
     
     
     
    Transformando criatividade em algo útil
     
    Depois de ter suas idéias, é hora de trabalhá-las. Você tem o diamante bruto, mas precisa poli-lo para ficar algo chamativo e cobiçado.
     
    Uma coisa estúpida a se fazer é colocar quests sem motivo.
     
    Uma alavanca no meio do nada, um monstro qualquer saindo dela e um prêmio nada a ver.
     
    Para cada quest, deve haver uma história que a ambiente.
     
    Para cada quest, faça com que tenha um NPC que leve a ela ou dê pistas.
     
    Para cada quest, deve haver um local que condiza.
     
    Para cada quest, deve haver um prêmio que condiza.
     
    Pessoas podem até tropeçar em quests, mas ainda assim a quest tem que possuir todas as características acima.
     
    Talvez a do NPC possa ser suprimida, mas quando possível deve ser utilizada.
     
    Tá, já sabemos como ambientar uma quest, já tô pronto?
     
    Nananinanão.
     
     
     
    Criando correntes de quests
     
     
     
    Chega.
     
     
    Acho que entenderam o espírito, certo?
     
    Uma coisa leva a outra, e só é possível fazer uma quest se tiver feito a antecessora.
     
    E como os prêmios compensam...
     
    Vejam como começa com coisas fáceis, de forma que o jogador possa ir fazendo novas quests enquanto vai se fortalecendo no jogo.
     
    Claro, é apenas um exemplo, mas depois de uma cidade dos monstros poderiam descobrir que era apenas uma vila, que tinha todo um mundo subterrâneo usado pelos monstros, que eles estavam planejando um ataque em massa, etc etc etc.
     
    Resumindo: Uma coisa leva a outra... Mas com lógica e imaginação.
     
     
     
    Conclusão
     
    Crie uma verdadeira história, não simples quests sem conexão.
     
    Faça com que o jogador do seu servidor tenha um objetivo final, não apenas matar monstros para ficar forte.
     
    Inove em suas quests!
     
    ---
     
    E é isso galera.
     
    Espero que tenham gostado.
     
    Críticas e sugestões são bem vindas.
  14. Upvote
    Diogo deu reputação a Lopoi2 em Em Busca Da Solução   
    Em busca da solução

     
    ^Isso é uma brincadeira. (afinal 33,333...% = 1/3, como só existem 3 possibilidades vocês ficam na mesma)
     
    Aviso:
    Bem, criei este texto 2 anos atrás e não me lembro direito a história. Estarei continuando conforme as críticas (construtivas!!!!) cheguem. Também preciso de um título.
     
     
    Créditos: Lopoi2
  15. Upvote
    Diogo deu reputação a MatheusGlad em [Arquivado]Funçao Docreateiteminarea(Firstpos, Area, Tab)   
    Function:

    function doCreateItemInArea(firstpos, area, tab) -- function by MatheusMkalo for i, z in pairs(area) do pos = {x=firstpos.x, y=firstpos.y+i-1, z=firstpos.z} for s, x in pairs(z) do pos.x = firstpos.x+s-1 if tab[x] or type(x) == "table" then for l = 1, type(x) == "table" and #x or 1 do item = doCreateItem(type(x) == "table" and (not tab[x[l]].name and tab[x[l]].itemid or getItemIdByName(tab[x[l]].name)) or (not tab[x].name and tab[x].itemid or getItemIdByName(tab[x[l]].name)), type(x) == "table" and (tab[x[l]].count == nil and 1 or tab[x[l]].count) or tab[x].count == nil and 1 or tab[x].count, pos) doItemSetAttribute(item, "aid", type(x) == "table" and (tab[x[l]].actionid == nil and 0 or tab[x[l]].actionid) or tab[x].actionid == nil and 0 or tab[x].actionid) end end end end return TRUE end
     
    Bem oque ela faz eu acho que ja da pra saber né, mas pra quem nao sabe ingles:
    A funçao cria itens em uma area.
     
    Como usar a function:
     
    Bem pra usar eh bem simples, basta criar uma area parecida com a de uma magia e botar a posiçao do primeiro "sqm"
     
    Uma talkaction que cria itens em volta do player:
     
    Vou explicar mais um pouco as coisas:
     
    Oque esta em vermelho eh a pos do primeiro sqm da area que seria o de azul:
     
    Oque esta em rosa seria a area que no caso eh a areacreate.
    Oque esta em laranja sao oque os numeros na area vao representar:
    local items = {
    [1] = {itemid = 2160, count = 1},
    [2] = {itemid = 2160, count = 2},
    [3] = {itemid = 2160, count = 3},
    }
     
    No caso dessa tabela, aonde estiver o numero 1 na area, vai criar 1 item de id 2160 aonde estiver 2, criara 2 items de id 2160, e assim por diante.
     
    Voce nao é obrigado a colocar uma quantidade voce pode deixar somente o itemid que nao ira bugar.
     
     
    Algumas propriedades a mais:
     
    Se voce quiser criar varios items no mesmo tile voce pode, voce so precisa botar eles entre chaves assim:
    local areacreate = {
    {{3,2}, {1,2}, {3,1}},
    {{3,1}, 0, {1,2}},
    {{2,3}, {3,2}, {3,3}},
    }
     
    Voce pode trocar o itemid = 2160 por name = "Crystal Coin" que ira ir perfeitamente:
    local items = {
    [1] = {name = "Golden Helmet"},
    [2] = {name = "Magic Plate Armor"},
    [3] = {name = "Crystal Coin", count = 5},
    }
     
    local areacreate = {
    {{3,2}, {1,2}, {3,1}},
    {{3,1}, 0, {1,2}},
    {{2,3}, {3,2}, {3,3}},
    }
     
    Voce pode botar actionids nos items assim:
    local items = {
    [1] = {name = "Golden Helmet"},
    [2] = {name = "Magic Plate Armor", actionid = 666},
    [3] = {name = "Crystal Coin", count = 5},
    }
     
    Lembre-se que todos os items 2 que forem criados terao akele actionid.
     
     
    Pronto, use e abuse. Nao gaste seu rep+ comigo, so um elogio ja ta otimo.
     
    Algumas areas e ids para brincar:
     
     
  16. Upvote
    Diogo recebeu reputação de arkires em Rpg #1 - Introdução E Apresentação   
    Obs: Essa série de artigos não trata da escrita de fanfictions de Tibia, que são confundidas com Roleplaying, e sim do Role Play nos jogos.
     
    Oláááá, enfermeira leitor!
     



    Oláááá Enfermeira!

     
    Hoje, aqui, agora, começo uma série de artigos que abrangirão um tema super incrível e super ignorado no mundo do OTServ:
     
    O Role Play.
     
    Você, leitor querido e alienado leitor, talvez esteja se perguntando:
     
     
    Bom, se seu servidor de fundo de quintal só tiver jogadores desse estilo...
     



    Requisitos máximos para jogar Tibia

     
    ...então pode parar de ler por aqui e ir editar algum char para pklizar geral, seu malandrão.
     
    Mas se você tem ou planeja ter um servidor mais sério, gosta de desenvolvimento de jogos, gosta de ler, se interessa pelo tema, está aqui por curiosidade, ou me acha sexy, então Role Play tem tudo a ver com você.
     
    Pensando bem, se me acha sexy, talvez deva procurar um oculista oftalmologista.
     
    Nah! Minha mãe me acha lindo!
     



    Acabei de tirar essa

     
    Ficando um pouco mais sério - mas só um pouco -, vamos ao que interessa. O que diabos é Role Play?
     
    No sentido literal, essas duas palavras querem dizer "representar (play) um papel (role)". No sentido figurado, querem dizer... Representar um personagem, ou algo do tipo.
     
    Agora é a parte desagradável em que digo que nas poucas linhas que já escrevi, eu menti para você. Pois é.
     
    Eu não vou ensinar representação, teatro, essas coisas maneiras que realmente dão fama e dinheiro.
     



    Haha, você é mesmo engraçado, senhor autor.

     
    Tá, a piada foi ruim, vamos continuar.
     
    O Role Play, em jogos (RPG - Role Playing Game), é uma parte nada fundamental. Sim, a verdade nua e crua. Mas comecemos pelo início.
     
     



    Se esse couro viesse dentro dos bichinhos do Tibia...

     
    Sabe essas situações super comuns em vários jogos online que se dizem RPGs?
     
    Então... Nada disso é Role Play.
     
     
    Isso é o Roll Play (traduzindo, vira algo como "jogo contínuo"). É um estilo de jogo amplamente divulgado e extremamente fácil de se implementar.
     
    Não, não me diga "mas aquele joguinho de RPG que eu jogo só tem isso"...
     
    Sinto informar que esse joguinho seu não é totalmente feito de Role Play.
     
    O mundo dos games pegou o termo Role Play, engoliu, digeriu e... Transformou-o.
     
    Ao menos é isso que acontece com a maioria dos jogos online.
     
    Lembra-se de quando eu disse que Role Play significa "representar um papel"?
     
    Vamos aprofundar o significado dessas palavras.
     
    Quando você representa um papel, você se coloca no lugar de um personagem imaginário, em um mundo/ambiente imaginário.
     
    Vale lembrar que esse ambiente imaginário tem suas próprias regras.
     
    Nosso mundo também tem suas regras (leis da física como gravidade, inércia, etc), das quais não podmos sair.
     



    Energia = Massa * Velocidade da luz ao quadrado... Eu acho.

     
    Quando vamos para um mundo virtual, ele também tem suas regras.
     
    Por exemplo, na maioria dos jogos, há áreas em que é impossível realizar PVP. Se você pensar nisso, não faz o menor sentido. Mas é necessário para que os jogadores se sintam corfortáveis e seguros pelo menos naquele local do jogo.
     
    Já imaginou? Você sente vontade de bater em alguém mas uma força superior invisível impede seus punhos de tocarem na pessoa? Sinistro...
     
    Quando você está sendo um personagem em um mundo virtual, normalmente gosta de aventuras e limites morais do mundo real, como "não bater atoa nas pessoas", não existem.
     
    Por que? Será que é só porque "aquilo é de mentirinha", ou há outro motivo?
     
    Será que você realmente se sente irritado quando um bonequinho que nem existe rouba de você um item que também nem existe?
     
    Se parar para pensar, isso não faz o menor sentido. Sentir-se irritado por algo assim é ridículo.
     
     
    Você não gastou tempo para conseguir aquele loot. Você simplesmente sentou em frente o computador para horas de entretenimento por causa da sua falta do que fazer.
     
    Se não estivesse jogando o jogo, provavelmente estaria fazendo alguma outra coisa tão improdutiva quanto. Então não faz diferença ganhar ou não aquele loot.
     
    Foi seu personagem que se esforçou. Seu personagem que matou monstros. Seu personagem que gastou a energia dele.
     
     
    Exato! Porque isso é um RPG! Um Role Playing Game! Um jogo de representação de papéis! O personagem não existe! É só isso, um per-so-na-gem que é representado graças a você!
     
    Mas isso não muda o fato de que todos nós ficamos irados quando nosso item valioso é roubado, quando nosso tempo é desperdiçado... Porque realmente representamos!
     
    Veja bem, aquele item só é valioso, porque o mundo do jogo o fez ser valioso.
     
    Sim!
     
    E é aqui que entramos no que realmente expressarei nessa série de artigos:
     
    Na criação de um mundo que atraia e faça o jogador realmente se sentir na pele do personagem.
     
     
    É mesmo? Você se sente no carrinho do Gunbound? Eu acho que não.
     
    Mas o Gunbound não foi feito para isso. Nem o xadrez foi feito para você se sentir uma torre atacando um soldado rato.
     
    Os RPGs sim.
     
     
    Putz! Quem faz esses quotes? Cara chato...
     
    Bom, eu disse que a maioria era assim, e que a indústria de jogos transformou o conceito, não é?
     
    Pois bem, o conceito parece ter se transformado justamente nisso:
     
    Crie um mundo virtual qualquer com cidades, áreas de caça e quests sem criatividade, e chame de RPG.
     
    Mas criar um Role Play expressivo de verdade, que faça o personagem realmente se envolver, vai muito além disso.
     
    Um exemplo maravilhoso que acho que todos conhecem é Diablo II.
     



    Diablo 2... FEEL THE POWER!

     
    No Diablo II você sente o mundo ser quase palpável, quase uma realidade alternativa. Você joga, se envolve na história daquele mundo corrompido.
     
    Você tem que matar monstros sim. Mas não para matar. Tem um motivo para aqueles monstros morrerem.
     
     
    Não, eles estão tentando te impedir de salvar o mundo de uma besta diabólica.
     
    Enfim, o que estou tentando expressar é que a construção de um Role Playing Game real, a criação do Role Play, vai mundo além de criar cidades, monstros, áreas de hunt e NPCs aleatórios.
     
    É preciso uma história. Ambientar os personagens. Fazer quests que se interliguem, que tenham consequências para o personagem conseguir crescer. Até mesmo quests ou eventos que influenciem no jogo todo; por exemplo, a Guerra do Império do Ragnarok, que dá o controle de um castelo para a guild vencedora.
     
    Mas como já eu disse, Role Play não é necessário.
     
    Esqueça esse artigo, crie seu servidor só de áreas de hunt e seja feliz.
     
    É uma pena que alguns jogadores não ficarão tão felizes... Mas quem liga para eles? Você é um DEUS!
     



    Divirta-se sozinho no seu mundo, mister God.

     
    -- Artigo no Blog
  17. Upvote
    Diogo recebeu reputação de othereality em Rpg #3 - Ambientação Técnica   
    Nesse belo artigo, falarei de um assunto difícil de abordar: a ambientação técnica dos jogos.
     
    No mundo dos OTServs, podemos dizer que são dicas de Mapping.
     
    Como o artigo é de Role Play, não vou falar sobre jogos de plataforma (Super Mario) ou qualquer outro tipo que não RPG.
     
    Você já tem o objetivo do seu jogo, sabe o que quer fazer, tem uma história... E agora?
     
    Agora você vai criar a interface gráfica do jogo, preferencialmente seguindo o que for determinado por um Game Designer.
     
    Dentro da interface gráfica está... O mundo!
     



    Tô vendo outro mundo, manolo!

     
    Quando você cria um mundo, você tem que pensar no que seria adequado existir ali.
     
    Não faz sentido, por exemplo, em um jogo futurista e sem magias as pedras voarem por motivo algum, sem ter uma explicação tecnológica.
     
    Mas não é tão sem sentido pedras voando em um mundo mágico. Afinal de contas, a magia envolve todo o mundo e é usado para modificar as leis naturais da física, não!?
     
    Usando o exemplo do artigo anterior, eu poderia muito bem criar uma grande ilha voadora secreta, um local criado pelos deuses para adorá-los, mas que há muito foi esquecido.
     
    Pedras voadoras são apenas um exemplo, claro. A ambientação de um jogo vai muito além disso.
     
    Mas ao mesmo tempo, é apenas isso. Ambientação é uma questão de bom senso.
     
    Entretanto, existem técnicas secretas das trevas que podem, e devem, ser utilizadas.
     
    Quando você está criando seu mundo, a primeira coisa que tem que fazer é arranjar lápis, papel, borracha e apontador.
     



    E um lixinho pra Tia não brigar.

     
    Ou pode usar uma ferramenta virtual de última geração qualquer, como o Microsoft Paint.
     
    A questão é que você não sai fazendo um mundo do nada. Em uma situação ideal, teria um Game Designer para fazer isso, mas quem vive em um ambiente ideal?
     
    Você precisa planejar antes.
     
    Pensa que legal: você cria uma fortaleza sinistra dos orcs, faz todo seu mapa, dragon lair, inferno dos demons malvados, até cria um sprite para poder colocar anjos como montros.
     
    E depois de TUDO pronto, lembra-se que esqueceu de colocar aquela cidade maneira, que deveria ficar bem no meio de tudo que você fez, sendo que "comeria" parte da fortaleza dos orcs.
     
    Você sabe que não pode deixar a cidade colada na fortaleza, os orcs não teriam deixado ela ser construída, ou vice-versa.
     
    Ou então você decide colocar e inventa uma história do nada que há muito tempo os orcs ali eram amigos dos humanos, até que por um motivo qualquer humanos e orcs voltaram a ser inimigos.
     
    Ou ainda move o mapa para todos os lados, só para conseguir colocar a cidade no meio. Já pensou o trabalho?
     
    E pode também acabar extendendo o mapa para colocar a cidade. Mas aí as coisas ficam distantes e mal localizadas. Acaba que para o cara chegar na área dos wolfs, ele tem que passar pelo inferno dos demons malvados. E você acaba mudando mais coisa.
     
    Claro que o exemplo da cidade é exagerado, mas o ponto é que sem planejamento, você vai sempre acabar fazendo algo que não queria inicialmente. Trabalho extra. Tempo extra para terminar.
     
    Então, antes de tudo, você planeja.
     



    E podemos colocar aquela torre de orcs nesse ponto aqui...

     
    E qual a primeira coisa que você coloca no papel? Sempre, SEMPRE, não importa quais motivos tenha para fazer o contrário, você SEMPRE começa por uma cidade.
     
     
    Você pode amar fazer seu vulcão master do amor e da magia, mas repito que deve começar por uma cidade.
     
    Não precisa ser uma cidade gigantesca, sequer a cidade central. Pode até mesmo ser uma vila. Uma tribo. Mas tem que ser um local onde personagens vivem.
     
    Por que?
     
    Porque você está criando um mundo para jogadores humanos, e a menos que seja uma história muito louca de um jogo muito louco, os personagens vivem em comunidade e modificam o mundo deles para melhor atendê-los.
     
    No seu desenho, decida onde é cada coisa da cidade.
     
    Onde fica o Depot, as lojas, as entradas para o esgoto, as torres, as muralhas...
     
    Não precisa ser um desenho milimetricamente perfeito, apenas um esboço, uma idéia geral.
     
    E agora crie um segundo desenho. Nele você coloca um ponto, ou um círculo, ou quadrado... Enfim, algo pequeno, e marca sendo a cidade.
     



    Exemplo: desenho detalhado.

     



    Exemplo: desenho geral.

     
    Esse segundo desenho será a visão geral do seu mundo. Algumas coisas precisam ser detalhadas, mas outras vezes você só precisa de definir a localização geral.
     
    Na verdade, você pode até mesmo ficar só com a visão geral. Acredito que a maioria das pessoas que trabalham sozinhas nessa fase prefiram assim.
     
    Mas não esqueça de usar desenhos detalhados quando tiver outras pessoas trabalhando no projeto.
     
    É sempre bom mostrar para outros mappers/designers gráficos o que está planejado, bem como para seu chefe.
     



    Chefe diz: Cadê o planejamento do mapa, hein?!

     
    Feita a primeira cidade, você resolve se vai ter uma área de hunt para noobs por ali com rats, ou vai ser uma cidade na porta do vulcão do amor e da magia.
     
    Mas pense como se fosse real. Caso esteja na porta do vulcão, teria que ter alguma força mágica super fodástica impedindo o vulcão de entrar em erupção.
     
    Caso esteja na entrada do inferno, idem.
     
    Então faça uma estrelinha no seu desenho geral do caderno, e coloque uma legenda embaixo "barreira mágica contra as forças das trevas".
     
    Ou faça a barreira mágica no desenho mais detalhado.
     
    Mas perceba que você já está pensando em detalhes, mesmo não estando na fase de produção.
     
     
    Na verdade é muito legal quando você está assistindo aquela aula chata de biologia ou teoria da computação e desenhando o mundo do seu jogo no seu caderninho maroto.
     
    Só não deixe seus colegas verem, ou eles não vão andar com você no recreio. A menos que sejam nerds como você; nesse caso, vão te idolatrar.
     



    Na Reversal Russa, a revista Jovem Nerd lê VOCÊ!

     
    Criou a cidade, decidiu o que tem em volta... Agora sim é hora de começar a criar livremente.
     
    Crie os caminhos, as entradas para o subterrâneo, seu vulcão do amor e da magia...
     
    Invente, reinvente, copie coisas legais que já viu...
     
    Quando tiver uma entrada para um subterrâneo, dê um pseudo-nome "A231", vá para uma nova página do seu caderno e coloque lá em cima "A231" e comece a inventar o que tem naquele subterrâneo.
     
    Com o tempo, vai começar a se divertir.
     



    Exemplo: desenho geral com área de hunt próxima à cidade.

     
    Quando terminar uma página, cole ela na parede com durex, para ter sempre à vista. Deixe as imagens coladas lado a lado. Faça do seu quarto seu estúdio pessoal.
     
    Tendo a visão geral de tudo, você dificilmente se esquecerá de colocar uma nova cidade, porque vai ver que está faltando.
     
    Vai perceber que falta um dragon lair, que falta um amazon camp...
     
    Vai escolher locais perfeitos para quests, criar labirintos bem elaborados...
     
    Mas lembre-se sempre:
     
    Siga a história do seu mundo.
     
    Não vou dizer o que fazer se não tiver história, pois não gosto de quem não é bom escritor.
     
    BRINKS! Te peguei! Rara!
     



    Tá maluco de me zuar mermão? Sabe com quem tá mechendo?

     
    Se não tem uma história, use bom senso em triplo. Simples assim.
     
    E pronto.
     
    Você finalmente terminou... A primeira parte.
     
    Agora (ou juntamente com a criação do mundo) você decide onde ficam os NPCs (os que não são monstros, pois onde os monstros ficam é decidido obrigatoriamente na primeira parte).
     
    Onde vai ter vendedor? Onde vai ter NPC inútil? Onde? Onde?
     
    Escolha bem, lembre-se de não colocar um esquimó no seu vulcão, ou um elemental de fogo no meio do gelo.
     
    Ambiente seus NPCs, incluindo monstros.
     
    Esse artigo trata apenas da parte técnica, mas no próximo trataremos sobre o efeito psicológico nos infelizes jogadores.
     
    E pronto.
     
    Você sabe onde ficam os NPCs que começam as quests, provavelmente já escolheu onde fica cada quest enquanto estava criando o mundo, já sabe o que fazer, onde fazer...
     
    Sabe que tudo que fez tem um motivo para estar onde está, e não foi feito aleatoriamente.
     
    Agora, que você sabe onde, quando, quem e por que, só falta saber como. Como passar seu planejamemto para a prática. Como implementar. No mundo dos OTServs, como user o Map Editor.
     
    E se não souber como, basta passar para alguém que saiba, e terá a certeza de que não terá a surpresa de ter uma igreja voadora sobre o oceano.
     



    Oi, sou mapper. Deixa eu ver o planejamento...

     
    Lembre-se, não existe segredo. Comece por uma cidade, tenha bom senso e siga a história que você já criou, que fará um trabalho muito bom. Na dúvida, use o bom senso novamente.
     
    Só tem um detalhe:
     
    A ambientação é talvez a parte mais importante da criação do seu jogo.
     
    Diria que metade dessa importância está na ambientação técnica e metade na "psicológica".
     
    Por isso, não faça nada só por fazer. Pense bem o motivo de estar fazendo o que está fazendo.
     
    Repetindo, use o bom senso.
     
    E é isso aí.
     
    bjsmeliga
     



    "Me liga", mini hang loose mode.

     

    Dica: Para mais dicas sobre ambientação, recomendo
    esse artigo do moskitinho, realmente bacana.

  18. Upvote
    Diogo deu reputação a meubk em [Talkaction]System Moves [15/151]   
    Moves System Pokemon




     
    O meu script de moves, foi atualizado, por enquanto está com esses pokemons, eu estárei adicionando os 151, aos pouco não tenha pressa e acompanhe todos dias avera atualização.
     
    Novidades :
     
    Crie um arquivo com nome de moves.lua e cole o new script :
     

    function getTime(s) local n = math.floor(s / 600) s = s - (600 * n) return n, s end function getCreaturesInRange(position, radiusx, radiusy, showMonsters, showPlayers) local creaturesList = {} for x = -radiusx, radiusx do for y = -radiusy, radiusy do if not (x == 0 and y == 0) then creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z, stackpos = STACKPOS_TOP_CREATURE}) if (creature.type == 1 and showPlayers == 1) or (creature.type == 2 and showMonsters == 1) then table.insert(creaturesList, creature.uid) end end end end return creaturesList end -- CONDITIONS function Confused(inconfuse, rounds) if rounds == 0 then return false end if not inconfuse then return false end local c = {[1] = {x = 1, y = 0}, [2] = {x = 0, y = 1}, [3] = {x = -1, y = 0}, [4] = {x = 0, y = -1}} local p = getCreaturePosition(inconfuse) doSendMagicEffect(p, 31) local s = math.random(4) doTeleportThing(inconfuse, {x = p.x + c[s].x, y = p.y + c[s].y, z = p.z}) return addEvent(Confused, 400, inconfuse, rounds-1) end local paralize = createConditionObject(CONDITION_PARALYZE) setConditionParam(paralize, CONDITION_PARAM_TICKS, 5*1000) setConditionFormula(paralize, -0.7, 0, -0.8, 0) function Paralize(inparalize) doSendAnimatedText(getCreaturePosition(inparalize), "PAZ", 210) doAddCondition(inparalize , paralize) return true end local sleep = createConditionObject(CONDITION_PARALYZE) setConditionParam(sleep, CONDITION_PARAM_TICKS, 5*1000) setConditionFormula(sleep, -1.7, 0, -1.8, 0) function Sleep(insleep) doAddCondition(insleep , sleep) p = getCreaturePosition(insleep) doSendAnimatedText(p, "SLEEP", 154) for i = 1, 5 do if i == 1 then doSendMagicEffect(p, 32) else addEvent(doSendMagicEffect, i * 1000, p, 32) end end return true end function Poison(inpoison, ef, rounds) if rounds == 0 then return false end if not inpoison then return false end local p = getCreaturePosition(inpoison) doAreaCombatHealth(pet, COMBAT_EARTHDAMAGE, p, 0, -5, -10, ef) return addEvent(Poison, 800, inpoison, ef, rounds-1) end -- END CONDITIONS function getPosToStorm(posdecay) b = {x = posdecay.x-20, y = posdecay.y-20, z = posdecay.z} return b end local area1 = createCombatArea{ {0, 1, 1, 1, 0}, {1, 1, 1, 1, 1}, {1, 1, 2, 1, 1}, {1, 1, 1, 1, 1}, {0, 1, 1, 1, 0} } local area2 = createCombatArea{ {0, 0, 0, 0, 0}, {0, 1, 1, 1, 0}, {0, 1, 2, 1, 0}, {0, 1, 1, 1, 0}, {0, 0, 0, 0, 0} } local area3 = createCombatArea{ {0, 0, 1, 0, 0}, {0, 1, 1, 1, 0}, {1, 1, 2, 1, 1}, {0, 1, 1, 1, 0}, {0, 0, 1, 0, 0} } local areadirecion1 = { [2] = createCombatArea{ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 2, 0, 0} }, [3] = createCombatArea{ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {2, 1, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, [0] = createCombatArea{ {0, 0, 2, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, [1] = createCombatArea{ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 1, 2}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} } } local areadirecion2 = { [2] = createCombatArea{ {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 2, 0, 0} }, [3] = createCombatArea{ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {2, 1, 1, 1, 1}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, [0] = createCombatArea{ {0, 0, 2, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0} }, [1] = createCombatArea{ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {1, 1, 1, 1, 2}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} } } local areadirecion3 = { [2] = createCombatArea{ {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 2, 0, 0} }, [3] = createCombatArea{ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {2, 1, 1, 1, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0} }, [0] = createCombatArea{ {0, 0, 2, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0} }, [1] = createCombatArea{ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 1, 2}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0} } } local areadirecion4 = { [2] = createCombatArea{ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 1, 1, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 2, 0, 0} }, [3] = createCombatArea{ {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {2, 1, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0} }, [0] = createCombatArea{ {0, 0, 2, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 1, 1, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, [1] = createCombatArea{ {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 1, 2}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0} } } local d = { ["Bulbasaur"] = { ["m1"] = {atk = "Quick Attack", minlvl = 20, st = 2000, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "Razor Leaf", minlvl = 20, st = 2001, cd = 3, min = 100, max = 200, damage = COMBAT_EARTHDAMAGE, target = true, pz = false}, ["m3"] = {atk = "Vine Whip", minlvl = 20, st = 2002, cd = 3, min = 100, max = 200, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m4"] = {atk = "Headbutt", minlvl = 20, st = 2003, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m5"] = {atk = "Leech Seed", minlvl = 20, st = 2004, cd = 3, min = 100, max = 200, damage = COMBAT_EARTHDAMAGE, target = true, pz = false}, ["m6"] = {atk = "Solar Beam", minlvl = 20, st = 2005, cd = 3, min = 200, max = 400, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m7"] = {atk = "Stun Spore", minlvl = 20, st = 2006, cd = 3, min = 0, max = 0, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m8"] = {atk = "Poison Powder", minlvl = 20, st = 2007, cd = 3, min = 0, max = 0, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m9"] = {atk = "Sleep Powder", minlvl = 20, st = 2008, cd = 3, min = 0, max = 0, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, }, ["Ivysaur"] = { ["m1"] = {atk = "Quick Attack", minlvl = 40, st = 2009, cd = 3, min = 300, max = 400, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "Razor Leaf", minlvl = 40, st = 2010, cd = 3, min = 300, max = 400, damage = COMBAT_EARTHDAMAGE, target = true, pz = false}, ["m3"] = {atk = "Vine Whip", minlvl = 40, st = 2011, cd = 3, min = 300, max = 440, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m4"] = {atk = "Headbutt", minlvl = 40, st = 2012, cd = 3, min = 300, max = 400, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m5"] = {atk = "Leech Seed", minlvl = 40, st = 2013, cd = 3, min =300, max = 400, damage = COMBAT_EARTHDAMAGE, target = true, pz = false}, ["m6"] = {atk = "Solar Beam", minlvl = 40, st = 2014, cd = 3, min = 300, max = 400, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m7"] = {atk = "Stun Spore", minlvl = 40, st = 2015, cd = 3, min = 0, max = 0, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m8"] = {atk = "Poison Powder", minlvl = 40, st = 2016, cd = 3, min = 0, max = 0, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m9"] = {atk = "Sleep Powder", minlvl = 20, st = 2017, cd = 3, min = 0, max = 0, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, }, ["Venusaur"] = { ["m1"] = {atk = "Quick Attack", minlvl = 80, st = 2018, cd = 3, min = 1000, max = 2000, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "Razor Leaf", minlvl = 80, st = 2019, cd = 3, min = 1000, max = 2000, damage = COMBAT_EARTHDAMAGE, target = true, pz = false}, ["m3"] = {atk = "Vine Whip", minlvl = 80, st = 2020, cd = 3, min = 1000, max = 2000, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m4"] = {atk = "Headbutt", minlvl = 80, st = 2021, cd = 3, min = 1000, max = 2000, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m5"] = {atk = "Leech Seed", minlvl = 80, st = 2022, cd = 3, min = 1000, max = 2000, damage = COMBAT_EARTHDAMAGE, target = true, pz = false}, ["m6"] = {atk = "Solar Beam", minlvl = 80, st = 2023, cd = 3, min = 1000, max = 2000, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m7"] = {atk = "Stun Spore", minlvl = 80, st = 2024, cd = 3, min = 0, max = 0, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m8"] = {atk = "Poison Powder", minlvl = 80, st = 2025, cd = 3, min = 0, max = 0, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m9"] = {atk = "Sleep Powder", minlvl = 20, st = 2026, cd = 3, min = 0, max = 0, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m10"] = {atk = "Leaf Storm", minlvl = 80, st = 2027, cd = 3, min = 1000, max = 2000, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, }, ["Charmander"] = { ["m1"] = {atk = "Scratch", minlvl = 20, st = 2028, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "Ember", minlvl = 20, st = 2029, cd = 3, min = 100, max = 200, damage = COMBAT_FIREDAMAGE, target = false, pz = false}, ["m3"] = {atk = "Flamethrower", minlvl = 20, st = 2030, cd = 3, min = 100, max = 200, damage = COMBAT_FIREDAMAGE, target = false, pz = false}, ["m4"] = {atk = "Fire Ball", minlvl = 20, st = 2031, cd = 3, min = 100, max = 200, damage = COMBAT_FIREDAMAGE, target = true, pz = false}, ["m5"] = {atk = "Fire Blast", minlvl = 20, st = 2032, cd = 3, min = 100, max = 200, damage = COMBAT_FIREDAMAGE, target = false, pz = false}, ["m6"] = {atk = "Rage", minlvl = 20, st = 2033, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m7"] = {atk = "Fire Fang", minlvl = 20, st = 2034, cd = 3, min = 100, max = 200, damage = COMBAT_FIREDAMAGE, target = true, pz = false}, }, ["Charmeleon"] = { ["m1"] = {atk = "Scratch", minlvl = 40, st = 2035, cd = 3, min = 300, max = 400, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "Ember", minlvl = 40, st = 2036, cd = 3, min = 300, max = 400, damage = COMBAT_FIREDAMAGE, target = false, pz = false}, ["m3"] = {atk = "Flamethrower", minlvl = 40, st = 2037, cd = 3, min = 400, max = 500, damage = COMBAT_FIREDAMAGE, target = false, pz = false}, ["m4"] = {atk = "Fire Ball", minlvl = 40, st = 2038, cd = 3, min = 300, max =400, damage = COMBAT_FIREDAMAGE, target = true, pz = false}, ["m5"] = {atk = "Fire Blast", minlvl = 40, st = 2039, cd = 3, min = 300, max = 400, damage = COMBAT_FIREDAMAGE, target = false, pz = false}, ["m6"] = {atk = "Rage", minlvl = 40, st = 2040, cd = 3, min = 100, max = 300, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m7"] = {atk = "Fire Fang", minlvl = 40, st = 2041, cd = 3, min = 400, max = 800, damage = COMBAT_FIREDAMAGE, target = true, pz = false}, }, ["Charizard"] = { ["m1"] = {atk = "Dragon Claw", minlvl = 80, st = 2042, cd = 3, min = 1000, max = 2000, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "Ember", minlvl = 80, st = 2043, cd = 3, min = 1000, max = 2000, damage = COMBAT_FIREDAMAGE, target = false, pz = false}, ["m3"] = {atk = "Flamethrower", minlvl = 80, st = 2044, cd = 3, min = 1000, max = 2000, damage = COMBAT_FIREDAMAGE, target = false, pz = false}, ["m4"] = {atk = "Fire Ball", minlvl = 80, st = 2045, cd = 3, min = 1000, max = 2000, damage = COMBAT_FIREDAMAGE, target = true, pz = false}, ["m5"] = {atk = "Fire Blast", minlvl = 80, st = 2046, cd = 3, min = 1000, max = 2000, damage = COMBAT_FIREDAMAGE, target = false, pz = false}, ["m6"] = {atk = "Rage", minlvl = 80, st = 2047, cd = 3, min = 1000, max = 2000, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m7"] = {atk = "Magma Storm", minlvl = 80, st = 2048, cd = 3, min = 1000, max = 2000, damage = COMBAT_FIREDAMAGE, target = false, pz = false}, ["m8"] = {atk = "Wing Attack", minlvl = 80, st = 2049, cd = 3, min = 1000, max = 2000, damage = COMBAT_PHYSICALDAMAGE, target = false, pz = false}, }, ["Squirtle"] = { ["m1"] = {atk = "Headbutt", minlvl = 20, st = 2050, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "Bubbles", minlvl = 20, st = 2051, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = true, pz = false}, ["m3"] = {atk = "Water Gun", minlvl = 20, st = 2052, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = false, pz = false}, ["m4"] = {atk = "Waterball", minlvl = 20, st = 2053, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = true, pz = false}, ["m5"] = {atk = "Aqua Tail", minlvl = 20, st = 2054, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = false, pz = false}, ["m6"] = {atk = "Hydro Cannon", minlvl = 20, st = 2055, cd = 3, min = 200, max = 400, damage = COMBAT_ICEDAMAGE, target = false, pz = false}, ["m7"] = {atk = "Harden", minlvl = 20, st = 2056, cd = 60, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = false, pz = true}, ["m8"] = {atk = "Surf", minlvl = 20, st = 2057, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = false, pz = false}, }, ["Wartortle"] = { ["m1"] = {atk = "Headbutt", minlvl = 40, st = 2058, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "Bubbles", minlvl = 40, st = 2059, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = true, pz = false}, ["m3"] = {atk = "Water Gun", minlvl = 40, st = 2060, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = false, pz = false}, ["m4"] = {atk = "Waterball", minlvl = 40, st = 2061, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = true, pz = false}, ["m5"] = {atk = "Aqua Tail", minlvl = 40, st = 2062, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = false, pz = false}, ["m6"] = {atk = "Hydro Cannon", minlvl = 40, st = 2063, cd = 3, min = 200, max = 400, damage = COMBAT_ICEDAMAGE, target = false, pz = false}, ["m7"] = {atk = "Harden", minlvl = 40, st = 2064, cd = 60, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = false, pz = true}, ["m8"] = {atk = "Surf", minlvl = 40, st = 2065, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = false, pz = false}, }, ["Blastoise"] = { ["m1"] = {atk = "Headbutt", minlvl = 40, st = 2066, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "Bubbles", minlvl = 40, st = 2067, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = true, pz = false}, ["m3"] = {atk = "Water Gun", minlvl = 40, st = 2068, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = false, pz = false}, ["m4"] = {atk = "Waterball", minlvl = 40, st = 2069, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = true, pz = false}, ["m5"] = {atk = "Aqua Tail", minlvl = 40, st = 2070, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = false, pz = false}, ["m6"] = {atk = "Hydro Cannon", minlvl = 40, st = 2071, cd = 3, min = 200, max = 400, damage = COMBAT_ICEDAMAGE, target = false, pz = false}, ["m7"] = {atk = "Harden", minlvl = 40, st = 2072, cd = 60, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = false, pz = true}, ["m8"] = {atk = "Surf", minlvl = 40, st = 2073, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = false, pz = false}, ["m9"] = {atk = "Hydropump", minlvl = 40, st = 2074, cd = 3, min = 100, max = 200, damage = COMBAT_ICEDAMAGE, target = false, pz = false}, }, ["Caterpie"] = { ["m1"] = {atk = "Headbutt", minlvl = 1, st = 2075, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "String Shot", minlvl = 1, st = 2076, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m3"] = {atk = "Bug Bite", minlvl = 1, st = 2077, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, }, ["Metapod"] = { ["m1"] = {atk = "Headbutt", minlvl = 10, st = 2078, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "String Shot", minlvl = 10, st = 2079, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m3"] = {atk = "Bug Bite", minlvl = 10, st = 2080, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m4"] = {atk = "Harden", minlvl = 10, st = 2081, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = false, pz = true}, }, ["Butterfree"] = { ["m1"] = {atk = "Headbutt", minlvl = 30, st = 2082, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "Whirlwind", minlvl = 30, st = 2083, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = false, pz = false}, ["m3"] = {atk = "Super Sonic", minlvl = 30, st = 2084, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m4"] = {atk = "Stun Spore", minlvl = 30, st = 2085, cd = 3, min = 0, max = 0, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m5"] = {atk = "Poison Powder", minlvl = 30, st = 2086, cd = 3, min = 0, max = 0, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m6"] = {atk = "Sleep Powder", minlvl = 30, st = 2087, cd = 3, min = 0, max = 0, damage = COMBAT_EARTHDAMAGE, target = false, pz = false}, ["m7"] = {atk = "Psybeam", minlvl = 30, st = 2088, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = false, pz = false}, ["m8"] = {atk = "Confusion", minlvl = 30, st = 2089, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = false, pz = false}, }, ["Weedle"] = { ["m1"] = {atk = "Horn Attack", minlvl = 1, st = 2090, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "String Shot", minlvl = 1, st = 2091, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m3"] = {atk = "Poison Sting", minlvl = 1, st = 2092, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, }, ["Kakuna"] = { ["m1"] = {atk = "Bug Bite", minlvl = 10, st = 2093, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "String Shot", minlvl = 10, st = 2094, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m3"] = {atk = "Poison Sting", minlvl = 10, st = 2095, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m4"] = {atk = "Harden", minlvl = 10, st = 2096, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = true}, }, ["Beedrill"] = { ["m1"] = {atk = "Fury Cutter", minlvl = 10, st = 2097, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m2"] = {atk = "String Shot", minlvl = 10, st = 2098, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m3"] = {atk = "Poison Sting", minlvl = 10, st = 2099, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m4"] = {atk = "Pin Missile", minlvl = 10, st = 2100, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m5"] = {atk = "Rage", minlvl = 10, st = 2101, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, ["m6"] = {atk = "Strafe", minlvl = 10, st = 2102, cd = 3, min = 100, max = 200, damage = COMBAT_PHYSICALDAMAGE, target = true, pz = false}, }, } function onSay(cid, words, param) if #getCreatureSummons(cid) == 0 then return doPlayerSendCancel(cid, "You do not have any pokemon.") end local poke = d[getCreatureName(getCreatureSummons(cid)[1])][words] if not poke then return true end local storage = poke.st local exst = 16265 local cdexst = 0.5 local cd = math.ceil(poke.cd/2) local pet = getCreatureSummons(cid)[1] local target = getCreatureTarget(cid) local look = getCreatureLookDir(pet) local position = getThingPos(pet) if getTilePzInfo(getCreaturePosition(pet)) and poke.pz == false then return doPlayerSendCancel(cid, "Not Attack in protection zone.") end if getPlayerLevel(cid) < poke.minlvl then return doPlayerSendTextMessage(cid, 19, "Your need level "..poke.minlvl.." to use " ..poke.atk..".") end if os.time()-getPlayerStorageValue(cid, storage) <= cd then minutes,seconds = getTime(cd-(os.time()-getPlayerStorageValue(cid, storage))) return doPlayerSendTextMessage(cid, 27, "Wait "..seconds.." seconds to use "..poke.atk..".") end if target == 0 and poke.target then return doPlayerSendTextMessage(cid, 19, "This Pokemon Attack need any target.") end if os.time()-getPlayerStorageValue(cid, exst) <= cdexst then minutes,seconds = getTime(cdexst-(os.time()-getPlayerStorageValue(cid, exst))) return doPlayerSendCancel(cid, "Poke exhausted") end local critico = math.random(100) < 10 and 2 or 1 --ATTACKS if poke.atk == "Quick Attack" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 1 then return doPlayerSendCancel(cid, "Target is far away.") end doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 148) elseif poke.atk == "Razor Leaf" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 5 then return doPlayerSendCancel(cid, "Target is far away.") end doSendDistanceShoot(getCreaturePosition(pet), getCreaturePosition(target), 4) doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 79) elseif poke.atk == "Vine Whip" then local effects = { [0] = 80, [1] = 83, [2] = 81, [3] = 82 } doAreaCombatHealth(pet, poke.damage, getThingPos(pet), areadirecion1[look], -poke.min, -poke.max * critico, effects[look]) elseif poke.atk == "Headbutt" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 1 then return doPlayerSendCancel(cid, "Target is far away.") end doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 111) elseif poke.atk == "Leech Seed" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 5 then return doPlayerSendCancel(cid, "Target is far away.") end doSendDistanceShoot(getCreaturePosition(pet), getCreaturePosition(target), 6) doSendAnimatedText(getCreaturePosition(target), "POISON", 66) addEvent(Poison, 500, target, 45, 5) elseif poke.atk == "Solar Beam" then local a = { [0] = {x = 0, y = -1, effect={[1]=94,[2]=93,[3]=93,[4]=95}}, [1] = {x = 1, y = 0, effect={[1]=86,[2]=88,[3]=88,[4]=87}}, [2] = {x = 0, y = 1, effect={[1]=91,[2]=93,[3]=93,[4]=92}}, [3] = {x = -1, y = 0, effect={[1]=89,[2]=88,[3]=88,[4]=90}} } for i = 1,4 do doSendMagicEffect({x = position.x + a[look].x*i, y = position.y + a[look].y*i, z = position.z}, a[look].effect[i]) end doAreaCombatHealth(pet, poke.damage, getThingPos(pet), areadirecion2[look], -poke.min, -poke.max * critico, 59) elseif poke.atk == "Stun Spore" then local d = getCreaturesInRange(getThingPos(pet), 1, 1, 1, 0) for _,pid in pairs(d) do Paralize(pid) end doAreaCombatHealth(pet, poke.damage, getThingPos(pet), area2, -poke.min, -poke.max * critico, 85) elseif poke.atk == "Poison Powder" then local d = getCreaturesInRange(getThingPos(pet), 1, 1, 1, 0) for _,pid in pairs(d) do doSendAnimatedText(getCreaturePosition(pid), "POISON", 66) Poison(pid, 8, 5) end doAreaCombatHealth(pet, poke.damage, getThingPos(pet), area2, -poke.min, -poke.max * critico, 84) elseif poke.atk == "Sleep Powder" then local d = getCreaturesInRange(getThingPos(pet), 1, 1, 1, 0) for _,pid in pairs(d) do Sleep(pid) end doAreaCombatHealth(pet, poke.damage, getThingPos(pet), area2, -poke.min, -poke.max * critico, 27) elseif poke.atk == "Leaf Storm" then local d = getCreaturesInRange(getThingPos(pet), 3, 3, 1, 0) for _,pid in pairs(d) do for i = 1, 4 do if i == 1 then addEvent(doAreaCombatHealth, 400, pet, poke.damage, getThingPos(pid), 0, -poke.min, -poke.max * critico, 79) doSendDistanceShoot(getPosToStorm(getCreaturePosition(pid)), getCreaturePosition(pid), 4) else addEvent(doAreaCombatHealth, i*800 ,pet, poke.damage, getThingPos(pid), 0, -poke.min, -poke.max * critico, 79) addEvent(doSendDistanceShoot, i*600, getPosToStorm(getCreaturePosition(pid)), getCreaturePosition(pid), 4) end end end elseif poke.atk == "Scratch" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 1 then return doPlayerSendCancel(cid, "Target is far away.") end doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 142) elseif poke.atk == "Ember" then doAreaCombatHealth(pet, poke.damage, getThingPos(pet), area2, -poke.min, -poke.max * critico, 15) elseif poke.atk == "Flamethrower" then local effects = { [0] = 55, [1] = 58, [2] = 56, [3] = 57 } doAreaCombatHealth(pet, poke.damage, getThingPos(pet), areadirecion1[look], -poke.min, -poke.max * critico, effects[look]) elseif poke.atk == "Fire Ball" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 5 then return doPlayerSendCancel(cid, "Target is far away.") end doSendDistanceShoot(getCreaturePosition(pet), getCreaturePosition(target), 3) doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 5) elseif poke.atk == "Fire Blast" then local a = { [0] = {x = 0, y = -1, effect= 60}, [1] = {x = 1, y = 0, effect= 61}, [2] = {x = 0, y = 1, effect= 62}, [3] = {x = -1, y = 0, effect= 63} } for i = 1,8 do if i == 1 then doSendMagicEffect({x = position.x + a[look].x*i, y = position.y + a[look].y*i, z = position.z}, a[look].effect) doAreaCombatHealth(pet, poke.damage, getThingPos(pet), areadirecion3[look], -poke.min, -poke.max * critico, 15) else addEvent(doSendMagicEffect, i*300, {x = position.x + a[look].x*i, y = position.y + a[look].y*i, z = position.z}, a[look].effect) addEvent(doAreaCombatHealth, i*300, pet, poke.damage, getThingPos(pet), areadirecion3[look], -poke.min, -poke.max * critico, 15) end end elseif poke.atk == "Rage" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 1 then return doPlayerSendCancel(cid, "Target is far away.") end for i = 1,4 do if i == 1 then doSendMagicEffect(position, 168) doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 142) else addEvent(doAreaCombatHealth, i*500, pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 142) end end elseif poke.atk == "Fire Fang" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 1 then return doPlayerSendCancel(cid, "Target is far away.") end doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 146) addEvent(doAreaCombatHealth, 200, pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 15) addEvent(doAreaCombatHealth, 400, pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 15) elseif poke.atk == "Dragon Claw" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 1 then return doPlayerSendCancel(cid, "Target is far away.") end doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 141) elseif poke.atk == "Magma Storm" then doAreaCombatHealth(pet, poke.damage, getThingPos(pet), area2, -poke.min, -poke.max * critico, 36) addEvent(doAreaCombatHealth, 800, pet, poke.damage, getThingPos(pet), area1, -poke.min, -poke.max * critico, 6) elseif poke.atk == "Wing Attack" then doAreaCombatHealth(pet, poke.damage, getThingPos(pet), area2, -poke.min, -poke.max * critico, 115) addEvent(doAreaCombatHealth, 500, pet, poke.damage, getThingPos(pet), area1, -poke.min, -poke.max * critico, 42) elseif poke.atk == "Bubbles" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 5 then return doPlayerSendCancel(cid, "Target is far away.") end doSendDistanceShoot(getCreaturePosition(pet), getCreaturePosition(target), 2) doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 68) elseif poke.atk == "Water Gun" then local a = { [0] = {x = 0, y = -1, effect={[1]=74,[2]=75,[3]=75,[4]=76}}, [1] = {x = 1, y = 0, effect={[1]=69,[2]=70,[3]=70,[4]=71}}, [2] = {x = 0, y = 1, effect={[1]=77,[2]=75,[3]=75,[4]=78}}, [3] = {x = -1, y = 0, effect={[1]=72,[2]=70,[3]=70,[4]=73}} } for i = 1,4 do doSendMagicEffect({x = position.x + a[look].x*i, y = position.y + a[look].y*i, z = position.z}, a[look].effect[i]) end doAreaCombatHealth(pet, poke.damage, getThingPos(pet), areadirecion2[look], -poke.min, -poke.max * critico, 59) elseif poke.atk == "Waterball" then for i = 1,5 do if i == 1 then addEvent(doAreaCombatHealth, 200 ,pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 68) doSendDistanceShoot(getPosToStorm(getCreaturePosition(target)), getCreaturePosition(target), 2) else addEvent(doAreaCombatHealth, i*700 ,pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 68) addEvent(doSendDistanceShoot, i*500, getPosToStorm(getCreaturePosition(target)), getCreaturePosition(target), 2) end end elseif poke.atk == "Aqua Tail" then doAreaCombatHealth(pet, poke.damage, getThingPos(pet), area2, -poke.min, -poke.max * critico, 160) elseif poke.atk == "Hydro Cannon" then local a = { [0] = {x = 0, y = -1, effect={[1]=74,[2]=75,[3]=75,[4]=75,[5]=75,[6]=75,[7]=75,[8]=76}}, [1] = {x = 1, y = 0, effect={[1]=69,[2]=70,[3]=70,[4]=70,[5]=70,[6]=70,[7]=70,[8]=71}}, [2] = {x = 0, y = 1, effect={[1]=77,[2]=75,[3]=75,[4]=75,[5]=75,[6]=75,[7]=75,[4]=78}}, [3] = {x = -1, y = 0, effect={[1]=72,[2]=70,[3]=70,[4]=70,[5]=70,[6]=70,[7]=70,[8]=73}} } for i = 1,8 do doSendMagicEffect({x = position.x + a[look].x*i, y = position.y + a[look].y*i, z = position.z}, a[look].effect[i]) end doAreaCombatHealth(pet, poke.damage, getThingPos(pet), areadirecion3[look], -poke.min, -poke.max * critico, 59) elseif poke.atk == "Harden" then function Harden(cid, rounds) if rounds == 0 then return false end if #getCreatureSummons(cid) == 0 then return false end doSendMagicEffect(getCreaturePosition(getCreatureSummons(cid)[1]), 144) return addEvent(Harden, 1000, cid, rounds-1) end addEvent(Harden, 500, cid, 40) elseif poke.atk == "Surf" then local a = { [0] = {x = 0, y = -1, effect= 66}, [1] = {x = 1, y = 0, effect= 67}, [2] = {x = 0, y = 1, effect= 64}, [3] = {x = -1, y = 0, effect= 65} } for i = 1,8 do if i == 1 then doSendMagicEffect({x = position.x + a[look].x*i, y = position.y + a[look].y*i, z = position.z}, a[look].effect) doAreaCombatHealth(pet, poke.damage, getThingPos(pet), areadirecion3[look], -poke.min, -poke.max * critico, 68) else addEvent(doSendMagicEffect, i*300, {x = position.x + a[look].x*i, y = position.y + a[look].y*i, z = position.z}, a[look].effect) addEvent(doAreaCombatHealth, i*300, pet, poke.damage, getThingPos(pet), areadirecion3[look], -poke.min, -poke.max * critico, 68) end end elseif poke.atk == "Hydropump" then local a = { [0] = {x = 0, y = -1, effect={[1]=74,[2]=75,[3]=75,[4]=75,[5]=75,[6]=75,[7]=75,[8]=76}}, [1] = {x = 1, y = 0, effect={[1]=69,[2]=70,[3]=70,[4]=70,[5]=70,[6]=70,[7]=70,[8]=71}}, [2] = {x = 0, y = 1, effect={[1]=77,[2]=75,[3]=75,[4]=75,[5]=75,[6]=75,[7]=75,[4]=78}}, [3] = {x = -1, y = 0, effect={[1]=72,[2]=70,[3]=70,[4]=70,[5]=70,[6]=70,[7]=70,[8]=73}} } for i = 1,8 do doSendMagicEffect({x = position.x + a[look].x*i, y = position.y + a[look].y*i, z = position.z}, a[look].effect[i]) end doAreaCombatHealth(pet, poke.damage, getThingPos(pet), areadirecion3[look], -poke.min, -poke.max * critico, 68) addEvent(doAreaCombatHealth, 400, pet, poke.damage, getThingPos(pet), areadirecion3[look], -poke.min, -poke.max * critico, 33) elseif poke.atk == "String Shot" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 5 then return doPlayerSendCancel(cid, "Target is far away.") end doSendDistanceShoot(getCreaturePosition(pet), getCreaturePosition(target), 23) doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 137) Paralize(target) elseif poke.atk == "Bug Bite" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 1 then return doPlayerSendCancel(cid, "Target is far away.") end doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 146) elseif poke.atk == "Whirlwind" then doAreaCombatHealth(pet, poke.damage, getThingPos(pet), areadirecion4[look], -poke.min, -poke.max * critico, 42) elseif poke.atk == "Super Sonic" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 5 then return doPlayerSendCancel(cid, "Target is far away.") end for i = 1, 3 do if i == 1 then doSendDistanceShoot(getCreaturePosition(pet), getCreaturePosition(target), 24) else addEvent(doSendDistanceShoot, i * 200, getCreaturePosition(pet), getCreaturePosition(target), 24) end end addEvent(doSendAnimatedText, 500, getCreaturePosition(target), "CONF", 210) addEvent(Confused, 500, target, 15) elseif poke.atk == "Psybeam" then local a = { [0] = {x = 0, y = -1, effect={[1]=108,[2]=109,[3]=109,[4]=108}}, [1] = {x = 1, y = 0, effect={[1]=106,[2]=107,[3]=107,[4]=106}}, [2] = {x = 0, y = 1, effect={[1]=109,[2]=108,[3]=108,[4]=109}}, [3] = {x = -1, y = 0, effect={[1]=107,[2]=106,[3]=106,[4]=107}} } for i = 1,4 do doSendMagicEffect({x = position.x + a[look].x*i, y = position.y + a[look].y*i, z = position.z}, a[look].effect[i]) end doAreaCombatHealth(pet, poke.damage, getThingPos(pet), areadirecion2[look], -poke.min, -poke.max * critico, 59) elseif poke.atk == "Confusion" then doAreaCombatHealth(pet, poke.damage, getThingPos(pet), area3, -poke.min, -poke.max * critico, 136) elseif poke.atk == "Horn Attack" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 1 then return doPlayerSendCancel(cid, "Target is far away.") end doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 111) elseif poke.atk == "Poison Sting" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 5 then return doPlayerSendCancel(cid, "Target is far away.") end doSendDistanceShoot(getCreaturePosition(pet), getCreaturePosition(target), 15) doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 9) elseif poke.atk == "Fury Cutter" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 1 then return doPlayerSendCancel(cid, "Target is far away.") end doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 110) addEvent(doAreaCombatHealth, 500, pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 110) elseif poke.atk == "Pin Missile" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 5 then return doPlayerSendCancel(cid, "Target is far away.") end for i = 1, 3 do if i == 1 then doSendDistanceShoot(getCreaturePosition(pet), getCreaturePosition(target), 13) doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 137) else addEvent(doSendDistanceShoot, i * 200, getCreaturePosition(pet), getCreaturePosition(target), 13) addEvent(doAreaCombatHealth, i * 200, pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, 137) end end elseif poke.atk == "Strafe" then if getDistanceBetween(getCreaturePosition(pet), getCreaturePosition(target)) > 1 then return doPlayerSendCancel(cid, "Target is far away.") end local dd = {142, 111, 110, 148} for i = 1,6 do af = math.random(4) if i == 1 then doAreaCombatHealth(pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, dd[af]) else addEvent(doAreaCombatHealth, i*500, pet, poke.damage, getThingPos(target), 0, -poke.min, -poke.max * critico, dd[af]) end end end -- END ATTACKS doPlayerSay(cid, getCreatureName(pet)..", use "..poke.atk..".", 1) setPlayerStorageValue(cid, storage, os.time()+cd) setPlayerStorageValue(cid, exst, os.time()+cdexst) local atknotcritic = {"Harden", "Poison Powder", "Sleep Powder", "Super Sonic", "Stun Spore"} if critico == 2 and not isInArray(atknotcritic, poke.atk) then doSendAnimatedText(getCreaturePosition(cid), "CRITICAL", 144) end return true end
     
    New Tag :

    <talkaction words="m1;m2;m3;m4;m5;m6;m7;m8;m9;m10;m11;m12" hide="yes" event="script" value="moves.lua"/>
     
    Pokemons Configurados [15/151] :
     
  19. Upvote
    Diogo recebeu reputação de othereality em Rpg #1 - Introdução E Apresentação   
    Obs: Essa série de artigos não trata da escrita de fanfictions de Tibia, que são confundidas com Roleplaying, e sim do Role Play nos jogos.
     
    Oláááá, enfermeira leitor!
     



    Oláááá Enfermeira!

     
    Hoje, aqui, agora, começo uma série de artigos que abrangirão um tema super incrível e super ignorado no mundo do OTServ:
     
    O Role Play.
     
    Você, leitor querido e alienado leitor, talvez esteja se perguntando:
     
     
    Bom, se seu servidor de fundo de quintal só tiver jogadores desse estilo...
     



    Requisitos máximos para jogar Tibia

     
    ...então pode parar de ler por aqui e ir editar algum char para pklizar geral, seu malandrão.
     
    Mas se você tem ou planeja ter um servidor mais sério, gosta de desenvolvimento de jogos, gosta de ler, se interessa pelo tema, está aqui por curiosidade, ou me acha sexy, então Role Play tem tudo a ver com você.
     
    Pensando bem, se me acha sexy, talvez deva procurar um oculista oftalmologista.
     
    Nah! Minha mãe me acha lindo!
     



    Acabei de tirar essa

     
    Ficando um pouco mais sério - mas só um pouco -, vamos ao que interessa. O que diabos é Role Play?
     
    No sentido literal, essas duas palavras querem dizer "representar (play) um papel (role)". No sentido figurado, querem dizer... Representar um personagem, ou algo do tipo.
     
    Agora é a parte desagradável em que digo que nas poucas linhas que já escrevi, eu menti para você. Pois é.
     
    Eu não vou ensinar representação, teatro, essas coisas maneiras que realmente dão fama e dinheiro.
     



    Haha, você é mesmo engraçado, senhor autor.

     
    Tá, a piada foi ruim, vamos continuar.
     
    O Role Play, em jogos (RPG - Role Playing Game), é uma parte nada fundamental. Sim, a verdade nua e crua. Mas comecemos pelo início.
     
     



    Se esse couro viesse dentro dos bichinhos do Tibia...

     
    Sabe essas situações super comuns em vários jogos online que se dizem RPGs?
     
    Então... Nada disso é Role Play.
     
     
    Isso é o Roll Play (traduzindo, vira algo como "jogo contínuo"). É um estilo de jogo amplamente divulgado e extremamente fácil de se implementar.
     
    Não, não me diga "mas aquele joguinho de RPG que eu jogo só tem isso"...
     
    Sinto informar que esse joguinho seu não é totalmente feito de Role Play.
     
    O mundo dos games pegou o termo Role Play, engoliu, digeriu e... Transformou-o.
     
    Ao menos é isso que acontece com a maioria dos jogos online.
     
    Lembra-se de quando eu disse que Role Play significa "representar um papel"?
     
    Vamos aprofundar o significado dessas palavras.
     
    Quando você representa um papel, você se coloca no lugar de um personagem imaginário, em um mundo/ambiente imaginário.
     
    Vale lembrar que esse ambiente imaginário tem suas próprias regras.
     
    Nosso mundo também tem suas regras (leis da física como gravidade, inércia, etc), das quais não podmos sair.
     



    Energia = Massa * Velocidade da luz ao quadrado... Eu acho.

     
    Quando vamos para um mundo virtual, ele também tem suas regras.
     
    Por exemplo, na maioria dos jogos, há áreas em que é impossível realizar PVP. Se você pensar nisso, não faz o menor sentido. Mas é necessário para que os jogadores se sintam corfortáveis e seguros pelo menos naquele local do jogo.
     
    Já imaginou? Você sente vontade de bater em alguém mas uma força superior invisível impede seus punhos de tocarem na pessoa? Sinistro...
     
    Quando você está sendo um personagem em um mundo virtual, normalmente gosta de aventuras e limites morais do mundo real, como "não bater atoa nas pessoas", não existem.
     
    Por que? Será que é só porque "aquilo é de mentirinha", ou há outro motivo?
     
    Será que você realmente se sente irritado quando um bonequinho que nem existe rouba de você um item que também nem existe?
     
    Se parar para pensar, isso não faz o menor sentido. Sentir-se irritado por algo assim é ridículo.
     
     
    Você não gastou tempo para conseguir aquele loot. Você simplesmente sentou em frente o computador para horas de entretenimento por causa da sua falta do que fazer.
     
    Se não estivesse jogando o jogo, provavelmente estaria fazendo alguma outra coisa tão improdutiva quanto. Então não faz diferença ganhar ou não aquele loot.
     
    Foi seu personagem que se esforçou. Seu personagem que matou monstros. Seu personagem que gastou a energia dele.
     
     
    Exato! Porque isso é um RPG! Um Role Playing Game! Um jogo de representação de papéis! O personagem não existe! É só isso, um per-so-na-gem que é representado graças a você!
     
    Mas isso não muda o fato de que todos nós ficamos irados quando nosso item valioso é roubado, quando nosso tempo é desperdiçado... Porque realmente representamos!
     
    Veja bem, aquele item só é valioso, porque o mundo do jogo o fez ser valioso.
     
    Sim!
     
    E é aqui que entramos no que realmente expressarei nessa série de artigos:
     
    Na criação de um mundo que atraia e faça o jogador realmente se sentir na pele do personagem.
     
     
    É mesmo? Você se sente no carrinho do Gunbound? Eu acho que não.
     
    Mas o Gunbound não foi feito para isso. Nem o xadrez foi feito para você se sentir uma torre atacando um soldado rato.
     
    Os RPGs sim.
     
     
    Putz! Quem faz esses quotes? Cara chato...
     
    Bom, eu disse que a maioria era assim, e que a indústria de jogos transformou o conceito, não é?
     
    Pois bem, o conceito parece ter se transformado justamente nisso:
     
    Crie um mundo virtual qualquer com cidades, áreas de caça e quests sem criatividade, e chame de RPG.
     
    Mas criar um Role Play expressivo de verdade, que faça o personagem realmente se envolver, vai muito além disso.
     
    Um exemplo maravilhoso que acho que todos conhecem é Diablo II.
     



    Diablo 2... FEEL THE POWER!

     
    No Diablo II você sente o mundo ser quase palpável, quase uma realidade alternativa. Você joga, se envolve na história daquele mundo corrompido.
     
    Você tem que matar monstros sim. Mas não para matar. Tem um motivo para aqueles monstros morrerem.
     
     
    Não, eles estão tentando te impedir de salvar o mundo de uma besta diabólica.
     
    Enfim, o que estou tentando expressar é que a construção de um Role Playing Game real, a criação do Role Play, vai mundo além de criar cidades, monstros, áreas de hunt e NPCs aleatórios.
     
    É preciso uma história. Ambientar os personagens. Fazer quests que se interliguem, que tenham consequências para o personagem conseguir crescer. Até mesmo quests ou eventos que influenciem no jogo todo; por exemplo, a Guerra do Império do Ragnarok, que dá o controle de um castelo para a guild vencedora.
     
    Mas como já eu disse, Role Play não é necessário.
     
    Esqueça esse artigo, crie seu servidor só de áreas de hunt e seja feliz.
     
    É uma pena que alguns jogadores não ficarão tão felizes... Mas quem liga para eles? Você é um DEUS!
     



    Divirta-se sozinho no seu mundo, mister God.

     
    -- Artigo no Blog
  20. Upvote
    Diogo deu reputação a Vodkart em Exausthed Em Alavanca   
    ----------------------------------- ---------SCRIPT por PC98------------ NAO REMOVA OS CREDITOS ----------------------------------- function onUse(cid, item, frompos, item2, topos) ------------------ Inicio das Config ------------ local castle_one_name = "Ratim Bum" -- Nome do castelo 1 local storages = {154154,54321,123123,96584} -- Storages ( se vc eh iniciante, deixe como está...) -------PREMIOs I N D I V I D U A L --------- local premio_por_vezes = 1 -- Premio por vezes de conquista de castelo. (1) = Ativo (0) = Desativa. local premio_vezes = 13 -- Caso ativo, a quantidade de conquista que o player tem, para ganhar PREMIO. local premio = 2472 -- ID do Premio local premio_cont = 1 -- Quantidade do Premio local premio_reset = 1 -- Resetar o contador do premio depois que atingir a meta?? (1) = SIM (0) = NAO local time = 10 -- tempo em minutos para exauste da alavanca -------FIM PREMIOs I N D I V I D U A L --------- ----------------- FIM DAS CONFIG ----------------- local sto_ativ = getGlobalStorageValue(storages[2]) position = getCreaturePosition(cid) if isPlayerGuild(cid) == TRUE then if sto_ativ == 1 or sto_ativ == -1 then if getGlobalStorageValue(storages[4]) <= os.time() then guildname = getPlayerGuildName(cid) guild = getPlayerGuildId(cid) guild_sto = getGlobalStorageValue(storages[3]) if guild ~= guild_sto then setPlayerStorageValue(cid,guild_sto,guild) if getPlayerStorageValue(cid,storages[1]) == -1 then setPlayerStorageValue(cid,storages[1],0) end sto_vezes = getPlayerStorageValue(cid,storages[1]) setGlobalStorageValue(storages[3],getPlayerGuildId(cid)) setPlayerStorageValue(cid,storages[1], sto_vezes + 1) sto_vezes_total = getPlayerStorageValue(cid,storages[1]) doBroadcastMessage("O(a) "..getCreatureName(cid).." acabou de conquistar o castelo "..castle_one_name.." para a guild \""..guildname.."\" pela "..sto_vezes_total.."ª vez(s).", 22) doSendMagicEffect(position, 39) if premio_por_vezes == 1 then if getPlayerStorageValue(cid,storages[1]) == premio_vezes then if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then doBroadcastMessage("O "..getCreatureName(cid).." ganhou uma(o) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!", 21) doPlayerAddItem(cid, premio,premio_cont) doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!") setGlobalStorageValue(storages[4],os.time()+time*60) ----------------------------------------------- -- if premio_reset == 1 then -- setPlayerStorageValue(cid,storages[1],0) -- Resetar a contagem end -- ----------------------------------------------- -- else doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Vamos verificar novamente em 10 segundos!") addEvent(additem,10000,cid,premio,premio_cont,premio_reset) end end end else doPlayerSendCancel(cid,"Este castelo ja foi conquistado pela sua guild!") doSendMagicEffect(position, 2) end else minutos = math.floor((getGlobalStorageValue(storages[4]) - os.time())/(60)) if minutos >= 1 then doPlayerSendCancel(cid, "Você deve esperar ".. (minutos < 0 and 0 or minutos) .." Minutos para usar a alavanca denovo.") else doPlayerSendCancel(cid, "Você deve esperar ".. getGlobalStorageValue(storages[4]) - os.time() .." segundos para usar a alavanca denovo.") end end else doPlayerSendCancel(cid,"O sistema está desativado") end doPlayerSendCancel(cid,"É nescessario ter guild para dominar o castelo!") doSendMagicEffect(position, 2) end end ------------------------- por pc98 function additem(cid,premio,premio_cont,premio_reset) if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then doPlayerAddItem(cid, premio,premio_cont) doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!") if premio_reset == 1 then setPlayerStorageValue(cid,storages[1],0) end stopEvent(additem) else doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Verificando novamente em 10 segundos!") addEvent(additem,10000,cid) end end ------------------------- por pc98 function isPlayerGuild(cid) if getPlayerGuildName(cid) ~= "" then return TRUE else return FALSE end end
  21. Upvote
    Diogo deu reputação a gramaverde em [Encerrado] Onde Muda O Lugar Que O Acc Manager Cria O Char?   
    E Para saber a posição e so dar Look no piso que você quer que ele nasce...
     
    Exemplo:
     
    12:42 You see a black marble tile.
    ItemID: [407].
    Position: [X: 32360] [Y: 31782] [Z: 7].
     
    Em roxo: a hora, obvio '-'
    Em Marron - o nome do Chão
    Em Azul - o ID do chão
    Em Verde - a posição X Y e Z que vocÊ coloca no Config.lua como o post acima disse
  22. Upvote
    Diogo deu reputação a lomarrone em [Encerrado] Onde Muda O Lugar Que O Acc Manager Cria O Char?   
    abre o config.lua e muda isso :
     
    -- Account manager
    accountManager = true
    namelockManager = true
    newPlayerChooseVoc = true
    newPlayerSpawnPosX = 49 --- x da posição q o player vai nascer
    newPlayerSpawnPosY = 41 --- y da posição q o player vai nascer
    newPlayerSpawnPosZ = 7 --- z da posição q o player vai nascer
    newPlayerTownId = 1
    newPlayerLevel = 8
    newPlayerMagicLevel = 0
    generateAccountNumber = false
  23. Upvote
    Diogo deu reputação a luan12 em (V5.8.6) Notepad   
    (v5.8.6) NotePad


     
    O NotePad é um editor de textos e códigos que suporta várias "linguagens" de programação. É um programa totalmente útil para os programadores ou scripters de OTServers em geral, já que facilita a edição de códigos e outros.
     
    "Linguagens" suportadas pelo NotePad: Assembler, Ruby, Lisp, Scheme, Properties, Diff, Smalltalk, Postscript, VHDL, Ada, Caml, AutoIt, KiXtart, Matlab, Verilog, Haskell, InnoSetup, C, C++, Java, C#, XML, HTML, PHP, Javascript, ASCII art, doxygen, ASP, VB/VBS, SQL, Objective-C, CSS, Pascal, Perl, Python, Lua, TeX e TCL.
     
     
    É isso, té (+REP).
  24. Upvote
    Diogo deu reputação a noobinhu em [Arquivado]Gestão De Projetos Pessoais   
    Ao longo de 4~5 anos estudando programação e tecnologia desenvolvi diversos projetos pessoais, entre eles alguns destaques:
     

    Pokémon Revenge Online (2007-2009), jogo de browser baseado no anime Pokémon, alcançou 350 jogadores online simultaneamente e um banco de dados com mais de 10.000 usuários ativos registrados.
    XT Website – Framework PHP (2008-2009) para desenvolvimento de sites para OTServers (Open Tibia Servers).

     
    Vivenciei diversos tipos de desafios em todos os projetos pessoais, sempre agregando conhecimento e experiência.
    Sem mais, venho aqui dar algumas dicas para você que tem um projeto pessoal mas não sabe como fazer a gestão, manter o projeto ou simplesmente desenvolvê-lo.
     
    Tenha a idéia do seu projeto bem definida.
    Saia do computador! Volte ao seu papel e folha de sulfite, é hora de escrever o seu projeto!
    Saiba exatamente para que ou para quem esse projeto será vinculado (público alvo), a utilidade dele no mercado, as ferramentas utilizadas, planos para futuras implementações, como será divulgado (ou você quer um projeto sem usuários?), planos econômicos (estude como você pode manter futuramente o projeto viável, com ou sem lucros, sem prejuízos).
    Tenha em mente uma primeira versão do projeto apenas com o necessário para ele funcionar, vê-lo “rodando” deixará toda equipe animada a continuar o projeto.]
     
    Acredite no seu projeto!
    Se existe uma pessoa que pode levar o projeto para frente, essa pessoa é você! Se você não estiver desacreditado do projeto, ele está à beira do fracasso. Mantenha-se firme!
     
    Procure por pessoas de confiança que possam complementar seu projeto.
    É sempre bom ter pessoas ao seu lado que façam do seu trabalho profissional e mais completo, se você é programador, procure por um designer, alguém de publicidade/marketing, algum gerente de empresas.
    Apresente seu projeto no papel, muita gente pode se interessar se sua idéia for boa.
    Sempre procure por pessoas que têm confiança em você e vice versa (procurar por pessoas que você nunca viu não parece ser uma solução tão confiável para sua idéia).
     
    Apresente a sua equipe para novos membros!
    Essa atitude parece não ter importância, mas trás muita confiança para os que estão trabalhando no projeto, faça com que todos os membros da equipe interajam entre si, discutam idéias.
    É essencial que todos dentro da equipe tenham um relacionamento amigável.
     
    Matenha um log de atividades
    Explicitamente faça um log com as atividades de todos os membros da equipe, um sistema para todos os usuários verem quem está trabalhando ou não, e também para animar a equipe quando uma tarefa for completada.
     
    Divulgue sim, mas não exagere!
    É importante uma divulgação pré-lançamento do projeto (teasers), mas não é recomendado que se divulguem todos os detalhes do mesmo antes de lançar.
    Deixar o seu usuário surpreso no lançamento com algo não revelado explicitamente é um ponto a mais para ele ficar navegando pelo seu produto atrás de mais coisas novas.
     
    Anderson Ferminiano.
  25. Upvote
    Diogo deu reputação a luan12 em (Release) Modern Aac 1.0.1!   
    Modern AAC 1.0.1 (Release)

     
    Novo Patch do Modern AAC para corrijir alguns bugs e adicionar algumas coisas! Lembrando que a instalação é padrão, passar o site para o gerenciador e abrir a seguinte página no seu navegador (http://127.0.0.1).
     
    Por que usar o Modern AAC?
     
    1. Segurança.
    2. Atualizações constantes.
    3. Alto "poder" de extensão.
    4. Várias Funções.
    5. Desempenho.
    6. Personalização.
    7. Painel administrativo.
    8. e muito mais!
     
    ChangeLog:
     
     
     
     
    Download e SVN:
     
     
    Créditos:
     
     
     
     
    É isso, té (+REP).
  • Quem Está Navegando   0 membros estão online

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