View Full Version: [Solution] Modifiez le PLAYERMOBILE.cs

RunUO.FR Support > Tutorial en Français > [Solution] Modifiez le PLAYERMOBILE.cs


Title: [Solution] Modifiez le PLAYERMOBILE.cs
Description: Permet de garder les fichiers originaux


Shariz - January 12, 2004 10:46 AM (GMT)
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.

Kaervek - January 13, 2004 04:49 AM (GMT)
Wowwwww très joli tout ca! Très bon tuto :)

Juliunus - January 13, 2004 08:17 AM (GMT)
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.

Shariz - January 13, 2004 09:45 AM (GMT)
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.

Zdravo - January 26, 2004 09:52 AM (GMT)
trsè bon ;)




Hosted for free by InvisionFree