Jump to content
×
×
  • Create New...

[JAVA] Commande : Surveiller un joueur


Aesir
 Share

Recommended Posts

import common.Commands;Bonjour, bonsoir,

 

Dans ce sujet vous trouverai les lignes de code (Java) d'une commande GM de "Surveillance".

Si vous avez des suggestions afin d'amélioré le code et/ou des remarques nécessité pas.

Je débute dans le "Java" et vos commentaires peuvent m’aidai.

 

Description de l’effet:

Rend le GM, ou un autre, invisible (Size 0) et suit le joueur ciblé a chaque changement de map.

[Ajout] Le GM reçois les MP reçu et envoyer du joueur Surveillé.

 

( Par la suite je regarderai si il est possible de faire un listing de tout les comptes jouer par l'IP, et/ou d’afficher les messages privé de la cible et/ou d'autres informations comme les kamas )

 

Syntaxe:

SURVEILLE [PseudoJoueur] [PseudoGM_*]

*Facultatif: utile pour désigné un autre GM.

 

Ligne de Code (Java):

Parti Téléportation et vérification (MapID_joueur = MapID_GM)

 

Dans Commands.java > public class Commands { :

Dans Commands.java > public class Commands {
public static boolean OnOff;
public static Personnage P1 ;
public static Personnage target1 ;

private boolean _TimerStart1 = false;
Timer _timer1;

private Timer createTimer1(final int time1, final Personnage target1, final Personnage P1)
{
    ActionListener action = new ActionListener ()
      {
    	int Time1 = time1;
        public void actionPerformed (ActionEvent event)

    	{
        	Time1 = Time1-1;
        	if(Time1 <= 0)
        	{
				short mapID1 = P1.get_curCarte().get_id();
				short mapGM = target1.get_curCarte().get_id();
				int cellID1 = P1.get_curCell().getID();

        		if(mapID1 != mapGM)
        		{
        		target1.teleport(mapID1, cellID1);
    			String str = "Le joueur a ete teleporte";
    			SocketManager.GAME_SEND_CONSOLE_MESSAGE_PACKET(_out,str);
        		}
        		if(P1.get_fight() != null)
        		{
        			target1.get_fight().joinAsSpect(target1);
        		}
        	}
        }
      };
    return new Timer (2000, action); //Toutes les deux secondes (2000) vérifie si il a pas eu de déplacement
}

 

Partie "Commande":

 

Dans Commands.java > public void commandGmXXXX :

Dans Commands.java > public void commandGmXXXX

	if (command.equalsIgnoreCase("SURVEILLE"))
	{        // Vérifications // 
		P1 = World.getPersoByName(infos[1]);
		if(P1 == null)
		{
			String str = "Le personnage n'existe pas";
			SocketManager.GAME_SEND_CONSOLE_MESSAGE_PACKET(_out,str);
			return;
		}
		target1 = _perso;  
		if(infos.length > 2)									//Si un nom de perso est specifier
		{
			target1 = World.getPersoByName(infos[2]);
			if(target1 == null || target1.get_compte().get_gmLvl() < 1) // vérifie si le surveillant est bien GM
			{
				String str = "Le personnage n'a pas ete trouve ou n'est pas un GM";
				SocketManager.GAME_SEND_CONSOLE_MESSAGE_PACKET(_out,str);
				return;
			}
			if(target1.get_fight() != null)
			{
				String str = "La cible est en combat";
				SocketManager.GAME_SEND_CONSOLE_MESSAGE_PACKET(_out,str);
				return;
			} 	// FIN des Vérifications // 
		}
	int time1 = 1;
				// Demande de surveillance faite //
		if(OnOff = false || !_TimerStart1 && target1.get_compte().get_gmLvl() >= 1) // Si pas activé OU Timer pas activé ET GMlvl sup a 1 = OK
		{
			target1.set_size(0);  								// on réduit la taille a zero
			SocketManager.GAME_SEND_ERASE_ON_MAP_TO_MAP(target1.get_curCarte(), target1.get_GUID());
			SocketManager.GAME_SEND_ADD_PLAYER_TO_MAP(target1.get_curCarte(), target1);

			_timer1 = createTimer1(time1, target1, P1); 		// on lance le timer
			_timer1.start();
			_TimerStart1 = true;
			OnOff = true;

			SocketManager.GAME_SEND_CONSOLE_MESSAGE_PACKET(_out, "Surveillance Activer !" );
		}
		else 
					// demande d'arret de surveillance //
		if(OnOff = true && _TimerStart1) 						// Si activé ET timer activé = OK
		{
			_timer1.stop();										//on stop le timer
			_TimerStart1 = false;
			OnOff = false; 

			target1.set_size(100); 								// on rend sa taille normal
			SocketManager.GAME_SEND_ERASE_ON_MAP_TO_MAP(target1.get_curCarte(), target1.get_GUID());
			SocketManager.GAME_SEND_ADD_PLAYER_TO_MAP(target1.get_curCarte(), target1);
			SocketManager.GAME_SEND_CONSOLE_MESSAGE_PACKET(_out, "Surveillance Arreter !");
		}
	}else	

 

[Note] J'ai désigné "commandGmXXXX" car libre a vous de le placer dans "commandGmFour" ou "One"

 

Partie "Basic_chatMessage"

 

Dans GameThread > Basic_chatMessage :

Dans GameThread > Basic_chatMessage


import common.Commands;


if((Commands.target1).get_compte().get_gmLvl() >= 1 && Commands.OnOff) // Si le GM est grade1 (mini) et comme surveillance activé = OK
				{
					SocketManager.GAME_SEND_cMK_PACKET(Commands.target1, "F", Commands.P1.get_GUID(), Commands.P1.get_name(), msg);
					SocketManager.GAME_SEND_cMK_PACKET(target, "F", _perso.get_GUID(), _perso.get_name(), msg);
					SocketManager.GAME_SEND_cMK_PACKET(_perso, "T", target.get_GUID(), target.get_name(), msg);
					return;
				}

 

Ajout d'une conditions "Si le GM est grade1 (mini) et comands surveillance activé = OK" afin de récupérai ces MP's

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

 

Edited by Nicosti
Correction spoilers
  • J'adore 3

.gif

Link to comment
Share on other sites

@Nicky31:

Merci, j'ai toujours un peu de mal a donné un titre a mes sujets !

 

@Défense:

Je comprend que "testé" toutes les secondes doit "coûter cher".

Mais plus on agrandi la duré, plus le TP sera moins proche au changement de map du joueur.

 

Par expérience, lorsque tu vois des "Speed-Hackers" sur un serveur, il ne reste pas plus de 2secondes sur une map, lorsqu'il traque (PvP par exemple).

Alors qu'une traversé de bout a bout doit bien faire 5-6 secondes.

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

Maintenant si quelqu'un a une suggestion a faire pour remplacer le Timer, je suis preneur !

( Le "Wait" et "sleep" fige le Thread (Client Dofus répond pas) il me semble ... )

.gif

Link to comment
Share on other sites

Mise a jour du Code

 

nicky serais bien de le mettre sur cyon ému que ta modifier ^^ ??? si l'envie te prend

Rien de plus simple:

Hidden Content

    Give reaction to this post to see the hidden content.

 

Ici tu as que l'émulateur et les sources.

La base de donnée étant la même, il faut juste remplacer "CyonEmu.jar" après avoir fait une sauvegarde du *.jar d'origine (par sécurité).

  • J'adore 1

.gif

Link to comment
Share on other sites

@Mind:

Hier à 23h17 suite au message j'ai "corriger" les erreurs qu'il avait et ajouter la surveillance des MP's.

Normalement tout devrai fonctionné.

 

Mais si tu parle du code actuel, pourrai tu détaillé un peu ?

.gif

Link to comment
Share on other sites

Dans Commands.java > public class Commands {

public static boolean OnOff;

public static Personnage P1 ;

public static Personnage target1 ;

 

private boolean _TimerStart1 = false;

Ton timer est mal configuré, il ne peut indiqué que le booleanTimer1=Start

Timer _timer1;

 

private Timer createTimer1(final int time1, final Personnage target1, final Personnage P1)

{

ActionListener action = new ActionListener ()

{

int Time1 = time1;

public void actionPerformed (ActionEvent event)

 

{

Time1 = Time1-1;

if(Time1 <= 0)

{

short mapID1 = P1.get_curCarte().get_id();

short mapGM = target1.get_curCarte().get_id();

int cellID1 = P1.get_curCell().getID();

 

if(mapID1 != mapGM)

{

target1.teleport(mapID1, cellID1);

String str = "Le joueur a ete teleporte";

SocketManager.GAME_SEND_CONSOLE_MESSAGE_PACKET(_out,str);

}

if(P1.get_fight() != null)

Si tu procèdes comme cela, aucun joueur n'est selectionné puisque ton ¨P1 n'est pas launch.

{

target1.get_fight().joinAsSpect(target1);

}

}

}

};

return new Timer (2000, action); //Toutes les deux secondes (2000) vérifie si il a pas eu de déplacement

}

 

 

Parti "Commande":

Dans Commands.java > public void commandGmXXXX

if (command.equalsIgnoreCase("SURVEILLE"))

{ // Vérifications //

P1 = World.getPersoByName(infos[1]);

if(P1 == null) Même chose.

{

String str = "Le personnage n'existe pas";

SocketManager.GAME_SEND_CONSOLE_MESSAGE_PACKET(_out,str);

return;

}

target1 = _perso;

if(infos.length > 2) //Si un nom de perso est specifier

{

target1 = World.getPersoByName(infos[2]);

if(target1 == null || target1.get_compte().get_gmLvl() < 1) // vérifie si le surveillant est bien GM

{

String str = "Le personnage n'a pas ete trouve ou n'est pas un GM";

SocketManager.GAME_SEND_CONSOLE_MESSAGE_PACKET(_out,str);

return;

}

if(target1.get_fight() != null)

{

String str = "La cible est en combat";

SocketManager.GAME_SEND_CONSOLE_MESSAGE_PACKET(_out,str);

return;

} // FIN des Vérifications //

}

int time1 = 1;

// Demande de surveillance faite //

if(OnOff = false || !_TimerStart1 && target1.get_compte().get_gmLvl() >= 1) // Si pas activé OU Timer pas activé ET GMlvl sup a 1 = OK

{

target1.set_size(0); // on réduit la taille a zero

SocketManager.GAME_SEND_ERASE_ON_MAP_TO_MAP(target1.get_curCarte(), target1.get_GUID());

SocketManager.GAME_SEND_ADD_PLAYER_TO_MAP(target1.get_curCarte(), target1);

 

_timer1 = createTimer1(time1, target1, P1); // on lance le timer Ton timer est incorrecte, P1 non lancé, time non préparé.

_timer1.start();

_TimerStart1 = true;

OnOff = true;

 

SocketManager.GAME_SEND_CONSOLE_MESSAGE_PACKET(_out, "Surveillance Activer !" );

}

else

// demande d'arret de surveillance //

if(OnOff = true && _TimerStart1) // Si activé ET timer activé = OK

{

_timer1.stop(); //on stop le timer

_TimerStart1 = false;

OnOff = false;

 

target1.set_size(100); // on rend sa taille normal

SocketManager.GAME_SEND_ERASE_ON_MAP_TO_MAP(target1.get_curCarte(), target1.get_GUID());

SocketManager.GAME_SEND_ADD_PLAYER_TO_MAP(target1.get_curCarte(), target1);

SocketManager.GAME_SEND_CONSOLE_MESSAGE_PACKET(_out, "Surveillance Arreter !");

}

}else

 

 

 

[Note] J'ai désigné "commandGmXXXX" car libre a vous de le placer dans "commandGmFour" ou "One"

 

Parti "Basic_chatMessage"

Dans GameThread > Basic_chatMessage

if((Commands.target1).get_compte().get_gmLvl() >= 1 && Commands.OnOff) // Si le GM est grade1 (mini) et comme surveillance activé = OK

{

SocketManager.GAME_SEND_cMK_PACKET(Commands.target1, "F", Commands.P1.get_GUID(), Commands.P1.get_name(), msg);

SocketManager.GAME_SEND_cMK_PACKET(target, "F", _perso.get_GUID(), _perso.get_name(), msg);

SocketManager.GAME_SEND_cMK_PACKET(_perso, "T", target.get_GUID(), target.get_name(), msg);

 

Le socket n'est pas renvoyé, ni envoyé au perso. tu oublies des liaisons binaire importantes.

return;

}

 

 

Ajout d'une conditions "Si le GM est grade1 (mini) et comands surveillance activé = OK" afin de récupérai ces MP's

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

 

 

 

Des erreurs qui ne permettent pas l'utilisation du code optimale.

i'm not a philosophic but i'm a tank -T4NK

Link to comment
Share on other sites

Merci beaucoup Mind,

pour le future je pense éviter de publié mes codes ... et retourné a mes cours de Java !

 

De rien!

 

@Défense: Non, on s'en "tape" pas. Si ces liaison ne sont pas faites son code tournera mais ne sera pas optimisé à 100%.

i'm not a philosophic but i'm a tank -T4NK

Link to comment
Share on other sites

Mind a raison, et c'est pour ce genre de commentaire que je pose mes "codes".

Si je ne vois pas les défauts, ou une optimisation possible, me le faire remarquer me permet de progressé.

 

Exactement. ;)

i'm not a philosophic but i'm a tank -T4NK

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share



Important Information

Terms of Use / Privacy Policy / Guidelines / 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.