public void ActivateAbility(int zoneId, int cardInstanceId, int abilityIndex) { var card = playerInfo.zones[zoneId].cards.Find(x => x.instanceId == cardInstanceId); if (card != null) { var libraryCard = GameManager.Instance.config.GetCard(card.cardId); var activatedAbilities = libraryCard.abilities.FindAll(x => x is ActivatedAbility); if (activatedAbilities.Count > 0 && abilityIndex < activatedAbilities.Count) { var activatedAbility = activatedAbilities[abilityIndex] as ActivatedAbility; var cost = activatedAbility.costs[0]; if (cost != null) { var payResourceCost = cost as PayResourceCost; var statCost = payResourceCost.value; if (playerInfo.stats[payResourceCost.statId].effectiveValue >= statCost) { playerInfo.stats[payResourceCost.statId].baseValue -= statCost; effectSolver.ActivateAbility(playerInfo, card, 0); var msg = new ActivateAbilityMessage(); msg.playerNetId = playerInfo.netId; msg.zoneId = zoneId; msg.cardInstanceId = cardInstanceId; msg.abilityIndex = abilityIndex; client.Send(NetworkProtocol.ActivateAbility, msg); } } } } }