コード例 #1
0
        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);
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }