Настройка
Всё, что можно менять, находится в config.lua и locales/. Остальная часть ресурса зашифрована (escrow), кроме экранов приложения.
Какой файл за что отвечает
Заголовок раздела «Какой файл за что отвечает»| Файл | За что отвечает | Можно редактировать |
|---|---|---|
config.lua | Фреймворк, деньги, шанс неудачи, полиция, карточка в App Store, наркотики, уровни, зоны | Да |
locales/*.lua | Уведомления в телефоне, по одному файлу на язык | Да |
locales/locales.lua | Таблица локалей, которую заполняют языковые файлы | Да |
ui/img/ | Картинки приложения: по одной на каждый наркотик, логотип на домашнем экране и иконка приложения (icon.png) | Да |
ui/index.html, ui/styles.css, ui/script.js | Экраны приложения, вёрстка и подписи кнопок | — |
player_data.json | Продажи, уровень и бонус каждого дилера. Записывается ресурсом | Да |
client/, server/ | Логика | Зашифрованы |
Отдельной папки bridge нет: фреймворк выбирается параметром Config.Framework ниже.
Фреймворк и деньги
Заголовок раздела «Фреймворк и деньги»| Параметр | Что делает | По умолчанию |
|---|---|---|
Config.Framework | "ESX" или "QB", заглавными буквами. На QBox используйте "QB" — QBox запускает ресурсы QBCore через слой совместимости | "ESX" |
Config.esxResourceName | Название ресурса ESX, если у вас оно нестандартное | "es_extended" |
Config.qbResourceName | Название ресурса QBCore, если у вас оно нестандартное. На QBox оставьте "qb-core" | "qb-core" |
Config.BlackMoney | Платить чёрными деньгами вместо чистой наличности | true |
Config.MoneyAsItem | Платить предметом инвентаря, а не зачислением на счёт | true |
Config.MoneyItem | Предмет, выдаваемый при включённом MoneyAsItem и выключенном BlackMoney | "money" |
Что именно получает игрок:
| ESX | QBCore / QBox | |
|---|---|---|
| Чёрные деньги, предметом | Предмет black_money | Предмет blackmoney |
| Чёрные деньги, на счёт | Счёт black_money | Предмет blackmoney |
| Чистые деньги, предметом | Предмет из Config.MoneyItem | Предмет из Config.MoneyItem |
| Чистые деньги, на счёт | Наличные | Наличные |
| Параметр | Что делает | По умолчанию |
|---|---|---|
Config.Failure | Шанс (от 0 до 100), что покупатель прогонит игрока после стука. Наркотики остаются у игрока | 55 |
Config.DealTimeout | Секунды на то, чтобы добраться до двери, прежде чем предложение истечёт | 300 |
Config.MinimumPolice | Число офицеров в сети, без которого никто не покупает. 0 отключает проверку | 1 |
Количество для продажи выбирается случайно между minAmount и maxAmount наркотика, когда игрок нажимает SELL; дверь выбирается случайно из зон этого наркотика.
Полиция
Заголовок раздела «Полиция»| Параметр | Что делает | По умолчанию |
|---|---|---|
Config.PoliceJobs | Работы, которые считаются полицейскими и получают оповещения | police, sheriff |
Config.PoliceAlertChance | Шанс (от 0 до 100), что об успешной продаже сообщат | 20 |
Config.PoliceNotifyAppName | Заголовок оповещения на lb-phone офицера | "Police Dispatch" |
Config.PoliceBlipSprite | Блип, ставящийся на месте продажи | 161 |
Config.PoliceBlipColor | Его цвет | 38 |
Config.PoliceBlipScale | Его размер | 1.0 |
Config.PoliceBlipDuration | Секунды до исчезновения блипа | 120 |
Config.PriceMultipliers | Ценовые уровни по числу офицеров в сети, у каждого есть minPolice, maxPolice и multiplier | См. ниже |
Поставляемые уровни: 1–2 офицера ×1.0, 3–4 ×1.2, 5–6 ×1.4, 7–9 ×1.6, 10 и более ×2.0. Если число офицеров не попадает ни в один уровень, цены остаются ×1.0.
Как рассчитывается цена. Бонус уровня и бонус полиции складываются, а не перемножаются: дилер 5-го уровня (×1.5), продающий при шести офицерах в сети (×1.4), получает 1 + 0.5 + 0.4 = ×1.9 от базовой цены.
Оповещение получает каждый офицер с работой из PoliceJobs; проверки нахождения на смене нет.
Кто видит приложение
Заголовок раздела «Кто видит приложение»| Параметр | Что делает | По умолчанию |
|---|---|---|
Config.BlockedAppJobs | Работы, которые не видят приложение и не могут его установить. Проверяется при загрузке игрока и при смене работы | police, sheriff, ambulance, mechanic |
Карточка в App Store
Заголовок раздела «Карточка в App Store»| Параметр | Что делает | По умолчанию |
|---|---|---|
Config.name | Название приложения на телефоне | "Drug Dealer" |
Config.description | Строка под названием в App Store | "Deal dope, dodge the cops" |
Config.defaultApp | true — приложение уже установлено на каждом телефоне; false — его нужно скачать из App Store | false |
Config.size | Размер, показываемый в магазине, в КБ | 25400 |
Config.price | Стоимость установки | 0 |
Иконка приложения — ui/img/icon.png. Замените файл, чтобы изменить её.
Наркотики
Заголовок раздела «Наркотики»Config.drugs — это список; каждая запись — одна кнопка в приложении.
| Поле | Что делает |
|---|---|
item | Предмет инвентаря, который продаётся |
label | Название, показываемое в приложении и уведомлениях |
price | Цена за единицу до бонусов |
minAmount, maxAmount | Диапазон, из которого выбирается количество в каждой сделке |
zones | В каких зонах из Config.NPCLocations может находиться покупатель |
image | Имя файла внутри ui/img/ |
minLevel | Уровень дилера, необходимый для продажи |
Чтобы добавить наркотик, добавьте запись, положите его картинку в ui/img/ и убедитесь, что предмет существует в вашем инвентаре. Уже лежащие там картинки, которые использует поставляемый список: baggy_weed.png, baggy_cocaine.png, lsd.png, baggy_meth.png, mushroom.png, opium.png, crack.png, drug_heroin.png, xtc_baggy.png, oxy.png, drug_lean.png, drug_hash.png.
Config.levels перечисляет ранги по порядку. У каждого есть номер level, название name, salesRequired (общее число сделок, а не единиц товара) и bonusMultiplier.
| Уровень | Название | Продаж | Бонус |
|---|---|---|---|
| 1 | Newbie | 0 | ×1.0 |
| 2 | Rookie | 25 | ×1.1 |
| 3 | Hustler | 75 | ×1.2 |
| 4 | Dealer | 150 | ×1.35 |
| 5 | Trader | 300 | ×1.5 |
| 6 | Boss | 600 | ×1.75 |
| 7 | Kingpin | 1200 | ×2.0 |
| 8 | Overlord | 2000 | ×2.25 |
| 9 | Tycoon | 3500 | ×2.5 |
| 10 | Legend | 5000 | ×3.0 |
Держите их в порядке возрастания salesRequired: уровень определяется проходом по списку сверху вниз.
| Параметр | Что делает | По умолчанию |
|---|---|---|
Config.dataFile | Файл в папке ресурса, в котором хранится прогресс каждого дилера | "player_data.json" |
Прогресс хранится по персонажам: по идентификатору ESX или citizen ID в QBCore.
Config.NPCLocations пронумерован; эти номера и указываются в zones наркотика. У каждой зоны есть:
| Поле | Что делает |
|---|---|
peds | Модели педов, один из которых случайно открывает дверь |
locations | Позиции дверей (x, y, z и направление) |
| Зона | Район | Поставляемых дверей |
|---|---|---|
| 1 | Грув | 1 |
| 2 | Пирс и пляж | 10 |
| 3 | Дома в Вайнвуде | 10 |
| 4 | Сэнди-Шорс | 8 |
| 5 | Палето-Бэй | 9 |
Зоны и двери можно свободно добавлять. Но учтите: название зоны в оповещении полиции берётся из самого ресурса и знает только зоны с 1 по 5; любая добавленная вами зона в оповещении указывается как «Unknown Zone».
В locales/ поставляются девять: en, es, fr, de, it, pt, pl, ru и tr. Укажите один из них в Config.Locale.
Чтобы добавить свой:
- Скопируйте
locales/en.luaв новый файл, напримерlocales/nl.lua. - Замените код в начале на
nlи переведите текст. - Добавьте
locales/nl.luaв списокshared_scriptsвfxmanifest.lua, рядом с остальными и вышеconfig.lua. - Установите
Config.Locale = "nl", затем выполнитеrefreshи перезапустите ресурс.
Локали охватывают уведомления в телефоне. Собственные кнопки приложения — DRUGS, PROFILE, SELL, CANCEL и экран профиля — прописаны в ui/script.js и ui/index.html.