Ir para conteúdo
  • Cadastre-se

Website L2JBrasil - PHP & Laravel


vert

Posts recomendados

14 minutos atrás, vert disse:

Obrigado!

Estou muito motivado, principalmente pelo seu trabalho e do Yoda!

Aguardo ansiosamente poder testa-lo no Linux;

Abraço campeão!

Muito obrigado mais uma vez pelas palavras de incentivo isso nós deixa com mais vontade de nós doar ao máximo para podermos superar as expectativas de todos,quero deixar aqui um forte abraço e conte sempre com nossa equipe.

Link para o comentário
Compartilhar em outros sites


2 horas atrás, Henrique Nunes disse:

Estou a desenvolver algo próximo a isso, claro, usando a mesma base (template youplay), não sou nenhum expert, mas parece funcionar.

Show fera!

Está utilizando algum framework como base ?

Link para o comentário
Compartilhar em outros sites

19 horas atrás, vert disse:

W8 ? 

Obrigado fera!

windows 8 layout

j9NKAW1.gif

"A Vontade de se Preparar Transforma Heróis"

"A Dor física é só um mero Sentimento"

🦸🏽‍♂️

rogeriomorais.gif

Link para o comentário
Compartilhar em outros sites

//@Levy: auth - login controller

$Table = 'accounts';

  if (!Schema::hasColumn($Table, 'remember_token')):
    DB::statement('ALTER TABLE '.$Table.' ADD remember_token varchar(100)'); // @Levy: essa alteração na tabela é para não dar erro no logout, pois ele tenta atualizar o remember_token ao deslogar
  endif;

$CheckLogin = DB::table($Table)->where('login', $Login)->where('password', Functions::PasswordL2($Password))->get(); //@Levy: faço um select utilizando uma query simples, encryptando a senha com uma função (que é a mesma encryptação do L2, apenas criei uma função para ela)

// Aqui resolvi o problema de verificar se a conta existe, na parte abaixo lhe mostro como efetuar o login com base nesse código
//@Levy: auth - login controller

		if (sizeof($CheckLogin) > 0):

          $User = Accounts::find($Login); //@Levy: utilizei o Find do eloquent + model (já posto o model como ficou)

          if (Auth::login($User)):
            // Authentication passed...
            return redirect()->intended('dashboard');
          else:
            return redirect()->back();
          endif;

        else:
          return redirect()->back()
          ->withInput($request->only('login', 'remember'))
          ->witherrors('Login or Password incorrects');
        endif;
//@Levy: model Accounts.php

<?php

namespace App\Models\General;

use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;

class Accounts extends Authenticatable {
    use Notifiable;

    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'accounts';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        // '',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The primaryKey associated with the model.
     *
     * @var string
     */
    protected $primaryKey = 'login';

    public $incrementing = false;

}

Ai a solução meu querido, @Levy se tiver mais alguma dúvida, é só me dar um toque.

PS: Laravel 5.6 foi lançado oficialmente ontem! hahaha

Estou trabalhando com o Laravel 5.4, irei fazer a atualização a cada 2 versões do Laravel, utilizo PHP 7.0, mas o 7.2 já está configurado no servidor ( o 5.4 é incompatível com php 7.2 ), mas com o php 7.2 tenho um ganho de 30% na performance do servidor; aconselho a dar uma checada na sua versão do Laravel e do PHP, fará diferença.

Abraço!

Editado por vert
Comentários
Link para o comentário
Compartilhar em outros sites

 

17 horas atrás, Jefferson James disse:

Parabéns pelo trabalho!!!

Obrigado!

 

@Levy, postei no inicio do post acima mas o editor não salvou, nessa plataforma http://lineage2.store/ utilizo o auth padrão do laravel, é uma plataforma para painel administrativo dinâmico (estou em contato com o Grundor e logo mais postaremos informações oficiais); após configurar o servidor, a plataforma gera um hash para o outro projeto identificar de qual servidor deve pegar as configurações.

Se quiser testar o projeto, é só me mandar uma MP.

São dois projetos em Laravel 5.4, o segundo projeto (Do painel admin) faz conexões dinâmicas (on the fly) :D

Abraço fera!

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

2 minutos atrás, vert disse:

Interessante, será privado ?

O site em si não possui muitas funcionalidades, porem meu projeto pessoal L2 MAP (Management Account Panel ) possui, funcionalidades. Eu não irei priva-los, porem só irei disponibilizar após está funcionando em meu próprio servidor. É claro que irei atualiza-lo com frequência e irei disponibilizar também para os usuários do Forum, acredito eu, que o MAP seja de maior valia do que o site propriamente dito.

q8MMXkm.png

Link para o comentário
Compartilhar em outros sites

3 minutos atrás, Henrique Nunes disse:

O site em si não possui muitas funcionalidades, porem meu projeto pessoal L2 MAP (Management Account Panel ) possui, funcionalidades. Eu não irei priva-los, porem só irei disponibilizar após está funcionando em meu próprio servidor. É claro que irei atualiza-lo com frequência e irei disponibilizar também para os usuários do Forum, acredito eu, que o MAP seja de maior valia do que o site propriamente dito.

Entendo, parabéns pelo pensamento fera!

Se precisar de algumas idéias para o MAP, pode pegar daqui lineage2.store; quanto mais projetos para o forum melhor, gostaria muito que os velhos tempos voltassem...

Link para o comentário
Compartilhar em outros sites

2 minutos atrás, vert disse:

Entendo, parabéns pelo pensamento fera!

Se precisar de algumas idéias para o MAP, pode pegar daqui lineage2.store; quanto mais projetos para o forum melhor, gostaria muito que os velhos tempos voltassem...

Valeu amigo, porem como eu tenho aproximadamente, 3 dias somente de PHP afundo, pois sempre tive preguiça de aprender, eu não manjo de todas as funcionalidades, ainda to limitado aos meus conhecimentos, porem preciso de aprender, já que vou cursar Ciências da Computação :')

q8MMXkm.png

Link para o comentário
Compartilhar em outros sites

  • 2 months later...

Caraca mano... show de bola.

Eu como desenvolvedor, dou parabéns à toda a equipe L2jBrasil pelo seu trabalho.

Sei que cada implementação feita aqui tanto em Framework ou procedural, é sim de grande ajuda para todos os usuários do fórum. Pois, foi aqui que eu aprendi a programar, hoje, tenho meu próprio framework estruturado. Tudo que eu sei hoje de programação para sites, devo tudo isso à equipe L2jBrasil.

 Estou apto a fazer testes, caso houver a necessidade, estarei a disposição para ajudar aos novos DEVS para suas futuras aplicações.

L2 Revolução

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Hoje em dia vale a pena desenvolver algo assim num framework. por alguns motivo

Galera que programou em procedural em 2010 hoje os código deles não funciona sem alteração nas versão recente do php,mysql etc..

Eu escolheria qualquer framework ou até mesmo um micro framework

É fazia só uma rest api é fazia o site pra consumir esses endpoint

no laravel pra autenticar 
 

$credentials = [
  'login' => $request->get('login'),
  'password' => base64_encode(pack("H*", sha1(utf8_encode($request->get('password')))))
  ];
  $token = null;
  if (!$token = JWTAuth::attempt($credentials)) {
  return response()->json(['invalid_login_or_password'], 422);
  }
 

return response()->json(compact('token'));
 

 

Assim eu faço o login comparando a senha com a hash do lineage é geraria um token no formato jwt
É o cliente usaria Vue.js ou React 

Pois assim se eu quiser fazer um app mobile nativo ou hibrido fica simples por que ai é só consumir os endpoint pelos verbos http.

api.meuservidor/create_account
api.meuservidor/changer_password  [TOKEN NO HEADER]
api.meuservidor/me [GET] [TOKEN NO HEADER]
api.meuservidor/outros_methods [POST/GET/PUT/DELETE ETC..]

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

  • 2 months later...

E mais um detalhe, a branch master está parada por enquanto, o TurtleLess está trabalhando nessa branch: https://github.com/L2jBrasil/L2jBrasilWeb/tree/Light

Link para o comentário
Compartilhar em outros sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Processando...
  • 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.