Ir para conteúdo
  • Cadastre-se

Site leve e responsivo com painel de controle by P3K4D0R


P3K4D0R

Posts recomendados

Boa tarde galera. Há tempos estou sumido do fórum e do Lineage 2 de forma geral, mas ultimamente estou estudando desenvolvimento web e decidi criar um site para me aperfeiçoar. Então venho postar ele para vocês darem uma conferida e, quem sabe, contribuírem para o desenvolvimento dele. Vou disponibilizar o link do projeto no Git Hub para quem quiser dar uma conferida.

O site apesar de estar muito simples, possui algumas funcionalidades interessantes como: Responsividade, permitindo o site se ajustar de acordo com o dispositivo que ele está sendo visitado; Sistema de criação de contas com validações via AJAX com os campos nome e email para melhor controle; Painel de controle para que o player possa ver as informações básicas da conta e alterar a senha; Assim como a página inicial com um ‘slide’ em que podem ser adicionadas informações e ilustrações interessantes, de acordo com a sua necessidade.

Claro que pretendo adicionar novas funcionalidades ao site, tais como Rank de PvP / PK, ativação de conta por email informações cada vez mais completas no painel de controle.

Mas de momento espero que deem um feedback com sugestões e críticas. Caso queiram contribuir de alguma forma entrem em contato.

 

Download da versão 1.1 (Se for atualizar, verifique o arquivo Leia-me.txt na pasta Setup):

https://drive.google.com/open?id=0B9lhjTxjbN3Gc0k5STh4bnVtLTg

 

Printscreens do site: https://goo.gl/photos/GdVQdsBW9VQWa4ic7

 

Projeto no GitHub: https://github.com/Maurifc/L2Site

 

Configuração básica para uso do site (Não use bloco de notas do Windows!):

1 Descompacte os arquivos na raiz do seu servidor web (www ou htdocs)

2 Rode o arquivo query.sql incluído na pasta /setup no seu banco de dados para que sejam adicionadas as colunas nome e email na tabela 'accounts'

3 Configure a conexão do seu banco de dados e nome do site no arquivo Config.php

 

Testado nos Packs: L2jDream e L2Acis. Dêem um feedback à medida que for sendo testado em outros packs.

 

Projeto sob a licença GPL v3.0 - Melhore e distribua gratuitamente

Editado por P3K4D0R

"Um dia já me falaram que somos livres, eu concordo, somos livres pra obedecer"

Link para o comentário
Compartilhar em outros sites


 

Boa tarde galera.

 

Rapaz, achei bastante interessante a ideia do site. Gosto muito de coisas simples e funcionais.

A parte estética pode melhorar. Mas isso é o de menos nesse momento.

Estive procurando um modelo de site semi pronto para criar um L2 Guia para o versão do Lineage 2 Classic e acho que vou usar seu site.

"And I now wait to shake the hand of fate

Like the dusk awaiting dawn"

Link para o comentário
Compartilhar em outros sites

Rapaz, achei bastante interessante a ideia do site. Gosto muito de coisas simples e funcionais.

A parte estética pode melhorar. Mas isso é o de menos nesse momento.

Estive procurando um modelo de site semi pronto para criar um L2 Guia para o versão do Lineage 2 Classic e acho que vou usar seu site.

Que bom que tu achou legal a idéia, pode usar a vontade. A parte estética pode melhorar, com certeza hahaha. Sou inexperiente mas aos poucos vou me aperfeiçoando, por isso que acharia interessante algum Web designer dar uma mexida nesse layout haha. Valeuu pelo feedback.

 

Ta Pra qual Pack o site ? pq na Acis ta dando erro pra logar no painel :buaa:

Eu testei em L2jDream mas acredito que não terá nenhum problema com outras. Se você está com problemas para logar no painel, pode ser a configuração de conexão com o banco de dados. Dá uma conferida no arquivo Config.php

"Um dia já me falaram que somos livres, eu concordo, somos livres pra obedecer"

Link para o comentário
Compartilhar em outros sites

Eu testei em L2jDream mas acredito que não terá nenhum problema com outras. Se você está com problemas para logar no painel, pode ser a configuração de conexão com o banco de dados. Dá uma conferida no arquivo Config.php

Ja conferi as config

 

ve a print do erro ae http://imgur.com/a/LoFod

Link para o comentário
Compartilhar em outros sites

Ja conferi as config

 

ve a print do erro ae http://imgur.com/a/LoFod

Erro corrigido. Atualize para a versão 1.1 do site e rode a devida SQL de atualização (/setup/update_para_1.1.sql). Obrigado pelo feedback.

Editado por P3K4D0R

"Um dia já me falaram que somos livres, eu concordo, somos livres pra obedecer"

Link para o comentário
Compartilhar em outros sites

Não, OOP pode ficar mais pesado que procedural. E a config ali com muitas instancia é recomendado ? Uma class no arquivo de config?

OO na prática não é mais pesado que procedural, é imperceptível, o ping para o site faria mais diferença do que o paradigma usado. Não dá pra construir boas coisas no procedural, é pedir pra ter dor de cabeça. A config não é instanciada em nenhum momento, o método get presente na classe Config é estático e por isso é possível carregar qualquer configuração sem instanciar. É claro que deve haver formas melhores de fazer um arquivo de configuração, mas, até o momento, é o melhor que encontrei hehe. Estou aberto à sugestões. Abraços.

"Um dia já me falaram que somos livres, eu concordo, somos livres pra obedecer"

Link para o comentário
Compartilhar em outros sites

OO na prática não é mais pesado que procedural, é imperceptível, o ping para o site faria mais diferença do que o paradigma usado. Não dá pra construir boas coisas no procedural, é pedir pra ter dor de cabeça. A config não é instanciada em nenhum momento, o método get presente na classe Config é estático e por isso é possível carregar qualquer configuração sem instanciar. É claro que deve haver formas melhores de fazer um arquivo de configuração, mas, até o momento, é o melhor que encontrei hehe. Estou aberto à sugestões. Abraços.

Você pode usar o bom e velho define() no arquivo config ou você pode fazer o que os frameworks fazem: utilizar a função env().

Alguns de forma mais simples fazem da seguinte forma:

 

config.php

 

 

<?php

return [
   'server_name' => 'L2jBrasil',
 
  /**
  * Connection config
  */
  'driver' => 'mysql',
  'host' => 'localhost',
  'user' => 'root',
  'pass' => '',
  'database' => 'l2jdb'
 
 // TODO : More configs
];

 

 

 

Util.php (classe Util ou outra classe de configuração Global)

 

 

<?php
namespace App\Util;

class Util 
{
   
public static function getConfig($key = null)
   {
     $array = include 'path/config.php';
        if($key) {
            return isset($array[$key]) ? $array[$key] : null;
        }

        return null;
   }

}

 

 

 

Sendo assim, na chamada abaixo, você terá o valor desejado se passar uma chave existente do array.

App\Util\Util::getConfig('server_name');

Não, OOP pode ficar mais pesado que procedural. E a config ali com muitas instancia é recomendado ? Uma class no arquivo de config?

Na verdade é até recomendado usar uma classe. Só pra você ter ideia, os Frameworks, inclusive os mais conhecidos, usam classe(s) para manipular as configurações do projeto.

2 exemplos:

 

- Laravel Framework

Usa a class App():

App::environment('local')

- CakePHP

Usa a classe Configure()

Configure::read('local')

Obs.: Sempre com métodos estáticos!

 

Espero ter ajudado, abraços (:

Editado por NaNyNhA
Link para o comentário
Compartilhar em outros sites

Na logica é o conceito de reutilizar o código e também se o camarada não usa vai se matar em escreve tudo de novo, no php para chamar um método estático atribuindo a palavra chave static, e basta chamar o método com nome da class e o operador de resolução de alcance? ( ::, estudei php mas não lembro dessa parte, acho que faltei a aula.

Editado por Jamba

Tudo depende de você mesmo!

Link para o comentário
Compartilhar em outros sites

Na logica é o conceito de reutilizar o código e também se o camarada não usa vai se matar em escreve tudo de novo, no php para chamar um método estático atribuindo a palavra chave static, e basta chamar o método com nome da class e o operador de resolução de alcance? ( ::, estudei php mas não lembro dessa parte, acho que faltei a aula.

Isso mesmo, porém isso só vai conseguir ser feito se:

 

1 - Não estiver usando namespace e usar o include da classe;

2 - No caso do projeto aqui citado, usando namespace, usar o use

 

Sendo assim, você irá conseguir chamar:

<?php
class MinhaClasse
{
    public static function meuMetodo($args = null)
    {
       // TODO: To Implement...
    }
}
MinhaClasse::meuMetodo($args);

Abraços

Link para o comentário
Compartilhar em outros sites

Ae pode me dizer onde eu errei ? achei o site muito bonito, ancioso pra testar. segue abaixo o erro

 

http://imgur.com/a/KoLT9

Que bom que curtiu o site. Tá muito estranho isso aí, parece até que tá faltando a pasta Assets por completo ou ela foi movida. Eu descompactaria de novo o site e tentaria de novo.

"Um dia já me falaram que somos livres, eu concordo, somos livres pra obedecer"

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Boa tarde galera, a nova versão 1.2 acabou de sair.

 

Download: https://github.com/Maurifc/L2Site/archive/v1.2.zip

 

Obs: Verifiquem o arquivo setup/leia-me.txt para rodar a SQL correta ao instalar a nova versão.

 

Change log:

+: Pequenas melhorias e padronização do envio de erros para as views Home e Cadastro
+: Ranking PVP e PK (Verifique o arquivo Config.php)
+: Adicionado 'modo debug', selecionável através do arquivo Config.php
+: Tabela de Heroes
+: Adiciona bloqueio de usuário/IP caso erre a senha mais de 20 vezes (Anti bruteforce)
Fix: Ajustes finos no layout
Fix: Barra de navegação com ajuste aprimorados para se contrair (Collapse) em telas SM (Tablet)
Fix: Aprimoramentos na validação do cadastro

"Um dia já me falaram que somos livres, eu concordo, somos livres pra obedecer"

Link para o comentário
Compartilhar em outros sites

 

 

THWagej.png

 

 

 

to com esse lindo errinho, coloquei as informações corretas no configurador pra acessar DB etc, porem fica assim o site, porque ? :(

persista mesmo que tudo vá contra você!
Sou um cara cheio de dúvidas, mas gosto de ajudar no que sei e até onde eu sei!

ass jbrasil.jpg
spacer.png

Link para o comentário
Compartilhar em outros sites

Simples, leve e funcional. Esse ai eu usaria sem dó!

Obrigado pela contribuição. HAHAHA :)

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

  • 2 weeks later...

Boa tarde galera. Há tempos estou sumido do fórum e do Lineage 2 de forma geral, mas ultimamente estou estudando desenvolvimento web e decidi criar um site para me aperfeiçoar. Então venho postar ele para vocês darem uma conferida e, quem sabe, contribuírem para o desenvolvimento dele. Vou disponibilizar o link do projeto no Git Hub para quem quiser dar uma conferida.

O site apesar de estar muito simples, possui algumas funcionalidades interessantes como: Responsividade, permitindo o site se ajustar de acordo com o dispositivo que ele está sendo visitado; Sistema de criação de contas com validações via AJAX com os campos nome e email para melhor controle; Painel de controle para que o player possa ver as informações básicas da conta e alterar a senha; Assim como a página inicial com um ‘slide’ em que podem ser adicionadas informações e ilustrações interessantes, de acordo com a sua necessidade.

Claro que pretendo adicionar novas funcionalidades ao site, tais como Rank de PvP / PK, ativação de conta por email informações cada vez mais completas no painel de controle.

Mas de momento espero que deem um feedback com sugestões e críticas. Caso queiram contribuir de alguma forma entrem em contato.

 

Download da versão 1.1 (Se for atualizar, verifique o arquivo Leia-me.txt na pasta Setup):

https://drive.google.com/open?id=0B9lhjTxjbN3Gc0k5STh4bnVtLTg

 

Printscreens do site: https://goo.gl/photos/GdVQdsBW9VQWa4ic7

 

Projeto no GitHub: https://github.com/Maurifc/L2Site

 

Configuração básica para uso do site (Não use bloco de notas do Windows!):

1 Descompacte os arquivos na raiz do seu servidor web (www ou htdocs)

2 Rode o arquivo query.sql incluído na pasta /setup no seu banco de dados para que sejam adicionadas as colunas nome e email na tabela 'accounts'

3 Configure a conexão do seu banco de dados e nome do site no arquivo Config.php

 

Testado nos Packs: L2jDream e L2Acis. Dêem um feedback à medida que for sendo testado em outros packs.

 

Projeto sob a licença GPL v3.0 - Melhore e distribua gratuitamente

 

Packs: L2jDream e essa poderia me passa o link

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

 

 

THWagej.png

 

 

 

to com esse lindo errinho, coloquei as informações corretas no configurador pra acessar DB etc, porem fica assim o site, porque ? :(

 

esse erro acontece pq você colocou o site dentro da pasta site, mas a forma que ele foi construido é para ficar nas pasta raiz. a falta da pasta assets se dá pq ele ta buscando a partir da raiz do host.

...O RESPEITO QUE IMPOMOS DEFINE O QUE SOMOS....

Link para o comentário
Compartilhar em outros sites

Não, OOP pode ficar mais pesado que procedural. E a config ali com muitas instancia é recomendado ? Uma class no arquivo de config?

Além de programação orientada a objeto ser mais fluida e genérica (sendo possível a sua reutilização somente copiando e colando "os arquivos"), o sistema fica mais leve e a redundância é obvia.

 

Num sistema todo procedural, os seus métodos "function", ficam desprotegidos, vuneráveis a qualquer tipo de invasão, se alguém conhece o seu estilo de programar, então fica muito mais vuneravel ainda. Além da bagunça que fica o código, fica meio que espaguete, onde fica tudo junto e misturado. Já na OOP com apenas algumas linhas chamando o objeto->metodo você consegue algo mais limpo e protegido.

 

Ah...

 

Boa tarde galera. Há tempos estou sumido do fórum e do Lineage 2 de forma geral, mas ultimamente estou estudando desenvolvimento web e decidi criar um site para me aperfeiçoar. Então venho postar ele para vocês darem uma conferida e, quem sabe, contribuírem para o desenvolvimento dele. Vou disponibilizar o link do projeto no Git Hub para quem quiser dar uma conferida.

O site apesar de estar muito simples, possui algumas funcionalidades interessantes como: Responsividade, permitindo o site se ajustar de acordo com o dispositivo que ele está sendo visitado; Sistema de criação de contas com validações via AJAX com os campos nome e email para melhor controle; Painel de controle para que o player possa ver as informações básicas da conta e alterar a senha; Assim como a página inicial com um ‘slide’ em que podem ser adicionadas informações e ilustrações interessantes, de acordo com a sua necessidade.

Claro que pretendo adicionar novas funcionalidades ao site, tais como Rank de PvP / PK, ativação de conta por email informações cada vez mais completas no painel de controle.

Mas de momento espero que deem um feedback com sugestões e críticas. Caso queiram contribuir de alguma forma entrem em contato.

 

Download da versão 1.1 (Se for atualizar, verifique o arquivo Leia-me.txt na pasta Setup):

https://drive.google.com/open?id=0B9lhjTxjbN3Gc0k5STh4bnVtLTg

 

Printscreens do site: https://goo.gl/photos/GdVQdsBW9VQWa4ic7

 

Projeto no GitHub: https://github.com/Maurifc/L2Site

 

Configuração básica para uso do site (Não use bloco de notas do Windows!):

1 Descompacte os arquivos na raiz do seu servidor web (www ou htdocs)

2 Rode o arquivo query.sql incluído na pasta /setup no seu banco de dados para que sejam adicionadas as colunas nome e email na tabela 'accounts'

3 Configure a conexão do seu banco de dados e nome do site no arquivo Config.php

 

Testado nos Packs: L2jDream e L2Acis. Dêem um feedback à medida que for sendo testado em outros packs.

 

Projeto sob a licença GPL v3.0 - Melhore e distribua gratuitamente

 

 

assim que eu arrumar um tempinho posso ta fazendo uma melhoria no código... melhorar o seu motor template da view. ao invés de criar uma pasta com nome de view, por que você não trata a view dentro do mesmo arquivo?

 

o loop while ou foreach, o que eles retornam pra você é a view, crie uma classe que trabalhe o seu html e faça um replace das tags para o seu conteúdo... assim o carregamento dos arquivos fica muito mais rápido! #ficaadica

 

tenta colocar um singleton na conexão, assim ele não sobrecarrega tanto igual aconteceu aqui!

Ae pode me dizer onde eu errei ? achei o site muito bonito, ancioso pra testar. segue abaixo o erro

 

http://imgur.com/a/KoLT9

para quem teve esse mesmo erro ai, eu tive a ousadia de dar uma mexida no código...

 

bom, pra quem ta com a tela só com os textos e não tem imagem e nem cor de fonte, é por que a url que ele programou para o site foi a pasta raiz... para resolver esse problema, caso você tenha uma página principal de um fórum ou uma tela de vote que redireciona para outra página "o seu site", eu fiz a seguinte alteração:

//arquivo congig
class Config{
  private static $configs = [
    //Básico
    'titulo_site' => 'L2Site - O melhor servidor de Lineage 2 da atualidade',
	
	'home'=>'http://localhost/lineage',//inseri essa linha abaixo o indice que gera o titulo do site; LEMBRANDO QUE VOCÊ COPIA A URL NA BARRA DE ENDEREÇO DO NAVEGADOR E COLA AQUI SEM A BARRA FINAL

//no arquivo /app/views/layouts/app.tpl.php

//em todas as '../../' eu substitui por

//<?=Config::get('home'); ?>/


dessa forma você vai poder colocar o site em qualquer lugar do seu servidor localhost ou hospedagem.

L2 Revolução

Link para o comentário
Compartilhar em outros sites

  • 5 weeks later...

 

esse erro acontece pq você colocou o site dentro da pasta site, mas a forma que ele foi construido é para ficar nas pasta raiz. a falta da pasta assets se dá pq ele ta buscando a partir da raiz do host.

É verdade Demonwar, mas mexi nesses caminhos pra que isso não ocorra. Burrice da minha parte, eu admito. Em breve vou liberar a proxima versão já com isso devidamente corrigido.

 

 

...

para quem teve esse mesmo erro ai, eu tive a ousadia de dar uma mexida no código...

 

bom, pra quem ta com a tela só com os textos e não tem imagem e nem cor de fonte, é por que a url que ele programou para o site foi a pasta raiz... para resolver esse problema, caso você tenha uma página principal de um fórum ou uma tela de vote que redireciona para outra página "o seu site", eu fiz a seguinte alteração:

//arquivo congig
class Config{
  private static $configs = [
    //Básico
    'titulo_site' => 'L2Site - O melhor servidor de Lineage 2 da atualidade',
	
	'home'=>'http://localhost/lineage',//inseri essa linha abaixo o indice que gera o titulo do site; LEMBRANDO QUE VOCÊ COPIA A URL NA BARRA DE ENDEREÇO DO NAVEGADOR E COLA AQUI SEM A BARRA FINAL

//no arquivo /app/views/layouts/app.tpl.php

//em todas as '../../' eu substitui por

//<?=Config::get('home'); ?>/


dessa forma você vai poder colocar o site em qualquer lugar do seu servidor localhost ou hospedagem.

Muito obrigado pelas sugestões, irei estudar a implementação dessas melhorias. Quanto ao problema de carregamento dos assets, já foi solucionado e será liberado em breve.

"Um dia já me falaram que somos livres, eu concordo, somos livres pra obedecer"

Link para o comentário
Compartilhar em outros sites

  • 8 months later...

Amigo por favor dar uma luz. Qual a versão do Php que você usou ? Estou com problema estranho. Não carrega o site, ou necessário fazer algum configuração no PHP, ligando algum module.

Ex. Só carrega o html todo quebrado, sem layout e muito mais. Alguém poderia ajuda.

Fiz a configuração no arquivo Config.php

 

Link para o comentário
Compartilhar em outros sites

Em 04/04/2018 at 22:26, bobspunk disse:

Amigo por favor dar uma luz. Qual a versão do Php que você usou ? Estou com problema estranho. Não carrega o site, ou necessário fazer algum configuração no PHP, ligando algum module.

Ex. Só carrega o html todo quebrado, sem layout e muito mais. Alguém poderia ajuda.

Fiz a configuração no arquivo Config.php

 

tem print da tela e do seu CTRL+U ?

 

Eu uso uma das mais atuais que é a PHP 7.0.10

L2 Revolução

Link para o comentário
Compartilhar em outros sites

A parte de cadastro  não esta criando contas, mas eu consigo acessar o painel com uma conta já existente.

usando uma rev Acis.

Editado por TensO
Cadastro não funciona.
 

Nick = TensO.Zangetsu

Level = 32

Link para o comentário
Compartilhar em outros sites

Em 11/04/2018 at 10:06, adiliogobira2 disse:

tem print da tela e do seu CTRL+U ?

 

Eu uso uma das mais atuais que é a PHP 7.0.10

Amigo baixei a versão atualizada no Git do projeto e o problema foi corrigido. Mas ainda está com problema na parte do Rank Heroes, PVP e PK. E Painel não Logou.

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.