IQAlcoholFarm

$ IQAlcoholFarm [Paid] 1.3.39

Sempai

Admin
Команда форума
Администратор
VIP
12 Май 2022
5,589
916
30
₽
43,259
Sempai updated IQPotionFarm with a new update entry:

1.1.28

- Исправлена опечатка в конфигурации
- Исправлен возможный баг с бочкой на машине
- Запрещено выливать алкоголь в бассейны
- Исправлен NRE после установки торговца
- Если у вас возникли проблемы с открытием обменника, убедитесь, что в конфигурации указано правильное Shortname "water.salt", возможно у вас wate.saltr

Read the rest of this update entry...
 

Sempai

Admin
Команда форума
Администратор
VIP
12 Май 2022
5,589
916
30
₽
43,259
Sempai updated IQPotionFarm with a new update entry:

1.2.33

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

Read the rest of this update entry...
 

DoK

New member
24 Май 2025
19
1
3
₽
0
Здравствуйте, перестал работать данный плагин после обновления игры. До этого всё работало замечательно, Обновите пожалуйста.
 

Sempai

Admin
Команда форума
Администратор
VIP
12 Май 2022
5,589
916
30
₽
43,259
Sempai updated IQAlcoholFarm with a new update entry:

1.3.34

Небольшое обновление функционала и исправление​

- Исправление ошибки Network, после обновления игры
- Добавлена консольная команда на выдачу бутылки с жидкостями : bottle.add <SteamID:Name:IP> <must:alcohol> <Amount>

Read the rest of this update entry...
 
  • Like
Реакции: DoK

fell228

Member
13 Сен 2024
53
1
8
Россия
₽
3
Выдает ошибку

Error while compiling IQAlcoholFarm: A using clause must precede all other elements defined in the namespace except extern alias declarations | Line: 3513, Pos: 2
 

Dobrinya

New member
24 Апр 2026
2
1
3
33
Ульяновск
₽
206

Суть проблемы​

Консольная команда func.alcohol (обрабатывает клики по UI магазина NPC) регистрируется без какой-либо проверки прав или источника вызова - доступна любому подключённому игроку через игровую консоль (F1), не только через клик по кнопке в интерфейсе.

Ветка category selling <Category> amount.buy <Y> <Page> <Amount> парсит Amount через Int32.Parse без ограничения диапазона (только if (Amount == 0) return;) , а метод BuyItem() вообще не проверяет, хватает ли у игрока предмета-цены - снятие валюты (TakeItems) и выдача товара (GiveItem) выполняются безусловно. Проверка достатка (HaveItem) в коде существует, но вызывается только для подсветки кнопки в UI - это чисто визуальная подсказка клиенту, сервер её не перепроверяет при реальном исполнении команды.

Как эксплуатируется​

Игрок вручную вводит в консоль:

func.alcohol category selling Exchanger amount.buy 0 0 -1000000

(индекс/страница/категория подбираются под нужный товар в конфиге).

Что происходит внутри TakeItems: при отрицательном Amount итоговый TargetAmount (цена × количество) становится отрицательным. Условие if (use.amount > TargetAmount) из-за этого выполняется всегда (любое положительное число больше отрицательного), и код делает:

use.amount -= TargetAmount; // при TargetAmount < 0 это фактически += |TargetAmount|

То есть вместо списания валюты стек предмета-цены у игрока раздувается на произвольную величину - достаточно иметь всего 1 штуку нужного предмета в инвентаре.

Даже без отрицательных чисел: если просто вызвать amount.buy с большим Amount, не имея вообще валюты, TakeItems спишет только то, что реально есть (может не хватить или быть 0), но GiveItem всё равно выдаст полный объём товара - оплата не обязательна.

Что в итоге​

Полноценный дюп любого предмета, назначенного как "цена" в категориях EquipmentCategory/ExchangerCategory (по дефолтному конфигу - scrap, water.salt/алкоголь), плюс бесплатное получение товаров из магазина (оружие, hazmat и т.д. в Exchanger-категории). Уязвимость эксплуатируется без прав администратора, без взаимодействия с самим NPC — чистый консольный вызов.

Как я это исправил у себя​

  1. В обработчике команды (FuncionalCommad, ветка "selling"): Amount валидируется в диапазон 1..1000 (константа MaxBuyAmount), Y/Page - проверяются на выход за границы фактического списка товаров на странице, до этого возможен был и IndexOutOfRangeException на кривом Y.
  2. В BuyItem(): перед TakeItems/GiveItem добавлена серверная проверка HaveItem(player, PriceItems.Shortname, PriceItems.Amount * Amount, PriceItems.SkinID) - если у игрока реально нет нужного количества, покупка просто не выполняется.
 
  • Haha
Реакции: Sempai