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 !"); }
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(); } } }
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; * } * }*/ }
//Button fleche = 4005 //button parch = 4011 public GumpArtisan(BaseToolNubia tool, CraftSystemNubia system, NubiaPlayer owner) : this(tool, system, owner, 0, 0, -1) { }