1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-16 10:19:47 +02:00
Commit Graph

258 Commits

Author SHA1 Message Date
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
ed82e2bf4a Warnings
Removed unused variable.
2024-07-20 21:02:39 +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
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
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
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
Xilmi
102b537353 Recruit-behavior
Moved recruit-behavior back to tasks that plans get made for since otherwise it can mess up plans by blocking town-exits.
2024-07-12 23:33:58 +02:00
Xilmi
92bed2305e priority-tiers
Tasks are now in different priority-tiers. For now there's 2 tiers. One for regular tasks and one for tasks of the new "conquest"-type. Regular tasks will only be considered when no possible conquest-type tasks were found.

Slightly reworked scoring heuristics.
2024-07-12 17:41:46 +02:00
Xilmi
9456ab41da Priority-tier
Openmap is no longer tied to difficulty-level due to being configurable anyways.

Tasks are now in different priority-tiers. For now there's 2 tiers. One for regular tasks and one for tasks of the new "conquest"-type. Regular tasks will only be considered when no possible conquest-type tasks were found.

Recruit-hero-behavior is now evaluated before movement to make it more likely a new hero can exchange their stuff with others.
2024-07-12 17:39:52 +02:00
Xilmi
d4308c2ce4 Merge branch 'fixes_only' into develop 2024-07-07 22:52:03 +02:00
Xilmi
a72d23ed8d Debug-Info
Added some debug-info and non-fuzzy-specific-priority-cutoff.
2024-07-07 22:51:50 +02:00
Xilmi
7b407b6432 AI-variant without fuzzy-logic
It is now possible to switch to an AI-variant that uses hand-written heuristics for decision-making rather than the FuzzyLite-engine. This is configurable in nkai-settings.json via the new parameter "useFuzzy".
2024-07-07 22:44:52 +02:00
Andrii Danylchenko
1be36e1ad4 NKAI: rewardables 2024-07-07 21:58:39 +03:00
Xilmi
734f815e67 Sorting tasks after buildPlan
Tasks need to be sorted again after buildPlan as otherwise the correct order isn't guaranteed. This led to inconsistent behavior by the AI.
2024-07-07 15:12:05 +02:00
Alexander Wilms
02e429e973 Fix typos using https://github.com/crate-ci/typos
Changes were reviewed manually
2024-06-24 03:47:19 +02:00
Ivan Savenko
b4c6906471 Merge branch 'vcmi/beta' into 'vcmi/develop' 2024-06-11 19:22:23 +00:00
Ivan Savenko
b8beb4fb13 Fixes for various minor issues detected by Sonar Cloud 2024-06-01 11:48:30 +00:00
Andrii Danylchenko
7bf047ff18 #4066 - fix exploration 2024-06-01 13:13:51 +03:00
Andrii Danylchenko
820f0e0c1a NKAI: port exploration from VCAI 2024-05-20 23:50:13 +03:00
Andrii Danylchenko
1388fb1493 NKAI: port exploration from VCAI 2024-05-20 22:43:23 +03:00
Ivan Savenko
721b15d9de Merge branch 'vcmi/master' into 'vcmi/develop' 2024-05-17 08:26:37 +00:00
Andrii Danylchenko
98afd43969 #3941 - recruit hero when no heroes 2024-05-12 21:10:31 +03:00
Ivan Savenko
30e0a16ee9 Fix some 'new' issues reported by Sonar Cloud 2024-05-06 15:33:30 +00:00
Andrii Danylchenko
afa766c763 #3824 - fix cluster unlock 2024-04-27 10:57:30 +03:00
Andrii Danylchenko
6e641dbdea #3824 - fix empty army with only commander issues 2024-04-26 23:18:20 +03:00
Andrii Danylchenko
b4abb3a56c
Merge pull request #3814 from vcmi/fixes
NKAI: fix patrolling heroes never retreat and town danger evaluation
2024-04-23 18:52:47 +03:00
Ivan Savenko
e8e4446886 Simplify NKAI settings loading code 2024-04-22 11:14:58 +03:00
Ivan Savenko
20f323d83c Added 'useTroopsFromGarrisons' option to NKAI 2024-04-22 11:14:57 +03:00
Andrii Danylchenko
390136e536 NKAI: fix patrolling heroes never retreat and town danger evaluation 2024-04-21 14:23:58 +03:00
Andrii Danylchenko
7aff0e63fc NKAI: fix parallel access to object graph 2024-04-21 12:27:58 +03:00
Andrii Danylchenko
70fad45316
Merge pull request #3770 from vcmi/nkai-multitask
NKAI: allow multiple tasks to be executed from one calculation
2024-04-20 15:21:11 +03:00
Andrii Danylchenko
3939c4b9d3 NKAI: stability fixes and regression 2024-04-20 14:32:58 +03:00
Alexander Wilms
7d925b3689 Fix typo: Preasure -> Pressure 2024-04-16 21:10:15 +00:00
Andrii Danylchenko
ed76d8a652 NKAI: allow multiple tasks to be executed from one calculation 2024-04-14 16:46:05 +03:00
Andrii Danylchenko
728f673763 NKAI: remove static ai field 2024-03-31 21:11:25 +03:00
Andrii Danylchenko
d6f1a5c2b3 NKAI: parallel capture objects 2024-03-29 20:39:03 +02:00
Andrii Danylchenko
6245adb9a4 NKAI: configurable object graph 2024-03-08 14:39:16 +02:00
Andrii Danylchenko
5f8a157c6d NKAI: rollback changes with removing scan depth 2024-03-03 10:21:17 +02:00
Andrii Danylchenko
b236384356 NKAI: graph add battle layer 2024-03-02 15:54:05 +02:00
Andrii Danylchenko
a090441672 NKAI: object graph second layer not operational yet 2024-03-02 15:54:03 +02:00
Andrii Danylchenko
376a17409f NKAI: initial implementation of object graph 2024-03-02 15:52:45 +02:00
Andrii Danylchenko
35429eab52 NKAI: moddable configuration 2024-03-01 22:03:07 +02:00
Alexander Wilms
678cacbd25 Remove more redundant virtual specifiers
`grep -nr "virtual " | grep -v googletest | grep " override" | grep -v overriden > ../redundant_virtual.txt`

```python
import os

with open("../redundant_virtual.txt") as f:
    for line in f:
        print()
        line: str = line.strip()
        print(line)
        tmp = line.split(":",2)
        file = tmp[0].strip()
        code = tmp[-1].strip()
        print(file)
        print(code)
        new_code = code.replace("virtual ", "", 1)
        # https://superuser.com/a/802490/578501
        command = f"export FIND='{code}' && export REPLACE='{new_code}' && ruby -p -i -e \"gsub(ENV['FIND'], ENV['REPLACE'])\" {file}"
        os.system(command)
```
2024-02-13 15:21:30 +01:00
Andrii Danylchenko
0c1664dbe7 NKAI: various AI fixes after tests in headless 2024-01-20 22:55:30 +02:00
Andrii Danylchenko
1db43a509e NKAI: fix casting FLY several times during path calculation 2024-01-20 22:55:28 +02:00
Andrii Danylchenko
36bc9ddcec NKAI: mutex for internal AI state 2024-01-20 22:55:27 +02:00
Andrii Danylchenko
cc7fc4a2c6 Fix headless mode 2024-01-20 22:55:27 +02:00
Ivan Savenko
d04241b10a Code cleanup 2024-01-19 23:02:00 +02:00
Ivan Savenko
60ffb81b33 Replaced remaining placeholder code with callbacks 2024-01-19 13:55:22 +02:00
Ivan Savenko
a15366f5a5 Make IObjectInterface::cb non-static 2024-01-19 13:55:21 +02:00
Alexander Wilms
f3277b7953 Define each identifier in a dedicated statement 2024-01-10 00:22:23 +00:00
Ivan Savenko
8346d71c98 Remove more subID access 2023-11-01 14:44:05 +02:00
Alexander Wilms
5cbc75d3b7 Merge remote-tracking branch 'upstream/develop' into develop 2023-10-29 13:35:37 +00:00
Alexander Wilms
0a6c82c639 AI/Nullkiller/Behaviors/DefenceBehavior.{h,cpp}: treat -> threat 2023-10-27 23:34:11 +00:00
Andrii Danylchenko
9eb9404f28 BattleAI: divide only positive part of score onto turns count 2023-10-22 21:37:54 +03:00
Ivan Savenko
ac925bb786 Renamed new types for consistency with code style 2023-10-22 16:55:19 +03:00
Ivan Savenko
80e6485965 MetaIdentifier now uses std::variant internally 2023-10-22 16:55:19 +03:00
Ivan Savenko
77facf9387 Implement missing functions, fixes linking errors 2023-10-22 16:54:56 +03:00
Ivan Savenko
910ad50417 Fix client & server compilation 2023-10-22 16:54:48 +03:00
Ivan Savenko
0a10fc30b8 (lib) Bonus subtype is now stored as metaidentifier that can store any
other identifier inside it
2023-10-22 16:54:43 +03:00
Ivan Savenko
fd01a25352 Implemented basic version of configurable Witch Hut 2023-10-16 00:12:38 +03:00
Andrii Danylchenko
ebe155fa95 NKAI: mana recovery 2023-09-30 10:37:36 +03:00
Alexander Wilms
6c15e5b426 Add include path of a more recent version of fuzzylite, which is required to build it with gcc 12.2.0
a651f3d13e
2023-09-16 05:13:16 +00:00
Ivan Savenko
823ffa7a07 Always use ResourcePath for referencing images and animations 2023-09-04 18:22:34 +03:00
Ivan Savenko
ce20d913e0 Fix checking PlayerColor's for validness 2023-08-27 01:35:38 +03:00
Andrii Danylchenko
274bf739b8 BattleAI: damage cache and switch to different model of spells evaluation 2023-08-26 13:06:51 +03:00
Ivan Savenko
62cd8b12d4 Converted several namespace enums to enum class 2023-08-25 13:38:02 +03:00
Ivan Savenko
87957e74c1 Replaced boost::thread_specific_ptr with thread_local 2023-08-23 16:32:29 +03:00
Andrii Danylchenko
60f0a4553a NKAI: fix freeze on army gathering 2023-08-06 09:03:29 +03:00
Andrii Danylchenko
ccfc6f5716 NKAI: increase towns priority, buy heroes more often 2023-07-31 22:01:12 +03:00
Andrii Danylchenko
f1a9ae99ee NKAI: various behavior fixes, undo max_gold_preasure 2023-07-31 22:01:12 +03:00
Andrii Danylchenko
fb7477047a NKAI: loosen gold presure on build system. 2023-07-31 22:01:12 +03:00
Andrii Danylchenko
6490c65490 nkai: fix freezes 2023-07-31 22:01:12 +03:00
Andrii Danylchenko
c93bb0a502 nkai: fixes and skill rewards 2023-07-31 22:01:11 +03:00
Tomasz Zieliński
e483f06e0f Remove unused variable 2023-07-31 22:01:11 +03:00
Tomasz Zieliński
5bffea0aac Use new interface 2023-07-31 22:01:11 +03:00
Andrii Danylchenko
0fd118d3ce NKAI: gold reward 2023-07-31 22:01:11 +03:00
Andrii Danylchenko
6ba74f02bc NKAI: playing around with defence 2023-07-31 22:01:11 +03:00
Andrii Danylchenko
b19ac01bf9 Fuzzy rework, added more defence and gather army routines 2023-07-31 22:01:10 +03:00
Andrii Danylchenko
b1ca663eb6 Fuzzy rework 2023-07-31 22:01:10 +03:00
Ivan Savenko
85262cf4f5 Moved CGameState files into a separate directory 2023-06-26 17:15:59 +03:00
Ivan Savenko
08cfbe79cf Added encapsulation for movement points access 2023-06-25 17:42:36 +03:00
Ivan Savenko
87fcfa4add Removed excessive pathfinder includes 2023-06-21 12:00:44 +03:00
Ivan Savenko
5cfbdd2967 Partially split CommonConstructors.cpp into few separate files 2023-06-16 17:59:10 +03:00
Ivan Savenko
d6a357fd17 Split some map object files into smaller files. Reduced includes usage. 2023-06-02 21:47:37 +03:00
Konstantin
05eccbc2bb vcmi: split bonus to enumerator and HeroBonus.h 2023-05-03 18:01:06 +03:00
Konstantin
af25ad0866 vcmi: split creatures and faction members 2023-05-02 00:53:50 +03:00
nordsoft
97a1758e8e Merge remote-tracking branch 'upstream/develop' into rewardable-expand 2023-05-01 21:51:10 +04:00
nordsoft
eb577a03b5 Deprecating enum constants 2023-05-01 21:49:37 +04:00
nordsoft
203d0a4f91 Merge remote-tracking branch 'upstream/develop' into rewardable-expand
# Conflicts:
#	lib/JsonRandom.cpp
2023-05-01 02:07:20 +04:00
nordsoft
1b4d117790 deeper decoupling 2023-04-30 17:13:07 +04:00
Konstantin
86f5d6de69 vcmi: modernize headers 2023-04-30 13:35:54 +03:00
nordsoft
e47bb3f1f9 Separate configuration and object 2023-04-30 00:59:02 +04:00
Andrii Danylchenko
fbc9a32ad8 #2018 - fix shipyard usage for NKAI, allied shipyard should work now 2023-04-22 18:42:36 +03:00
Ivan Savenko
3738171b21 Refactoring of H3M loader to make HotA format support easier
- extracted low-level reader from MapFormatH3M class
- added separate structure to define version-specific values
- cleared up some H3M format edge cases
- replaced witch hut skill vector with set
- converted several fields to enum type
2023-04-15 17:20:38 +03:00
Ivan Savenko
63b197b78a Converted attributes to use c++17 functionality 2023-04-12 01:03:14 +03:00