|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
thing(thing_id, pers_id, slot_id, ...) таблица шмоток персонажа. Кому принадлежит, в какой слот одета NULL - шмотка не одета slot_ref(slot_id, title) справочник шмоток pers(pers_id, ...) персонажи При одевании шмотки в слот персонажа, заполняется поле slot_id шмотки Код: sql 1. 2. 3.
Есть мысль (но она мне не нравится) вынести одевание шмотк в отдельную таблицу. dressed_thing(thing_id, slot_id, pers_id) одетые шмотки это мизерная часть от общей массы. Может поле slot_id и лишнее в таблице шмоток. Выборка одетых шмоток - это очень популярный запрос. Напрягает ещё один join в запросах. (поэтому и pers_id сюда добавил, который дублирует ссылку thin.pers_id Подскажите, пжлст, как сохранить целостность данных? Ещё идея, но она мне кажется изратной :) Сделать доп поле вычисляемое f(slot_id, pers_id) и на него повесить ограничение уникальности. pers_id * 100 + slot_id для снятых шмоток будет NULL, для одетых - уникальное для каждого перс/слот значение ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2018, 23:58 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
Бредовость бредовой идея с вычисляемым полем подтвердилась - вычисляемое поле не может участвовать в ограничениях. Что вполне логично. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 00:45 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryG, Все просто. Разнеси персонажей, шмотки и слоты в 3 разные таблицы. И добавь еще одну таблицу связей с тремя полями. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 02:02 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
YuRockРазнеси персонажей, шмотки и слоты в 3 разные таблицы. Обычно слоты это атрибуты персонажа, если только игровая механика не разрешает их переменное количество или две шмотки в одном слоте. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 11:35 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
DS> Обычно слоты это атрибуты персонажа, если только игровая DS> механика не разрешает их переменное количество Зависит от игры и механики, конечно, но если слотов более 4 (а это почти всегда так) - я бы их атрибутами (читай - полями, в твоих словах) не делал. В той же линейке игр HoMM количество слотов было фиксировано (и, разумеется, увеличивалось с каждой версией), а вот инвентарь (а-ля сумка с вещами) - был очень длинный и его в любом случае пришлось бы хранить в отдельной таблице, что нежелательно, ИМХО. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 12:03 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамЗависит от игры и механики, конечно, но если слотов более 4 (а это почти всегда так) - я бы их атрибутами (читай - полями, в твоих словах) не делал. Почему нет? Их всё равно считанное количество. Переодеть вещь, даже занимающую несколько слотов, в этом случае - один апдейт. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 12:17 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryGБредовость бредовой идея с вычисляемым полем подтвердилась - вычисляемое поле не может участвовать в ограничениях. Что вполне логично.Но ничто не мешает создать уникальный индекс PS в суть не вникал :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 13:03 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
DS> Переодеть вещь, даже занимающую несколько DS> слотов, в этом случае - один апдейт. Если она будет храниться в отдельной таблице, то переодеть однослотовую вещь - тоже 1 апдейт. Многослотовую (такое редкость) - зависит от того, как описывается сама многослотовость вещи, тоже несколько вариантов возможно - "снять" её одним апдейтом можно всегда, а одеть новую - зависит от. В любом случае количество апдейтов per se тут не главное, ИМХО, можно несколько апдейтов и через SP/EB вызывать, не беда. Гнаться надо за select-ами (т.е. отображением и "использованием", если второе не "агрегировано" в атрибуты самого персонажа). Касательно самого вопроса - как сделать уникальность - очевидно нужен "индекс" на PersId, ThingId, SlotId/SlotNum - в зависимости от того, как хранятся слоты. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 14:14 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамВ любом случае количество апдейтов per se тут не главное, ИМХО, можно несколько апдейтов и через SP/EB вызывать, не беда. Гнаться надо за select-ами (т.е. отображением и "использованием", если второе не "агрегировано" в атрибуты самого персонажа). Насколько я в курсе игровой архитектуры, select нагрузка там никакая, поскольку весь игровой мир полностью хранится в памяти сервера, а из базы данные персонажа подгружаются только при входе в игру или редких событиях типа открытия персонального хранилища. Остальное это жёсткая real-time запись протокола изменений мира для обеспечения durability. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 14:23 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
Ну уж всяко "открытия персонального хранилища" не могут случаться реже, чем переодевания шмоток (не "на экране", а которые нужно сохранить в БД). И уж, конечно, это случается реже, чем основные игровые события - битвы и пр. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 14:57 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
Это браузерка. Потому тут тут с БД выгребается все при каждом новом чихе. Сейчас в игрушке слоты сделаны отдельными полями в табл. персов. И это просто ад кромешный. Чтобы узнать, что шмотка одета/куда одета/не одета, нужно проверить все поля-слоты в таблице юзера и т.д. И слоты геймдиз мечтет добавлять. Некоторые даже временно для ивентов. Уникальные индексы получется нужны на поля persId-slotId чтобы не одеть две шмотки в один слот и второй на thingId, чтобы не одеть одну шмотку в два слота. Поле слота в таблице шмоток (thing.slot_id) удобно для выборок. Отдельная таблица (thing_id, pers_id, slot_id) вместо этого поля добавляет гемора в селекты. А если совместить поле в таблице инвентаря, а работу с отдельной таблицей одетых шмоток сделать на тригерах? При прописывании thing.slot_id (одевание шмотки) добавлять запись в табличку, при обNULLении thing.slot_id - стирать запись. Практикуется такой подход для контроля ссылочной целостности? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 14:59 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryG, мне не понятно с какого перепуга у тебя slodId может быть NULL. Есть справочник слотов со своими характеристиками и ограничениями по типам шмоток, где slodId - первичный ключ. Есть таблица со шмотками с ключом thing_id. И есть таблица которая связана с персом, где указывается что на нём одето. Так вот в этой таблице должно быть уникальное ограничение (PERS_ID,SLOT_ID) где никаких NULL быть не может. Установка одета шмотка или нет производится апдейтом поля thing_id (NULL - пусто, не NULL одета конктертная шмотка) в таблице одетых шмоток. Две шмотки ты туда ну никак не воткнёшь. А ещё есть таблица со всеми шмотками перса (PERS_ID,thing_id, busy_flag), где busy_flag - флаг надета ли шмотка. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 15:29 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryGЭто браузерка. Потому тут тут с БД выгребается все при каждом новом чихе. Не вижу связи. Браузерка рулится точно таким же сервером, которому ничто не мешает хранить игровой мир (или по крайней мере состояние персонажа) в памяти. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 15:36 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryG> И слоты геймдиз мечтет добавлять. Это вполне естесственно. AndryG> Некоторые даже временно для ивентов. А это довольно глупо. AndryG> Сейчас в игрушке слоты сделаны отдельными полями в табл. персов. AndryG> Уникальные индексы получется нужны на поля persId-slotId чтобы не AndryG> одеть две шмотки в один слот Угу. AndryG> и второй на thingId, чтобы не одеть одну шмотку в два слота. Угу. А почему собсно это запрещено (если слоты совместимы с вещью)? > Поле слота в таблице шмоток (thing.slot_id) удобно для выборок. Видишь ли, в твоём изложении это thing.slot_id - это просто номер слота, т.е. slot_num. А местный народ привык, что хрень_id - это FK на таблицу, в которой эта хрень хранится. > А если совместить поле в таблице инвентаря, а работу с > отдельной таблицей одетых шмоток сделать на тригерах? Излагай яснее. Лично я не понял ни первой части вопроса, ни второй. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 15:56 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
Спасибо всем за участие! Справочник слотов перса Код: sql 1. 2. 3. 4. 5.
Шмотки и справочник шмоток Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Изначально я хотел обойтись лишь указаной схемой. Поле thing.slot_id содержит либо указатель на слот, в который одета шмотка, либо NULL (шмотка снята). Такой вариант довольно удобен для выборки шмоток, что делается очень часто) Для обеспечения ссылочной целостности нужен уникальный ключ (thing.pers_id, thing.slot_id) с игнорированием NULL в slot_id. Что сделать невозможно. Второй вариант, как указали выше, - это отдельная таблица одетых шмоток (pers_id, slot_id, thing_id). Но с этой таблицей неудобными становятся запросы. Потому хочется сохранить поле thing.slot_id, а его модификацию делать через триггеры табл одетых шмоток. Симонов Денис, почти этот вариант вы и описали. авторА ещё есть таблица со всеми шмотками перса (PERS_ID,thing_id, busy_flag), где busy_flag - флаг надета ли шмотка. Мое поле thing.slot_id и есть этот busy_flag. Только указывает дополнительно и слот. Получилась такая штука. Код: sql 1. 2. 3. 4. 5. 6. 7.
Изначально таблица одетых шмоток пустая. При одевании шмотки в слот юзера добавляется новая запись либо апдейтится существующая. При снятии шмотки - thing_id устанавливается в null либо удаляется запись. Запрос для добавления/апдейта записей Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Одевание/раздевание работает. Теперь триггерами на thing_dressed изменять поле thing.slot_id Ещё добавилось дублирование pers_id. Нужно затычку для их рассогласования предусмотреть - очищать thing_dressed.thing_id при изменении thing.pers_id Дабы на персе не оказалась одетой шмотка после её передачи другому персу. авторНе вижу связи. Браузерка рулится точно таким же сервером, которому ничто не мешает хранить игровой мир (или по крайней мере состояние персонажа) в памяти. Хранить мир в памяти это круто. Только я совсем без понятия, как это делается. Потому наш мир хранится в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2018, 23:39 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryGПотому наш мир хранится в БД. а что, браузер прямо в БД лезет? промежуточного слоя разве нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 00:08 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryG Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Смешались в кучу кони, люди... (с) Сорри, но у Вас каша в голове и в БД. Рано Вам ещё "хранимые агрегаты" создавать и денормализацию БД проводить, сначала нормализацию БД нужно сделать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 10:45 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
Автор, ты игровой сервер не на PHP пишешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 11:45 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
Дегтярев Евгений, на нем самом. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 14:12 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryG, и как с коннектами к БД выкручиваешься? Это ведь самый дорогой ресурс. В пыхе нет пула коннектов, есть постоянные соединения, которые мягко говоря не очень и не во всех случаях работают. Ты точно не используешь для кеширования прочитанных данных что нибудь из No-SQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 14:21 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, если не лень, можете подробней описать, что не так лошадьми? И триггер для синхронизации thing_dressed и thing.slot_id Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Пока работает. Спасибо всем за помощь ) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 14:22 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
Коннект действительно довольно прожорлив, но не столь ужасен. Много чего кешируется в memcached. Но от коннекта к БД все равно никуда не деться. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 14:31 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
авторКоннект действительно довольно прожорлив, но не столь ужасен. Много чего кешируется в memcached. Но от коннекта к БД все равно никуда не деться. Забыл дополнить, что это слова про текущий проект на mysql. На firebird я еще не пробовал "по боевому". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 14:34 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryG> если не лень, можете подробней описать, что не так лошадьми? Я же выше словами описывал. Шмотки: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
"Надетые" шмотки: Код: sql 1. 2. 3. 4. 5. 6.
"Справочник слотов перса" - отсутствует. Если, конечно, разные персонажи (по расе, уникальности, уровню и пр.) не могут иметь разные типы/количества слотов. Если могут - может понадобиться доп.таблица (а может и нет - зависит от). Как хранить/обрабатывать многослотовые вещи могу дополнительно описать, если нужно, там не рокет-саенс. Уникальность вещь-перс я бы не делал, это глупо. Уникальность вещь-слот для перса делается очевидно (индексом), но даже это не нужно, ибо уникальность должна быть перс-слот, т.е. PersThings.PERS_ID + PersThings.SLOT. При надевании вещи триггером меняются "текущие" характеристики персонажа, чтобы каждый раз не пересчитывать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 16:57 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryGДегтярев Евгений, на нем самом. не тот ты инструмент выбрал и коннект тут не самое болезненное проблемы, которые ты тут описываешь, быстрее и дешевле решаются именно внутри процесса сервера твоей игры, а какая субд и как там разложены данные дело десятое зы я бы смотрел в сторону go, nodejs, java, c# и. т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 18:48 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryGХранить мир в памяти это круто. Только я совсем без понятия, как это делается. Гугль мне с лёгкостью выдал http://php.net/manual/en/book.shmop.php Я настолько крут или... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 19:23 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
все равно не то ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 20:03 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
Дегтярев Евгений> не тот ты инструмент выбрал и коннект тут не самое болезненное Им сменить инструментарий, тем более на незнакомый - это увеличение сроков в 3-4 раза. Пусть лучше лабают. А в версии 2.0 делают по-человечески, если "выстрелит". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 21:44 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, это и есть версия 2,0. Первая стреляет уже несколько лет. автор"Справочник слотов перса" - отсутствует. Если, конечно, разные персонажи (по расе, уникальности, уровню и пр.) не могут иметь разные типы/количества слотов. Если могут - может понадобиться доп.таблица (а может и нет - зависит от). Набор слотов у всех персов одинаков. Может я неверно понял ваши слова про "достаточно номера слота без справочника". Такой вариант возможен лишь если у перса одна голова, одна рука и одна нога - каждого типа слота по одной штуке. У нашего же перса голова одна, но рук две, пальцев несколько и десяток слотов магии - несколько слотов одного типа. Потому выделен справочник слотов с перечислением какие слоты какого типа есть у перса. Код: sql 1. 2. 3. 4. 5.
В справочнике шмоток указывается допустимый тип слота, а в самой шмотке - номер занятого ею слота. авторКак хранить/обрабатывать многослотовые вещи могу дополнительно описать, если нужно, там не рокет-саенс. Уникальность вещь-перс я бы не делал, это глупо. Уникальность вещь-слот для перса делается очевидно (индексом), но даже это не нужно, ибо уникальность должна быть перс-слот, т.е. PersThings.PERS_ID + PersThings.SLOT. Поле thing.slot_id действительно трансформировалось в описываемую вами таблицу с именно таким PK. Само же поле thing.slot_id (синхронизируется триггером) оставил лишь для будущих селектов - сейчас мне видится, что оно будет полезным при выборках, избавит от доп. джойнов с thing_dressed. Может и уберу его. авторПри надевании вещи триггером меняются "текущие" характеристики персонажа, чтобы каждый раз не пересчитывать. До этой части ещё не дошел вплотную. Там мыслей куча, на отдельную ветку хватит) авторне тот ты инструмент выбрал и коннект тут не самое болезненное проблемы, которые ты тут описываешь, быстрее и дешевле решаются именно внутри процесса сервера твоей игры, а какая субд и как там разложены данные дело десятое Лишь любопытства ради , как примерно это выглядит без привязки к языку? Как мне видится. Должен быть некий долгоиграющий процесс, в памяти которого развернут мир игры. Массивы различных оперативных данных вытянуты с БД, развернуты в "языковые" объекты/очереди/массивы, связанны между собой ссылками и т.п. Каждый сеанс юзера - это отдельный поток в этом процессе. Куча потоков одновременно изменяют/рождают/убивают данных в этом огромном месиве данных. Так это происходит? Код напичкан критическими секциями, семафорами и т.д. Утечки памяти становятся не пустым звуком, полный крах при малейшей ошибке. Теневое сохранение в БД. Ужас, летящий на крыльях ночи - такие впечатления рождаются в мозгу, заточенном на "http - протокол без созранения состояния" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 00:30 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryGКаждый сеанс юзера - это отдельный поток в этом процессе. Куча потоков одновременно изменяют/рождают/убивают данных в этом огромном месиве данных. Так это происходит? Нет. Один поток изменяет состояние мира, тик за тиком. На каждом тике подключенным пользователям рассылаются уведомления о событиях, произошедших пределах видимости. Так работают real-time игры. У пошаговых всё то же самое, только тики гораздо реже. Push-технологии рулят. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 12:30 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryGМожет я неверно понял ваши слова про "достаточно номера слота без справочника". Такой вариант возможен лишь если у перса одна голова, одна рука и одна нога - каждого типа слота по одной штуке. Видимо, неверно поняли, ибо я про уникальность слотов ничего не говорил. Хоть две головы и три руки, как захардкодите. AndryGпальцев несколько и десяток слотов магии - несколько слотов одного типа.Ну, если там 10 пальцев (или 20, вместе с ногами?) и 10 слотов для магии (я с таким ещё не сталкивался - видимо, у вашего геймдиза хороший план) - то, возможно, стоит и отдельную табличку завести. Но опять же, отдельную табличку, а не справочник и FK на него. AndryGПотому выделен справочник слотов с перечислением какие слоты какого типа есть у перса. В чём смысл этого справочника, если "набор слотов у всех персов одинаков"? У всех персов один и тот же набор слотов одних и тех же типов. > В справочнике шмоток указывается допустимый тип слота, > а в самой шмотке - номер занятого ею слота. Я ж говорю - каша в голове и в терминологии. > Само же поле thing.slot_id (синхронизируется триггером) оставил лишь > для будущих селектов - сейчас мне видится, что оно будет полезным при > выборках, избавит от доп. джойнов с thing_dressed. Может и уберу его. Лично я нифига не понял, кто на ком стоял. > > При надевании вещи триггером меняются "текущие" характеристики > > персонажа, чтобы каждый раз не пересчитывать. > До этой части ещё не дошел вплотную. Там мыслей куча, на отдельную ветку хватит) Очень зря. Там всё довольно просто и необъёмно. Есть атрибуты "родные" (которые от рождения и растут с уровнем перса) и есть "текущие", которые равняются "родные" + добавки шмоток + добавки различных статусов/эффектов (если таковые есть) и минус негатив от шмоток и статусов/эффектов (если негативные влияния предусмотрены игрой). Как отображать их - одним числом или двумя числами типа "30 + 10" или "30 - 2" - дело вкуса. Зато триггер упростит и ускорит все селекты. > это и есть версия 2,0. Первая стреляет уже несколько лет. Тихий ужас, что тут скажешь... :) И как, популярна, сколько тысяч активных юзеров? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 14:51 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
ГР> Видимо, неверно поняли, ибо я про уникальность слотов ничего не говорил. ГР> Хоть две головы и три руки, как захардкодите. Конечно же "... про уникальность типов слотов ..." Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 14:52 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, мы действительно на разных языках говорим ) Справочник слотов нужен чтобы знать, какие именно слоты есть у персов. Где мне хранить инфу, что слоты 7,8,9 - это пальцы? И одеть в эти слоты можно только кольца и никак не штаны. Слот 11 - это обувь и шлем на ноги не натянуть. В справочнике шмоток я должен как-то указать колпаку, что его можно одеть лишь на голову. Под справочником я понимаю "статическую" таблицу с практически неизменяемыми данными. FK на поле thing_dressed.slot_id сделан чтобы там не указали несуществующий слот. Помогите, пжлст, найти взаимопонимание. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 15:36 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryG> Где мне хранить инфу, что слоты 7,8,9 - это пальцы? В коде? Повторяю, если их реально много (10 - не много), и для них нужно хранить/делать ещё что-то дополнительно (например, менять картинки/шкурки) - можно и таблицу завести, в которой будут соотв. поля, но она не будет "справочником" - на неё не будет FK, просто статичная таблица, состав которой меняется только разработчиком. Хотя это вопрос терминологии - статичный справочник, содержимое которого не меняется, тоже можно назвать справочником (наверное). Календарь, "справочник месяцев". > И одеть в эти слоты можно только кольца и никак не штаны. Мы вроде как выше договорились (и в моём варианте, и во всех ваших), что шмотка "знает" куда её можно одеть - у шмотки есть поле slot, в котором указывается, надевается она на голову, руку или палец, и кот. исп. в соотв. фильтрах. Нюансы могут быть лишь для многослотовых шмоток. > Слот 11 - это обувь и шлем на ноги не натянуть. Тем паче, если вы уже выбрали один из способов для многослотовых вещей. > В справочнике шмоток я должен как-то указать колпаку, > что его можно одеть лишь на голову. Тем паче. Укажите ему 1 (или какой там у вас слот для головы). > Под справочником я понимаю "статическую" таблицу с практически > неизменяемыми данными. FK на поле thing_dressed.slot_id сделан > чтобы там не указали несуществующий слот. См. выше, я как раз про это в начале отвечал - а) это не совсем справочник; б) вероятно, это не лучший способ "защиты", если он вообще нужен (он реально нужен? от самих себя?). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 15:59 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
>Хотя это вопрос терминологии - статичный справочник, >содержимое которого не меняется, тоже можно назвать >справочником (наверное). Календарь, "справочник месяцев". Ok. Что тут принято считать под "справочник"? А то я так со всеми буду непонятно общаться. >Мы вроде как выше договорились (и в моём варианте, и >во всех ваших), что шмотка "знает" куда её можно одеть - >у шмотки есть поле slot, в котором указывается, надевается >она на голову, руку или палец, и кот. исп. в соотв. фильтрах. >Нюансы могут быть лишь для многослотовых шмоток. Вот тут немного не так. По слотам есть два знания: - в какой тип слота (голова, палец) можно одеть шмотку - это указано в справочнике шмоток (thing_ref.slot_type) - в какой конкретно слот одета конкретная шмотка (третий палец, голова) - это указывается в таблице thing_dressed.slot_id авторСм. выше, я как раз про это в начале отвечал - а) это не совсем справочник; б) вероятно, это не лучший способ "защиты", если он вообще нужен (он реально нужен? от самих себя?). Я полностью согласен, что FK здесь вещь спорная. Сейчас я всю схему укутал FK, чтобы сразу вылазили косяки. После устаканивания структуры пересмотрю их надобность. В общем одевалка заработала и она мне нравится. По поводу мф шмоток и пересчетов триггерами. Перед этим нужно построить сырые данные. И тут я такое намудрил, что уже стесняюсь и спрашивать ) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 16:28 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryG> Что тут принято считать под "справочник"? Обычно нечто изменяемое. Справочник клиентов, поставщиков, в вашей игре - персонажей, шмоток. > Вот тут немного не так. По слотам есть два знания: > - в какой тип слота (голова, палец) можно одеть шмотку - > это указано в справочнике шмоток (thing_ref.slot_type) > - в какой конкретно слот одета конкретная шмотка > (третий палец, голова) - это указывается в таблице thing_dressed.slot_id А, понял. Всё равно для этого лишняя таблица не нужна, ИМХО. Отдельного поля хватило бы, если в одном поле не хочется. > По поводу мф шмоток и пересчетов триггерами. Что такое мф? > И тут я такое намудрил, что уже стесняюсь и спрашивать ) Да ладно, валяй. Игры на FB тут редкость. :) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2018, 17:30 |
|
Как не одеть в один слот две шмотки ?
|
|||
---|---|---|---|
#18+
AndryG Лишь любопытства ради , как примерно это выглядит без привязки к языку? Как мне видится. Должен быть некий долгоиграющий процесс, в памяти которого развернут мир игры. Массивы различных оперативных данных вытянуты с БД, развернуты в "языковые" объекты/очереди/массивы, связанны между собой ссылками и т.п. Каждый сеанс юзера - это отдельный поток в этом процессе. Куча потоков одновременно изменяют/рождают/убивают данных в этом огромном месиве данных. Так это происходит? Код напичкан критическими секциями, семафорами и т.д. Утечки памяти становятся не пустым звуком, полный крах при малейшей ошибке. Теневое сохранение в БД. Ужас, летящий на крыльях ночи - такие впечатления рождаются в мозгу, заточенном на "http - протокол без созранения состояния" :) Да один процесс с данными в памяти По поводу потоков - утверждение про один поток подтвердить/опровергнуть не могу, скажу что точно не надо делать поток на юзера. Сотня другая потоков еще норм, тысяча другая - уже оверхед на их обслуживание. Один поток, как сказал сибиряков, или пул потоков. По поводу примитивов синхронизации и их кол-ва: да это не обработка запроса в php, который "рожден умирать", но и не так уж страшно и дорого (намного дешевле чем запрос в БД). А утечки и падения - как написать )) Про стейтлесс протокола - ты же сейчас сохраняешь состояние в сессии, будет тоже самое только сессии будут уже в памяти. Но я бы смотрел в сторону постоянного коннекта с клиентом, как я понял это браузерка - значит вебсокеты, не надо постоянно полить сервер в ожидании событий, это ближе к реалтайму и и нагрузка меньше. зы Если боишься мютексов и прочего можно посмотреть в сторону nodejs, он однопоточный. Из плюсов это js, а спецы по js в команде должны быть. Еще, как вариант, посмотреть на асинхронные либы для пыха. Судя по отзывам оно работает плюс не надо менять инструмент разработки и, насколько я понимаю, тоже одно поточно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 06:59 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1561122]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 317ms |
total: | 481ms |
0 / 0 |