i expanded client optimization with this:
playersettingsmodule.py->
def __LoadGameNPC():
if app.ENABLE_CPP_PSM:
cpsm.LoadGameNPC()
else:
#OLD CODE!
pass
playersettingsmodule.cpp->
search: #include "PythonNetworkStream.h"
add:
//Load npclist.txt
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <iostream>
#include <cctype> // std::isspace
#include <cstring>
//
search: const bool CPlayerSettingsModule::LoadGameSkill()
{
[...]
}
under add this:
std::string trim(const std::string& s) {
size_t start = 0;
while (start < s.size() && std::isspace(static_cast<unsigned char>(s[start]))) {
start++;
}
size_t end = s.size();
while (end > start && std::isspace(static_cast<unsigned char>(s[end - 1]))) {
end--;
}
return s.substr(start, end - start);
}
const bool CPlayerSettingsModule::LoadGameNPC()
{
std::ifstream file("npclist.txt");
if (!file.is_open()) {
LogBox("LoadLocaleError(npclist.txt)");
return false;
}
std::vector<std::string> lines;
std::string line;
while (std::getline(file, line)) {
lines.push_back(line);
}
file.close();
int lineNumber = 0; // opcionálisan, ha szeretnéd nyomon követni a sorokat
for (const std::string& line : lines) {
lineNumber++;
std::vector<std::string> tokens;
std::stringstream ss(line);
std::string token;
while (std::getline(ss, token, '\t')) {
tokens.push_back(token);
}
if (tokens.empty() || tokens[0].empty()) continue;
int vnum = 0;
try {
vnum = std::stoi(trim(tokens[0]));
}
catch (...) {
LogBoxf("LoadGameNPC() - Hiba a vnum átalakításában - sor #%d: %s", lineNumber, line.c_str());
continue;
}
// Győződj meg róla, hogy van elég token a továbbiakhoz
if (tokens.size() > 2) {
std::string name1 = trim(tokens[1]);
std::string name2 = trim(tokens[2]);
if (vnum) {
CRaceManager::Instance().RegisterRaceName(vnum, name1.c_str());
}
else {
CRaceManager::Instance().RegisterRaceSrcName(name1.c_str(), name2.c_str());
}
}
else if (tokens.size() == 2) {
// Ha csak 2 token van, legyen kezelve
std::string name1 = trim(tokens[1]);
if (vnum) {
CRaceManager::Instance().RegisterRaceName(vnum, name1.c_str());
}
else {
// nincs elég adat, vagy kezelheted másképp
}
}
}
return true;
}
find: PyObject* cpsmLoadGameSkill(PyObject * poSelf, PyObject * poArgs)
add under:
PyObject* cpsmLoadGameNPC(PyObject* poSelf, PyObject* poArgs)
{
CPlayerSettingsModule::LoadGameNPC();
return Py_BuildNone();
}
search:
{"LoadGameSkill", cpsmLoadGameSkill, METH_VARARGS},
add after:
{"LoadGameNPC", cpsmLoadGameNPC, METH_VARARGS},
Tested working.