Ir para conteúdo
  • Cadastre-se
Entre para seguir isso  
Discord

Codigo Java Simples

Posts recomendados

Bom ao fazer uma analise rapida na em algumas revs notei que na maioria delas existe uma possibilidade de se bugar o target do seu personagem tornando-o imune, pois o mesmo no caso so pode ser targeteado por gms.

 

 

Como funciona este bug.

 

O player que ira se bugar manda o trade em alguem e reloga, e vai fazendo isto ate que seu target bugue.

 

 

A solução do bug.

 

Adcionar um codigo que nao permita que um player relogue ao enviar ou receber solicitação de trade, creio que o mesmo deva valer para solicitaçoes de clan.

 

É ai que entra o desenvolvimento, gostaria que alguem que possua um maior conhecimento em java nos desse pelo menos a luz inicial.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Precisando de Dedicado ou VPS?

Conheça a L2JCenter

testei em teon e na do zeus funcionou nas 2, la2base original tb funfa, sendo assim creio que deve funfar na black.

a l2jbrasil vo testar dps.

 

 

==================================================

 

Parece que nao houve nenhum interesse =(

Mas vou tentar da continuidade se alguem quiser colaborar beleza.

 

 

==================================================

 

Alguem sabe qual o packet responsabel por enviar as systmsg?

Pois se o char no momento da solicitação de troca fica ocupado para receber trades, basta pegar o "state/simbol" deste estado e adaptalo aos arquivos requestrestart.java e logout.java

 

 

O codigo a ser inserido seria parecido com isso

 

 

    		if (player.isCastingNow())
   		{
   			player.sendMessage("You may not restart using skill.");
   		    return;
   		}
	}

 

 

 

 

 

 

 

 

EDIT

==================================================================================

 

Cosegui fazer o codigo.

Adcionando este codigo voce nao pode relogar enquanto propoe ou recebe uma proposta de trade.

Testei na la2base e funcionou creio que sirva para as outras.

 

net/sf/l2j/gameserver/clientpackets/Logout.java

	if (!(player.isGM()))
       {
           if(CustomZoneManager.getInstance().checkIfInZone("NoEscape", player)){
               player.sendPacket(SystemMessage.sendString("A superior power doesn't allow you to leave the event"));
               player.sendPacket(new ActionFailed());
               return;                   
           }
+            if (player.isProcessingTransaction())
+            {
+            	player.sendMessage("You may not restart while offer trade.");
+            	return;
+            }

 

net/sf/l2j/gameserver/clientpackets/Requestrestart.java

 

    @Override
protected void runImpl()
   {
       L2PcInstance player = getClient().getActiveChar();
       if (player == null)
       {
           _log.warning("[RequestRestart] activeChar null!?");
           return;
       }
+		if (player.isProcessingTransaction())
+		{
+			player.sendMessage("Cannot restart while offer trading");
+			return;
+		}

 

 

Espero que seja util.

PODEM DAR CLOSED POR FAVOR!!!

Editado por Discord

Compartilhar este post


Link para o post
Compartilhar em outros sites

e se o cara usar o ctrl + alt + del nao da na mesma ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

e se o cara usar o ctrl + alt + del nao da na mesma ?

verdade e se o cara forçar o client a fechar pelo gerenciador de tarefas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim daria mais imagina aquele pessoal que joga em lan house?? que o programa como vscyber bloqueia tudo??? ja seria uma otima solucao.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando der CRTL + ALT + DEL. O Gameserver reconhece executa a função "OnForcedDisconnection". Então acho que colocando um código com esse algoritmo irá bloquiar isso.

 

SE O PLAYER X EXECUTOU MÉTODO "ONFORCEDDISCONNECTION" EM TRADE O TARGET DELE SERÁ VAZIO (NULL).

 

Fica a idéia...

Editado por vicfelipe®

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser vicfelipe vou tentar, vou tentar fazer tambem uma adção de floodprotector para relogin pois este codigo nao resolveu o problema 100%.

Estou sem net vou ver o que da pra fazer aqui.

Editado por Discord

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lendo esse post me deparo com esse bug em meu serve so q no meu nem gm consegue dar target no player so q acredito q seja algun progama pois quando puxei o player e conversei com ele axa q ele desligo e volto a pegar target sem ele precisar relogarse alguem souber me dizer se e o mesmo bug ou e um progama fica aew a duvida

vlw obrigado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que ta faltando ae ein . ;;; eu acho . ;;;

 

olha só

 

clientpackets.TradeRequest.java (about line 125)


+        if (partner.getAllowTrade() == false)
+   	{
+        	player.sendMessage("Target is not allowed to receive more than one trade request at the same time.");
+        	return;
+        }
+        partner.setAllowTrade(false);
+        player.setAllowTrade(false);
	player.onTransactionRequest(partner);
	partner.sendPacket(new SendTradeRequest(player.getObjectId()));
	SystemMessage sm = new SystemMessage(SystemMessageId.REQUEST_S1_FOR_TRADE);
	sm.addString(partner.getName());
	player.sendPacket(sm);




-----------------------------------------------------------

clientpackets.AnswerTradeRequest.java (about line 69)


       L2PcInstance partner = player.getActiveRequester();
       if (partner == null || L2World.getInstance().findObject(partner.getObjectId()) == null)
       {
           // Trade partner not found, cancel trade
		player.sendPacket(new SendTradeDone(0));
           SystemMessage msg = new SystemMessage(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME);
           player.sendPacket(msg);
		player.setActiveRequester(null);
+			player.setAllowTrade(true);
+			partner.setAllowTrade(true);
		msg = null;
           return;
       }


-		if (_response == 1) player.startTrade(partner);



+		if (_response == 1)
+			{
+			player.startTrade(partner);
+			partner.setAllowTrade(true);
+			player.setAllowTrade(true);
+			}



	else
	{
		SystemMessage msg = new SystemMessage(SystemMessageId.S1_DENIED_TRADE_REQUEST);
		msg.addString(player.getName());
		partner.sendPacket(msg);
+			player.setAllowTrade(true);
		msg = null;
	}




------------------------------------------

L2PcInstance.java (about line 497)

   private int _apprentice = 0;
   private int _sponsor = 0;

+    public boolean _allowTrade = true;

private long _clanJoinExpiryTime;
private long _clanCreateExpiryTime;



L2PcInstance.java (about line 8121)


   public void setClanPrivileges(int n)
   {
       _clanPrivileges = n;
   }

+    public boolean getAllowTrade()
+    {
+    	return _allowTrade;
+    }
+    
+    public void setAllowTrade(boolean a)
+    {
+    	_allowTrade = a;
+    }

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  

  • Mudanças no Login

    Preste atenção às mudanças no método de login.

    Com a migração para nomes de usuário IPB4 não existe mais.

    Você deve usar seu nome de exibição ou email em vez de nome de usuário.




     



×