Commande

Commande

Post by Théodore de Lagarde, AdM - August 22, 2008 at 8:18 PM

Bon après 3 jours d'essai (à à peu près 2 heures par jours), la commande que je voulais marche pas pantoute et je suis tanné
Le but c'était que quand je tappes [tournage ça fait qu'un bool devienne true et que ça me fasse cibler quelque chose. Si je sélectionne un des objets qui faut, ça prend le bool de la commande et le transfère à l'objet. Donc il détecterait ça et là ça ferait flipper le lit.

Donc en gros, ça me permettrait de faire en sorte que les gros items commes les lits, soient flippable avec une commande à la place de sur le double-clic. Ce serait bien mieux, et ça libèrerait le double-clic pour autre chose.

Ça me permettrait de faire en sorte que le craftage de chose comme cercueil possible: on le flipperait par la commande, et on l'ouvrirait en double-cliquant.

Donc le seul problème c'est que je sais plus quoi faire pour la commande. Si quelqu'un sait quelque chose qui m'aiderais et que ça lui tente de m'aider, ce serait très apprécié. Ou si vus connaissez une façon plus simple de le faire.

le problème c'est surtout le transfère de bool. j'ai cette erreur là et je sais pas pantoute ce que ça veut dire: " Gnangnangan est inaccessible en raison de son niveau de protection"

même en retirant le protected pour public ça change rien.

alors... Merci d'avance!


Post by Coordinateur Apoc - August 22, 2008 at 9:20 PM

Il y a certaines variables qui sont protégées dans le CORE et qu'on ne peut pas modifier directement. Il faut passer par une autre variable ou une autre facon.

Quelle variable te fais ce problème?


Post by Théodore de Lagarde, AdM - August 22, 2008 at 10:09 PM

Je me suis basé sur Dupe pour faira ma commande.

La variable (le bool) que j'essaye de faire transféré, je l'ai ajouté. Elle existait pas avant.

            public virtual bool m_tournage { get { return true; }   

Je dois avoué que je sais pas trop qu'est-ce que le "virtual" veut dire, mais ça en prend un on dirait.

après ça, j'essaye de faire en sorte que dans le script du petit lit, il prenne le valeur du bool, avec ça:

        public virtual bool tournage { get { return TournageCommandHandlers.m_tournage; } }  

et une fois que je sélectionne l'objet en question :

    public void OnTarget(Mobile from)  
    {  
        if ( tournage == true)  
        {  
            from.SendMessage("Test pour voir si ça marche");  
        }  
    }

Cette dernière partie fait partie du fichier du petit lit que j'ai ajouté. Je sais pas si le "OnTarget" est correcte.

Merci de ton aide Apoc. Un jour ça va marcher!


Post by Coordinateur Apoc - August 22, 2008 at 10:30 PM

J'avais eu ton problème mais j'arrives plus à me souvenir quand et pourquoi.
Je te reviens dès que possible.


Post by Théodore de Lagarde, AdM - August 22, 2008 at 10:40 PM

Ho! D'accord! Merci beaucoup!

parce que vraiment, là je comprend pas. J'ai beau rechercher sur Internet, c'est du chinois.


Post by Théodore de Lagarde, AdM - August 23, 2008 at 3:05 AM

Voici les 2 scripts dont j'essaye de faire transférer le bool. J'ai essayer ben des affaires, alors je sais plus quoi faire:

La commande:

using System;
using Server;
using System.Reflection;
using Server.Targeting;

namespace Server.Items
{ \tpublic class TournageCommandHandlers
\t{

\t\tpublic static void Initialize()
\t\t{
\t\t\tServer.Commands.Register( "Tournage", AccessLevel.Player, new CommandEventHandler( Tournage_OnCommand ) );
\t\t}

\t\t[Usage( "Tournage" )]
\t\t[Description( "Tourne un addon." )]
\t\tpublic static void Tournage_OnCommand( CommandEventArgs e )
\t\t{
\t\t\te.Mobile.Target = new TournageTarget();
\t\t}

\t\tpublic class TournageTarget : Target
\t\t{

\t\t\tpublic TournageTarget() : base( -1, false, TargetFlags.None )
\t\t\t{
\t\t\t}

        public bool m_tournage = true;

\t\t\tprotected override void OnTarget( Mobile from, object targeted )
\t\t\t{
\t\t\t\tif ( targeted is AddonComponent2 )
\t\t\t\t{
\t\t\t\t\tAddonComponent2 addoncomponent2 = (AddonComponent2)targeted;
} }
} }
} }

Un Addon pour l'essayer, celui dont je suis supposé recevoir la variable:

using System;
using System.Collections;
using Server;
using Server.Network;

namespace Server.Items
{ public class SmallBedSouthAddon2 : BaseAddon2
{
AddonComponent2 ac;
AddonComponent2 ac2;

    public bool tournage { get { return TournageCommandHandlers.TournageTarget.m_tournage; } set { m_tournage = value; } }

    //public virtual bool tournage { get { return TournageCommandHandlers.TournageTarget.m_tournage; } }

    [Constructable]  
    public SmallBedSouthAddon2()  
    {

        AddonComponent2 ac;  
        ac = new AddonComponent2(0xa63);  
        ac.Movable = true;  
        ac.Name = "Petit lit";  
        AddComponent2(ac, 0, 0, 0);


        AddonComponent2 ac2;  
        ac2 = new AddonComponent2(0xA5C);  
        ac2.Movable = true;  
        ac2.Name = "Petit lit";  
        AddComponent2(ac2, 0, 1, 0);

    }

    public void OnTarget(Mobile from)  
    {  
        if ( tournage == true)  
        {  
            from.SendMessage("vous êtes trop loin pour tourner le lit");  
           // tournage = false;  
        }  
    }  
    public override void OnDoubleClick(Mobile from)  
    {

        if (!from.InRange(GetWorldLocation(), 2))  
        {  
            from.SendMessage("vous êtes trop loin pour tourner le lit");  
        }  
        else  
        {  
            from.SendMessage("Vous tournez le lit");  
            Item item = new SmallBedEastAddon2();  
            item.MoveToWorld(this.Location, this.Map);  
            this.Delete();

        }  
    }

    public SmallBedSouthAddon2(Serial serial)  
        : base(serial)  
    {  
    }

    public override void Serialize(GenericWriter writer)  
    {  
        base.Serialize(writer);

        writer.Write((int)0); // version  
    }

    public override void Deserialize(GenericReader reader)  
    {  
        base.Deserialize(reader);

        int version = reader.ReadInt();  
    }  
}  

}

Et ça marche pas

En passant, personne va pouvoir l'essayer chez lui, vu que y'a juste moi qui a mes Addon2. Va me falloir vos avis ^^.


Post by Myrddin Emrys, CP - August 23, 2008 at 4:02 AM

bha, pourquoi tu reprends pas ton script qui marchait simplement avec un double click?

tu fais juste qu'au lieux de flipper tout de suite le double click fasse apparaitre un écran qui dit "Voulez vous oui ou non flipper cet addon" avec deux boutons le oui qui fait le flip et le non qui fais juste fermer l'écran


Post by Théodore de Lagarde, AdM - August 23, 2008 at 4:12 AM

et tu sais comment faire cette écran là toi? Si oui ça ferait l'affaire.

En plus ça me permettrait d'ajouter un piton "ouvrir" pour les cercueil que je veux ajouter.

Je crois que si Kertan me dit comment faire, c'est ce que je vais faire.

À moins que je ne réussisse à faire marcher la commande, ce qui serait encore mieux.


Post by Myrddin Emrys, CP - August 23, 2008 at 4:14 AM

je pourrais de la faire si tu veux je te fais ça a soir et je te l'envoie


Post by Théodore de Lagarde, AdM - August 23, 2008 at 4:15 AM

non

fais moi juste me le montrer sinon j'apprendrai pas.


Post by Myrddin Emrys, CP - August 23, 2008 at 4:20 AM

bha pour le gumps, prend celui de ressurect et fait juste changer le texte


Post by Théodore de Lagarde, AdM - August 23, 2008 at 4:24 AM

tu parle du menu du genre celui des chevaux ou celui des croix?

J'y avais déjà pensé, mais je ne pense pas que c'est faisable. J'ai vu quelque part sur Internet que on pouvait pas mettre des mots "custom" qui sont dans le menu.

À moins que je me trompe...


Post by Myrddin Emrys, CP - August 23, 2008 at 4:27 AM

tu te trompe parce que ça se change facilement (je l'ai fait pour un script)

par exemple

AddPage( 1 );
\t\t\t
\t\t\tAddHtml( 260, 234, 300, 140, ((Mobile)m_Killers[m_Idx]).Name, false, false ); // Player's Name
\t\t\tAddHtmlLocalized( 260, 254, 300, 140, 1049066, false, false ); // Would you like to report...

\t\t\tAddButton( 260, 300, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 );
\t\t\tAddHtmlLocalized( 300, 300, 300, 50, 1046362, false, false ); // Yes
\t\t\t \t
\t\t\tAddButton( 360, 300, 0xFA5, 0xFA7, 2, GumpButtonType.Reply, 0 );
\t\t\tAddHtmlLocalized( 400, 300, 300, 50, 1046363, false, false ); //No

tu le transforme en:

AddPage( 1 );
\t\t\t
\t\t\t
\t\t\tAddHtmlLocalized( 260, 254, 300, 140, "Voulez vous vraiment tourner cet addon?", false, false );

\t\t\tAddButton( 260, 300, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 );
\t\t\tAddHtmlLocalized( 300, 300, 300, 50, "Oui", false, false );
\t\t\t \t
\t\t\tAddButton( 360, 300, 0xFA5, 0xFA7, 2, GumpButtonType.Reply, 0 );
\t\t\tAddHtmlLocalized( 400, 300, 300, 50, "Non", false, false );

ça devrais marcher


Post by Théodore de Lagarde, AdM - August 23, 2008 at 4:30 AM

Missive Pantoute! c'est un exemple!

Tu me copie maintenant!
J'ai rien compris à ton charabia. C'est quoi tous ces chiffres? et les false, false,

et comment je fais pour que ça agisse quand c'est "oui"?

et j'ajoute ça où...? au OnDoubleClick?


Post by Myrddin Emrys, CP - August 23, 2008 at 4:36 AM

1 les chiffres c'est la position du boutons et son id, le dernier chiffre c'est le numero du bouton (voir plus bas)

2 tu nomme le gump "flipgump" et du mets dans ton script on double clik open "flipgump" (enfin tu comprends)

  1. ça il faut que tu le mets directement dans le script du gump

4 pour faire que ça fait ça sur en pesant sur oui

tu rajoute en bas une phrases du genre

public override void onresponse ()
[ if info.ButtonID == 1 && info.Switches.Length > 0 ) // le un c'est le numéro du bouton

et içi tu copie ton ancienne commande pour flipper

et ensuite tu fait la même chose pour le bouton deux mais au lieux de mettre le script de flip tu fait fermer le gump.


Post by Théodore de Lagarde, AdM - August 23, 2008 at 4:42 AM

  1. D'accord, ça va.

  2. Dans le script de chaque item ou dans un autre à part? (je pense que ce serait mieux dans chaque item, pour ceux qui ont un menu différent)

  3. quel script de gump?

  4. La réponse est dans le fichier de l'objet à flipper, ou dans le script du menu (à moins que ce soit déjà dans le même "class" déjà en partant).

ça devrait aller pour la commande "ouvrir" si je peux faire marcher le flippage. C'est le même principe.

Désolé d'avoir l'air aussi noob, mais ça c'est quelque chose que je sais rien pantoute.

Ça va mieux aller quand vous allez voir la batch de meubles


Post by Myrddin Emrys, CP - August 23, 2008 at 4:46 AM

  1. rien à ajouter

2 dans celui de chaque items ou à la limite de celui de addons 2

3 le script du gump de flip (celui que je t'ai montrer en gros)

  1. le trucs que je t'ai expliquer c'est à ajotuer à la fin du script du menus

Post by Théodore de Lagarde, AdM - August 23, 2008 at 4:50 AM

pour le script de gump, j'ai pas de script de gump. Oui je sais, celui que tu m'as montrer, mais je dois le mettre à la suite d'un script de mnu ou simplement dans un fichier à part et que je sais pas où mettre?

Tu peux me dire sur quoi tu t'es basé pour me faire cet exemple? Ça aiderais beaucoup.


Post by Myrddin Emrys, CP - August 23, 2008 at 4:53 AM

  1. Un fichier différent

  2. "ReportMurdererGump"


Post by Théodore de Lagarde, AdM - August 23, 2008 at 4:58 AM

Merci beaucoup, je vais essayer tout ça bientôt. Tu m'as beaucoup aider.

P.S. Tu as essayer tout ça? Ou c'est juste une idée, supposition.


Post by Myrddin Emrys, CP - August 23, 2008 at 5:04 AM

pour essayer tout ça faudrait que je me bidouille un script et ça me tente pas, mais bon ça devrais marcher


Post by Théodore de Lagarde, AdM - August 23, 2008 at 5:06 AM

je vais le faire demain, c'ets pas grave. Merci beaucoup Kertan. Je t'en redonne des nouvelles.


Post by Théodore de Lagarde, AdM - August 23, 2008 at 4:05 PM

J'ai fais ton affaire et ça marche pas plu. Je reviens au même problème parce que j'ai pas le choix de faire le OnResponse dans le fichier du gump. Pour chaque objet, la méthode pour flipper l'objet est propre à chaque objet, alors j'ai pas le choix de laisser ça de même. Mais il faut que je transfère un bool pour savoir si je clique sur oui ou non. Je dois encore essayer de transféré un bool...

à moin que tu connaisse une autre méthode?


Post by Myrddin Emrys, CP - August 23, 2008 at 6:37 PM

si j'ai bien compris le problème c'est que tu delete l'objet et que t'en mets un autre?

tu peux toujours essayer de mettre un if

la en langage simple:

if item id = 1345
add item id 1346

else if itemid = 2355
add item id 1346

et à la fin sans if ou else if, un trucs qui dit que ça delete l'item


Post by Théodore de Lagarde, AdM - August 23, 2008 at 8:22 PM

non, si je fais ça, je vais devoir le faire pour chaque objet. ET il n'y a pas juste un item Id. Regarde à quoi ça ressemble pour un seul objet "flippable" (avec le deed):

Il manque juste les lignes du début et quelques affaires comme ça {

public class LargeBedSouthAddon2 : BaseAddon2  
{  
    AddonComponent2 ac;  
    AddonComponent2 ac2;  
    AddonComponent2 ac3;  
    AddonComponent2 ac4;

    [Constructable]  
    public LargeBedSouthAddon2()  
    {  
        AddonComponent2 ac;  
        ac = new AddonComponent2(0xA83);  
        ac.Movable = true;  
        ac.Name = "Grand lit";  
        AddComponent2(ac, 0, 0, 0);

        AddonComponent2 ac2;  
        ac2 = new AddonComponent2(0xA7F);  
        ac2.Movable = true;  
        ac2.Name = "Grand lit";  
        AddComponent2(ac2, 0, 1, 0);

        AddonComponent2 ac3;  
        ac3 = new AddonComponent2(0xA82);  
        ac3.Movable = true;  
        ac3.Name = "Grand lit";  
        AddComponent2(ac3, 1, 0, 0);

        AddonComponent2 ac4;  
        ac4 = new AddonComponent2(0xA7E);  
        ac4.Movable = true;  
        ac4.Name = "Grand lit";  
        AddComponent2(ac4, 1, 1, 0);  
    }

    public override void OnDoubleClick(Mobile from)  
    {

        if (!from.InRange(GetWorldLocation(), 2))  
        {  
            from.SendMessage("vous êtes trop loin pour tourner le lit");  
        }  
        else  
        {  
            from.SendMessage("Vous tournez le lit");  
            Item item = new LargeBedEastAddon2();  
            item.MoveToWorld(this.Location, this.Map);  
            this.Delete();

        }  
    }

    public LargeBedSouthAddon2(Serial serial)  
        : base(serial)  
    {  
    }

    public override void Serialize(GenericWriter writer)  
    {  
        base.Serialize(writer);

        writer.Write((int)0); // version  
    }

    public override void Deserialize(GenericReader reader)  
    {  
        base.Deserialize(reader);

        int version = reader.ReadInt();  
    }  
}

public class LargeBedDeed : BaseAddonDeed2  
{  
    public override BaseAddon2 Addon2 { get { return new LargeBedSouthAddon2(); } }  
    public override int LabelNumber { get { return 1044323; } } // large bed (south)

    [Constructable]  
    public LargeBedDeed()  
    {  
        Name = "Grand lit";  
    }

    public LargeBedDeed(Serial serial)  
        : base(serial)  
    {  
    }

    public override void Serialize(GenericWriter writer)  
    {  
        base.Serialize(writer);

        writer.Write((int)0); // version  
    }

    public override void Deserialize(GenericReader reader)  
    {  
        base.Deserialize(reader);

        int version = reader.ReadInt();  
    }  
}

public class LargeBedEastAddon2 : BaseAddon2  
{  
    AddonComponent2 ac;  
    AddonComponent2 ac2;  
    AddonComponent2 ac3;  
    AddonComponent2 ac4;

    [Constructable]  
    public LargeBedEastAddon2()  
    {  
        AddonComponent2 ac;  
        ac = new AddonComponent2(0xA7D);  
        ac.Movable = true;  
        ac.Name = "Grand lit";  
        AddComponent2(ac, 0, 0, 0);

        AddonComponent2 ac2;  
        ac2 = new AddonComponent2(0xA7C);  
        ac2.Movable = true;  
        ac2.Name = "Grand lit";  
        AddComponent2(ac2, 0, 1, 0);

        AddonComponent2 ac3;  
        ac3 = new AddonComponent2(0xA79);  
        ac3.Movable = true;  
        ac3.Name = "Grand lit";  
        AddComponent2(ac3, 1, 0, 0);

        AddonComponent2 ac4;  
        ac4 = new AddonComponent2(0xA78);  
        ac4.Movable = true;  
        ac4.Name = "Grand lit";  
        AddComponent2(ac4, 1, 1, 0);


    }

    public override void OnDoubleClick(Mobile from)  
    {

        if (!from.InRange(GetWorldLocation(), 2))  
        {  
            from.SendMessage("vous êtes trop loin pour tourner le lit");  
        }  
        else  
        {  
            from.SendMessage("Vous tournez le lit");  
            Item item = new LargeBedSouthAddon2();  
            item.MoveToWorld(this.Location, this.Map);  
            this.Delete();

        }  
    }

    public LargeBedEastAddon2(Serial serial)  
        : base(serial)  
    {  
    }

    public override void Serialize(GenericWriter writer)  
    {  
        base.Serialize(writer);

        writer.Write((int)0); // version  
    }

    public override void Deserialize(GenericReader reader)  
    {  
        base.Deserialize(reader);

        int version = reader.ReadInt();  
    }  
}

Post by Coordinateur Apoc - August 23, 2008 at 9:20 PM

Bon j'ai bien regardé les script au début et le problème vient de la facon dont tu utilise la commande.

Tu utilise une variable avec la commande et tu essais de la lire avec l'objet. Il faudrait que cette commande modifie directement une variable sur ton objet et ensuite ton objet utilise cette variable sans utiliser la commande.


Post by Théodore de Lagarde, AdM - August 23, 2008 at 10:40 PM

Merci, ça devrait m'aider. J'avais jamais songer à faire le contraire. Je vais l'essayer et je redonne des nouvelles.


Post by Théodore de Lagarde, AdM - August 24, 2008 at 12:28 AM

Bon j'ai réussi à faire en sorte que l'objet que je double clic se transfère à mon gump de bouton avec des variable, etc.

J'ai donc décidé de faire tout ce que je dois faire dans le fichier du Gump. Mais là, ça me donne des erreurs et me dit que il n'Y a pas de défénition pour Location, Map, Delete ,etc.

C'Est possible de transféré aussi ces données? si oui, je sais pas comment...


Post by Théodore de Lagarde, AdM - August 25, 2008 at 5:03 AM

.emote woohoo! Grâce à de l'aide de RunUo.com, j'ai réussi à faire en sorte que quand je double click dessus, ça amène un menu et je peux choisir ce que je peux faire après et ça marche!

Me reste qu'à faire ça pour tout les addon2 et ajouter les cercueil!


Post by Théodore de Lagarde, AdM - August 25, 2008 at 4:19 PM

Kertan, j'ai réglé ton problème. J'ai fait en sorte que le hue reste quand on flip. Te reste qu'à "mettre" le hue quand tu fait l'objet


Post by Myrddin Emrys, CP - August 25, 2008 at 7:24 PM

tu peux m'expliquer comment t'as fait, probablement que ça marcherais pour mon trucs aussi


Post by Théodore de Lagarde, AdM - August 27, 2008 at 11:41 PM

Bon, je peaufine la fenêtre qui va s'ouvrir, mais ça va surement être tout croche sur Crep, malheureusement dû au fait que je voit pas les gumps de Crep. Ça me sort des gumps bidons qui ont aucun rapport avec celui que j'ai choisit.