Перейти к содержанию

F2: RandomLoot - заметки по скрипту.


Blackmail01

Рекомендуемые сообщения

Собрался я тут в старый добрый поиграть, и увидел на него отличный скрипт, что в мегамоде мне нравился. Мистер Ethereal, адаптировал его под реалии Restoration Project. Скачать его можно здесь

Принцип работы:


При первом заходе на локацию он заполняет пустые контейнеры случайным барахлом.

Тут я решил малость его посмотреть от какого предмета иногда при луте контейнера происходит вылет.
Там и возникло желание его улучшить, и сделать в перспективе легко совместимым с модами на вещи и/или локации. Создавалось и тестировалось всё на F2 GOG + Killaps Unofficial Patch.

Типы локаций (их я пока не трогал):


  • 1. Arroyo, Klamath, энкаунтеры вокруг.
  • 2. Дэн, Модок, энкаунтеры вокруг.
  • 3. Гекко, Волт-Сити, Реддинг, энкаунтеры
  • 4. Брокен-Хиллс, Нью-Рино, База Сьерра
  • 5. НКР, Волт 13,15, энкаунтеры
  • 6. Финальные локации, Сан-фран, Наварро, Вышка и т.п.
  • Там есть ещё локации из Restoration Project, но если их нет то и ок.

Сейчас сделана броня:


 

 

  • T1: Leather Armor Leather Jacket Robes
  • T2: Leather Armor Leather Jacket Robes Combat Leather Jacket Leather Armor Mark II
  • + Metal Armor
  • T3: Leather Armor Leather Jacket Robes Combat Leather Jacket Leather Armor Mark II Metal Armor Mark II Metal Armor
  • T4: Combat Armor Tesla Armor Combat Leather Jacket Leather Armor Mark II Metal Armor Mark II
  • Combat Armor Mark II
  • T5: Power Armor Combat Armor Tesla Armor Metal Armor Mark II Combat Armor Mark II
  • T6: Power Armor Hardened Power Armor Tesla Armor Advanced Power Armor Adv. Power Armor MKII Combat Armor Mark II

 


Добрался потихоньку до оружия и что мы имеем:


 

 

Сейчас стоит распределение по тирам такое:

  • 1. Кnife, Sledgehammer, Spear, Crowbar, Throwing Knife, Molotov Cocktail, Pipe Rifle, Zip Gun, Switchblade, Sharpened Pole, Shiv
  • 2. 10mm Pistol, Hunting Rifle, Assault Rifle, Grenade (Frag), Molotov Cocktail, Spiked Knuckles, Zip Gun, Sawed-Off Shotgun
  • 3. Hunting Rifle, Assault Rifle, Grenade (Frag), Grenade (Plasma), Shotgun, Light Support Weapon, M60
  • 4. 10mm SMG, Desert Eagle .44, 14mm Pistol, Assault Rifle, Grenade (Frag), Grenade (Plasma), Combat Knife, .44 Magnum Revolver, FN FAL, H&K G11, XL70E3, Light Support Weapon, M60, Needler Pistol
  • 5. Rocket Launcher, Laser Pistol, Plasma Pistol, Grenade (Frag), Grenade (Plasma), Grenade (Pulse), 9mm Mauser, Red Ryder BB Gun, Red Ryder LE BB Gun, Power Fist, Combat Shotgun, Tommy Gun, Bozar, Light Support Weapon, FN FAL HPFA
  • 6. Plasma Rifle, Grenade (Plasma), Grenade (Pulse), Gatling Laser, Super Sledge, Ripper, Laser Rifle, .223 Pistol, H&K CAWS, HK P90c, H&K G11, Light Support Weapon, M60, Needler Pistol, H&K G11E, M72 Gauss Rifle, Phazer, PPK12 Gauss Pistol, Vindicator Minigun, YK32 Pulse Pistol, YK42B Pulse Rifle, Holy Hand Grenade, FN FAL HPFA

 



Что не очень то что надо. Например, в первых двух тирах присутствует вырезанный зип ган. На 6 тире есть святая граната. Я считаю, что уникальные вещи должны оставаться такими. Дигл и магнум на 4 тире, хотя их заполучить можно и в Дэне. И вы никогда оттуда не получите такие вещи как Flamer Sniper Rifle Avenger Minigun Cattle Prod

и улучшенные версии пушек тоже (что для меня вполне ок)

Моё видение этого скрипта после доработки:


  • настройка в ини оружия по типам;
  • отдельная настройка вероятностей для силовой брони;
  • возможность добавлять туда вещи из модов без правки скриптов;
  • добавление локаций из модов также через ини файл;
  • отключаемая вероятность выпадения предметов не только своего тира, но и на 2 тира меньше.

Предлагайте свои вариации как это всё получше распределить.

Ссылка на комментарий

Одна-две радномные вещи на локу в рандомный ящик, при первом заходе на карту.

А пихать кучу вещей/барахла на одну карту не вижу смысла, тем более это нарушает игру.

Ссылка на комментарий

Вот набор скриптов.


Одна-две радномные вещи на локу в рандомный ящик, при первом заходе на карту.
А пихать кучу вещей/барахла на одну карту не вижу смысла, тем более это нарушает игру.

Запихать для теста - можно, для игры, в пределах 3%

Ссылка на комментарий

Ну или действительное барохло типа дров/презервативов/дошираков генерить на локе без ограничений.

 

для игры, в пределах 3%

3% от чего от ВВП страны?)))

Или 3% шанса на одну шмотку, а таких шмоток будет к примеру 10 в итоге в один прекрасный день получите все 10 шмоток на одной локе. Херня эта заливная рыба.

Ссылка на комментарий

Ну или действительное барохло типа дров/презервативов/дошираков генерить на локе без ограничений.

Без ограничений явно не стоит, а вот появление травки или полена в случайнойвстречи скажем, 7%. Патронов и амуниции 3%.. итд..

Собственно, в мегамоде 2.44.3 я их снижал с 60-90, до 3-5, что делало их редкими. Но то, можно было взять микрореакторы уже в Ден, портило баланс.

А в минимоде, в пред.версиях так полки вообще ломились от бластеров и энергоячеек. Что, лично мне и не нравилось...

Ну или действительное барохло типа дров/презервативов/дошираков генерить на локе без ограничений.

 

3% от чего от ВВП страны?)))

от какой страны.... страна без флага(

вероятность появления 3%...

Ссылка на комментарий

Да, мне и самому нравится малая вероятность этого всего. Очень понравилась настройка в Megamod US от Pyran. Иначе нету никакого смысла лутать уже давно знакомые локации. А так, вероятность мала, но есть.

Ссылка на комментарий

Да, мне и самому нравится малая вероятность этого всего. Очень понравилась настройка в Megamod US от Pyran. Иначе нету никакого смысла лутать уже давно знакомые локации. А так, вероятность мала, но есть.

в 2.44.3 - исправленная и стандартная с пометкой old.

2.47.5 - стандартная, есть параметр контейнеров, но нет параметра "дубликаты".

 

И вопросец: если значения считаются в процентах, то в 2.47.5 указано неверное значение (оставил его из оригинала).

;nothing will be added if the roll falls into this range
RandomNothingPercent=110 и нужно ставить 90.
Ссылка на комментарий

Там всё считается тоже довольно колхозно. Берутся все эти "проценты", складываются, затем рандом (1, это число) и там если рандом выпал <= на первую опцию то вызываем процедуру первой функции(генерация брони). Затем куча условий если рандом выпал не туда то не <= ли он для следующего условия. И далее. А там уж создаётся какая-нить вещица, или не создаётся если рандом выпал на Nothing.

В общем, RandomNothingPercent добавляет сколь угодно. Хоть 500 "процентов".

Увеличивая RandomNothingPercent  вы увеличиваете шансы на пустой контейнер.

RandomNumberOfItemsMin(MAX) считается отдельно.

 

Mr. Stalin, дайте совет как эту штуку можно упростить? 

Ссылка на комментарий

Насколько я помню, то в моде появление Advanced Power Armor, Adv. Power Armor MKII и всех модернизированных предметов было исключено. Вот в отдельной версии скрипта - не уверен.

Ссылка на комментарий

С первым этапом вроде закончил. Исходный код стал меньше почти в 4 раза.

https://drive.google.com/file/d/1kL8zwy4xwFJqeYsEgUcDP05t4C5Vlq14/view?usp=sharing

 

Теперь вот думаю, что с этой красотой делать:

 

 

procedure pick_item_type(variable arg0) begin //_FLDC_
   case_item := 0;
   money := 0;
   random_roll := 0;
   town_level := 0;
   current_town := "";
   random_roll := 0;
   call determine_town_level;
   random_roll := random(1, get_sfall_global_int(4407) + get_sfall_global_int(4408) + get_sfall_global_int(4409) + get_sfall_global_int(4410) + get_sfall_global_int(4411) + get_sfall_global_int(4412) + get_sfall_global_int(4413) + get_sfall_global_int(4414) + get_sfall_global_int(4415) + get_sfall_global_int(4416) + get_sfall_global_int(4417) + get_sfall_global_int(4418) + get_sfall_global_int(4420));
   if (random_roll <= get_sfall_global_int(4407)) then begin
      call random_armor;
   end
   else begin
      if (random_roll <= (get_sfall_global_int(4407) + get_sfall_global_int(4408))) then begin
         call random_weapons;
      end
      else begin
         if (random_roll <= (get_sfall_global_int(4407) + get_sfall_global_int(4408) + get_sfall_global_int(4409))) then begin
            call random_ammo;
         end
         else begin
            if (random_roll <= (get_sfall_global_int(4407) + get_sfall_global_int(4408) + get_sfall_global_int(4409) + get_sfall_global_int(4410))) then begin
               call random_stimpacks;
            end
            else begin
               if (random_roll <= (get_sfall_global_int(4407) + get_sfall_global_int(4408) + get_sfall_global_int(4409) + get_sfall_global_int(4410) + get_sfall_global_int(4411))) then begin
                  if (get_sfall_global_int(4434) == 1) then begin
                     call random_books;
                  end
                  else begin
                     if (get_sfall_global_int(4434) == 0) then begin
                        call random_books_vanilla;
                     end
                  end
               end
               else begin
                  if (random_roll <= (get_sfall_global_int(4407) + get_sfall_global_int(4408) + get_sfall_global_int(4409) + get_sfall_global_int(4410) + get_sfall_global_int(4411) + get_sfall_global_int(4412))) then begin
                     call random_booze;
                  end
                  else begin
                     if (random_roll <= (get_sfall_global_int(4407) + get_sfall_global_int(4408) + get_sfall_global_int(4409) + get_sfall_global_int(4410) + get_sfall_global_int(4411) + get_sfall_global_int(4412) + get_sfall_global_int(4413))) then begin
                        call random_herbs;
                     end
                     else begin
                        if (random_roll <= (get_sfall_global_int(4407) + get_sfall_global_int(4408) + get_sfall_global_int(4409) + get_sfall_global_int(4410) + get_sfall_global_int(4411) + get_sfall_global_int(4412) + get_sfall_global_int(4413) + get_sfall_global_int(4414))) then begin
                           call random_drugs;
                        end
                        else begin
                           if (random_roll <= (get_sfall_global_int(4407) + get_sfall_global_int(4408) + get_sfall_global_int(4409) + get_sfall_global_int(4410) + get_sfall_global_int(4411) + get_sfall_global_int(4412) + get_sfall_global_int(4413) + get_sfall_global_int(4414) + get_sfall_global_int(4415))) then begin
                              call random_upgrades;
                           end
                           else begin
                              if (random_roll <= (get_sfall_global_int(4407) + get_sfall_global_int(4408) + get_sfall_global_int(4409) + get_sfall_global_int(4410) + get_sfall_global_int(4411) + get_sfall_global_int(4412) + get_sfall_global_int(4413) + get_sfall_global_int(4414) + get_sfall_global_int(4415) + get_sfall_global_int(4416))) then begin
                                 call random_explosives_tools;
                              end
                              else begin
                                 if (random_roll <= (get_sfall_global_int(4407) + get_sfall_global_int(4408) + get_sfall_global_int(4409) + get_sfall_global_int(4410) + get_sfall_global_int(4411) + get_sfall_global_int(4412) + get_sfall_global_int(4413) + get_sfall_global_int(4414) + get_sfall_global_int(4415) + get_sfall_global_int(4416) + get_sfall_global_int(4417))) then begin
                                    call random_misc;
                                 end
                                 else begin
                                    if (random_roll <= (get_sfall_global_int(4407) + get_sfall_global_int(4406) + get_sfall_global_int(4408) + get_sfall_global_int(4409) + get_sfall_global_int(4410) + get_sfall_global_int(4411) + get_sfall_global_int(4412) + get_sfall_global_int(4413) + get_sfall_global_int(4414) + get_sfall_global_int(4415) + get_sfall_global_int(4416) + get_sfall_global_int(4419))) then begin
                                       call random_money;
                                    end
                                        else begin
                                          if (random_roll <= (get_sfall_global_int(4407) + get_sfall_global_int(4406) + get_sfall_global_int(4408) + get_sfall_global_int(4409) + get_sfall_global_int(4410) + get_sfall_global_int(4411) + get_sfall_global_int(4412) + get_sfall_global_int(4413) + get_sfall_global_int(4414) + get_sfall_global_int(4415) + get_sfall_global_int(4416) + get_sfall_global_int(4419) + get_sfall_global_int(4420))) then begin
                                             call random_heavyguns;
                                          end
                                          else begin
                                             if (random_roll <= (get_sfall_global_int(4407) + get_sfall_global_int(4408) + get_sfall_global_int(4409) + get_sfall_global_int(4410) + get_sfall_global_int(4411) + get_sfall_global_int(4412) + get_sfall_global_int(4413) + get_sfall_global_int(4414) + get_sfall_global_int(4415) + get_sfall_global_int(4416) + get_sfall_global_int(4417) + get_sfall_global_int(4419) + get_sfall_global_int(4420) + get_sfall_global_int(4418))) then begin
                                                return 0;
                                          end
                                       end
                                    end
                                 end
                              end
                           end
                        end
                     end
                  end
               end
            end
         end
      end
   end
end

 

 

В таком виде любое добавление/удаление новых переменных это ад.

Ещё заметки: DudlicateItemPercent в ини влияет на вероятность того что в одном контейнере создастся 2 или более одинаковых предметов. Не влияет на общие вероятности и значение должно быть от 0 до 100.

Если локация отсутствует в списке предопределённых, ей присваивается уровень 4.

Книги появляются начиная с 4 уровня. Если уровень меньше заменяются случайным мусором.

В мегамоде RandomUpgradesPercent влиял на вероятность появления улучшений для оружия. Т.к. в оригинале их нет, были заменены на улучшенные версии оружия с перераспределением по уровням.

Ссылка на комментарий

Там еще есть параметр, который отвечает за замену scenery на item т.е. переводящий "горшки" из декора в контейнеры.

 

Что делать? Обкатывать, и проверять состоятельность, потом править)

Ссылка на комментарий

Да он работает, и даже получается туда добавлять новые типы предметов. Только в таком виде как он есть, от этого код процедуры растёт как снежный ком. Следовательно и вариантов накосячить больше. То есть если хотя бы добавить отдельно Unarmed, Small guns, Melee, Throwing, BigGuns, Energy Weapon, Power Armor код процедуры сильно разбухнет. А если что-то понадобится удалить тоже не так всё просто.  Думаю для выбора того какой тип предмета случайным образом создавать тоже использовать массив. Продумываю детали. 

Не нравятся мне эти десятки проверок if else.

Ссылка на комментарий

Я бы вообще не раздовал рандомно топовые предметы, так мелочь в ящиках. Рандомный лут в игре Олимп сделали, поэтому такая фича многим не прижилась. Перезагрузил сохранение и вот тебе 5 штопоров и 10 циркулярных дисков в начале игры и т.д. Также и лут НПС, никакой последовательности, что и где искать - как WIKI писать по такой игре, тоже рандомно)))

Ссылка на комментарий

Так колхоз - дело добровольное. Всё в ини гибко настраивается. Я из пула исключил все квестовые, уникальные предметы. 

А если человек сам хочет себе испортить впечатления рванув в Сан-Фран и настроить вероятности на максимум - его выбор.

Ссылка на комментарий

Использование глобальных переменных ввиде get_sfall_global_int(4409) это зло.

Можно нарваться на такую же переменную из какого-нибудь другого мода кто модил таким же дебмльным методом.

 

Вот у фокса используется в книжках но там другие номера 1...

 

Set/get_sfall_global_int должны использоваться с именными переменными. Тогда шанс нарваться на пременную из другого мода минимальный.

Ссылка на комментарий

Set/get_sfall_global_int с номерами вообще были придуманы для очень больших глобальных модов.

А не для таких которые умещаются в одном скрипте.

Все эти sfall-global нужно заменить на один массив.

Скрипт вобще писался злосным нубярой каким-то.

 

Я бы вообще не раздовал рандомно топовые предметы, так мелочь в ящиках. Рандомный лут в игре Олимп сделали, поэтому такая фича многим не прижилась. Перезагрузил сохранение и вот тебе 5 штопоров и 10 циркулярных дисков в начале игры и т.д. Также и лут НПС, никакой последовательности, что и где искать - как WIKI писать по такой игре, тоже рандомно)))

Мне наоборот нрав когда есть рандом, но когда этот рандом поддержан самими модом а не сторонним скриптом, который насувает предметов сверх нормы.
Ссылка на комментарий

Вот у фокса используется в книжках но там другие номера 1...

Я знал, что Александр не использует сфаловские функции и ещё исходники для надежности проверил.

 

 

С именными названиями так и не понял - не больше восьми символов, а кавычки считаются?

Ссылка на комментарий

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

 

Скрипт вобще писался злосным нубярой каким-то.

Но зато теперь есть с чем работать. С нуля я бы даже шевелить себя не стал.

Ссылка на комментарий

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

В RPU\Tweaks\Novarain\Phobos на гитхабе тоже исходники лежат, а кто еще sFall использовал пример таких переменных?

Ссылка на комментарий

С именными названиями так и не понял - не больше восьми символов, а кавычки считаются?

Кавычки не считаются. Должно быть 8 букв/символов, не меньше и не больше.

 

В RPU\Tweaks\Novarain\Phobos на гитхабе тоже исходники лежат, а кто еще sFall использовал пример таких переменных?

Нус на nma часто любять эти глобальные переменные. Там у одного автора такой же стиль все пихать в глобальные переменные.
Ссылка на комментарий

Кавычки не считаются. Должно быть 8 букв/символов, не меньше и не больше.

Запускал стандартный RPu, ошибка постоянно лезла - сейчас на новой сборке проверю.

Ссылка на комментарий

Gvarы упразднил.,  но с процедурой выбора пока не выходит.

нельзя вызвать процедуру в виде call ArrayName[1] , а было бы то что надо.

 

P. s. : кодер из меня тот ещё. До этого руками код писать приходилось 13-14 лет назад ¯\_(ツ)_/¯

Ссылка на комментарий
  • 3 недели спустя...

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...