Skip to content

Commit

Permalink
Resolve a problem with vocation requirements not being properly parse…
Browse files Browse the repository at this point in the history
…d for revscript spells. Issue Black-Tek#19
  • Loading branch information
Codinablack committed Oct 8, 2024
1 parent 3a1ebf6 commit 52ab7ab
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 3 deletions.
13 changes: 11 additions & 2 deletions src/luascript.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16515,8 +16515,17 @@ int LuaScriptInterface::luaSpellVocation(lua_State* L)
} else {
int parameters = lua_gettop(L) - 1; // - 1 because self is a parameter aswell, which we want to skip ofc
for (int i = 0; i < parameters; ++i) {
auto vocList = explodeString(getString(L, 2 + i), ";");
spell->addVocMap(g_vocations.getVocationId(vocList[0]), vocList.size() > 1 ? booleanString(vocList[1]) : false);
std::string vocData = getString(L, 2 + i);
auto vocParts = explodeString(vocData, ";");

std::string name = std::string(vocParts[0]);
bool description = false;

if (vocParts.size() > 1) {
description = booleanString(vocParts[1]);
}

spell->addVocMap(g_vocations.getVocationId(name), description);
}
pushBoolean(L, true);
}
Expand Down
19 changes: 18 additions & 1 deletion src/vocation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,26 @@ Vocation* Vocations::getVocation(uint16_t id)
return &it->second;
}

std::string trimString(const std::string& str) {
const auto strBegin = str.find_first_not_of(" \t");
if (strBegin == std::string::npos) return "";

const auto strEnd = str.find_last_not_of(" \t");
const auto strRange = strEnd - strBegin + 1;

return str.substr(strBegin, strRange);
}

int32_t Vocations::getVocationId(std::string_view name) const
{
auto it = std::find_if(vocationsMap.begin(), vocationsMap.end(), [=](auto it) { return caseInsensitiveEqual(name, it.second.name); });
std::string trimmedName = trimString(std::string(name));

auto it = std::find_if(vocationsMap.begin(), vocationsMap.end(),
[&trimmedName](const auto& pair) {
bool result = caseInsensitiveEqual(trimmedName, pair.second.name);
return result;
});

return it != vocationsMap.end() ? it->first : -1;
}

Expand Down

0 comments on commit 52ab7ab

Please sign in to comment.