Advertisement
Guest User

Untitled

a guest
Dec 9th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var isMobile, selectedLevel, selectedClass, pointsUsed, pointsLeft, maxPointsToSpend
  2.  
  3. mobileCheck = function() {
  4.     var check = false;
  5.     (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
  6.     return check;
  7. };
  8.  
  9. if (mobileCheck())
  10.     isMobile = true;
  11. else
  12.     isMobile = false;
  13.  
  14. $("#mobile-control-checkbox").prop('checked', isMobile);
  15. setControls();
  16.  
  17. // Mobile controls checkbox event
  18. $('#mobile-control-checkbox').click(function() {
  19.     isMobile = this.checked;
  20.     setControls();
  21. });
  22.  
  23. // Bindings for level
  24. $("#level-select").on("change", function() {
  25.     selectedLevel = $("#level-select").val();
  26.  
  27.     if (selectedLevel <= 100)
  28.         maxPointsToSpend = selectedLevel;
  29.     else if (selectedLevel <= 104)
  30.         maxPointsToSpend = 100;
  31.     else if (selectedLevel == 105)
  32.         maxPointsToSpend = 101;
  33.  
  34.     $("#points-left").html(pointsLeft);
  35.     reset();
  36.  
  37.     // activate child skills if their level is now correct
  38.     $.each(skills, function(skillId, skill) {
  39.         if (!skill.allowed) {
  40.             if (skill.parentSkills.length == 0) {
  41.                 if (skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
  42.                     skill.allowed = true;
  43.                 }
  44.             }
  45.             else if (skill.parentSkills.length == 1) {
  46.                 $.each(skill.parentSkills, function(index, ps) {
  47.                     if (skills[ps].skilled && skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
  48.                         skill.allowed = true;
  49.                     }
  50.                 })
  51.             }
  52.             else if (skill.parentSkills.length > 1) {
  53.                 var allParentsSkilled = true;
  54.  
  55.                 // evaluating
  56.                 $.each(skill.parentSkills, function(index, ps) {
  57.                     if (skills[ps].skilled == false)
  58.                         allParentsSkilled = false;
  59.                 });
  60.  
  61.                 if (allParentsSkilled && skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
  62.                     skill.allowed = true;
  63.                 }
  64.             }
  65.         }
  66.  
  67.     });
  68. });
  69.  
  70. // Bindings for class
  71. $("#class-select").on("change", function() {
  72.     classChanged();
  73. });
  74.  
  75. $("#reset-button").on("click", function() {
  76.     //$("#level-select").val(1);
  77.     //selectedLevel = 1;
  78.  
  79.     reset();
  80.  
  81.     //$("#class-select")[0].selectedIndex = 0;
  82.    
  83.     //maxPointsToSpend = selectedLevel;
  84.     //calculatePoints();
  85. });
  86.  
  87. class Skill {
  88.     constructor(id, maxLevel, parents, skillDataId) {
  89.         this.id = id;
  90.         this.maxLevel = maxLevel;
  91.         this.parents = parents;
  92.         this.skillDataId = skillDataId
  93.  
  94.         this.baseId = this.skillDataId.slice(0, -2);
  95.         this.minRequiredLevel = skillData[this.skillDataId]["required_level"];
  96.     }
  97.     get parentSkills() {
  98.         if (this.parents == null)
  99.             return [];
  100.         return this.parents;
  101.     }
  102.     get level() {
  103.         return parseInt($("#" + this.id).find("#level")[0].innerHTML);
  104.     }
  105.     set level(lvl) {
  106.         $("#" + this.id).find("#level")[0].innerHTML = lvl;
  107.     }
  108.     get allowed() {
  109.         if ($("#" + this.id).attr("allowed") == "true")
  110.             return true;
  111.         return false;
  112.     }
  113.     set allowed(bool) {
  114.         $("#" + this.id).attr("allowed", bool);
  115.         if (bool)
  116.             showSkillButtons(this);
  117.         else
  118.             hideSkillButtons(this);
  119.     }
  120.     get skilled() {
  121.         if ($("#" + this.id).attr("skilled") == "true") {
  122.             return true;
  123.         }
  124.         return false
  125.     }
  126.     set skilled(bool) {
  127.         $("#" + this.id).attr("skilled", bool);
  128.     }
  129.     get correctClass() {
  130.         // don't skill skill if class is wrong
  131.         let v = this.currentSkilldata["class_land"].split(", ");
  132.  
  133.         // if does not require a base class, test if skill class is selected
  134.         if (!v.some(r=> ["Noble", "Saint", "Mercenary", "Explorer", "No Class"].includes(r))) {
  135.             if ($.inArray(selectedClass, v) == -1) {
  136.                 return false;
  137.             }
  138.         }
  139.         return true;
  140.     }
  141.     get currentSkilldata() {
  142.         // Update id string for level <= 9
  143.         let idNow;
  144.         if (this.level.toString().length == 1) {
  145.             idNow = this.baseId + "0" + this.level;
  146.         }
  147.         else {
  148.             idNow = this.baseId + this.level;
  149.         }
  150.         return skillData[idNow];
  151.     }
  152.     get nextSkilldata() {
  153.         // do not return skill data if there is none because skill is maxed
  154.         if (this.level == this.maxLevel)
  155.             return null
  156.  
  157.         let idNext;
  158.         if (this.level.toString().length == 1) {
  159.             // If next level is >= 10 -> adjust string length
  160.             if (this.level + 1 >= 10) {
  161.                 idNext = this.baseId + (this.level + 1);
  162.             }
  163.             else {
  164.                 idNext = this.baseId + "0" + (this.level + 1);
  165.             }
  166.         }
  167.         // >= 10
  168.         else {
  169.             idNext = this.baseId + (this.level + 1);
  170.         }
  171.         return skillData[idNext]
  172.     }
  173.     createDescription() {
  174.         let descData = this.currentSkilldata;
  175.         let nextDescData = this.nextSkilldata;
  176.  
  177.         let desc = $("<div/>");
  178.  
  179.         let header = `
  180.         <div id="skill-description-header">
  181.             <h5 id="skill-name">${descData["name"]}</h5>
  182.             <label id="skill-level">${this.level}/${this.maxLevel}</label>
  183.         </div>
  184.         <div id="sub-header">
  185.             <label id="req-class">${descData["class_land"]}</label>
  186.         </div>
  187.         `;
  188.         desc.prepend(header);
  189.  
  190.         if (this.level != 0) {
  191.             let current_level = `
  192.             <div id="current-skill-level-description">
  193.                 <dl>
  194.                     <dt>Req. Level:</dt>
  195.                     <dd id="req-level">${descData["required_level"]}</dd>
  196.                     <dt>MP:</dt>
  197.                     <dd>${descData["mana_consumption"]}</dd>
  198.                     <dt>Cooldown:</dt>
  199.                     <dd>${descData["cooldown"]/1000}s</dd>
  200.                 </dl>
  201.                 <p id="skill-description-paragraph">${descData["description"]}</p>
  202.             </div>
  203.             <hr id="line">
  204.             `
  205.             desc.append(current_level);
  206.         }
  207.  
  208.         if (this.level != this.maxLevel) {
  209.             let next_level = `
  210.             <div id="next-skill-level-description">
  211.                 <h6 id="next-level">Next Level (${this.level + 1}):</h6>
  212.                 <dl>
  213.                     <dt>Req. Level:</dt>
  214.                     <dd id="req-level">${nextDescData["required_level"]}</dd>
  215.                     <dt>MP:</dt>
  216.                     <dd>${nextDescData["mana_consumption"]}</dd>
  217.                     <dt>Cooldown:</dt>
  218.                     <dd>${nextDescData["cooldown"]/1000}s</dd>
  219.                 </dl>
  220.                 <p id="skill-description-paragraph">${nextDescData["description"]}</p>
  221.             </div>
  222.             `
  223.             desc.append(next_level);    
  224.         }
  225.  
  226.         // Sets text color red if level is not reached
  227.         $.each($(desc).find("#req-level"), function(index, dd) {
  228.             if (parseInt(dd.innerHTML) > selectedLevel) {
  229.                 $(this).css("color", "red");
  230.             }
  231.         });
  232.  
  233.         return desc;
  234.     }
  235. }
  236.  
  237. function reset() {
  238.     // Resets skill points
  239.     $.each(skills, function(skillId, skill) {
  240.         skill.allowed = false;
  241.         skill.skilled = false;
  242.         skill.level = 1;
  243.         levelDownSkill(skill);
  244.         if (skill.parentSkills.length == 0) {
  245.             if (skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
  246.                 skill.allowed = true;
  247.             }
  248.         }
  249.     });
  250. }
  251.  
  252. function classChanged() {
  253.     selectedClass = $("#class-select").val();
  254.  
  255.     // Resets to noble if CC level (40+) is not selected
  256.     if (!["Noble", "Saint", "Mercenary", "Explorer"].includes(selectedClass)) {
  257.         if (selectedLevel < 40) {
  258.             console.log(selectedClass);
  259.             $("#class-select")[0].selectedIndex = 0;
  260.             selectedClass = $("#class-select").val();
  261.             console.log(selectedClass);
  262.             return false
  263.         }
  264.     }
  265.     // Base class was selected -> forbid cc skills
  266.     $.each(skills, function(skillId, skill) {
  267.         if (!skill.correctClass) {
  268.             skill.allowed = false;
  269.             skill.level = 1;
  270.             levelDownSkill(skill);
  271.         }
  272.     });
  273.  
  274.     // allow skills
  275.     $.each(skills, function(skillId, skill) {
  276.         if (!skill.allowed) {
  277.             if (skill.parentSkills.length == 0) {
  278.                 if (skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
  279.                     skill.allowed = true;
  280.                 }
  281.             }
  282.             else if (skill.parentSkills.length == 1) {
  283.                 $.each(skill.parentSkills, function(index, ps) {
  284.                     if (skills[ps].skilled && skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
  285.                         skill.allowed = true;
  286.                     }
  287.                 })
  288.             }
  289.             else if (skill.parentSkills.length > 1) {
  290.                 var allParentsSkilled = true;
  291.  
  292.                 // evaluating
  293.                 $.each(skill.parentSkills, function(index, ps) {
  294.                     if (skills[ps].skilled == false)
  295.                         allParentsSkilled = false;
  296.                 });
  297.  
  298.                 if (allParentsSkilled && skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
  299.                     skill.allowed = true;
  300.                 }
  301.             }
  302.         }
  303.  
  304.     });
  305. }
  306.  
  307. function showSkillDescription(skill) {
  308.     $("#skill-description").css("visibility", "")
  309.     $("#skill-description").empty();
  310.     $("#skill-description").prepend(skill.createDescription());
  311. }
  312.  
  313. function initSkills() {
  314.     /// Allows all skills to be skilled if they do not rely on another skill (aka. null)
  315.     $.each(skills, function(skill_id, skill) {
  316.         skill.allowed = false;
  317.         if (skill.parentSkills.length == 0) {
  318.             if (skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
  319.                 skill.allowed = true;
  320.             }
  321.         }
  322.     });
  323. }
  324.  
  325. function getAllChildSkills(filter_for, results=[]) {
  326.     $.each(skills, function(skill_id, skill) {
  327.  
  328.         if ($.inArray(filter_for, skill.parentSkills) != -1 && skill.parentSkills != null) {
  329.            
  330.             // Not already in array
  331.             if ($.inArray(skill_id, results) == -1) {
  332.  
  333.                 results.push(skill_id);
  334.                 getAllChildSkills(skill_id, results);
  335.             }
  336.         }
  337.     });
  338.  
  339.     return results;
  340. }
  341.  
  342. function getDirectChildSkills(filter_for) {
  343.     var childsFound = [];
  344.  
  345.     $.each(skills, function(skill_id, skill) {
  346.         if ($.inArray(filter_for, skill.parentSkills) != -1) {
  347.             childsFound.push(skill);
  348.         }
  349.     });
  350.     return childsFound;
  351. }
  352.  
  353. function levelUpSkill(skill, max=false) {
  354.     /// increases skill level
  355.  
  356.     // Well, obviously do not let user skill a skill that can't be skilled at the time :d
  357.     if (!skill.allowed)
  358.         return false;
  359.  
  360.     // don't skill skill if the level is not high enough
  361.     if (skill.nextSkilldata["required_level"] > selectedLevel)
  362.         return false;
  363.  
  364.     // test if selected class matches skill required class
  365.     if (!skill.correctClass)
  366.         return false;
  367.  
  368.     // checks if skill is not maxed already
  369.     if (skill.level >= skill.maxLevel)
  370.         return false;
  371.  
  372.     if (!pointsLeft > 0)
  373.         return false;
  374.  
  375.     // if skill level == 0, skill will be set to 1 and the next child skill will be allowed to be skilled
  376.     if (skill.level == 0) {
  377.         skill.level = 1;
  378.         skill.skilled = true;
  379.  
  380.         var childSkills = getDirectChildSkills(skill.id);
  381.         $.each(childSkills, function(index, cs) {
  382.  
  383.             // if only one parent is needed for the skill, allowed it
  384.             if (cs.parentSkills.length == 1 && cs.correctClass && cs.minRequiredLevel <= selectedLevel) {
  385.                 cs.allowed = true;
  386.             }
  387.  
  388.             // skill needs more than one parent skill to be skilled
  389.             else if (cs.parentSkills.length > 1) {
  390.                 var allParentsSkilled = true;
  391.  
  392.                 // evaluating
  393.                 $.each(cs.parentSkills, function(index, ps) {
  394.                     if (skills[ps].skilled == false)
  395.                         allParentsSkilled = false;
  396.                 });
  397.  
  398.                 if (allParentsSkilled == true && cs.correctClass && cs.minRequiredLevel <= selectedLevel) {
  399.                     cs.allowed = true;
  400.                 }
  401.             }
  402.         });
  403.  
  404.     }
  405.     else {
  406.         skill.level += 1;
  407.     }
  408.  
  409.     if (max == true) {
  410.         while (skill.level != skill.maxLevel && pointsLeft > 0) {
  411.             if (levelUpSkill(skill) == false)
  412.                 break;
  413.         }
  414.     }
  415.  
  416.     calculatePoints();
  417. }
  418.  
  419. function levelDownSkill(skill) {
  420.     /// lowers skill level
  421.  
  422.     // stops user from going < 0
  423.     if (skill.level == 0)
  424.         return;
  425.  
  426.     // if level == 1, skill will be set to 0 and all child skills as well
  427.     if (skill.level == 1) {
  428.         skill.level = 0;
  429.         skill.skilled = false;
  430.  
  431.         // Child skills
  432.         $.each(getAllChildSkills(skill.id), function(_, skill_id) {
  433.             skills[skill_id].level = 0;
  434.             skills[skill_id].allowed = false;
  435.             skills[skill_id].skilled = false;
  436.             hideSkillButtons(skills[skill_id])
  437.         });
  438.     }
  439.     // else just lower the number for one
  440.     else {
  441.         skill.level -= 1;
  442.     }
  443.     calculatePoints();
  444. }
  445.  
  446. function hideSkillButtons(skill) {
  447.     // For some reason it removes the + button from allowed skills when used in a loop
  448.     // together
  449.     // FIXME: Investigate?
  450.     $("#" + skill.id + " > .level-minus-btn").each(function() {
  451.         $(this).css("visibility", "hidden");
  452.     });
  453.     $("#" + skill.id + " > .level-plus-btn").each(function() {
  454.         $(this).css("visibility", "hidden");
  455.     });
  456. }
  457.  
  458. function showSkillButtons(skill) {
  459.     // See hideSkillButtons
  460.     $("#" + skill.id + " > .level-minus-btn").each(function() {
  461.         $(this).css("visibility", "");
  462.     });
  463.     $("#" + skill.id + " > .level-plus-btn").each(function() {
  464.         $(this).css("visibility", "");
  465.     });
  466. }
  467.  
  468. function setControls() {
  469.     // Unbind all bindings
  470.     $(".level-plus-btn").unbind();
  471.     $(".level-minus-btn").unbind();
  472.     $(".skill-icon").unbind();
  473.  
  474.     $("#btn-style").remove();
  475.  
  476.     switch (isMobile) {
  477.  
  478.         case false:
  479.             $(".skill-icon").mouseup(function(event) {
  480.  
  481.                 let skill = skills[this.parentElement.id]
  482.                
  483.                 switch(event.which) {
  484.                     case 1:
  485.                         if (event.shiftKey)
  486.                             levelUpSkill(skill, max=true);
  487.                         else
  488.                             levelUpSkill(skill);
  489.                         break;
  490.  
  491.                     case 3:
  492.                         if (event.shiftKey) {
  493.                             skill.level = 1;
  494.                             levelDownSkill(skill);
  495.                         }
  496.                         else
  497.                             levelDownSkill(skill);
  498.                         break;
  499.                 }
  500.  
  501.                 showSkillDescription(skill);
  502.  
  503.             });
  504.  
  505.             $(".skill-icon").hover(function() {
  506.                 showSkillDescription(skills[this.parentElement.id])
  507.             })
  508.  
  509.             // blocks contextmenu on skill-icon
  510.             $('.skill-icon').bind("contextmenu", function(e) {
  511.                 e.preventDefault();
  512.                 e.stopPropagation();
  513.                 return false;
  514.             });
  515.  
  516.             var styleTag = $('<style id="btn-style">.level-plus-btn { visibility: hidden; } .level-minus-btn {visibility: hidden;}</style>')
  517.             $('html > head').append(styleTag);
  518.  
  519.             break;
  520.  
  521.         // Controls for smartphone
  522.         case true:
  523.             // Maps plus button to functions
  524.             $(".level-plus-btn").click(function(e) {
  525.                 let skill = skills[this.parentElement.id]
  526.                 if (e.shiftKey)
  527.                     // Max skill
  528.                     levelUpSkill(skill, max=true);
  529.                 else
  530.                     // Just one level
  531.                     levelUpSkill(skill);
  532.                 showSkillDescription(skill);
  533.             });
  534.  
  535.             $(".level-minus-btn").click(function(e) {
  536.                 let skill = skills[this.parentElement.id]
  537.                 // Set skill to 0
  538.                 if (e.shiftKey) {
  539.                     skill.level = 1; // Workaround because I don't want to write an extra fnc
  540.                     levelDownSkill(skill);
  541.                 }
  542.                 // Just one level
  543.                 else
  544.                     levelDownSkill(skill);
  545.             showSkillDescription(skill);
  546.  
  547.             });
  548.  
  549.             //Maps icon click to event
  550.             $(".skill-icon").mouseup(function(event) {
  551.                 switch(event.which) {
  552.                     case 1:
  553.                         showSkillDescription(skills[this.parentElement.id]);
  554.                         break;
  555.                 }
  556.             });
  557.    
  558.             var styleTag = $('<style id="btn-style">.level-plus-btn { visibility: ""; } .level-minus-btn {visibility: "";}</style>')
  559.             $('html > head').append(styleTag);
  560.  
  561.             break;
  562.     }
  563. }
  564.  
  565. function calculatePoints() {
  566.     let _pointsUsed = 0;
  567.  
  568.     $.each(skills, function(skillId, skill) {
  569.         _pointsUsed += skill.level;
  570.     });
  571.  
  572.     pointsLeft = maxPointsToSpend - _pointsUsed;
  573.     pointsUsed = _pointsUsed;
  574.  
  575.     $("#points-used").html(pointsUsed);
  576.     $("#points-left").html(pointsLeft);
  577. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement