Ejemplo n.º 1
0
    public void ChangeTexture(string name, string type)
    {
        if (!ItemManager.Instance)
        {
            return;
        }
        ItemName            = name;
        ItemType            = type;
        image               = transform.GetChild(0).GetComponent <Image>();
        itemNumberText      = transform.GetChild(1).GetComponent <Text>();
        itemNumberText.text = ItemNumber.ToString();
        transform.GetChild(0).GetComponent <Image>().color = new Color(1, 1, 1, 1);
        if (name == "null")
        {
            image.sprite = null;
            transform.GetChild(0).GetComponent <Image>().color = new Color(1, 1, 1, 0);
            itemNumberText.text = null;
            ItemNumber          = 0;
            return;
        }
        // itemPath = (string)ItemManager.Instance.propValue[name]["path"];
        itemPath = (string)ItemManager.Instance.GetPropertyByName(name, type, "path");
        Sprite sprite = Resources.Load <Sprite>(itemPath);

        image.sprite = sprite;
    }
        public void valid(string number)
        {
            var n = new ItemNumber(number);

            Assert.Equal(42, n.Value);
            Assert.Equal("42", n.ToString());
        }
        //private static CostumeSlot ParseDefaultItemSlot(string slot)
        //{
        //    Func<string, bool> equals = str => slot.Equals(str, StringComparison.InvariantCultureIgnoreCase);

        //    if (equals("hair"))
        //        return CostumeSlot.Hair;

        //    if (equals("face"))
        //        return CostumeSlot.Face;

        //    if (equals("coat"))
        //        return CostumeSlot.Shirt;

        //    if (equals("pants"))
        //        return CostumeSlot.Pants;

        //    if (equals("gloves"))
        //        return CostumeSlot.Gloves;

        //    if (equals("shoes"))
        //        return CostumeSlot.Shoes;

        //    throw new Exception("Invalid slot " + slot);
        //}

        #endregion

        #region Items

        public IEnumerable <ItemInfo> LoadItems()
        {
            var dto         = Deserialize <ItemInfoDto>("xml/iteminfo.x7");
            var stringTable = Deserialize <StringTableDto>("language/xml/iteminfo_string_table.x7");

            foreach (var categoryDto in dto.category)
            {
                foreach (var subCategoryDto in categoryDto.sub_category)
                {
                    foreach (var itemDto in subCategoryDto.item)
                    {
                        var      id = new ItemNumber(categoryDto.id, subCategoryDto.id, itemDto.number);
                        ItemInfo item;

                        switch (id.Category)
                        {
                        case ItemCategory.Skill:
                            item = LoadAction(id, itemDto);
                            break;

                        case ItemCategory.Weapon:
                            item = LoadWeapon(id, itemDto);
                            break;

                        default:
                            item = new ItemInfo();
                            break;
                        }

                        item.ItemNumber  = id;
                        item.Level       = [email protected]_info.require_level;
                        item.MasterLevel = [email protected]_info.require_master;
                        item.Gender      = ParseGender(itemDto.SEX);
                        item.Image       = itemDto.client.icon.image;

                        if ([email protected] != null)
                        {
                            item.License = ParseItemLicense([email protected]);
                        }

                        var name = [email protected](s => s.key.Equals([email protected]_info.name_key, StringComparison.InvariantCultureIgnoreCase));
                        if (string.IsNullOrWhiteSpace(name?.eng))
                        {
                            Logger.Warning("Missing english translation for {id}", name != null ? [email protected]_info.name_key : id.ToString());
                            item.Name = name != null ? name.key : itemDto.NAME;
                        }
                        else
                        {
                            item.Name = name.eng;
                        }

                        yield return(item);
                    }
                }
            }
        }
        public void LoadItems()
        {
            _logger.Information("Loading items...");
            var dto         = Deserialize <ItemInfoDto>("xml/iteminfo.x7");
            var stringTable = Deserialize <StringTableDto>("language/xml/iteminfo_string_table.x7");

            Items = Transform().ToImmutableDictionary(x => x.ItemNumber, x => x);
            _logger.Information("Loaded {Count} items", Items.Count);

            IEnumerable <ItemInfo> Transform()
            {
                foreach (var categoryDto in dto.category)
                {
                    foreach (var subCategoryDto in categoryDto.sub_category)
                    {
                        foreach (var itemDto in subCategoryDto.item)
                        {
                            var      id = new ItemNumber(categoryDto.id, subCategoryDto.id, itemDto.number);
                            ItemInfo item;

                            switch (id.Category)
                            {
                            case ItemCategory.Skill:
                                item = LoadAction(id, itemDto);
                                break;

                            case ItemCategory.Weapon:
                                item = LoadWeapon(id, itemDto);
                                break;

                            default:
                                item = new ItemInfo();
                                break;
                            }

                            item.ItemNumber  = id;
                            item.Level       = [email protected]_info.require_level;
                            item.MasterLevel = [email protected]_info.require_master;
                            item.Gender      = ParseGender(itemDto.SEX);
                            item.Image       = itemDto.client.icon.image;

                            if ([email protected] != null)
                            {
                                item.License = ParseItemLicense([email protected]);
                            }

                            var name = [email protected](s =>
                                                                          s.key.Equals([email protected]_info.name_key, StringComparison.InvariantCultureIgnoreCase));
                            if (string.IsNullOrWhiteSpace(name?.eng))
                            {
                                _logger.Warning("Missing english translation for {id}",
                                                name != null ? [email protected]_info.name_key : id.ToString());
                                item.Name = name != null ? name.key : itemDto.NAME;
                            }
                            else
                            {
                                item.Name = name.eng;
                            }

                            yield return(item);
                        }
                    }
                }
            }

            Gender ParseGender(string gender)
            {
                bool Equals(string str)
                {
                    return(gender.Equals(str, StringComparison.InvariantCultureIgnoreCase));
                }

                if (Equals("all"))
                {
                    return(Gender.None);
                }

                if (Equals("woman"))
                {
                    return(Gender.Female);
                }

                if (Equals("man"))
                {
                    return(Gender.Male);
                }

                throw new Exception("Invalid gender " + gender);
            }

            ItemInfo LoadAction(ItemNumber id, ItemInfoItemDto itemDto)
            {
                if (itemDto.action == null)
                {
                    _logger.Warning("Missing action for item {id}", id);
                    return(new ItemInfoAction());
                }

                var item = new ItemInfoAction
                {
                    RequiredMP       = float.Parse(itemDto.action.ability.required_mp, CultureInfo.InvariantCulture),
                    DecrementMP      = float.Parse(itemDto.action.ability.decrement_mp, CultureInfo.InvariantCulture),
                    DecrementMPDelay = float.Parse(itemDto.action.ability.decrement_mp_delay, CultureInfo.InvariantCulture)
                };

                if (itemDto.action.@float != null)
                {
                    item.ValuesF = itemDto.action.@float
                                   .Select(f => float.Parse(f.value.Replace("f", ""), CultureInfo.InvariantCulture)).ToList();
                }

                if (itemDto.action.integer != null)
                {
                    item.Values = itemDto.action.integer.Select(i => i.value).ToList();
                }

                return(item);
            }

            ItemInfo LoadWeapon(ItemNumber id, ItemInfoItemDto itemDto)
            {
                if (itemDto.weapon == null)
                {
                    _logger.Warning("Missing weapon for item {id}", id);
                    return(new ItemInfoWeapon());
                }

                var ability = itemDto.weapon.ability;
                var item    = new ItemInfoWeapon
                {
                    Type                    = ability.type,
                    RateOfFire              = float.Parse(ability.rate_of_fire, CultureInfo.InvariantCulture),
                    Power                   = float.Parse(ability.power, CultureInfo.InvariantCulture),
                    MoveSpeedRate           = float.Parse(ability.move_speed_rate, CultureInfo.InvariantCulture),
                    AttackMoveSpeedRate     = float.Parse(ability.attack_move_speed_rate, CultureInfo.InvariantCulture),
                    MagazineCapacity        = ability.magazine_capacity,
                    CrackedMagazineCapacity = ability.cracked_magazine_capacity,
                    MaxAmmo                 = ability.max_ammo,
                    Accuracy                = float.Parse(ability.accuracy, CultureInfo.InvariantCulture),
                    Range                   = string.IsNullOrWhiteSpace(ability.range)
                        ? 0
                        : float.Parse(ability.range, CultureInfo.InvariantCulture),
                    SupportSniperMode  = ability.support_sniper_mode > 0,
                    SniperModeFov      = ability.sniper_mode_fov > 0,
                    AutoTargetDistance = ability.auto_target_distance == null
                        ? 0
                        : float.Parse(ability.auto_target_distance, CultureInfo.InvariantCulture)
                };

                if (itemDto.weapon.@float != null)
                {
                    item.ValuesF = itemDto.weapon.@float
                                   .Select(f => float.Parse(f.value.Replace("f", ""), CultureInfo.InvariantCulture)).ToList();
                }

                if (itemDto.weapon.integer != null)
                {
                    item.Values = itemDto.weapon.integer.Select(i => i.value).ToList();
                }

                return(item);
            }
        }
Ejemplo n.º 5
0
 public override string ToString()
 {
     return(ItemNumber.ToString());
 }
Ejemplo n.º 6
0
 public override string ToString() => ItemNumber.ToString();