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())); }
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); } } }
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); }