1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00
Commit Graph

177 Commits

Author SHA1 Message Date
Xilmi
33f5b473b3 Defender should not run off for troop-delivery
Fixed a rare case in which a town-defender could become an indirect part of a troop-delivery-task by doing a sub-task like capturing a shipyard that takes less than 1 turn but leaves him out in the open.
2024-12-13 21:50:45 +01:00
Xilmi
6536c9a18e Satisfy SonarCube 2024-12-12 14:58:29 +01:00
Xilmi
59497db428 Fixed isEnemy becoming true for things it shouldn't
Not sure whether it actually impacts behavior but better fix it either way.
2024-12-12 13:40:50 +01:00
Xilmi
32d85ce6ff Fix for retreating-behavior generally not working
Fixed that armyInvolvement was only filled in when the action involved a target to interact with rather than just a tile.
Since armyInvolvement was used for scoring actions such as retreating towards the closest town, this caused the AI to never retreat to their towns when they were supposed to.
2024-12-12 11:07:56 +01:00
Xilmi
347efa98a0 Introduced new priority-tiers for handling attacking and gathering near enemies that are really far away
So that the AI won't become too passive on giant maps.
2024-12-11 14:47:08 +01:00
Xilmi
650db73300 Ignore all ExceuteHeroChain-tasks with 0 movement-cost
These can happen when an enemy spawns ontop of an AI-hero. If the action would win, it wouldn't be executed anyways. So now AI does the next best thing instead, which likely what it wanted to do anyways.
2024-12-11 13:05:51 +01:00
Xilmi
df069bf14f Merge remote-tracking branch 'upstream/develop' into develop 2024-12-07 13:32:19 +01:00
Ivan Savenko
8c293ce156 First attempt to make per-difficulty configurations for AI 2024-12-05 15:08:04 +00:00
Xilmi
c007bbbcd8 AI improvements
AI will no longer skip turns with heroes that are waiting for a delivery that takes more than one turn. Instead they will do something until their delivery is close enough to get it at the same turn.

Fixed an issue where a bunch of heroes all tried to do the same tasks:
Tasks that involve no fighting will now always be performed by the closest eligible hero while all other heroes look for something else to do.
2024-12-03 23:09:13 +01:00
Ivan Savenko
7574842e93 Replace defines with constexpr 2024-11-28 15:08:15 +00:00
Xilmi
84571f1ae8 Update PriorityEvaluator.cpp
Just killing stuff even if there is no apparent reason now also is considered for the mere purpose of gaining XP.
This also helps the non-cheating AI to keep attacking enemies when they can't see anything worth exploring behind them.
2024-11-26 15:39:35 +01:00
Xilmi
2786797a4e Fixed incompatibility with latest merge
Incompatibility fix
2024-11-07 17:37:18 +01:00
Xilmi
a70f5de8c6 Merge remote-tracking branch 'upstream/develop' into develop 2024-11-07 14:35:13 +01:00
Xilmi
5979f53a26 Upgrade priority
New priority to upgrade existing armies to make it less likely to fight the AI with only part of its army.
2024-10-31 00:42:33 +01:00
Ivan Savenko
d3af9f1c67 Removed pointer to VLC entity from CStackBasicDescriptor 2024-10-30 16:47:02 +00:00
Ivan Savenko
c98ac01e7a Replaced public artType member of ArtifactInstance with getter 2024-10-30 16:47:01 +00:00
Xilmi
60084243af Update PriorityEvaluator.cpp
Fixed losing heroes while exploring.
2024-10-21 09:21:00 +02:00
Xilmi
76f5d925e6 Update PriorityEvaluator.cpp
The army loss will no longer affect the score for defensive decisions.
2024-10-21 08:59:18 +02:00
Xilmi
d93c6211da Road exploration
The non-cheating-AI on 100% and below is now smarter about exploration and will explore alongside roads with higher priority.
2024-10-20 23:32:39 +02:00
Xilmi
eb94c9f0be Update PriorityEvaluator.cpp
AI will be more aggressive when defending their territory. And more aggressive means more willing to take losses while fighting.
2024-10-10 18:53:28 +02:00
Xilmi
61fba1fedd Merge remote-tracking branch 'upstream/develop' into develop 2024-10-10 17:23:39 +02:00
Ivan Savenko
3dd4fa2528 Reduce usage of pointers to VLC entities
Final goal (of multiple PR's) is to remove all remaining pointers from
serializeable game state, and replace them with either identifiers or
with shared/unique pointers.

CGTownInstance::town and CGHeroInstance::type members have been removed.
Now this data is computed dynamically using subID member.

VLC entity of a town can now be accessed via following methods:
- getFactionID() returns ID of a faction
- getFaction() returns pointer to a faction
- getTown() returns pointer to a town

VLC entity of a hero can now be accessed via following methods:
- getHeroTypeID() returns ID of a hero
- getHeroClassID() returns ID of a hero class
- getHeroType() returns pointer to a hero
- getHeroClass() returns pointer to a hero class
2024-10-10 12:28:08 +00:00
Xilmi
0143a52755 Update PriorityEvaluator.cpp
Scores for all sorts of visitable and pickable objects are now unified in order to prevent AI from ignoring nearby valuables.
2024-10-02 20:12:47 +02:00
Xilmi
f7a961793a Update PriorityEvaluator.cpp
AI is more careful when gathering stuff near enemies.

The wasted movement-points are no longer considered when calculating which own city to fall back to when there's nothing better to do.
2024-09-29 01:23:13 +02:00
Xilmi
8d93c0c9c9 Update PriorityEvaluator.cpp
Removed workaround that was likely necessitated by other issues.
2024-09-27 23:03:35 +02:00
Xilmi
3b7834495d Update PriorityEvaluator.cpp
Fix an issue that caused AI to take their hero's attributes into consideration twice when calculating how much army they think they'll lose.

Fixed an issue where offensive defending didn't take into consideration whether the hero would actually be strong enough to beat the enemy hero it was trying to dispatch.
2024-09-27 19:38:07 +02:00
Xilmi
e4ef95f8dd Revert dynamic maxWillingToLose
Out maxWillingToLose back to a static 25%.
Dynamic could become too suicidal or too passive. 25% is a good sweetspot.
2024-09-25 16:12:53 +02:00
Xilmi
433c58f8b1 Workaround for previously masked issue
A recent fix made it so that towns that weren't supposed to be defended are now no longer defended.
This caused scouts with minimal army to also go after them in addition to the main-hero.
Problem is when two heroes go for the same town it's a massive waste of movement-points. So for the time being only main-heroes will go for faraway captures.
Better solution would be to memorize who was sent to attack what on the same turn and filter out tasks going for the same target.
2024-09-23 18:42:31 +02:00
Xilmi
20f7751e16 Weekend-decisions
When attacking non-neutral towns that are far away, the AI now considers whether their attack would arrive in the same week. If it wouldn't, it means there's a high risk that newly bought troops might flip around who is stronger. So they now refrain from sending a hero towards an enemy town that is too far away.
2024-09-23 01:25:58 +02:00
Xilmi
90d72a4458 Chase & FFA-changes
The AI should no longer chase enemy heroes that are not reachable in the same turn, when there's other options as this behavior was quite exploitable.

The AI should now take their overall strength into account when deciding whether to attack or not.
Previously it would attack as long as their assumed army-loss was at most 25%.
Now that is 50% times the ratio of their power compared to the total power of everyone.
2024-09-22 13:06:07 +02:00
Xilmi
c88165f900 Update PriorityEvaluator.cpp
Whirlpools are no longer explorePriority 1 as the AI would then try out all of it's 5 entries on both sides.
2024-09-14 13:41:14 +02:00
Xilmi
22222f0fba Priorization-improvements
Manarecoveryreward now uses float instead of unsigned int in order to avoid extremely high instead of negative scores when the hero has more mana than his mana-limit for example due to mana-vortex.

Moved upgrading armies to a lower priority tier as otherwise the AI would go back to their cities all the time even though there were plenty of other things to do.

Improved exploration logic by putting different kinds of exploration to different priority-tiers.
Looking at the other side of a portal has high priority, visiting an observatory has medium priority and scouting by visiting nearby tiles has low priority.
2024-09-14 02:58:23 +02:00
Xilmi
ab441d8e67 Update PriorityEvaluator.cpp
AI now should no longer ignore spell-scrolls and artifacts of the treasure-class.
2024-09-13 23:06:49 +02:00
Xilmi
af2df5763f Update PriorityEvaluator.cpp
Only if there is a high gold-pressure a buildings' cost will deter from its score.
2024-09-12 22:53:45 +02:00
Xilmi
a1a03d4b74 Merge remote-tracking branch 'upstream/develop' into develop 2024-09-12 14:54:39 +02:00
Ivan Savenko
29f393e024 Removed hardcoded checks for map objects in favor of analyzing
rewardable object content
2024-09-12 12:11:18 +00:00
Xilmi
df119370c7 Exploration
Slightly adjust the value of exploring within the hunter-gather-prirority.
2024-09-10 00:23:17 +02:00
Xilmi
0edc17b7d8 Going to town when nothing to do.
The StayAtTown-behavior now always creates tasks for all heroes to go and stay at a town. It will be treated differently than going to a town for mana in the sense that it is only considered at the lowest priority-tier. So it will only happen when the AI doesn't find anything else to do. It should resolve one of the two main-reasons for losing weak heros.

The hunter-gather-priority-tier now goes strictly by distance for all taks that are considered above 0 in value.
2024-09-06 22:14:59 +02:00
Xilmi
e43492d8b5 Update PriorityEvaluator.cpp
Fixed affordabilitycheck not being negated.
2024-09-06 00:12:44 +02:00
Xilmi
5488a0a29c Removed the "GATHER"-priorityTier
There was no real need for it to be a separated tier from Hunter_gather.
2024-09-05 19:35:47 +02:00
Xilmi
dafc9cd8a8 Update PriorityEvaluator.cpp
Replace float-comparisons with zero by vstd::isAlmostZero
2024-09-05 16:40:06 +02:00
Xilmi
23cd54c998 Preparations for merge
No longer using FuzzyEngine just to create a log-message. It's now only used when isUseFuzzy is set.
Also:
Removed < operator and instead use already existing "canAfford"-Method.
2024-09-05 16:22:25 +02:00
Xilmi
db16a9d234 A bit of clean-up for merge
Set back trace level to 0
Removed EvaluationContexts that weren't used
Encapsulated many debug-messages behinde trace-levels
2024-09-04 16:41:47 +02:00
Xilmi
1176628a88 Update PriorityEvaluator.cpp
Workaround for weird -nan(ind) closestWayRatios.
2024-09-02 01:37:21 +02:00
Xilmi
09badeb5be Enum for PriorityTiers
In order to not confuse PriorityTiers, especially after adding new ones, now using an enum to identify them.
2024-09-02 00:16:19 +02:00
Xilmi
1ef5e8ab1b Update PriorityEvaluator.cpp
Prevent building more buildings when we are saving for our favorite building.
2024-09-01 13:47:30 +02:00
Xilmi
ac8e5b3711 Update PriorityEvaluator.cpp
AI should score citadels and castles higher for better developed towns so that it focuses on finishing the main-town quicker as opposed to developing several smaller towns simultaneously.
2024-08-30 21:02:50 +02:00
Xilmi
56988e054a New priority
1. Take / kill what is reachable in same turn
2. Defend
3. Take / kill what is further away
2024-08-30 18:05:47 +02:00
Xilmi
05d948b582 Priorities
Swapped priority of attacking and defending.
Troop-delivery-missions will check safety of the delivering hero.
2024-08-30 16:46:36 +02:00
Xilmi
dcec5637cd Fix for defense-evaluation.
Defense-evaluation didn't fill armyInvolvement but it was what created the score for it. So there was only score if it also included a HeroExchange.
2024-08-29 21:01:06 +02:00