diff --git a/include/core.h b/include/core.h index d0d76b1..2b6fdfa 100644 --- a/include/core.h +++ b/include/core.h @@ -1425,8 +1425,8 @@ public: void SetGoalVisited (int index); void ClearVisitedGoals (void); - const char *GetDataDir (void); - String CheckSubfolderFile (void); + const char *GetDataDir (bool isMemoryFile = false); + const char *GetFileName (bool isMemoryFile = false); void SetBombPosition (bool shouldReset = false); inline const Vector &GetBombPosition (void) { return m_foundBombOrigin; } diff --git a/source/engine.cpp b/source/engine.cpp index f77db7d..83fb0f4 100644 --- a/source/engine.cpp +++ b/source/engine.cpp @@ -116,7 +116,7 @@ void Engine::ClientPrintf (edict_t *ent, const char *fmt, ...) vsnprintf (string, SIZEOF_CHAR (string), TraslateMessage (fmt), ap); va_end (ap); - if (IsNullEntity (ent) || ent == g_hostEntity) + if (IsDedicatedServer () || IsNullEntity (ent) || ent == g_hostEntity) { Printf (string); return; diff --git a/source/support.cpp b/source/support.cpp index 0115ee7..75bc6c4 100644 --- a/source/support.cpp +++ b/source/support.cpp @@ -462,24 +462,35 @@ bool OpenConfig (const char *fileName, const char *errorIfNotExists, MemoryFile if (outFile->IsValid ()) outFile->Close (); + // save config dir + const char *configDir = "addons/yapb/conf"; + if (languageDependant) { - const char *mod = engine.GetModName (); extern ConVar yb_language; if (strcmp (fileName, "lang.cfg") == 0 && strcmp (yb_language.GetString (), "en") == 0) return false; - const char *languageDependantConfigFile = FormatBuffer ("%s/addons/yapb/conf/lang/%s_%s", mod, yb_language.GetString (), fileName); + const char *langConfig = FormatBuffer ("%s/lang/%s_%s", configDir, yb_language.GetString (), fileName); + + // check file existence + int size = 0; + unsigned char *buffer = NULL; // check is file is exists for this language - if (File::Accessible (languageDependantConfigFile)) - outFile->Open (languageDependantConfigFile); + if ((buffer = MemoryFile::Loader (langConfig, &size)) != NULL) + { + MemoryFile::Unloader (buffer); + + // unload and reopen file using MemoryFile + outFile->Open (langConfig); + } else - outFile->Open (FormatBuffer ("%s/addons/yapb/conf/lang/en_%s", mod, fileName)); + outFile->Open (FormatBuffer ("%s/lang/en_%s", configDir, fileName)); } else - outFile->Open (FormatBuffer ("%s/addons/yapb/conf/%s", engine.GetModName (), fileName)); + outFile->Open (FormatBuffer ("%s/%s", configDir, fileName)); if (!outFile->IsValid ()) { diff --git a/source/waypoint.cpp b/source/waypoint.cpp index d0b9eea..e13602e 100644 --- a/source/waypoint.cpp +++ b/source/waypoint.cpp @@ -1064,7 +1064,7 @@ bool Waypoint::Load (void) return false; } - MemoryFile fp (CheckSubfolderFile ()); + MemoryFile fp (GetFileName (true)); WaypointHeader header; memset (&header, 0, sizeof (header)); @@ -1242,7 +1242,7 @@ void Waypoint::Save (void) header.fileVersion = FV_WAYPOINT; header.pointNumber = g_numWaypoints; - File fp (CheckSubfolderFile (), "wb"); + File fp (GetFileName (), "wb"); // file was opened if (fp.IsValid ()) @@ -1260,19 +1260,19 @@ void Waypoint::Save (void) AddLogEntry (true, LL_ERROR, "Error writing '%s.pwf' waypoint file", engine.GetMapName ()); } -String Waypoint::CheckSubfolderFile (void) +const char *Waypoint::GetFileName (bool isMemoryFile) { String returnFile = ""; if (!IsNullString (yb_wptsubfolder.GetString ())) returnFile += (String (yb_wptsubfolder.GetString ()) + "/"); - returnFile = FormatBuffer ("%s%s%s.pwf", GetDataDir (), returnFile.GetBuffer (), engine.GetMapName ()); + returnFile = FormatBuffer ("%s%s%s.pwf", GetDataDir (isMemoryFile), returnFile.GetBuffer (), engine.GetMapName ()); if (File::Accessible (returnFile)) - return returnFile; + return returnFile.GetBuffer (); - return FormatBuffer ("%s%s.pwf", GetDataDir (), engine.GetMapName ()); + return FormatBuffer ("%s%s.pwf", GetDataDir (isMemoryFile), engine.GetMapName ()); } float Waypoint::GetTravelTime (float maxSpeed, const Vector &src, const Vector &origin) @@ -2420,9 +2420,16 @@ void Waypoint::EraseFromHardDisk (void) Init (); // reintialize points } -const char *Waypoint::GetDataDir (void) +const char *Waypoint::GetDataDir (bool isMemoryFile) { - return FormatBuffer ("%s/addons/yapb/data/", engine.GetModName ()); + static char buffer[256]; + + if (isMemoryFile) + sprintf (buffer, "addons/yapb/data/"); + else + sprintf (buffer, "%s/addons/yapb/data/", engine.GetModName ()); + + return &buffer[0]; } void Waypoint::SetBombPosition (bool shouldReset) @@ -2625,7 +2632,7 @@ WaypointDownloadError Waypoint::RequestWaypoint (void) recvPosition++; } - File fp (waypoints.CheckSubfolderFile (), "wb"); + File fp (waypoints.GetFileName (), "wb"); if (!fp.IsValid ()) {