I am designing a game and trying, when the player enters the game, to send a request to the Cloud script and have it return some player data. I am using the Cloud script to perform the command once and not send too many messages to reduce the waiting time for the player. After the Cloud sends the response, I organize the data. So far, the Cloud sends the level data, and this is the code in use handlers.getPlayerLevel = function (context) { try { var getPlayerDataRequest = { PlayFabId: currentPlayerId, Keys: ["Experience"] };
var getPlayerDataResponse = server.GetUserData(getPlayerDataRequest);
var playerExperience = 0;
if (getPlayerDataResponse && getPlayerDataResponse.Data && getPlayerDataResponse.Data["Experience"]) {
playerExperience = parseInt(getPlayerDataResponse.Data["Experience"].Value, 10);
} else {
var createPlayerExperienceRequest = {
PlayFabId: currentPlayerId,
Data: {
"Experience": "0"
}
};
server.UpdateUserData(createPlayerExperienceRequest);
}
var playerLevel = calculatePlayerLevel(playerExperience);
var remainingExperience = calculateRemainingExperience(playerExperience, playerLevel);
return {
CurrentLevel: playerLevel,
CurrentExperience: playerExperience,
RemainingExperienceForNextLevel: remainingExperience
};
} catch (error) {
return error.message;
}
};
function calculatePlayerLevel(experience) { var baseExperience = 100; var experienceMultiplier = 1.15;
var level = 1;
var requiredExperience = baseExperience;
while (experience >= requiredExperience) {
experience -= requiredExperience;
level++;
requiredExperience = Math.floor(baseExperience * Math.pow(experienceMultiplier, level - 1));
}
return level;
}
function calculateRemainingExperience(totalExperience, currentLevel) { var baseExperience = 100; var experienceMultiplier = 1.15;
var requiredExperience = Math.floor(baseExperience * Math.pow(experienceMultiplier, currentLevel - 1));
return Math.max(0, requiredExperience - totalExperience);
}
I tried to modify the code to return a 'CN' value, but it no longer works correctly, and I don't know why. Here is the new code."
handlers.getPlayerLevel = function (context) { try { var playerExperience = getPlayerExperience(); var currencyValue = getPlayerCurrency("CN"); var playerLevel = calculatePlayerLevel(playerExperience); var remainingExperience = calculateRemainingExperience(playerExperience, playerLevel);
return {
CurrentLevel: playerLevel,
CurrentExperience: playerExperience,
RemainingExperienceForNextLevel: remainingExperience
};
} catch (error) {
console.error("Error in getPlayerLevel:", error);
return { error: error.message };
}
};
function getPlayerExperience() { var getPlayerDataRequest = { PlayFabId: currentPlayerId, Keys: ["Experience"] };
var getPlayerDataResponse = server.GetUserData(getPlayerDataRequest);
if (getPlayerDataResponse && getPlayerDataResponse.Data && getPlayerDataResponse.Data["Experience"]) {
return parseInt(getPlayerDataResponse.Data["Experience"].Value, 10);
} else {
createPlayerExperience("0");
return 0;
}
}
function createPlayerExperience(value) { var createPlayerExperienceRequest = { PlayFabId: currentPlayerId, Data: { "Experience": value } }; server.UpdateUserData(createPlayerExperienceRequest); }
function calculatePlayerLevel(experience) { var baseExperience = 100; var experienceMultiplier = 1.15;
return Math.floor(1 + Math.log(experience / baseExperience) / Math.log(experienceMultiplier));
}
function calculateRemainingExperience(totalExperience, currentLevel) { var baseExperience = 100; var experienceMultiplier = 1.15;
var requiredExperience = Math.floor(baseExperience * Math.pow(experienceMultiplier, currentLevel - 1));
return Math.max(0, requiredExperience - totalExperience);
}
function getPlayerCurrency(currencyCode) { var getUserCurrencyRequest = { PlayFabId: currentPlayerId }; var userCurrency = server.GetUserVirtualCurrencyBalance(getUserCurrencyRequest);
return userCurrency && userCurrency.VirtualCurrency && userCurrency.VirtualCurrency[currencyCode] || 0;
}