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

759 Commits

Author SHA1 Message Date
Xilmi
aefe2fda36 Update BuildingBehavior.cpp
No longer rush a fort in a threatened town.
2024-09-10 23:42:51 +02:00
Xilmi
065125e770 Merge remote-tracking branch 'upstream/develop' into develop 2024-09-10 14:57:27 +02:00
Xilmi
df119370c7 Exploration
Slightly adjust the value of exploring within the hunter-gather-prirority.
2024-09-10 00:23:17 +02:00
Xilmi
37f9f93948 Update RecruitHeroBehavior.cpp
Modified how to score what hero to hire to make it more likely to rehire fled heroes with high levels when the army-gain from the hero would be rather insignificant.
2024-09-09 23:38:28 +02:00
Xilmi
faa5a02659 Update RecruitHeroBehavior.cpp
Fix potential division by zero.
2024-09-09 23:25:09 +02:00
Xilmi
a329f607c9 Update Nullkiller.cpp
No more map-hack on 3rd difficulty-level. Only starting from the fourth.
2024-09-09 23:23:28 +02:00
Xilmi
f8e4aa1d25 Update Nullkiller.cpp
Use Enum for Gold.
2024-09-09 23:20:53 +02:00
Xilmi
e7e3f6dcbe Update DefenceBehavior.cpp
Only hire heroes for defence if the enemy is already really close. (Otherwise AI hired too many heroes from defensebehavior)
2024-09-09 19:55:03 +02:00
Xilmi
8c3f6fc1e2 Update RecruitHeroBehavior.cpp
Fixed crash caused by mistakenly assuming that "pos" is the position of a hero on the map and not its bottom-right-corner that can be outside of the map.
2024-09-08 02:19:19 +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
099341e143 Update Nullkiller.cpp
Fixed incorrect trace-message at end of turn.
2024-09-06 22:10:14 +02:00
Xilmi
06f894140c Update BuildAnalyzer.cpp
Modified goldPressure-formula to no longer use completely arbitrary part of lockedresources/5000.
Lockedresources is now just divided by a factor of the free gold like everything else.
2024-09-06 21:42:15 +02:00
Xilmi
cf338e04ad Update Nullkiller.cpp
AI can now also buy resources that it has income for.
2024-09-06 21:40:23 +02:00
Xilmi
35d8705fea Update Nullkiller.cpp
prioOfTask-variable-usage bound to trace-level as otherwise a warning will ensue.
2024-09-06 17:20:12 +02:00
Xilmi
e43492d8b5 Update PriorityEvaluator.cpp
Fixed affordabilitycheck not being negated.
2024-09-06 00:12:44 +02:00
Xilmi
db2416cb6b Update Nullkiller.cpp
Readded prioOfTask because it's needed in trace-messages.
2024-09-05 23:41:05 +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
Ivan Savenko
8225eb454e Added GameSettings to gamestate, potentially allowing to define game
settings per map (or in random map template)
2024-09-05 15:16:27 +00:00
Xilmi
d9fe8d7fa0 Update BuyArmyBehavior.cpp
Removed pointless check for hero-army being more valuable than buying army directly as it was never the case anyways.
2024-09-05 16:50:22 +02:00
Xilmi
b3115f65c5 Update BuildingBehavior.cpp
Use std::numeric_limits<uint8_t>::max(); instead of  UINT8_MAX; and remove some leftover-trace-messages from debugging.
2024-09-05 16:45:45 +02:00
Xilmi
d5d9f3cb7d Merge branch 'develop' of https://github.com/xilmi/vcmi into develop 2024-09-05 16:40:21 +02:00
Xilmi
dafc9cd8a8 Update PriorityEvaluator.cpp
Replace float-comparisons with zero by vstd::isAlmostZero
2024-09-05 16:40:06 +02:00
Xilmi
c186de2d52
Update AI/Nullkiller/Behaviors/RecruitHeroBehavior.cpp
Avoid checking float against an exact value.

Co-authored-by: Ivan Savenko <saven.ivan@gmail.com>
2024-09-05 16:36:07 +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
b32c9615ed Update Nullkiller.cpp
Removed unused variable.
2024-09-05 15:59:09 +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
d0aefdfbe6 Update RecruitHero.cpp
Removed a A
2024-09-03 21:17:06 +02:00
Xilmi
9361278f81 Merge remote-tracking branch 'upstream/develop' into develop 2024-09-03 21:16:01 +02:00
Xilmi
64fad53532 Revert "Merge branch 'pr/4528' into develop"
This reverts commit f4578c6d3a, reversing
changes made to ac8e5b3711.
2024-09-03 20:51:13 +02:00
Andrii Danylchenko
07ae33b8f4 BattleAI: missing lock 2024-09-03 13:02:58 +03: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
c667ca46d1 Using correct priorityTier for Clusterization
Clusterizer now uses PriorityTier = 5 for evaluation, which is used to generate priority for guarded objects
2024-09-02 00:00:36 +02:00
Xilmi
64c3fbd519 Update ExecuteHeroChain.cpp
Now resetting the ObjectClusterizer as killing something might change the situation.
2024-09-01 23:58:47 +02:00
Xilmi
7c6f96344a Update Nullkiller.cpp
Removed resetAiState from loop cause it has too many side-effects. Such as the loop going through all passes.
2024-09-01 19:33:43 +02:00
Xilmi
0e91f10bbc Update Nullkiller.cpp
ResetAIState so that units realize what they can do after unlocking a cluster.
2024-09-01 17:21:53 +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
751f3b0e7d Update BuildingBehavior.cpp
Fixed an issue that prevented generating more building-tasks when there already were tasks.
2024-09-01 13:46:44 +02:00
Xilmi
be43c4d5f0 New hero-not acting
Fixed an issue that caused newly hired heroes to do nothing on the turn they were hired under certain circumstances.
2024-09-01 12:33:54 +02:00
Xilmi
0c488145b9 Update BuildAnalyzer.cpp
Revert unintentionally commited changes
2024-09-01 00:02:47 +02:00
Xilmi
72597b549b hero spread
Prefer hiring heroes at towns that don't have heroes nearby.
2024-08-31 23:00:27 +02:00
Xilmi
f4578c6d3a Merge branch 'pr/4528' into develop 2024-08-30 22:09:43 +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
MichalZ
e769e0a856
Merge branch 'vcmi:develop' into bug_fixes 2024-08-29 23:59:54 +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
Xilmi
b8dacfc0be Update Nullkiller.cpp
Fixed trade no longer working and changed log-output.
2024-08-29 20:49:01 +02:00
Xilmi
aea05b3fb8 Merge remote-tracking branch 'upstream/develop' into develop 2024-08-29 14:42:37 +02:00
MichalZr6
ca3d81f047 fix crash on heroRoles.clear() 2024-08-28 15:22:00 +02:00
Ivan Savenko
0fd9dbf240 Unified income handling, added IOwnableObject interface 2024-08-28 12:40:44 +00:00
Ivan Savenko
01396b62b7 Extracted handling of type ID's from serializer into a separate class 2024-08-26 19:48:46 +00:00
Ivan Savenko
b84af1a6de Significantly simplify packs applying
Apparently our logic for packs applying with types registration is
overcomplicated and by now completely unnecessary - it became redundant
after introduction of visitor pattern.
2024-08-26 19:48:46 +00:00
Ivan Savenko
11e8b04ac5
Merge pull request #4463 from SoundSSGood/IMarket-refactoring
IMarket refactoring
2024-08-26 22:48:23 +03:00
Xilmi
b92862c04d New priorities
Added more priority-tiers
2024-08-24 14:55:26 +02:00
Xilmi
1d494f049d Fix closest way ratio not initialized for ExecuteHeroChain
Fix closest way ratio not initialized for ExecuteHeroChain
2024-08-24 14:54:00 +02:00
Xilmi
bfd6ee2b09 Merge remote-tracking branch 'upstream/develop' into develop 2024-08-24 12:25:03 +02:00
Andrii Danylchenko
01b6828df6 BattleAI: fix init env 2024-08-22 21:20:22 +03:00
Andrii Danylchenko
bc80532f29 BattleAI: improve movement towards unreachable 2024-08-21 22:18:40 +03:00
SoundSSGood
2e3e6b1553 market->getObjInstanceID() 2024-08-21 01:01:23 +03:00
SoundSSGood
58bb2b58e3 IMarket suggestions
Co-authored-by: Ivan Savenko <saven.ivan@gmail.com>
2024-08-20 18:49:48 +03:00
SoundSSGood
fd45b5144d IMarket serializeable 2024-08-20 18:49:47 +03:00
Xilmi
11cec347f3 Merge remote-tracking branch 'upstream/develop' into develop 2024-08-20 16:17:29 +02:00
Xilmi
8cf99616d0 Update BuildingBehavior.cpp
Fixed a warning which, in this case, was actually also a logical error! :o
2024-08-19 21:21:56 +02:00
Xilmi
e86ca49c37 Update BuildingBehavior.cpp
Fixed warning
2024-08-19 21:15:25 +02:00
Xilmi
00e5770aa3 Update PriorityEvaluator.cpp
Revert change that made AI too passive.
2024-08-18 21:22:05 +02:00
Xilmi
e6d907af55 Merge remote-tracking branch 'upstream/develop' into develop 2024-08-18 09:52:59 +02:00
Xilmi
af7d5c7f7f Update RecruitHeroBehavior.cpp
Don't hire a hero in a town where another hero is currently defending against a threat. This would mean one of them has to stay outside and be exposed.
2024-08-18 09:50:32 +02:00
Xilmi
bdbb9d02fc Update DefenceBehavior.cpp
Fixed an issue where heroes that were leaving towns were still considered as defending the town.
2024-08-18 09:49:38 +02:00
Xilmi
65b8576687 Update BuyArmyBehavior.cpp
Allow building army in threatened town even when it wants to save for a building.
2024-08-18 09:49:02 +02:00
Xilmi
ea5ee039ca Update BuildingBehavior.cpp
Prioritize defensive buildings in threatened towns.
2024-08-18 09:48:16 +02:00
Xilmi
284f276108 Update Nullkiller.cpp
Don't trade away gold when the gold-pressure is high.
2024-08-18 09:47:37 +02:00
Xilmi
3be25d9414 Update PriorityEvaluator.cpp
Defend towns 1 turn earlier.
2024-08-18 09:47:05 +02:00
Ivan Savenko
f0448acaa3 TBB is now a dependency of lib. Implemented multithreaded xBRZ scale 2024-08-17 15:25:26 +00:00
Xilmi
8ad6d712c0 lowered aggression
Being less willing to rush across half the map to attack an enemy town only to find it too well defended when arriving there.
2024-08-15 18:16:23 +02:00
Xilmi
a79f76f32b Update Nullkiller.cpp
Fix issue with selling/buying the same resources back and forth. But probably leads to not using the market early on. (needs more testing)
2024-08-15 18:15:29 +02:00
Xilmi
6193e6224f Update FuzzyHelper.cpp
Added Multiplicative danger-modifier to citadels and castles.
2024-08-15 18:14:48 +02:00
Xilmi
f0ca1c6112 Update BuildAnalyzer.cpp
Removed the restrictions of the greedy-playstyle.
Only count forts as gold-producing prerequisites when no same- or higher-level fort exists somewhere else in the empire.
2024-08-15 18:13:44 +02:00
Xilmi
b7e4219fde More purposeful defending
Avoid defending towns that are out of reach for the enemy.
2024-08-14 22:53:48 +02:00
Xilmi
c10c04779f Adaptive Build-order
When not threatened by nearby enemies the AI adds missing gold-income-buildings towards gold-pressure. This impacts the build-order in a way that they try to rush these more and get up a good economy more quickly.
2024-08-14 22:52:19 +02:00
Ivan Savenko
49c5f650f7
Merge pull request #4437 from IvanSavenko/battle_sides
Unified handling of battle sides ID's
2024-08-14 18:37:05 +03:00
Ivan Savenko
5c7c4a7810
Merge pull request #4443 from IvanSavenko/fix_sonar
Fix miscellaneous issues discovered by Sonar
2024-08-14 17:12:27 +03:00
Ivan Savenko
38311244a4
Merge pull request #4402 from Laserlicht/8th_creature
support for 8th creature (Factory)
2024-08-14 17:04:32 +03:00
Ivan Savenko
97f1a310df Fix miscellaneous issues discovered by Sonar 2024-08-12 18:26:30 +00:00
Ivan Savenko
2a05fbdd50 Unified handling of battle sides ID's
- Replaced BattleSide namespace-enum with enum class
- Merged two different BattleSide enum's into one
- Merged BattlePerspective enum into BattleSide enum
- Changed all places that use integers to represent battle side to use
BattleSide enum
- Added BattleSideArray convenience wrapper for std::array that is
always 2-elements in size and allows access to its elements using
BattleSide enum
2024-08-11 20:54:44 +00:00
Xilmi
a7b26e237f Fix crash
Fixed a crash due to improperly trying to access "cb".
2024-08-11 21:59:06 +02:00
Xilmi
fba34a743e Update DefenceBehavior.cpp
Reverted previous change to defense-behavior.

Both approaches have pros and cons and neither really works as I want. This still needs work.
2024-08-11 18:23:52 +02:00
Xilmi
ed059393ec No more prio 3 tasks
The AI no longer performs prio 3 tasks, when no prio 0-2 tasks were found.
2024-08-11 18:23:02 +02:00
Xilmi
958aeb3a60 AI improvements
Deliberately defending towns in danger will now only be performed when the town has at least a citatel.

The AI will now count the buildings per town-type and add a score-bonus to dwellings of towns it already has a lot of buildings of. This shall help with getting a stronger army with less morale-issues.

Scoring for mage-guild now increased the bigger the existing armies are.

AI is less afraid of enemy-heros than previously.
2024-08-11 18:21:24 +02:00
Xilmi
5907aae057 Fixed AI not taking hero-strength into account when hero is garrisoned.
When evaluating their fighting-chance against towns with a garrisoned hero the AI didn't consider the attribute-boosts of the defending hero.
Now it does.
2024-08-11 17:59:10 +02:00
Xilmi
730e574bef Fixed AI ignoring garrisioned heroes when it comes to danger-analysis.
AI now considers garrisoned heros a potential threat for their heroes too.
2024-08-11 12:44:07 +02:00
Xilmi
99e4052dc0 Merge remote-tracking branch 'upstream/develop' into develop 2024-08-11 11:37:10 +02:00
Andrii Danylchenko
78dea24017 Visual logger colored text 2024-08-10 19:13:09 +03:00
Andrii Danylchenko
47c77826c3 Visual logger map texts 2024-08-10 13:04:35 +03:00
Laserlicht
170f375179 code review 2024-08-10 00:29:30 +02:00
Xilmi
ea4e412f9a Update Nullkiller.cpp
Only actual heroes and not nullptrs will exculde each other in comparison.
2024-08-07 01:37:15 +02:00
Xilmi
ec5da0e6b3 Update PriorityEvaluator.cpp
Further working towards heroes avoiding danger.
2024-08-07 01:36:27 +02:00
Laserlicht
475b769eef fix ToW 2024-08-07 01:35:50 +02:00
Xilmi
b0e4551dbf Update BuyArmyBehavior.cpp
No longer saving money for city-halls when city-halls cannot be built.
2024-08-07 01:35:17 +02:00
Laserlicht
14bcfad7b0 fix upgrade 2024-08-06 23:28:45 +02:00
Laserlicht
ebeeff5aa3 abstraction layer 2024-08-05 23:51:07 +02:00
Laserlicht
3afddbbf29 replaced constant 2024-08-05 23:03:19 +02:00
Xilmi
f4c0bee003 Merge remote-tracking branch 'upstream/develop' into develop 2024-08-05 21:53:59 +02:00
Xilmi
07108ce03d Update PriorityEvaluator.cpp
Allow defending in priority 2.
2024-07-25 21:49:17 +02:00
Xilmi
183ce82b99 Update Nullkiller.cpp
Readded prio-3 tasks for heroes when no prio 0-2 tasks were found. It's anything that doesn't lose more than the loss-threshold.
2024-07-25 21:48:44 +02:00
Xilmi
38da53135b Update DefenceBehavior.cpp
A town will no longer communitcate that it doesn't need defenses, when it currently has a garrisioned hero. Because otherwise the garrisoned hero would just leave and let the town undefended.
2024-07-25 21:47:56 +02:00
Laserlicht
bfd1e8a7c8 calculate income 2024-07-25 02:51:00 +02:00
Xilmi
909c308614 Update Nullkiller.cpp
Removed unused variable.
2024-07-24 21:46:18 +02:00
Xilmi
1e2021fb6d Update RecruitHero.h
Fix warning.
2024-07-24 21:41:49 +02:00
Xilmi
8152b003fe Update Nullkiller.cpp
Fixed a bug that caused tasks that are generated with an initial priority not being executed.
Fixed an error-message wrongfully claiming a hero was locked by STARTUP, when infact the hero was locked by something else (usually a hero-chain).
Recruiting-heros is now handled alongside buying army and buildings.
2024-07-24 21:26:53 +02:00
Xilmi
e2e3cd281c Update RecruitHero.h
Multiple orders for the same hero by different towns are now handled properly instead of trying to buy the same hero several times.
2024-07-24 21:23:20 +02:00
Xilmi
19b969406c Update PriorityEvaluator.cpp
Delivering troops to mains is now considered a priority 0 task that should immediately be fulfilled.
Defending nearby towns against nearby enemies is now also considered a priority 0 task.
Priority 0 tasks are now exclusively scored by distance and armyloss has only a cut-off-point instead of lowering the score.

Building-cost now has more impact on their score.
2024-07-24 21:22:14 +02:00
Xilmi
bbb5157f74 Update RecruitHeroBehavior.cpp
Reworked recruit-behavior to be a bit more conservative and avoid recruiting-sprees. Stuff like buying several heros in a row because the next one is always slightly better than the last but using up the whole starting-bank for that.
2024-07-24 21:17:04 +02:00
Xilmi
aade79720f Update BuildAnalyzer.cpp
Allow queuing citadels and castles on other days than satur- and sunday.
2024-07-24 21:14:27 +02:00
Xilmi
69b64a3241 Update ExplorationBehavior.cpp
Added missing bracked and changed indenting to make it less confusing.
2024-07-24 15:40:20 +02:00
Xilmi
34e4ab45ee Fixed what merge-conflict-handling had broken.
Restored exploration-without relying on memory but with included whirlpool
2024-07-24 15:21:17 +02:00
Xilmi
b83a214763 Merge remote-tracking branch 'upstream/develop' into develop 2024-07-24 14:59:24 +02:00
Andrii Danylchenko
dbcd7677ac
Merge pull request #4313 from vcmi/nkai-whirlpool
NKAI: whirlpool
2024-07-24 00:03:11 +03:00
Xilmi
69efe9cfda Merge remote-tracking branch 'upstream/develop' into develop 2024-07-22 20:15:40 +02:00
Ivan Savenko
4aa73b40c9 Split CTownHandler into smaller chunks 2024-07-21 18:21:48 +00:00
Xilmi
6f9309696d Merge remote-tracking branch 'upstream/develop' into develop 2024-07-21 19:06:14 +02:00
Andrii Danylchenko
683c363946 NKAI: whirlpool 2024-07-21 17:20:54 +03:00
Xilmi
945de7c369 More warnings
Removed unused code
2024-07-20 21:12:43 +02:00
Xilmi
ed82e2bf4a Warnings
Removed unused variable.
2024-07-20 21:02:39 +02:00
Ivan Savenko
1aa391fdf8 Split CGeneralTextHandler file into 1 file per class form
All text processing code is now located in lib/texts.
No changes other than code being moved around and adjustment of includes

Moved without changes:
Languages.h           -> texts/Languages.h
MetaString.*          -> texts/MetaString.*
TextOperations.*      -> texts/TextOperations.*

Split into parts:
CGeneralTextHandler.* -> texts/CGeneralTextHandler.*
                      -> texts/CLegacyConfigParser.*
                      -> texts/TextLocalizationContainer.*
                      -> texts/TextIdentifier.h
2024-07-20 12:55:17 +00:00
Xilmi
2bf7b3200b Merge remote-tracking branch 'upstream/develop' into develop 2024-07-19 22:05:58 +02:00
Xilmi
f0f40660c4 reverse getTotalArmyLoss()-change
Due to a recent fix in army-loss calculations this method should now work correctly the way it was.
2024-07-19 15:59:57 +02:00
Xilmi
fa2f883361 Merge remote-tracking branch 'upstream/develop' into develop 2024-07-19 15:26:31 +02:00
Xilmi
eb26b16823 Trace level
Increased AI-trace-level because I need it for debugging.
2024-07-19 15:26:14 +02:00
Xilmi
e374f24016 complete Building-costs as evaluation-context
Added building-cost including all resoruces as evaluation-context for more sophisticated building-selection and also as a countermeasure to softlocking a build-order by having no ways to obtain certain resources.
For example, if the AI would drop below 5 wood, while having no market-place and no wood-income it will avoid building any buildings that neither allow trading nor produce wood.
2024-07-19 15:25:24 +02:00
Xilmi
2d715f4d7e Trading logic
Added trading-logic to Nullkiller-AI.
The AI can now identify which resources it is lacking the most and buy them to fix softlocks in their build-order. It can also sell excess resources that it doesn't have a need for.
2024-07-19 15:21:56 +02:00
Xilmi
f094bf9602 Added marketplace to buildable buildings
Before marketplaces could only be built as part of a requirement for other buildings but not on their own when that other building already existed like it is the case in certain campaign-missions.
2024-07-19 15:19:27 +02:00
Xilmi
9c6d8762c5 Lowered restrictions from hero-hiring.
Removed two restrictions from hero-hiring, that prevented AI from hiring heros in certain scenarios.
2024-07-19 15:18:02 +02:00
Andrii Danylchenko
e9e5948d61 NKAI: take into account 7lvl creature cost when we consider what resources we need 2024-07-18 20:24:24 +03:00
Andrii Danylchenko
37dc2a38e8 NKAI: reduce double army loss cases 2024-07-18 13:38:25 +03:00
Andrii Danylchenko
7571fb7046 NKAI: fix gosolo when human is lead by gosolo AI + multiplayer 2024-07-17 17:09:04 +03:00
Ivan Savenko
1072356002
Merge pull request #4268 from IvanSavenko/pathnode_reduce
Reduce size of CGPathNode and AIPathNode
2024-07-17 13:08:05 +03:00
Xilmi
455ad648ae More warning fixes
heroRole is no longer needed here.
2024-07-15 20:09:11 +02:00
Xilmi
d4b4a6c4db Warnings
Commented out relics from debugging that were causing warnings for unused variables.
2024-07-15 19:57:33 +02:00
Xilmi
fbe1e171fe Merge remote-tracking branch 'upstream/develop' into develop 2024-07-15 18:36:19 +02:00
Xilmi
4a552d411c Decisionmaking-changes
There's 3 new evaluation-contexts that are now taken into account:
Whether an action is building, whether an action involves sailing and the newly introduced threat.

The value-evaluation of creatures now also takes special resources into account.

No longer treating other AIs differently than players when it comes to how afraid we shall be of them.

The cost of buildings for decision-making now determines missing resources. Available resources are ignored when it comes to how they impact the cost. But missing-resources will heftily impact the assumed price by calculating their market-value. This shall encourage the AI to rather build what it currently can build instead of saving up for something that it lacking the special resources for.

AI is no longer willing to sacrifice more than 25% of their army for any attack except when it has no towns left.

Revamped the priority-tiers of AI decision-making.

Higest priority is conquering enemy towns and killing enemy heroes. However, the AI will no longer try to do so when the target is more than one turn away and protected by a nearby enemy-hero that could kill the one tasked with dealing with the target. Except when they have no towns left. Then they get desperate and try everything.

As a general rule of thumb one could say the AI will prioritize conquest over collecting freebies over investing army to get something that isn't a city. It's a bit more complex than that but this is roughly what can be expected. It will also highly value their own heroes safety during all this.
2024-07-15 18:12:52 +02:00
Xilmi
95ba57dfe2 No more Startup-behavior
Startup-behavior was messing with my intended logic. Mostly by getting excess heroes for no real purpose other than that it could.
This wasted a lot of money that could be better invested on subsequent turns.
I removed it and playing-strength actually went up.
2024-07-15 17:50:30 +02:00
Xilmi
f8f10adb2e Take magic-capability into account for overall strength-estimation of hero-lead-armies
The magic-strength of a hero now checks if the hero has a spellbook and at least one combat-spell.
The impact of knowledge and spellpower to the hero's magic-strength is now also depending on it's current and max mana-pool-size as an empty mana-pool does not exactly contribute well to fights.

Replaced every call of getFightingStrength() with getHeroStrength() which uses both the fightingStrength and the (reworked) magicStrength to guess how much stronger a hero-lead army is.
2024-07-15 17:42:02 +02:00
Xilmi
83ffbdff2b Fix for double army-loss
Fixed that army loss was taken into account both for the path and the target-object. In certain cases, like a hero defending a town, this could lead to armyloss being twice as high as it should be.
2024-07-15 17:35:54 +02:00
Xilmi
e2e3f9e638 Take hero-stats into account for attacking hero-defended entities
Instead of using just the strength of the raw army, the hero-stats are now taking into account for the generation of the danger-map.
2024-07-15 17:30:42 +02:00
Xilmi
48ecbd4cbf Threat in DangerHitMap
Added new value threat to DangerHitMapAnalayzer. The purpose is to allow decisions to be less binary around enemy heros.
2024-07-15 17:28:10 +02:00
Xilmi
53c51b4278 Allow all buildings
Added resource-silo and special buildings to things that AI can theoretically build.
2024-07-15 17:26:06 +02:00
Ivan Savenko
04a81fee87 Reduce size of CGPathNode and AIPathNode 2024-07-15 07:49:04 +00:00
Andrii Danylchenko
6f5710e809
Merge pull request #4110 from vcmi/rewardables
NKAI: rewardables
2024-07-14 09:02:37 +03:00
Xilmi
d878d0ce18 Avoid being killed
Heroes with conquest-tasks will only endanger themselves to be killed when they can execute a conquest in the same turn.

Heroes with other tasks will dismiss any tasks except of defending when they'd be within one turn of an enemy hero that could kill them.
2024-07-12 23:36:41 +02:00