Problema con los valores – JavaScript – Foros de SitePoint
Tengo una pantalla donde compruebo si una habilidad ha subido de nivel. Cada habilidad tiene 4-5 niveles para alcanzar y un puntaje objetivo para alcanzar el nivel. La puntuación objetivo se calcula sumando las estadísticas de los dos personajes. Por ejemplo, la construcción es agilidad + habilidad. La primera estadística es un indicador estadístico. La segunda estadística es una estadística táctil.
La pantalla de desarrollo del personaje tiene dos botones para cambiar de un panel a otro. Botón de personaje y habilidades de elaboración. Tengo que presionar el botón de habilidades de elaboración dos veces antes de que el cambio se registre en el valor de puntos de la puntuación de elaboración. Curiosamente, creo que el puntaje que está buscando es el puntaje correcto, parece ser el valor correcto en character.crafts donde quiero que esté. Cuando inicio sesión por segunda vez, la pantalla solo usa la cuenta modificada. Actualizo la cuenta con estadísticas en la pantalla del personaje.
Miro el objeto símbolo y después de actualizarlo, la puntuación es 28. Pero cuando presiono el primer botón, muestra 21. En el segundo, utiliza 28 puntos.
Esta es mi función pipStats en el personaje.
this.CharacterClass.prototype.pipCrafts = function()
{
var skillsObj = this.crafts;
console.log(this);
for(skillIndex in skillsObj)
{
for(tierIndex in skillsObj[skillIndex].tiers)
{
if(skillsObj[skillIndex].score >= skillsObj[skillIndex].tiers[tierIndex].targetScore)
{
console.log("CRAFT TIERS UPDATED");
console.log("Craft: " + skillsObj[skillIndex].skill);
console.log("Craft Tier: " + skillsObj[skillIndex].tier);
console.log("Craft Score: " + skillsObj[skillIndex].score);
console.log("Target Score: " + skillsObj[skillIndex].tiers[tierIndex].targetScore);
this.crafts[skillIndex].tier = skillsObj[skillIndex].tiers[tierIndex].tier;
}else{
console.log("Score Missed");
console.log("Craft: " + skillsObj[skillIndex].skill);
console.log("Craft Tier: " + skillsObj[skillIndex].tier);
console.log("Craft Score: " + skillsObj[skillIndex].score);
console.log("Target Score: " + skillsObj[skillIndex].tiers[tierIndex].targetScore);
}
}
}
};
artesaníaHabilidadesPresione el botón
// click craftsButton
if (event.target.matches("#craftSkillsButton") || event.target.closest("#craftSkillsButton"))
{
console.log("CHARACTER CRAFTS HERE");
console.log(character.crafts);
for(charSkillsIndex in character.crafts)
{
if(equationHelper.crafts[index].skill == character.crafts[charSkillsIndex].skill)
{
// we have matched an owned skill with all possible skills
var amount = parseInt(character.stats[skillSplit[0]]) + parseInt(character.sensoryStats[skillSplit[1]]);
character.crafts[charSkillsIndex].score = parseInt(amount);
}
}
console.log("Very Top");
console.log(character);
character.pipCrafts();
// fetch craft skills screen
var dataSend = {userToken:userResult.token,
userSerial:userResult.serial,
html:"craft-skills-character-screen"};
$.ajax({
url: 'http://localhost/OtherRealms/php/scripts/fetch_html.php',
dataType: 'json',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: dataSend,
success: function( data, textStatus, jQxhr ){
if(data.hasOwnProperty("message"))
{
switch(data.message)
{
case "success":
console.log("html retrieve");
console.log(character);
document.getElementById("pageWrapper").innerHTML = "";
document.getElementById("pageWrapper").innerHTML = data.html;
document.querySelector("#skillPointCount").innerHTML = "";
document.querySelector("#skillPointCount").innerHTML = character.skillPoints + " SP";
// fetch skill balances
var equationData = {"type":"crafts"};
$.ajax({
url: 'http://localhost/OtherRealms/php/scripts/fetch_balance_equations.php',
dataType: 'json',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: equationData,
success: function( data, textStatus, jQxhr ){
if(data.hasOwnProperty("message"))
{
switch(data.message)
{
case "success":
// place equations for the crafts
equationHelper.crafts = data;
for(equation in equationHelper.crafts)
{
if(equation !== "success")
{
if(equationHelper.crafts[equation].skill)
{
var element = document.querySelectorAll("#"+equationHelper.crafts[equation].skill + "Equation");
element[0].innerHTML = "";
element[0].innerHTML = equationHelper.crafts[equation].equation;
}
}
}
for(skill in character.crafts)
{
// remove buy button and set skill per aquired skills
document.querySelector("#" + character.crafts[skill].skill + "Buy").remove();
document.querySelector("#" + character.crafts[skill].skill + "Tier").innerHTML = "" + character.crafts[skill].tier + "";
// end loop through skills
}
for(index in equationHelper.crafts)
{
if(index !== "message")
{
var skillSplit = equationHelper.crafts[index].equation.split("+");
for(element in skillSplit)
{
skillSplit[element] = skillSplit[element].trim();
}
var box = document.querySelector("#" + equationHelper.crafts[index].skill + "Score");
box.innerHTML = "0";
// test if character has the skill, if so set the box to contain the balance
for(charSkillsIndex in character.crafts)
{
if(equationHelper.crafts[index].skill == character.crafts[charSkillsIndex].skill)
{
// we have matched an owned skill with all possible skills
var amount = parseInt(character.stats[skillSplit[0]]) + parseInt(character.sensoryStats[skillSplit[1]]);
character.crafts[charSkillsIndex].score = parseInt(amount);
box.innerHTML = amount;
}
}
}
}
// update balance boxes for the crafts
break;
}
}
},
error: function( jqXhr, textStatus, errorThrown ){
console.log( errorThrown );
}
// end fetch skill balances
});
break;
}
}
},
error: function( jqXhr, textStatus, errorThrown ){
console.log( errorThrown );
}
});
console.log("Character Bottom");
console.log(character);
// end craft skills button press
}