--[[ ================================================================================ ГАЙД: настройка призыва кукол (Doll Summon) — Role_DollSummon.lua ================================================================================ 1) ТАБЛИЦА DollSummonPool • Список возможных наград при призыве на вкладке «Призвать» в UI кукол. • Каждая строка: { id = <число>, weight = <число> }. • id — ID предмета‑куклы из item_proto (как в клиенте/данных предметов). • weight — вес в «лотерее». Чем больше вес относительно других, тем чаще выпадет эта кукла. Веса можно задавать любыми положительными числами; важны именно соотношения (100 и 200 — в два раза чаще, чем 50 и т.д.). • Записи с weight <= 0 или без weight в розыгрыше не участвуют. • Один и тот же id можно не дублировать: достаточно одной строки с общим весом. 2) КОГДА СРАБАТЫВАЕТ if DollSummonPool == nil • Таблица создаётся один раз при первой загрузке скрипта. Если пул уже существует в памяти, блок инициализации не перезапишет его. После правок файла обычно нужен перезапуск сервера (или сценарий Lua reload), чтобы подтянуть новый список — зависит от того, как у вас грузятся role-скрипты. 3) Функция DollSummonRoll() • Один бросок: суммирует все положительные веса, выбирает случайное число от 1 до суммы и возвращает id выпавшей записи. При пустом/некорректном пуле вернёт 0. 4) Функция DollSummon(count, roleId) • Делает count независимых бросков (каждый вызов DollSummonRoll). • roleId передаётся с сервера, в текущей реализации функции не используется — можно задействовать для персонифицированных шансов или проверок. • count ограничен сверху: не больше 10 за один вызов; при count <= 0 возвращается десять нулей (ошибка/пустой запрос). • Возвращает ровно 10 значений: ids для 1..count бросков, остальные — 0. 5) ПРОВЕРКИ • Убедитесь, что id есть в item_proto и это куклы с нужным SpecFunc. • После изменения весов пересчитайте «ощущаемый дроп»: редким куклам — меньший weight. ================================================================================ ]] if DollSummonPool == nil then DollSummonPool = { { id = 1360513, weight = 100 }, { id = 1360514, weight = 100 }, { id = 1360515, weight = 100 }, { id = 1360516, weight = 100 }, { id = 1360517, weight = 100 }, { id = 1360518, weight = 100 }, { id = 1360519, weight = 100 }, { id = 1360520, weight = 100 }, { id = 1360521, weight = 100 }, { id = 1360522, weight = 100 }, { id = 1360523, weight = 100 }, { id = 1360524, weight = 100 }, { id = 1360525, weight = 100 }, { id = 1360526, weight = 100 }, { id = 1360527, weight = 100 }, { id = 1360528, weight = 100 }, { id = 1360529, weight = 100 }, { id = 1360530, weight = 100 }, { id = 1360531, weight = 100 }, { id = 1360532, weight = 100 }, { id = 1360533, weight = 100 }, { id = 1360534, weight = 100 }, { id = 1360535, weight = 100 }, { id = 1360536, weight = 100 }, { id = 1360537, weight = 100 }, { id = 1360538, weight = 100 }, { id = 1360539, weight = 100 }, { id = 1360540, weight = 100 }, { id = 1360541, weight = 100 }, { id = 1360542, weight = 100 }, { id = 1360543, weight = 100 }, { id = 1360544, weight = 100 }, { id = 1360545, weight = 100 }, { id = 1360546, weight = 100 }, { id = 1360547, weight = 100 }, { id = 1360548, weight = 100 }, { id = 1360549, weight = 100 }, { id = 1360550, weight = 100 }, { id = 1360551, weight = 100 }, { id = 1360552, weight = 100 }, { id = 1360553, weight = 100 }, { id = 1360554, weight = 100 }, { id = 1360555, weight = 100 }, { id = 1360556, weight = 100 }, { id = 1360557, weight = 100 }, { id = 1360558, weight = 100 }, { id = 1360559, weight = 100 }, { id = 1360560, weight = 100 }, { id = 1360561, weight = 100 }, { id = 1360562, weight = 100 }, { id = 1360563, weight = 100 }, { id = 1360564, weight = 100 }, { id = 1360565, weight = 100 }, { id = 1360566, weight = 100 }, { id = 1360567, weight = 100 }, { id = 1360568, weight = 100 }, { id = 1360569, weight = 100 }, { id = 1360570, weight = 100 }, { id = 1360571, weight = 100 }, { id = 1360572, weight = 100 }, { id = 1360573, weight = 70 }, { id = 1360574, weight = 70 }, { id = 1360575, weight = 70 }, { id = 1360576, weight = 70 }, { id = 1360577, weight = 70 }, { id = 1360578, weight = 70 }, { id = 1360579, weight = 70 }, { id = 1360580, weight = 70 }, { id = 1360581, weight = 70 }, { id = 1360582, weight = 70 }, { id = 1360583, weight = 70 }, { id = 1360584, weight = 70 }, { id = 1360585, weight = 70 }, { id = 1360586, weight = 70 }, { id = 1360587, weight = 70 }, { id = 1360588, weight = 70 }, { id = 1360589, weight = 70 }, { id = 1360590, weight = 70 }, { id = 1360591, weight = 70 }, { id = 1360592, weight = 70 }, { id = 1360593, weight = 70 }, { id = 1360594, weight = 70 }, { id = 1360595, weight = 70 }, { id = 1360596, weight = 70 }, { id = 1360597, weight = 70 }, { id = 1360598, weight = 70 }, { id = 1360599, weight = 70 }, { id = 1360600, weight = 70 }, { id = 1360601, weight = 70 }, { id = 1360602, weight = 70 }, { id = 1360603, weight = 70 }, { id = 1360604, weight = 70 }, { id = 1360605, weight = 70 }, { id = 1360606, weight = 70 }, { id = 1360607, weight = 70 }, { id = 1360608, weight = 70 }, { id = 1360609, weight = 70 }, { id = 1360610, weight = 70 }, { id = 1360611, weight = 70 }, { id = 1360612, weight = 70 }, { id = 1360613, weight = 40 }, { id = 1360614, weight = 40 }, { id = 1360615, weight = 40 }, { id = 1360616, weight = 40 }, { id = 1360617, weight = 40 }, { id = 1360618, weight = 40 }, { id = 1360619, weight = 40 }, { id = 1360620, weight = 40 }, { id = 1360621, weight = 40 }, { id = 1360622, weight = 40 }, { id = 1360623, weight = 40 }, { id = 1360624, weight = 40 }, { id = 1360625, weight = 40 }, { id = 1360626, weight = 40 }, { id = 1360627, weight = 40 }, { id = 1360628, weight = 40 }, { id = 1360629, weight = 40 }, { id = 1360630, weight = 40 }, { id = 1360631, weight = 40 }, { id = 1360632, weight = 40 }, { id = 1360633, weight = 40 }, { id = 1360634, weight = 40 }, { id = 1360635, weight = 40 }, { id = 1360636, weight = 40 }, { id = 1360637, weight = 40 }, { id = 1360638, weight = 40 }, { id = 1360639, weight = 40 }, { id = 1360640, weight = 40 }, { id = 1360641, weight = 40 }, { id = 1360642, weight = 40 }, { id = 1360643, weight = 10}, { id = 1360644, weight = 10}, { id = 1360645, weight = 10}, { id = 1360646, weight = 10}, { id = 1360647, weight = 10}, { id = 1360648, weight = 10}, { id = 1360649, weight = 10}, { id = 1360650, weight = 10}, { id = 1360651, weight = 10}, { id = 1360652, weight = 10}, { id = 1360653, weight = 10}, { id = 1360654, weight = 10}, { id = 1360655, weight = 10}, { id = 1360656, weight = 10}, { id = 1360657, weight = 10}, { id = 1360658, weight = 10}, { id = 1360659, weight = 10}, { id = 1360660, weight = 10}, { id = 1360661, weight = 10}, { id = 1360662, weight = 10}, { id = 1360663, weight = 1}, { id = 1360664, weight = 1}, { id = 1360665, weight = 1}, { id = 1360666, weight = 1}, { id = 1360667, weight = 1}, { id = 1360668, weight = 1}, { id = 1360669, weight = 1}, { id = 1360670, weight = 1}, { id = 1360671, weight = 1}, { id = 1360672, weight = 1}, { id = 1360673, weight = 1}, { id = 1360674, weight = 1}, { id = 1360675, weight = 1}, { id = 1360676, weight = 1}, { id = 1360677, weight = 1}, } end local function DollSummonRoll() local total = 0 for _, v in ipairs(DollSummonPool) do if v.weight and v.weight > 0 then total = total + v.weight end end if total <= 0 then return 0 end local r = math.random(total) local acc = 0 for _, v in ipairs(DollSummonPool) do local w = v.weight or 0 if w > 0 then acc = acc + w if r <= acc then return v.id or 0 end end end return 0 end function DollSummon(count, roleId) local results = {} if count == nil or count <= 0 then return 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 end if count > 10 then count = 10 end for i = 1, count do results[i] = DollSummonRoll() end return results[1] or 0, results[2] or 0, results[3] or 0, results[4] or 0, results[5] or 0, results[6] or 0, results[7] or 0, results[8] or 0, results[9] or 0, results[10] or 0 end