Установка:
- Поместите загруженные файлы в соответствующие места
- Посмотрите документацию и примеры
- Готово
Currency API:
События Currency API(Events):
Player API:
Примеры:
Готовый тестовый скрипт, обновит худ денег, если вы выдадите себе деньги. (Используется при разработке)
ServerSide Code:
ClientSide Code:
- Поместите загруженные файлы в соответствующие места
- Посмотрите документацию и примеры
- Готово
Currency API:
Код:
const currencyAPI = require("../currency-api");
Код:
/**
* Adds a currency to the system.
* @param {String} key Currency identifier. (such as vip_tokens)
* @param {String} name Currency's human readable name. (such as VIP Tokens)
* @param {Boolean} isShared Whether the currency will use shared data or not. Useful if you want to have a money HUD etc.
* @return {Object} The added currency object, will be null if there were any mistakes.
* @fires currencyDefined
*/
currencyAPI.addCurrency(key, name, isShared);
/**
* Returns whether the specified key is a registered currency or not.
* @param {String} key Currency identifier.
* @return {Boolean}
*/
currencyAPI.hasCurrency(key);
/**
* Returns the specified currency's object.
* @param {String} key Currency identifier.
* @return {Object} The currency object, will be undefined if the key isn't registered.
*/
currencyAPI.getCurrency(key);
/**
* Returns an array of all registered currency identifiers.
* @return {String[]}
*/
currencyAPI.getAllCurrencies();
/**
* Returns the human readable name of the specified currency.
* @param {String} key Currency identifier.
* @return {String} Human readable name, will be Invalid Currency if the key isn't registered.
*/
currencyAPI.getCurrencyName(key);
/**
* Returns whether the specified currency is shared or not.
* @param {String} key Currency identifier.
* @return {Boolean}
*/
currencyAPI.getCurrencyIsShared(key);
/**
* Returns the sync key of the specified currency. Sync key is used with player.setVariable()
* @param {String} key Currency identifier.
* @return {String} Sync key of the currency, will be null if the key isn't registered.
*/
currencyAPI.getCurrencySyncKey(key);
События Currency API(Events):
Код:
/**
* currencyDefined
* This event is called when a currency is added to the system with currencyAPI.addCurrency
* @param {String} key Currency identifier.
* @param {String} name Human readable name of the currency.
* @param {Boolean} isShared Whether the currency is shared or not.
* @param {String} syncKey If the currency is shared, this string will be used with player.setVariable() to transfer data to clientside.
*/
currencyAPI.on("currencyDefined", (key, name, isShared, syncKey) => {
// Your code here
});
/**
* walletReplaced
* This event is called when a player's wallet object gets replaced by player.setWallet()
* @param {Player} player The player who had a wallet change.
* @param {Object} oldWallet Old wallet object of the player.
* @param {Object} newWallet New wallet object of the player.
*/
currencyAPI.on("walletReplaced", (player, oldWallet, newWallet) => {
// Your code here
});
/**
* currencyUpdated
* This event is called when a player's wallet has a currency change.
* @param {Player} player The player who had a currency change.
* @param {String} currencyKey Currency identifier.
* @param {Number} oldAmount The player's old amount of currency.
* @param {Number} newAmount The player's new amount of currency.
* @param {String} source Name of the function that triggered this update, will either be "setCurrency" or "changeCurrency".
*/
currencyAPI.on("currencyUpdated", (player, currencyKey, oldAmount, newAmount, source) => {
// Your code here
});
Player API:
Код:
/**
* Returns the wallet object of the player.
* @return {Object}
*/
player.getWallet();
/**
* Replaces the wallet object of the player with the specified one.
* @param {Object} newWallet
* @return {Boolean} True if successful, false otherwise.
* @fires walletReplaced
*/
player.setWallet(newWallet);
/**
* Returns the amount of specified currency the player has in their wallet.
* @param {String} currencyKey Currency identifier.
* @return {Number}
*/
player.getCurrency(currencyKey);
/**
* Sets the amount of specified currency the player has in their wallet.
* @param {String} currencyKey Currency identifier.
* @param {Number} newAmount New amount of specified currency.
* @return {Boolean} True if successful, false otherwise.
* @fires currencyUpdated
*/
player.setCurrency(currencyKey, newAmount);
/**
* Changes the amount of specified currency the player has in their wallet by specified amount.
* @param {String} currencyKey Currency identifier.
* @param {Number} amount
* @return {Boolean} True if successful, false otherwise.
*/
player.changeCurrency(currencyKey, amount);
Примеры:
Готовый тестовый скрипт, обновит худ денег, если вы выдадите себе деньги. (Используется при разработке)
ServerSide Code:
Код:
// SERVERSIDE CODE
const currencyAPI = require("../currency-api");
// Events
currencyAPI.on("currencyDefined", (key, name, isShared, syncKey) => {
console.log(`Currency defined, key: ${key} | name: ${name} | isShared: ${isShared ? `yes, sync key: ${syncKey}` : "no"}`);
});
currencyAPI.on("walletReplaced", (player, oldWallet, newWallet) => {
console.log("==============================");
console.log(`${player.name} had their wallet replaced.`);
console.log(`Old wallet currencies: ${Object.keys(oldWallet).join(",")}`);
console.log(`New wallet currencies: ${Object.keys(newWallet).join(",")}`);
console.log("==============================");
});
currencyAPI.on("currencyUpdated", (player, currencyKey, oldAmount, newAmount, source) => {
const diff = newAmount - oldAmount;
console.log(`${player.name} ${diff < 0 ? "lost" : "got"} ${Math.abs(diff)} ${currencyAPI.getCurrencyName(currencyKey)} (${currencyKey}). (caused by: ${source})`);
});
// Register currencies
currencyAPI.addCurrency("cash", "Money", true); // since isShared is true, we can use currency_cash shared variable on clientside
currencyAPI.addCurrency("vip_tokens", "VIP Currency", false);
// Test commands
const fs = require("fs");
const path = require("path");
// Do /savewallet to save your wallet to a JSON file. (file path will be printed to console)
mp.events.addCommand("savewallet", (player) => {
const saveDir = path.join(__dirname, "wallets");
if (!fs.existsSync(saveDir)) fs.mkdirSync(saveDir);
const playerPath = path.join(saveDir, `${player.socialClub}.json`);
fs.writeFileSync(playerPath, JSON.stringify(player.getWallet(), null, 2));
player.outputChatBox("Wallet saved.");
console.log(`Player ${player.name} saved their wallet. (${playerPath})`);
});
// Do /loadwallet to load your wallet from a JSON file.
mp.events.addCommand("loadwallet", (player) => {
const playerPath = path.join(__dirname, "wallets", `${player.socialClub}.json`);
if (fs.existsSync(playerPath)) {
player.setWallet(JSON.parse(fs.readFileSync(playerPath)));
player.outputChatBox("Wallet loaded.");
} else {
player.outputChatBox("Wallet file not found.");
}
});
// Do /mytokens to see your VIP tokens currency amount.
mp.events.addCommand("mytokens", (player) => {
player.outputChatBox(`Your VIP tokens: ${player.getCurrency("vip_tokens")}`);
});
// Do /wallet to list the currencies you have.
mp.events.addCommand("wallet", (player) => {
const wallet = player.getWallet();
player.outputChatBox("Your wallet:");
for (const [key, value] of Object.entries(wallet)) player.outputChatBox(`${currencyAPI.getCurrencyName(key)}: ${value}`);
});
// Do /setcurrency [key] [amount] to set your currency amount.
mp.events.addCommand("setcurrency", (player, _, currencyKey, amount) => {
amount = Number(amount);
if (player.setCurrency(currencyKey, amount)) {
player.outputChatBox(`Set ${currencyAPI.getCurrencyName(currencyKey)} (${currencyKey}) to ${amount}.`);
} else {
player.outputChatBox("Failed to set currency.");
}
});
// Do /changecurrency [key] [amount] to change your currency amount by specified value.
mp.events.addCommand("changecurrency", (player, _, currencyKey, amount) => {
amount = Number(amount);
if (player.changeCurrency(currencyKey, amount)) {
player.outputChatBox(`${currencyAPI.getCurrencyName(currencyKey)} (${currencyKey}) changed by ${amount}.`);
} else {
player.outputChatBox("Failed to change currency.");
}
});
ClientSide Code:
Код:
mp.events.addDataHandler("currency_cash", (entity, value) => {
if (entity.handle === mp.players.local.handle) {
mp.game.stats.statSetInt(mp.game.joaat("SP0_TOTAL_CASH"), value, false);
mp.gui.chat.push(`(clientside) currency_cash updated, new value: ${value}`);
}
});