Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var isMobile, selectedLevel, selectedClass, pointsUsed, pointsLeft, maxPointsToSpend
- mobileCheck = function() {
- var check = false;
- (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);
- return check;
- };
- if (mobileCheck())
- isMobile = true;
- else
- isMobile = false;
- $("#mobile-control-checkbox").prop('checked', isMobile);
- setControls();
- // Mobile controls checkbox event
- $('#mobile-control-checkbox').click(function() {
- isMobile = this.checked;
- setControls();
- });
- // Bindings for level
- $("#level-select").on("change", function() {
- selectedLevel = $("#level-select").val();
- if (selectedLevel <= 100)
- maxPointsToSpend = selectedLevel;
- else if (selectedLevel <= 104)
- maxPointsToSpend = 100;
- else if (selectedLevel == 105)
- maxPointsToSpend = 101;
- $("#points-left").html(pointsLeft);
- reset();
- // activate child skills if their level is now correct
- $.each(skills, function(skillId, skill) {
- if (!skill.allowed) {
- if (skill.parentSkills.length == 0) {
- if (skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
- skill.allowed = true;
- }
- }
- else if (skill.parentSkills.length == 1) {
- $.each(skill.parentSkills, function(index, ps) {
- if (skills[ps].skilled && skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
- skill.allowed = true;
- }
- })
- }
- else if (skill.parentSkills.length > 1) {
- var allParentsSkilled = true;
- // evaluating
- $.each(skill.parentSkills, function(index, ps) {
- if (skills[ps].skilled == false)
- allParentsSkilled = false;
- });
- if (allParentsSkilled && skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
- skill.allowed = true;
- }
- }
- }
- });
- });
- // Bindings for class
- $("#class-select").on("change", function() {
- classChanged();
- });
- $("#reset-button").on("click", function() {
- //$("#level-select").val(1);
- //selectedLevel = 1;
- reset();
- //$("#class-select")[0].selectedIndex = 0;
- //maxPointsToSpend = selectedLevel;
- //calculatePoints();
- });
- class Skill {
- constructor(id, maxLevel, parents, skillDataId) {
- this.id = id;
- this.maxLevel = maxLevel;
- this.parents = parents;
- this.skillDataId = skillDataId
- this.baseId = this.skillDataId.slice(0, -2);
- this.minRequiredLevel = skillData[this.skillDataId]["required_level"];
- }
- get parentSkills() {
- if (this.parents == null)
- return [];
- return this.parents;
- }
- get level() {
- return parseInt($("#" + this.id).find("#level")[0].innerHTML);
- }
- set level(lvl) {
- $("#" + this.id).find("#level")[0].innerHTML = lvl;
- }
- get allowed() {
- if ($("#" + this.id).attr("allowed") == "true")
- return true;
- return false;
- }
- set allowed(bool) {
- $("#" + this.id).attr("allowed", bool);
- if (bool)
- showSkillButtons(this);
- else
- hideSkillButtons(this);
- }
- get skilled() {
- if ($("#" + this.id).attr("skilled") == "true") {
- return true;
- }
- return false
- }
- set skilled(bool) {
- $("#" + this.id).attr("skilled", bool);
- }
- get correctClass() {
- // don't skill skill if class is wrong
- let v = this.currentSkilldata["class_land"].split(", ");
- // if does not require a base class, test if skill class is selected
- if (!v.some(r=> ["Noble", "Saint", "Mercenary", "Explorer", "No Class"].includes(r))) {
- if ($.inArray(selectedClass, v) == -1) {
- return false;
- }
- }
- return true;
- }
- get currentSkilldata() {
- // Update id string for level <= 9
- let idNow;
- if (this.level.toString().length == 1) {
- idNow = this.baseId + "0" + this.level;
- }
- else {
- idNow = this.baseId + this.level;
- }
- return skillData[idNow];
- }
- get nextSkilldata() {
- // do not return skill data if there is none because skill is maxed
- if (this.level == this.maxLevel)
- return null
- let idNext;
- if (this.level.toString().length == 1) {
- // If next level is >= 10 -> adjust string length
- if (this.level + 1 >= 10) {
- idNext = this.baseId + (this.level + 1);
- }
- else {
- idNext = this.baseId + "0" + (this.level + 1);
- }
- }
- // >= 10
- else {
- idNext = this.baseId + (this.level + 1);
- }
- return skillData[idNext]
- }
- createDescription() {
- let descData = this.currentSkilldata;
- let nextDescData = this.nextSkilldata;
- let desc = $("<div/>");
- let header = `
- <div id="skill-description-header">
- <h5 id="skill-name">${descData["name"]}</h5>
- <label id="skill-level">${this.level}/${this.maxLevel}</label>
- </div>
- <div id="sub-header">
- <label id="req-class">${descData["class_land"]}</label>
- </div>
- `;
- desc.prepend(header);
- if (this.level != 0) {
- let current_level = `
- <div id="current-skill-level-description">
- <dl>
- <dt>Req. Level:</dt>
- <dd id="req-level">${descData["required_level"]}</dd>
- <dt>MP:</dt>
- <dd>${descData["mana_consumption"]}</dd>
- <dt>Cooldown:</dt>
- <dd>${descData["cooldown"]/1000}s</dd>
- </dl>
- <p id="skill-description-paragraph">${descData["description"]}</p>
- </div>
- <hr id="line">
- `
- desc.append(current_level);
- }
- if (this.level != this.maxLevel) {
- let next_level = `
- <div id="next-skill-level-description">
- <h6 id="next-level">Next Level (${this.level + 1}):</h6>
- <dl>
- <dt>Req. Level:</dt>
- <dd id="req-level">${nextDescData["required_level"]}</dd>
- <dt>MP:</dt>
- <dd>${nextDescData["mana_consumption"]}</dd>
- <dt>Cooldown:</dt>
- <dd>${nextDescData["cooldown"]/1000}s</dd>
- </dl>
- <p id="skill-description-paragraph">${nextDescData["description"]}</p>
- </div>
- `
- desc.append(next_level);
- }
- // Sets text color red if level is not reached
- $.each($(desc).find("#req-level"), function(index, dd) {
- if (parseInt(dd.innerHTML) > selectedLevel) {
- $(this).css("color", "red");
- }
- });
- return desc;
- }
- }
- function reset() {
- // Resets skill points
- $.each(skills, function(skillId, skill) {
- skill.allowed = false;
- skill.skilled = false;
- skill.level = 1;
- levelDownSkill(skill);
- if (skill.parentSkills.length == 0) {
- if (skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
- skill.allowed = true;
- }
- }
- });
- }
- function classChanged() {
- selectedClass = $("#class-select").val();
- // Resets to noble if CC level (40+) is not selected
- if (!["Noble", "Saint", "Mercenary", "Explorer"].includes(selectedClass)) {
- if (selectedLevel < 40) {
- console.log(selectedClass);
- $("#class-select")[0].selectedIndex = 0;
- selectedClass = $("#class-select").val();
- console.log(selectedClass);
- return false
- }
- }
- // Base class was selected -> forbid cc skills
- $.each(skills, function(skillId, skill) {
- if (!skill.correctClass) {
- skill.allowed = false;
- skill.level = 1;
- levelDownSkill(skill);
- }
- });
- // allow skills
- $.each(skills, function(skillId, skill) {
- if (!skill.allowed) {
- if (skill.parentSkills.length == 0) {
- if (skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
- skill.allowed = true;
- }
- }
- else if (skill.parentSkills.length == 1) {
- $.each(skill.parentSkills, function(index, ps) {
- if (skills[ps].skilled && skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
- skill.allowed = true;
- }
- })
- }
- else if (skill.parentSkills.length > 1) {
- var allParentsSkilled = true;
- // evaluating
- $.each(skill.parentSkills, function(index, ps) {
- if (skills[ps].skilled == false)
- allParentsSkilled = false;
- });
- if (allParentsSkilled && skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
- skill.allowed = true;
- }
- }
- }
- });
- }
- function showSkillDescription(skill) {
- $("#skill-description").css("visibility", "")
- $("#skill-description").empty();
- $("#skill-description").prepend(skill.createDescription());
- }
- function initSkills() {
- /// Allows all skills to be skilled if they do not rely on another skill (aka. null)
- $.each(skills, function(skill_id, skill) {
- skill.allowed = false;
- if (skill.parentSkills.length == 0) {
- if (skill.correctClass && skill.minRequiredLevel <= selectedLevel) {
- skill.allowed = true;
- }
- }
- });
- }
- function getAllChildSkills(filter_for, results=[]) {
- $.each(skills, function(skill_id, skill) {
- if ($.inArray(filter_for, skill.parentSkills) != -1 && skill.parentSkills != null) {
- // Not already in array
- if ($.inArray(skill_id, results) == -1) {
- results.push(skill_id);
- getAllChildSkills(skill_id, results);
- }
- }
- });
- return results;
- }
- function getDirectChildSkills(filter_for) {
- var childsFound = [];
- $.each(skills, function(skill_id, skill) {
- if ($.inArray(filter_for, skill.parentSkills) != -1) {
- childsFound.push(skill);
- }
- });
- return childsFound;
- }
- function levelUpSkill(skill, max=false) {
- /// increases skill level
- // Well, obviously do not let user skill a skill that can't be skilled at the time :d
- if (!skill.allowed)
- return false;
- // don't skill skill if the level is not high enough
- if (skill.nextSkilldata["required_level"] > selectedLevel)
- return false;
- // test if selected class matches skill required class
- if (!skill.correctClass)
- return false;
- // checks if skill is not maxed already
- if (skill.level >= skill.maxLevel)
- return false;
- if (!pointsLeft > 0)
- return false;
- // if skill level == 0, skill will be set to 1 and the next child skill will be allowed to be skilled
- if (skill.level == 0) {
- skill.level = 1;
- skill.skilled = true;
- var childSkills = getDirectChildSkills(skill.id);
- $.each(childSkills, function(index, cs) {
- // if only one parent is needed for the skill, allowed it
- if (cs.parentSkills.length == 1 && cs.correctClass && cs.minRequiredLevel <= selectedLevel) {
- cs.allowed = true;
- }
- // skill needs more than one parent skill to be skilled
- else if (cs.parentSkills.length > 1) {
- var allParentsSkilled = true;
- // evaluating
- $.each(cs.parentSkills, function(index, ps) {
- if (skills[ps].skilled == false)
- allParentsSkilled = false;
- });
- if (allParentsSkilled == true && cs.correctClass && cs.minRequiredLevel <= selectedLevel) {
- cs.allowed = true;
- }
- }
- });
- }
- else {
- skill.level += 1;
- }
- if (max == true) {
- while (skill.level != skill.maxLevel && pointsLeft > 0) {
- if (levelUpSkill(skill) == false)
- break;
- }
- }
- calculatePoints();
- }
- function levelDownSkill(skill) {
- /// lowers skill level
- // stops user from going < 0
- if (skill.level == 0)
- return;
- // if level == 1, skill will be set to 0 and all child skills as well
- if (skill.level == 1) {
- skill.level = 0;
- skill.skilled = false;
- // Child skills
- $.each(getAllChildSkills(skill.id), function(_, skill_id) {
- skills[skill_id].level = 0;
- skills[skill_id].allowed = false;
- skills[skill_id].skilled = false;
- hideSkillButtons(skills[skill_id])
- });
- }
- // else just lower the number for one
- else {
- skill.level -= 1;
- }
- calculatePoints();
- }
- function hideSkillButtons(skill) {
- // For some reason it removes the + button from allowed skills when used in a loop
- // together
- // FIXME: Investigate?
- $("#" + skill.id + " > .level-minus-btn").each(function() {
- $(this).css("visibility", "hidden");
- });
- $("#" + skill.id + " > .level-plus-btn").each(function() {
- $(this).css("visibility", "hidden");
- });
- }
- function showSkillButtons(skill) {
- // See hideSkillButtons
- $("#" + skill.id + " > .level-minus-btn").each(function() {
- $(this).css("visibility", "");
- });
- $("#" + skill.id + " > .level-plus-btn").each(function() {
- $(this).css("visibility", "");
- });
- }
- function setControls() {
- // Unbind all bindings
- $(".level-plus-btn").unbind();
- $(".level-minus-btn").unbind();
- $(".skill-icon").unbind();
- $("#btn-style").remove();
- switch (isMobile) {
- case false:
- $(".skill-icon").mouseup(function(event) {
- let skill = skills[this.parentElement.id]
- switch(event.which) {
- case 1:
- if (event.shiftKey)
- levelUpSkill(skill, max=true);
- else
- levelUpSkill(skill);
- break;
- case 3:
- if (event.shiftKey) {
- skill.level = 1;
- levelDownSkill(skill);
- }
- else
- levelDownSkill(skill);
- break;
- }
- showSkillDescription(skill);
- });
- $(".skill-icon").hover(function() {
- showSkillDescription(skills[this.parentElement.id])
- })
- // blocks contextmenu on skill-icon
- $('.skill-icon').bind("contextmenu", function(e) {
- e.preventDefault();
- e.stopPropagation();
- return false;
- });
- var styleTag = $('<style id="btn-style">.level-plus-btn { visibility: hidden; } .level-minus-btn {visibility: hidden;}</style>')
- $('html > head').append(styleTag);
- break;
- // Controls for smartphone
- case true:
- // Maps plus button to functions
- $(".level-plus-btn").click(function(e) {
- let skill = skills[this.parentElement.id]
- if (e.shiftKey)
- // Max skill
- levelUpSkill(skill, max=true);
- else
- // Just one level
- levelUpSkill(skill);
- showSkillDescription(skill);
- });
- $(".level-minus-btn").click(function(e) {
- let skill = skills[this.parentElement.id]
- // Set skill to 0
- if (e.shiftKey) {
- skill.level = 1; // Workaround because I don't want to write an extra fnc
- levelDownSkill(skill);
- }
- // Just one level
- else
- levelDownSkill(skill);
- showSkillDescription(skill);
- });
- //Maps icon click to event
- $(".skill-icon").mouseup(function(event) {
- switch(event.which) {
- case 1:
- showSkillDescription(skills[this.parentElement.id]);
- break;
- }
- });
- var styleTag = $('<style id="btn-style">.level-plus-btn { visibility: ""; } .level-minus-btn {visibility: "";}</style>')
- $('html > head').append(styleTag);
- break;
- }
- }
- function calculatePoints() {
- let _pointsUsed = 0;
- $.each(skills, function(skillId, skill) {
- _pointsUsed += skill.level;
- });
- pointsLeft = maxPointsToSpend - _pointsUsed;
- pointsUsed = _pointsUsed;
- $("#points-used").html(pointsUsed);
- $("#points-left").html(pointsLeft);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement