Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 04/28/19 in all areas

  1. Version 2.0.0

    1468 downloads

    This resource provides a currency API to server developers. This resource will not save anything on its own. I'd also recommend you to not have over 2 billion of any currency. Installing Put the files you downloaded in their respective places Check the documentation and examples All done 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 {Number} syncType Sharing type of the currency. (0 = not shared with clients, 1 = shared with everyone, 2 = shared with just the wallet owner) * @return {Object} The added currency object. * @fires currencyDefined */ currencyAPI.addCurrency(key, name, syncType); /** * 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 iterator of all registered currency identifiers. * @return {Iterator.<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 the sync type of the specified currency. * @param {String} key Currency identifier. * @return {Number} Sync type of the currency. (0 = not shared with clients, 1 = shared with everyone, 2 = shared with just the wallet owner) */ currencyAPI.getCurrencySyncType(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 {Number} syncType Sharing type of the currency. (0 = not shared with clients, 1 = shared with everyone, 2 = shared with just the wallet owner) * @param {String} syncKey If the currency is shared, this string will be used with player.setVariable() or player.setOwnVariable() to transfer data to clientside. */ currencyAPI.on("currencyDefined", (key, name, syncType, 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); Examples Full Test Script, will update GTAV money hud if you give yourself "cash" currency. (Used during development) // SERVERSIDE CODE const currencyAPI = require("../currency-api"); const SYNC_TYPE_NONE = 0; const SYNC_TYPE_EVERYONE = 1; const SYNC_TYPE_PLAYER = 2; // Events currencyAPI.on("currencyDefined", (key, name, syncType, syncKey) => { const syncTypes = ["none", "everyone", "player"]; console.log(`Currency defined, key: ${key} | name: ${name} | syncType: ${syncTypes[syncType]} | syncKey: ${syncKey}`); }); 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", SYNC_TYPE_PLAYER); // So that we can use currency_cash shared variable on clientside currencyAPI.addCurrency("vip_tokens", "VIP Currency", SYNC_TYPE_NONE); // 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."); } }); // Do /currencies to get all registered currency identifiers and their names. mp.events.addCommand("currencies", (player) => { for (const key of currencyAPI.getAllCurrencies()) { player.outputChatBox(`${key} - Name: ${currencyAPI.getCurrencyName(key)}`); } }); // 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}`); } }); Source code is available on GitHub in case you don't want to download: https://github.com/root-cause/ragemp-currency-api Thanks to Lorc for providing the resource icon: https://game-icons.net/1x1/lorc/cash.html
    1 point
  2. let waypoint; mp.events.add('render', () => { // Waypoint if (waypoint !== mp.game.invoke('0x1DD1F58F493F1DA5')) { waypoint = mp.game.invoke('0x1DD1F58F493F1DA5'); let blipIterator = mp.game.invoke('0x186E5D252FA50E7D'); let FirstInfoId = mp.game.invoke('0x1BEDE233E6CD2A1F', blipIterator); let NextInfoId = mp.game.invoke('0x14F96AA50D6FBEA7', blipIterator); for (let i = FirstInfoId; mp.game.invoke('0xA6DB27D19ECBB7DA', i) != 0; i = NextInfoId) { if (mp.game.invoke('0xBE9B0959FFD0779B', i) == 4 ) { var coord = mp.game.ui.getBlipInfoIdCoord(i); mp.events.call("playerCreateWaypoint", coord, Boolean(waypoint)); mp.events.callRemote("playerCreateWaypoint", JSON.stringify(coord), Boolean(waypoint)); }; }; }; }); Client-side mp.events.add('playerCreateWaypoint', (position, toogle) => { console.log(position, toogle); }); Server-side mp.events.add('playerCreateWaypoint', (player, position, toogle) => { console.log(position, toogle); });
    1 point
  3. Liebe RageMP Community, wir sind ein Team, das sich schon bei Arma 3 das Ziel gesetzt hat, möglichst authentische Voraussetzungen für gutes Roleplay zu schaffen. Wir entwickeln unser Framework dabei gerade nicht nur für unseren Server, sondern für alle, die es nutzen wollen. Von daher würden wir deshalb auch gerne mit Entwicklungsabteilungen von anderen Communitys zusammenarbeiten oder kooperieren. Wir veröffentlichen unsere Software unter GNU AGPLv3 und erwarten das deshalb auch von weiteren Nutzern. 51st State ist für all jene gedacht, die bei der Veröffentlichung den Open Source Gedanken unterstützen wollen und auch sonst geistig mit unseren Ideen und Visionen verbunden sind, dass Inhalte also für viele entwickelt werden und der Sache dienen sollen, nämlich unser RP uneigennützig und dennoch effizient vorwärts zu bringen. Klar kann jeder sein eigenes Süppchen kochen. Wir glauben jedoch daran, dass je mehr nach dem Open Source Prinzip arbeiten, desto besser das Spielerlebnis für die gesamte GTA RP Community wird. Der 51st. State Framework wird folgende bekannte aber auch neue Features besitzen: Radikales Craftingsystem ohne NPC Wirtschaft Spieler produzieren direkt für Spieler. Alle Gegenstände und Vehicles werden craftbar gemacht. Spieler können Geschäfte beliefern und bestimmen ihre Preise untereinander selbst. Angebot und Nachfrage regeln den Markt und nicht etwa zufällig variierende Zahlen wie in manchen Scheinwirtschaften. Wohnraum Die Spieler können Wohnungen, Garagen und Häuser kaufen oder Hotelzimmer mieten. Diese als Umschlagplatz oder zum Treffpunkt für Freunde ausbauen. Vernünftiges Lagersystem Sowohl in Wohnungen, als auch in Häusern, Schließfächern, Lagerhäusern können Spieler ihre Items lagern. Besonderheit bei der Polizei Diese erhält ein Beweissystem, Spieler hinterlassen bei Spielaktionen Spuren (DNA/Haare/Speichel/Fingerabdrücke) an Autos, Körpern oder Orten. Es erfolgt keine automatische Fahndung oder Taterfassung nach einer Tat. Die Spuren spawnen in unterschiedlichen Wahrscheinlichkeiten in Abhängigkeit vom Ort des Verbrechens, außerdem verschwinden sie langsam wieder, je mehr Zeit also seit der Tat geschehen ist, um so weniger Spuren werden auffindbar sein. Behördeninformationssystem Alle Behörden erfassen Daten, Urteile, Ermittlungsergebnisse und Vorgänge zu Personen in einer großen Datenbank. Zugriff darauf erhalten in unterschiedlichen Berechtigungen Justiz, Polizei, Strafvollzug, Rechtsanwälte und andere. Handy Das Handy enthält eine Social Media Plattform, ein Intranet, SMS senden, eMail, natürlich telefonieren und Telefonkonferenzen mit mehreren Spielern sind geplant. Kopfgeldjäger Da die Polizei die Betroffenen ja nicht selbst verurteilt, sondern nach Kautionserhebung in der Regel wieder laufen lässt, können diese Kautionen beim Fernbleiben vom Gerichtstermin direkt als Kopfgelder an Kopfgeldjäger ausgelobt werden. Und vieles Mehr... Roleplay ist eine Kunstform, sie kann am besten als virtuelles Improvisationstheater bezeichnet werden. Sie darf alles! Dazu gehört auch soweit erforderlich und in den Grenzen der Kunstfreiheit gerade ein Bezug zu realen Begebenheiten. Auf der IC (In Character) Ebene kann zwischen Charakteren absolut alles geschehen. Daraus resultiert eine Altersvorgabe von 18 Jahren. Zwischen den Spielern auf OOC (Out Of Character) Ebene erwarten wir jedoch einen vom sportlichen Fair Play Gedanken getragenen Umgang untereinander und Respekt und Anerkennung für die Leistungen anderer. Eine RP Situation kann man nicht gewinnen und sollte man auch nicht “gewinnen” wollen. Sie dient allein den primären Zielen des unterhaltenden Realismus und der Immersion des einzelnen Beteiligten. Gewaltenteilung und ein realistisch reagierender Staat auf materiell rechtsstaatlicher Ebene sind weitere Maximen, die sich IC beginnend wie ein roter Faden bis OOC in den Support ziehen, der hier als Schiedsgericht gedacht und konzipiert ist. Dabei gelten strenge Vorgaben: Was ingame ist, bleibt ingame! Was outgame ist, bleibt outgame! Auch das Verfahren vor dem Support unterliegt mindestens denselben Rechten wie in einem rechtsstaatlichen Verfahren. Wir sind uns darüber im Klaren, dass die Spieler viel Zeit in die Ausgestaltung ihres Charakters, ihre Handlung und ihren Spielstand investieren. Deshalb sind willkürliche Banns absolut ausgeschlossen. Dazu zählt auch martialisches Auftreten des Supports mit schweren Panzern und Waffen, wie leider auf manchen Servern üblich. Auch wird es keine, der so gefürchteten Bauchentscheidungen geben. Auch im Schiedsgerichtsverfahren gilt: Keine Strafe ohne “Gesetz”. Gegen Entscheidungen eines Schiedsgerichts gibt es immer noch die Möglichkeit von Widersprüchen hin zu höheren Instanzen. Admins und Projektleiter mischen sich zu keiner Zeit in die Kunstfreiheit der Spieler ein. Admins und Projektleiter dürfen nicht gleichzeitig Leiter von bewaffneten Behörden sein. Wenn du uns bei der Entwicklung von 51st State unterstützen möchtest und über die erforderlichen Fähigkeiten verfügst, dann melde dich bei uns unter der Teamspeak Adresse (ts.51st.de). Dort kannst du dann in entspannter Atmosphäre erläutern, wie du unser Projekt mit vorwärts bringen möchtest. Mit freundlichen Grüßen Euer 51st State Team
    1 point
  4. Anyone knows why all the Rage Servers are down?
    1 point
  5. After loading the client and joining a server, my game loads and then suddenly freezes and says Multiplayer Stared on the left hand side.... after about 30 secs to a minute, my game will just crash. if there is any fix please let me know http://prntscr.com/n2tsh5
    1 point
  6. https://wiki.rage.mp/index.php?title=Vehicle::numberPlate
    1 point
  7. Use https://rage.mp/forums/forum/24-deutsch-german/ please
    1 point
    Fix guide: 1) Open file "client_packages\MapEditor\Natives.js" and insert this code: const __GameVersion__ = 2; const __Natives__ = { SET_ENTITY_ALPHA: ['x44A0870B7E92D7C0'], RESET_ENTITY_ALPHA: ['0x9B1E824FFBB7027A'], GET_ENTITY_MODEL: ['0x9F47B058362C84B5'] }; const proxyNatives = new Proxy(__Natives__, { get: (target, name, receiver) => __Natives__[name][__GameVersion__] }); exports = proxyNatives; Let's try F2. Profit!
    1 point
×
×
  • Create New...