diff --git a/endpoints/itemset/itemset.php b/endpoints/itemset/itemset.php
index a975d734..c86ae527 100644
--- a/endpoints/itemset/itemset.php
+++ b/endpoints/itemset/itemset.php
@@ -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);
diff --git a/endpoints/mail/mail.php b/endpoints/mail/mail.php
index ffad7f29..41c20c3d 100644
--- a/endpoints/mail/mail.php
+++ b/endpoints/mail/mail.php
@@ -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
{
diff --git a/endpoints/quest/quest.php b/endpoints/quest/quest.php
index 33be74e6..4b347eb5 100644
--- a/endpoints/quest/quest.php
+++ b/endpoints/quest/quest.php
@@ -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);
diff --git a/endpoints/spell/spell.php b/endpoints/spell/spell.php
index b746bc70..a3b4b143 100644
--- a/endpoints/spell/spell.php
+++ b/endpoints/spell/spell.php
@@ -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);
diff --git a/includes/dbtypes/item.class.php b/includes/dbtypes/item.class.php
index 69603913..b1038688 100644
--- a/includes/dbtypes/item.class.php
+++ b/includes/dbtypes/item.class.php
@@ -880,23 +880,22 @@ class ItemList extends DBTypeList
$x .= Lang::formatTime(abs($dur) * 1000, 'item', 'duration').$rt."
";
}
- $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.'
';
}
// 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.'
';
}
diff --git a/includes/dbtypes/itemset.class.php b/includes/dbtypes/itemset.class.php
index 3ddb1a63..27a83663 100644
--- a/includes/dbtypes/itemset.class.php
+++ b/includes/dbtypes/itemset.class.php
@@ -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.'
';
+ $t = count($jsg) == 1 ? Lang::game('class') : Lang::game('classes');
+ $x .= Util::ucFirst($t).Lang::main('colon').$cl.'
';
}
if ($_ = $this->getField('contentGroup'))
diff --git a/localization/lang.class.php b/localization/lang.class.php
index 269a600b..006d2ee1 100644
--- a/localization/lang.class.php
+++ b/localization/lang.class.php
@@ -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..