View Full Version: TEster si un mobile possède un objet de tel type

RunUO.FR Support > comment on fait ... > TEster si un mobile possède un objet de tel type


Title: TEster si un mobile possède un objet de tel type
Description: un restest quoi! question de C# ?


Hughlander - September 22, 2004 07:28 PM (GMT)
Voila tout est dans le titre je voudrais connaitre une fonction ou un moyen aussi pratique qu'une fonction (pour éviter de tapper sans cesse le meme code) du même style quele restest de sphere c'est à dire qui renvoie vrai quand un mobile possède (sur lui ou dans son sac) un item d'un certain type on peu faire comme ceci :

CODE
ArrayList items = new ArrayList(this.Items);
foreach (Item i in items)
{
if ( i is LeTypeQuOnSouhaite )
 // on l'a trouvé
}


Je vois pas comment faire parce qu'il faudrait pouvoir passer un type en paramètre d'une fonction peut être est ce plus un problème de C#

slade15 - September 22, 2004 10:35 PM (GMT)
oui c'est du c# pure , tu a besoin d'une methone ? elle n'existe pas ? aucune prob , tu la cree la ou tu veux

dison qu'ici on vas le mettre dans PlayerMobile

CODE
//verifie si le joueur possede le item passé par parametre
public bool VerifItem(Item itemRecherche)
{
bool trouve = false;

ArrayList items = new ArrayList(this.Items);
foreach (Item i in items)
{
  if ( i is itemRecherche)
  trouve = true;
}

return trouve;
}



exemple d'utilisation :
CODE
PalyerMobile player = (PlayerMobile) from;
if(player.VerifItem(EpeeSacree))
{
 player.SendMessage("tu possede une eppe sacrée");
}


voila mais j'ai pas tresté

remarque : je me suis basé sur ton bout de code sans savoir s'il est bon ou pas

Hughlander - September 22, 2004 10:59 PM (GMT)
C'est pas ce que j'ai demandé c'est une fonction qui fonctionne pour un objet de n'importe quelle type (objet au sens c#) afin d'éviter d'en créer une pour chaque Item possible et éviter de la redondance de code.
On va pas se rataper 100 fois le même code ou réinventer une roue qui existe déjà non ?
Pourquoi avoir un vrai langage, un langage puissant si c'est pour pisser 100 litres de code qui n'en vaut pas 1 ?

Belladonne - September 23, 2004 05:49 AM (GMT)
je comprends pas ce que tu veux la.... tu parles d'objet au sens général ... mais tu dit que c'est pour la classe Item...
Peut etre en donnant un exemple de ce qui n'est pas inclus dans la fonction donnée par Slade on verrait mieux.

Dihel - September 23, 2004 07:30 AM (GMT)
il n'y a pas une fonction pour conaitre le type d'un objet ... ?
j'en suis pas sur mais il me semble que si ...

je pence qu'il parle d'objet->instantiation d'une class

donc pour savoir de quelle classe est issu tel objet, il me samble que c'est : monobjet.GetType()


Hughlander - September 23, 2004 11:02 AM (GMT)
Je voudrai une fonction avec en paramètre un type (instantiation de la class Item et ses dérivé) au lieu d'un objet
CODE
bool lafonction(typequonveuxtester)

Si on mais un objet de la class Item dans le prototype de la fonction l'objet obtenue sera de la class Item et un item.GetType() renverra Item a tout les coups et ca foire ca renvoie soit vrai soit faux a tout les coups

slade15 - September 23, 2004 11:56 AM (GMT)
je croi avoir compris ce que tu veux mais je comprend pas pq tu dit que ce que j'ai fait ne corespond pas a ce que tu veux

CODE
bool lafonction(typequonveuxtester)


tres resemblant non ?

CODE
player.VerifItem(EpeeSacree)


et ca te return un bool

si c'est le player. qui te gene il y a moyen de changer ca


edit: je pense avoir compris la difference, c'est que tu veux passer c'est un type et pas un objet de ce type, c'est ca?

remarque : si vous regardé dans les menu crafting il y a Typeof() qui returne le type d'une item

Didi - September 23, 2004 12:25 PM (GMT)
sinon, pour fonctionner avec les type, il y a

CODE
typeof( type );


et

CODE
item.GetType()


qui peuvent servir, suffit de voir ce que tu souhaite en faire.


La fonction que slade t'a proposer semble ce que tu demande.

Suffit de faire: player.VerifItem(ItemAVerifier)

Hughlander - September 23, 2004 04:18 PM (GMT)
Le mot prototype signifierait il quelque chose pour vous ou c'est de l'hébreux ?

Kaervek - September 23, 2004 05:14 PM (GMT)
Hmmm Didi et Slade, ca fait un moment maintenant que le créateur de ce topic me semble HYPER aimable non? Ou je suis parano? A votre place, sincèrement, je le laisserais dans sa *****. <_<
En tout cas, il peut rêver pour que je lui dévoile quoi que ce soit!

Belladonne - September 23, 2004 05:17 PM (GMT)
Je crois en effet qu'on parle pas la meme langue mais pas la peine de s'exiciter.


La fonction que t'as proposée Slade teste si il y a l'objet (type a placer en parametres ) sur le mobile du joueur c'est exactement le descriptif du sujet.

Tout objet que tu peux mettre sur mobile (playermobile on parles dans l'exemple donnés par Slade ) seras de la classe Item, tu testes donc si il y a l'objet de la sous classe désirée ( épée , anneau , fringues ... etc ...) c'est le parametre de la fonction que Slade propose.

Si tu mets item comme parametre a la fonction elle te renvois vrai si le mobile (équivalent au joueur si c'est trop compliquer a comprendre ainsi) possede un objet quelqu'il soit faux si il est a poil et sac vide ( en supposant que this.Items verifie aussi les items du sac )

Cette fonction te permets de tester la présence de n'importe quel Item présent sur le mobile c'est a dire n'importe quelle sous classe. Je vois pas ce que tu peux chercher d'autre sur un mobile.... a moins que tu veuilles tester aussi.

sinon je te conseilles fortement d'aller par pour réussir a communiquer avec ceux qui essayes de t'aider.

Dihel - September 23, 2004 06:19 PM (GMT)
api... methode Gettype()

le parametre d'entrée sera alors du type Type

CODE
bool dumemetype(Type arg)
{
   bool retour = false;
   if(this.Gettype() == arg)
       retour = true;
   return retour;
}


mon_objtest.dumemetype(objderef.Gettype());


ca te dira si "mon_objtest" est du meme type que "objderef".
mais je me demande si y a pas plus simple d'autant que je ne suis pas sur du code.

slade15 - September 23, 2004 10:58 PM (GMT)
il y a aussi une autre methode vu que
ArrayList items = new ArrayList(this.Items);

donc items est un ArrayList et les ArrayList possede une fonction Contains

exemple

items.Contains(itemAChercher)

mais ca ne pourai pas tres bien marcher car ici il cherche des item identique a 100%



mais ici avec tout ce qu'on a dit il y a de quoi faire ce qu'il veux de 10ene de facon

Didi - September 24, 2004 12:53 AM (GMT)
QUOTE (Kaervek @ Sep 23 2004, 06:14 PM)
Hmmm Didi et Slade, ca fait un moment maintenant que le créateur de ce topic me semble HYPER aimable non? Ou je suis parano? A votre place, sincèrement, je le laisserais dans sa *****. <_<
En tout cas, il peut rêver pour que je lui dévoile quoi que ce soit!

Si, tu vire parano :P

Moi je voit juste quelqu'un qui a pas compris la fonction et a donc penser qu'on avais mal compris :P

Allez bon, on va pas se facher pour si peu :P
Ce qui m'empeche de répondre moi c'est les topic avec "URGENT" en grosse lettre rouge comem titre :D

Kaervek - September 24, 2004 04:08 AM (GMT)
QUOTE
Pourquoi avoir un vrai langage, un langage puissant si c'est pour pisser 100 litres de code qui n'en vaut pas 1 ?
Le mot prototype signifierait il quelque chose pour vous ou c'est de l'hébreux ?


Enfin, chacun sa manière de prendre les choses... Mais je n'aime pas ces formes de sarcasmes pour ma part.

Injall - September 24, 2004 06:49 PM (GMT)
:D ouep, je sais bien que c'est carrément pas le but de ce forum, mais je suis plutot d acc avec Kae, vu comme le monsieur répond moi je l'aurais envoyé boulé depuis longtemps, il faut tout de même garder à l'esprit que les autres membres répondent pour nous aider, et qu'ils ne nous doivent rien...

*savoir-vivre* :D

slade15 - September 24, 2004 10:28 PM (GMT)
vous avez raison et je suis tout a fait d'accord avec vous , un minimun de respet pour ceux qui essaye d'aider

Hughlander - September 27, 2004 10:29 AM (GMT)
Oui la j'ai dépassé les limites
m'en veuillez pas pour le "pisser du code" c'est une expression maison en général utilisé par autodérision pour parler de ma mani a balancer une tonne de code sans réfléchir trop avant.
pour le reste j'avais l'impression de vraiment pas être compris mais c'est vrai ca n'excuse pas mon comportement.
la solution du problème que je cherche je crosi avoir vu ce qu'il faut dans le post sur polymorph avec les stats.




Hosted for free by InvisionFree