1 Наброски работы с предметами и инвентарём
Ivor Barhansky edited this page 2020-10-21 20:55:04 +00:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Затравка

Есть база предметов

Одна таблица, где лежат все заготовки всех предметов. Readonly для большинства пользователей\задач.

  1. В магазинах: ссылка на id и цена.
  2. В инвентаре: ссылка на id, слот в который она одета (0 если нет), переопределённые переменные (если предмет с изменёнными характеристиками).

Есть база подарков

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

Есть база магии…

Вот тут всё сложно, потому что если делать отдельную таблицу — они не полетят в магазин вместе со всеми. Зато можно из общей таблицы выкусывать данные по магии. А учитывая лимит на использование, пишется mysql-процедура, которая удаляет запись из строки, когда счётчик станет нулём.

Пример покупки:

INSERT INTO `inventory` (
  name, maxdur, cost, img, goden, dategoden, massa, prototype, owner,
  nlevel, nsila, nlovk, ninta, nvinos, nintel, nmudra, 
  nnoj, ntopor, ndubina, nmech, nalign, nfire, nwater, nair, nearth, nlight, ngray, ndark, 
  minu, maxu, 
  gsila, glovk, ginta, gintel, ghp, gfire, gwater, gair, gearth, glight, ggray, gdark, 
  mfkrit, mfakrit, mfuvorot, mfauvorot, 
  gnoj, gtopor, gdubina, gmech, 
  bron1, bron2, bron3, bron4, magic, needident, 
  gmp, gmeshok, artefact, encicl, koll
 )
SELECT 
  name, maxdur, cost, img, goden, dategoden, massa, id, {$userId},
  nlevel, nsila, nlovk, ninta, nvinos, nintel, nmudra, 
  nnoj, ntopor, ndubina, nmech, nalign, nfire, nwater, nair, nearth, nlight, ngray, ndark, 
  minu, maxu, 
  gsila, glovk, ginta, gintel, ghp, gfire, gwater, gair, gearth, glight, ggray, gdark, 
  mfkrit, mfakrit, mfuvorot, mfauvorot, 
  gnoj, gtopor, gdubina, gmech, 
  bron1, bron2, bron3, bron4, magic, needident, 
  gmp, gmeshok, artefact, encicl, koll
FROM shop WHERE id = inventory.prototype;

Мысли

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

Экипированные предметы со временем ломаются. За вероятность поломки отвечает параметр «Долговечность», чем она меньше, тем быстрее предмет сломается. При поломке экипировка становится хламом. Долговечность обычно уменьшается после каждого боя, но некоторые способности героев могут влиять на скорость её изменения. Периодически, герой самостоятельно ремонтирует свою экипировку в ремонтной мастерской. С каждым новым ремонтом максимальная долговечность предмета уменьшается. Кроме того, максимальная долговечность уменьшается при «заточке» предмета экипировки.

Иногда герой может получить редкий или эпический артефакт с особыми свойствами. Такие артефакты ценятся выше обычных, их долговечность может быть выше обычной. Кроме того, такая экипировка и продаётся значительно дороже.

В некоторые предметы может быть встроена магия.

Предметы: редкость

значение описание
0 Обычный предмет
1 Редкий предмет
2 Артефакт
3 Эпический артефакт

Предметы: тип

значение описание
0 Хлам
1 Основная рука
2 Вспомогательная рука
3 Доспех
4 Шлем
5 Перчатки
6 Ботинки
7 Серьги
8 Амулет
9 Кольцо
20 Неодеваемый предмет экипировки
21 Неодеваемый предмет экипировки с активными эффектами (свитки, зелья)