А-а-а, короче, вот ответ неськи
Спасибо за детали! Поскольку в `Fishing_table` колонка `DropID` везде содержит значение "10901" (а `DropIDNet` — NULL), это, скорее всего, **ссылка на группу дропа** (drop group ID), а не прямой ID предмета. В структурах баз данных BDO (и эмуляторах вроде Archer) рыбалка часто использует группы дропа, где один ID (как 10901) определяет набор возможных предметов с шансами. Если вместо рыбы ловятся чёрные камни (ID 16001/16002) и серебро, значит, в группе 10901 прописаны эти нежелательные предметы вместо (или вместе с) рыбой.
Поскольку вы проверили конфиги, MongoDB и отсутствие таблиц вроде `drop` или `loot`, проблема, вероятно, в другой таблице sqlite, которая определяет содержимое групп дропа. В репаке Archer (на основе BDO эмуляторов) такие группы часто хранятся в таблицах вроде `RandomBox_table`, `ItemRandomBox_table`, `DropGroup_table` или `ItemDropGroup_table`. Серебро может быть отдельным полем (как валюта-дроп), а чёрные камни — стандартными предметами.
### 1. **Перечислите все таблицы в bdoOLD.sqlite3**
Чтобы убедиться, что вы не пропустили таблицу:
- В DB Browser for SQLite выполните запрос:
```sql
SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;
```
- Ищите таблицы с именами, содержащими "random", "box", "dropgroup", "itemdrop", "lootgroup", "fishingdrop" или подобными. Возможные варианты:
- `RandomBox_table`
- `ItemRandomBox_table`
- `DropGroup_table`
- `ItemDropGroup_table`
- `RandomItem_table`
- `FishingDrop_table` (если есть вариации)
- Если найдёте, перейдите к шагу 2.
### 2. **Проверьте группу дропа 10901 в найденной таблице**
Предположим, таблица называется `RandomBox_table` (это распространённо в BDO эмуляторах). Выполните:
```sql
SELECT * FROM RandomBox_table WHERE id = 10901 OR group_id = 10901 OR box_id = 10901;
```
- Или замените `RandomBox_table` на имя найденной таблицы.
- В результатах ищите столбцы вроде:
- `item_id` или `drop_id`: Здесь будут ID предметов (например, 16001 для чёрного камня оружия, 16002 для брони, или 1 для серебра/валюты).
- `count` или `quantity`: Количество.
- `rate` или `probability`: Шанс выпадения (например, 0.1 для 10%).
- Если серебро не как item, а как валюта, может быть столбец `money` или `silver_amount`.
- Пример структуры (если таблица похожа):
| id | item_id | count | rate |
|-------|---------|-------|------|
| 10901 | 16001 | 1 | 0.2 | // Чёрный камень (оружие)
| 10901 | 1 | 1000 | 0.3 | // Серебро
| 10901 | 839 | 1 | 0.5 | // Рыба (сельдь)
### 3. **Исправьте группу дропа**
- **Удалите нежелательные предметы** (чёрные камни и серебро):
```sql
DELETE FROM RandomBox_table
WHERE (id = 10901 OR group_id = 10901) AND item_id IN (1, 16001, 16002);
```
(Замените `RandomBox_table` на реальное имя таблицы, и `item_id` на соответствующий столбец.)
- **Добавьте или увеличьте шансы для рыбы** (если рыбы нет или мало):
Сначала найдите ID рыб в `item_table`:
```sql
SELECT id, name FROM item_table WHERE name LIKE '%рыб%' OR name LIKE '%fish%';
```
Примеры ID рыб: 839 (сельдь), 840 (окунь), 841 (сом) и т.д.
Затем добавьте записи (пример для группы 10901):
```sql
INSERT INTO RandomBox_table (id, item_id, count, rate)
VALUES
(10901, 839, 1, 0.5), -- Сельдь, шанс 50%
(10901, 840, 1, 0.3), -- Окунь, шанс 30%
(10901, 841, 1, 0.2); -- Сом, шанс 20%
```
Убедитесь, что сумма `rate` близка к 1.0 (или 100%, в зависимости от формата).
- **Измените существующие записи** (альтернатива удалению):
```sql
UPDATE RandomBox_table
SET item_id = 839, rate = 1.0
WHERE (id = 10901 OR group_id = 10901) AND item_id IN (16001, 16002, 1);
```
Это заменит чёрные камни и серебро на рыбу (например, ID 839) со 100% шансом.
### 4. **Дополнительные проверки**
- Если группа 10901 содержит подгруппы (sub-groups), проверьте столбцы вроде `sub_id` или `group_link` и рекурсивно проверьте связанные записи.
- Если серебро добавляется отдельно (не как item), ищите в таблице поля вроде `min_silver`, `max_silver` и установите их на 0:
```sql
UPDATE RandomBox_table
SET min_silver = 0, max_silver = 0
WHERE id = 10901;
```
- После изменений сохраните базу (File > Write Changes) и перезапустите сервер. Протестируйте рыбалку в игре.
### 5. **Если таблицы не найдены**
- Если нет таблиц с "random" или "dropgroup", проблема может быть в серверных скриптах:
- Проверьте папку `gameserver/scripts` (или `bin/scripts`) на файлы вроде `fishing.lua`, `drop.lua` или `
randomdrop.java`.
- Ищите код, где упоминается 10901, и редактируйте добавление предметов (например, удалите `addItem(16001)` или `addSilver(1000)`).
- Пример в Lua:
```lua
if dropGroup == 10901 then
-- Удалите: addItem(player, 16001, 1) -- Чёрный камень
-- Удалите: addSilver(player, 1000)
addItem(player, 839, 1) -- Рыба
end
```
- Если скрипты на Java, используйте текстовый редактор (Notepad++ или VS Code) для поиска по ключу "10901".
### 6. **Рекомендации**
- **Резервная копия**: Сделайте копию `bdoOLD.sqlite3` перед SQL-запросами.
- **ID подтверждение**: Чёрные камни — 16001 (оружие), 16002 (броня). Серебро — часто 1 или специальное. Рыбы — из `item_table`.
- **Тест**: Создайте тестовую зону рыбалки и проверьте дроп.
- **Ragezone**: Если не поможет, зарегистрируйтесь на Ragezone и спросите в теме Archer repack (поиск по "Archer BDO repack") о "fishing drop group 10901". Там могут быть кастомные изменения в репаке.
Если опишете список таблиц из шага 1 или данные из группы 10901, я дам более точные SQL-запросы!