mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-07 01:23:52 +00:00
fix(editor): quest level + reward sanity bounds + item slot cap
Rounds out the quest load guards:
- requiredLevel: 0 -> 1 (no level-0 quests), >255 -> 80 (typo guard)
- reward.xp: cap 1M
- reward.gold: cap 10000
- reward.silver/copper: cap 99 (server overflows otherwise)
- reward.itemRewards: cap 6 entries (matches WoW quest_template
RewardItemId[1..6] slot capacity)
This commit is contained in:
parent
c4c8d9e7ed
commit
f5fc23e003
1 changed files with 15 additions and 1 deletions
|
|
@ -83,6 +83,10 @@ bool QuestEditor::loadFromFile(const std::string& path) {
|
|||
q.description = jq.value("description", "");
|
||||
q.completionText = jq.value("completionText", "");
|
||||
q.requiredLevel = jq.value("requiredLevel", 1u);
|
||||
// WoW levels 1-80 (WotLK). Cap to keep AzerothCore happy and
|
||||
// catch obvious typos like "999".
|
||||
if (q.requiredLevel == 0) q.requiredLevel = 1;
|
||||
if (q.requiredLevel > 255) q.requiredLevel = 80;
|
||||
q.questGiverNpcId = jq.value("questGiverNpcId", 0u);
|
||||
q.turnInNpcId = jq.value("turnInNpcId", 0u);
|
||||
q.nextQuestId = jq.value("nextQuestId", 0u);
|
||||
|
|
@ -93,9 +97,19 @@ bool QuestEditor::loadFromFile(const std::string& path) {
|
|||
q.reward.gold = jr.value("gold", 0u);
|
||||
q.reward.silver = jr.value("silver", 0u);
|
||||
q.reward.copper = jr.value("copper", 0u);
|
||||
// Reward sanity caps. Highest WoW quest XP ~50k; gold realistic
|
||||
// cap is hundreds. Catches typo entries like "100000000 gold".
|
||||
if (q.reward.xp > 1'000'000) q.reward.xp = 1'000'000;
|
||||
if (q.reward.gold > 10000) q.reward.gold = 10000;
|
||||
if (q.reward.silver > 99) q.reward.silver = 99;
|
||||
if (q.reward.copper > 99) q.reward.copper = 99;
|
||||
if (jr.contains("items") && jr["items"].is_array()) {
|
||||
for (const auto& item : jr["items"])
|
||||
for (const auto& item : jr["items"]) {
|
||||
// Cap item reward count to 6 (WoW quest_template
|
||||
// RewardItemId[1..6] slot capacity).
|
||||
if (q.reward.itemRewards.size() >= 6) break;
|
||||
q.reward.itemRewards.push_back(item.get<std::string>());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue