Difference between revisions of "User:Caledor92/Sandbox3"

From Dragalia Lost Wiki
Jump to navigation Jump to search
>Caledor92
>Caledor92
 
(26 intermediate revisions by the same user not shown)
Line 1: Line 1:
<noinclude>{{doc}}<!--
+
<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}-->;;
  
-->{{#cargo_declare:
+
// Load modules, init, etc.
_table=EnemyPageLinks
+
document.addEventListener("DOMContentLoaded", function(event) {  
|Name=String
+
  init();
}}<!--
+
  calcStats();
 +
});
  
--></noinclude><includeonly><!--
+
// Initialize the empty divs with content
 +
function init() {
 +
  if (NAT_RARITY == 3) {
 +
    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>';
 +
  } else if (NAT_RARITY == 4) {
 +
    document.getElementById("adv-rarity-input-4").innerHTML = '<input type="radio" value=4 name="rarity" oninput="calcStats()"><label for="adv-rarity-input-4">4★</label>';
 +
  }
 +
  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>';
 +
  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()">';
 +
  }
 +
}
  
-->{{#cargo_store:_table=EnemyPageLinks
+
// Calculate the HP and STR stats
|Name={{{Name|}}}
+
function calcStats() {
}}<!--
+
  // Get the level and rarity
 +
  var levelInput = document.getElementById('adv-level-input-field');
 +
  var level = levelInput.value;
 +
  var rarity = document.querySelector('input[name = "rarity"]:checked').value;
  
-->__NOTOC__
+
  // Manually set the level cap if we're dealing with a lower rarity
<div class="panel enemy-container" style="max-width:850px; border:1px solid #aaa; margin-bottom:1em;">
+
  switch (rarity) {
<div class="panel-heading"><div style="margin-bottom:-8px">{{#cargo_query:tables=EnemiesTest|fields=CONCAT('{{InlineIcon|Icon Element|',ElementalType,'}}')|where=Name="{{{Name|{{PAGENAME}}}}}"|group by=ElementalType|order by=HP DESC|more results text=|no html=|delimiter=}} <span style="font-size:.7em;">{{#cargo_query:tables=EnemiesTest|where=Name="{{{Name|{{PAGENAME}}}}}"|fields=Tribe|group by=Tribe|order by=HP DESC|more results text=}}</span></div><div>{{{Name|{{PAGENAME}}}}} <span style="font-size:.6em;">{{#ifeq:{{#cargo_query:tables=EnemiesTest|where=Name="{{{Name|{{PAGENAME}}}}}"|fields=RareStayTime|group by=Name|limit=1|more results text=|default=0|no html}} | 0 | {{#vardefine:statsTableQueryFields|MissionType=Quest(s),CONCAT('{{InlineIcon|Icon Element|', ElementalType, '}}')=Element,Tribe=Class,HP=HP,Atk=Str,Def=Def,Overwhelm=Overwhelm,MoveSpeed=Move Speed,TurnSpeed=Turn Speed,SuperArmor=Super Armor}} | (Rare){{#vardefine:statsTableQueryFields|MissionType=Quest(s),CONCAT('{{InlineIcon|Icon Element|', ElementalType, '}}')=Element,Tribe=Class,RareStayTime=Stay Time,HP=HP,Atk=Atk,Def=Def,Overwhelm=Overwhelm,MoveSpeed=Move Speed,TurnSpeed=Turn Speed,SuperArmor=Super Armor}}[[Category:Rare Enemies]] }}</span></div></div>
+
    case "3":
 +
      if (level > 60) {
 +
        level = 60;
 +
        levelInput.value = "60";
 +
      }
 +
      break;
 +
    case "4":
 +
      if (level > 70) {
 +
        level = 70;
 +
        levelInput.value = "70";
 +
      }
 +
      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("-");
 +
  }
 +
}
  
<div style="padding:1em;">
+
// Check if level is a number we can calculate with
{{#widget:EnemyMapDropdown
+
function validateLevel(value) {
|maps={{#cargo_query:tables=EnemiesTest
+
  if(isNaN(value) || value == "") {
|where=(Name="{{{Name|{{PAGENAME}}}}}"  AND EnemiesTest.MissionType NOT LIKE "%debug%" AND EnemiesTest.Def != 100000) AND ((EnemiesTest.MissionType LIKE "%Flame%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Water%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Wind%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Light%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Shadow%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR EnemiesTest.MissionType NOT LIKE "%The Mercurial Gauntlet%")
+
    return false;
|fields=CONCAT("\"", MissionType, "\"")
+
  }
|group by=MonsterId
+
  return true;
|limit=5000
+
}
|named args=yes
 
|delimiter=,
 
|intro=[
 
|outro=]
 
|default=null
 
|more results text=
 
|no html
 
|order by=HP DESC
 
}}
 
}}
 
  
{{StylizedHeader|Stats}}
+
// Check if rarity is either 3, 4, or 5
<div class="enemy-info-table">
+
function validateRarity(rarity) {
{{#cargo_query:tables=EnemiesTest
+
  if(rarity == 3 || rarity == 4 || rarity == 5 || rarity == "3" || rarity == "4" || rarity == "5" || rarity == "s" || rarity == "S") {
|where=(Name="{{{Name|{{PAGENAME}}}}}" AND EnemiesTest.MissionType NOT LIKE "%debug%" AND EnemiesTest.Def != 100000) AND ((EnemiesTest.MissionType LIKE "%Flame%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Water%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Wind%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Light%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Shadow%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR EnemiesTest.MissionType NOT LIKE "%The Mercurial Gauntlet%")
+
    return true;
|fields={{#var:statsTableQueryFields}}
+
  }
|format=table
+
  return false;
|named args=yes
+
}
|order by=HP DESC
 
|limit=160
 
|more results text=
 
|group by=MonsterId
 
}}
 
</div>
 
  
{{StylizedHeader|Overdrive/Break Stats}}
+
// Set the HP value in the display
<div class="enemy-info-table">
+
function setHP(value, level) {
{{#cargo_query:tables=EnemiesTest
+
  if (value != "-") {
|where=(Name="{{{Name|{{PAGENAME}}}}}" AND EnemiesTest.MissionType NOT LIKE "%debug%" AND EnemiesTest.Def != 100000) AND ((EnemiesTest.MissionType LIKE "%Flame%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Water%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Wind%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Light%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Shadow%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR EnemiesTest.MissionType NOT LIKE "%The Mercurial Gauntlet%")
+
    document.getElementById("adv-hp-label").innerHTML = "Level " + level + " HP"
|fields=MissionType=Quest(s),BaseOD=Base OD,BaseBreak=Base Break,BreakDuration=Break Duration,ODAtkRate=OD Str Rate,ODDefRate=OD Def Rate,BreakAtkRate=Break Str Rate,BreakDefRate=Break Def Rate
+
  } else {
|format=table
+
    document.getElementById("adv-hp-label").innerHTML = "HP"
|named args=yes
+
  }
|order by=HP DESC
+
  document.getElementById("adv-hp").innerHTML = value;
|limit=160
+
}
|more results text=
 
|group by=MonsterId
 
}}
 
</div>
 
  
{{StylizedHeader|Affliction Resists}}
+
// Set the Str value in the display
<div class="enemy-info-table">
+
function setStr(value, level) {
{{#cargo_query:tables=EnemiesTest
+
  if (value != "-") {
|where=(Name="{{{Name|{{PAGENAME}}}}}" AND EnemiesTest.MissionType NOT LIKE "%debug%" AND EnemiesTest.Def != 100000) AND ((EnemiesTest.MissionType LIKE "%Flame%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Water%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Wind%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Light%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR (EnemiesTest.MissionType LIKE "%Shadow%" AND EnemiesTest.MissionType NOT RLIKE "[5][1-9]" AND EnemiesTest.MissionType NOT RLIKE "[6-9][0-9]") OR EnemiesTest.MissionType NOT LIKE "%The Mercurial Gauntlet%")
+
    document.getElementById("adv-str-label").innerHTML = "Level " + level + " Str"
|fields=MissionType=Quest(s),Poison=Poison,Burn=Burn,Freeze=Freeze,Paralysis=Paralysis,Blind=Blind,Stun=Stun,Curse=Curse,Bog=Bog,Sleep=Sleep
+
  } else {
|format=table
+
    document.getElementById("adv-str-label").innerHTML = "Str"
|named args=yes
+
  }
|order by=HP DESC
+
  document.getElementById("adv-str").innerHTML = value;
|limit=160
+
}
|more results text=
 
|group by=MonsterId
 
}}
 
</div>{{#if:{{{Skills|}}} |{{StylizedHeader|Skills}}
 
''Similar to [[Combat Mechanics#Basic Attacks|basic attack modifiers]], enemies also have skill modifiers unique to each enemy's skill animation.''
 
{{{Skills|}}}}}
 
  
{{StylizedHeader|3D Model}}
+
// Calculate the HP
{{#if:{{{Model|}}} | {{{Model|}}} |
+
function calculateHP(level, rarity) {
{{3DModel|{{{Name|}}}}}
+
  var levelDiff = MAX_LEVEL - MIN_LEVEL;
}}
+
  var steps = (MAX_HP - MIN_HP[2]) / levelDiff;
[[Category:Enemies]]
+
  var statGain = (level-1) * steps;
</div>
+
  return Math.ceil(MIN_HP[rarity-3] + statGain);
</div>
+
}
</includeonly>
+
 
 +
// 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