Ir para conteúdo
  • Cadastre-se

WebShop v1.0 MasterScript


Del Palmis

Posts recomendados

Fábio como eu disse tó em duvida em itens que tem tempo de duração. Esse tempo e em milesimos de segundos ou em segundos. Como deveria fazer essa multiplicação?

Skype: delpalmis

Não confunda ajuda, com entregar pronto!

Link para o comentário
Compartilhar em outros sites


Sim entendo. Mais lá valor estar assim. Não me lembro o item que usei mais tempo de duração do item era de 1450. ai quando ele foi para o char na tabela de items o time ficou 16545646123.

 

Creio que foi feita uma mutiplicação ai. Se eu fizer uma simples conta de matematica.

Exemplo: Valor final / Valor do Item = Valor da Mutiplicação.

Bom mais será que posso usar esse Valor da Multiplicação para todos os itens. Essa seria a minha duvida.

Editado por Dj Del Palmis

Skype: delpalmis

Não confunda ajuda, com entregar pronto!

Link para o comentário
Compartilhar em outros sites

acho que nem precisa coloca isso na tabela itens!! essas colunas nao precisa pois acho que o servidor reconhece o item quando usado e ja emula o tempo de acordo com seu id entende???

 

 

mais qualquer coisa faz um teste pois o sistema ainda esta em faze de testes mesmo phoda e quando estiver em uso e vc descobrir um bug desse tipo!!!

fabiov.png

Link para o comentário
Compartilhar em outros sites

Sim, irei fazer os testes das duas maneiras assim irei ver o que da ai depois posto aqui. Eliminei as colunas de "char_padrão" e "gold" da tabela characters. separei tudo tudo a infos do char fica numa tabela unica junto com a account do cara. Usei uma tabela com o nome shop_info. E usei sessions para trabalhar com charid

Skype: delpalmis

Não confunda ajuda, com entregar pronto!

Link para o comentário
Compartilhar em outros sites

Bom pra quem quiser estar dando uma olhada. A timeline já esta dando para ser utilizada ainda falta páginas. mais principais estão prontas. Estarei terminando as outras partes e depois comecarei e dar um revisada. E incrementa na compra. Mudei a opção de usar moeda in-game por converter ela pro shop. E só vai retirar as moedas que estiverem no inventorio. para evitar bugs. Dei select somente em moedas que forem encontradas no inventorio do char selecionado. Pois estava acontecendo que quando o count chegava a 0 deletava as moedas tanto da ware quanto do inventorio então coloquei só pra deletar as do inventorio.

Skype: delpalmis

Não confunda ajuda, com entregar pronto!

Link para o comentário
Compartilhar em outros sites

Sobre a duração dos ítems, no meu sistema L2JAS, eu faço da seguinte maneira:

 

1 minuto = 60 seg

 

Porém, o L2J trabalha em milisegundos.

Então basta multiplicar qualquer valor em segundos por 1000.

 

1 minuto: 60000

1 hora: 3600000

1 dia: 86400000

1 semana: 604800000

 

E assim por diante.

 

Qualquer dúvida, poste.

Editado por _Dudu_1533

logo.png

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...

Só adiciono um item por vez e acho meio dificil uma instrução de insert ser feita quase a mesmo tempo. Seria muito azar não acha. Estamos falando de milhonesimos de segundo.

Skype: delpalmis

Não confunda ajuda, com entregar pronto!

Link para o comentário
Compartilhar em outros sites

fiz um teste e vo usar assim agora!!

 

$qtd = '6';

for($i=0;$i<$qtd;$i++){
   $var1 = mysql_query("select id from tbl order by id desc limit 1");
   $reg1 = mysql_fetch_array($var1);
   $v = $reg1['id']+1;
   mysql_query("insert into tbl values ('".$v."')");
}

fabiov.png

Link para o comentário
Compartilhar em outros sites

fiz um teste e vo usar assim agora!!

 

$qtd = '6';

for($i=0;$i<$qtd;$i++){
   $var1 = mysql_query("select id from tbl order by id desc limit 1");
   $reg1 = mysql_fetch_array($var1);
   $v = $reg1['id']+1;
   mysql_query("insert into tbl values ('".$v."')");
}

 

Também pode fazer assim:

$qtd = 6;

for($i=0;$i<$qtd;$i++){
   $var1 = mysql_query("SELECT MAX(id) AS max FROM tbl;");
   $v = mysql_result($var1)+1;
   mysql_query("INSERT INTO tbl VALUES ('{$v}')");
}

"In a way, the supernatural is what's behind the curtain. Normally, you only need to see what's happening on stage. That's how reality works. If you don't know then it's for the best. Actually, learning about the supernatural only increases the number of things you don't know."'

Link para o comentário
Compartilhar em outros sites

Projeto interessantissimo, sem duvida... porém a minha duvida é a mesma do Fábio, é necessário se conhecer o sistema de geração do object_id do jogo e implementar de forma que não cause nenhum bug futuro, porque se tu fizer pelo PHP (via site) dessa forma e o jogo tratar isso de forma diferente, o jogo poderá tentar usar a mesma object_id em transações futuramente, com certeza deve ter algo no java, ou no próprio banco de dados que controle isso... um script que faça uma verificação se a object_id ja não está em uso de alguma forma, não traria problemas futuramente

 

mas parabéns pelo projeto, ta muito bom mesmo...

EM BREVE - GALAGARD.COM.BR

SERVIDOR Grand Crusade - 50x

SERVIDOR Classic - 8x

Link para o comentário
Compartilhar em outros sites

Eu utilizo uma forma, que na minha opinião, é melhor.

 


function gerar_cod($termo_adicional) {
 $sql = mysql_query("SELECT MAX(object_id) AS maximo FROM items") or die(mysql_error());
 $c = mysql_fetch_array($sql);
 return $c['maximo'] + $termo_adicional;
}

echo gerar_cod(1000);
//Este código vai pegar o ultimo object_id e somar 1000.

 

Até mais.

Editado por _Dudu_1533

logo.png

Link para o comentário
Compartilhar em outros sites

Opa tranquilo? Eu estou desenvolvendo um tipo de Lineage Armory (estilo o World of Warcraft tem) e tenho uma boa ideia pra incrementar o teu sistema. Pra tu ter uma ideia do que quero dizer, vai uma screen de uma tela:

 

screenarmory.png

 

Essa 'estrutura' esta montada encima de um 'div' principal aonde esta a imagem do inventario (pra ficar fixa na pagina, mesmo com redimencionameno), e as imagens dos itens e Dyes do personagem estao em 'divs' individuais inseridos na pagina com coordenadas da localizacao de cada item de acordo com o x-y de cada slot da imagem na propria pagina, e estao salvos em uma tabela de referencia no banco de dados. Sobre cada imagem de item/Dye que ele exibe ele tem um link com um JavaScript (aplicado sobra a imagem) que ativa um OnMouseOver/OnMouseOut e exibe/esconde esse div da direita, que tem todas as informacoes do item e, no meu caso, esta estilizado com as cores do proprio jogo.

 

Enfim e uma ideia pra se por acaso tu for colocar algum tipo de Auction House (que e uma ideia que pretendo desenvolver assim que terminar a Armory) tu pode usar pra nao ter que encher a tela com informacoes sobre o item, podendo simplesmente condensar estas informacoes em um lugar so visivel apenas quando o usuario passar o mouse encima.

 

Se quiser discutir alguma coisa sobre o projeto ou quiser alguns toques, mecho com L2J a Deus sabe la quanto tempo e entendo um bom bocado de PhP+MySQL voltado a servidores de L2J, entao me add no MSN ai: [email protected]

 

Sobre gerar a obj_id nova, pra ter 99% de chances de nao dar erros, usa um somador aleatorio abrangente:

 

$somador=rand(100,9999);
// cria um numero aleatorio de 100 a 9999

$nova_obj_id= $maior_obj_id_do_db + $somador ;
//cria uma nova obj_id baseada na maior somada ao numero aleatorio.

 

PS.: Sim, sou o Anderuimm mesmo

 

PS2.: Estou atras de algum DB de Servidor Epilogue/Freya L2JServer com chars e itens e tudo mais. Se alguem puder me 'mandar'a SQL por email, agradeceria imensamente (e daria os creditos, obviamente).

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

  • 1 month later...
Visitante
Este tópico está impedido de receber novos posts.
  • 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.