ArtistSpb писал(а):
KadVar писал(а):
Я не очень понимаю зачем вам вообще БД применительно к маду ?
"Чтобы было" ?
Под статистику идеально использовать текстовые логи...
Текстовые логи потом придется парсить... не в ручную же читать их...
А зачем еще писать парсер, если есть уже готовый - это база данных + SQL.
...
С текстовыми файлами такого не сделать.
Потому, что производительность... потом "делайте что хотите".
Обратите внимание, авторы апача пишут в текстовые файлы. Есть chainsaw итд итп.
Есть много готовых проверенных решений.
ArtistSpb писал(а):
KadVar писал(а):
И эээ.. как вы коллизии разрешать будете ?
После каждого sleep будете повторно 100500 проверок производить ?
Коллизии типа - игрок 1 берет меч, игрок 2 тоже в этот момент берет меч и т.д. и кто в итоге его возьмет ?
Это решается базой данных - это ее основная задача изначально. Решение коллизии - кто первый пришлет запрос в БД тот и возьмет меч
(читается чья игровая команда первая прилетит на сервер). Второму игроку уже не достанется меч.
Т.к. он пошлет такой же запрос в БД, как и первый игрок, но БД скажет ему - меча уже нет.
Можно кусочек кода написать ? Пример ?
Я честно говоря не очень понимаю как вы собрались конкретно работать.
И второй сразу кусочек, не с поднятием меча, а скажем со стрельбой из лука, один стреляет из лука,
у него должен быть лук и стрела, второй "кастует файрболл" и если он успеет первым может повредится
лук, а может стрела, а если вторым - только лук (стрела уже "ушла".
ArtistSpb писал(а):
KadVar писал(а):
Где будет несколько потоков-то, вот чего я не понял
Потоки системные (понятие ОС). Процесс (программа) может состоять из 1+ потоков, которые выполняются параллельно и независимо друг от друга.
Ось переключает потоки по своим правилам. То есть возможно запускать несколько скриптов параллельно и они не будут мешать друг другу.
Я (если чё) осведомлен о потоках
Вы я вижу тоже. Вопрос всё тот-же, что конкретно будет исполняться параллельно ?
Неужели "всё" ?
ArtistSpb писал(а):
KadVar писал(а):
Но тут появляется задача синхронизации доступа к данным из разных потоков. Это можно решить за счет БД, а можно ручками, но это сложная задача.
Вот и нужно думать и выбирать путь для решения. Потому что для игровых данных (мобы, игроки. объекты и др.) сложно будет поддерживать и расширять
движок на базе данных. Об этом я писал в прошлом посте.
Да не поможет вам БД скорее всего.
Напишите код. Один метод всего. В произвольном синтаксисе. Хоть по-русски. Только SQL-и опишите внятно.
И я покажу вам где и как будет айайай.
ArtistSpb писал(а):
Кстати все мады, которые DIKU-based, изначально однопоточные. Поэтому возникают проблемы с лагами из-за плохих скриптов, действий игроков и т.д.
т.к. они выполняются последовательно, а не параллельно. Т.е. один плохой скрипт может "положить" весь сервер.
Не поэтому абсолютно, а потому, что не работает (хотя и запланирован) "аккаунтинг".
Плохие скипты должны вырубаться на уровне движка скриптов, но что-то там у них не работает.
Есть проблемы когда не успевает обработаться один hearthbeat, но опять-таки из-за криворукости,
там есть все данные, чтобы в этом случае следующий попросту пропускался.