kalicem Administrateur
Hors ligne
Inscrit le: 24 Mai 2014 Messages: 15
|
Posté le: Dim 14 Déc - 07:35 (2014) Sujet du message: Menu de sélection de personnage |
|
|
Ceci est un tutoriel sur la façon de créer une sélection de classe simple pour le multijoueur. Cela ne va pas être très joli, mais cela va fonctionner.
Cela a été fait avec Visual studio C # 2010 express et la version limitée de Neoaxis 2,02. Je pense que la version 1.32 alternatif pourrait être suffisant, mais vous devez avoir accès au code client/serveur. Ce tutoriel ne fonctionne que si vous utilisez le serveur dédié. Jouer et héberger ne fonctionne pas. Je pourrais résoudre ce problème plus tard. Premièrement aller de l'avant et modifier le MultiplayerLoginWindow gui dans l'éditeur de ressources. Ajouter un nouveau DefaultListBox gui et lui donner le nom "classes" Ensuite, ouvrez MultiplayerLoginwindows.cs dans Visual Studio. Au début de la classe ajoutait une nouvelle variable, qui va tenir notre liste des classes. Code: | Control window; EditBox editBoxUserName; EditBox editBoxConnectTo; Button buttonCreateServer; Button buttonConnect; ListBox classes; //ici
|
Au bas de la méthode OnAttach() nous prenons notre zone de liste à partir de l'interface graphique et ajoutons quelques éléments window.controls. Girl et Robot. Code: | classes = (ListBox)window.Controls["classes"]; classes.Items.Add("Girl"); classes.Items.Add("Robot");
SetInfo("", false);
}
|
À ce stade, vous pouvez compiler et exécuter votre jeu pour tester le lobby multijoueur. Il devrait y avoir une liste maintenant avec Girl et Robot. Maintenant, nous devons transférer notre classe sélectionnée (Girl ou Robot) sur le serveur. Trouver le morceau de code à l'intérieur de la méthode Connect_Click() où le client commence BegingConnect. Nous allons ajouter une nouvelle variable à l'appel BeginConnect qui enverra notre classe sélectionnez avec la connexion. Code: | string classtype = ((string)classes.SelectedItem) == null ? "Girl": (string)classes.SelectedItem; //Obtenez la classe de la liste GUI ou si aucun n'a été choisie aller avec "Girl"
if( !client.BeginConnect( connectToAddress, port, EngineVersionInformation.Version, userName, password, out error, classtype ) ) //nous avons ajouté notre classtype comme une nouvelle variable pour BeginConnect { Log.Error( error ); DisposeClient(); return; }
|
Il y aura une erreur nous disant que BeginConnect ne prend pas plusieurs variables. C'est bon, puisque nous allons le changer. Dans NetworkClient.cs changer le BeginConnect() pour accepter encore une variable "string classtype" Code: | public bool BeginConnect( string host, int port, string clientVersion, string loginName, string password, string uid, out string error, string classtype)
|
et à la fin du procédé classtype ajouter au message qui est envoyé au serveur Code: | NetOutgoingMessage message = client.CreateMessage(); message.Write( clientVersion ); message.Write( loginName ); message.Write( password ); message.Write(uid); message.Write(classtype); //ici
|
Ajoutez une nouvelle variable dans Networkclient.cs pour garder notre classtype Code: | public abstract class NetworkClient : NetworkNode { string loginName; string remoteServerName = ""; string classtype = ""; //ici
| Maintenant allez à la classe du serveur pour comprendre que faire quand nous recevons des informations. Ouvrez NetworkServer.cs et la méthode OnUpdate() Code: | //recevoir le nom de connexion et mot de passe string clientVersion = ""; string loginName = ""; string password = ""; string uid = ""; string classtype = ""; //nnouvelle variable de classe
List<string> remoteServices = new List<string>(); try { clientVersion = incomingMessage.ReadString(); loginName = incomingMessage.ReadString(); password = incomingMessage.ReadString(); uid = incomingMessage.ReadString(); classtype = incomingMessage.ReadString(); //Lisez notre sélection de classe dans message du client
|
A l'intérieur de cette même méthode le serveur crée un NetworkNode et passe loginname et uid à ce nœud. Nous ajoutons notre "classtype" au constructeur Code: | connectedNode = new ConnectedNode( this, incomingMessage.SenderConnection, loginName, uid, classtype );
|
Maintenant, nous obtenons une erreur disant que ConnectedNode ne prend pas cinq paramètres. Ajoutons le dernier. Sélectionnez le "ConnectedNode» et clic droit. Sélectionnez l'option "Aller à la définition" et vous allez directement à la méthode que nous devons modifier. Ajouter une nouvelle variable pour notre classe et Et une propriété publique appelée PlayerClass Code: | public sealed class ConnectedNode { NetworkNode owner; NetConnection connection; internal NetworkConnectionStatuses status = NetworkConnectionStatuses.Disconnected; StatisticsData statistics; string loginName; string classtype; //ici
|
Changer le constructeur pour accepter notre variable de classe Code: | internal ConnectedNode( NetworkNode owner, NetConnection connection, string loginName ,string uid, string classtype) { this.owner = owner; this.connection = connection; this.loginName = loginName; this.uid = uid; this.classtype = classtype; //ici statistics = new StatisticsData( this );
public string PlayerClass //cette nouvelle propriété ici { get { return this.classtype; } } }
|
Recompiler Networking et toutes les autres parties de la solution. Si vous obtenez des erreurs disant que BeginConnect ne prend pas x paramètres juste aller de l'avant et fixer tous ceux en ajoutant une chaîne vide "" comme dernier paramètre. Dans le chat-exemple, il n'a pas d'importance si votre classe est vide car elle n'est pas utilisé. On y est presque. Juste un changement dans GameWorld.cs et nous avons une sélection de classe fonctionnelle pour le multijoueur Dans GameWorld.cs dans la méthode ServerOrSingle_CreatePlayerUnit () modifient juste le début de la méthode comme ceci Code: | string unitTypeName = player.User.ConnectedNode.PlayerClass as string;
if (unitTypeName != null && !player.Bot) {
if( GameMap.Instance.PlayerUnitType != null ) unitTypeName = GameMap.Instance.PlayerUnitType.Name;
/*else unitTypeName = "Girl";//"Rabbit";*/
} else
unitTypeName = player.Name;
|
Et c'est tout! Recompiler et démarrer le serveur dédié (+ créer et charger une carte).Puis lancer Game.exe et connectez-vous
|
|