Цитата(Sirocco @ 19.1.2024, 20:04)
И чем это отличается от того, что написал автор в сообщении #3 -
https://forum.uokit.com/index.php?showtopic...st&p=445623?
ну тем что это раза в 3 сложнее и нафиг не нужно.
Как бы много чем, например правильным % распределения
Плюс автор хотел
Код
Хочется универсальный, читабельный вариант.
Если мы идем путем
Код
IF (15 > <R100>)
SERV.NEWITEM=I_RANDOM_WEAPON
ELIF (20 > <R100>)
SERV.NEWITEM=I_RANDOM_ARMOR
ELIF (20 > <R100>)
SERV.NEWITEM=I_RANDOM_REAGENT
ELIF (25 > <R100>)
SERV.NEWITEM=I_RANDOM_BOTTLE
ELSE
SERV.NEWITEM=I_BANDAGE
ENDIF
Тогда получается что шанс выпадения WEAPON у нас 15%
Шанс выпадения ARMOR у нас около 17% (а не 20) тк сначала должно прокнутся 85% в первом условии
И так далее на уменьшение из-за ELIF-ов
Поэтому шанс выпадения BOTTLE существенно ниже 25 из-за того что рэнд считается в каждом условии
Код
DORAND 2
SERV.NEWITEM=I_RANDOM_WEAPON_1
SERV.NEWITEM=I_RANDOM_WEAPON_2
ENDDO
Ну а соответственно если ты говорил про вариант с DORAND то он дает равное распределение, а не процентное как надо автору.
и что бы DORAND сработал как он ожидает - ему прийдется руками высчитывать соотношения и наполнять DORAND согласно процентам, но это сложно и прийдется все пересчитывать для всех вещей если он вдруг решит через время % подкорректировать. поэтому такое себе удовольствие. поэтому мой вариант сложнее в реализации, но в разы читаемее и проще поддерживать и дополнять новыми категориями и тп
типа с DORAND идея вот такая
Код
С 15% случайное оружее - 15 строчек
С 20% случайная часть доспеха - 20 строчек
С 20% случайный реагент - 20 строчек
С 25% случайное зелье - 25 строчек
(20% бинт) - 20 строчек
для удобства делаем *2/10
Код
С 15% случайное оружее - 15*2/10=3 строчек
С 20% случайная часть доспеха - 4 строчек
С 20% случайный реагент - 4 строчек
С 25% случайное зелье - 5 строчек
(20% бинт) - 4 строчек
Соответственно код выйдет что-то вроде такого
Что конечно выглядит весьма просто, но поддерживать - снова пересчитывать соотношения
Код
DORAND 20
SERV.NEWITEM=I_RANDOM_WEAPON_1
SERV.NEWITEM=I_RANDOM_WEAPON_1
SERV.NEWITEM=I_RANDOM_WEAPON_1
SERV.NEWITEM=I_RANDOM_ARMOR
SERV.NEWITEM=I_RANDOM_ARMOR
SERV.NEWITEM=I_RANDOM_ARMOR
SERV.NEWITEM=I_RANDOM_ARMOR
SERV.NEWITEM=I_RANDOM_REAGENT
SERV.NEWITEM=I_RANDOM_REAGENT
SERV.NEWITEM=I_RANDOM_REAGENT
SERV.NEWITEM=I_RANDOM_REAGENT
SERV.NEWITEM=I_RANDOM_BOTTLE
SERV.NEWITEM=I_RANDOM_BOTTLE
SERV.NEWITEM=I_RANDOM_BOTTLE
SERV.NEWITEM=I_RANDOM_BOTTLE
SERV.NEWITEM=I_RANDOM_BOTTLE
SERV.NEWITEM=I_BANDAGE
SERV.NEWITEM=I_BANDAGE
SERV.NEWITEM=I_BANDAGE
SERV.NEWITEM=I_BANDAGE
ENDDO