/// <summary>
        /// ドロップダウンにPCを追加する。
        /// </summary>
        /// <param name="dropdown">追加するドロップダウン。</param>
        /// <param name="pc">追加するPC。</param>
        /// <param name="select">追加したPCを選択中にする場合true。</param>
        private void AddOption(Dropdown dropdown, PlayerCharacterEntity pc, bool select = false)
        {
            // TODO: 設定値のフォーマットは仮、将来的にはそもそもDropbox止めるかも
            dropdown.options.Add(new Dropdown.OptionData("#" + pc.PcId + " " + pc.Name));
            if (select)
            {
                dropdown.value = dropdown.options.Count - 1;
            }

            dropdown.RefreshShownValue();

            // 変更した場合の他、1件目を追加したときも変わっているはずなのでイベントを呼ぶ
            if (select || dropdown.options.Count == 1)
            {
                dropdown.onValueChanged.Invoke(dropdown.value);
            }
        }
    public void UnRegister(PlayerCharacterEntity e)
    {
        if (e == null)
        {
            return;
        }

        for (int i = 0; i < teams.Count; i++)
        {
            for (int j = 0; j < teams[i].players.Count; j++)
            {
                if (teams[i].players[j].player == e)
                {
                    teams[i].players.RemoveAt(j);
                    return;
                }
            }
        }
    }
Exemplo n.º 3
0
        internal Character(ILogger <Character> logger, CharacterManager characterManager, PlayerCharacterEntity entity,
                           GameDataService gameDataService)
        {
            SetExistsState(true);

            CharacterManager = characterManager;
            Weapons          = new CharacterInventory(this, 3, ItemCategory.Weapon);
            Skills           = new CharacterInventory(this, 1, ItemCategory.Skill);
            Costumes         = new CharacterInventory(this, 7, ItemCategory.Costume);
            Id     = entity.Id;
            Slot   = entity.Slot;
            Gender = (CharacterGender)entity.Gender;
            Hair   = gameDataService.GetDefaultItem(Gender, CostumeSlot.Hair, entity.BasicHair);
            Face   = gameDataService.GetDefaultItem(Gender, CostumeSlot.Face, entity.BasicFace);
            Shirt  = gameDataService.GetDefaultItem(Gender, CostumeSlot.Shirt, entity.BasicShirt);
            Pants  = gameDataService.GetDefaultItem(Gender, CostumeSlot.Pants, entity.BasicPants);
            Gloves = gameDataService.GetDefaultItem(Gender, CostumeSlot.Gloves, 0);
            Shoes  = gameDataService.GetDefaultItem(Gender, CostumeSlot.Shoes, 0);

            var plr       = characterManager.Player;
            var inventory = CharacterManager.Player.Inventory;

            plr.AddContextToLogger(logger);

            SetInventoryIfNeeded(entity.Weapon1Id, (byte)WeaponSlot.Weapon1, Weapons);
            SetInventoryIfNeeded(entity.Weapon2Id, (byte)WeaponSlot.Weapon2, Weapons);
            SetInventoryIfNeeded(entity.Weapon3Id, (byte)WeaponSlot.Weapon3, Weapons);

            SetInventoryIfNeeded(entity.HairId, (byte)CostumeSlot.Hair, Costumes);
            SetInventoryIfNeeded(entity.FaceId, (byte)CostumeSlot.Face, Costumes);
            SetInventoryIfNeeded(entity.ShirtId, (byte)CostumeSlot.Shirt, Costumes);
            SetInventoryIfNeeded(entity.PantsId, (byte)CostumeSlot.Pants, Costumes);
            SetInventoryIfNeeded(entity.GlovesId, (byte)CostumeSlot.Gloves, Costumes);
            SetInventoryIfNeeded(entity.ShoesId, (byte)CostumeSlot.Shoes, Costumes);
            SetInventoryIfNeeded(entity.AccessoryId, (byte)CostumeSlot.Accessory, Costumes);

            SetInventoryIfNeeded(entity.SkillId, (byte)SkillSlot.Skill, Skills);

            Weapons.ItemAdded   += SendEquip;
            Weapons.ItemRemoved += SendUnEquip;

            Costumes.ItemAdded   += SendEquip;
            Costumes.ItemRemoved += SendUnEquip;

            Skills.ItemAdded   += SendEquip;
            Skills.ItemRemoved += SendUnEquip;

            void SendEquip(object _, CharacterInventoryEventArgs e)
            {
                plr.Session.Send(new SUseItemAckMessage(Slot, e.Slot, e.Item.Id, UseItemAction.Equip));
            }

            void SendUnEquip(object _, CharacterInventoryEventArgs e)
            {
                plr.Session.Send(new SUseItemAckMessage(Slot, e.Slot, e.Item.Id, UseItemAction.UnEquip));
            }

            void SetInventoryIfNeeded(long?id, byte itemSlot, CharacterInventory characterInventory)
            {
                var log = logger.ForContext(
                    ("CharacterSlot", Slot),
                    ("ItemSlot", itemSlot),
                    ("ItemId", id));

                if (id == null)
                {
                    return;
                }

                var item = inventory[(ulong)id];

                if (item == null)
                {
                    log.Warning("Character has non-existant item");
                    return;
                }

                var error = characterInventory.Add(itemSlot, item);

                if (error != CharacterInventoryError.OK)
                {
                    log.Warning("Unable to equip item Error={Error}", error);
                }
            }
        }
Exemplo n.º 4
0
        private static void SetDtoItems(Character character, PlayerCharacterEntity entity)
        {
            // Weapons
            var items = character.Weapons.GetItems();

            for (var slot = 0; slot < items.Length; ++slot)
            {
                var itemId = (long?)items[slot]?.Id;

                switch (slot)
                {
                case 0:
                    entity.Weapon1Id = itemId;
                    break;

                case 1:
                    entity.Weapon2Id = itemId;
                    break;

                case 2:
                    entity.Weapon3Id = itemId;
                    break;
                }
            }

            // Skills
            items          = character.Skills.GetItems();
            entity.SkillId = (long?)items[0]?.Id;

            // Costumes
            items = character.Costumes.GetItems();
            for (var slot = 0; slot < items.Length; ++slot)
            {
                var itemId = (long?)items[slot]?.Id;

                switch ((CostumeSlot)slot)
                {
                case CostumeSlot.Hair:
                    entity.HairId = itemId;
                    break;

                case CostumeSlot.Face:
                    entity.FaceId = itemId;
                    break;

                case CostumeSlot.Shirt:
                    entity.ShirtId = itemId;
                    break;

                case CostumeSlot.Pants:
                    entity.PantsId = itemId;
                    break;

                case CostumeSlot.Gloves:
                    entity.GlovesId = itemId;
                    break;

                case CostumeSlot.Shoes:
                    entity.ShoesId = itemId;
                    break;

                case CostumeSlot.Accessory:
                    entity.AccessoryId = itemId;
                    break;
                }
            }
        }