# Сражение и фарм ресурсов NFT персонажами

Победивший в сражении Дом постепенно накапливает баф на все характеристики своих персонажей с каждой новой победой подряд! Проигравшие Дома накапливают дебаф.

```python
    if last_round_winner == nft.house:
        buff_koef *= 1 + winner_combo_count * 0.1
    else:
        buff_koef *= 1 - winner_combo_count * 0.1
```

Игрок может отправить свои NFT сражаться и в случае победы того Дома, к которому относится NFT, её можно послать добывать ресурсы! Персонажи, вошедшие в ТОП 10 по итогам сражения, получают награду до нескольких тысяч золотых! Выжившие в сражении так же получают золото!

Чтобы отправить персонажа в сражение, надо заплатить золото за его оснащение. Первый раз это дороже, далее если его убивают на дуэли, переотправка примерно вдвое дешевле. Но при этом цена отправки в сражение растёт с приближением конца раунда!&#x20;

После сражения все участвовавшие NFT победившего Дома могут пойти добывать ресурсы. Количество ресурсов, которое сможет добыть персонаж на фарме после сражения, зависит от его характеристик и времени, которое он провёл на добыче. Чем раньше вы отправили свои NFT на фарм после победы их Дома, тем больше они смогут добыть!

Ещё один фактор, который влияет не добычу - как долго длился раунд. Если он завершился досрочно, пул добычи будем пропорционально уменьшен. Всего на каждый раунд для фарма отводится всё золото, которое было у проигравших Домов в этом раунде и если эта сумма менее 10 000, игра автоматически пополнит пул до данного значения!

Для того, чтобы добывать ресурсы, ваша NFT должна участвовать в сражении и её Дом должен победить в раунде. Если же раунд окончился ничьей, пул золота формируется из сумм поддержки всех трёх Домов и добывать ресурсы могут все NFT, даже если они не были в сражении!

[Изгои ](https://arrakken-official.gitbook.io/wiki/izgoi)могут добывать ресурсы только при победе Дома, к которому они не относятся! Либо при ничьей.

Animal и Mech могут добывать ресурсы при победе любого Дома!

Во время фарма персонажи так же могут с неким шансом добыть редкие кристаллы, сила которых зависит от редкости NFT, добывшей его.

```python
    nft_round_weight = (time_now - nft.farm_start) / round_length
    farm_power = (nft.power ^ 1.75 + nft.stamina ^ 2 + nft.agility * nft.intelligence / 7) * ((nft.grade / 1.75 + nft.rarity * 4) ^ 1.85 / 100 + 1)
    luck_bonus = random(0, nft.luck) ^ 1.5
    nft_farm_power = farm_power * (luck_bonus / 100 + 1) * nft_round_weight
```

[**Как работает расчёт сражения**](#user-content-fn-1)[^1]

Дерутся сотни персонажей, игра знает только их параметры и кто из них какой Дом послан атаковать. Всё остальное - случайность. И чтобы она была максимально реалистична, сделано так, что каждый бой внутри большого сражения выбираются по одному случайному персонажу из каждого Дома, как если бы они оказались в бою рядом и начали атаковать друг друга.

Далее каждый наносит кому-то из тройки урон, согласно своим характеристикам и с учетом общей суммы черных камней Дома и суммы снабжения, которую Дому передали игроки в раунде.

При выборе цели сначала персонаж пытается найти тот Дом, который его отправили атаковать. Если такой противник вдруг не найден, атакуется случайный любой другой, в том числе может ударить сам себя, растерявшись в бою. Этот вариант так же в целом имитирует любые случайности в сражении, которые могут привести к гибели не по плану.

Далее выживает один персонаж, который получил урона меньше других, он продолжает сражаться, но не первым, а так же в тот момент, когда снова случай отберёт его в тройку.

Персонажи, которые уже прошли бой, накапливают урон в размере трети от того, который получили внутри боя "тройки". То есть те, кто выжил, понемногу ослабевают в следующих тройках. По итогам боя урон далее не переносится, он используется только в момент расчёта сражения!

Ранения, полученые на дуэлях, учитываются при финальном сражении! Убитые на дуэли перосонажи участвуют в сражении, но ослаблены.

```python
    power = ((nft.power ^ 2.25 + (nft.agility * 1.5 + nft.intelligence) * (nft.luck / 3 + nft.stamina / 2)) / 100) ^ (1 + (nft.rarity * 7 + nft.grade) / 50)

    if nft.dead_in_duels:
        power = power / 4
    else:
        power = power * (1 - nft.hits / 100)

    nft_power = random(power/2, power)
            
```

В конце сражения ТОП 30 лучших по числу побеждённых противников получают крупную награду золотом с учётом числа своих побед за сражение! Награду так же получают все выжившие, в зависимости от их количества и удачи.

```python
random(50, 300) * wins
```

```python
random(50, 200) * nft.luck / 70 / battle_winners_count * 10 
```

[^1]:
