Ir para conteúdo
  • Cadastre-se
  • 0

Utilização de costumes via DressMe


Schuster

Pergunta

Pessoal, bom dia!

Estou configurando as famosas skins (costumes) e pretendo publicar em breve um tutorial sobre a adição e configuração, algo que muitos procuram, inclusive eu, que passei um bom tempo atras delas até ter algo realmente funcional.

Este tutorial teria o mod (DressMe) que já temos aqui no fórum e todos arquivos do cliente Interlude, tais como UTX, UKX, arquivos da datapack (SQL, XML e etc) e os arquivos da system (itemname-e.dat, etcitemgrp.dat, armorgrp.dat e etc), algo realmente completo, facilitando a vida de todos por aqui.

Baseado em três ótimos tópicos feitos por @BAN@Christian-SDM e @RootZerO, consegui  finalmente chegar no que eu desejava.

O que ocorre agora talvez seja bem simples para os mais experientes em Java. Sem mais delongas, vamos lá...

Configurei 5 costumes para utilização e testes, conforme imagem abaixo.

spacer.png

As duvidas começam agora...

Ao dar 2 cliques no item para utilizar o costume, alem de não utilizar o costume é exibida a mensagem de que o costume foi desativado, como se já estivesse em uso.

spacer.png

Se der dois cliques novamente, é utilizado o costume com sucesso.

spacer.png

E também, se der mais dois cliques ele desativa o costume com sucesso.

spacer.png

Após já ter utilizado algum costume, desativado e utilizado outro, não informa que o costume foi desativado e é ativado o novo com sucesso.

spacer.png

Caso eu tente mudar de costume já com um ativo, ele desativa o antigo, ao invés de já ativar o novo.

spacer.png

Sendo necessário mais 2 cliques para ativar o costume.

spacer.png

Surge então os questionamentos:

  • Por que informa que desativou o costume ao dar 2 cliques sendo que não foi utilizado nenhum (sendo necessário mais 2 cliques para utilizar)?
  • Por que caso eu tente mudar de costume já com um ativo, ele desativa o antigo e não ativa o novo (sendo necessário mais 2 cliques para utilizar)?

Gostaria que ao dar 2 cliques ele use o costume diretamente, independente se for a primeira utilização ou com um costume já ativo.

Segue o código Java onde acredito ser a parte de utilização do item, já fiz diversas alterações e não consigo fazer com que o item seja utilizado diretamente na primeira utilização e que após ter um ativo seja possível utilizar diretamente outro.

package Dev.ItemSkins;

import net.sf.l2j.Config;
import net.sf.l2j.gameserver.handler.IItemHandler;
import net.sf.l2j.gameserver.model.actor.Playable;
import net.sf.l2j.gameserver.model.actor.Player;
import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
import net.sf.l2j.gameserver.network.clientpackets.RequestBypassToServer;

/**
 * @author Juvenil Walker
 *
 */
public class Skin1 implements IItemHandler

{
	
	@Override
	public void useItem(Playable playable, ItemInstance item, boolean forceUse)
    {
        if(Config.ALLOW_DRESS_ME_SYSTEM)
        {
            if(!(playable instanceof Player))
                return;
            Player activeChar = (Player)playable;
            RequestBypassToServer.setPart(activeChar, "helmet", Config.SKIN_NAME1);
            RequestBypassToServer.setPart(activeChar, "chest", Config.SKIN_NAME1);
            RequestBypassToServer.setPart(activeChar, "legs", Config.SKIN_NAME1);
            RequestBypassToServer.setPart(activeChar, "gloves", Config.SKIN_NAME1);
            RequestBypassToServer.setPart(activeChar, "boots", Config.SKIN_NAME1);
            
            if (activeChar.isDressMeEnabled())
			{
				activeChar.setDressMeEnabled(false);
				activeChar.broadcastUserInfo();
				activeChar.sendMessage("You have activated costume " + Config.NAME1 + ".");
								
			}
			else
			{
				activeChar.setDressMeEnabled(true);
				activeChar.broadcastUserInfo();
				activeChar.sendMessage("You have disabled costume " + Config.NAME1 + ".");			
				
			}
        }
        else
        	playable.sendMessage("Costumes system is currently disabled.");
    }
	
	public int[] getItemIds()
    {
        return ITEM_IDS;
    }

    private static final int ITEM_IDS[] = {
    	Config.SKIN_ITEM_1
    };
}

Outras funções que pretendo adicionar em breve, é um tempo para a troca de costume, limitando algo entre 15 e 30 segundos para uma nova troca.

Estou utilizando a revisão e source disponibilizada pelo @BAN.

Costumes por @RootZerO.

Configuração do DressMe para 2 cliques por @Christian-SDM.

Peço desculpa pelo tópico massivo, mas com uma explicação mais detalhada, facilita a vida de quem for ajudar. 😁

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

22 respostass a esta questão

Posts recomendados

  • 1

Deveria ficar assim:

@Override
public void useItem(Playable playable, ItemInstance item, boolean forceUse)
{
	if(Config.ALLOW_DRESS_ME_SYSTEM)
	{
		if(!(playable instanceof Player))
			return;
		
		Player activeChar = (Player)playable;
            
		if (activeChar.getDressMeData() == null || Config.DRESS_ME_CHESTS.get(Config.SKIN_NAME1) != activeChar.getDressMeData().getChestId())
		{    
			RequestBypassToServer.setPart(activeChar, "helmet", Config.SKIN_NAME1);
			RequestBypassToServer.setPart(activeChar, "chest", Config.SKIN_NAME1);
			RequestBypassToServer.setPart(activeChar, "legs", Config.SKIN_NAME1);
			RequestBypassToServer.setPart(activeChar, "gloves", Config.SKIN_NAME1);
			RequestBypassToServer.setPart(activeChar, "boots", Config.SKIN_NAME1);
                
			activeChar.setDressMeEnabled(false);
			activeChar.broadcastUserInfo();
			activeChar.sendMessage("You have activated costume " + Config.NAME1 + ".");
		}
		else
		{
			activeChar.setDressMeData(null);
			activeChar.setDressMeEnabled(true);
			activeChar.broadcastUserInfo();
			activeChar.sendMessage("You have disabled costume " + Config.NAME1 + ".");			
		}
	}
	else
		playable.sendMessage("Costumes system is currently disabled.");
}

 

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


  • 0

Ola bom dia!

bom esse codigo das skins soltado aqui no Fórum não foi criação minha, mais acredito que pra você conseguir isso tera que inverter essa parte! deixando assim e sim tera que fazer teste!

if (activeChar.isDressMeEnabled())
{
	activeChar.setDressMeEnabled(true);
	activeChar.broadcastUserInfo();
	activeChar.sendMessage("You have disabled costume " + Config.NAME1 + ".");

}
else
{

	activeChar.setDressMeEnabled(false);
	activeChar.broadcastUserInfo();
	activeChar.sendMessage("You have activated costume " + Config.NAME1 + ".");

}

uma coisa que reparei nesse sistema e que False em vez de desligar faz ligar o custome!

e True que seria pra ligar Desliga o sistema

Ao fazer essa alteração ocorre o risco de nem ativar e nem desativar a skins mais você tera que fazer o teste.

E sim quando tenta usar outro custome primeiro ele tera que desativar o outro, não gostei mesmo desse sistema.
mais em fim amigo e um dos codigos que todos querem usar-lo hoje em dia.

Se nada acontecer tente colocar

if (activeChar.isDressMeEnabled()) por if (activeChar.isOnline())

Link para o comentário
Compartilhar em outros sites

  • 0

Fala @BAN, beleza?

Agradeço o retorno e informo que realizei as alterações propostas, que não surtiram o efeito desejado.

Alterei o if e else, mas aparentemente só inverteu a lógica, continua desativando o costume mesmo sem ter um ativo ou com algum já ativo.

Também fiz o teste substituindo if (activeChar.isDressMeEnabled()) por if (activeChar.isOnline()), onde apenas exibe a mensagem que o costume foi desativado e não ativa após novos 2 cliques.

Talvez tenha uma pessoa que poderia nos ajudar a ajustar essa lógica. 

@Tayran.JavaDev, poderia nos ajudar?

Link para o comentário
Compartilhar em outros sites

  • 0
2 minutos atrás, Schuster disse:

Fala @BAN, beleza?

Agradeço o retorno e informo que realizei as alterações propostas, que não surtiram o efeito desejado.

Alterei o if e else, mas aparentemente só inverteu a lógica, continua desativando o costume mesmo sem ter um ativo ou com algum já ativo.

Também fiz o teste substituindo if (activeChar.isDressMeEnabled()) por if (activeChar.isOnline()), onde apenas exibe a mensagem que o costume foi desativado e não ativa após novos 2 cliques.

Talvez tenha uma pessoa que poderia nos ajudar a ajustar essa lógica. 

@Tayran.JavaDev, poderia nos ajudar?

Eu to na luta nessas skill skins tbm, negão olhando o codigo assim a inversão seria uma solução, poderia mandar uma print do codigo para verificar como ficou

 

Tmj em By Shaka

Link para o comentário
Compartilhar em outros sites

  • 0

@Ricardo Marques,

O código é o mesmo exposto no inicio do tópico.

package Dev.ItemSkins;

import net.sf.l2j.Config;
import net.sf.l2j.gameserver.handler.IItemHandler;
import net.sf.l2j.gameserver.model.actor.Playable;
import net.sf.l2j.gameserver.model.actor.Player;
import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
import net.sf.l2j.gameserver.network.clientpackets.RequestBypassToServer;

/**
 * @author Juvenil Walker
 *
 */
public class Skin1 implements IItemHandler

{
	
	@Override
	public void useItem(Playable playable, ItemInstance item, boolean forceUse)
    {
        if(Config.ALLOW_DRESS_ME_SYSTEM)
        {
            if(!(playable instanceof Player))
                return;
            Player activeChar = (Player)playable;
            RequestBypassToServer.setPart(activeChar, "helmet", Config.SKIN_NAME1);
            RequestBypassToServer.setPart(activeChar, "chest", Config.SKIN_NAME1);
            RequestBypassToServer.setPart(activeChar, "legs", Config.SKIN_NAME1);
            RequestBypassToServer.setPart(activeChar, "gloves", Config.SKIN_NAME1);
            RequestBypassToServer.setPart(activeChar, "boots", Config.SKIN_NAME1);
            
            if (activeChar.isDressMeEnabled())
{
	activeChar.setDressMeEnabled(true);
	activeChar.broadcastUserInfo();
	activeChar.sendMessage("You have disabled costume " + Config.NAME1 + ".");

}
else
{

	activeChar.setDressMeEnabled(false);
	activeChar.broadcastUserInfo();
	activeChar.sendMessage("You have activated costume " + Config.NAME1 + ".");

}
        }
        else
        	playable.sendMessage("Costumes system is currently disabled.");
    }
	
	public int[] getItemIds()
    {
        return ITEM_IDS;
    }

    private static final int ITEM_IDS[] = {
    	Config.SKIN_ITEM_1
    };
}

 

Link para o comentário
Compartilhar em outros sites

  • 0

O código usado é esse ?

https://pastebin.pl/view/22ad08d2

O ideal seria trocar todo esse código do Dressme, mas...

Caso seja, você pode tentar fazer o seguinte:

Em todos os itemHandlers de skin:

troque essa linha:

if (activeChar.isDressMeEnabled())

por essa:

if (activeChar.getDressMeData() == null || Config.DRESS_ME_CHESTS.get(Config.SKIN_NAME1) != activeChar.getDressMeData().getChestId())

Lembrar de trocar o "Config.SKIN_NAME1" pela correspondente de cada handler.

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

  • 0
1 hora atrás, KhayrusS disse:

O código usado é esse ?

https://pastebin.pl/view/22ad08d2

O ideal seria trocar todo esse código do Dressme, mas...

Caso seja, você pode tentar fazer o seguinte:

Em todos os itemHandlers de skin:

troque essa linha:


if (activeChar.isDressMeEnabled())

por essa:


if (activeChar.getDressMeData() == null || Config.DRESS_ME_CHESTS.get(Config.SKIN_NAME1) != activeChar.getDressMeData().getChestId())

Lembrar de trocar o "Config.SKIN_NAME1" pela correspondente é cada handler.

parabéns a chamda fico incrivel se o valor for nulo e ele faz isso.

sim o certo e trocar esse sistema estou crindo um diferente com a chamda mais facil de ser usada!

Link para o comentário
Compartilhar em outros sites

  • 0

@KhayrusS,

Efetuei as alterações que você propôs e não funcionou. Os costumes não são ativados ao dar 2 cliques.

Buscando identificar a ativação automática, sem ter utilizado ou com outro já ativo, consegui fazer com que ative diretamente nos primeiros dois cliques, tanto no primeiro uso quanto em um novo uso, alterando no arquivo RequestBypassToServer.java, mudando o if para true e o else para false.

		else if (_command.equals("bp_changedressmestatus"))
		{
			if (player.isDressMeEnabled())
			{
				player.setDressMeEnabled(true);
				player.broadcastUserInfo();
			}
			else
			{
				player.setDressMeEnabled(false);
				player.broadcastUserInfo();
			}
			
			Dressme.sendMainWindow(player);
		}	

Porem, agora não desativa a skin, já tentei diversas mudanças e sem sucesso.

Visto que a lógica deste código não está legal, teria um mod para me indicar?

Link para o comentário
Compartilhar em outros sites

  • 0

Infelizmente não tenho.

Agora que você falou que não deu certo, olhei o que esse trecho de código faz:

RequestBypassToServer.setPart(activeChar, "helmet", Config.SKIN_NAME1);

Não sei quem fez, mas esse mod troca a skin antes mesmo de verificar se pode ser ativada ou não.

Se quiser tentar mais uma vez. Faz a mudança que indiquei e mais essa:

pega todo esse código:


    RequestBypassToServer.setPart(activeChar, "helmet", Config.SKIN_NAME1);
    RequestBypassToServer.setPart(activeChar, "chest", Config.SKIN_NAME1);
    RequestBypassToServer.setPart(activeChar, "legs", Config.SKIN_NAME1);
    RequestBypassToServer.setPart(activeChar, "gloves", Config.SKIN_NAME1);
    RequestBypassToServer.setPart(activeChar, "boots", Config.SKIN_NAME1);

e coloca dentro do if

ficando algo assim:

if (activeChar.getDressMeData() == null || Config.DRESS_ME_CHESTS.get(Config.SKIN_NAME1) != activeChar.getDressMeData().getChestId()) {
		RequestBypassToServer.setPart(activeChar, "helmet", Config.SKIN_NAME1);
		RequestBypassToServer.setPart(activeChar, "chest", Config.SKIN_NAME1);
		RequestBypassToServer.setPart(activeChar, "legs", Config.SKIN_NAME1);
		RequestBypassToServer.setPart(activeChar, "gloves", Config.SKIN_NAME1);
		RequestBypassToServer.setPart(activeChar, "boots", Config.SKIN_NAME1);
        
		activeChar.setDressMeEnabled(true);
		activeChar.broadcastUserInfo();
		activeChar.sendMessage("You have disabled costume " + Config.NAME1 + ".");
} 
else
{
	activeChar.setDressMeData(null);
	activeChar.setDressMeEnabled(false);
	activeChar.broadcastUserInfo();
	activeChar.sendMessage("You have activated costume " + Config.NAME1 + ".");

}
        

 

Note o "activeChar.setDressMeData(null);" no else, para permitir que após remoção você consiga recolocar a mesma skin

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

  • 0

@KhayrusS,

Realizei as alterações e o item não ativa, apenas exibe a mensagem que foi ativado.

spacer.png

Segue código do item 1 (Hunter).

package Dev.ItemSkins;


import net.sf.l2j.Config;
import net.sf.l2j.gameserver.handler.IItemHandler;
import net.sf.l2j.gameserver.model.actor.Playable;
import net.sf.l2j.gameserver.model.actor.Player;
import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
import net.sf.l2j.gameserver.network.clientpackets.RequestBypassToServer;

/**
 * @author Juvenil Walker
 *
 */
public class Skin1 implements IItemHandler

{

	
	@Override
	public void useItem(Playable playable, ItemInstance item, boolean forceUse)
    {
        if(Config.ALLOW_DRESS_ME_SYSTEM)
        {
            if(!(playable instanceof Player))
                return;
            Player activeChar = (Player)playable;
            RequestBypassToServer.setPart(activeChar, "helmet", Config.SKIN_NAME1);
            RequestBypassToServer.setPart(activeChar, "chest", Config.SKIN_NAME1);
            RequestBypassToServer.setPart(activeChar, "legs", Config.SKIN_NAME1);
            RequestBypassToServer.setPart(activeChar, "gloves", Config.SKIN_NAME1);
            RequestBypassToServer.setPart(activeChar, "boots", Config.SKIN_NAME1);
            
            if (activeChar.getDressMeData() == null || Config.DRESS_ME_CHESTS.get(Config.SKIN_NAME1) != activeChar.getDressMeData().getChestId()) {
        		RequestBypassToServer.setPart(activeChar, "helmet", Config.SKIN_NAME1);
        		RequestBypassToServer.setPart(activeChar, "chest", Config.SKIN_NAME1);
        		RequestBypassToServer.setPart(activeChar, "legs", Config.SKIN_NAME1);
        		RequestBypassToServer.setPart(activeChar, "gloves", Config.SKIN_NAME1);
        		RequestBypassToServer.setPart(activeChar, "boots", Config.SKIN_NAME1);
                
        		activeChar.setDressMeEnabled(true);
        		activeChar.broadcastUserInfo();
        		activeChar.sendMessage("You have disabled costume " + Config.NAME1 + ".");
        } 
        else
        {
        	activeChar.setDressMeData(null);
        	activeChar.setDressMeEnabled(false);
        	activeChar.broadcastUserInfo();
        	activeChar.sendMessage("You have activated costume " + Config.NAME1 + ".");

        }
        }
        else
        	playable.sendMessage("Costumes system is currently disabled.");
    }
	
	public int[] getItemIds()
    {
        return ITEM_IDS;
    }

    private static final int ITEM_IDS[] = {
    	Config.SKIN_ITEM_1
    };
}

 

Link para o comentário
Compartilhar em outros sites

  • 0

@KhayrusS, funcionou da forma que eu desejava! 😁

Muito obrigado pela ajuda e pela resolução do problema. 👊

Segue vídeo com a utilização dos costumes.

Agora, caso ainda deseje me ajudar, gostaria de impor um tempo para utilização de outro costume, evitando que o player fique floodando os costumes.

Exemplo, player utilizou o costume Hunter e na sequencia já mudou para o Ninja, da mesma forma que fiz no vídeo. Seria interessante se houvesse uma proteção sinalizando ao player que só é possível utilizar um novo costume em um determinado tempo, seja ele configurado direto no código fonte ou por config.

Seria possível isso? 

Novamente te agradeço pelo empenho!

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

  • 0
53 minutos atrás, Schuster disse:

@KhayrusS, funcionou da forma que eu desejava! 😁

Muito obrigado pela ajuda e pela resolução do problema. 👊

Segue vídeo com a utilização dos costumes.

Agora, caso ainda deseje me ajudar, gostaria de impor um tempo para utilização de outro costume, evitando que o player fique floodando os costumes.

Exemplo, player utilizou o costume Hunter e na sequencia já mudou para o Ninja, da mesma forma que fiz no vídeo. Seria interessante se houvesse uma proteção sinalizando ao player que só é possível utilizar um novo costume em um determinado tempo, seja ele configurado direto no código fonte ou por config.

Seria possível isso? 

Novamente te agradeço pelo empenho!

toppppppppppppppppp

Tmj em By Shaka

Link para o comentário
Compartilhar em outros sites

  • 0
Em 30/04/2020 at 01:22, Schuster disse:

Exemplo, player utilizou o costume Hunter e na sequencia já mudou para o Ninja, da mesma forma que fiz no vídeo. Seria interessante se houvesse uma proteção sinalizando ao player que só é possível utilizar um novo costume em um determinado tempo, seja ele configurado direto no código fonte ou por config.

Seria possível isso? 

 

Sim é possível, em Player.java é necessário criar um proprieadade para salvar o momento em que o dressMe foi utilizado:

 

private long dressMeLastChange;

public void setDressMeLastChange(long timestamp) {
	dressMeLastChange = timestamp;
}

public long getDressMeLastChange() {
	return dressMeLastChange;
}
	

Nos handlers depois de :

Player activeChar = (Player)playable;

adiciona:

if(System.currentTimeMillis() - activeChar.getDressMeLastChange() < Config.DRESSME_MIN_TIME) {
   activeChar.sendMessage("You can't change too fast");
   return false;
}
                                                                                           

depois de:

activeChar.sendMessage("You have activated costume " + Config.NAME1 + ".");
		

adiciona:

activeChar.setDressMeLastChange(System.currentTimeMillis());

 

A parte da configuração fica por sua conta, não conheço o código da Acis

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

  • 0

Top esse mod eu tenho ele mais eu queria alterar pra quando clicar no item ele ir para o inventory no lugar da mask ou sei lá pq se ele ficar assim ele gera tipo um bug exemplo clica na skin pra usar e da trade ne outro personagem e passa a skin fica no personagem que e estava ! ja tentei mecher no xml/ itens mais quando eu altero la para usar no acessorio quando clicar a skin ja buga não aparece á aparencia 

Link para o comentário
Compartilhar em outros sites

  • 0
On 4/30/2020 at 7:22 AM, Schuster said:

@KhayrusS, funcionou da forma que eu desejava! 😁

Muito obrigado pela ajuda e pela resolução do problema. 👊

Segue vídeo com a utilização dos costumes.

Agora, caso ainda deseje me ajudar, gostaria de impor um tempo para utilização de outro costume, evitando que o player fique floodando os costumes.

Exemplo, player utilizou o costume Hunter e na sequencia já mudou para o Ninja, da mesma forma que fiz no vídeo. Seria interessante se houvesse uma proteção sinalizando ao player que só é possível utilizar um novo costume em um determinado tempo, seja ele configurado direto no código fonte ou por config.

Seria possível isso? 

Novamente te agradeço pelo empenho!

where i can found the full code ?

3467403207.png

Link para o comentário
Compartilhar em outros sites

  • 0

Não sei se do de vocês, mais quando utilizava a l2jdrem vip, esse sistema de skin tipo skill se você usa-se ele, e passava por trade o item, a aparência ficava. Presenciei isso com server online. Falta elabora uma restrição. Porisso alguns server russo usam ao invés desse, eles colocaram como um exemplo uma tattoo. A lucera se nao me engano o sistema é assim.

        <set template ="true"/>
        <set temp_hair="7683"/>
        <set temp_face="6394"/>
        <set temp_chest="6373"/>
        <set temp_legs="6374"/>
        <set temp_gloves="6375"/>
        <set temp_feet="6376"/>

👀🙏🦮🚗🏃‍♂️☀️🎧♐📳⚽🚲🏓☕🎣🚭🏳️

Link para o comentário
Compartilhar em outros sites

  • 0
Em 04/07/2020 at 19:52, junin00 disse:

Não sei se do de vocês, mais quando utilizava a l2jdrem vip, esse sistema de skin tipo skill se você usa-se ele, e passava por trade o item, a aparência ficava. Presenciei isso com server online. Falta elabora uma restrição. Porisso alguns server russo usam ao invés desse, eles colocaram como um exemplo uma tattoo. A lucera se nao me engano o sistema é assim.

        <set template ="true"/>
        <set temp_hair="7683"/>
        <set temp_face="6394"/>
        <set temp_chest="6373"/>
        <set temp_legs="6374"/>
        <set temp_gloves="6375"/>
        <set temp_feet="6376"/>

Basta nas configurações do item você procurar a linha que fala sobre não passar em trade!!

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 esta pergunta...

×   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.