This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Inoi

/dev/null
Автор темы
VIP
15 Окт 2020
2,363
1,411
208
34
Наиболее частые ошибки при ковырянии пальцем паблик сборок и способы их решения для самых маленьких.

Здесь мы разберём, постараемся объяснить и скинем ссылочки на похожие - самые частые проблемы и их решения, которые возникают у посетителей сайта при использовании бесплатных сборок из раздела Ресурсы.

Решения практически всех этих проблем так или иначе уже есть либо здесь, либо в дискорд-сервере - и все их можно найти самостоятельно.
Мы просто собрали их в одну тему, потому что зачастую люди не способны даже самостоятельно их найти.



Для того, чтобы проще было работать самому - рекомендую установить не только Visual studio, через которую вы будете компилировать свой проект, но и любой удобный текстовый редактор, с функцией подсветки синтаксиса и поиском по файлам. (Поверьте, это практически необходимый инструментарий).
Есть модные VSCode, например - мне нравится Notepad++ по старинке.

Большую часть проблем мы будем разбирать на примере сборки RedAge, как самой популярной.
Практически все паблик сборки, которые вы сейчас можете скачать, если используют .NET для серверной и JavaScript - для клиентской части, так или иначе являются модификациями RedAge, за редчайшим исключением.
Тем не менее, ряд проблем и их решений - в том числе советы по их поиску, практически никак не будут отличаться даже в случаях вашей работы с совсем другими сборками.

Собирая сюда эти вопросы я руководствовался самыми часто задаваемыми и одинаковыми вопросами на форуме и в дискорде.
Как минимум пару раз в неделю на форуме появляется новая тема с одним и тем же вопросом.
Увижу ещё похожие - с удовольствием обновлю топик.


Для того чтобы внесённые вами изменения заработали - нужно скомпилировать проект в dllки, которые подгружает ваш Rage сервер.
Делается это кнопочкой "Собрать" или "Пересобрать решение".


Если у вас не отображаются эти функции - скорее всего вы находитесь не внутри решения.
Решение - это файл с расширением .sln
Открытое решение в обозревателе должно выглядеть так, у вас скорее всего в обозреватель подгружена папка или отдельный .cs файл.
Найдите файл решения (.sln) и просто нажмите на него дважды.


Путь до папки с вашим сервером не должен содержать русских символов.

Для установки сервера под ОС Linux используйте архив сервера для установки именно под Linux.
В том числе /dotnet дирректорию

Архив лежит в папке \server-files (linux_x64.tar)

Мануал по установке сервера на никс системы:


using password NO - вы не указали пароль для подключения
using password YES - параметры подключения неверны
Решение ниже одинаково для обоих случаев


Помимо этих строк в консоли может быть много непонятных надписей, но именно это - сообщение об ошибке.
Access denied for user 'root'@'localhost, где root - логин, а localhost - адрес; означает что сервер не может установить подключение до базы данных с параметрами, которые вы указали.

Для того чтобы найти в проекте логин и пароль до своей бд - можно нажать сочетание клавиш Ctrl+F для поиска по решению, и выбрав параметр "Всё решение" вбить например логин, который вы видите в сообщении об ошибке - в нашем случае root.



В сборке RedAge, как наверняка и во многих других - за конфигурацию подключения к базе данных отвечает файл MySQL.cs
Именно его вы найдёте в этой сборке, используя поиск по логину.



Картинка может слегка отличаться в зависимости от конкретной модификации -



Если вы абсолютно уверены, что указываете верный логин с паролем, и адрес до вашей базы данных тоже верный - проверьте нет ли в папке с сервером файлика Settings.db
Во многих сборках на основе RedAge параметры подключения к базе данных пишутся в этот файл, как в свою маленькую базу данных, и не перезаписываются новыми.
Для того чтобы сборка сгенерировала его заново уже с вашими параметрами - этот файл нужно удалить.

В противном случае - данные подключения вами указываются неверно.
Стоит проверить их, используя любые sql-вьюверы, например HeidiSQL

В зависимости от конкретного текста, который вы хотите изменить - он может находится и внутри серверной части, как например стандартное приветствие в чатик



И внутри клиентской - как например похожее, но уже для каждого игрока (не зря же оно в клиентской части)


Для того чтобы найти нужный текст - нужно нажать сочетание клавиш Ctrl+F для поиска по решению, если вы ищете текст в серверной части проекта и выбрав параметр "Всё решение" вбить кусочек текста, который вам нужен - например "RAGEMP".

Для того чтобы найти нужный текст в клиентской части - в текстовом редакторе подобно Notepad++ нужно нажать сочетание клавиш Ctrl+F и выбрать "Найти в файлах"
В параметре "Папка" - указать папку client_packages, и также в поле "Найти" - желательно одно слово, которое содержится в предложении, что вы хотите найти.
Если вы точно уверены, что необходимое слово находится внутри например .html или .js документа - можно указать такой фильтр, чтобы ускорить поиск.
В противном случае поле "фильтры" можно оставить пустым - но учтите, что внутри этой же папки лежат ваши dlc - их сканирование может занять какое-то время, а особо большие файлы придётся пропустить, о чём Notepad вас предупредит.



Для того чтобы поменять картинки, логотипы и прочие элементы интерфейса - сначала их нужно найти.
Сделать это можно точно так же, поиском по ключевым словам, которые есть в интерфейсе, картинку в котором вы хотите поменять.

Например - в вашем интерфейсе есть "АВТОБОТЫ, ТРАНСФОРМИРУЕМСЯ" - в отличие от "Детей из африки" это очевидно статичный текст, а не какой-то товар, который может меняться.



Вбейте "автоботы" в "поиск по файлам" в вашей клиентской папке в Notepad++ - и найдёте нужную html-страничку, и ссылки на картинки на ней.
(Путь до картинок в html заключён в тег <img src = )


Для того чтобы добавить на ваш сервер новые интерьеры и автомобили - нужно скачать или собрать самостоятельно dlc файл с нужным дополнением.
После этого - положить папочку с вашим dlc по адресу client_packages\game_resources\dlcpacks
И прописать его в файле client_packages\game_resources\x64\dlcPacks\dlclist.xml
Где после dlcpacks:/ - ваш путь до папки от client_packages\game_resources\dlcpacks



Для того чтобы примерно понять, как добавлять автомобили в автосалоны и прочие ваши бизнесы - можно воспользоваться например вот этим видеороликом.
Машины фракций в сборках на основе RedAge меняются в базе данных, в табличке fractionvehicles в столбике "model".
Для работы с базой данных можно использовать любые sql-вьюверы, например HeidiSQL

Проверьте, не скачали ли вы ELS модель.
Rage не поддерживает ELS


С версии rage 1.1 конвертировать dlc не нужно.
ArchiveFix больше использовать не нужно.
DLC можно просто скачать или собрать - и засовывать в нужные папочки.

Ошибка вида

[Threading Debugging] Имя_функции was called out of main thread
Non-thread-safe API has been invoked out of main thread. Check NAPI.Task.Run.


означает что вы пытаетесь вызвать функции rage api не из главного потока. А так по правилам рейджа делать не нужно.

Для того чтобы исправить эту проблему - нужно найти правильно место - обычно оно указано в тексте ошибки
Например здесь -

Нужно найти вызов функции GetPlayerIp в nAccount.cs (Ctrl+F в помощь) и обернуть вызов функции в код

Код:
NAPI.Task.Run(() =>
{

    /// Здесь ваш код с getPlayerIp();

}, 5000);

Распространённые ошибки, для которых не существует "универсального решения", но

Ошибка "is not an integer" означает, что в функцию (например Clothes TypeError setComponentVariation drawableld is not an integer) передаётся аргумент (drawableId) не типа int.

В этом примере - для установки плееру какой-то части одежды в коде вызывается функция setComponentVariation с двумя аргументами drawableId и textureId.
Оба этих аргумента должны быть числами.

Аргумент drawableId в момент ошибки - не число.
Именно об этом говорит ошибка.

Никто не может за вас точно определить в какой момент эта ошибка возникает, как именно функция вызывается - но очевидно в том месте где должна быть цифра - её нет.
Причин может быть масса - например вы одеваете шмотку через консоль, и нажимаете на буковки вместо цифр. Или например неверно передаёте данные с сервера в клиент.
Ну или просто написали какой нибудь
JavaScript:
 CasinoPedsID[n].setComponentVariation(1, "тут текст а не цифры", 0, 0);
где-нибудь.

Для того чтобы решить такую проблему - нужно понять в какой момент вызывается ошибку, и логгировать получаемые значения, выводя себе в чатик, нотифайки или куда-нибудь ещё. Чтобы понять, где именно приходит не то значение.

Ошибка The given key was not present in the dictionary означает, что словарик (Dictionary) не содержит значения ключа, с которым вы пытаетесь к нему обратиться.

Пути поиска проблемы зависят от конкретного участка кода, который вызывает эту ошибку
Например ошибка по адресу Houses.HouseManager.callback_housebuy - с цифровым ключом, к примеру The given key '385236' скорее всего будет означать, что у дома, который вы покупаете - в базе данных нет банковского счёта.
Тогда, нужно будет в вашей бд найти табличку с банковскими счетами (RedAge - money) и добавить новую запись со значением id равным значению bank вашего дома в табличке houses.
При этом не забыв поставить дому ещё и соответствующий type

В случае если ошибка не связана с домами - а это довольно распространённая ошибка в целом - обычно из её текста можно всё равно примерно понять проблему (например вы пытаетесь получить не существующий автомобиль, или купить итем, который забыли добавить на сервер в dictionary с итемами.

Если вы определите с помощью текста ошибки вызов словаря - можно нажать на него с зажатым Ctrl прямо в Visual Studio, и перейти к нужному словарю, чтобы убедиться, что то что вы пытаетесь получить - вообще в нём существует.



Если вы ничего особо не добавляли сами, а ошибка есть - скорее всего она уже у кого-нибудь встречалась, и ему помогли - попробуйте поиск по форуму, или дискорду проекта


Ещё больше глобальных вопросов:
  • Как мне создать или перенести педа?
  • Как мне создать или перенести маркер?
  • Как мне поменять цены?
  • Как добавить новые?

Поиск ответов на такие вопросы чаще всего стоит начинать с гугла



Вуаля - вы просто написали в этой волшебной строке то что нужно - и ответ оказывается буквально в первом же результате, отправляя вас в святую святых любого рейдж-разработчика - официальную википедию рейджа.

Теперь вы знаете - что на js (клиент в случае с редейджем) пед создаётся через mp.peds.new, а потратите ещё две минуты - и узнаете что на .net (соответственно сервер) за это отвечает NAPI.Ped.CreatePed. Всё что вам теперь остаётся - воспользоваться поиском по файлам или своему решению, чтобы найти педа который вас интересует для того чтобы его изменить, или создать нового по его образу и подобию. Абсолютно то же самое касается любых маркеров, кулшейпов и взаимодействия с ними.
С ценами и новыми товарами ещё проще - нужно просто найти уже существующие в своём проекте по названиям, даже гуглить не надо.



Вместо того чтобы тратить десять минут на то, чтобы задать вопрос и дождаться, пока на него ответят - можно просто открыть его (поиск) прямо в визуалке, набрать в нём "ALYX" (из примера выше) -
и чудеса, окажется что это дело буквально нескольких секунд.

Пара спойлеров с повторяющейся информацией по поиску, просто отдельно:
В визуалке - нужно нажать сочетание клавиш Ctrl+F для поиска по решению, и выбрав параметр "Всё решение" вбить то, что вам нужно найти.



Не останавливайтесь на первом же результате, пока не убедитесь, что нашли действительно то, что нужно
Для того чтобы найти нужный текст в клиентской части - в текстовом редакторе подобно Notepad++ нужно нажать сочетание клавиш Ctrl+F и выбрать "Найти в файлах"
В параметре "Папка" - указать папку client_packages, и также в поле "Найти" - желательно одно слово, которое содержится в предложении, что вы хотите найти.
Если вы точно уверены, что необходимое слово находится внутри например .html или .js документа - можно указать такой фильтр, чтобы ускорить поиск.
В противном случае поле "фильтры" можно оставить пустым - но учтите, что внутри этой же папки лежат ваши dlc - их сканирование может занять какое-то время, а особо большие файлы придётся пропустить, о чём Notepad вас предупредит.



После завершения поиска - Notepad вывалит снизу список найденных совпадений с полным путём до файла с нужным текстом.
По клику на результат - мгновенно откроется нужный файл с нужным местом.

Notepad++ - только пример подобного редактора, которым я привык пользоваться. Подобный функционал есть в любом современном текстовом редакторе.

Совсем уж ластецкие советы по поиску проблемы:

Логгируйте. Логгируйте каждый свой шаг в том месте, где у вас что-то не получается.
JavaScript:
NAPI.Chat.SendChatMessageToPlayer(player, "ОШИБКА БАЛЯТ: " + peremennaya);
Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Я сюда попадаю", 3000);

//
mp.gui.chat.push("ТУТА" +peremennaya); // ну и в конце концов

Если вы примерно понимаете, в каком участке кода проблема - стоит начать выводить себе в чат, нотифаи, алерты в конце концов - буквально хотя бы цифры туда печатать, чтобы осознавать, какой участок кода работает - а какой нет. В какую часть своего метода\функции\евента вы попадаете - а в какую нет.

В Visual Studio есть замечательная функция дебагга, которая позволяет ставить вам точки остановки:



Один клик левой кнопки мыши в самом начале строки - и в игре, когда вы окажетесь в этом месте - игра замрёт, процесс встанет на паузу и вы буквально наводясь мышкой на переменные - можете посмотреть текущие значения прямо в визуалке. Таки образом очень легко проверить присваиваются ли нужные значения, то ли вы вообще куда-нибудь передаёте, и что сейчас содержит какой-нибудь динамический словарик.


Если вам совсем-совсем ничего не помогло - грустно.
Но ничего, смело создавайте тему на форуме - здесь есть целая куча замечательных ребят, которые обязательно подскажут.
Просто подсказывать гораздо проще, когда вы сами прошли какой-то этап попыток решения своей проблемы - и как минимум можете лучше её описать.
Рассказать что поискали, что попробовали поменять, какие сообщения выводили себе в чатик и в каких местах.
Без этого - чаще всего подсказки превращаются в гадание на кофейной гуще, и процесс становления вашего замечательного проекта только затягивается.

Не забывайте - есть ещё поиск по форуму, дискорду и целый раздел с видеоуроками!
И все они отлично работают и могут вам помочь гораздо оперативнее, чем случайный (или даже постоянный) посетитель с подсказкой.

Пока это кратенький список того, что вспомнилось с ходу за последние пару недель из наболевшего.
Вспомнится ещё - обязательно добавим, и героев что тут периодически оказывают поддержку случайным странникам я вовсю призываю с этим тоже помочь.
 
Последнее редактирование:

Trouble

Начинающий специалист
17 Окт 2021
160
93
68
Вот только сегодня думал о том, чтобы сделать такую тему, но руки так и не дошли. Наконец-то, есть куда посылать совсем ленивых
 

wholinc

Специалист
24 Янв 2023
775
453
95
23
Пора добавить из-за того что люди начинают скачивать серверную часть и забывают откатить config:

заголовок спойлера:
YOU GAME VERSION IS NOT SUPPORTED BY RAGE MULTIPLAYER


Описание:
1. Обновить игру или проверить целостность файлов.
2. После получения серверной части необходимо открыть config.xml в корневой папке RAGE и изменить с "<channel>prerelease_server</channel>" на "<channel>prerelease</channel>".
 
Реакции: Inoi