static void Main(string[] args) { if (args.Length < 4) { Console.Error.WriteLine("Error: No se han especificado parámetros."); Console.Error.WriteLine("El formato es: EliminaCodigoDeArchivoBin.exe [tabla de códigos] [archivo de entrada] [archivo de salida] [código a eliminar]"); Console.Error.WriteLine("Ejemplo: EliminaCodigoDeArchivoBin.exe digiBCA.Tab.xml 29091711.bin salida.bin 201"); return; } try { DigiTab dt = DigiTab.Load(args[0]); using (Bin archivoEntrada = new Bin(dt, args[1], 2, new Point3D(0.0, 0.0, 0.0), true, false)) { using (Bin archivoSalida = new Bin(dt, args[2], 2, new Point3D(0.0, 0.0, 0.0), false, true)) { foreach (Entity entidad in archivoEntrada) { Entity clonada = entidad.Clone(); // Eliminamos todos los códigos de la entidad clonada clonada.Codes.Clear(); // Añadimos únicamente los códigos cuyo nombre no coincida con el pasado por parámetros foreach (var código in entidad.Codes) { if (código.Name == args[3]) continue; clonada.Codes.Add(código); } if (entidad.Codes.Count == 0) continue; // No almacenamos la entidad, pues al quitarle el código indicado por parámetros se ha quedado sin códigos. Era el único que tenía. archivoSalida.Add(clonada); Console.Write("*"); } } } } catch (Exception excepción) { Console.Error.WriteLine("Se localizó el siguiente error:"); Console.Error.WriteLine(excepción.Message); return; } }
static void Main(string[] args) { if (args.Length < 3) { Console.Error.WriteLine("Error, no has indicado suficientes parámetros."); Console.Error.WriteLine("El formato es el siguiente: ExtraerEntidadesDeArchivos [archivo .bin a generar] [Digi.tab] [codigo 1]...[código n]."); return; } DirectoryInfo di = new DirectoryInfo(Directory.GetCurrentDirectory()); FileInfo[] archivos = di.GetFiles("*.bin"); DigiTab dt; try { dt = DigiTab.Load(args[1]); } catch(Exception excepción) { Console.Error.WriteLine("Se ha localizado un error al cargar la tabla de códigos."); Console.Error.WriteLine(excepción.Message); return; } using (Bin archivoSalida = new Bin(dt, args[0], 2, new Point3D(0,0,0), false, true) ) { foreach (var archivo in archivos) { using (Bin archivoEntrada = new Bin(dt, archivo.Name, 2, new Point3D(0, 0, 0), true, false)) { Console.WriteLine(string.Format("Analizando el archivo: {0}", archivo.Name)); var entidades = from entidad in archivoEntrada where entidad.TieneAlgúnCódigo(args.Skip(2)) select entidad; foreach (var entidad in entidades) { Entity clonada = entidad.Clone(); archivoSalida.Add(clonada); } } } } }
private void GetCastSound(MultiBuffClass buff) => Bin.Add("CastSound", CastSound = buff.CastSound);
private void GetExpirySound(MultiBuffClass buff) => Bin.Add("ExpiredSound", ExpiredSound = buff.ExpiredSound);
private void GetCritOnly(MultiBuffClass buff) => Bin.Add("CritOnly", CritOnly = buff.CriticalHitOnly);
private void GetDuration(MultiBuffClass buff) => Bin.Add("Duration", Duration = Math.Round(buff.FDuration, 6));
private void GetDurMode(MultiBuffClass buff) => Bin.Add("DurMode", DurMode = buff.DurationMode.ToString());
private void GetDebuffBuffChance(MultiBuffClass buff) => Bin.Add("DebuffBuffChance", DebuffBuffChance = buff.DebuffBuffChance);
private void GetRequires(MultiBuffClass buff) => Bin.Add("Requires", Requires = buff.Requires?.ToList());
private void GetIsBlock(ItemClass item) => Bin.Add("IsBlock", IsBlock = item.IsBlock());
private void GetMaterial(ItemClass item) => Bin.Add("Material", Material = item.MadeOfMaterial?.id);
private void GetStackNumber(ItemClass item) => Bin.Add("StackNumber", StackNumber = item.Stacknumber.Value);
private void GetIcon(ItemClass item) => Bin.Add("Icon", Icon = item.GetIconName());
private void GetIconTint(ItemClass item) => Bin.Add("IconTint", IconTint = item.GetIconTint().ToStringRgbHex(hash: false));
private void GetCanSpawn(ItemClass item) => Bin.Add("CanSpawn", CanSpawn = item.CreativeMode != "None");
private void GetType(Recipe recipe) => Bin.Add("Type", Type = recipe.itemValueType);
private void GetActions(MultiBuffClass buff) => Bin.Add("Actions", Actions = buff.Actions?.ToList());
private void GetLocal(ItemClass item) => Bin.Add("Local", Local = item.GetLocalizedItemName() ?? item.GetItemName());
private void GetExpiryBuffChance(MultiBuffClass buff) => Bin.Add("ExpiryBuffChance", ExpiryBuffChance = buff.ExpiryBuffChance);
private void GetName(ItemClass itemClass) => Bin.Add("Name", Name = itemClass.Name);
private void GetStackMode(MultiBuffClass buff) => Bin.Add("StackMode", StackMode = buff.StackMode.ToString());
private void GetId(ItemClass itemClass) => Bin.Add("Id", Id = itemClass.Id);
private void GetStackMax(MultiBuffClass buff) => Bin.Add("StackMax", StackMax = buff.StackMax);
public override void GetData(object obj) { if (!(obj is ItemClass item)) { return; } if (IsOption("filter")) { foreach (var f in StrFilter) { switch (f) { case StrFilters.Id: GetId(item); break; case StrFilters.Name: GetName(item); break; case StrFilters.Local: GetLocal(item); break; case StrFilters.IsBlock: GetIsBlock(item); break; case StrFilters.Material: GetMaterial(item); break; case StrFilters.StackNumber: GetStackNumber(item); break; case StrFilters.Icon: GetIcon(item); break; case StrFilters.IconTint: GetIconTint(item); break; case StrFilters.CanSpawn: GetCanSpawn(item); break; default: Log.Out($"{Config.ModPrefix} Unknown filter {f}"); break; } } } else { GetId(item); GetName(item); GetLocal(item); GetIsBlock(item); GetMaterial(item); GetStackNumber(item); GetIcon(item); GetIconTint(item); GetCanSpawn(item); if (Options.ContainsKey("properties")) { Bin.Add("Properties.Values", item.Properties.Values); Bin.Add("Properties.Params1", item.Properties.Params1); Bin.Add("Properties.Params2", item.Properties.Params2); Bin.Add("Properties.Classes", item.Properties.Classes); } } }
private void GetFFCheck(MultiBuffClass buff) => Bin.Add("FFCheck", FFCheck = buff.FriendlyFireCheck);
private void GetCauses(MultiBuffClass buff) => Bin.Add("Causes", Causes = buff.Causes);
private void GetSmell(MultiBuffClass buff) => Bin.Add("Smell", Smell = buff.SmellName);
private void GetCures(MultiBuffClass buff) => Bin.Add("Cures", Cures = buff.Cures);
private void GetDebuffSound(MultiBuffClass buff) => Bin.Add("DebuffSound", DebuffSound = buff.DebuffSound);
private void GetMutex(MultiBuffClass buff) => Bin.Add("Mutex", Mutex = buff.Mutex?.ToList());
private void GetExpiryBuff(MultiBuffClass buff) => Bin.Add("ExpiryBuff", ExpiryBuff = buff.ExpiryBuff);
private void GetDebuffActions(MultiBuffClass buff) => Bin.Add("DebuffActions", DebuffActions = buff.DebuffActions?.ToList());