Ejemplo n.º 1
0
        public void TryCraft(NubiaPlayer crafter, BaseToolNubia tool, CraftEntry entry)
        {
            if (entry == null || crafter == null || tool == null)
            {
                Console.WriteLine("WARNING: Null dans TryCraft ou index invalid");
                return;
            }
            Item newitem = null;

            if (entry.MinValue > crafter.Competences[mComp].getPureMaitrise())
            {
                crafter.SendMessage("Vous n'êtes pas encore assez doué pour ça...");
                return;
            }


            if (crafter.Backpack == null)
            {
                crafter.SendMessage("vous n'avez pas de sac à dos");
                return;
            }



            bool      allressource   = false;
            ArrayList ressourceslist = new ArrayList();

            for (int r = 0; r < entry.Ressource.Length; r++)
            {
                Type type       = entry.Ressource[r].RType;
                int  nbr        = entry.Ressource[r].Number;
                int  nbrTrouve  = 0;
                int  nbrConsume = 0;

                bool badselect = false;
                if (type == typeof(BaseMetal) && nbr > 0)
                {
                    if (tool.Metal != null)
                    {
                        type = tool.Metal.GetType();
                    }
                    else
                    {
                        crafter.SendMessage(2118, "Vous devez selectionner le Métal");
                        badselect = true;
                    }
                }
                else if (type == typeof(BaseCuir) && nbr > 0)
                {
                    if (tool.Cuir != null)
                    {
                        type = tool.Cuir.GetType();
                    }
                    else
                    {
                        crafter.SendMessage(2118, "Vous devez selectionner le Cuir");
                        badselect = true;
                    }
                }
                else if (type == typeof(BaseBois) && nbr > 0)
                {
                    if (tool.Bois != null)
                    {
                        type = tool.Bois.GetType();
                    }
                    else
                    {
                        crafter.SendMessage(2118, "Vous devez selectionner le Bois");
                        badselect = true;
                    }
                }
                else if (type == typeof(BaseOs) && nbr > 0)
                {
                    if (tool.Os != null)
                    {
                        type = tool.Os.GetType();
                    }
                    else
                    {
                        crafter.SendMessage(2118, "Vous devez selectionner les Os");
                        badselect = true;
                    }
                }
                else if (type == typeof(BaseTissu) && nbr > 0)
                {
                    if (tool.Tissu != null)
                    {
                        type = tool.Tissu.GetType();
                    }
                    else
                    {
                        crafter.SendMessage(2118, "Vous devez selectionner le Tissu");
                        badselect = true;
                    }
                }
                if (badselect)
                {
                    return;
                }


                bool          resIsNotRaffine = false;
                Item          notRaffineRes   = null;
                BaseRessource itAdd           = null;
                foreach (Item ritem in crafter.Backpack.Items)
                {
                    Console.WriteLine("Ritem=" + ritem + " :: type=" + type);
                    if (ritem.GetType().IsSubclassOf(type) || ritem.GetType() == type)
                    {
                        ConstructorInfo rtor = ritem.GetType().GetConstructor(Type.EmptyTypes);
                        Object          robj = rtor.Invoke(null);
                        //itAdd = robj as Item;
                        Console.WriteLine("Same Type");
                        if (ritem is BaseRessource)
                        {
                            Console.WriteLine(((BaseRessource)ritem).isRaffine);
                            if (!((BaseRessource)ritem).isRaffine)
                            {
                                resIsNotRaffine = true;
                                notRaffineRes   = ritem;
                                continue;
                            }
                            else
                            {
                                itAdd = ritem as BaseRessource;
                            }
                        }
                        if (ritem.Amount == 1)
                        {
                            //ritem.Delete();
                            nbrTrouve++;
                        }
                        else if (ritem.Amount < nbr - nbrTrouve)
                        {
                            nbrTrouve += ritem.Amount;
                            //ritem.Delete();
                        }
                        else
                        {
                            nbrTrouve = nbr;
                            //ritem.Amount -= nbr-nbrTrouve;
                        }
                    }
                    if (nbr - nbrTrouve <= 0)
                    {
                        break;
                    }
                }
                if (itAdd != null)
                {
                    ressourceslist.Add(itAdd);
                }
                if (nbrTrouve < nbr)
                {
                    if (resIsNotRaffine)
                    {
                        crafter.SendMessage(2118, "Vous devez raffiner votre {0} avant tout", notRaffineRes.Name);
                    }
                    else
                    {
                        crafter.SendMessage("Il vous manque des matériaux...");
                    }
                    allressource = false;
                }
                else
                {
                    allressource = true;

                    /*Type[] types = new Type[ressourceslist.ToArray().Length];
                     * for(int t = 0; t < types.Length; t++)
                     *  types[t] = ((Item)ressourceslist[t]).GetType();
                     * int[] quatitys = new int[entry.Ressource.Length];
                     * for(int q = 0; q < quatitys.Length; q++)
                     *  quatitys[q] = entry.Ressource[q].Number;*/
                }
                if (!allressource)
                {
                    return;
                }
            }

            int rollResult = crafter.Competences[mComp].intRoll();

            //crafter.Competences.wait(1);
            if (rollResult > entry.Diff)
            {
                newitem = null;

                Console.WriteLine("Craft réussi");

                crafter.GiveXP(50);

                try
                {
                    ConstructorInfo constructor = entry.ToCraft.GetConstructor(Type.EmptyTypes);
                    if (constructor != null)
                    {
                        Object obj = constructor.Invoke(null);
                        newitem = obj as Item;
                    }
                    else
                    {
                        Console.WriteLine("constructor null dans trycraft");
                    }
                }
                catch (Exception ex) {
                    Console.WriteLine("TryCraft: " + ex.Message);
                    return;
                }

                if (newitem == null)
                {
                    Console.WriteLine("ERROR: newitem == null dans TryCraft");
                    return;
                }
                crafter.SendMessage("Vous reussissez votre création!!");
                if (newitem is INubiaCraftable)
                {
                    Console.WriteLine("Attribution de parametre INubiaCraftable");
                    INubiaCraftable nubitem = newitem as INubiaCraftable;

                    NubiaQualityEnum quality = NubiaQualityEnum.Normale;

                    int delta = rollResult - entry.Diff;
                    if (delta < 5)
                    {
                        quality = NubiaQualityEnum.Mauvaise;
                    }
                    else if (delta >= 30)
                    {
                        quality = NubiaQualityEnum.Maitre;
                    }
                    else if (delta >= 20)
                    {
                        quality = NubiaQualityEnum.Excellente;
                    }
                    else if (delta >= 10)
                    {
                        quality = NubiaQualityEnum.Bonne;
                    }

                    Console.WriteLine("Quality: " + quality);
                    Console.WriteLine("DELTA = " + delta);

                    nubitem.Artisan = crafter;
                    nubitem.TRessourceList.Clear();
                    bool colored = false;
                    for (int i = 0; i < ressourceslist.Count; i++)
                    {
                        //   Console.WriteLine("Ressources: " + ressourceslist[i].ToString());
                        if (ressourceslist[i] is BaseRessource)
                        {
                            BaseRessource res = ressourceslist[i] as BaseRessource;
                            if (!colored && res.Infos != null)
                            {
                                newitem.Hue = res.Infos.Hue;
                                colored     = true;
                            }
                            Console.WriteLine("Ressource enregistrée: " + res.Ressource.ToString());
                            // nubitem.AddRessource((NubiaRessource)res.Ressource);
                            nubitem.TRessourceList.Add(res.Ressource);
                        }
                    }
                    Console.WriteLine("After Craft");
                    nubitem.AfterCraft(quality);
                    //   nubitem.ComputeRessourceBonus();
                }
                if (newitem != null && crafter.Backpack != null)
                {
                    crafter.Backpack.AddItem(newitem);
                }
                else if (newitem != null)
                {
                    newitem.MoveToWorld(crafter.Location, crafter.Map);
                }
            }
            else
            {
                crafter.SendMessage("Vous n'arrivez a rien, de la matière première à été perdue");
            }

            Console.WriteLine("Consume Quantity:  ");
            for (int r2 = 0; r2 < entry.Ressource.Length; r2++)
            {
                Type type2 = entry.Ressource[r2].RType;
                int  nbr2  = entry.Ressource[r2].Number;
                CraftSystemNubia.ConsumeQuantity(crafter.Backpack, type2, nbr2, tool);
            }
            Console.Write("Ok !");
        }
Ejemplo n.º 2
0
        public GumpArtisan(BaseToolNubia tool, CraftSystemNubia system, NubiaPlayer owner, int Categorie, int page, int itemSelect)
            : base(system.Name, 560, 450, 210)
        {
            Closable    = true;
            mOwner      = owner;
            mSystem     = system;
            mCategorie  = Categorie;
            mItemSelect = itemSelect;
            mTool       = tool;
            mPage       = page;

            int y     = YBase;
            int x     = XBase;
            int line  = 0;
            int scale = 24;
            int decal = 5;

            if (itemSelect >= 0 && itemSelect < mSystem.List.Entrys.Length)
            {
                if (mSystem.List.Entrys[itemSelect].Categorie == mCategorie)
                {
                    mEntry = mSystem.List.Entrys[itemSelect];
                }
            }
            /*Menu de gauche*/

            AddBackground(x, y, 210, 435, 3500); //3500 = parch déco ; 3000 = parch; 3600=pierre noire ; 5120 =pierrenoire 2
            AddBackground(x + 220, y, 315, 300, 3500);
            AddBackground(x + 220, y + 250, 315, 185, 3600);
            line++;
            AddLabel(x + 20, y + line * scale, ColorTextYellow, "Catégories");

            AddImageTiled(x + 206, y - 6, 17, 440, 10150);    //Bande verticale
            AddImageTiled(x + 212, y + 234, 320, 18, 0x280A); //Bande 2
            //    AddImage(x + 177, y + 420, 10204); //Fin de bande
            line++;

            for (int c = 0; c < mSystem.List.Categorie.Length; c++) //50+
            {
                addCategorie(x + 25, y + line * scale, 50 + c, (mCategorie == c ? true : false), mSystem.List.Categorie[c]);
                line++;
            }

            scale = 22;
            if (system.GetType() == typeof(CraftCoutureSystem))
            {
                line = 14;
                AddSimpleButton(x + 20, y + line * scale, 39, (mTool.Tissu == null ? "Choisir Tissu" : "Tissu: " + mTool.Tissu.Ressource.ToString()));
            }
            line = 15;
            if (system.GetType() != typeof(CraftEruditionSystem))
            {
                AddSimpleButton(x + 20, y + line * scale, 35, (mTool.Metal == null ? "Choisir Metal" : "Metal: " + mTool.Metal.Ressource.ToString()));
                line++;
                AddSimpleButton(x + 20, y + line * scale, 36, (mTool.Cuir == null ? "Choisir Cuir" : "Cuir: " + mTool.Cuir.Ressource.ToString()));
                line++;
                AddSimpleButton(x + 20, y + line * scale, 37, (mTool.Os == null ? "Choisir Os" : "Os: " + mTool.Os.Ressource.ToString()));
                line++;
                AddSimpleButton(x + 20, y + line * scale, 38, (mTool.Bois == null ? "Choisir Bois" : "Bois: " + mTool.Bois.Ressource.ToString()));
            }

            /*Liste de droite*/
            x    = XCol;
            line = 1;
            int  maxNbItems   = 8;
            int  curNbItems   = 1;
            bool pageSuivante = false;

            for (int i = 0; i < mSystem.List.Count; i++) //100+
            {
                if (mSystem.List.Entrys[i].Categorie == mCategorie /*&& cando*/)
                {
                    if (curNbItems > mPage * maxNbItems && curNbItems <= (mPage + 1) * maxNbItems)
                    {
                        //AddSimpleButton(x+20, y + line * scale, 100 + i, mSystem.List.Entrys[i].Name);
                        AddButton(x + 20, y + line * scale, 4011, 4012, 100 + i, GumpButtonType.Reply, 0);
                        AddLabel(x + 55, y + line * scale, (i == itemSelect ? ColorTextGreen : ColorText), mSystem.List.Entrys[i].Name);
                        line++;
                    }
                    if (curNbItems++ == (mPage + 1) * maxNbItems + 1)
                    {
                        pageSuivante = true;
                        break;
                    }
                }
            }
            if (mPage > 0)
            {
                AddButton(x + 20, y + 200, 4014, 4015, 42, GumpButtonType.Reply, 0);
            }
            if (pageSuivante)
            {
                AddButton(x + 200, y + 200, 4007, 4006, 41, GumpButtonType.Reply, 0);
            }

            /*Fiche de description & Craft Button*/

            if (mEntry != null)
            {
                y     = 360;
                x    += 25;
                line  = 2;
                scale = 20;

                Item item = null;
                try { item = mEntry.ToCraft.GetConstructor(Type.EmptyTypes).Invoke(null) as Item; }
                catch { }

                if (item != null) //Apperçu
                {
                    AddItem(x + 150, y + 40, item.ItemID);
                }
                AddLabel(x, y + 20, ColorTextYellow, mEntry.Name);

                /*   string infos = "";
                 *
                 * infos += "<i>Mini skill</i>: " + mEntry.MinValue.ToString();
                 * infos += "<br><i>Difficulté(Moy.10)</i>: " + mEntry.Diff.ToString();
                 * infos += "<br>";
                 * for (int r = 0; r < mEntry.Ressource.Length; r++)
                 *     infos += "<br><i>" + mEntry.Ressource[r].RType.GetType().ToString() + "</i>: " + mEntry.Ressource[r].Number.ToString();
                 */
                AddLabel(x, y + line * scale, ColorTextGreen, "Comp. Requise: " + mEntry.MinValue.ToString());
                line++;
                AddLabel(x, y + line * scale, ColorTextGreen, "Difficulté: " + mEntry.Diff.ToString());
                //  line++;
                string res = "";
                for (int r = 0; r < mEntry.Ressource.Length; r++)
                {
                    line++;
                    string stype = mEntry.Ressource[r].RType.Name;
                    if (stype == "BaseMetal")
                    {
                        stype = "Métal";
                    }
                    else if (stype == "BaseBois")
                    {
                        stype = "Bois";
                    }
                    else if (stype == "BaseCuir")
                    {
                        stype = "Cuir";
                    }
                    else if (stype == "BaseOs")
                    {
                        stype = "Os";
                    }
                    else if (stype == "BaseTissu")
                    {
                        stype = "Tissu";
                    }
                    else
                    {
                        try
                        {
                            Item ires = mEntry.Ressource[r].RType.GetConstructor(Type.EmptyTypes).Invoke(null) as Item;
                            if (ires != null)
                            {
                                if (ires.Name != null)
                                {
                                    stype = ires.Name;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                        }
                    }
                    res = mEntry.Ressource[r].Number.ToString() + " " + stype;
                    AddLabel(x, y + line * scale, ColorText, res);
                }
                // line++;
                // AddSimpleButton(x + 8, y + line * scale, 40, "Créer cet objet");
                AddButton(x + 130, y + line * scale, 4005, 4006, 40, GumpButtonType.Reply, 0);
                AddLabel(x + 165, y + 2 + line * scale, ColorTextYellow, "Créer");
                if (item != null)
                {
                    item.Delete();
                }
            }
        }
Ejemplo n.º 3
0
        public static void ConsumeQuantity(Container cont, Type types, int amounts, BaseToolNubia tool)
        {
            Type type = null;

            if (tool == null)
            {
                return;
            }
            if (types == typeof(BaseMetal))
            {
                type = tool.Metal.GetType();
            }
            else if (types == typeof(BaseCuir))
            {
                type = tool.Cuir.GetType();
            }
            else if (types == typeof(BaseBois))
            {
                type = tool.Bois.GetType();
            }
            else if (types == typeof(BaseOs))
            {
                type = tool.Os.GetType();
            }
            else if (types == typeof(BaseTissu))
            {
                type = tool.Tissu.GetType();
            }
            else
            {
                type = types;
            }
            Item itAdd = null;

            if (type == null)
            {
                return;
            }

            ArrayList targets = new ArrayList();

            foreach (Item ritem in cont.Items)
            {
                //Console.WriteLine("Ritem="+ritem+" :: type="+type);
                if (ritem.GetType().IsSubclassOf(type) || ritem.GetType() == type)
                {
                    targets.Add(ritem);
                }
            }

            for (int i = 0; i < targets.Count; ++i)
            {
                Item            ritem = (Item)targets[i];
                ConstructorInfo rtor  = ritem.GetType().GetConstructor(Type.EmptyTypes);
                Object          robj  = rtor.Invoke(null);
                itAdd = robj as Item;
                //Console.WriteLine("Same Type");
                if (ritem is BaseRessource)
                {
                    //	Console.WriteLine("BaseRessource trouvée");
                    //	Console.WriteLine(((BaseRessource)ritem).isRaffine);
                    if (!((BaseRessource)ritem).isRaffine)
                    {
                        continue;
                    }
                }
                if ((ritem.Amount > amounts) && amounts > 0)
                {
                    ritem.Amount -= amounts;
                    amounts       = 0;
                }
                else if ((ritem.Amount == amounts) && amounts > 0)
                {
                    ritem.Delete();
                    amounts = 0;
                }
                else if ((ritem.Amount < amounts) && amounts > 0)
                {
                    amounts -= ritem.Amount;
                    ritem.Delete();
                }
            }


            /*if ( types.Length != amounts.Length )
             *  throw new ArgumentException();*/

            /*	for ( int i = 0; i < types.Length; ++i )
             *  {
             *
             *      int deleted= 0;
             *      foreach(Item itemb in cont.Items)
             *      {
             *          if(itemb.GetType() == types[i] )
             *          {
             *              if(itemb.Amount <= amounts[i]-deleted){
             *                  deleted = itemb.Amount;
             *                  //itemb.Consume();
             *              }
             *              else{
             *                  itemb.Amount -= amounts[i]-deleted;
             *                  deleted = amounts[i];
             *              }
             *          }
             *          if(deleted >= amounts[i])
             *              break;
             *      }
             *  }*/
        }
Ejemplo n.º 4
0
        //Button fleche = 4005
        //button parch = 4011


        public GumpArtisan(BaseToolNubia tool, CraftSystemNubia system, NubiaPlayer owner)
            : this(tool, system, owner, 0, 0, -1)
        {
        }