public override void CopyFrom(TactileDataContent other) { CheckSameClass(other); var weapon = (Data_Weapon)other; copy_traits(weapon); Mgt = weapon.Mgt; Hit = weapon.Hit; Crt = weapon.Crt; Wgt = weapon.Wgt; Min_Range = weapon.Min_Range; Max_Range = weapon.Max_Range; Mag_Range = weapon.Mag_Range; No_Counter = weapon.No_Counter; Long_Range = weapon.Long_Range; Main_Type = weapon.Main_Type; Scnd_Type = weapon.Scnd_Type; Rank = weapon.Rank; Attack_Type = weapon.Attack_Type; WExp = weapon.WExp; Staff_Exp = weapon.Staff_Exp; Traits = new bool[weapon.Traits.Length]; Array.Copy(weapon.Traits, Traits, Traits.Length); Staff_Traits = new bool[weapon.Staff_Traits.Length]; Array.Copy(weapon.Staff_Traits, Staff_Traits, Staff_Traits.Length); Effectiveness = new int[weapon.Effectiveness.Length]; Array.Copy(weapon.Effectiveness, Effectiveness, Effectiveness.Length); }
public List <Item_Data> valid_sold_items() { Weapon_Ranks highest_weapon_rank = (Weapon_Ranks)(Enum_Values.GetEnumCount(typeof(Weapon_Ranks)) - 1); return(Sold_Items.Where(item_data => { // Only weapons are allowed if (!item_data.is_weapon) { return false; } Data_Weapon weapon = item_data.to_weapon; // Weapons with infinite uses are not allowed, because they really can't be repaired if (weapon.infinite_uses) { return false; } // S rank weapons and Prf weapons are not allowed if (weapon.is_prf || weapon.Rank == Weapon_Ranks.None || weapon.Rank == highest_weapon_rank) { return false; } // No Hammerne if (weapon.is_staff() && weapon.Staff_Traits[(int)Stave_Traits.Repair]) { return false; } return true; }).ToList()); }
public override void Read(BinaryReader reader) { read_equipment(reader); Mgt = reader.ReadInt32(); Hit = reader.ReadInt32(); Crt = reader.ReadInt32(); Wgt = reader.ReadInt32(); Min_Range = reader.ReadInt32(); Max_Range = reader.ReadInt32(); Mag_Range = reader.ReadBoolean(); No_Counter = reader.ReadBoolean(); Long_Range = reader.ReadBoolean(); Main_Type = reader.ReadInt32(); Scnd_Type = reader.ReadInt32(); Rank = (Weapon_Ranks)reader.ReadInt32(); Attack_Type = (Attack_Types)reader.ReadInt32(); WExp = reader.ReadInt32(); Staff_Exp = reader.ReadInt32(); Traits = Traits.read(reader); Staff_Traits = Staff_Traits.read(reader); Effectiveness = Effectiveness.read(reader); }
private static int item_sort(Item_Data a, Item_Data b, bool sortTypes = true) { // Put weapons before items, weapon types in order, // low rank weapons before high rank before Prf, // low ids before high ids, high uses remaining before low uses remaining // b - a is descending, a - b is ascending if (a.Type != b.Type) { return((int)a.Type - (int)b.Type); } if (a.is_weapon && b.is_weapon) { var weapon_a = a.to_weapon; var weapon_b = b.to_weapon; // Siege engines after all non-siege if (weapon_a.Ballista() != weapon_b.Ballista()) { if (weapon_a.Ballista()) { return(1); } if (weapon_b.Ballista()) { return(-1); } } if (sortTypes) { var type_a = weapon_a.Main_Type; var type_b = weapon_b.Main_Type; if (type_a != type_b) { return((int)type_a - (int)type_b); } } Weapon_Ranks rank_a = weapon_a.Rank; Weapon_Ranks rank_b = weapon_b.Rank; if (rank_a != rank_b) { // Put prfs last if (rank_a == Weapon_Ranks.None) { return(1); } if (rank_b == Weapon_Ranks.None) { return(-1); } return(rank_a - rank_b); } } if (a.Id != b.Id) { return(a.Id - b.Id); } return(b.Uses - a.Uses); }