MantisBT

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0003038VCMIAI - Adventure Mappublic2019-02-15 10:052022-03-18 16:16
Reportermpech 
Assigned ToNullkiller 
PrioritynormalSeverityminorReproducibilityalways
StatusresolvedResolutionfixed 
PlatformUbuntu 16.04.5 LTSOSOS Version
Product Version 
Target VersionFixed in Version1.next 
Summary0003038: core in FuzzyHelper::evaluateDanger
Descriptionhi guys,

from commit (5f87c98) no problem
from commit (6165954): core

modules are death valley, preserve and retreat


#0 FuzzyHelper::evaluateDanger (this=this@entry=0x7f58a12e0c50, obj=obj@entry=0x7f58b2d9c8b0) at /home/mpech2/dl/vcmi/AI/VCAI/FuzzyHelper.cpp:288
288 cb->getTownInfo(obj, iat);
[Current thread is 1 (Thread 0x7f58bcdc0700 (LWP 12907))]
(gdb) bt
#0 FuzzyHelper::evaluateDanger (this=this@entry=0x7f58a12e0c50, obj=obj@entry=0x7f58b2d9c8b0) at /home/mpech2/dl/vcmi/AI/VCAI/FuzzyHelper.cpp:288
#1 0x00007f58cce4efc6 in FuzzyHelper::evaluateDanger (this=0x7f58a12e0c50, tile=..., visitor=0x7f58b1f13ea0, cb=0x7f58a14514a0)
    at /home/mpech2/dl/vcmi/AI/VCAI/FuzzyHelper.cpp:234
0000002 0x00007f58cce30739 in AINodeStorage::evaluateDanger (tile=..., this=<optimized out>)
    at /home/mpech2/dl/vcmi/AI/VCAI/Pathfinding/Rules/../AINodeStorage.h:118
0000003 AIPathfinding::AIMovementAfterDestinationRule::process (this=<optimized out>, source=..., destination=..., pathfinderConfig=<optimized out>,
    pathfinderHelper=<optimized out>) at /home/mpech2/dl/vcmi/AI/VCAI/Pathfinding/Rules/AIMovementAfterDestinationRule.cpp:124
0000004 0x00007f58f691ed8b in CPathfinder::calculatePaths (this=this@entry=0x7f58bcdbf8c0) at /home/mpech2/dl/vcmi/lib/CPathfinder.cpp:364
0000005 0x00007f58f68c88d2 in CGameState::calculatePaths (this=<optimized out>, config=..., hero=<optimized out>)
    at /home/mpech2/dl/vcmi/lib/CGameState.cpp:1980
Steps To Reproduceload game,
end turn
crashes during ai turn
Additional Information
Not sure about fuzzyHelper::
extern boost::thread_specific_ptr<CCallback> cb;
(could not find where cb variable would be written)

however at some point this variable is accessed instead of the one provided as argument (from AINodeStorage)
not sure sure if diff below is acceptable but somehow it solves the core for me (removed AIUtility::compareDanger since not used along the way)

From 4fb2a68069de26edc18b54ea71a2ea3b4ab325ff Mon Sep 17 00:00:00 2001
From: mpech <xx>
Date: Fri, 15 Feb 2019 10:47:30 +0100
Subject: [PATCH] fix core

---
 AI/VCAI/AIUtility.cpp | 6 ------
 AI/VCAI/FuzzyHelper.cpp | 8 ++++----
 AI/VCAI/FuzzyHelper.h | 2 +-
 3 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/AI/VCAI/AIUtility.cpp b/AI/VCAI/AIUtility.cpp
index 7881893..efe6949 100644
--- a/AI/VCAI/AIUtility.cpp
+++ b/AI/VCAI/AIUtility.cpp
@@ -194,12 +194,6 @@ bool CDistanceSorter::operator()(const CGObjectInstance * lhs, const CGObjectIns
    return ln->cost < rn->cost;
 }
 
-
-bool compareDanger(const CGObjectInstance * lhs, const CGObjectInstance * rhs)
-{
- return fh->evaluateDanger(lhs) < fh->evaluateDanger(rhs);
-}
-
 bool isSafeToVisit(HeroPtr h, crint3 tile)
 {
    return isSafeToVisit(h, fh->evaluateDanger(tile, h.get()));
diff --git a/AI/VCAI/FuzzyHelper.cpp b/AI/VCAI/FuzzyHelper.cpp
index 288b435..0f5ef54 100644
--- a/AI/VCAI/FuzzyHelper.cpp
+++ b/AI/VCAI/FuzzyHelper.cpp
@@ -231,7 +231,7 @@ ui64 FuzzyHelper::evaluateDanger(crint3 tile, const CGHeroInstance * visitor, co
 
    if(const CGObjectInstance * dangerousObject = vstd::backOrNull(visitableObjects))
    {
- objectDanger = evaluateDanger(dangerousObject); //unguarded objects can also be dangerous or unhandled
+ objectDanger = evaluateDanger(dangerousObject, cb); //unguarded objects can also be dangerous or unhandled
        if(objectDanger)
        {
            //TODO: don't downcast objects AI shouldn't know about!
@@ -251,7 +251,7 @@ ui64 FuzzyHelper::evaluateDanger(crint3 tile, const CGHeroInstance * visitor, co
                auto guards = cb->getGuardingCreatures(it->second->visitablePos());
                for(auto cre : guards)
                {
- vstd::amax(guardDanger, evaluateDanger(cre) * tacticalAdvantageEngine.getTacticalAdvantage(visitor, dynamic_cast<const CArmedInstance *>(cre)));
+ vstd::amax(guardDanger, evaluateDanger(cre, cb) * tacticalAdvantageEngine.getTacticalAdvantage(visitor, dynamic_cast<const CArmedInstance *>(cre)));
                }
            }
        }
@@ -260,14 +260,14 @@ ui64 FuzzyHelper::evaluateDanger(crint3 tile, const CGHeroInstance * visitor, co
    auto guards = cb->getGuardingCreatures(tile);
    for(auto cre : guards)
    {
- vstd::amax(guardDanger, evaluateDanger(cre) * tacticalAdvantageEngine.getTacticalAdvantage(visitor, dynamic_cast<const CArmedInstance *>(cre))); //we are interested in strongest monster around
+ vstd::amax(guardDanger, evaluateDanger(cre, cb) * tacticalAdvantageEngine.getTacticalAdvantage(visitor, dynamic_cast<const CArmedInstance *>(cre))); //we are interested in strongest monster around
    }
 
    //TODO mozna odwiedzic blockvis nie ruszajac straznika
    return std::max(objectDanger, guardDanger);
 }
 
-ui64 FuzzyHelper::evaluateDanger(const CGObjectInstance * obj)
+ui64 FuzzyHelper::evaluateDanger(const CGObjectInstance * obj, const CPlayerSpecificInfoCallback * cb)
 {
    if(obj->tempOwner < PlayerColor::PLAYER_LIMIT && cb->getPlayerRelations(obj->tempOwner, ai->playerID) != PlayerRelations::ENEMIES) //owned or allied objects don't pose any threat
        return 0;
diff --git a/AI/VCAI/FuzzyHelper.h b/AI/VCAI/FuzzyHelper.h
index 679c4f6..8826817 100644
--- a/AI/VCAI/FuzzyHelper.h
+++ b/AI/VCAI/FuzzyHelper.h
@@ -43,7 +43,7 @@ public:
    Goals::TSubgoal chooseSolution(Goals::TGoalVec vec);
    //std::shared_ptr<AbstractGoal> chooseSolution (std::vector<std::shared_ptr<AbstractGoal>> & vec);
 
- ui64 evaluateDanger(const CGObjectInstance * obj);
+ ui64 evaluateDanger(const CGObjectInstance * obj, const CPlayerSpecificInfoCallback * _cb);
    ui64 evaluateDanger(crint3 tile, const CGHeroInstance * visitor, const CPlayerSpecificInfoCallback * cb);
    ui64 evaluateDanger(crint3 tile, const CGHeroInstance * visitor);
 };
--
2.7.4
TagsNo tags attached.
Attached Fileszip file icon sun2.zip [^] (2,014,265 bytes) 2019-02-15 10:05

- Relationships

-  Notes
(0007750)
Nullkiller (developer)
2019-02-16 09:14
edited on: 2019-02-16 09:15

Will be fixed in https://github.com/vcmi/vcmi/pull/552 [^]


- Issue History
Date Modified Username Field Change
2019-02-15 10:05 mpech New Issue
2019-02-15 10:05 mpech File Added: sun2.zip
2019-02-15 11:12 AVS Assigned To => Nullkiller
2019-02-15 11:12 AVS Status new => assigned
2019-02-16 09:14 Nullkiller Note Added: 0007750
2019-02-16 09:15 Nullkiller Note Edited: 0007750 View Revisions
2022-03-18 16:16 Povelitel Status assigned => resolved
2022-03-18 16:16 Povelitel Fixed in Version => 1.next
2022-03-18 16:16 Povelitel Resolution open => fixed

Site | Forums | Wiki | Slack | GitHub


Copyright © 2000 - 2024 MantisBT Team
Hosting provided by DigitalOcean