1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-04-13 11:40:38 +02:00

"More stable" opening AI.

This commit is contained in:
Michał W. Urbańczyk 2013-01-20 12:06:49 +00:00
parent 0e826915ed
commit 5b919d88eb
3 changed files with 23 additions and 10 deletions

View File

@ -71,9 +71,12 @@ CBattleAI::~CBattleAI(void)
{
print("destroyed");
//Restore previous state of CB - it may be shared with the main AI (like VCAI)
cb->waitTillRealize = wasWaitingForRealize;
cb->unlockGsWhenWaiting = wasUnlockingGs;
if(cb)
{
//Restore previous state of CB - it may be shared with the main AI (like VCAI)
cb->waitTillRealize = wasWaitingForRealize;
cb->unlockGsWhenWaiting = wasUnlockingGs;
}
}
void CBattleAI::init( CBattleCallback * CB )

View File

@ -616,16 +616,20 @@ void processCommand(const std::string &message)
std::string fname;
readed >> fname;
tlog0 << "Will try loading that AI to see if it is correct name...\n";
if(auto ai = CDynLibHandler::getNewBattleAI(fname)) //test that given AI is indeed available... heavy but it is easy to make a typo and break the game
try
{
delete ai;
Settings neutralAI = settings.write["server"]["neutralAI"];
neutralAI->String() = fname;
tlog0 << "Setting changed, from now the battle ai will be " << fname << "!\n";
if(auto ai = CDynLibHandler::getNewBattleAI(fname)) //test that given AI is indeed available... heavy but it is easy to make a typo and break the game
{
delete ai;
Settings neutralAI = settings.write["server"]["neutralAI"];
neutralAI->String() = fname;
tlog0 << "Setting changed, from now the battle ai will be " << fname << "!\n";
}
}
else
catch(std::exception &e)
{
tlog3 << "Setting not changes, no such AI found!\n";
tlog3 << "Failed opening " << fname << ": " << e.what() << std::endl;
tlog3 << "Setting not changes, AI not found or invalid!\n";
}
}
else if(client && client->serv && client->serv->connected && LOCPLINT) //send to server

View File

@ -51,6 +51,12 @@ rett * createAny(std::string dllname, std::string methodName)
tlog1 << "Cannot open dynamic library ("<<dllname<<"). Throwing..."<<std::endl;
throw std::runtime_error("Cannot open dynamic library");
}
else if(!getName || !getAI)
{
tlog1 << dllname << " does not export method " << methodName << std::endl;
FreeLibrary(dll);
throw std::runtime_error("Cannot find method " + methodName);
}
getName(temp);
tlog0 << "Loaded " << temp << std::endl;