Lang/Fixup

* fix crash when race mask was resolved to faction
 * fix id buffer bleeding from resolving class mask into
   resolving race mask and vice versa

 * fixes #472
This commit is contained in:
Sarjuuk 2025-12-18 00:54:20 +01:00
parent 2a8db972a1
commit b591311803
7 changed files with 24 additions and 20 deletions

View file

@ -98,6 +98,7 @@ class ItemsetBaseResponse extends TemplateResponse implements ICache
$infobox[] = Lang::game('level').Lang::main('colon').Util::createNumRange($min, $this->subject->getField('maxLevel'), ' - ');
// class
$jsg = [];
if ($cl = Lang::getClassString($this->subject->getField('classMask'), $jsg, Lang::FMT_MARKUP))
{
$this->extendGlobalIds(Type::CHR_CLASS, ...$jsg);

View file

@ -71,17 +71,19 @@ class MailBaseResponse extends TemplateResponse implements ICache
}
else if ($mlr = DB::World()->selectRow('SELECT * FROM mail_level_reward WHERE `mailTemplateId` = ?d', $this->typeId)) // level rewards
{
if ($mlr['level'])
$infobox[] = Lang::game('level').Lang::main('colon').$mlr['level'];
if ($mlr['level'])
$infobox[] = Lang::game('level').Lang::main('colon').$mlr['level'];
if ($r = Lang::getRaceString($mlr['raceMask'], $rIds, Lang::FMT_MARKUP))
{
$infobox[] = Lang::game('races').Lang::main('colon').$r;
$this->extendGlobalIds(Type::CHR_RACE, ...$rIds);
}
$jsg = [];
if ($r = Lang::getRaceString($mlr['raceMask'], $jsg, Lang::FMT_MARKUP))
{
$this->extendGlobalIds(Type::CHR_RACE, ...$jsg);
$t = count($jsg) == 1 ? Lang::game('race') : Lang::game('races');
$infobox[] = Util::ucFirst($t).Lang::main('colon').$r;
}
$infobox[] = Lang::mail('sender', ['[npc='.$mlr['senderEntry'].']']);
$this->extendGlobalIds(Type::NPC, $mlr['senderEntry']);
$infobox[] = Lang::mail('sender', ['[npc='.$mlr['senderEntry'].']']);
$this->extendGlobalIds(Type::NPC, $mlr['senderEntry']);
}
else // achievement or quest
{

View file

@ -167,8 +167,8 @@ class QuestBaseResponse extends TemplateResponse implements ICache
default => Lang::game('si', SIDE_BOTH) // 0, 3
};
$jsg = [];
// races
$jsg = [];
if ($_ = Lang::getRaceString($this->subject->getField('reqRaceMask'), $jsg, Lang::FMT_MARKUP))
{
$this->extendGlobalIds(Type::CHR_RACE, ...$jsg);
@ -177,6 +177,7 @@ class QuestBaseResponse extends TemplateResponse implements ICache
}
// classes
$jsg = [];
if ($_ = Lang::getClassString($this->subject->getField('reqClassMask'), $jsg, Lang::FMT_MARKUP))
{
$this->extendGlobalIds(Type::CHR_CLASS, ...$jsg);

View file

@ -2369,8 +2369,8 @@ class SpellBaseResponse extends TemplateResponse implements ICache
$infobox[] = (in_array($typeCat, [-2, 7, -13]) ? Lang::game('reqLevel', [$_]) : Lang::game('level').Lang::main('colon').$_);
}
$jsg = [];
// races
$jsg = [];
if ($_ = Lang::getRaceString($this->subject->getField('reqRaceMask'), $jsg, Lang::FMT_MARKUP))
{
$this->extendGlobalIds(Type::CHR_RACE, ...$jsg);
@ -2379,6 +2379,7 @@ class SpellBaseResponse extends TemplateResponse implements ICache
}
// classes
$jsg = [];
if ($_ = Lang::getClassString($this->subject->getField('reqClassMask'), $jsg, Lang::FMT_MARKUP))
{
$this->extendGlobalIds(Type::CHR_CLASS, ...$jsg);

View file

@ -880,23 +880,22 @@ class ItemList extends DBTypeList
$x .= Lang::formatTime(abs($dur) * 1000, 'item', 'duration').$rt."<br />";
}
$jsg = [];
// required classes
$jsg = [];
if ($classes = Lang::getClassString($this->curTpl['requiredClass'], $jsg))
{
foreach ($jsg as $js)
if (empty($this->jsGlobals[Type::CHR_CLASS][$js]))
$this->jsGlobals[Type::CHR_CLASS][$js] = $js;
$this->jsGlobals[Type::CHR_CLASS][$js] ??= $js;
$x .= Lang::game('classes').Lang::main('colon').$classes.'<br />';
}
// required races
$jsg = [];
if ($races = Lang::getRaceString($this->curTpl['requiredRace'], $jsg))
{
foreach ($jsg as $js)
if (empty($this->jsGlobals[Type::CHR_RACE][$js]))
$this->jsGlobals[Type::CHR_RACE][$js] = $js;
$this->jsGlobals[Type::CHR_RACE][$js] ??= $js;
$x .= Lang::game('races').Lang::main('colon').$races.'<br />';
}

View file

@ -101,8 +101,8 @@ class ItemsetList extends DBTypeList
{
$jsg = [];
$cl = Lang::getClassString($_, $jsg);
$nCl = count($jsg);
$x .= Util::ucFirst($nCl > 1 ? Lang::game('classes') : Lang::game('class')).Lang::main('colon').$cl.'<br />';
$t = count($jsg) == 1 ? Lang::game('class') : Lang::game('classes');
$x .= Util::ucFirst($t).Lang::main('colon').$cl.'<br />';
}
if ($_ = $this->getField('contentGroup'))

View file

@ -447,7 +447,7 @@ class Lang
return implode(', ', $tmp);
}
public static function getClassString(int $classMask, ?array &$ids = [], int $fmt = self::FMT_HTML) : string
public static function getClassString(int $classMask, array &$ids = [], int $fmt = self::FMT_HTML) : string
{
$classMask &= ChrClass::MASK_ALL; // clamp to available classes..
@ -471,7 +471,7 @@ class Lang
return implode(', ', $tmp);
}
public static function getRaceString(int $raceMask, ?array &$ids = [], int $fmt = self::FMT_HTML) : string
public static function getRaceString(int $raceMask, array &$ids = [], int $fmt = self::FMT_HTML) : string
{
$raceMask &= ChrRace::MASK_ALL; // clamp to available races..