Difference between revisions of "User:Caledor92/Sandbox3"

From Dragalia Lost Wiki
Jump to navigation Jump to search
>Caledor92
>Caledor92
 
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
<includeonly>{{#ifeq:{{{Abilities11|0}}} | 0 | | {{#vardefine:maxAbility1|Abilities11}}}}{{#ifeq:{{{Abilities12|0}}} | 0 | | {{#vardefine:maxAbility1|Abilities12}}}}{{#ifeq:{{{Abilities13|0}}} | 0 | | {{#vardefine:maxAbility1|Abilities13}}}}{{#ifeq:{{{Abilities21|0}}} | 0 | | {{#vardefine:maxAbility2|Abilities21}}}}{{#ifeq:{{{Abilities22|0}}} | 0 | | {{#vardefine:maxAbility2|Abilities22}}}}{{#ifeq:{{{Abilities23|0}}} | 0 | | {{#vardefine:maxAbility1|Abilities23}}}}{{#ifeq:{{{Abilities31|0}}} | 0 | | {{#vardefine:maxAbility3|Abilities31}}}}{{#ifeq:{{{Abilities32|0}}} | 0 | | {{#vardefine:maxAbility3|Abilities32}}}}{{#ifeq:{{{Abilities33|0}}} | 0 | | {{#vardefine:maxAbility1|Abilities33}}}}{{#vardefine:ability1MaxMight|{{#expr:{{#cargo_query:tables=Abilities|fields=PartyPowerWeight|where=Id="{{{{{#var:maxAbility1}}|}}}"|limit=1|more results text=|default=0|no html}}}}}}{{#vardefine:ability2MaxMight|{{#expr:{{#cargo_query:tables=Abilities|fields=PartyPowerWeight|where=Id="{{{{{#var:maxAbility2}}|}}}"|limit=1|more results text=|default=0|no html}}}}}}{{#vardefine:ability3MaxMight|{{#expr:{{#cargo_query:tables=Abilities|fields=PartyPowerWeight|where=Id="{{{{{#var:maxAbility3}}|}}}"|limit=1|more results text=|default=0|no html}}}}}}<!--
+
<noinclude>{{doc}}</noinclude><includeonly><script type="text/javascript">
 +
// Constants
 +
const LB_COUNT = <!--{$MaxLimitBreakCount}-->;
 +
const MIN_LEVEL = 1;
 +
const MAX_LEVEL = 80;
 +
const LB_MAX_LEVEL = 100;
 +
const MIN_HP = [<!--{$minHp3}-->,<!--{$minHp4}-->,<!--{$minHp5}-->];
 +
const MAX_HP = <!--{$maxHp}-->;
 +
const MIN_STR = [<!--{$minStr3}-->,<!--{$minStr4}-->,<!--{$minStr5}-->];
 +
const MAX_STR = <!--{$maxStr}-->;
 +
const NAT_RARITY = <!--{$rarity}-->;;
  
--><div class="panel wyrmprints" style="max-width:850px;margin:auto">
+
// Load modules, init, etc.
<div class="panel-heading">{{{Name|{{PAGENAME}}}}}</div>
+
document.addEventListener("DOMContentLoaded", function(event) {  
<div class="panel-body" style="display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center;overflow:hidden">
+
  init();
 +
  calcStats();
 +
});
  
<div style="text-align:center">
+
// Initialize the empty divs with content
{{#tag:tabber|
+
function init() {
Initial Vestige=
+
  if (NAT_RARITY == 3) {
<div style="margin:10px">{{#ifexist: File:{{{BaseId|}}} 01 portrait.png | [[File:{{{BaseId|}}} 01 portrait.png|400px]] | [[File:Unknown.png|400px|link=File:{{{BaseId|}}} 01 portrait.png]][[Category:Wyrmprints without Stage 1 Image]] }}</div>
+
    document.getElementById("adv-rarity-input-3").innerHTML = '<input type="radio" value=3 name="rarity" oninput="calcStats()"><label for="adv-rarity-input-3">3★</label>';
{{!}}-{{!}}
+
    document.getElementById("adv-rarity-input-4").innerHTML = '<input type="radio" value=4 name="rarity" oninput="calcStats()"><label for="adv-rarity-input-4">4★</label>';
Refined Vestige=
+
  } else if (NAT_RARITY == 4) {
<div style="margin:10px">{{#ifexist: File:{{{BaseId|}}} 02 portrait.png | [[File:{{{BaseId|}}} 02 portrait.png|400px]] | [[File:Unknown.png|400px|link=File:{{{BaseId|}}} 02 portrait.png]][[Category:Wyrmprints without Stage 2 Image]] }}</div>
+
    document.getElementById("adv-rarity-input-4").innerHTML = '<input type="radio" value=4 name="rarity" oninput="calcStats()"><label for="adv-rarity-input-4">4★</label>';
<span style="font-size:.8em;"><nowiki>*</nowiki> This vestige is unlocked after this Wyrmprint is unbound twice.</span>
+
  }
}}
+
  document.getElementById("adv-rarity-input-5").innerHTML = '<input type="radio" value=5 name="rarity" oninput="calcStats()" checked=1><label for="adv-rarity-input-5">5★</label>';
</div>
+
  if (LB_COUNT > 4) {
 +
    document.getElementById("adv-rarity-input-s").innerHTML = '<input type="radio" value=s name="rarity" oninput="calcStats()" checked=1><label for="adv-rarity-input-s">S★</label>';
 +
    document.getElementById("adv-level-input").innerHTML = '<label for="adv-level-input-field" style="font-weight:bold;">Level</label><input type="number" id="adv-level-input-field" value=100 min=1 max=100 style="width:40px; text-align:center; margin-left:5px;" oninput="calcStats()">';
 +
  } else {
 +
    document.getElementById("adv-level-input").innerHTML = '<label for="adv-level-input-field" style="font-weight:bold;">Level</label><input type="number" id="adv-level-input-field" value=80 min=1 max=80 style="width:40px; text-align:center; margin-left:5px;" oninput="calcStats()">';
 +
  }
 +
}
  
<div class="wyrmprints-details" style="flex-grow:1;text-align:center;margin-left:5px">
+
// Calculate the HP and STR stats
<p style="width:300px;margin:15px auto;border-bottom:1px solid;margin-bottom:10px;font-size:1.2em;font-variant-caps: small-caps;font-weight:bold">Description</p>
+
function calcStats() {
{{#tag:tabber|
+
  // Get the level and rarity
Stage 1=
+
  var levelInput = document.getElementById('adv-level-input-field');
<div style="flex-grow:1;text-align:center">
+
  var level = levelInput.value;
<div style="width:300px;margin:5px auto 10px;font-style:italic;font-size:.9em;">{{{FlavorText1|No details yet.}}}</div>
+
  var rarity = document.querySelector('input[name = "rarity"]:checked').value;
</div>
 
{{!}}-{{!}}
 
Stage 2=
 
<div style="flex-grow:1;text-align:center">
 
<div style="width:300px;margin:5px auto 10px;font-style:italic;font-size:.9em;">{{{FlavorText2|No details yet.}}}</div>
 
</div>
 
{{!}}-{{!}}
 
Stage 3=
 
<div style="flex-grow:1;text-align:center">
 
<div style="width:300px;margin:5px auto 10px;font-style:italic;font-size:.9em;">{{{FlavorText3|No details yet.}}}</div>
 
</div>
 
{{!}}-{{!}}
 
Stage 4=
 
<div style="flex-grow:1;text-align:center">
 
<div style="width:300px;margin:5px auto 10px;font-style:italic;font-size:.9em;">{{{FlavorText4|No details yet.}}}</div>
 
</div>
 
{{!}}-{{!}}
 
Stage 5=
 
<div style="flex-grow:1;text-align:center">
 
<div style="width:300px;margin:5px auto 10px;font-style:italic;font-size:.9em;">{{{FlavorText5|No details yet.}}}</div>
 
</div>
 
}}
 
<div>{{#widget:User:Caledor92/Sandbox1
 
|minHp={{{MinHp|}}}
 
|maxHp={{{MaxHp|}}}
 
|minStr={{{MinAtk|}}}
 
|maxStr={{{MaxAtk|}}}
 
|rarity={{{Rarity|}}}
 
}}</div>
 
{{TermDescriptionTooltip|Base Min Might|{{#expr:{{{MinHp|0}}}+{{{MinAtk|0}}}+{{AbilityMight|Abilities|{{{Abilities11|}}}}}+{{AbilityMight|Abilities|{{{Abilities21|}}}}}+{{AbilityMight|Abilities|{{{Abilities31|}}}}}}}|Minimum HP + Minimum Str + Lv. 1 Ability Might}}
 
{{TermDescriptionTooltip|Base Max Might|{{#expr:{{{MaxHp|0}}}+{{{MaxAtk|0}}}+{{AbilityMight|Abilities|{{{Abilities13|}}}}}+{{AbilityMight|Abilities|{{{Abilities23|}}}}}+{{AbilityMight|Abilities|{{{Abilities33|}}}}}}}|Does not include external buffs (e.g. Halidom, Dragons, etc.)<br/><br/>Max HP + Max Str + Total Max Lv. Ability Might}}
 
{{TermDescription|Rarity|[[File:Icon Rarity Row {{{Rarity|}}}.png|90px|link=]]}}
 
{{TermDescription|Sell Value|{{formatnum:{{{SellCoin|0}}}}} {{InlineIcon|Icon Resource|Rupies}}+ {{formatnum:{{{SellDewPoint|0}}}}} {{InlineIcon|Icon Resource|Eldwater}} }}
 
{{TermDescription|Japanese Name|{{{NameJP|?}}}}}
 
{{ChineseName|{{{NameSC|}}}|{{{NameTC|}}}}}
 
{{TermDescription|Artist|{{{ArtistCV|?}}}}}
 
{{TermDescription|Featured Characters|{{{FeaturedCharacters|?}}}}}
 
{{TermDescription|Obtained From|{{{Obtain|?}}}}}
 
{{TermDescription|Release Date|{{#time:F d, Y|{{{ReleaseDate|-}}}}}}}
 
{{TermDescription|Availability|{{{Availability|?}}}}}
 
</div>
 
  
</div>
+
  // Manually set the level cap if we're dealing with a lower rarity
<div style="padding:1em;">
+
  switch (rarity) {
<p style="margin:15px auto;border-bottom:1px solid;margin-bottom:15px;font-size:1.2em;font-variant-caps: small-caps;font-weight:bold">Abilities</p>
+
    case "3":
:''<span style="font-size:.9em;">Wyrmprint ability(ies) upgrade once after being unbound twice and again when fully unbound.</span>''
+
      if (level > 60) {
<div class="skill-section">
+
        level = 60;
{{#if: {{{Abilities11|}}} | {{#ifeq:{{{Abilities11|}}} | 0 | | {{#ifeq:{{{Ability1Event|0}}} | 0 | {{AbilityDisplay|Lv1={{{Abilities11|}}}|Lv2={{{Abilities12|}}}|Lv3={{{Abilities13|}}} }} | {{AbilityDisplay|Lv1={{{Abilities11|}}}|Lv2={{{Abilities12|}}}|Lv3={{{Abilities13|}}}|event=1}} }} }} }}
+
        levelInput.value = "60";
{{#if: {{{Abilities21|}}} | {{#ifeq:{{{Abilities21|}}} | 0 | | {{#ifeq:{{{Ability2Event|0}}} | 0 | {{AbilityDisplay|Lv1={{{Abilities21|}}}|Lv2={{{Abilities22|}}}|Lv3={{{Abilities23|}}} }} | {{AbilityDisplay|Lv1={{{Abilities21|}}}|Lv2={{{Abilities22|}}}|Lv3={{{Abilities23|}}}|event=1}} }} }} }}
+
      }
{{#if: {{{Abilities31|}}} | {{#ifeq:{{{Abilities31|}}} | 0 | | {{#ifeq:{{{Ability3Event|0}}} | 0 | {{AbilityDisplay|Lv1={{{Abilities31|}}}|Lv2={{{Abilities32|}}}|Lv3={{{Abilities33|}}} }} | {{AbilityDisplay|Lv1={{{Abilities31|}}}|Lv2={{{Abilities32|}}}|Lv3={{{Abilities33|}}}|event=1}} }} }} }}
+
      break;
</div>
+
    case "4":
</div><!--
+
      if (level > 70) {
-->[[Category:Wyrmprints]] {{#vardefine:i|0}}{{#while:
+
        level = 70;
| {{#if: {{#explode:{{{Availability|}}}|,|{{#var:i}}}} | true }}
+
        levelInput.value = "70";
| [[Category:{{#sub:{{#explode:{{{Availability|}}}|,|{{#var:i}}}}}} Wyrmprints]]{{#vardefine:i|{{#expr:{{#var:i}}+1}}}}
+
      }
}}</includeonly>
+
      break;
 +
    case "5":
 +
      if (level > MAX_LEVEL) {
 +
        level = MAX_LEVEL;
 +
        levelInput.value = MAX_LEVEL;
 +
      }
 +
      break;
 +
    case "s":
 +
      if (level > LB_MAX_LEVEL) {
 +
        level = LB_MAX_LEVEL;
 +
        levelInput.value = LB_MAX_LEVEL;
 +
      }
 +
  }
 +
 
 +
  // Validate the level and rarity before calculating HP and Str
 +
  if(validateLevel(level) && validateRarity(rarity)) {
 +
    setHP(calculateHP(level, rarity), level)
 +
    setStr(calculateStr(level, rarity), level)
 +
  } else {
 +
    setHP("-");
 +
    setStr("-");
 +
  }
 +
}
 +
 
 +
// Check if level is a number we can calculate with
 +
function validateLevel(value) {
 +
  if(isNaN(value) || value == "") {
 +
    return false;
 +
  }
 +
  return true;
 +
}
 +
 
 +
// Check if rarity is either 3, 4, or 5
 +
function validateRarity(rarity) {
 +
  if(rarity == 3 || rarity == 4 || rarity == 5 || rarity == "3" || rarity == "4" || rarity == "5" || rarity == "s" || rarity == "S") {
 +
    return true;
 +
  }
 +
  return false;
 +
}
 +
 
 +
// Set the HP value in the display
 +
function setHP(value, level) {
 +
  if (value != "-") {
 +
    document.getElementById("adv-hp-label").innerHTML = "Level " + level + " HP"
 +
  } else {
 +
    document.getElementById("adv-hp-label").innerHTML = "HP"
 +
  }
 +
  document.getElementById("adv-hp").innerHTML = value;
 +
}
 +
 
 +
// Set the Str value in the display
 +
function setStr(value, level) {
 +
  if (value != "-") {
 +
    document.getElementById("adv-str-label").innerHTML = "Level " + level + " Str"
 +
  } else {
 +
    document.getElementById("adv-str-label").innerHTML = "Str"
 +
  }
 +
  document.getElementById("adv-str").innerHTML = value;
 +
}
 +
 
 +
// Calculate the HP
 +
function calculateHP(level, rarity) {
 +
  var levelDiff = MAX_LEVEL - MIN_LEVEL;
 +
  var steps = (MAX_HP - MIN_HP[2]) / levelDiff;
 +
  var statGain = (level-1) * steps;
 +
  return Math.ceil(MIN_HP[rarity-3] + statGain);
 +
}
 +
 
 +
// Calculate the Str
 +
function calculateStr(level, rarity) {
 +
  var levelDiff = MAX_LEVEL - MIN_LEVEL;
 +
  var steps = (MAX_STR - MIN_STR[2]) / levelDiff;
 +
  var statGain = (level-1) * steps;
 +
  return Math.ceil(MIN_STR[rarity-3] + statGain);
 +
}
 +
</script>
 +
<div id="adv-level-input-container" style="display:inline-block; text-align:center;">
 +
  <form id="adv-rarity-select" style="display:inline;">
 +
    <div id="adv-rarity-input-3" style="display:inline;"></div>
 +
    <div id="adv-rarity-input-4" style="display:inline;"></div>
 +
    <div id="adv-rarity-input-5" style="display:inline;"></div>
 +
    <div id="adv-rarity-input-s" style="display:inline;"></div>
 +
  </form>
 +
  <div id="adv-level-input" style="display:inline-block; margin-left:0.5em;"></div>
 +
  <div id="adv-stat-output-container" style="text-align:center; margin-top:4px;">
 +
    <div style="width:100%" align="center">
 +
    <div class="dt-term" style="display: table-cell;width:120px;text-align:right;padding: 3px 8px 3px 0;margin: 0 -6px 0 0;border-right:3px #528e52 solid;font-weight:bold;vertical-align:middle"><div id="adv-hp-label">Max 5★ HP:</div></div>
 +
    <div class="dd-description" style="display: table-cell;width:150px;text-align:left;padding: 3px 0 3px 6px;border:0px #528e52 solid;vertical-align:middle"><div id="adv-hp" style="display:inline;"><!--{$maxHp}--></div></div>
 +
    </div>
 +
    <div style="width:100%" align="center">
 +
    <div class="dt-term" style="display: table-cell;width:120px;text-align:right;padding: 3px 8px 3px 0;margin: 0 -6px 0 0;border-right:3px #528e52 solid;font-weight:bold;vertical-align:middle"><div id="adv-str-label">Max 5★ Str:</div></div>
 +
    <div class="dd-description" style="display: table-cell;width:150px;text-align:left;padding: 3px 0 3px 6px;border:0px #528e52 solid;vertical-align:middle"><div id="adv-str" style="display:inline;"><!--{$maxStr}--></div></div>
 +
    </div>
 +
  </div>
 +
</div></includeonly>

Latest revision as of 15:14, 25 December 2019

50px Documentation
Max 5★ HP:
446
Max 5★ Str:
307