Ir para conteúdo
  • Cadastre-se

Usando Git e Publicando seus projetos no GitHub


Grundor

Posts recomendados

  • L2JBr ADM

Olá Papangus, um bom tempo sem postar né?

Ultimamente estou envolvido em vários projetos ao mesmo tempo com várias pessoas diferentes, então controle de versão é essencial. Por isso resolvi criar esse tutorial, talvez possa ajudar os jovens desenvolvedores a começar a caminhar por uma trilha mais profissional e começar seus projetos de código aberto com mais facilidade.
O objetivo desse tutorial é fazer uma intrução ao Git e o Github para vocês, com conceitos e comandos bem básicos sobre o git e github.

Qual a diferença entre o Git e o Github?

O Git é um sistema de controle de versão (ou versionamento), assim como o SVN, porém encontrei nele uma certa velocidade e praticidade muito superiores ao SVN(assembla) .
Além disso ele é um VCS (do inglês version control system) ou ainda SCM (do inglês source code management) distribuído que está sendo cada vez mais usado, pois foca em velocidade e robustez.
Um sistema de controle de versão tem a finalidade de gerenciar as diferentes versões de um arquivo ou documento. É muito utilizado por empresas de desenvolvimento de software que possuem grandes equipes e precisam manter organizado, documentado e arquivado tudo o que foi e está sendo implementado no software. Como exemplo de projetos que utilizam o Git temos: Android, Eclipse, jQuery, AngularJS, L2jServer, entre muitos outros.
Imagine que o GIT é uma versão bombada e super rápida do SVN que talvez a maioria de vocês já tenham conhecido, além de versionar ele permite a gestão de tarefas(chamaremos de issues) e controle de acesso ao código(leitura, escrita, modificação etc). O desenvolvedor inicial do Git foi Linus Torvalds (criador do Linux).

Site Oficial: http://git-scm.com/

O GitHub é um serviço de hospedagem para projetos que utilizam o Git, além disso é usado como repositório online de códigos fonte para projetos de código aberto(veja os links que postei acima). Ele parte do conseito de "Social Coding", parecido com o "Social Media"(Facebook, Twitter, etc) aonde as pessoas compartilham fotos, textos, vídeos e outras mídias, o GitHub compartilha códigos, é um local para você "postar" seus códigos e projetos. Ele possui vários recursos gráficos para mostrar sua evolução e atividade nos projetos que participa, inclusive algumas empresas hoje ao contratar um desenvolvedor elas pedem além do seu Linkedin, o link do seu Github.

Site Oficial: http://github.com

Resumindo o Git é um sistema de versionamento e gerenciamento de códigos fontes(arquivos em geral) que é amplamente usado por diversas empresas e além disso é implementado pelo GitHub como uma rede social de códigos abertos.

v9jZOup.png



1 - Instalando o git (windows)

♣ Acesse http://git-scm.com/downloads terá links para Mac, Linux, Solaris e Windows, e clique no link do seu sistema operacional, no caso desse tutorial usarei o Windows como exemplo.
c3O9hp6.png

♣ Após baixar, execute o arquivo, irá iniciar um wizard desses bem simples com next next e confirm... pare na parte Select Components e selecione conforme a imagem abaixo(É o que geralmente eu escolho):

iEVXajQ.png
Eu maro a opção Windows Explorer integration e "Simple context menu" pois assim eu consigo abrir o Git Bash (prompt de comandos do git) em qualquer diretório do meu computador, bastando apenas clicar com o botão direito e usar "Git Bash Here". A última opção também é interessante, porque ele instala uma fonte melhorzinha para o prompt de comandos.

♣ Clique em "Next" e continue a instalação, até o ponto "Adjusting your PATH environment" e marque a opção "Use git from Windows Command prompt", essa opção vai permitir que você use os comandos GIT no prompt e no Power Shell

FR8ySmg.png


Clique em "Next>" e selecione a opção "Use OpenSSH". Clique em Next novamente.

[importante] "Configuring the line ending conversion":

A Configuração da quebra de linha, essa configuração é importante pois os sistemas Unix(Linux e MAC) possuem formatos diferentes de quebra de linha em arquivos texto.
Se você escreve um código com quebras de linha no formato Windows, outra pessoa pode ter problemas ao abrir o mesmo arquivo em um Linux, e vice-versa. Esta opção permite normalizar isso.

  • A primeira opção converte os arquivos para padrão Windows quando os arquivos chegam para você, e convertem para padrão Unix quando você os comita no repositório.
  • A segunda não faz nenhuma conversão quando os arquivos chegam, mas convertem para padrão Unix quando você realiza o "commit".
  • A terceira opção não faz nenhuma conversão.

Em meus projetos eu uso o padrão Unix, pois assim a compatibilidade será maior, e além do mais bons editores(notepad++, sublime,) e IDE(NetBeans, Eclipse) mantém a codificação(o bloco de notas do windows não está incluso nessa lista rsrs)

♣ Agora é só dar next até concluir a instalação. Feito isso o git está instalado no seu computador.


2- Criando um repositório e "commitando"

Eu pedi para vocês instalarem o GIT Bash e o UI mas para essa parte irei usar apenas a versão "Bash", ou seja por prompt de comando, pois assim o tutorial fica mais compatível com demais usuários(Linux, Mac, etc).
Também existem outras formas de fazer isso caso você use o Netbens ou Eclipse pois eles já possuem o git embutido em seu core para um suporte nativo dentro do próprio programa.


♣ Crie a Pasta (será a raiz do projeto), clique com o botão direito sobre ela e clique na opção "Git Bash Here"

FdUw8VP.png

♣ Informe ao Git quem é que está commitando, essa parte você irá adicionar as suas credenciais pois os commits só podem ser efetuados por uma "identidade".

Use os comandos abaixo

git config --global user.name "Nome Sobrenome"
git config --global user.email "[email protected]<script cf-hash='f9e31' type="text/javascript">
/*  */</script>"

Substitua pelo seu nome e sobrenome e o seu endereço de email.
BEXCVIU.png

Agora todos os commits realizados nesse computador(nesse usuário do windows) seguirão com essa identidade.

Dica: para copiar e colar comandos no Git Bash, clique com o botão direito na barra de título da janela e na opção Editar você tem as opções de marcar, copiar, colar.

♣ Inicializando um repositório Git na Pasta
Ainda na janela do Git Bash você deve digitar o comando

git init

Irá aparecer a mensagem "Initialized empty Git repository in C:/Fontes/hello-world/.git/"

BHRbt17.png

Talvez você não perceba mas seu projeto agora possui um "branch" que é um galho, no caso imagine que o master é o tronco principal de uma arvore. (não se preocupe com esses nomes eu irei fazer um glossário no final do tutorial para ter tudo listado bonitinho).


♣ Adicionando Arquivos à pasta e realizando um commit:
Bem, existe 2 formas de fazer isso uma é simplesmente criar o arquivo ou colar ele lá dentro a outra é pela linha de comando, vou mostrar a linha de comando pois acho que os demais já devem saber(quem não saberia criar ou colar um arquivo para dentro de uma pasta e estaria lendo esse tutorial até aqui? :aO )

Utilize o comando touch em seguida o nome do arquivo.

touch index.html
git add .
git commit -m "Esse eh o meu primeiro commit no git";

Resumindo:
o comando 'touch' adiciona um arquivo vazio com o nome que você especificar.
o comando 'git add .' adiciona todos os novos arquivos que foram adicionados ao repositório.
o comando 'commit' irá "confirmar" as alterações para o seu "branch", o parâmetro '-m' simboliza a mensagem do seu commit vem em seguida, você sempre deve usar aspas para a mensagem.

Note que se você tentar executar um novo commit não acontecerá nada pois você já "confirmou" todas as alterações feitas.
tXwVb6d.png

Atenção: A parte chata de usar a linha de comando é que nos comentários do commit você não pode usar carácteres especiais, nem pontuações nem pular linha a não ser que você esteja usando um IDE como o netbenas que possuí uma interface gráfica para realizar o commit.


O importante aqui é entender esse ciclo do commit, diferente do SVN o git não commita diretamente ao servidor, no lugar disso ele cria um controle de versão local e depois o conjunto de commits que são "empurrados" ao servidor compartilhado.

Após isso experimente adicionar mais arquivos, e realizar o commit, binque o pouco.
Bacana, você aprendeu como usar o git "na unha"(código de comando), recomendo que procure aprender como usar o git no seu IDE, e se quiser pode criar um tutorial de como usá-lo em conjunto com a sua ferramenta de desenvolvimento preferida.


3- Compartilhando seu código no GitHub
Agora que temos o nosso projeto, já sabemos commitar, porque não mostrar ao mundo o que você sabe fazer e ainda poder receber colaborações no seu código para o tornar melhor?


Criando uma conta no GitHub
Acesse: https://github.com/join e preencha os dados pedidos:
gxewZrT.png


Ao clicar no botão "Create an account" você irá para a escolha do plano, escolha free(a não ser que você esteja afim de gastar um dindin)
Como falei no início do tutorial o GitHub é um serviço, ele tem uma versão free aonde você pode criar repositórios públicos e caso queira ter um repositório privado(putz) você precisa pagar, mas não se desespere ele possui um primo muito camarada que lhe permite ter repositórios privados "de grátis"! o https://gitlab.com/ , não irei falar sobre ele aqui nesse momento, talvez eu faça um outro tutorial sobre ele no futuro.


Criando uma chave SSH para poder começar a commitar no GitHub

Bom, após ter criado a conta a primeira coisa é criar uma chave SSH, essa chave serve para autenticar sua conexão ao GitHub, é uma forma de você ter segurança para que ninguém mais commite em seus repositórios(à não ser que você autorize).

No Git Bash(prompr de comando) digite o comando:

ssh-keygen -t rsa -C "[email protected]
/*  */"

Use o mesmo e-mail que você usou para criar a conta no Github



Dê enter e será perguntado aonde você quer salvar o arquivo da chave, vamos manter o padrão, aperte enter novamente.

A próxima pergunta vai te pedir uma senha (passphrase). Recomendo que não use a mesma senha do GitHub, essa senha garante que outra pessoa, mesmo munida do arquivo da sua chave não possa usá-lo sem essa senha.
Dê enter novamente e então será pedido uma confirmação. Digite a senha novamente e Enter.

uJmeLwD.png

Digite agora:

notepad ~/.ssh/id_rsa.pub

Esse comando irá abrir sua chave no bloco de notas, copie todo o conteúdo dessa chave para irmos ao próximo passo.

Adicionando a chave SSH no GitHub
- Acesse a página de configurações no GitHub: https://github.com/settings/ssh (Settings> SSH Keys)
- Clique em "Add SSH Key" e cole o conteúdo do arquivo id_rsa.pub e clique em "Add Key"

A5T6Bmh.png
Atenção: Tome cuidado de copiar e colar todo o conteúdo do arquivo, começando por ssh-rsa até o seu e-mail (veja a imagem acima)

Se tudo deu certo sua chave foi adicionada você verá algo assim:
QKmIIVE.png


Testando conexão com o github

Vá no GitBash e digite o comando:

ssh -T [email protected]
/*  */

Será perguntado se você tem certeza que quer conectar(yes/no), nesse momento digite 'yes' e dê Enter, a próxima pergunta será sua senha(passphrase...) digite a senha que você usou para gerar a chave SSH.

Se aparecer uma mensagem parecida com essa(imagem abaixo) "Hi Grundor! You've successfully authenticated..." então deu tudo certo:

uBJxWF7.png


Criando o primeiro repositório remoto

Volte agora ao GitHub e criar o nosso primeiro repositório (botão New Repository no seu dashboard) https://github.com/new
Informe um nome preferencialmente sem espaços e caracteres especiais, caso contrário o GitHub vai remover esses caracteres.

4yei3ps.png
Clique em Create repository e então será levado até a página do seu repositório, que por enquanto ainda não tem arquivos. (Talvez só o Licence e o Readme.md)
Pronto agora seu repositório está criado! próximo passo é enviar os arquivos...

N5ubBi3.png

♣ Enviando os arquivos do seu repositório local ao repositório remoto no GitHub
- Na página do seu repositório no GitHub (imagem acima) vá até a caixa do "Clone URL" e clique em ssh, copie o link

epjEzWl.png

No Git Bash (na pasta do seu repositório local) digite e dê enter:

git remote add origin git@....

Substitua o "git@...." pela url que você copiou seu link ficará assim:

git remote add origin [email protected]
/*  */:Grundor/hello-l2jbrasil.git //Não copie esse link pois vc não vai conseguir fazer sem a minha chave

Após executar esse comando digite o comando à seguir:

git pull origin master

Esse comando acima irá atualizar o seu repositório local com o repositório remoto no GitHub, é importante que você tenha realizado o commit de todos os arquivos antes de realizá-lo pois é porvavel que você os perca ou que ele seja sobrescrito.

Agora é hora de enviar os seus arquivos ao git hub, digite o código abaixo:

git push origin master

S2vSgea.png

Informe sua senha(passphrase) sempre que for requisitada, como estamos usando o método via ssh, nunca será pedida a sua senha do github.

Se tudo ocorreu bem, seus commits foram adicionados ao repositório remoto como mostra na imagem abaixo.

tJyagyI.png
OBS: Como o meu eu configurei meu gitbash com o meu nome e email do github oficial do github(http://github.com/LeonanCarvalho) os commits foram feitos com esse nome e não com a conta teste "Grundor" criada para esse tutorial.


4- Concluíndo

Bom pessoal, esse foi um tutorial bem condensado e resumido, o git tem muito mais coisa, mas quis fazer desse tutorial uma introdução para quem nunca teve contato com o GIT ou versionamento. Meu tempo no fórum é um pouco limitado e talvez eu não consiga responder todas as dúvidas com rapidez, mas farei sempre que possível.
Pretendo fazer mais tutoriais sobre mais assuntos, caso o pessoal da L2jBrasil se interesse. A intenção é que os desenvolvedores comecem a publicar seus códigos fontes na página da l2jbrasil no Github.




Glossário

  • C
    • ​Commit - Ato de "confirmar" uma alteração, exclusão ou inclusão de arquivos no repositório
  • B
    • ​Branch - ("ramos") são utilizados para desenvolver funcionalidades isoladas umas das outras. O branch master é o branch "padrão" quando você cria um repositório. Use outros branches para desenvolver e mescle-os (merge) ao branch master após a conclusão.
  • P
    • ​pull - Ato de obter as alterações de um repositório e o seu branch, o comando é git pull <origin> <branch name>. Serve para atualizar seu repositório local com a mais nova versão
    • push - Ato de enviar as alterações para um repositório remoto, o comando é git push <origin> <branch name>. Serve para atualizar o repositório remoto com o seu código local.

Links Úteis

Tutoriais Relacionados:



Proibida a reprodução mesmo que em partes desse tutorial sem a publicação dos devidos créditos de criação



Garantido pela Constituição da República Federativa do Brasil, de 05 de outubro de 1988

Portaria MCT n° 88, de 23/04/98

Propriedade Intelectual


88x31.png



EJoOSOj.gif

Sua pergunta foi respondida? Certifique-se de marcar a resposta como a solução aceita.
Se existe mais de uma resposta, utilize o "vote up" para destacá-la.
Se você achar uma resposta útil, diga obrigado clicando no botão "Gostei".

Link para o comentário
Compartilhar em outros sites


Tutorial perfeito, Leonan. É interessante porque é uma plataforma dinâmica e acessível e até melhor na minha opinião que a Assembla.

Você sabia que a L2JBrasil tem uma empresa de Hosting Oficial?
Conheça a L2JCenter.com

L2JBRASIL - 15 anos vendendo SS e flechas em Giran! (Trade / Adena)

Link para o comentário
Compartilhar em outros sites

  • L2JBr ADM

Muito bom, obrigado Grundor!

Vou ler com calma amanha, hoje ta meio corrido, vou começar a por meus projetos ai. :D

 

Valeu!

 

Acabei usando teu projeto como exemplo para o meu tutorial sobre a interface gráfica! http://www.l2jbrasil.com/index.php?/topic/113262-usando-a-interface-grafica-do-github-para-windows-e-publicando-os-seus-projetos/

Crie uma conta lá e me mande seu usuário para eu lhe adicionar à equipe de devs!

 

Tutorial perfeito, Leonan. É interessante porque é uma plataforma dinâmica e acessível e até melhor na minha opinião que a Assembla.

Está bem à frente! conceitos de Social Coding que o Assembla chega longe, a desvantagem do GitHub como eu falei é pra ter repositórios privados deve ser pago porém a soluções parecida free!

EJoOSOj.gif

Sua pergunta foi respondida? Certifique-se de marcar a resposta como a solução aceita.
Se existe mais de uma resposta, utilize o "vote up" para destacá-la.
Se você achar uma resposta útil, diga obrigado clicando no botão "Gostei".

Link para o comentário
Compartilhar em outros sites

  • 3 months later...

Muito bom tutorial Grundor.

Porem estou preso em uma parte.

 

Onde pede para Testar Conexão, ssh -T "email" , o meu fica sempre dando timed out.

 

Tenho que ter portas liberadas ou algo do tipo?

A Vida é uma eterna lição...

Estamos sempre aprendendo...

Link para o comentário
Compartilhar em outros sites

Qual email você está passando para teste ? por que tem que ser o email que o Git cria no domínio deles quando você faz a conta.

"Tente ser uma pessoa de valor , não de sucesso" - Albert Einstein

 

 

Link para o comentário
Compartilhar em outros sites

Qual email você está passando para teste ? por que tem que ser o email que o Git cria no domínio deles quando você faz a conta.

 

eu estava colocando o meu email. Ai nunca conseguia fazer este teste.

Porem mesmo sem o teste, eu consegui fazer os demais passos e consegui importar tudo para o site do GitHub.

 

Na hora do email, eu coloquei aquele do SSH URL

creio que era pra testar com ele certo?

Mas de qualquer maneira deu tudo certo no final. Obrigado Tayran e Grundor pelo belo tutorial

A Vida é uma eterna lição...

Estamos sempre aprendendo...

Link para o comentário
Compartilhar em outros sites

Exemplo meu usuário é Tayran o email é [email protected].

Que bom que conseguiu, as pessoas não se interessam em usar Git, elas mal sabem do poder que o Git tem em relação a SVN.

"Tente ser uma pessoa de valor , não de sucesso" - Albert Einstein

 

 

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Entao pessoal.. Estou de volta...

Hoje resolvi implementar um novo mod em meu projeto.

Porem fui utilizar o que eu mandei para o Git.

Chegando la eu entrei no eclipse, fiz la o dl da minha SVN Repositorie e dei Check-Out no "Gameserver" que é a parte que eu quero pra mudar.

Porem o meu não fica que nem a "frozen".

A frozen vem la as pastas javas para eu poder mexer, o meu não vem assim. Eu não consegui nem achar os arquivos Javas dentro do meu para poder fazer as alterações.

 

Como eu faço para localizar "Os Javas" dentro do meu projeto?

 

FROZEN

 

 

eNtsoHL.jpg

 

 

 

meu projeto

 

 

SLAV4I7.jpg

 

 

A Vida é uma eterna lição...

Estamos sempre aprendendo...

Link para o comentário
Compartilhar em outros sites

Coloca como java project amigo.


Deleta o projeto ( só no project explorer ) e importa cria um projeto com mesmo nome desse projeto que está na workspace como java project.

"Tente ser uma pessoa de valor , não de sucesso" - Albert Einstein

 

 

Link para o comentário
Compartilhar em outros sites

Coloca como java project amigo.

Deleta o projeto ( só no project explorer ) e importa cria um projeto com mesmo nome desse projeto que está na workspace como java project.

 

Eu deletei tudo e dei Check-Out novamente.

Então selecionei a opção "Java Project".

 

Não mudou muita coisa, ele apenas adicionou uma JRE System Library.

 

Tentei deletar tudo e fazer como voce falou, criando um novo Java Project e colocando o mesmo nome, ele ficou do mesmo jeito que o de cima.

 

imagem

 

 

ahKoFNl.jpg

 

 

A Vida é uma eterna lição...

Estamos sempre aprendendo...

Link para o comentário
Compartilhar em outros sites

Vou em SVN Repositories > New Repository Location > Coloco o link do meu projeto > Meu Projeto - Checkout > Java Project.

 

Veja se as opões marcadas estão corretas por favor

 

 

 

1zkFdhg.jpg

 

 

A Vida é uma eterna lição...

Estamos sempre aprendendo...

Link para o comentário
Compartilhar em outros sites

  • L2JBr ADM

No netbeans o caminho para se iniciar um projeto à partir de um repositório git é esse:

eSvvdmx.png

EJoOSOj.gif

Sua pergunta foi respondida? Certifique-se de marcar a resposta como a solução aceita.
Se existe mais de uma resposta, utilize o "vote up" para destacá-la.
Se você achar uma resposta útil, diga obrigado clicando no botão "Gostei".

Link para o comentário
Compartilhar em outros sites

Usa o software do Git que já vem dentro do eclipse.

 

Onde?

O meu CTR 3 me mostra outra coisa

Tou fazendo dl do Netbeans.. vai que com ele eu me saio melhor.

 

No Eclipse meu CTR 3 abre uma janela de PROCURAR, digito "Git" e nada, "Clonar" e nada..

 

Quando clico no projeto, vou em "team" tambem nada que se remeta ao Git ou a Clonar

A Vida é uma eterna lição...

Estamos sempre aprendendo...

Link para o comentário
Compartilhar em outros sites

  • Registre-se

    Faça parte da maior e  mais antigas comunidades sobre Lineage2 da América Latina.





  • Patrocinadores

  • Quem Está Navegando

    • Nenhum usuário registrado visualizando esta página.
  • Posts

    • Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?    
    • muchas gracias muy lindos NPC 🙂
    • relaxa jovem gafanhoto, testa as quests. e posTa os erros indesejaveis.  
    • Se alguém pudesse me ensinar como codificar as missões, eu ficaria feliz em fazer isso sozinho ou pelo menos ajudar. Eu realmente quero jogar em um servidor onde todas as quests funcionem bem e melhor ainda se você puder fazer quests customizadas!
    • mas no interlude, nem todas as quests de class,  vai mostrar onde tem que ir, ate o reborn nao mostrava quando era interlude, só mostrou depois que eles colocaram client classic pra rodar, e ficou melhor ainda quando virou hellbound em diante, mas ha sim alguma chance de modificar isso direto no script para fazer igualmente, só basta te um pouco de paciencia e persistencia exato
    • 408_PathToElvenwizard dá Orion eu tive que mexer tbm, até modifiquei e consegui deixar ela igual do Classic, com a seta e a marcação no mapa. (não retail IL) Dá pra importar py de várias revs, o foda é que não da regular as quest py através do debug em tempo real, pelo menos eu não consegui rsrs
    • Hasta el momento todas las QUESTS son completables si te guias con un tutorial de youtube. El problema es que tienen bugs de locacion y de subquests que no avanzan o no te marcan correctamente a donde ir en el mapa, cosa que en Retail si se ve como corresponde.
    • estranho, mas pelo menos a galera nunca reclamo das quests quando tinha aberto 5x, geral fez class primeira e segunda job, poucos que compraram a class
    • en RUSaCis-3.5 data pack, las Quests estan en formato .java y son diferentes a como estan redactadas en jOrion y jFrozen 1.5 (ProyectX) package net.sf.l2j.gameserver.scripting.quest; import net.sf.l2j.commons.random.Rnd; import net.sf.l2j.gameserver.enums.Paperdoll; import net.sf.l2j.gameserver.enums.QuestStatus; import net.sf.l2j.gameserver.enums.actors.ClassId; import net.sf.l2j.gameserver.model.actor.Creature; import net.sf.l2j.gameserver.model.actor.Npc; import net.sf.l2j.gameserver.model.actor.Player; import net.sf.l2j.gameserver.network.serverpackets.SocialAction; import net.sf.l2j.gameserver.scripting.QuestState; public class Q224_TestOfSagittarius extends SecondClassQuest { private static final String QUEST_NAME = "Q224_TestOfSagittarius"; // Items private static final int BERNARD_INTRODUCTION = 3294; private static final int HAMIL_LETTER_1 = 3295; private static final int HAMIL_LETTER_2 = 3296; private static final int HAMIL_LETTER_3 = 3297; private static final int HUNTER_RUNE_1 = 3298; private static final int HUNTER_RUNE_2 = 3299; private static final int TALISMAN_OF_KADESH = 3300; private static final int TALISMAN_OF_SNAKE = 3301; private static final int MITHRIL_CLIP = 3302; private static final int STAKATO_CHITIN = 3303; private static final int REINFORCED_BOWSTRING = 3304; private static final int MANASHEN_HORN = 3305; private static final int BLOOD_OF_LIZARDMAN = 3306; private static final int CRESCENT_MOON_BOW = 3028; private static final int WOODEN_ARROW = 17; // Rewards private static final int MARK_OF_SAGITTARIUS = 3293; // NPCs private static final int BERNARD = 30702; private static final int HAMIL = 30626; private static final int SIR_ARON_TANFORD = 30653; private static final int VOKIAN = 30514; private static final int GAUEN = 30717; // Monsters private static final int ANT = 20079; private static final int ANT_CAPTAIN = 20080; private static final int ANT_OVERSEER = 20081; private static final int ANT_RECRUIT = 20082; private static final int ANT_PATROL = 20084; private static final int ANT_GUARD = 20086; private static final int NOBLE_ANT = 20089; private static final int NOBLE_ANT_LEADER = 20090; private static final int BREKA_ORC_SHAMAN = 20269; private static final int BREKA_ORC_OVERLORD = 20270; private static final int MARSH_STAKATO_WORKER = 20230; private static final int MARSH_STAKATO_SOLDIER = 20232; private static final int MARSH_STAKATO_DRONE = 20234; private static final int MARSH_SPIDER = 20233; private static final int ROAD_SCAVENGER = 20551; private static final int MANASHEN_GARGOYLE = 20563; private static final int LETO_LIZARDMAN = 20577; private static final int LETO_LIZARDMAN_ARCHER = 20578; private static final int LETO_LIZARDMAN_SOLDIER = 20579; private static final int LETO_LIZARDMAN_WARRIOR = 20580; private static final int LETO_LIZARDMAN_SHAMAN = 20581; private static final int LETO_LIZARDMAN_OVERLORD = 20582; private static final int SERPENT_DEMON_KADESH = 27090; public Q224_TestOfSagittarius() { super(224, "Test Of Sagittarius"); setItemsIds(BERNARD_INTRODUCTION, HAMIL_LETTER_1, HAMIL_LETTER_2, HAMIL_LETTER_3, HUNTER_RUNE_1, HUNTER_RUNE_2, TALISMAN_OF_KADESH, TALISMAN_OF_SNAKE, MITHRIL_CLIP, STAKATO_CHITIN, REINFORCED_BOWSTRING, MANASHEN_HORN, BLOOD_OF_LIZARDMAN, CRESCENT_MOON_BOW); addQuestStart(BERNARD); addTalkId(BERNARD, HAMIL, SIR_ARON_TANFORD, VOKIAN, GAUEN); addMyDying(ANT, ANT_CAPTAIN, ANT_OVERSEER, ANT_RECRUIT, ANT_PATROL, ANT_GUARD, NOBLE_ANT, NOBLE_ANT_LEADER, BREKA_ORC_SHAMAN, BREKA_ORC_OVERLORD, MARSH_STAKATO_WORKER, MARSH_STAKATO_SOLDIER, MARSH_STAKATO_DRONE, MARSH_SPIDER, ROAD_SCAVENGER, MANASHEN_GARGOYLE, LETO_LIZARDMAN, LETO_LIZARDMAN_ARCHER, LETO_LIZARDMAN_SOLDIER, LETO_LIZARDMAN_WARRIOR, LETO_LIZARDMAN_SHAMAN, LETO_LIZARDMAN_OVERLORD, SERPENT_DEMON_KADESH); } @Override public String onAdvEvent(String event, Npc npc, Player player) { String htmltext = event; QuestState st = player.getQuestList().getQuestState(QUEST_NAME); if (st == null) return htmltext; // BERNARD if (event.equalsIgnoreCase("30702-04.htm")) { st.setState(QuestStatus.STARTED); st.setCond(1); playSound(player, SOUND_ACCEPT); giveItems(player, BERNARD_INTRODUCTION, 1); if (giveDimensionalDiamonds39(player)) htmltext = "30702-04a.htm"; } // HAMIL else if (event.equalsIgnoreCase("30626-03.htm")) { st.setCond(2); playSound(player, SOUND_MIDDLE); takeItems(player, BERNARD_INTRODUCTION, 1); giveItems(player, HAMIL_LETTER_1, 1); } else if (event.equalsIgnoreCase("30626-07.htm")) { st.setCond(5); playSound(player, SOUND_MIDDLE); takeItems(player, HUNTER_RUNE_1, 10); giveItems(player, HAMIL_LETTER_2, 1); } // SIR_ARON_TANFORD else if (event.equalsIgnoreCase("30653-02.htm")) { st.setCond(3); playSound(player, SOUND_MIDDLE); takeItems(player, HAMIL_LETTER_1, 1); } // VOKIAN else if (event.equalsIgnoreCase("30514-02.htm")) { st.setCond(6); playSound(player, SOUND_MIDDLE); takeItems(player, HAMIL_LETTER_2, 1); } return htmltext; } @Override public String onTalk(Npc npc, Player player) { String htmltext = getNoQuestMsg(); QuestState st = player.getQuestList().getQuestState(QUEST_NAME); if (st == null) return htmltext; switch (st.getState()) { case CREATED: if (player.getClassId() != ClassId.ROGUE && player.getClassId() != ClassId.ELVEN_SCOUT && player.getClassId() != ClassId.ASSASSIN) htmltext = "30702-02.htm"; else if (player.getStatus().getLevel() < 39) htmltext = "30702-01.htm"; else htmltext = "30702-03.htm"; break; case STARTED: int cond = st.getCond(); switch (npc.getNpcId()) { case BERNARD: htmltext = "30702-05.htm"; break; case HAMIL: if (cond == 1) htmltext = "30626-01.htm"; else if (cond == 2 || cond == 3) htmltext = "30626-04.htm"; else if (cond == 4) htmltext = "30626-05.htm"; else if (cond > 4 && cond < 8) htmltext = "30626-08.htm"; else if (cond == 8) { htmltext = "30626-09.htm"; st.setCond(9); playSound(player, SOUND_MIDDLE); takeItems(player, HUNTER_RUNE_2, 10); giveItems(player, HAMIL_LETTER_3, 1); } else if (cond > 8 && cond < 12) htmltext = "30626-10.htm"; else if (cond == 12) { htmltext = "30626-11.htm"; st.setCond(13); playSound(player, SOUND_MIDDLE); } else if (cond == 13) htmltext = "30626-12.htm"; else if (cond == 14) { htmltext = "30626-13.htm"; takeItems(player, BLOOD_OF_LIZARDMAN, -1); takeItems(player, CRESCENT_MOON_BOW, 1); takeItems(player, TALISMAN_OF_KADESH, 1); giveItems(player, MARK_OF_SAGITTARIUS, 1); rewardExpAndSp(player, 54726, 20250); player.broadcastPacket(new SocialAction(player, 3)); playSound(player, SOUND_FINISH); st.exitQuest(false); } break; case SIR_ARON_TANFORD: if (cond == 2) htmltext = "30653-01.htm"; else if (cond > 2) htmltext = "30653-03.htm"; break; case VOKIAN: if (cond == 5) htmltext = "30514-01.htm"; else if (cond == 6) htmltext = "30514-03.htm"; else if (cond == 7) { htmltext = "30514-04.htm"; st.setCond(8); playSound(player, SOUND_MIDDLE); takeItems(player, TALISMAN_OF_SNAKE, 1); } else if (cond > 7) htmltext = "30514-05.htm"; break; case GAUEN: if (cond == 9) { htmltext = "30717-01.htm"; st.setCond(10); playSound(player, SOUND_MIDDLE); takeItems(player, HAMIL_LETTER_3, 1); } else if (cond == 10) htmltext = "30717-03.htm"; else if (cond == 11) { htmltext = "30717-02.htm"; st.setCond(12); playSound(player, SOUND_MIDDLE); takeItems(player, MANASHEN_HORN, 1); takeItems(player, MITHRIL_CLIP, 1); takeItems(player, REINFORCED_BOWSTRING, 1); takeItems(player, STAKATO_CHITIN, 1); giveItems(player, CRESCENT_MOON_BOW, 1); giveItems(player, WOODEN_ARROW, 10); } else if (cond > 11) htmltext = "30717-04.htm"; break; } break; case COMPLETED: htmltext = getAlreadyCompletedMsg(); break; } return htmltext; } @Override public void onMyDying(Npc npc, Creature killer) { final Player player = killer.getActingPlayer(); final QuestState st = checkPlayerState(player, npc, QuestStatus.STARTED); if (st == null) return; switch (npc.getNpcId()) { case ANT: case ANT_CAPTAIN: case ANT_OVERSEER: case ANT_RECRUIT: case ANT_PATROL: case ANT_GUARD: case NOBLE_ANT: case NOBLE_ANT_LEADER: if (st.getCond() == 3 && dropItems(player, HUNTER_RUNE_1, 1, 10, 500000)) st.setCond(4); break; case BREKA_ORC_SHAMAN: case BREKA_ORC_OVERLORD: if (st.getCond() == 6 && dropItems(player, HUNTER_RUNE_2, 1, 10, 500000)) { st.setCond(7); giveItems(player, TALISMAN_OF_SNAKE, 1); } break; case MARSH_STAKATO_WORKER: case MARSH_STAKATO_SOLDIER: case MARSH_STAKATO_DRONE: if (st.getCond() == 10 && dropItems(player, STAKATO_CHITIN, 1, 1, 100000) && player.getInventory().hasItems(MANASHEN_HORN, MITHRIL_CLIP, REINFORCED_BOWSTRING)) st.setCond(11); break; case MARSH_SPIDER: if (st.getCond() == 10 && dropItems(player, REINFORCED_BOWSTRING, 1, 1, 100000) && player.getInventory().hasItems(MANASHEN_HORN, MITHRIL_CLIP, STAKATO_CHITIN)) st.setCond(11); break; case ROAD_SCAVENGER: if (st.getCond() == 10 && dropItems(player, MITHRIL_CLIP, 1, 1, 100000) && player.getInventory().hasItems(MANASHEN_HORN, REINFORCED_BOWSTRING, STAKATO_CHITIN)) st.setCond(11); break; case MANASHEN_GARGOYLE: if (st.getCond() == 10 && dropItems(player, MANASHEN_HORN, 1, 1, 100000) && player.getInventory().hasItems(REINFORCED_BOWSTRING, MITHRIL_CLIP, STAKATO_CHITIN)) st.setCond(11); break; case LETO_LIZARDMAN: case LETO_LIZARDMAN_ARCHER: case LETO_LIZARDMAN_SOLDIER: case LETO_LIZARDMAN_WARRIOR: case LETO_LIZARDMAN_SHAMAN: case LETO_LIZARDMAN_OVERLORD: if (st.getCond() == 13) { if (((player.getInventory().getItemCount(BLOOD_OF_LIZARDMAN) - 120) * 5) > Rnd.get(100)) { playSound(player, SOUND_BEFORE_BATTLE); takeItems(player, BLOOD_OF_LIZARDMAN, -1); addSpawn(SERPENT_DEMON_KADESH, player, false, 300000, true); } else dropItemsAlways(player, BLOOD_OF_LIZARDMAN, 1, 0); } break; case SERPENT_DEMON_KADESH: if (st.getCond() == 13) { if (player.getInventory().getItemIdFrom(Paperdoll.RHAND) == CRESCENT_MOON_BOW) { st.setCond(14); playSound(player, SOUND_MIDDLE); giveItems(player, TALISMAN_OF_KADESH, 1); } else addSpawn(SERPENT_DEMON_KADESH, player, false, 300000, true); } break; } } }  
×
×
  • Criar Novo...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.