コード例 #1
0
ファイル: IdolInventory.cs プロジェクト: Mixi59/Stump
        public void Add(short idolId)
        {
            var owner = Owner;

            if (IsPartyIdols)
            {
                var partyIdol = GetPartyIdol(idolId);

                if (partyIdol == null)
                {
                    return;
                }

                owner = Party.GetMember((int)partyIdol.ownersIds.First());
            }

            var idol = IdolManager.Instance.CreatePlayerIdol(owner, idolId);

            if (idol == null)
            {
                return;
            }

            if (HasIdol(idol.Id))
            {
                return;
            }

            if (ActiveIdols.Count >= MaxActiveIdols)
            {
                return;
            }

            if (!owner.Inventory.HasItem(idol.Template.IdolItem))
            {
                return;
            }

            ActiveIdols.Add(idol);
            IdolHandler.SendIdolSelectedMessage(IsPartyIdols ? Party.Clients : Owner.Client, true, IsPartyIdols, (short)idol.Id);

            if (!owner.IsInFight() || owner.Fight.State != FightState.Placement)
            {
                return;
            }

            IdolHandler.SendIdolFightPreparationUpdate(Owner.Fight.Clients, ActiveIdols.Select(x => x.GetNetworkIdol()));
        }
コード例 #2
0
ファイル: IdolInventory.cs プロジェクト: Mixi59/Stump
        private void OnInventoryItemRemoved(ItemsCollection <BasePlayerItem> sender, BasePlayerItem item)
        {
            foreach (var idol in ActiveIdols.Where(x => x.Template.IdolItemId == item.Template.Id).ToArray())
            {
                if (idol.Owner.Inventory.HasItem(idol.Template.IdolItem))
                {
                    continue;
                }

                Remove(idol);

                if (IsPartyIdols)
                {
                    IdolHandler.SendIdolPartyLostMessage(Party.Clients, (short)idol.Id);
                }
            }
        }
コード例 #3
0
ファイル: IdolInventory.cs プロジェクト: Mixi59/Stump
        public bool Remove(PlayerIdol idol)
        {
            var result = ActiveIdols.Remove(idol);

            if (!result)
            {
                return(false);
            }

            IdolHandler.SendIdolSelectedMessage(IsPartyIdols ? Party.Clients : Owner.Client, false, IsPartyIdols, (short)idol.Id);

            if (!Owner.IsInFight() || Owner.Fight.State != FightState.Placement)
            {
                return(true);
            }

            IdolHandler.SendIdolFightPreparationUpdate(Owner.Fight.Clients, ActiveIdols.Select(x => x.GetNetworkIdol()));

            return(true);
        }