View Full Version: un .ranger

RunUO.FR Support > Le vivier > un .ranger


Title: un .ranger
Description: une idée d'un de mes joueurs


Injall - September 3, 2004 03:44 PM (GMT)
voila une joueuse à eu une idée. La commande permettrais de cibler un objet, puis un sac, et ca rangerais tous les objets identique à celui ciblé dans ce sac.

le problème c'est que je vois pas trop comment m'y prendre, donc si vous avez une odée, elle est la bienvenue !

slade15 - September 4, 2004 09:30 AM (GMT)
je vien de faire un bout de code qui poura t'aider (j'ai pas le temp pour tout faire)

CODE
  public  Point3D i_pointA;
  public int id;
  //i_pointA : doit contenir la Location du item
  //id : doit contenir le Item_ID du item
  Map map = from.Map;
 ArrayList liste = new ArrayList();
  //definir un rectange dans le quel on prendra les item, car on vas pas ranger tout les item de la carte
  //dans le sac
  //ici on vas prendre un rectangle 10X10 avec centre le 1er item selectioné
  Rectangle2D rect = new Rectangle2D( i_pointA.X-5, i_pointA.Y-5, i_pointA.X+5, i_pointA.Y+5 );
  //suis pas sur pour les valeur du rectange
 
  IPooledEnumerable eable;
  eable = map.GetObjectsInBounds( rect );

  foreach ( object obj in eable )
  {
   if ( (obj is Item))
    liste.Add( obj );
  }
  eable.Free();
  //voila tout les item on ete copié dans liste
  for ( int i = 0; i < liste.Count; ++i )
  {
   if ( liste[i] is Item )
   {
    Item item = ((Item)liste[i]);
    //on prend item par item et on les traite  
    //Attention il a compié tout les item qui son dans le rectagle, donc fait traiter que ceux qui nous interesse
       if(item.ItemID==id)
    {
     //ici faut deplacer le item dans le sac      
    }
   }
  }    



tu doit faire un target qui faudra cliquer sur le objet que tu veux mettre dans le sac

i_pointA = objet.Location;
id = objet.ItemID;

et faire aussi le target qui permet de selectioner le sac

une fois que ca saura fait je peut t'aider pour la suite

Injall - September 6, 2004 05:20 PM (GMT)
Merci beaucoup Slade ;)
:lol: J'ai vraimment du mal a te suivre, enfin j'ai fait la commande et le 1er target pour l'item, par contre j'ai pas tout compris avec le rectangle 10X10, car il faudrais que ca range uniquement les objets présents dans le sac du joueur :D
pour le target du sac où l'on va tout ranger je suis pas certains de savoir où l'inclure pour l'instant :/

CODE
using System;
using System.Collections;
using Server;
using Server.Items;
using Server.Mobiles;

namespace Server.Scripts.Commands
{
public class Ranger

  {
    public static void Initialize()
    {
       Server.Commands.Register( "Ranger", AccessLevel.Player, new CommandEventHandler( Ranger_OnCommand ) );
    }
   
    [Usage( "Ranger" )]
    [Description( "Ranger tous les mêmes objets dans le sac sélectioné." )]
    public static void Ranger_OnCommand( CommandEventArgs e )
    {
       e.Mobile.SendMessage( "Que voulez vous ranger ?" );
  e.Mobile.Target = new RangerItemTarget();
    }
  }
  public class RangerItemTarget : Target
{
 public RangerItemTarget() : base( 10, false, TargetFlags.None)
 {
 }

 protected override void OnTarget( Mobile from, object targeted )
 {  }
}

slade15 - September 6, 2004 10:38 PM (GMT)
ha ok , comme tu a pas precisé j'avais pensé a des objet que serai a terrer

slade15 - September 6, 2004 11:24 PM (GMT)
voila ton scripte , testé ca marche (par contre j'ai pas testé les cas compliqué pour voir si allais planter ) , ici c'est une version simple sans protection anti bug

CODE

using System;
using System.Collections;
using Server;
using Server.Items;
using Server.Mobiles;
using Server.Targeting;

namespace Server.Scripts.Commands
{
public class Ranger
 {  
   public static void Initialize()
   {
      Server.Commands.Register( "Ranger", AccessLevel.Player, new CommandEventHandler( Ranger_OnCommand ) );
   }
 
   [Usage( "Ranger" )]
   [Description( "Ranger tous les mêmes objets dans le sac sélectioné." )]
   public static void Ranger_OnCommand( CommandEventArgs e )
   {
      e.Mobile.SendMessage( "Que voulez vous ranger ?" );
      e.Mobile.Target = new RangerItemTarget();
   }
 }
 public class RangerItemTarget : Target
{


public RangerItemTarget() : base( 10, false, TargetFlags.None)
{
}

protected override void OnTarget( Mobile from, object targeted )
{  
   PlayerMobile player = (PlayerMobile) from;
 if(targeted is Item)
 {
  Item item = (Item) targeted;
  player.SendMessage("Ou voulez vous les ranger ? ");
  player.Target = new RangerSacTarget(item);  
 }
 else
 {
  player.SendMessage("Vous n'avez pas selectioné un Item");
 }
 
 
}


}

 public class RangerSacTarget : Target
{
 private Item i_itemSelectione;  

public RangerSacTarget(Item i) : base( 10, false, TargetFlags.None)
{
 i_itemSelectione =  i;
}

protected override void OnTarget( Mobile from, object targeted )
{  
   PlayerMobile player = (PlayerMobile) from;
 if(targeted is Container)
 {
  Container container = (Container) targeted;
//range
     Container sacados = player.Backpack;
   ArrayList listsac = new ArrayList( sacados.Items );
   for (int i=0;i<listsac.Count;i++)
   {
     Item item =(Item) listsac[i];
     if(item.ItemID==i_itemSelectione.ItemID)
     {
      container.AddItem(item);
     }
   }
     
   
 }
 else
 {
  player.SendMessage("Vous n'avez pas selectioné un Container");
 }
 
 
}


}





}

Injall - September 9, 2004 05:41 PM (GMT)
merci slade, c génial ;)




Hosted for free by InvisionFree