Створення системи інвентаризації, яка впливає на статистику (вага ваги тощо)

Привіт усім!
Це обговорення, щоб побачити, як інші можуть подумати над цією конкретною проблемою.

інвентаризації

Я хочу зробити інвентаризацію кількох предметів, які мають переносну вагу
Екіпіровані предмети впливають на статистику (Е.Г., Збільшення DAM тощо)
Я також хочу можливість викинути згадані предмети та використовувати їх за потреби (робити табір вночі тощо)

Деякі предмети легко.
Наявність спального місця активує кнопку "просто поспи тут", яка рухає годинник на 8 годин, запускає подію "час минув 24" тощо.

Я трохи борюся з тим, як мати персонажа з 5 зіллями для здоров'я, кожне з яких важить 1.

Я, мабуть, занадто амбіційний, але не можу бути єдиним, хто намагається розібратися в цьому!

(Використання цукрового очерету в шпагаті 1.4.2, але я вмію використовувати будь-який інший формат збірки)

Крім того, для тих, хто просто хоче систему інвентаризації, я розкрив це: https://strugglingwithtwine.blogspot.co.uk/2014/03/handling-inventory.html?showComment=1483911375627#c3406710617839643496 Я розумію, що потрібно трохи взуття, але я думаю, що це може спрацювати. але це не буде робити те, що я хочу тут.

Коментарі

Я створив такий для Harlowe (шпагат 2.x), тому припускаючи, що ви хочете переробити всю нашу роботу і вивчити новий формат, слідкуйте далі

Спочатку я хочу знати, що ти хочеш досягти, тому що моє, можливо, складніше, ніж те, що тобі потрібно

ти хочеш систему магазинів (що, між іншим, займе багато часу)

які типи предметів ви хочете

чи є обмеження запасів чи це нескінченна чорна діра предметів

яку статистику ви хочете, яку статистику ви маєте у грі

це система інвентаризації, дійсно корисна для вашої ситуації, тим що я маю на увазі, чи можете ви відмовитись від передачі або її просто замінюють автоматично

якщо шестерню просто замінили, все, що вам потрібно - це карта даних

з будь-якої причини, коли ви хочете скинути спорядження або витягти спорядження з награбованого, вам потрібна система інвентаризації

базується на здобичі або це конкретний предмет

робить стек передач, якщо так, то скільки складає кожен предмет

Я не можу втриматися, якщо ти занадто проклятий

[РЕДАКТУВАТИ] Я не можу використовувати шпагат 2, тому що я нічого на ньому не бачу.
Я дальтонік, і що-небудь на синьому фоні неможливо побачити
Фарширували це.

Немає магазину. Це буде лише на бабло
Предмети поділяються на чотири категорії: Зброя. Броня. Їжа. Вода. (і монети, але їх буде досить легко відстежувати за допомогою змінної +1)
Буде обмеження. Щоб гра не ставала занадто простою. Кожен елемент буде збалансований відповідно до біому, в якому він буде знайдений.
Поточна статистика: Сила, спритність, стелс, кмітливість, винахідливість, витривалість, удача, носіння, шкода, S-шкода, захист, S-захист, критичний, руки.
Система інвентаризації була б дуже корисною для предметів, що перевозяться, але зброю та обладунки можна замінити, оскільки немає потреби витрачати на це свій кишеньковий простір.
Лут базується на удачі
Механізм буде складений так високо, як дозволяє вантажопідйомність (для обговорення). Звичайно, ви не хочете носити з собою нічого, крім цілющих зілля та вашого спорядження.

Я не хотів викидати всі деталі моєї гри, коли не знаю, яка інформація є релевантною. Я ніде не згадував магазин, і якщо б про це не запитали, я б навіть не думав про це.

загальні поради (оскільки в шпагаті 1.x немає харлоу, я б хотів насправді допомогти)

1. зменшити кількість статистичних даних - це занадто багато. Я не уявляю, якими можуть бути руки, а також я не знаю різниці між силою/шкодою, розумом/винахідливістю, витривалістю/захистом, тому що як гравець мені не сподобалася б така гра занадто складний погляд на популярні ігри пісочниці (я припускаю, що ви робите гру пісочниці), наприклад Не голодуй або Minecraft, вони мають приблизно 3-4 статистичні дані, навіть у більшості mmorpgs/rpgs не так багато

2.можливо, ви можете оновити/зачарувати своє обладнання, щоб отримати конкретну статистику, яку ви шукаєте

удачі це прикро, що я не міг допомогти

Деякі з них можуть бути найпростішими - це ваш базовий предмет - це стек, а не один предмет. Отже, цілюще зілля - це стопка з 1 цілющим зіллям. Ви б зберігали атрибути окремих елементів у основі стека і використовували віджет (припускаючи, що ви використовуєте Sugarcane 2 з 1.4.2) для перерахунку загальних атрибутів стека:

цілюще_зілля: < tag: 'Healing Potion',
одиночний: [1, 0, 0, 0, 0, 0]
кількість: 3,
усього: [3, 0, 0, 0, 0, 0]>

Загальний масив - це просто один масив, помножений на рахунок. Щоб скласти загальний запас, вам просто потрібно скласти всі окремі масиви.

Тег використовується для пошуку об'єктів при переміщенні деяких з них на нове місце. Якщо ви можете знайти стек об’єкта в новому місці, просто відрегулюйте кількість і повторно складіть кожен стек. Якщо стек закінчується з 0 рахунком, знищіть його (але дивіться клон проти покажчика - встановіть $ a на $ b просто робить $ точку на $ b, вам потрібно встановити $ a для клонування ($ b), щоб отримати новий об'єкт що не залежить від об’єкта $ b.) Якщо ви не можете знайти існуючий стек у новому пункті призначення, вам потрібно буде створити новий (тобто, коли ви вперше берете цілюще зілля).

Можливо, ви зможете зберегти трохи пам’яті зі значенням „type”, яке вказує на запис у головному одиночному масиві, але це ускладнює ситуацію.

Я все ще новачок у всьому цьому, використовуючи Harlowe та SugarCube (зосереджуючись більше на SC, тому що це здається потужнішим), але я хотів би додати свій внесок. Я скажу це, не вдаючись до функцій javascript та/або не використовуючи систему віджетів SugarCube, у вас буде приємний час, щоб підтримувати речі акуратними, чистими та придатними для використання. В даний час я розглядаю кращі способи використання карт даних або будь-якої структури ключ-значення, щоб я міг створювати складні об'єкти (наприклад, елементи) на льоту. Важкою частиною є створення функцій, які чудово граються з ними та сценарієм Twine. Я витратив 95% свого часу, просто досліджуючи, як змусити користувацькі функції Javascript працювати, і JS була моєю першою мовою.

Коли я вперше погрався з Гарлоу, я використав тонну змінних прапорів (в основному просто логічні значення), щоб виступати в якості інвентаризації та системи товарів, і це було пекло. Я обов’язково пропоную розглянути ваш код якомога більше.

Зрештою, я не вважаю розумним робити щось таке складне, як Інвентар у Харлоу. Я особливо не дбаю про формат SugarCube, і мені подобається виділення кольорів на Harlowe, але він просто не має тієї самої основної сили, яку робить SugarCube.

Сподіваюся, це трохи допоможе.

Я в тому самому бою. Моя система інвентаризації покладається на вагу предмета, кількість предметів та «слоти для тіла», як-от руки, груди тощо. Я змусив це спрацювати, включаючи ефект падіння/екіпірування та статистики, але інвентар гальмує після навантаження від збереження.

Було б чудово побачити "професійне" рішення чи основи щодо цього.

Здається, у вас є робота, вирішена для вас. Я також у процесі впровадження інвентаризації. Цей підтримує кілька елементів, які можна використовувати одночасно. На предмети може впливати персонаж (коли ви вражаєте ворога, кров залишатиметься на мечі, наприклад) і навпаки, коли предмет використовується (наприклад: чаклування з чарівної палички, яка має обмежене використання ). Предмети можуть впливати на інші предмети (наприклад: чарівну паличку можна зарядити за допомогою чарівного каменю). Якщо у вас дві палички, то ви почнете використовувати одну з паличок, перш ніж переходити на іншу, яка все ще заряджена. Точно так само, якщо на одному з ваших мечів є кров дракона, він буде розглядатися як зачарований меч і не буде "нагромаджуватися" з іншими вашими мечами того ж виду (інакше кров вплине на всі інші мечі ).

Я розробляю цю систему інвентаризації вже кілька тижнів, і лише недавно розпочав її тестування. Мені потрібно сказати, що фаза проектування, і прототипування було дещо розумним. Зараз я думаю про автоматизацію деяких тестів, щоб утримувати всю механіку та систему інвентаризації в контролі (оскільки це внутрішні елементи досить складні та напрочуд важкі для тестування).

Мені б хотілося, щоб я придумав більш просте рішення

Рекомендую спробувати спершу розробити систему інвентаризації на ручці та папері. Подумайте про ВСЕ, що ваші предмети можуть зробити і на що можуть вплинути. Подумайте про можливість інших NPC маніпулювати вашим інвентарем і навпаки. Так багато речей, які потрібно врахувати перед тим, як почати впроваджувати систему інвентаризації для гри. Я нещодавно навчився цього важким шляхом

Використання шпагату 2.1.3 та Sugarcube 2.18.0

Я щойно почав займатися як шпагатом, так і кодуванням загалом, але якщо я чогось не пропустив, це не здається надто складним для виконання.

Я просто створив систему інвентаризації та невелику систему магазинів, щоб спробувати її. Спочатку ми налаштували свої предмети та ще кілька речей у StoryInit:


Потім ми створюємо віджет, який полегшує управління поведінкою в іграх, коли гравець несе занадто багато:

Потім ми створили прохід "магазин", щоб перевірити нашу систему інвентаризації:


Очевидно, що це все ще дуже необроблено, і ми могли б додати до нього набагато більше можливостей, але додавання речей з цього моменту не займе багато зусиль, і я думаю, що це показує, як система інвентаризації, так і магазин Система може бути налаштована дуже швидко і без зусиль.

Це хороший початок, але код може швидко стати складним і дуже замовним.

напр.
1. Ви дозволяєте гравцеві купувати предмети, які вони можуть не мати при собі.

2. Що станеться, якщо існує більше одного магазину або магазинів різного типу.

3. Що станеться, якщо предмет можна використовувати кілька разів.
наприклад, зілля, що містить більше одного дозування, яке відрізняється від кількох зілля.

4. Що станеться, якщо є контейнери, які можуть містити інші предмети.
напр. розміщення невеликого мішка/мішка, що містить предмети, всередині рюкзака.

5. Що станеться, якщо предмети можуть деградувати і з часом прийти в непридатність.

6. Що відбувається, якщо предмети можна поєднувати разом, щоб зробити інші предмети, і як ви відстежуєте, які предмети можна поєднувати разом.

В основному, "стандартної" системи інвентаризації насправді не існує, оскільки потенційний список функцій вимагав змін від гри до гри.

ПРИМІТКА: Оскільки "значення" кожного з ваших елементів у вашій реалізації не змінюються, було б краще зберігати їх предметів в межах налаштування об'єкт замість змінних історії, хоча самі масиви, пов'язані зі змістом інвентаризації, повинні залишатися змінними історії.

Причиною зберігання елементів у налаштуванні є те, що стан усіх відомих змінних історії "клонується" при кожному проходженні проходу, вихідні стани асоціюються з тим, що прохід залишається та зберігається в системі історії, а "копія" доступним для наступного уривку. Цей процес може швидко споживати пам’ять Якщо у вашій історії є багато незмінних значень змінних історії, як і можливі елементи у вашому прикладі.

ПРИМІТКА: Оскільки "значення" кожного з ваших елементів у вашій реалізації не змінюються, було б краще зберігати їх предметів в межах налаштування об'єкт замість змінних історії, хоча самі масиви, пов'язані зі змістом інвентаризації, повинні залишатися змінними історії.

Причиною зберігання елементів у налаштуванні є те, що стан усіх відомих змінних історії "клонується" при кожному проходженні проходу, вихідні стани асоціюються з тим, що прохід залишається та зберігається в системі історії, а "копія" доступним для наступного уривку. Цей процес може швидко споживати пам’ять Якщо у вашій історії є багато незмінних значень змінних історії, як і можливі елементи у вашому прикладі.

О, дякую - я десь читав, що змінні, які не змінюються, слід зберігати деінде, але завжди було незрозуміло, де і чому. Це прояснює ситуацію

Як я вже сказав, більшість доповнень можна зробити швидко і просто за допомогою такого роду налаштувань. Що ускладниться - це проблеми No 4 та 5, про які ви згадали. Спочатку я хотів змусити систему Інвентаризації працювати, клонуючи об'єкти моделі, потім додаючи клон до окремих масивів інвентаризації - я ніколи не починав експериментувати з clone (), оскільки я не впевнений, як виводити клони і боюся постійно зростаючого стос клонів з часом може призвести до проблеми з пам'яттю.
Чи є спосіб створювати і поп-клонів?

Більшість інших згаданих вами проблем можна виправити досить швидко. Я просто швидко набираю можливі рішення, не намагаючись їх запустити - вибачте, якщо в коді є помилки або помилки:

1. Заборонити гравцеві купувати вагу, що переноситься

В даний час гравець може придбати скільки завгодно предметів, але якщо він не в змозі перенести вагу, він не зможе перейти до іншого місця, завдяки нашому віджету. Якщо ми хочемо перешкодити їм купувати їх спочатку, все, що нам потрібно зробити, це трохи змінити магазин:

Ми вже можемо додати до гри якомога більше магазинів з різними запасами, використовуючи поточну установку. Тоді ми можемо легко додати додаткову інформацію в магазини, щоб уточнити, які товари там можна придбати та продати.

3. Елементи багаторазового використання

Якщо ми хочемо, щоб одне “Цілюще зілля” тривало чотири рази, ми можемо просто зменшити його при використанні на 0,25.

Тоді ми дозволяємо їм продавати лише невикористані зілля:


4. Предмети зберігання:

Окремий елемент зберігання можна легко створити, додавши масив до об’єкта:
Оскільки у нас лише один реальний об'єкт рюкзака, ми зіткнемося з проблемами, якщо наш персонаж має два рюкзаки з декількома різними запасами. Ми могли б знайти обхідний шлях, створивши масив для зберігання всієї цієї інформації: [[1, 0, 2], [3, 4, 1]. ] - але я визнаю, що це буде дратувати налаштування.


5. Принижуюча зброю

Як і контейнери для зберігання нижче, це не було б проблемою, якби у нас був лише один екземпляр відповідного об’єкта.

Але як тільки у нас є кілька екземплярів одного і того ж об’єкта, які всі повинні знаходитися в різних станах зношеності, нам доведеться створити інший масив, як і вище.


6. Щось на зразок поєднання предметів для формування нових предметів жодним чином не змінило б запропоновану систему інвентаризації. Ми можемо впоратися з цим за допомогою чогось на зразок віджета для створення, який видаляє використані предмети, а потім додає один із створених предметів у наш інвентар. Це займе багато роботи, залежно від того, скільки речей ми хотіли б бути ремісничими, але це лише природа системи крафта, і не складе труднощів побудувати її.