View Full Version: Notion de "Quand l'objet tappe"

RunUO.FR Support > comment on fait ... > Notion de "Quand l'objet tappe"


Title: Notion de "Quand l'objet tappe"


Kaervek - November 19, 2003 05:59 PM (GMT)
Je me demandais (ca m'etonnerait mais bon, on sait jamais) si il était possible d'insérer dans le script d'une arme la notion de "Si le PJ tappe avec cette arme"...

Usul - November 19, 2003 09:00 PM (GMT)
voila normallent tu rajoute sa dans ton arme(si c bien une BaseWeapon)

CODE

public virtual TimeSpan OnSwing( Mobile attacker, Mobile defender )
{

   if (attacker.Player)
    //si c un PlayerMobile qui utiliser cette arme alors attacker.Player=true
    ton code ici

  base.OnSwing( attacker, defender );
}


Kaervek - November 19, 2003 09:18 PM (GMT)
Merci :)
Mais j'ai encore un problème malheureusement :(
Voici ce que j'ai fait:

CODE
public virtual TimeSpan OnSwing( Mobile attacker, Mobile defender )
 {
 PlayerMobile player = ((PlayerMobile) attacker);
     if (player.Player)//si c un PlayerMobile qui utiliser cette arme alors attacker.Player=true
  {
   if (player.CoupPuissantACT = true)
   {
  this.MinDamage = 12 + (int)(0.024 * player.MaitriseEpee) + (int)(0.1 * player.SkillCoupPuissant);
  this.MaxDamage = 13 + (int)(0.026 * player.MaitriseEpee) + (int)(0.1 * player.SkillCoupPuissant);
  defender.Emote("*Subit un Coup Puissant*");
   }
   else if (player.CoupPuissantACT = false)
   {
  this.MinDamage = 12 + (int)(0.024 * player.MaitriseEpee);
  this.MinDamage = 13 + (int)(0.026 * player.MaitriseEpee);
   }
  }
 base.OnSwing( attacker, defender );
 }


Ca me met une erreur dans la première ligne de code en me disant:
"not all codes paths return a value"

Usul - November 19, 2003 09:26 PM (GMT)
autant pour moi :rolleyes:

cetait pas
public virtual TimeSpan OnSwing

mais sa
public override TimeSpan OnSwing

par contre y aura peut etre encore une erreur mais sa tu verra
courrage

Kaervek - November 20, 2003 04:54 AM (GMT)
Ca met tjrs la meme erreur meme avec override :(

CODE
public override TimeSpan OnSwing( Mobile attacker, Mobile defender )
 {
 PlayerMobile player = ((PlayerMobile) attacker);
 PlayerMobile victime = ((PlayerMobile) defender);
     if (player.Player)//si c un PlayerMobile qui utiliser cette arme alors attacker.Player=true
  {
   if (player.CoupPuissantACT = true)
   {
  this.MinDamage = 12 + (int)(0.024 * player.MaitriseEpee) + (int)(0.1 * player.SkillCoupPuissant);
  this.MaxDamage = 13 + (int)(0.026 * player.MaitriseEpee) + (int)(0.1 * player.SkillCoupPuissant);
  victime.Emote("*Subit un Coup Puissant*");
   }
   else if (player.CoupPuissantACT = false)
   {
  this.MinDamage = 12 + (int)(0.024 * player.MaitriseEpee);
  this.MinDamage = 13 + (int)(0.026 * player.MaitriseEpee);
   }
  }
 base.OnSwing( attacker, defender );
 }

Usul - November 20, 2003 03:38 PM (GMT)
ouaih ok c parce k il veut un return dans ta fonction
rajoute sa "return GetDelay( attacker ); " apres le "base.OnSwing(..."

CODE

public override TimeSpan OnSwing( Mobile attacker, Mobile defender )
{
  base.OnSwing( attacker, defender );
  return GetDelay( attacker );
}


je viens de la tester sa marche B)

heu pour se qui est de sa
PlayerMobile player = ((PlayerMobile) attacker);
PlayerMobile victime = ((PlayerMobile) defender);

sa risque de poser probleme si le joueur frappe un monstre
pour savoir si c un joueur test d abord
si attacker.Player et defender.Player sont a true

et aussi pour sa
if (player.CoupPuissantACT = true)
si tu mets qu'un = sa veux dire ke tu mets la variable player.CoupPuissantACT a true.

si tu veux tester si elle est a true tu doit mettre 2 = ex:(lala==true)
et comme "player.CoupPuissantACT" est une expresion boolean (vrai,faux)
tu peux directement mettre "if (player.CoupPuissantACT)"
si elle est fausse le if n a pas lieu si elle est vrai le if a lieu

tu peux aussi verifier si CoupPuissantACT est a faux comme sa
"if (!(player.CoupPuissantACT))"

et tu peux aussi remplacer "else if (player.CoupPuissantACT = false)" par else
je v te reecrire tt, sa sera plus simple mais comme sa tu as eu une petit cour de programmation C ;)

CODE

public override TimeSpan OnSwing( Mobile attacker, Mobile defender )
{
  PlayerMobile player = (attacker.Player)?(PlayerMobile)attacker : null;
  //si attacker est un joueur alors player=(PlayerMobile)attacker sinon player=null

  if (Player!=null) // si player n'est pas = a null
  {
    if (player.CoupPuissantACT) // si CoupPuissantACT=true
    {
      MinDamage = 12 + (int)(0.024 * player.MaitriseEpee) + (int)(0.1 * player.SkillCoupPuissant);
     
      MaxDamage = MinDamage +1;
      defender.Emote("*Subit un Coup Puissant*");
    }
    else // si CoupPuissantACT=false
    {
      MinDamage = 12 + (int)(0.024 * player.MaitriseEpee);
      MinDamage = MinDamage+1;
    }
  }

  base.OnSwing( attacker, defender );
  return GetDelay( attacker );
}





* Hosted for free by InvisionFree