Items/ExtraLoot

* break down chances for loot from skill_extra_item_template
 * rename tab to make it clear that its content is a bonus
This commit is contained in:
Sarjuuk
2024-02-29 01:13:48 +01:00
parent e85a9e9d6a
commit 29f80f9a76
7 changed files with 32 additions and 2 deletions

View File

@@ -682,6 +682,7 @@ class SpellPage extends GenericPage
$lv = $spellLoot->getResult();
$extraCols = $spellLoot->extraCols;
$extraCols[] = '$Listview.extraCols.percent';
$lvName = '$LANG.tab_contains';
if ($extraItem && $this->subject->canCreateItem())
{
@@ -691,8 +692,10 @@ class SpellPage extends GenericPage
{
if (($bar = $this->subject->getField('effect'.$i.'CreateItemId')) && isset($foo[$bar]))
{
$lvName = '$LANG.tab_bonusloot';
$lv[$bar] = $foo[$bar];
$lv[$bar]['percent'] = $extraItem['additionalCreateChance'];
$lv[$bar]['percent'] = $extraItem['additionalCreateChance'];
$lv[$bar]['pctstack'] = $this->buildPctStack($extraItem['additionalCreateChance'] / 100, $extraItem['additionalMaxNum']);
$lv[$bar]['condition'][0][$this->typeId][] = [[CND_SPELL, $extraItem['requiredSpecialization']]];
$this->extendGlobalIds(Type::SPELL, $extraItem['requiredSpecialization']);
$extraCols[] = '$Listview.extraCols.condition';
@@ -706,7 +709,7 @@ class SpellPage extends GenericPage
$this->lvTabs[] = [ItemList::$brickFile, array(
'data' => array_values($lv),
'name' => '$LANG.tab_contains',
'name' => $lvName,
'id' => 'contains',
'hiddenCols' => ['side', 'slot', 'source', 'reqlevel'],
'extraCols' => array_unique($extraCols)
@@ -1244,6 +1247,27 @@ class SpellPage extends GenericPage
return sprintf($this->powerTpl, $this->typeId, User::$localeId, Util::toJSON($power, JSON_AOWOW_POWER));
}
private function buildPctStack(float $baseChance, int $maxStack) : string
{
// note: pctStack does not contain absolute values but chances relative to the overall drop chance
// e.g.: dropChance is 17% then [1 => 50, 2 => 25, 3 => 25] displays > Stack of 1: 8%; Stack of 2: 4%; Stack of 3: 4%
$maxStack = $maxStack ?: 1;
$pctStack = [];
for ($i = 1; $i <= $maxStack; $i++)
{
$pctStack[$i] = (($baseChance ** $i) * 100) / $baseChance ;
// remove chance from previous stacks
for ($j = 1; $j < $i; $j++)
$pctStack[$j] -= ($pctStack[$i] / ($i - 1));
}
// cleanup tiny fractions
$pctStack = array_filter($pctStack, function($x) use ($baseChance) { return $x * $baseChance >= 0.01; });
return json_encode($pctStack, JSON_NUMERIC_CHECK);
}
private function appendReagentItem(&$reagentResult, $_iId, $_qty, $_mult, $_level, $_path, $alreadyUsed)
{
if (in_array($_iId, $alreadyUsed))

View File

@@ -3176,6 +3176,7 @@ var LANG = {
tab_weaponskills: "Waffenfertigkeit",
tab_world: "Welt",
tab_zones: "Gebiete",
tab_bonusloot: "Bonusbeute", // aowow - custom from BONUS_LOOT_LABEL
numberofupvotesreceived_tip: "Anzahl von positiven Bewertungen erhalten",
deletethisreply_stc: "Antwort löschen",

View File

@@ -3225,6 +3225,7 @@ var LANG = {
tab_weaponskills: "Weapon Skills",
tab_world: "World",
tab_zones: "Zones",
tab_bonusloot: "Bonus Loot", // aowow - custom from BONUS_LOOT_LABEL
numberofupvotesreceived_tip: "Number of upvotes received",
deletethisreply_stc: "Delete this reply",

View File

@@ -3176,6 +3176,7 @@ var LANG = {
tab_weaponskills: "Habilidades con armas",
tab_world: "Mundo",
tab_zones: "Zonas",
tab_bonusloot: "Bonus de botín", // aowow - custom from BONUS_LOOT_LABEL
numberofupvotesreceived_tip: "Número de valoraciones positivas recibidas ",
deletethisreply_stc: "Borrar esta respuesta",

View File

@@ -3177,6 +3177,7 @@ var LANG = {
tab_weaponskills: "Compétences d'armes",
tab_world: "Monde",
tab_zones: "Zones",
tab_bonusloot: "Butin bonus", // aowow - custom from BONUS_LOOT_LABEL
numberofupvotesreceived_tip: "Nombre de votes positifs reçus",
deletethisreply_stc: "Effacer cette réponse",

View File

@@ -3177,6 +3177,7 @@ var LANG = {
tab_weaponskills: "Оружейные навыки",
tab_world: "Игровой мир",
tab_zones: "Местности",
tab_bonusloot: "Доп. добыча", // aowow - custom from BONUS_LOOT_LABEL
numberofupvotesreceived_tip: "Голосов получено",
deletethisreply_stc: "Удалить этот ответ",

View File

@@ -3224,6 +3224,7 @@ var LANG = {
tab_weaponskills: "武器技能",
tab_world: "世界",
tab_zones: "地区",
tab_bonusloot: "奖励战利品", // aowow - custom from BONUS_LOOT_LABEL
numberofupvotesreceived_tip: "收到顶票数量",
deletethisreply_stc: "删除本评论",