[Prob] OnClient Enter : ne reconnait pas le MD

Répondre
Partager Rechercher
Bonjour tout le monde


Mon soucis est le suivant :

J'ai placé un script OnClientEnter ( en m'aidant des multiples posts de ce forum, car évidemment, je débute ! ) afin que chaque nouveau joueur se voit doté d'un item de persistance (indroppable).
Jusqu'ici tout se passe bien : le nouveau entre en possession du-dit objet à sa première connection. Les fois suivantes, l'item est détecté et n'est pas recréé. Parfait.

Et là, mystère : Je me connecte en MD et je me vois alors également doté de cet item de persistance...

Nouvelle tentative : Je modifie le script afin qu'à l'inverse, seul le DM se voit conféré un objet. Résultat : néant. Aucun objet créé.

Autre tentative : (!GetisPC(oPJ)) avec un floatingtext "vous êtes un DM"... Aucun message au dessus de ma tête lorsque je co en MD...

Encore un autre essai : MeltingPot des fois précédentes, cette fois ci j'insiste lourdement sur l'idendification du DM (voir code ci après), puis je vérifie s'il a l'outil DM (bidon), et le lui donne si tel n'est pas le cas.
Là je passe au PJ, et remet les lignes concernant l'item de persistance... Nada pour le DM, okay pour le PJ.

Alors voilà, je comprend pas .

Je vous met le script tel qu'il était au démarrage :


Code:
 
void main()
{
	object oPJ = GetEnteringObject();
 
	if (!GetIsPC(oPJ)) return;
 
	if(GetItemPossessedBy(oPJ, "FC_opersist")== OBJECT_INVALID)
	{
	 CreateItemOnObject("fc_opersist", oPJ);
	 CreateItemOnObject("pjemotwand", oPJ);
	}
 
}
Et puis la toute dernière version archi lourdingue après X heures d'arrachage de cheveux :

Code:
 
void main() 
{
	object oPJ = GetEnteringObject();
 
	if (!GetIsPC(oPJ))
{
 
	 if(GetIsDM(oPJ))
	 {
	 if(GetItemPossessedBy(oPJ, "mdwand") == OBJECT_INVALID)
	 {
		CreateItemOnObject("mdwand", oPJ);
	 }
 
	}
 
	return;
 
}
 
	if(GetItemPossessedBy(oPJ, "FC_opersist")== OBJECT_INVALID)
	{
	 CreateItemOnObject("fc_opersist", oPJ);
	 CreateItemOnObject("pjemotwand", oPJ);
	}
}
J'avoue qu'à la longue je ne savais plus trop ce que je faisais .

Bref, si quelqu'un pouvait éclairer ma lanterne, j'apprécierais beaucoup.
Ai je fais d'énormes erreurs dans le code ?
Ai je oublié quelque chose ? (décommenter une option quelque part par exemple ?).
Cela peut il venir du fait que pour les tests je lance le serveur ET le client sur le même PC ?

Merci par avance pour vos conseils



Altariel *apprenti quiche*
Cela devrait répondre a tes besoins. J'ai repris ton premier script avec une condition supplémentaire dans ton premier if (Si je ne m'abuse le GetIsPC renvoie TRUE meme lorsqu'il s'agit d'un DM). Ceci dit je ne pense pas que le !GetIsPC soit valable, en fait qui d'autre qu'un PJ ou un DM peut se connecter sur un module ? :

Code PHP:

void main()
{
     
object oPJ GetEnteringObject();
 
     if (!
GetIsPC(oPJ) || GetIsDM(oPJ))
         return;
 
     if(
GetItemPossessedBy(oPJ"FC_opersist")== OBJECT_INVALID)
     {
         
CreateItemOnObject("fc_opersist"oPJ);
         
CreateItemOnObject("pjemotwand"oPJ);
     }
 

Oui c'est d'une logique irréfutable
Ca doit d'ailleurs être pour ça que je n'y ai pas songé !

A la vérité j'avais bien saisit que le GetIsPC renvoyait TRUE aussi pour un DM, preuve en était la création de l'item indésirable... Mais voilà, toute débutante que je suis je n'ai pas pensé au "||" (ou) .

Je te remercie pour cet éclaircissement, qui me sera utile à l'avenir à n'en pas douter (si toutefois je parviens à m'en souvenir ^^ ) !

Le code modifié par tes soins fonctionne à merveille, je nage dans le bonheur

Encore merci : ))



Altariel *apprenti quiche*
Bah c'est en faisant des erreurs et surtout en les comprenant que l'on progresse

Bon courage pour la suite Si tu as un souci sur un script, tu devrais trouver réponse auprès des personnes qui fréquentent ce forum
En fait faut savoir que le

GetIsPC(oPC) répond TRUE si le oPC est un PJ, mais aussi un DM (une creature contrôlée par un joueur donc). C'est tout simplement pour ça que ça ne marchait pas. Il répond FALSE si l'objet oPC est une créature autre (contrôlée par l'IA), un placable, etc.

Pour filtrer les DM il faut comme l'a fait Biboule se servir de GetIsDM, qui lui meme, c'est important renvoi FALSE si c'est une créature possédée par un DM.

En fait cette fonction est construite comme ça pour que les DM puissent utiliser les objets quand ils possèdent des créatures.

Si on veux que ça détecte ça, il faut utiliser GetIsDMPossessed.
En tous cas, dans le OnClientEnter, un simple "if(GetIsDM(oPJ))" suffira, mis en début de script, à authentifier le MD.

Puis tu le fais suivre de "else if(GetIsPC(oPJ))" pour tout ce qui concerne le joueur.
D'accord, c'est noté ^^

Mon esprit est vraiment loin d'être rompu à la logique qui gouverne la "programmation". Je ne désespère pas, avec le temps et un peu de bonne volonté, je finirais bien par en cerner les contours .

Mais d'ici là, je reviendrais sans doute avec d'autre question !


Encore merci tout le monde ^^
Il suffit de partir du principe que dans OnClientEnter, seul un être physique (possédant un ordinateur) peut déclencher cet évènement.

Plus simple encore :
Code PHP:

void main()
{
    
object oPJ GetEnteringObject();

    if(
GetIsDM(oPJ)
    {
        
// Tout ce qui est relatif au MD ici.
    
}

    else
    {
        
// Tout ce qui est relatif au joueur ici.
    
}

    
// Ce qui est commun au MD et au joueur ici.

Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés