• Хостинг игровых серверов

    Максимальная производительность для ваших игровых серверов!

    Заказать сейчас

Помогите Ошибка в плагине.

TexHik

4 Янв 2018
13
0
8
25
Пытаюсь адаптировать плагин economiosc под работу с базами данных.
При компиляции на сервере, выводится ошибка:
JSON:
 DBEconomics was compiled successfully in 432ms
(23:53:41) | Failed to initialize plugin 'DBEconomics v0.1.0' (NullReferenceException: Object reference not set to an instance of an object)
  at Oxide.Plugins.DBEconomics.Init () [0x00082] in <06276a4f2b4d4008a62e8845752bb858>:0
  at Oxide.Plugins.DBEconomics.DirectCallHook (System.String name, System.Object& ret, System.Object[] args) [0x00310] in <06276a4f2b4d4008a62e8845752bb858>:0
  at Oxide.Plugins.CSharpPlugin.InvokeMethod (Oxide.Core.Plugins.HookMethod method, System.Object[] args) [0x00079] in <9affce1cd15c4ec183941adef8db1722>:0
  at Oxide.Core.Plugins.CSPlugin.OnCallHook (System.String name, System.Object[] args) [0x000d8] in <4452f821def6406d834e4149849fe7ea>:0
  at Oxide.Core.Plugins.CSPlugin.HandleAddedToManager (Oxide.Core.Plugins.PluginManager manager) [0x00043] in <4452f821def6406d834e4149849fe7ea>:0
(23:53:41) | Unloaded plugin DBEconomics v0.1.0 by TexHik

Файл плагина:
 

Вложения

  • DBEconomics.cs
    15.8 KB · Просмотры: 8
Если данные бд отправишь в лс,то могу повозится с ним.
бд пока что пустая, в ней 2 столбца steamid varchar(255) и balance double
возиться не с чем, да и ошибка без бд, я кщк даже конфиг не настроил, так как онне появляется.
плагин вообще не работает
 
TexHik, ошибка в Init,раз при загрузке плагина выходит ошибка.
Как вариант все обернуть в TRY CATCH и в самом начале поставить переменную int и после каждой строчки(в Try) добавлять к ней +1. В Catch поставить вывод этой перменной и будет видно на какой строчке ошибка вышла.
UPD:
Хотя там и кода почти нет) Сделай вывод responce и глянь какие данные получаешь.
 
TexHik, ошибка в Init,раз при загрузке плагина выходит ошибка.
Как вариант все обернуть в TRY CATCH и в самом начале поставить переменную int и после каждой строчки(в Try) добавлять к ней +1. В Catch поставить вывод этой перeменной и будет видно на какой строчке ошибка вышла.
UPD:
Хотя там и кода почти нет) Сделай вывод responce и глянь какие данные получаешь.
Сделал конструкцию try catch но получил другую ошибку, ошибка в этой строке
sqlConnection = sqlLibrary.OpenDb(config.DB_HOST, config.DB_PORT, config.DB_TABLENAME, config.DB_LOGIN, config.DB_PASSWORD, this)
как правильно обрабатывать чтоб она не срала что переменные null

Сделал такую штуку, но не работает
if (config.DB_HOST==null||config.DB_PORT==null||config.DB_TABLENAME==null||config.DB_LOGIN==null||config.DB_PASSWORD==null)
{
LogWarning("No connection data");
}
} else {
sqlConnection = sqlLibrary.OpenDb(config.DB_HOST, config.DB_PORT, config.DB_TABLENAME, config.DB_LOGIN, config.DB_PASSWORD, this);
}
 

Вложения

  • DBEconomics.cs
    15.8 KB · Просмотры: 1
Последнее редактирование:
Сделал конструкцию try catch но получил другую ошибку, ошибка в этой строке
sqlConnection = sqlLibrary.OpenDb(config.DB_HOST, config.DB_PORT, config.DB_TABLENAME, config.DB_LOGIN, config.DB_PASSWORD, this)
как правильно обрабатывать чтоб она не срала что переменные null

Сделал такую штуку, но не работает
if (config.DB_HOST==null||config.DB_PORT==null||config.DB_TABLENAME==null||config.DB_LOGIN==null||config.DB_PASSWORD==null)
{
LogWarning("No connection data");
}
} else {
sqlConnection = sqlLibrary.OpenDb(config.DB_HOST, config.DB_PORT, config.DB_TABLENAME, config.DB_LOGIN, config.DB_PASSWORD, this);
}
Как вариант не использовать config,а для начала вписать данные вручную,а после если уже нормально пашет,то и к созданию конфига можно перейти. Да и если данные не равняются null,то все равно может выбить ошибку из-за того,что данные просто неверные.
Да и такие проверки лучше в отдельную функцию перенести,не красиво выглядит)
 
Как вариант не использовать config,а для начала вписать данные вручную,а после если уже нормально пашет,то и к созданию конфига можно перейти. Да и если данные не равняются null,то все равно может выбить ошибку из-за того,что данные просто неверные.
Да и такие проверки лучше в отдельную функцию перенести,не красиво выглядит)
Ну хорошо, я разобрался со всем этим, добавил в таблицу тестовые значения и попытался запустить.
Но теперь, как я понял ошибка с обработкой ответа:
C#:
 MySql command callback raised an exception (NullReferenceException: Object reference not set to an instance of an object)
  at Oxide.Plugins.DBEconomics.<Init>m__1 (System.Collections.Generic.List`1[T] responce) [0x0001b] in <5dcead90479b405fad2bb02e3d8b9c9c>:0
  at Oxide.Core.MySql.Libraries.MySql+MySqlQuery+<>c__DisplayClass24_0.<Handle>b__0 () [0x0005d] in <d97e5b2e8bfd4176b069113c01be7d84>:0
C#:
sqlLibrary.Query(Oxide.Core.Database.Sql.Builder.Append(sqlquerry), sqlConnection, responce =>
                {
                        if (responce == null)
                        {
                            return; // Empty result or no records found
                        }
            
                        // Iterate through resulting records
                        foreach (Dictionary<string, object> entry in responce)
                        {
                            
                                balances.data.Add(entry["steamid"].ToString(), Convert.ToDouble(entry["balance"]));
                        }

                });
 

Вложения

  • DBEconomics.cs
    16.4 KB · Просмотры: 4
TexHik, Sql работал давно и то с Sql to LINQ. Так что не знаю,как там ответ приходит)
Может ответ приходит как текст и его нужно распарсить. В любом случае попробуй выведи куда-нибудь полученный ответ,а там уже видно будет.
 
Активность
Пока никто не печатает сообщение