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

Logging cleanup.

This commit is contained in:
AlexVinS 2017-08-11 14:38:10 +03:00
parent c293589c07
commit 64d9dadd64
30 changed files with 146 additions and 149 deletions

View File

@ -130,7 +130,7 @@ SDL_Surface * BitmapHandler::loadBitmapFromDir(std::string path, std::string fna
}
else
{
logGlobal->errorStream()<<"Failed to open "<<fname<<" as H3 PCX!";
logGlobal->error("Failed to open %s as H3 PCX!", fname);
return nullptr;
}
}
@ -151,8 +151,8 @@ SDL_Surface * BitmapHandler::loadBitmapFromDir(std::string path, std::string fna
}
else
{
logGlobal->errorStream() << "Failed to open " << fname << " via SDL_Image";
logGlobal->errorStream() << "Reason: " << IMG_GetError();
logGlobal->error("Failed to open %s via SDL_Image", fname);
logGlobal->error("Reason: %s", IMG_GetError());
return nullptr;
}
}
@ -183,7 +183,7 @@ SDL_Surface * BitmapHandler::loadBitmap(std::string fname, bool setKey)
if (!(bitmap = loadBitmapFromDir("DATA/", fname, setKey)) &&
!(bitmap = loadBitmapFromDir("SPRITES/", fname, setKey)))
{
logGlobal->errorStream() << "Error: Failed to find file " << fname;
logGlobal->error("Error: Failed to find file %s", fname);
}
return bitmap;

View File

@ -166,9 +166,9 @@ SDL_Surface * CDefHandler::getSprite (int SIndex, const ui8 * FDef, const SDL_Co
if(nullptr == ret)
{
logGlobal->errorStream() << __FUNCTION__ <<": Unable to create surface";
logGlobal->errorStream() << FullWidth << "X" << FullHeight;
logGlobal->errorStream() << SDL_GetError();
logGlobal->error("%s: Unable to create surface", __FUNCTION__);
logGlobal->error("%dX%d", FullWidth, FullHeight);
logGlobal->error(SDL_GetError());
throw std::runtime_error("Unable to create surface");
}

View File

@ -151,8 +151,7 @@ void startGameFromFile(const bfs::path &fname)
}
catch(std::exception &e)
{
logGlobal->errorStream() << "Failed to start from the file: " << fname << ". Error: " << e.what()
<< " Falling back to main menu.";
logGlobal->error("Failed to start from the file: %s. Error: %s. Falling back to main menu.", fname, e.what());
GH.curInt = CGPreGame::create();
return;
}
@ -217,7 +216,7 @@ static void SDLLogCallback(void* userdata,
//todo: convert SDL log priority to vcmi log priority
//todo: make separate log domain for SDL
logGlobal->debugStream() << "SDL(category " << category << "; priority " <<priority <<") "<<message;
logGlobal->debug("SDL(category %d; priority %d) %s", category, priority, message);
}
#ifdef VCMI_APPLE
@ -320,9 +319,9 @@ int main(int argc, char * argv[])
const bfs::path logPath = VCMIDirs::get().userCachePath() / "VCMI_Client_log.txt";
CBasicLogConfigurator logConfig(logPath, console);
logConfig.configureDefault();
logGlobal->infoStream() << NAME;
logGlobal->info(NAME);
logGlobal->info("Creating console and configuring logger: %d ms", pomtime.getDiff());
logGlobal->infoStream() << "The log file will be saved to " << logPath;
logGlobal->info("The log file will be saved to %s", logPath);
// Init filesystem and settings
preinitDLL(::console);
@ -355,7 +354,7 @@ int main(int argc, char * argv[])
if (CResourceHandler::get()->existsResource(ResourceID(filename)))
return true;
logGlobal->errorStream() << "Error: " << message << " was not found!";
logGlobal->error("Error: %s was not found!", message);
return false;
};
@ -383,8 +382,8 @@ int main(int argc, char * argv[])
{
logGlobal->error("Fatal error: failed to load settings!");
logGlobal->error("Possible reasons:");
logGlobal->errorStream() << "\tCorrupted local configuration file at " << VCMIDirs::get().userConfigPath() << "/settings.json";
logGlobal->errorStream() << "\tMissing or corrupted global configuration file at " << VCMIDirs::get().userConfigPath() << "/schemas/settings.json";
logGlobal->error("\tCorrupted local configuration file at %s/settings.json", VCMIDirs::get().userConfigPath());
logGlobal->error("\tMissing or corrupted global configuration file at %s/schemas/settings.json", VCMIDirs::get().userConfigPath());
logGlobal->error("VCMI will now exit...");
exit(EXIT_FAILURE);
}
@ -393,7 +392,7 @@ int main(int argc, char * argv[])
{
if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER|SDL_INIT_AUDIO|SDL_INIT_NOPARACHUTE))
{
logGlobal->errorStream()<<"Something was wrong: "<< SDL_GetError();
logGlobal->error("Something was wrong: %s", SDL_GetError());
exit(-1);
}
@ -413,7 +412,7 @@ int main(int argc, char * argv[])
int driversCount = SDL_GetNumRenderDrivers();
std::string preferredDriverName = video["driver"].String();
logGlobal->infoStream() << "Found " << driversCount << " render drivers";
logGlobal->info("Found %d render drivers", driversCount);
for(int it = 0; it < driversCount; it++)
{
@ -425,17 +424,17 @@ int main(int argc, char * argv[])
if(!preferredDriverName.empty() && driverName == preferredDriverName)
{
preferredDriverIndex = it;
logGlobal->infoStream() << "\t" << driverName << " (active)";
logGlobal->info("\t%s (active)", driverName);
}
else
logGlobal->infoStream() << "\t" << driverName;
logGlobal->info("\t%s", driverName);
}
config::CConfigHandler::GuiOptionsMap::key_type resPair(res["width"].Float(), res["height"].Float());
if (conf.guiOptions.count(resPair) == 0)
{
// selected resolution was not found - complain & fallback to something that we do have.
logGlobal->errorStream() << "Selected resolution " << resPair.first << "x" << resPair.second << " was not found!";
logGlobal->error("Selected resolution %dx%d was not found!", resPair.first, resPair.second);
if (conf.guiOptions.empty())
{
logGlobal->error("Unable to continue - no valid resolutions found! Please reinstall VCMI to fix this");
@ -448,7 +447,7 @@ int main(int argc, char * argv[])
newRes["height"].Float() = conf.guiOptions.begin()->first.second;
conf.SetResolution(newRes["width"].Float(), newRes["height"].Float());
logGlobal->errorStream() << "Falling back to " << newRes["width"].Float() << "x" << newRes["height"].Float();
logGlobal->error("Falling back to %dx%d", newRes["width"].Integer(), newRes["height"].Integer());
}
}
@ -548,8 +547,7 @@ int main(int argc, char * argv[])
{
if(!fileToStartFrom.empty())
{
logGlobal->warnStream() << "Warning: cannot find given file to start from (" << fileToStartFrom
<< "). Falling back to main menu.";
logGlobal->warn("Warning: cannot find given file to start from (%s). Falling back to main menu.", fileToStartFrom.string());
}
GH.curInt = CGPreGame::create(); //will set CGP pointer to itself
}
@ -592,7 +590,7 @@ void printInfoAboutIntObject(const CIntObject *obj, int level)
sbuffer << "inactive";
sbuffer << " at " << obj->pos.x <<"x"<< obj->pos.y;
sbuffer << " (" << obj->pos.w <<"x"<< obj->pos.h << ")";
logGlobal->infoStream() << sbuffer.str();
logGlobal->info(sbuffer.str());
for(const CIntObject *child : obj->children)
printInfoAboutIntObject(child, level+1);
@ -862,7 +860,7 @@ void processCommand(const std::string &message)
}
catch(std::exception &e)
{
logGlobal->warnStream() << "Failed opening " << fname << ": " << e.what();
logGlobal->warn("Failed opening %s: %s", fname, e.what());
logGlobal->warn("Setting not changes, AI not found or invalid!");
}
}
@ -1062,7 +1060,7 @@ static bool recreateWindow(int w, int h, int bpp, bool fullscreen, int displayIn
}
if(!checkVideoMode(displayIndex, w, h))
{
logGlobal->errorStream() << "Error: SDL says that " << w << "x" << h << " resolution is not available!";
logGlobal->error("Error: SDL says that %dx%d resolution is not available!", w, h);
return false;
}
@ -1106,7 +1104,7 @@ static bool recreateWindow(int w, int h, int bpp, bool fullscreen, int displayIn
SDL_RendererInfo info;
SDL_GetRendererInfo(mainRenderer, &info);
logGlobal->infoStream() << "Created renderer " << info.name;
logGlobal->info("Created renderer %s", info.name);
if(!(fullscreen && realFullscreen))
{
@ -1134,10 +1132,7 @@ static bool recreateWindow(int w, int h, int bpp, bool fullscreen, int displayIn
screen = SDL_CreateRGBSurface(0,w,h,bpp,rmask,gmask,bmask,amask);
if(nullptr == screen)
{
logGlobal->error("Unable to create surface");
logGlobal->errorStream() << w << " "<< h << " "<< bpp;
logGlobal->errorStream() << SDL_GetError();
logGlobal->error("Unable to create surface %dx%d with %d bpp: %s", w, h, bpp, SDL_GetError());
throw std::runtime_error("Unable to create surface");
}
//No blending for screen itself. Required for proper cursor rendering.
@ -1151,7 +1146,7 @@ static bool recreateWindow(int w, int h, int bpp, bool fullscreen, int displayIn
if(nullptr == screenTexture)
{
logGlobal->error("Unable to create screen texture");
logGlobal->errorStream() << SDL_GetError();
logGlobal->error(SDL_GetError());
throw std::runtime_error("Unable to create screen texture");
}
@ -1269,7 +1264,7 @@ static void handleEvent(SDL_Event & ev)
fullScreenChanged();
break;
default:
logGlobal->errorStream() << "Unknown user event. Code " << ev.user.code;
logGlobal->error("Unknown user event. Code %d", ev.user.code);
break;
}

View File

@ -51,7 +51,7 @@ void CAudioBase::init()
if (Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024)==-1)
{
logGlobal->errorStream() << "Mix_OpenAudio error: " << Mix_GetError();
logGlobal->error("Mix_OpenAudio error: %s", Mix_GetError());
return;
}
@ -154,7 +154,7 @@ Mix_Chunk *CSoundHandler::GetSoundChunk(std::string &sound, bool cache)
}
catch(std::exception &e)
{
logGlobal->warnStream() << "Cannot get sound " << sound << " chunk: " << e.what();
logGlobal->warn("Cannot get sound %s chunk: %s", sound, e.what());
return nullptr;
}
}
@ -164,7 +164,7 @@ int CSoundHandler::playSound(soundBase::soundID soundID, int repeats)
{
assert(soundID < soundBase::sound_after_last);
auto sound = sounds[soundID];
logGlobal->traceStream() << "Attempt to play sound " << soundID << " with file name " << sound << " with cache";
logGlobal->trace("Attempt to play sound %d with file name %s with cache", soundID, sound);
return playSound(sound, repeats, true);
}
@ -182,7 +182,7 @@ int CSoundHandler::playSound(std::string sound, int repeats, bool cache)
channel = Mix_PlayChannel(-1, chunk, repeats);
if (channel == -1)
{
logGlobal->errorStream() << "Unable to play sound file " << sound << " , error " << Mix_GetError();
logGlobal->error("Unable to play sound file %s , error %s", sound, Mix_GetError());
if (!cache)
Mix_FreeChunk(chunk);
}
@ -314,7 +314,7 @@ void CMusicHandler::playMusicFromSet(std::string whichSet, bool loop)
auto selectedSet = musicsSet.find(whichSet);
if (selectedSet == musicsSet.end())
{
logGlobal->errorStream() << "Error: playing music from non-existing set: " << whichSet;
logGlobal->error("Error: playing music from non-existing set: %s", whichSet);
return;
}
@ -331,14 +331,14 @@ void CMusicHandler::playMusicFromSet(std::string whichSet, int entryID, bool loo
auto selectedSet = musicsSet.find(whichSet);
if (selectedSet == musicsSet.end())
{
logGlobal->errorStream() << "Error: playing music from non-existing set: " << whichSet;
logGlobal->error("Error: playing music from non-existing set: %s", whichSet);
return;
}
auto selectedEntry = selectedSet->second.find(entryID);
if (selectedEntry == selectedSet->second.end())
{
logGlobal->errorStream() << "Error: playing non-existing entry " << entryID << " from set: " << whichSet;
logGlobal->error("Error: playing non-existing entry %d from set: %s", entryID, whichSet);
return;
}
@ -373,8 +373,8 @@ void CMusicHandler::queueNext(CMusicHandler *owner, std::string setName, std::st
}
catch(std::exception &e)
{
logGlobal->errorStream() << "Failed to queue music. setName=" << setName << "\tmusicURI=" << musicURI;
logGlobal->errorStream() << "Exception: " << e.what();
logGlobal->error("Failed to queue music. setName=%s\tmusicURI=%s", setName, musicURI);
logGlobal->error("Exception: %s", e.what());
}
}
@ -429,7 +429,7 @@ MusicEntry::MusicEntry(CMusicHandler *owner, std::string setName, std::string mu
}
MusicEntry::~MusicEntry()
{
logGlobal->traceStream()<<"Del-ing music file "<<currentName;
logGlobal->trace("Del-ing music file %s", currentName);
if (music)
Mix_FreeMusic(music);
}
@ -438,14 +438,14 @@ void MusicEntry::load(std::string musicURI)
{
if (music)
{
logGlobal->traceStream()<<"Del-ing music file "<<currentName;
logGlobal->trace("Del-ing music file %s", currentName);
Mix_FreeMusic(music);
music = nullptr;
}
currentName = musicURI;
logGlobal->traceStream()<<"Loading music file "<<musicURI;
logGlobal->trace("Loading music file %s", musicURI);
auto musicFile = MakeSDLRWops(CResourceHandler::get()->load(ResourceID(std::move(musicURI), EResType::MUSIC)));
@ -453,7 +453,7 @@ void MusicEntry::load(std::string musicURI)
if(!music)
{
logGlobal->warnStream() << "Warning: Cannot open " << currentName << ": " << Mix_GetError();
logGlobal->warn("Warning: Cannot open %s: %s", currentName, Mix_GetError());
return;
}
}
@ -469,10 +469,10 @@ bool MusicEntry::play()
load(RandomGeneratorUtil::nextItem(set, CRandomGenerator::getDefault())->second);
}
logGlobal->traceStream()<<"Playing music file "<<currentName;
logGlobal->trace("Playing music file %s", currentName);
if(Mix_PlayMusic(music, 1) == -1)
{
logGlobal->errorStream() << "Unable to play music (" << Mix_GetError() << ")";
logGlobal->error("Unable to play music (%s)", Mix_GetError());
return false;
}
return true;
@ -482,7 +482,7 @@ bool MusicEntry::stop(int fade_ms)
{
if (Mix_PlayingMusic())
{
logGlobal->traceStream()<<"Stopping music file "<<currentName;
logGlobal->trace("Stopping music file %s", currentName);
loop = 0;
Mix_FadeOutMusic(fade_ms);
return true;

View File

@ -110,7 +110,7 @@ struct HeroObjectRetriever : boost::static_visitor<const CGHeroInstance *>
CPlayerInterface::CPlayerInterface(PlayerColor Player)
{
logGlobal->traceStream() << "\tHuman player interface for player " << Player << " being constructed";
logGlobal->trace("\tHuman player interface for player %s being constructed", Player.getStr(false));
destinationTeleport = ObjectInstanceID();
destinationTeleportPos = int3(-1);
howManyPeople++;
@ -136,7 +136,7 @@ CPlayerInterface::CPlayerInterface(PlayerColor Player)
CPlayerInterface::~CPlayerInterface()
{
logGlobal->traceStream() << "\tHuman player interface for player " << playerID << " being destructed";
logGlobal->trace("\tHuman player interface for player %s being destructed", playerID.getStr(false));
//howManyPeople--;
delete showingDialog;
delete cingconsole;
@ -358,10 +358,10 @@ void CPlayerInterface::heroMoved(const TryMoveHero & details)
{
//evil returns here ...
//todo: get rid of it
logGlobal->traceStream() << "before [un]locks in " << __FUNCTION__;
logGlobal->trace("before [un]locks in %s", __FUNCTION__);
auto unlockPim = vstd::makeUnlockGuard(*pim); //let frame to be rendered
GH.mainFPSmng->framerateDelay(); //for animation purposes
logGlobal->traceStream() << "after [un]locks in " << __FUNCTION__;
logGlobal->trace("after [un]locks in %s", __FUNCTION__);
}
//CSDL_Ext::update(screen);
@ -808,7 +808,7 @@ void CPlayerInterface::actionFinished(const BattleAction &action)
BattleAction CPlayerInterface::activeStack(const CStack * stack) //called when it's turn of that stack
{
THREAD_CREATED_BY_CLIENT;
logGlobal->traceStream() << "Awaiting command for " << stack->nodeName();
logGlobal->trace("Awaiting command for %s", stack->nodeName());
auto stackId = stack->ID;
auto stackName = stack->nodeName();
if (autofightingAI)
@ -856,10 +856,10 @@ BattleAction CPlayerInterface::activeStack(const CStack * stack) //called when i
{
if (stackId != ret.stackNumber)
logGlobal->error("Not current active stack action canceled");
logGlobal->traceStream() << "Canceled command for " << stackName;
logGlobal->trace("Canceled command for %s", stackName);
}
else
logGlobal->traceStream() << "Giving command for " << stackName;
logGlobal->trace("Giving command for %s", stackName);
return ret;
}
@ -1362,7 +1362,7 @@ template <typename Handler> void CPlayerInterface::serializeTempl( Handler &h, c
if (p.second.nodes.size())
pathsMap[p.first] = p.second.endPos();
else
logGlobal->errorStream() << p.first->name << " has assigned an empty path! Ignoring it...";
logGlobal->debug("%s has assigned an empty path! Ignoring it...", p.first->name);
}
h & pathsMap;
}
@ -1398,7 +1398,7 @@ void CPlayerInterface::loadGame( BinaryDeserializer & h, const int version )
void CPlayerInterface::moveHero( const CGHeroInstance *h, CGPath path )
{
logGlobal->traceStream() << __FUNCTION__;
LOG_TRACE(logGlobal);
if (!LOCPLINT->makingTurn)
return;
if (!h)
@ -2857,7 +2857,7 @@ void CPlayerInterface::doMoveHero(const CGHeroInstance * h, CGPath path)
assert(h->pos.z == nextCoord.z); // Z should change only if it's movement via teleporter and in this case this code shouldn't be executed at all
int3 endpos(nextCoord.x, nextCoord.y, h->pos.z);
logGlobal->traceStream() << "Requesting hero movement to " << endpos;
logGlobal->trace("Requesting hero movement to %s", endpos());
bool useTransit = false;
if ((i-2 >= 0) // Check there is node after next one; otherwise transit is pointless
@ -2871,7 +2871,7 @@ void CPlayerInterface::doMoveHero(const CGHeroInstance * h, CGPath path)
doMovement(endpos, useTransit);
logGlobal->traceStream() << "Resuming " << __FUNCTION__;
logGlobal->trace("Resuming %s", __FUNCTION__);
bool guarded = cb->isInTheMap(cb->getGuardingCreaturePosition(endpos - int3(1, 0, 0)));
if ((!useTransit && guarded) || showingDialog->get() == true) // Abort movement if a guard was fought or there is a dialog to display (Mantis #1136)
break;

View File

@ -358,7 +358,7 @@ static std::function<void()> genCommand(CMenuScreen* menu, std::vector<std::stri
}
}
}
logGlobal->errorStream()<<"Failed to parse command: "<<string;
logGlobal->error("Failed to parse command: %s", string);
return std::function<void()>();
}
@ -538,7 +538,7 @@ void CGPreGame::openCampaignScreen(std::string name)
GH.pushInt(new CCampaignScreen(CGPreGameConfig::get().getCampaigns()[name]));
return;
}
logGlobal->errorStream()<<"Unknown campaign set: "<<name;
logGlobal->error("Unknown campaign set: %s", name);
}
CGPreGame *CGPreGame::create()
@ -942,7 +942,7 @@ void CSelectionScreen::handleConnection()
{
CPackForSelectionScreen *pack = nullptr;
*serv >> pack;
logNetwork->traceStream() << "Received a pack of type " << typeid(*pack).name();
logNetwork->trace("Received a pack of type %s", typeid(*pack).name());
assert(pack);
if(QuitMenuWithoutStarting *endingPack = dynamic_cast<QuitMenuWithoutStarting *>(pack))
{
@ -1130,7 +1130,7 @@ void SelectionTab::parseMaps(const std::unordered_set<ResourceID> &files)
}
catch(std::exception & e)
{
logGlobal->errorStream() << "Map " << file.getName() << " is invalid. Message: " << e.what();
logGlobal->error("Map %s is invalid. Message: %s", file.getName(), e.what());
}
}
}
@ -1183,7 +1183,7 @@ void SelectionTab::parseGames(const std::unordered_set<ResourceID> &files, CMenu
}
catch(const std::exception & e)
{
logGlobal->errorStream() << "Error: Failed to process " << file.getName() <<": " << e.what();
logGlobal->error("Error: Failed to process %s: %s", file.getName(), e.what());
}
}
}
@ -1494,7 +1494,7 @@ void SelectionTab::printMaps(SDL_Surface *to)
break;
default:
// Unknown version. Be safe and ignore that map
logGlobal->warnStream() << "Warning: " << currentItem->fileURI << " has wrong version!";
logGlobal->warn("Warning: %s has wrong version!", currentItem->fileURI);
continue;
}
IImage * icon = formatIcons->getImage(frame,group);
@ -1824,7 +1824,7 @@ void CRandomMapTab::addButtonsToGroup(CToggleGroup * group, const std::vector<st
void CRandomMapTab::deactivateButtonsFrom(CToggleGroup * group, int startId)
{
logGlobal->infoStream() << "Blocking buttons from " << startId;
logGlobal->debug("Blocking buttons from %d", startId);
for(auto toggle : group->buttons)
{
if (auto button = dynamic_cast<CToggleButton*>(toggle.second))
@ -3722,7 +3722,7 @@ void CBonusSelection::startMap()
{
auto exitCb = [=]()
{
logGlobal->infoStream() << "Starting scenario " << selectedMap;
logGlobal->info("Starting scenario %d", selectedMap);
CGP->showLoadingScreen(std::bind(&startGame, si, (CConnection *)nullptr));
};

View File

@ -99,7 +99,7 @@ bool CVideoPlayer::open(std::string fname, bool loop, bool useOverlay, bool scal
if (!CResourceHandler::get()->existsResource(resource))
{
logGlobal->errorStream() << "Error: video " << resource.getName() << " was not found";
logGlobal->error("Error: video %s was not found", resource.getName());
return false;
}

View File

@ -152,7 +152,7 @@ void CClient::waitForMoveAndSend(PlayerColor color)
BattleAction ba = battleints[color]->activeStack(gs->curB->battleGetStackByID(gs->curB->activeStack, false));
if(ba.actionType != Battle::CANCEL)
{
logNetwork->traceStream() << "Send battle action to server: " << ba;
logNetwork->trace("Send battle action to server: %s", ba.toString());
MakeAction temp_action(ba);
sendRequest(&temp_action, color);
}
@ -301,7 +301,7 @@ void CClient::loadGame(const std::string & fname, const bool server, const std::
}
catch(std::exception &e)
{
logGlobal->errorStream() << "Cannot load game " << fname << ". Error: " << e.what();
logGlobal->error("Cannot load game %s. Error: %s", fname, e.what());
throw; //obviously we cannot continue here
}
@ -367,7 +367,7 @@ void CClient::loadGame(const std::string & fname, const bool server, const std::
// {
// auto o = gs->map->objects[i];
// if(o)
// logGlobal->traceStream() << boost::format("\tindex=%5d, id=%5d; address=%5d, pos=%s, name=%s") % i % o->id % (int)o.get() % o->pos % o->getHoverText();
// logGlobal->trace("\tindex=%5d, id=%5d; address=%5d, pos=%s, name=%s", i, o->id, (int)o.get(), o->pos, o->getHoverText());
// else
// logGlobal->trace("\tindex=%5d --- nullptr", i);
// }
@ -454,7 +454,7 @@ void CClient::newGame( CConnection *con, StartInfo *si )
if(!vstd::contains(myPlayers, color))
continue;
logNetwork->traceStream() << "Preparing interface for player " << color;
logNetwork->trace("Preparing interface for player %s", color.getStr(false));
if(elem.second.playerID == PlayerSettings::PLAYER_AI)
{
auto AiToGive = aiNameForPlayer(elem.second, false);
@ -882,8 +882,7 @@ int CClient::sendRequest(const CPack *request, PlayerColor player)
static ui32 requestCounter = 0;
ui32 requestID = requestCounter++;
logNetwork->traceStream() << boost::format("Sending a request \"%s\". It'll have an ID=%d.")
% typeid(*request).name() % requestID;
logNetwork->trace("Sending a request \"%s\". It'll have an ID=%d.", typeid(*request).name(), requestID);
waitingRequest.pushBack(requestID);
serv->sendPackToServer(*request, player, requestID);
@ -1118,7 +1117,7 @@ void CServerHandler::callServer()
else
{
logNetwork->error("Error: server failed to close correctly or crashed!");
logNetwork->errorStream() << "Check " << logName << " for more info";
logNetwork->error("Check %s for more info", logName);
exit(1);// exit in case of error. Othervice without working server VCMI will hang
}
#endif

View File

@ -291,7 +291,7 @@ void Graphics::blueToPlayersAdv(SDL_Surface * sur, PlayerColor player)
}
else
{
logGlobal->errorStream() << "Wrong player id in blueToPlayersAdv (" << player << ")!";
logGlobal->error("Wrong player id in blueToPlayersAdv (%s)!", player.getStr(false));
return;
}
SDL_SetColors(sur, palette, 224, 32);

View File

@ -122,7 +122,7 @@ void SetPrimSkill::applyCl(CClient *cl)
const CGHeroInstance *h = cl->getHero(id);
if(!h)
{
logNetwork->errorStream() << "Cannot find hero with ID " << id.getNum();
logNetwork->error("Cannot find hero with ID %d", id.getNum());
return;
}
INTERFACE_CALL_IF_PRESENT(h->tempOwner,heroPrimarySkillChanged,h,which,val);
@ -133,7 +133,7 @@ void SetSecSkill::applyCl(CClient *cl)
const CGHeroInstance *h = cl->getHero(id);
if(!h)
{
logNetwork->errorStream() << "Cannot find hero with ID " << id;
logNetwork->error("Cannot find hero with ID %d", id.getNum());
return;
}
INTERFACE_CALL_IF_PRESENT(h->tempOwner,heroSecondarySkillChanged,h,which,val);
@ -784,7 +784,7 @@ void SystemMessage::applyCl(CClient *cl)
std::ostringstream str;
str << "System message: " << text;
logNetwork->errorStream() << str.str(); // usually used to receive error messages from server
logNetwork->error(str.str()); // usually used to receive error messages from server
if(LOCPLINT && !settings["session"]["hideSystemMessages"].Bool())
LOCPLINT->cingconsole->print(str.str());
}
@ -813,13 +813,13 @@ void SaveGame::applyCl(CClient *cl)
}
catch(std::exception &e)
{
logNetwork->errorStream() << "Failed to save game:" << e.what();
logNetwork->error("Failed to save game:%s", e.what());
}
}
void PlayerMessage::applyCl(CClient *cl)
{
logNetwork->debugStream() << "Player "<< player <<" sends a message: " << text;
logNetwork->debug("Player %s sends a message: %s", player.getStr(false), text);
std::ostringstream str;
if(player.isSpectator())

View File

@ -283,7 +283,7 @@ void CDefenceAnimation::endAnim()
CDummyAnimation::CDummyAnimation(CBattleInterface * _owner, int howManyFrames)
: CBattleAnimation(_owner), counter(0), howMany(howManyFrames)
{
logAnim->debugStream() << "Created dummy animation for " << howManyFrames <<" frames";
logAnim->debug("Created dummy animation for %d frames", howManyFrames);
}
bool CDummyAnimation::init()
@ -360,7 +360,7 @@ bool CMeleeAttackAnimation::init()
group = mutPosToGroup[mutPos];
break;
default:
logGlobal->errorStream()<<"Critical Error! Wrong dest in stackAttacking! dest: "<<dest<<" attacking stack pos: "<<attackingStackPosBeforeReturn<<" mutual pos: "<<mutPos;
logGlobal->error("Critical Error! Wrong dest in stackAttacking! dest: %d; attacking stack pos: %d; mutual pos: %d", dest.hex, attackingStackPosBeforeReturn, mutPos);
group = CCreatureAnim::ATTACK_FRONT;
break;
}
@ -875,19 +875,19 @@ void CShootingAnimation::endAnim()
CSpellEffectAnimation::CSpellEffectAnimation(CBattleInterface * _owner, ui32 _effect, BattleHex _destTile, int _dx, int _dy, bool _Vflip, bool _alignToBottom)
:CBattleAnimation(_owner), effect(_effect), destTile(_destTile), customAnim(""), x(-1), y(-1), dx(_dx), dy(_dy), Vflip(_Vflip), alignToBottom(_alignToBottom)
{
logAnim->debugStream() << "Created spell anim for effect #" << effect;
logAnim->debug("Created spell anim for effect #%d", effect);
}
CSpellEffectAnimation::CSpellEffectAnimation(CBattleInterface * _owner, std::string _customAnim, int _x, int _y, int _dx, int _dy, bool _Vflip, bool _alignToBottom)
:CBattleAnimation(_owner), effect(-1), destTile(BattleHex::INVALID), customAnim(_customAnim), x(_x), y(_y), dx(_dx), dy(_dy), Vflip(_Vflip), alignToBottom(_alignToBottom)
{
logAnim->debugStream() << "Created spell anim for " << customAnim;
logAnim->debug("Created spell anim for %s", customAnim);
}
CSpellEffectAnimation::CSpellEffectAnimation(CBattleInterface * _owner, std::string _customAnim, BattleHex _destTile, bool _Vflip, bool _alignToBottom)
:CBattleAnimation(_owner), effect(-1), destTile(_destTile), customAnim(_customAnim), x(-1), y(-1), dx(0), dy(0), Vflip(_Vflip), alignToBottom(_alignToBottom)
{
logAnim->debugStream() << "Created spell anim for " << customAnim;
logAnim->debug("Created spell anim for %s", customAnim);
}

View File

@ -189,9 +189,9 @@ CBattleInterface::CBattleInterface(const CCreatureSet *army1, const CCreatureSet
{
auto bfieldType = (int)curInt->cb->battleGetBattlefieldType();
if (graphics->battleBacks.size() <= bfieldType || bfieldType < 0)
logGlobal->errorStream() << bfieldType << " is not valid battlefield type index!";
logGlobal->error("%d is not valid battlefield type index!", bfieldType);
else if (graphics->battleBacks[bfieldType].empty())
logGlobal->errorStream() << bfieldType << " battlefield type does not have any backgrounds!";
logGlobal->error("%d battlefield type does not have any backgrounds!", bfieldType);
else
{
const std::string bgName = *RandomGeneratorUtil::nextItem(graphics->battleBacks[bfieldType], CRandomGenerator::getDefault());
@ -718,7 +718,7 @@ void CBattleInterface::setBattleCursor(const int myNumber)
// Generally should NEVER happen, but to avoid the possibility of having endless loop below... [#1016]
if (!vstd::contains_if (sectorCursor, [](int sc) { return sc != -1; }))
{
logGlobal->errorStream() << "Error: for hex " << myNumber << " cannot find a hex to attack from!";
logGlobal->error("Error: for hex %d cannot find a hex to attack from!", myNumber);
attackingHex = -1;
return;
}
@ -1143,7 +1143,7 @@ void CBattleInterface::giveCommand(Battle::ActionType action, BattleHex tile, ui
if (!tacticsMode)
{
logGlobal->traceStream() << "Setting command for " << (stack ? stack->nodeName() : "hero");
logGlobal->trace("Setting command for %s", (stack ? stack->nodeName() : "hero"));
myTurn = false;
setActiveStack(nullptr);
givenCommand.setn(ba);
@ -1926,7 +1926,7 @@ void CBattleInterface::startAction(const BattleAction* action)
}
if (!stack)
{
logGlobal->errorStream()<<"Something wrong with stackNumber in actionStarted. Stack number: "<<action->stackNumber;
logGlobal->error("Something wrong with stackNumber in actionStarted. Stack number: %d", action->stackNumber);
return;
}
@ -2715,13 +2715,13 @@ void CBattleInterface::obstaclePlaced(const CObstacleInstance & oi)
sound = soundBase::fireWall;
break;
default:
logGlobal->errorStream() << "I don't know how to animate appearing obstacle of type " << (int)oi.obstacleType;
logGlobal->error("I don't know how to animate appearing obstacle of type %d", (int)oi.obstacleType);
return;
}
if (effectID >= 0 && graphics->battleACToDef[effectID].empty())
{
logGlobal->errorStream() << "Cannot find def for effect type " << effectID;
logGlobal->error("Cannot find def for effect type %d", effectID);
return;
}

View File

@ -69,7 +69,7 @@ void CBattleConsole::showAll(SDL_Surface * to)
bool CBattleConsole::addText(const std::string & text)
{
logGlobal->traceStream() <<"CBattleConsole message: "<<text;
logGlobal->trace("CBattleConsole message: %s", text);
if(text.size()>70)
return false; //text too long!
int firstInToken = 0;

View File

@ -385,7 +385,7 @@ void CCreatureAnimation::nextFrame(SDL_Surface *dest, bool attacker)
case 3: return nextFrameT<3>(dest, !attacker);
case 4: return nextFrameT<4>(dest, !attacker);
default:
logGlobal->errorStream() << (int)dest->format->BitsPerPixel << " bpp is not supported!!!";
logGlobal->error("%d bpp is not supported!", (int)dest->format->BitsPerPixel);
}
}

View File

@ -445,7 +445,7 @@ void CDefFile::loadFrame(size_t frame, size_t group, ImageLoader &loader) const
break;
}
default:
logGlobal->errorStream()<<"Error: unsupported format of def file: "<<sprite.format;
logGlobal->error("Error: unsupported format of def file: %d", sprite.format);
break;
}
}
@ -741,7 +741,7 @@ SDLImage::SDLImage(std::string filename, bool compressed):
if (surf == nullptr)
{
logGlobal->errorStream() << "Error: failed to load image "<<filename;
logGlobal->error("Error: failed to load image %s", filename);
return;
}
else
@ -1373,8 +1373,7 @@ CDefFile * CAnimation::getFile() const
void CAnimation::printError(size_t frame, size_t group, std::string type) const
{
logGlobal->errorStream() << type << " error: Request for frame not present in CAnimation! "
<< "\tFile name: " << name << " Group: " << group << " Frame: " << frame;
logGlobal->error("%s error: Request for frame not present in CAnimation! File name: %s, Group: %d, Frame: %d", type, name, group, frame);
}
CAnimation::CAnimation(std::string Name, bool Compressed):
@ -1406,7 +1405,7 @@ CAnimation::~CAnimation()
if(!images.empty())
{
logGlobal->warnStream()<<"Warning: not all frames were unloaded from "<<name;
logGlobal->warn("Warning: not all frames were unloaded from %s", name);
for (auto & elem : images)
for (auto & _image : elem.second)
delete _image.second;
@ -1579,7 +1578,7 @@ void CFadeAnimation::init(EMode mode, SDL_Surface * sourceSurface, bool freeSurf
}
if (animDelta <= 0.0f)
{
logGlobal->warnStream() << "Fade anim: delta should be positive; " << animDelta << " given.";
logGlobal->warn("Fade anim: delta should be positive; %f given.", animDelta);
animDelta = DEFAULT_DELTA;
}

View File

@ -461,7 +461,7 @@ void CGuiHandler::renderFrame()
CCS->curh->render();
if(0 != SDL_RenderCopy(mainRenderer, screenTexture, nullptr, nullptr))
logGlobal->errorStream() << __FUNCTION__ << " SDL_RenderCopy " << SDL_GetError();
logGlobal->error("%s SDL_RenderCopy %s", __FUNCTION__, SDL_GetError());
SDL_RenderPresent(mainRenderer);
}

View File

@ -26,11 +26,11 @@ void SDL_UpdateRect(SDL_Surface *surface, int x, int y, int w, int h)
{
Rect rect(x,y,w,h);
if(0 !=SDL_UpdateTexture(screenTexture, &rect, surface->pixels, surface->pitch))
logGlobal->errorStream() << __FUNCTION__ << "SDL_UpdateTexture " << SDL_GetError();
logGlobal->error("%sSDL_UpdateTexture %s", __FUNCTION__, SDL_GetError());
SDL_RenderClear(mainRenderer);
if(0 != SDL_RenderCopy(mainRenderer, screenTexture, NULL, NULL))
logGlobal->errorStream() << __FUNCTION__ << "SDL_RenderCopy " << SDL_GetError();
logGlobal->error("%sSDL_RenderCopy %s", __FUNCTION__, SDL_GetError());
SDL_RenderPresent(mainRenderer);
}
@ -326,7 +326,7 @@ int CSDL_Ext::blit8bppAlphaTo24bpp(const SDL_Surface * src, const SDL_Rect * src
case 3: return blit8bppAlphaTo24bppT<3>(src, srcRect, dst, dstRect);
case 4: return blit8bppAlphaTo24bppT<4>(src, srcRect, dst, dstRect);
default:
logGlobal->errorStream() << (int)dst->format->BitsPerPixel << " bpp is not supported!!!";
logGlobal->error("%d bpp is not supported!", (int)dst->format->BitsPerPixel);
return -1;
}
}
@ -349,7 +349,7 @@ void CSDL_Ext::update(SDL_Surface * what)
if(!what)
return;
if(0 !=SDL_UpdateTexture(screenTexture, nullptr, what->pixels, what->pitch))
logGlobal->errorStream() << __FUNCTION__ << "SDL_UpdateTexture " << SDL_GetError();
logGlobal->error("%s SDL_UpdateTexture %s", __FUNCTION__, SDL_GetError());
}
void CSDL_Ext::drawBorder(SDL_Surface * sur, int x, int y, int w, int h, const int3 &color)
{
@ -428,7 +428,7 @@ case BytesPerPixel: \
CASE_BPP(3)
CASE_BPP(4)
default:
logGlobal->errorStream() << (int)dest->format->BitsPerPixel << "bpp is not supported!";
logGlobal->error("%d bpp is not supported!", (int)dest->format->BitsPerPixel);
return nullptr;
}
@ -442,7 +442,7 @@ TColorPutterAlpha CSDL_Ext::getPutterAlphaFor(SDL_Surface * const &dest, int inc
CASE_BPP(3)
CASE_BPP(4)
default:
logGlobal->errorStream() << (int)dest->format->BitsPerPixel << "bpp is not supported!";
logGlobal->error("%d bpp is not supported!", (int)dest->format->BitsPerPixel);
return nullptr;
}
#undef CASE_BPP

View File

@ -755,7 +755,7 @@ void CMapHandler::CMapBlitter::drawObjects(SDL_Surface * targetSurf, const Terra
fade->draw(targetSurf, nullptr, &r2);
continue;
}
logGlobal->errorStream() << "Fading map object with missing fade anim : " << object.fadeAnimKey;
logGlobal->error("Fading map object with missing fade anim : %d", object.fadeAnimKey);
continue;
}
@ -967,7 +967,7 @@ CMapHandler::AnimBitmapHolder CMapHandler::CMapBlitter::findHeroBitmap(const CGH
{
if(hero->tempOwner >= PlayerColor::PLAYER_LIMIT) //Neutral hero?
{
logGlobal->errorStream() << "A neutral hero (" << hero->name << ") at " << hero->pos << ". Should not happen!";
logGlobal->error("A neutral hero (%s) at %s. Should not happen!", hero->name, hero->pos());
return CMapHandler::AnimBitmapHolder();
}
@ -1025,7 +1025,7 @@ IImage * CMapHandler::CMapBlitter::findBoatFlagBitmap(const CGBoat * boat, int a
int boatType = boat->subID;
if(boatType < 0 || boatType >= graphics->boatFlagAnimations.size())
{
logGlobal->errorStream() << "Not supported boat subtype: " << boat->subID;
logGlobal->error("Not supported boat subtype: %d", boat->subID);
return nullptr;
}
@ -1035,7 +1035,7 @@ IImage * CMapHandler::CMapBlitter::findBoatFlagBitmap(const CGBoat * boat, int a
if(colorIndex < 0 || colorIndex >= subtypeFlags.size())
{
logGlobal->errorStream() << "Invalid player color " << colorIndex;
logGlobal->error("Invalid player color %d", colorIndex);
return nullptr;
}
@ -1138,7 +1138,7 @@ bool CMapHandler::updateObjectsFade()
{
if ((*objIter).fadeAnimKey == (*iter).first)
{
logAnim->traceStream() << "Fade anim finished for obj at " << pos << "; remaining: " << (fadeAnims.size() - 1);
logAnim->trace("Fade anim finished for obj at %s; remaining: %d", pos(), fadeAnims.size() - 1);
if (anim->fadingMode == CFadeAnimation::EMode::OUT)
objs.erase(objIter); // if this was fadeout, remove the object from the map
else
@ -1185,8 +1185,7 @@ bool CMapHandler::startObjectFade(TerrainTileObject & obj, bool in, int3 pos)
fadeAnims[++fadeAnimCounter] = std::pair<int3, CFadeAnimation*>(pos, anim);
obj.fadeAnimKey = fadeAnimCounter;
logAnim->traceStream() << "Fade anim started for obj " << obj.obj->ID
<< " at " << pos << "; anim count: " << fadeAnims.size();
logAnim->trace("Fade anim started for obj %d at %s; anim count: %d", obj.obj->ID, pos(), fadeAnims.size());
return true;
}

View File

@ -503,7 +503,7 @@ std::map<int, std::pair<SDL_Color, SDL_Color> > CMinimap::loadColors(std::string
auto index = boost::find(GameConstants::TERRAIN_NAMES, m.first);
if (index == std::end(GameConstants::TERRAIN_NAMES))
{
logGlobal->errorStream() << "Error: unknown terrain in terrains.json: " << m.first;
logGlobal->error("Error: unknown terrain in terrains.json: %s", m.first);
continue;
}
int terrainID = index - std::begin(GameConstants::TERRAIN_NAMES);

View File

@ -117,12 +117,12 @@ void CButton::block(bool on)
void CButton::onButtonClicked()
{
// debug logging to figure out pressed button (and as result - player actions) in case of crash
logAnim->traceStream() << "Button clicked at " << pos.x << "x" << pos.y;
logAnim->trace("Button clicked at %dx%d", pos.x, pos.y);
CIntObject * parent = this->parent;
std::string prefix = "Parent is";
while (parent)
{
logAnim->traceStream() << prefix << typeid(*parent).name() << " at " << parent->pos.x << "x" << parent->pos.y;
logAnim->trace("%s%s at %dx%d", prefix, typeid(*parent).name(), parent->pos.x, parent->pos.y);
parent = parent->parent;
prefix = '\t' + prefix;
}

View File

@ -229,11 +229,7 @@ bool CHeroArtPlace::askToAssemble(const CArtifactInstance *art, ArtifactPosition
0);
if(assemblyPossibilities.size() > 2)
{
logGlobal->warnStream() << boost::format(
"More than one possibility of assembling on %s... taking only first")
% art->artType->Name();
}
logGlobal->warn("More than one possibility of assembling on %s... taking only first", art->artType->Name());
return true;
}
return false;
@ -821,7 +817,7 @@ CHeroArtPlace * CArtifactsOfHero::getArtPlace(int slot)
{
if(artWorn.find(ArtifactPosition(slot)) == artWorn.end())
{
logGlobal->errorStream() << "CArtifactsOfHero::getArtPlace: invalid slot " << slot;
logGlobal->error("CArtifactsOfHero::getArtPlace: invalid slot %d", slot);
return nullptr;
}

View File

@ -63,7 +63,7 @@ void CGarrisonSlot::hover (bool on)
}
else
{
logGlobal->warnStream() << "Warning - shouldn't be - highlighted void slot "<<owner->getSelection();
logGlobal->warn("Warning - shouldn't be - highlighted void slot %d", owner->getSelection()->ID.getNum());
logGlobal->warn("Highlighted set to nullptr");
owner->selectSlot(nullptr);
}

View File

@ -297,7 +297,7 @@ void CAnimImage::setFrame(size_t Frame, size_t Group)
}
}
else
logGlobal->errorStream() << "Error: accessing unavailable frame " << Group << ":" << Frame << " in CAnimation!";
logGlobal->error("Error: accessing unavailable frame %d:%d in CAnimation!", Group, Frame);
}
void CAnimImage::playerColored(PlayerColor currPlayer)

View File

@ -234,7 +234,7 @@ void CArmyTooltip::init(const InfoAboutArmy &army)
{
if(slot.first.getNum() >= GameConstants::ARMY_SIZE)
{
logGlobal->warnStream() << "Warning: " << army.name << " has stack in slot " << slot.first;
logGlobal->warn("%s has stack in slot %d", army.name, slot.first.getNum());
continue;
}

View File

@ -592,7 +592,7 @@ void CTextInput::numberFilter(std::string & text, const std::string & oldText, i
catch(boost::bad_lexical_cast &)
{
//Should never happen. Unless I missed some cases
logGlobal->warnStream() << "Warning: failed to convert "<< text << " to number!";
logGlobal->warn("Warning: failed to convert %s to number!", text);
text = oldText;
}
}

View File

@ -440,7 +440,7 @@ int3 CTerrainRect::tileCountOnScreen()
switch (adventureInt->mode)
{
default:
logGlobal->errorStream() << "Unhandled map mode " << (int)adventureInt->mode;
logGlobal->error("Unknown map mode %d", (int)adventureInt->mode);
return int3();
case EAdvMapMode::NORMAL:
return int3(tilesw, tilesh, 1);

View File

@ -229,7 +229,7 @@ std::string CBuildingRect::getSubtitle()//hover text for building
}
else
{
logGlobal->warnStream() << "Problem: dwelling with id " << bid << " offers no creatures!";
logGlobal->warn("Dwelling with id %d offers no creatures!", bid);
return "#ERROR#";
}
}
@ -600,7 +600,7 @@ const CGHeroInstance* CCastleBuildings::getHero()
void CCastleBuildings::buildingClicked(BuildingID building)
{
logGlobal->traceStream()<<"You've clicked on "<<building;
logGlobal->trace("You've clicked on %d", (int)building.toEnum());
const CBuilding *b = town->town->buildings.find(building)->second;
if(building >= BuildingID::DWELL_FIRST)
@ -1183,7 +1183,7 @@ void CCastleInterface::keyPressed( const SDL_KeyboardEvent & key )
for(const CStructure * str : town->town->clientInfo.structures)
{
if (str->building)
logGlobal->errorStream() << int(str->building->bid) << " -> " << int(str->pos.z);
logGlobal->error("%d -> %d", int(str->building->bid), int(str->pos.z));
}
}
break;
@ -1199,7 +1199,7 @@ void CCastleInterface::keyPressed( const SDL_KeyboardEvent & key )
for(const CStructure * str : town->town->clientInfo.structures)
{
if (str->building)
logGlobal->errorStream() << int(str->building->bid) << " -> " << int(str->pos.z);
logGlobal->error("%d -> %d", int(str->building->bid), int(str->pos.z));
}
}

View File

@ -92,11 +92,18 @@ BattleAction BattleAction::makeEndOFTacticPhase(ui8 side)
return ba;
}
std::ostream & operator<<(std::ostream & os, const BattleAction & ba)
std::string BattleAction::toString() const
{
std::stringstream actionTypeStream;
actionTypeStream << ba.actionType;
actionTypeStream << actionType;
return os << boost::str(boost::format("{BattleAction: side '%d', stackNumber '%d', actionType '%s', destinationTile '%s', additionalInfo '%d', selectedStack '%d'}")
% static_cast<int>(ba.side) % ba.stackNumber % actionTypeStream.str() % ba.destinationTile % ba.additionalInfo % ba.selectedStack);
boost::format fmt("{BattleAction: side '%d', stackNumber '%d', actionType '%s', destinationTile '%s', additionalInfo '%d', selectedStack '%d'}");
fmt % static_cast<int>(side) % stackNumber % actionTypeStream.str() % destinationTile % additionalInfo % selectedStack;
return fmt.str();
}
std::ostream & operator<<(std::ostream & os, const BattleAction & ba)
{
os << ba.toString();
return os;
}

View File

@ -42,6 +42,8 @@ struct DLL_LINKAGE BattleAction
static BattleAction makeShotAttack(const CStack * shooter, const CStack * target);
static BattleAction makeMove(const CStack * stack, BattleHex dest);
static BattleAction makeEndOFTacticPhase(ui8 side);
std::string toString() const;
};
DLL_EXPORT std::ostream & operator<<(std::ostream & os, const BattleAction & ba);
DLL_EXPORT std::ostream & operator<<(std::ostream & os, const BattleAction & ba); //todo: remove

View File

@ -45,7 +45,7 @@ CArchiveLoader::CArchiveLoader(std::string _mountPoint, boost::filesystem::path
else
throw std::runtime_error("LOD archive format unknown. Cannot deal with " + archive.string());
logGlobal->traceStream() << ext << "Archive \""<<archive.filename()<<"\" loaded (" << entries.size() << " files found).";
logGlobal->trace("%sArchive \"%s\" loaded (%d files found).", ext, archive.filename(), entries.size());
}
void CArchiveLoader::initLODArchive(const std::string &mountPoint, CFileInputStream & fileStream)