Revenir en arrière   cheat-gam3 > Espace codeurs et entraides > Programmation de cheat & tools > Tutoriel > Programmation > Cours C# / .NET > 4-Cours pour expert


Sujets similaires
Sujet Auteur du sujet Forum Réponses Dernier message
TOUT MES LOGICIEL ses un copier coller de se que j'ais mi sure dowland paradis aminous Archives 34 29/03/2012 21h55
[Mu] +2000 roms ds ! [1 liens 1 jeux !] titus Archives 21 08/03/2012 20h47
External BoxESP V5.2 dmc Archives 0 10/10/2010 21h00
[Tutorial]CE richtig in S4 verwenden, Trainer mit AutoIT erstellen yvan1 Archives 8 23/09/2010 14h46

Répondre
Outils du sujet   Activer le mode LinéaireActiver le mode HybrideActiver le mode Arborescent
Ancien 08/12/2010, 18h56   #1
Identité
+.::+Hardcore Gameur+::.+
 
Avatar de Geonesis
Geonesis est déconnecté
Informations
Inscrit : décembre 2010
Lieu: Dalaran
Messages: 142
Point(s) Honneur: 126
Par défaut [C#]Créer un radar pour des jeux

Voici un petit tutoriel pour créer un radar World of Warcraft (et d'autre jeux) :

Introduction
Avec un minimum de jugeote vous pouvez adapter ce tutoriel pour d'autres jeux.
Réaliser un radar nécessite un connaissance Débutant+ du langage C#.

I - Prérequis

Dans ce tutoriel, j'utiliserais BlackRain, un Object Manager (comprendre le concept d'Object Manager avant de continuer, merci) pour WoW réaliser par Seifer des forums MMOwned.

Télécharger BlackRain et la suite BlackMagic de Shynd.

Black.rar (Black.rar contient BlackRain.dll BlackMagic.dll fasm_managed.dll FASM.dll)

II - DoubleBufferedPanel

Le meilleur composant pour dessiner des graphismes (2D) en C# (et d'autres langage) pour un radar est le composant Panel.

Cependant, celui ci n'as qu'un tampon simple (SimpleBuffered) donc si le temps de rafraichissement de votre Panel est faible (disons 10 millisecondes), celui ci scintilleras et ça vas être moche.

Nous allons donc créer un DoubleBufferedPanel.

Petit dessin pour expliquer.

image (c) Site du zero

Commencer par ajouter une classe à votre projet puis renommer Class1.cs en DoubleBufferedPanel.cs.
Voici le code :
Code:
[C#]
using System.Windows.Forms; //Using nécessaire pour accéder à System.Windows.Forms.Panel


namespace RADAR
{
    class DoubleBufferedPanel : Panel //Défini la classe en tant que composant Panel
    {
        public DoubleBufferedPanel()
        {
            this.DoubleBuffered = true; //On active le double buffering
        }
    }
}
Enfin, placer un Panel (System.Windows.Forms.Panel depuis la ToolBox) dans votre forme principale (FormMain.cs ou Form1.cs souvent).
Accédez à <Votre forme principale>.Designer.cs, puis changer ceci.

Code:
[C#]
...
this.votre_panel = new System.Windows.Forms.Panel();
...
Par.
Code:
[C#]
...
this.votre_panel = new DoubleBufferedPanel();
...
III - BlackRain Object Manager

Commençons par les usings nécessaire à la bonne utilisation de BlackRain.
Code:
[C#]
using BlackRain.Common;
using BlackRain.Common.Objects;
Voici la méthode générale pour utiliser BlackRain.

Initialisation :
Code:
[C#]
//Initialisation de BlackRain (lien vers le processus)
int wow_pid = 0;
if ((wow_pid = SProcess.GetProcessFromProcessName("Wow")) != 0)
            {
                ObjectManager.Initialize(wow_pid);
            }
Rafraîchissement des objets chargés en mémoire :
Code:
[C#]
ObjectManager.Pulse();
Accès aux données :
Code:
[C#]
ObjectManager.Me.BaseHealth;
IV - Le radar

Pour rafraîchir votre radar vous devez créer une thread tournant en boucle qui exécute la méthode Refresh du Panel, pour cela nous allons utiliser un Timer.

Ajouter un timer à votre forme, laissez l'intervalle de base (100 millisecondes) nous verrons comment le modifier dans les annexes.
Insérez la méthode Refresh() du panel dans le timer.
Code:
[C#]
private void timer_WhatYouWant_Tick(object sender, EventArgs e)
        {
            votre_panel.Refresh(); //Tout les x millisecondes cette méthode est exécutée.
        }
V - "Peindre" sur le panel

Pour "peindre" sur le panel des graphismes représentant votre joueur, les unités et/ou objets environnants (oui on vas pas dessiner des bites...) nous allons utiliser l’événement OnPaint du composant panel.

1 - Ajout de OnPaint

Sélectionnez votre panel, pardon votre DoubleBufferedPanel; puis ajoutez lui l’événement OnPaint.
Une fois ajouté, ne vous placez pas encore dans le code de l’événement; la partie la plus intéressante arrive.

2 - Avant de peindre

Avant de peindre, il nous faut du matériel :
un pinceau -> SolidBrush
un crayon -> Pen
des connaissances en dessin -> Graphics

3 - Atelier peinture


Instanciez votre matériel, mais pas vos connaissances.
Code:
[C#]
private Pen p = new Pen(Color.Transparent);
private SolidBrush f = new SolidBrush(Color.Transparent);
private Graphics g;
Placez vous dans le code de l'événement OnPaint :
Code:
[C#]
private void votre_panel_Paint(object sender, PaintEventArgs e)
        {
                 //Vous êtes ici!
        }
ATTENTION : LA SUITE SE PASSE DANS LA FONCTION EVENEMENTIELLE votre_panel_Paint().

Initialisez vos connaissances.
Code:
[C#]
g = e.Graphics();
En premier lieu, il faut nettoyer le dessin avant d'en faire un autre :
Code:
[C#]
g.Clear(Color.TheColorYouWant);
4 - Partie intéressante

Petite partie théorique : Nous voulons afficher chaque objets chargés en mémoire, ainsi que notre position (position de notre joueur) au milieu.
Mais nous ne pouvons pas accéder à tout les objets en une seule fois, nous allons devoir accéder au objets un par un puis dessiner leur positions sur le panel.

Pour placer notre position (au centre du panel), rien de plus simple, il suffit de déterminer des coordonnées fixes (x_orig, y_orig).
Code:
[C#]
x_center = votre_panel.Width / 2; //On récupère la largeur du panel, on la divise par deux et on obtient la coordonnée x centrale, je vous épargne le cours de mathématiques, je suppose que vous êtes scolarisés.
y_center = votre_panel.Height / 2; //Idem avec y et la hauteur.
Pour accéder aux objets nous allons les énumérer un par un et leur appliquer un traitement.

Attention ça viens en un bloc (commenté) :
Code:
[C#]
foreach (WowObject obj in ObjectManager.Objects) //On traite objet par objet
            {
                if (obj.IsMe) //Si L'objet est mon joueur
                {
                    b.Color = Color.Red; //On trempe le pinceau dans le Rouge
                    g.FillRectangle(b, x_center, y_center, 8, 8);//On dessine un rectangle et on le remplis avec notre pinceau au centre
                }
                else //Sinon
                {
                    p.Color = Color.Black; //On prépare notre stylo noir
                    b.Color = Color.Blue; //On trempe le pinceau dans le bleu
                    x_display = GetXDiff(obj.X); //On cherche la différence de coordonnée (X) entre nous et l'objet
                    y_display = GetYDiff(obj.Y); //On cherche la différence de coordonnée (X) entre nous et l'objet
                    g.DrawLine(p, x_center, y_center, x_display, y_display); //On trace une ligne entre nous et l'objet (coordonnées pré-transformées donc tout vas bien)
                    g.FillRectangle(b, x_display, y_display, 5, 5); //On dessine un rectangle et on le remplis avec notre pinceau au coordonnées transformées
                }
            }
Conclusion
Voilà voilà hop hop, vous avez toutes les cartes pour réaliser un radar pour n'importe quel jeu.

Attention, dans certain jeux, pour correctement afficher la position des unités, il faudras transformer les coordonnées (pour Wow aussi), mais je vais pas vous macher plus le travail.

Pour un autre jeu, il vous faudra un ObjectManager pour le-dit jeu.

[Seul les membres enregistrés peuvent voir les liens Cliquez-ici pour vous inscrire]

Dernière modification de Geonesis, 08/12/2010 à 23h26
J'aime ce message




[Seul les membres enregistrés peuvent voir les liens Cliquez-ici pour vous inscrire]
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Répondre en citant
Les membres suivants ont remercié Geonesis pour ce message :
F4mOus59 (22/12/2011)
Ancien 08/12/2010, 20h02   #2
Identité
 
Avatar de n0way
n0way est déconnecté
Informations
Inscrit : novembre 2010
Lieu: Earth
Messages: 331
Point(s) Honneur: 66
Par défaut

Bonsoir,

Rien à dire, je trouve ca plutôt excellent, pourrais-tu apporter quelques screen à ton tuto ?
Je te remercie.

Cordialement,
n0way
J'aime ce message


~ cause i fall in love of love ~

Mon tuto [Seul les membres enregistrés peuvent voir les liens Cliquez-ici pour vous inscrire]
Mon BOT Vote [Seul les membres enregistrés peuvent voir les liens Cliquez-ici pour vous inscrire]
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Répondre en citant
Ancien 08/12/2010, 22h58   #3
Identité
Informations
Inscrit : mars 2010
Messages: 93
Point(s) Honneur: 25
Par défaut

Citation:
Envoyé par n0way
Rien à dire, je trouve ca plutôt excellent, pourrais-tu apporter quelques screen à ton tuto ?
Il ne pourras pas, c'est pas son tuto. Il l'a juste leech d'ici en changeant quelques mots. En plus il a enfreint 2 des 3 points du [Seul les membres enregistrés peuvent voir les liens Cliquez-ici pour vous inscrire].

Dernière modification de ragnarock, 09/12/2010 à 19h06
J'aime ce message



ragnarock, si vous désirez éditer votre signature, cliquez:

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Répondre en citant
Ancien 08/12/2010, 23h25   #4
Identité
+.::+Hardcore Gameur+::.+
 
Avatar de Geonesis
Geonesis est déconnecté
Informations
Inscrit : décembre 2010
Lieu: Dalaran
Messages: 142
Point(s) Honneur: 126
Par défaut

Et oui j'ai oublier de citer la source je vais la mettre
J'aime ce message




[Seul les membres enregistrés peuvent voir les liens Cliquez-ici pour vous inscrire]
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Répondre en citant
Ancien 09/12/2010, 13h41   #5
Identité
 
Avatar de n0way
n0way est déconnecté
Informations
Inscrit : novembre 2010
Lieu: Earth
Messages: 331
Point(s) Honneur: 66
Par défaut

ragnarock je te conseille de retirer le lien menant a un autre site, tu risque d'être sanctionné par les admins.

Geonesis Quel dommage, j'y ai presque cru, je te felicite beaucoup moins du coup, mais je te remercie du partage tout de même
J'aime ce message


~ cause i fall in love of love ~

Mon tuto [Seul les membres enregistrés peuvent voir les liens Cliquez-ici pour vous inscrire]
Mon BOT Vote [Seul les membres enregistrés peuvent voir les liens Cliquez-ici pour vous inscrire]
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Répondre en citant
Ancien 03/05/2011, 19h29   #6
Identité
 
Avatar de casimir
casimir est déconnecté
Informations
Inscrit : mars 2011
Lieu: In Your Ass
Messages: 630
Point(s) Honneur: 10
Par défaut

tient personne n as essayer ^^
J'aime ce message



casimir, si vous désirez éditer votre signature, cliquez:

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Répondre en citant
Ancien 14/06/2011, 12h24   #7
Identité
 
Avatar de Sel3n
Sel3n est déconnecté
Informations
Inscrit : juin 2011
Messages: 1
Point(s) Honneur: 0
Par défaut

Tiens mon Tuto lol.
J'aime ce message



Sel3n, si vous désirez éditer votre signature, cliquez:

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Répondre en citant
Ancien 07/08/2011, 15h10   #8
Identité
Informations
Inscrit : janvier 2011
Messages: 296
Point(s) Honneur: 100
Par défaut

Merci Du partage , va falloir revoir un peu ce que je connaisais du C et du C++ , Merci du partage !
J'aime ce message


Coldphase est de retour

Test du Pack Trool De Vertebro
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Répondre en citant
Ancien 27/11/2011, 21h19   #9
Identité
Informations
Inscrit : mars 2011
Messages: 73
Point(s) Honneur: 5
Par défaut

Très bon tuto et facile à suivre merci
J'aime ce message



enzobes899, si vous désirez éditer votre signature, cliquez:

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Répondre en citant
Thanks to NLP-er enjoy automatic translations (vBET 2.3.10)
Propulsé par vBulletin® version 3.8.4
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
SEO by vBSEO
Version française par vBulletin-Ressources.com
vBCredits I v. 1.5.1 Gold ©2001-2010, PixelFX Studios Ltd.
SEO by vBSEO