|
|
|
Игрушка. Встраивание предмета друг в друга
|
|||
|---|---|---|---|
|
#18+
Доброго. Есть онлайн-игрушка. Ходят-бродят игроки по миру, собирают предметы (оружие, одежда и прочее). Отдельно из этого инвентаря выделяются "свитки магии", которые можно использовать (полечить, в транс уйти, будущее узнать и т.п.). Инвентарь хранится в своей таблице (inventory), возможные действия в своей(magic). Каждый предмет имеет свой ресур использования (inventory.duration), который по ходу игры уменьшается до нуля. (оружие ломается, одежда протирается, свитки распадаются) Свитки имеют непустую ссылку на действие (inventory.magic_id) - что и указывает, что делает данный свиток. Пока всё логично и красиво. Но тут появляется требование "нужно магию встраивать в другие предметы" ... по типу "камень удачи в ручке меча". Для этого заполняем поле inventory.magic_id у меча - его теперь можно использовать и как свиток. И теперь мечом можно и драться и в транс впадать(действие свитка). Встроеный свиток имеет свой ресур использования, меч - свой и ряд других параметров точно также. А поле то inventory.duration (и другие) у нас одно! Сейчас для этого в табл. инвентаря имеется ряд полей "для встроеных свитков". И каждый раз приходится смотреть, если это свиток, то делай так(изменяй inventory.duration) , если встроеный свиток, то делай иначе(inventory.include_duration) Это просто капут. Хочу это исправить, но никак не могу придумать. Как организовать БД ... даже вопрос не могу толком написать ... может натокнете на что-нить (хоть вопросами, а не ответами). Одно скажу, связывать свиток и меч между собой inventory.includeinventory_id не получается, ибо свиток должен исчезнуть как единица из предметов игрока. Спасибо тем, кто дочитал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 01:17 |
|
||
|
Игрушка. Встраивание предмета друг в друга
|
|||
|---|---|---|---|
|
#18+
Gordeev_Andry, В Вашей игрушке можно грабить корованы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 09:21 |
|
||
|
Игрушка. Встраивание предмета друг в друга
|
|||
|---|---|---|---|
|
#18+
Gordeev_Andry, На сколько я понял проблема в том, что время жизни сложносоставного объекта разное. Разные части объекта живут разное кол-во времени. Мысль следующая: Хранить в таблице inventory ссылку на объект. А уже в сам объект может состоять из нескольких объектов (каждый со своим временем жизни). Т.е. своего рода дерево. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 14:49 |
|
||
|
Игрушка. Встраивание предмета друг в друга
|
|||
|---|---|---|---|
|
#18+
Доброго. Попробуем вопросами :) Если поле одно, а у исходных вещей (предмета и свитка) значений два, то какое из значений пишется сейчас в это поле? И чего вообще требуется по ТЗ? Свиток можно вынуть из предмета назад и использовать его оставшийся ресурс? Можно ли в один предмет поместить несколько свитков? Если ресурс предмета закончился, свиток "сгорает"? Если ресурс свитка закончился, что происходит с предметом, в котором был свиток? Кстати, как такой вариант: используемый свиток из инвентаря не исчезает, а помечается каким-то признаком, что его нельзя использовать отдельно, как свиток, но при этом все атрибуты сохранятся. Надо извлечь его из предмета — да пожалуйста... Поэтому я за связывание :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 09:29 |
|
||
|
Игрушка. Встраивание предмета друг в друга
|
|||
|---|---|---|---|
|
#18+
Мы имеем дело с композицией или агрегацией предметов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 20:34 |
|
||
|
Игрушка. Встраивание предмета друг в друга
|
|||
|---|---|---|---|
|
#18+
Я бы точно делал ссылку на объект. А вдруг потом понадобится возможность встраивать несколько свитков? Или можно будет встраивать еще что-нибудь (типа камни, которые увеличивают атаку или защиту)? Тогда я бы использовал отдельную табличку связей (один ко многим). Это обеспечивает максимальную гибкость и в то же время легко реализовать "исчезновение" предмета из инвентаря при его встраивании - просто добавляем в запрос выборки предметов инвентаря дополнительное условие, что предмет не находится в таблице связок. И все! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2011, 23:54 |
|
||
|
Игрушка. Встраивание предмета друг в друга
|
|||
|---|---|---|---|
|
#18+
Gordeev_AndryОдно скажу, связывать свиток и меч между собой inventory.includeinventory_id не получается, ибо свиток должен исчезнуть как единица из предметов игрока. Тем не менее, именно так и следует сделать. Просто показывать в "предметах игрока" только корневые предметы (не включённые в другие). Имхо стоит сразу же заложить возможность строить дерево из предметов. Почему именно дерево: потому что во-первых, предметы могут обладать правилами совместимости/несовместимости, во-вторых, возможны артефакты, модифицирующие только своего непосредственного родителя, а не составной предмет в целом. Характеристики составного предмета можно вычислять заранее (во время сборки/разборки) или динамически. Последнее удобнее для учёта изменений в бою, например, если к мечу применят заклинание "сжечь все включённые свитки" или если у свитка во время боя истечёт срок действия. В любом случае, должна быть возможность по id меча получить выборку вроде возможное действиетип активного предметаID активного предметаудармеч1медитативный транссвиток2 Ну и соответственно по действию активизировать нужный объект и модифицировать его ресурс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2011, 14:00 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37111318&tid=1542322]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
419ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 249ms |
| total: | 785ms |

| 0 / 0 |
