Leaderboard
Popular Content
Showing content with the highest reputation on 03/30/19 in all areas
-
1 point
-
Hi everyone! Two words about me: My name is Mark. Im working as junior fronted developer. What is this? My open source role play server. I think, it can help some new developers learn and start a project. I'll develop it via github: https://github.com/MarkCavalli/rageserver I will be glad to see any improvements: code review, pull requests, language improvements (My native language is Russian). Also you can quickly connect and test it How to install: https://github.com/MarkCavalli/rageserver Features: Log In/Sign Up Module Server saves player's position on disconnect. (/save) command for development simulate disconnect. MoneyAPI Module -bank account and tax account. - ATMs Character Creator Module Jobs: - Orange Collector Businesses: - Clothing Shops Future plans: - New jobs1 point
-
Version 1.0.1
2394 downloads
This resource attaches your weapons to your character to make them visible to everyone. All you have to do is put away your gun/switch weapons. Installing Download & install the latest Efficient Attachment Sync. Put the files you downloaded in their respective places Add require('weapondisplay') to client_packages/index.js All done Notes Didn't do a lot of testing, feel free to report issues (would be nice if you include how to reproduce the issue) weaponData.json file will be updated with future GTA V versions, always check weaponData.json Gist to prevent issues.1 point -
Version 1.0.0
1828 downloads
This script allows you to move the game camera in the air and back like in GTA:ONLINE Installation: Download file. Unzip folder into your client_packages. Add require('MoveSkyCamera/index.js'); to client_packages/index.js. Usage: Calling on serverside player.call('moveSkyCamera', [player, moveTo, switchType, showGUI]); Calling on clientside mp.events.call('moveSkyCamera', player, moveTo, switchType, showGUI); Reference: player = Ped; player handle moveTo = String; 'up' or 'down' switchType = Int; 0, 1, 2 or 3 0: 1 step towards ped 1: 3 steps out from ped (Recommended) 2: 1 step out from ped 3: 1 step towards ped showGUI = Boolean; Show chat and minimap during camera movement? Note: When using param moveTo as 'down', it's not necessary to add switchType and showGUI. Examples: mp.events.addCommand('movecam', (player) => { // Make camera to go up in to the sky player.call('moveSkyCamera', [player, 'up', 1, false]); // After 5 seconds, camera start to go back to player. setTimeout(() => { player.position = new mp.Vector3(0,0,10); // Set your position if you want player.call('moveSkyCamera', [player, 'down']); }, 5000); });1 point -
Hi, This small tuturial how make auto server restart on file change by using webpack. 1. All doing in webpack.config.js file 2. On file top initialize empty variable: let gameServer; 3. In exports object add new plugin (with hook): plugins: [ // ... { apply: compiler => { compiler.hooks.afterEmit.tap('AfterEmitPlugin', () => { // Kill started server if (!!gameServer) { console.log('\nKill game server'); gameServer.kill(); } console.log('\nStart game server'); // Start server gameServer = spawn(path.join(__dirname, 'server.exe')); gameServer.stdout.on('data', data => process.stdout.write(data)); gameServer.stderr.on('data', data => process.stderr.write(data)); }); } } ] 4. Profit1 point
-
We are working on large mapping and placed a lot of objects. And now cant spawn more objects, game says: "max spawn count reached". How to fix this?1 point
-
BUMP any fix for this? added exclusions to my antivirus and windows defender, still nothing1 point
-
В этом топике будет приведен пример добавления некоторых методов в стандартное API RageMP, основной целью этого действа является сокращение кода и ускорение разработки в будущих скриптах. Пример: // За место этого: mp.players.forEach(_player => { _player.outputChatBox("Hello!!!"); }); //Можно будет использовать удобное сокращенное: mp.players.BroadcastMessage("Hello!!!"); Начнём. Создаем в каталоге 'packages/keker' файл 'new-api.js', и сразу же объявим его в 'packages/keker/index.js' добавив туда строку: require('./new-api'); Теперь начнем добавлять наш код в 'new-api.js', начнем с методов для работы с векторами, точнее для вычисления дистанции между ними: mp.Vector3.Distance = function (v1, v2){ return Math.abs(Math.sqrt(Math.pow((v2.x - v1.x),2) + Math.pow((v2.y - v1.y),2)+ Math.pow((v2.z - v1.z),2))); } // функция вычисляющая расстояние между двумя точками в пространстве X;Y;Z; mp.Vector3.Distance2D = function (v1, v2){ return Math.abs(Math.sqrt(Math.pow((v2.x - v1.x),2) + Math.pow((v2.y - v1.y),2))); } // функция вычисляющая расстояние между двумя точками на плоскости X;Y; Теперь их можно вызывать в любом месте вашего кода. Пример: let distance = mp.Vector3.Distance(player.position, player.veh.position); // Вернет расстояние от игрока до его машины в пространстве X;Y;Z let distance = mp.Vector3.Distance2D(player.position, player.veh.position); // Вернет расстояние от игрока до его машины в горизонтальной плоскости X;Y; Теперь добавим в 'new-api.js' методы broadcast'a сообщений и удобного спавна машин: mp.players.BroadcastMessage = function(s, v, d, c){ if(typeof v == 'undefined'){ // если функция вызвана с 1 параметром BroadcastMessage("Wellcome!!!"); this.forEach( player => { player.outputChatBox(s); }); } else if( typeof v == 'string'){ // если функция вызвана с параметром цвета BroadcastMessage("Wellcome!!!", "#ddd"); this.forEach(player => { player.outputChatBox("<font color='"+v+"'>"+s+"</font>"); }); } else if(typeof v == 'object' && typeof d == 'number'){ // если функция вызвана с параметром радиуса действия BroadcastMessage("Wellcome!!!", new mp.Vector3(0, 0, 0), 50); this.forEach(player => { if(Math.pow((player.position.x - v.x), 2) + Math.pow((player.position.y - v.y), 2) + Math.pow((player.position.z - v.z), 2) < Math.pow(d, 2)){ // проверяем находится ли игрок в заданом радиусе if(typeof c == 'string') { // если функция вызвана со всеми параметрами BroadcastMessage("Wellcome!!!", new mp.Vector3(0, 0, 0), 50, "#ddd"); player.outputChatBox("<font color='"+c+"'>"+s+"</font>"); } else { player.outputChatBox(s); } } }); } } // функция выводящая сообщение в чат либо всем игрокам онлайн, либо игрокам находящимся в определенном радиусе, так же позволяет задать цвет текста mp.vehicles.Spawn = function(m, x, y, z){ if(typeof x == 'number' && typeof y == 'number' && typeof z == 'number'){ return this.new(mp.joaat(m), new mp.Vector3(x, y, z)); } else if(typeof x == "object") { return this.new(mp.joaat(m), x); } } // Спавн транспорта в заданной точке, либо по координатам X;Y;Z, возвращает созданый транспорт Их вызов в дальнейшем будет выглядеть так: //за место этого довольно маштабного кода: mp.players.forEach(_player => { _player.outputChatBox("<font color='#ddd'>Hello!!!</font>"); }); // Теперь можно использовать это, эти несколько вариантов mp.players.BroadcastMessage("Hello!!!"); // Разошлет сообщение всем игрокам сервера mp.players.BroadcastMessage("Hello!!!", "#ddd"); // Разошлет сообщение всем игрокам сервера, цвет текста будет #ddd mp.players.BroadcastMessage("Hello!!!", player.position, 50); // Разошлет сообщение всем игрокам в радиусе 50м от текущего, Local Chat mp.players.BroadcastMessage("Hello!!!", player.position, 50, "red"); // Разошлет сообщения всем игрокам в радиусе 50м от текущего, цвет текста красный // Удобный спавн траспорта // За место этого: let veh = mp.vehicles.new(mp.joaat('sultanrs'), new mp.Vector3(200, 14, 25)); // Теперь можно использовать это: let veh = mp.vehicles.Spawn('sultanrs', 200, 14, 25); // Создаст транспорт в указаных координатах, и вернет его в переменную veh //или это: let pos = player.postion; pos.x += 2; let veh = mp.vehicles.Spawn('sultanrs', pos); // Создаст транспорт в указанной точке и вернет его Ну и пару методов для работы с игроком, можно как добавить в 'new-api.js' это: mp.events.add({"playerJoin": player => { player.TeleportTo = function(x, y, z){ if(typeof x == 'object'){ // если первый параметр является вектором this.position = x; } else if(typeof x == 'number' && typeof y == 'number' && typeof z == 'number'){ // если координаты заданы по отдельности this.position = new mp.Vector3(x, y, z); } } // функция телепорта игрока к заданой точке, либо по координатам X;Y;Z; player.Message = function(s, c){ if(typeof s == 'string' && typeof c == 'string'){ // если задан цвет this.outputChatBox("<font color='"+с+"'>"+s+"</font>"); } else if (typeof s == 'string'){ this.outputChatBox(s); } } // функция для быстрой отправки сообщения игроку в чат, с возможностью задать цвет текста } }); Либо вставить код от сюда в 'packages/keker/evens/common.js', вызов этих методов будет выглядеть так: // Телепорт игрока player.TeleportTo(player.veh.position.x-2, player.veh.position.y, player.veh.postion.z); // Телепортирует игрока к точке сбоку от его машины let pos = player.veh.position; pos.x -= 2 player.TeleportTo(pos); // сделает тоже самое только сдесь в функцию передается вектор а не координаты // Удобный вывод сообщений игроку, с возможностью задать цвет текста player.Message("Hello!!!"); // Отправит сообщение в чат игроку player.Message("Hello!!!", "#ddd"); // Отправит сообщение в чат игроку, цвет текста #ddd Ну вот и все, надеюсь, что кому нибудь пригодится!1 point
-
Не могу согласиться. Вызов функции (любой) - это всегда нагрузка на сервер, хоть и мизерная. Но по своему опыту на больших проектах могу сказать, что если вообще не думать о нагрузке на сервер - то в какой-то момент ваше приложение начнёт кушать столько ресурсов, что содержание серверов начнёт стоить вам непосильно много денег (nodejs в особенности подвержена данной проблеме), и вам придётся отрефакторить и переписать половину кода с целью оптимизации, и это займёт кучу драгоценного времени. Лучше сразу думать о том, к чему ваш код может привести. Если в конкретно этой задаче запариться над производительностью и учитывать вероятность асинхрона выполнения `setTimeout` и `setInteval` в nodejs, то можно вот так сделать: // Переменная, куда будет сохраняться setTimeout, чтобы мы могли его очистить по завершению let timer = 0; // Непосредственный callback, который будет выполняться в 00 секунд каждой минуты const changeTime = (currentDate, isFirstRunning) => { // Меняем часы и минуты на сервере mp.environment.time.hour = currentDate.getHours(); mp.environment.time.minute = currentDate.getMinutes(); if (!isFirstRunning) { // Сюда вписываем логику, которая должна выполняться исключительно в 00 секунд каждой минуты } }; // Функция запуска таймера, которая будет отрабатывать в каждые 00 секунд каждой минуты const runTimer = (isFirstRunning) => { // Получаем текущее время // (при каком-то рассинхроне времени в ноде, например, при мелком подвисании сервера, мы синхронизируем время в следующую минуту) const currentDate = new Date(); // Высчитываем оставшееся количество миллисекунд до следующей минуты const remainingMilliseconds = (60 - currentDate.getSeconds()) * 1000 + (1000 - currentDate.getMilliseconds()); // Вызываем callback, который должен выполняться у нас в 00 секунд каждой минуты // (первый запуск будет не в 00 секунд, поэтому мы передаём переменную `isFirstRunning` в callback, // если нам требуется какая-то дополнительная логика на вызов именно в 00 секунд) changeTime(currentDate, !!isFirstRunning); // Очищаем предыдущий таймер - советуют так делать, чтобы избежать утечки памяти clearTimeout(timer); // Сам таймер, который будет запускаться каждый раз timer = setTimeout(() => { runTimer(); }, remainingMilliseconds); }; // Запускаем таймер в первый раз runTimer(true); Чистый код без комментариев, чтобы вы оценили его минималистичность и простоту: let timer = 0; const changeTime = (currentDate, isFirstRunning) => { mp.environment.time.hour = currentDate.getHours(); mp.environment.time.minute = currentDate.getMinutes(); if (isFirstRunning) { // Сюда вписываем логику, которая должна выполняться исключительно в 00 секунд каждой минуты } }; const runTimer = (isFirstRunning) => { const currentDate = new Date(); const remainingMilliseconds = (60 - currentDate.getSeconds()) * 1000 + (1000 - currentDate.getMilliseconds()); changeTime(currentDate, !!isFirstRunning); clearTimeout(timer); timer = setTimeout(() => { runTimer(); }, remainingMilliseconds); }; runTimer(true);1 point
-
0 points
