Pour personnaliser son shard, il faut obligatoirement modifier le fichier PlayerMobile.cs, mais lorsque l'on passe à une autre version l'admin doit recherché toutes ses anciennes modifications et les replacer dans le nouveau fichier. Ce travail peut devenir long et ennuyeux, surtout lorsque l'on a fait beaucoups de modifications.
Pensez aussi aux nombres de fichiers originales que vous avez modifier et dans lesquels vous devrez revenir lorsque vous changerez de version.
Pour remedier à cela, il existe plusieurs solutions.
La solutions de l'héritage (lien de base) :
(avant) CharacterCreation --> PlayerMobile
(après) CharacterCreation --> Personnage --> PlayerMobile
Lors de la création d'un personnage le jeu lance le script CharacterCreation qui se trouve dans le fichiers /Misc/CharacterCreation.cs. Je ne vais pas expliquer l'utilité de ce script, mais il faut savoir que c'est là que le lien est fait avec le script PlayerMobile qui se trouve dans le fichier /Mobiles/PlayerMobile.cs. Donc nous avons accès au lien de base qui relie le script qui nous interresse. (Pour d'autres scripts, il faut savoir que certain lien n'apparraisse pas toujours dans les fichiers car ils sont hardcoder(ils sont innaccessible).
Le script CharacterCreation fait le lien avec PlayerMobile grace à cette ligne :
| CODE |
private static Mobile CreateMobile( Account a ) { for ( int i = 0; i < 5; ++i ) if ( a[i] == null ) return (a[i] = new PlayerMobile()); //C'est ici que le lien est fait return null; }
|
Il nous suffit donc de changer cette ligne et de créer un nouveau script qu'on intercalera entre CharacterCreation et PlayerMobile.
Nous nommerons le nouveau script et le nouveau lien Personnage
| CODE |
private static Mobile CreateMobile( Account a ) { for ( int i = 0; i < 5; ++i ) if ( a[i] == null ) return (a[i] = new Personnage()); //Changer le nom du lien par celui du nouveau script. return null; }
|
Puis nous créerons le script
| CODE |
using System; using System.Collections;
using Server; using Server.Mobiles; using Server.Items;
namespace Server.Mobiles { public class Personnage : PlayerMobile //C'est ici que le lien est fait entre ce script et PlayerMobile {
public Personnage() { }
public Personnage( Serial serial ) : base( ) { }
public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt();
switch ( version ) { case 0: { } }
}
public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version }
}
|
Voilà un fichier tous neuf dans lequel vous pouvez faire autant de modifications que vous le voulez sans devoir toucher au fichier PlayerMobile. A chaque changement de version, vous placer votre fichier, et vous allez modifier le lien dans CharactereCreation.cs. Lorsque vous ecrivez de nouvelles quête(ou autre), vous devrez faire le lien avec le nouveau nom de script (ici Personnage) et non plus avec PlayerMobile.
La solutions du script parent :
(avant) PlayerMobile --> Mobile
(après) PlayerMobile --> Personnage --> Mobile
Une autre solution pour modifiez le script PlayerMobile c'est d'intercaler un script, mais cette fois vers le haut. Cette solution est préférable lorsque l'on a pas acces au lien de base ou que ceux-ci sont trops nombreux.
Pour cela,nous prenons le lien qui existe entre PlayerMobile et son script parent Mobile. C'est à cette endroit que nous allons intercaler le nouveau script.
Changez la ligne pour lui donne un nouveau nom.
| CODE |
public class PlayerMobile : Mobile // Le lien entre PlayerMobile et Mobile
|
nouvelle ligne.
| CODE |
public class PlayerMobile : Personnage
|
et créer un nouveau script Personnage dans lequel on fera un lien vers Mobile.
| CODE |
using System; using System.Collections;
using Server; using Server.Mobiles; using Server.Items;
namespace Server.Mobiles { public class Personnage : Mobile //C'est ici que le lien est fait entre ce script et Mobile {
public Personnage() { }
public Personnage( Serial serial ) : base( ) { }
public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt();
switch ( version ) { case 0: { } }
}
public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version }
}
|
Avec cette solution vous n'êtes plus obliger de faire un lien vers Personnage, utiliser le script PlayerMobile normalement.
Cette solution est utile pour les scripts tel que les armes, armures et objets divers, ainsi que pour affecter uniquement un type spécifique de monstre déjà existant.
Signé : Shariz l'ami des plus petits.
Wowwwww très joli tout ca! Très bon tuto :)
La première solution est selon moi celle à utiliser (à part que j'aurais appelé ton "lien de base" l'héritage :P)
Par contre la deuxième est dangereuse : Personnage se retrouvant parent de PlayerMobile, il ne POURRA PAS accéder à ses propriétés (sauf si tu cast dans chaque script, mais là c'est crade). Donc si tu te dis d'un coup dans un script du fichier personnage que tu aimerais, par exemple à la création, donner accès au soufflage du verre, te voila coincé, à moins de faire un transtypage.
J'ai modifié le post pour que ce soit un peu plus clair. J'avais oublier de dire qu'avec la deuxième solution il ne fallait pas modifier le fichier charactereCreation.cs. Sinon, pour le PlayerMobile, je conseille aussi la premiere méthode. (c'est celle que j'utilise). Mais la deuxième solution est plus utile pour les objets et autres. Perso je l'utilise pour modifier les armes & armures, comme ça je peus cibler les armes ou les types d'armes que je veus.
Signé : Shariz l'ami des plus petits.
PS : Salut Kaervek, ça fait longtemps. J'ai été voir le forum de ton shard, ça à l'air pas mal tout ça. Si tu as besoin d'aide pour un script ou l'autre fait moi signe. Sinon, je peus te faire un site de base, mais faudra trouver un WebMaster.