Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Город Мастеров _ Шарды рунета _ Планирование шарда

Автор: _kaa_ Jun 13 2005, 00:53

\\попытаюсь написать что-то вроде статьи.

Баланс.

Начнем с начала. Что такое баланс с точки зрения разработчиков? Попытка уровнять шансы различных классов и направить развитие по задуманной клее. Т.е. определить примерное время развития, исключить возможность «прыжков» через уровни и прочее. Т.е. по сути сделать ограничения, чтобы начинающим было одно, тем кто поиграл поболее и только хай-левелам остальное. Нужно это или нет - время показывает что нужно.

Попытаюсь рассказать как построить сбалансированный мир опираясь на опыт blizzard’ов (в основном на World of Warcraft) и на свой J

Для начала основы, которые позволяют запланировать что развитие будет идти по сценарию (более или менее. Это не значит что развитие жестко ограничено, но оно должно попадать в некоторые рамки, обычно ограничения идут с верху)

1. Разделение мира на зоны. Нубам – нубово (с) J
При разработки локаций четко заранее должно быть продуманно на какой диапазон уровней игрока расчитана зона. Чуть ниже будет подробнее.
2. Разделение лута по уровням, особенно если присутствует крафт. Опять же, продуманно заранее. Если из моба должны выпадать вещи, используемые в крафте,– они должны соответствовать уровню в крафте, допустимого на этом уровне игрока. Стандартная система лута для этого подходит мало, чуть ниже вернемся к этому пункту.
3. Должны быть продуманны ограничея для «самых умных». Например: за моба много выше по уровню давать не очень много опыта. (Близзард поступил совсем жестко – игрок ниже моба на 4-6 уровней имеет большие проблемы с попаданием в такого противника. Подобное в принципи можно сделать и для НВН). Некоторые ограничения (например радиус stealth для rogue зависит от разницы уровней моба\игрока) сложно реализовать в НВН, но не нужно забывать поставить мобам соответствующий скилл. Ибо нефиг.
4. Если используются разного вида скрытые двери, квесты основанные на каком-то скилле и т.п. – все должно подчиняться тому же правилу.

Список можно продолжать и дальше, но основа должна быть понятна. Что подводит нас к непопулярному в россии пунтку – планирование J Сколько вы знаете полностью распланированных еще до создания шардов? tongue.gif Очень мало.

\\если кому захочется обсудить - просьба не здесь, создайте тему.
Добавлено в [mergetime]1118613425[/mergetime]
Система лута:

Немного вернемся к системе лута. Стандартная система до жути страшна и неудобна. Учить\править что-то чужое, буржуйское – тоже не всегда удобно. В идеале – составить ТЗ и реализовать удобную систему силами того же форума.

Попытаемся описать такую систему, которая нас бы устраивала:

1. Шарды бывают разные. Кто-то использует SQL, кто-то нет. Неплохо бы заранее об этом подумать и сделать универсальную систему.
2. Выпадающий лут обязан зависить от тега\расы\уровня\класса и т.п и т.д. моба. Т.е. хорошо бы иметь возможность задать в правилах зависимость от любой информации, что можно получить с моба.
3. Иногда нужна зависимость от уровня\класса игрока. (для наград например).
4. Нужна возможность группировать похожие предметы. Скажем если должно выпадать плохенькое оружие – это не обязан быть всегда топор. Хотелось бы сделать группу «плохенькое оружие» и в ней перечислить теги плохенького меча, топора, кинжала и т.п. Возможно даже с указанием шанса выпадания конкретного предмета.
5. Разрешить «вложение» групп. (Если в пред. Примере мы создали группу «плохенькое оружие», то в группе «оружие» мы можем перечислить уже не теги конкретных вещей, а указатели на группы «плохенькое оружие», «среднее», «хорошее» и т.п. Опять же, возможно с указанием шанса выпадения вещи из конкретной группы или же просто рандомно один предмет из группы.)
6. Сам текст групп и правил должен быть читабелен. Т.е. скорее всего это должен быть не готовый скрипт, а своего рода шаблон\файл описания. В этом случае мы можем по правилам (лучше всего конструктором) создать шаблон и его превратить в скрипт (для SQL версии и обычной. Но это вариант максимум )
7. Следующим пунктом идут правила. До этого пункта мы (предположительно) описали группы однотипных предметов, теперь нам нужно задать правила сопоставления. Скорее всего в скрипт будет передаваться информация об «убитом» мобе, открытом сундуке и т.п. Из нее мы берем всю нужную нам информацию (основая – тег, но может быть что угодно, включая локацию (может кто захочет жестко в тулсете прописать предпочтительные уровни в переменных зоны)) На основе правил ищем что выпадет.
пример (полностью абстрактный, просто чтобы представить)

CODE

[group=”плохенькое оружие”]
tag=tag1 (…может быть что-то еще)
tag=tag2
tag=tag3
[group=”оружие”]
tag=^ плохенькое оружие (не сам тег, а указатель на группу.)
tag=^среднее оружие…

[rules: tag == “nw_human”]
tag=^ оружие chance=50
tag=gold maxcount=100

8. Далее идет обработка нашего шаблона в nwn или sql скрипт. Не считая стадии описания это самая ответственная часть J Собственно сложного тут ничего нет, но поработать надо.
В результате работы может получится примерно следующий скрипт: (все _очень_ примерно)
Neverwinter Script Source
struct result
{
string tag;
int chance;
….
}
struct result GetTagFromGroup(string GroupName,…)
{
    struct result  MyResult;
    if GroupName == “плохенькое оружие” then
  {   
        case Random(3)
        {
            1: MyResult.tag=”tag1”;MyResult.chance=23;break;
            2: MyResult.tag=”tag2”;break;
            3: MyResult.tag=”tag3”;break;
        }
    return MyResult;
  }

}

В случае подгрупп идет рекурсивный вызов той же функции. С правилами чуть посложнее, но не на много.

Что требуется и что получаем:
Требуется все это реализовать. Я займусь, если кого то такая система серьезно заинтересует. Еще лучше если кто-то еще из скриптеров заинтересуется, одному писать и тестить скучно. Еще лучще если это будет кто-то, знающий xml
По сути мы получим свой мини скриптовый язык для описания системы лута (которая учитывала бы любые уникальные теги, их просто нужно будет описать. В идеале все будет понятно не скриптеру. Сам скрипт предпологается писать на чем-то кроссплатформенном, скорее всего на перле.
Если на шарде используется крафт - _очень_ просто все касаемое выпадения\добывания лута вставить сюда.

Теперь чуть подробнее на деталях.
В папке с модулем лежит файл itempalcus.itp, который отлично открывается NWN Explorer’ом. Это описание плюс ресреф всех кастомных вещей модуля. Есть подобные же стандартный файл, itempalstd.itp в одном из паков с игрой. Если создавать простейший конструктор, то не придется вспоминать теги.
(для примера – посмотрите тут http://kaa.mhost.ru/cgi-bin/items.cgi . Это скрипт на js для нашего крафта на Миде. Данные в правом поле берутся из файла, полученного в результате экпорта itempalcus.itp с помощью NWN Explorer’а.)

Автор: mamuc Jun 13 2005, 09:48

...узнаю систему лутаpardon.gif
... у меня еще где то должен быть файл данных с групами начатый для Мидаpardon.gif

QUOTE
3. Должны быть продуманны ограничея для «самых умных». Например: за моба много выше по уровню давать не очень много опыта. (Близзард поступил совсем жестко – игрок ниже моба на 4-6 уровней имеет большие проблемы с попаданием в такого противника. Подобное в принципи можно сделать и для НВН). Некоторые ограничения (например радиус stealth для rogue зависит от разницы уровней моба\игрока) сложно реализовать в НВН, но не нужно забывать поставить мобам соответствующий скилл. Ибо нефиг.

кстати то же самое относиться и к крафту - все хотят пробросить 20ку и , будучи полным нюбов в професии, сразу сделать офигенную уникальную вешь yes.gif

QUOTE

Список можно продолжать и дальше, но основа должна быть понятна. Что подводит нас к непопулярному в россии пунтку – планирование J Сколько вы знаете полностью распланированных еще до создания шардов?  Очень мало

biggrin.gif *гордо тыча в грудь*..но они есть ... good.gif вот бы еще все запланированое сделать успеть biggrin.gif ...
п.с. каа у тя не возникла желание вновь немного поскрипть ? pardon.gif

Автор: aleVandal Jun 16 2005, 14:27

Мне приходилось писать систему лута.
Проблемму с миниязыком задания параметров лута я решал посредством навешивания на моба локальной переменной-строки. При этом создавался какой нибудь плэйсэбл, в инвенторе которого лежали все шмотки, могущие оказаться в луте у мобов оперделенной группы. То есть плэйсэбл выступал в роли группы предложенной каа. Перемнная строка имела следующий формат:

[шанс выпадания золота из моба]_[XdY - от скольки до скольки золота, если оно выпадает в лут]_[шанс выпадания шмоток]_[XdY - количество шмоток в луте(шмотки из инвенторя плэйсжбла)]_[таг плэйсэбла с возможными шмотками]

QUOTE
Еще лучше если кто-то еще из скриптеров заинтересуется, одному писать и тестить скучно.

Почему бы и нет.

QUOTE
Сам скрипт предпологается писать на чем-то кроссплатформенном, скорее всего на перле.

Если не секрет, как вызвать подпрограмму из нвн-скриптов, написанную на каком-либо другом языке.

Автор: dumbo Jun 16 2005, 16:23

QUOTE (al'Vandal @ Jun 16 2005, 15:27)
Если не секрет, как вызвать подпрограмму из нвн-скриптов, написанную на каком-либо другом языке.

на текущий момент мне известен только один метод такого взаимодействия - nwnx + самописный плагин. обмен данными - через строки. можно также устраивать обмен данными через БД, но тут встают проблемы синхронизации. больше пока ничего в голову не приходит... dntknw.gif

Автор: _kaa_ Jun 17 2005, 14:20

QUOTE (al'Vandal @ Jun 16 2005, 14:27)
Если не секрет, как вызвать подпрограмму из нвн-скриптов, написанную на каком-либо другом языке.


Ты не внимательно читал, я нигде не говорил что можно вызывать подпрограмму из НВН-скриптов smile.gif

Автор: aleVandal Jun 17 2005, 18:03

QUOTE
Ты не внимательно читал, я нигде не говорил что можно вызывать подпрограмму из НВН-скриптов

я уже сам понял. А тем не менее вопрос весьма интересен.

Автор: RiPPeR Jun 18 2005, 21:23

Все делается через nwnx + plugins

Автор: _kaa_ Jul 13 2005, 22:28

Система пермаментной смерти

Да,да. Оно самое smile.gif

Кажется все когда-то хотели реализовать идею пермаментной смерти, но отпугивать игроков никто не хочет. В то же время по игре часто нужно убить "совсем".
Предлагается следующее:
Два вида смерти. Первая - "не настоящая". Нужна в основном для начальных уровней, когда покусали злые мобы и прочее. Реализуется как стандартная НВН-смерть (или лежит на месте пока не вылечит кто). Ничего необычного, сойдет та смерть что реализована уже.
Вторая - "пермаментная". Некоторые виды мобов и игроки в некоторых случаях могут убить "совсем". Чар баниться на уровне игры, ставиться хитрая метка и раз в сутки (раз в час, т.д. - не важно) ОС удаляет все файлы с входжением "хитрой" строки (т.е. удаляет файлы с убитым чаром с ваулта).
Для этого аккаунта запоминается количество экпы, что было у убитого чара. При создании следующего чара он начинает игру не 1 уровнем, а ему выдается какая-то часть опыта убитого (может и часть денег из "наследства", какие-то начальные вещи). Все, что было на убитом чаре - понятное дело теряются.
Детали уже зависят от шарда, но идею надеюсь понятно объяснил.
Какие плюсы это дает:
* Игрок "стирается" из мира. Если его съел крокодил - значит съел совсем, наутро он не очнется и не пойдет гулять.
* Можно реализовать "убийства". Т.е. у вездеприсутствующей гильдии воров\убийц появится настоящая работа. А то кому интересно заказывать убийство, если через несколько минут тот-же персонаж снова живой.
* Самые "дорогие" мобы получают возможность "сожрать" игрока совсем. Награда хорошая, но и риск большой.
* Игроки даже если были "убиты" - не начинают совсем с начала, а имеют начальный опыт и какое-то наследство.

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


Автор: RiPPeR Jul 14 2005, 01:25

_kaa_, ты наш закрытый форум не читал? Про лут в xml, про смерть? Я в шоке.... Зато теперь уверен, что все правильно спланировали smile.gif

Автор: _kaa_ Jul 14 2005, 11:40

QUOTE (RiPPeR @ Jul 14 2005, 01:25)
_kaa_, ты наш закрытый форум не читал? Про лут в xml, про смерть? Я в шоке.... Зато теперь уверен, что все правильно спланировали smile.gif

Ваш - это чей? Про лут мы обсуждали с mamuc'ом с год назад, но вроде нигде не публиковали. Про смерть - просто так выдумал, буквально неделю назад. Кроме этого форума по НВН уже с год ничего не читал, так что думаю вряд-ли smile.gif

Автор: RiPPeR Jul 14 2005, 17:43

Я про наш закрытый форум разработчиков шарда, про которого в моей подписе пишут.

Автор: _kaa_ Jul 14 2005, 18:48

QUOTE (RiPPeR @ Jul 14 2005, 17:43)
Я про наш закрытый форум разработчиков шарда, про которого в моей подписе пишут.

Я первым делом на любом форуме отключаю подписи и аватары. Секьюрити понимаешь smile.gif

Автор: Batkom Aug 12 2005, 04:14

На самом деле все скрипты лута описаны в скрипте #include "x0_i0_treasure" от техже биоварей
Если его подредактировать, то можно получить вполне удобоваримую и простую систему.

Neverwinter Script Source
if (!((GetClassByPosition(1, OBJECT_SELF)==CLASS_TYPE_ANIMAL)||(GetClassByPosition(1, OBJECT_SELF)==CLASS_TYPE_VERMIN)))
    {
    object oTreasure = CreateObject(OBJECT_TYPE_PLACEABLE, "blueprint012", GetLocation(OBJECT_SELF));
    int hdDead = GetHitDice(OBJECT_SELF);
    int hdP = GetHitDice(oKiller);
    if(hdDead > (hdP - 6)){if(hdDead < (hdP - 2))
    if(Random(100) > 96)
    CTG_CreateTreasure(TREASURE_TYPE_UNIQUE, oKiller, oTreasure);
    else
    CTG_CreateTreasure(TREASURE_TYPE_LOW, oKiller, oTreasure);
    }
    if(hdDead > (hdP - 3)){if(hdDead < (hdP + 3))
    if(Random(100) > 94)
    CTG_CreateTreasure(TREASURE_TYPE_UNIQUE, oKiller, oTreasure);
    else
    CTG_CreateTreasure(TREASURE_TYPE_MED, oKiller, oTreasure);
    }
    if(hdDead < (hdP + 11)){if(hdDead > (hdP + 2))
    if(Random(100) > 90)
    CTG_CreateTreasure(TREASURE_TYPE_UNIQUE, oKiller, oTreasure);
    else
    CTG_CreateTreasure(TREASURE_TYPE_HIGH, oKiller, oTreasure);
    }
    if(hdDead > (hdP + 10))
    if(hdP > 10)
    CTG_CreateTreasure(TREASURE_TYPE_UNIQUE, oKiller, oTreasure);
    else
    CTG_CreateTreasure(TREASURE_TYPE_HIGH, oKiller, oTreasure);

    craft_drop_items(oKiller);
    object oLootEQ = GetFirstItemInInventory(OBJECT_SELF);
    while (GetIsObjectValid(oLootEQ))
{
    AssignCommand(oTreasure, ActionTakeItem(oLootEQ, OBJECT_SELF));
    oLootEQ = GetNextItemInInventory(OBJECT_SELF);
}
    AssignCommand(OBJECT_SELF, SetIsDestroyable(FALSE, FALSE, TRUE));
    DelayCommand(300.0, destroy(oTreasure));
    DelayCommand(300.0, AssignCommand(OBJECT_SELF, SetIsDestroyable(TRUE, FALSE, FALSE)));
    }
    else
    craft_drop_items(oKiller);

Лут функции Craft_drop_items редактируется с помощью редакторов 2da
Если с моба должен валиться кастомный лут, легче просто вставить ему в тот же onDeath нужные предметы.

При балансировке шарда я также наткнулся на такую вещь, как трусинг. Убирать его не хотелось, потому я сделал из него совершенно другое заклинание(можно подредактировать dialog.tlk и вставить туда свое описание, но тогда придется распихивать исправленый файл игрокам)

И еще главное не забыть грамотно сбалансировать магазины, это очень важный элемент.

Автор: _kaa_ Aug 13 2005, 11:26

Важных моментов слишком много и движок не слишком способствует их решению. Бум надеятся, что в НВН2 появятся более удобные средства.
Кстати, кто в курсе - поддержку sql-баз они планируют сделать? Прямую иеется в виду.

Автор: dumbo Aug 13 2005, 14:40

QUOTE (Rhomal @ Apr 25 2005, 17:45)
Last I heard on this topic from a dev (which granted was over a month ago) the programmers are not fans of the idea of built in MySQL support.

With that said, I think what you peeps need to push for is inherant ODBC support so this way any database system will more or less work with it.

Unless they are eyeing a open source (ie free to distro) solution I think this is our best bet of improved database support.

dntknw.gif

Автор: Flaristan Jun 4 2011, 04:44

Заранее извиняюсь за некропостинг, но прав на создание новой темы на этом форуме пока нет, потому просто откопал подходящую.

Собсно вопрос: занимаюсь в свободное время планированием и созданием универсального концепта модуля для одиночной/сетевой/многопользовательской игры под НВН1 – как много людей все еще интересуются этой игрой и разработкой модулей для мультиплеера к ней? Есть ли смысл рассчитывать в итоге больше чем на модуль для сетевого прохождения (история существования некоторых шардов наталкивает на мрачные мысли)?
Как-то в разговоре с одним из игроков столкнулся с мнением, что НВН не имеет больше аудитории отличной от устоявшегося числа его фанов. Хотелось бы надеяться на лучшее, поскольку в планах реализация интересного (на мой взгляд) модуля по классическим стандартам любимых РПГ игр с возможностью многопользовательской игры в него. Интересно услышать мнение от разработчиков и просто фанов НВН «с большой дороги». smile.gif

Автор: Laajin Jun 4 2011, 08:19

* Щас тебе отпишутся не любители (не желатели) забивать гвозди микроскопом - и после прочтения их уных постов о том что мир говно и нвн уже не тот - ты уйдешь с головой в линейку или вов, ибо там лучше.
Мой тебе совет, если нравиться - делай. Надоест - оставишь, в любом случае то что ты сделаешь всегда можно выложить тут и те кому интересно оценят.
Ня?)

Автор: Keks Jun 4 2011, 10:23

Флер, я уже давно жду твой модуль, в котором будет реализовано "ФСЕ", давай делай поиграть на нем хотса

Автор: Flaristan Jun 5 2011, 00:39

to Laajin: НВН/Аврора – отличная платформа для игры/создания классических РПГ модулей, на мой взгляд; единственное во что бы я возможно перешел или заинтересовался параллельно по идеологическим соображениям (при условии появления аналога) – это в модульмэйкер соответствующего уровня и качества по вселенной fallout. smile.gif
Так что прекращать работу ни в коем случае не намерен (иначе какой смысл было начинать), но было бы хорошо знать, что еще есть те, кто мог бы оценить результаты. dirol.gif

to Keks: Я сам его жду и хочу уже поиграть, но боюсь что ждать придется еще долго, потому что работы над ним все еще непочатый край. moil.gif

Ну а если кому-то интересно посмотреть то что есть или поучаствовать – тестерам всегда буду рад в любое время: http://nwnecronomicon.ucoz.ru/ .

Автор: Keks Jun 6 2011, 22:15

Жесть, люди пора и ему выделить отдельную палату и усмирительную рубашку с персональным номером

Автор: Flaristan Jun 9 2011, 03:58

Как-то совсем глухо... offtopic.gif

Автор: Agarwaen Jun 20 2011, 07:53

Флер, ты ожидаешь, что сотни людей начнут писать: "даешь РП! Ждем твой мод!" ?
Писать может и не будут, но когда он будет готов, с радостью посмотрят. Вон Кекс, я и еще много человек уже ждут бета-тестинга более-менее готового продукта. А тестить по кусочкам времени не хватет - у многих есть еще проекты, в которых они работают smile.gif

Автор: Keks Jun 22 2011, 20:25

А я и жду мод Флэра с нетерпением жду, хоть и участвую в проекте.

Автор: Rewazer Jun 23 2011, 08:15

Цитата
А я и жду мод Флэра с нетерпением жду, хоть и участвую в проекте.
да можно подождать... чтоб потом на форуме русские народные забавы устраивать

Автор: denis0k Jun 23 2011, 11:18

Если тут хоть кто-нибудь хоть что-нибудь полноценно зарелизит без бесконечно повторяющихся переносов сроков на следующий год, это однозначно будет событие, коих гм не видел лет энцать.

Автор: Keks Jun 23 2011, 21:14

А хз, вот альфатесты равена например уже были раза 3 или 4, на подходе еще тест и бетка.

Автор: Flaristan Jun 24 2011, 02:51

Цитата(Agarwaen @ Jun 20 2011, 07:53) *
Флер, ты ожидаешь, что сотни людей начнут писать: "даешь РП! Ждем твой мод!" ?
Писать может и не будут, но когда он будет готов, с радостью посмотрят. Вон Кекс, я и еще много человек уже ждут бета-тестинга более-менее готового продукта. А тестить по кусочкам времени не хватет - у многих есть еще проекты, в которых они работают smile.gif

А что плохого в том, чтоб подкреплять собственную мотивацию еще и тем, что труд твой может быть оценен и другими? smile.gif
Может быть как раз этого и не хватает всем заглохшим стоящим проектам…

Ну а по поводу тестеров – я полностью солидарен с буржуйским разрабом. biggrin.gif

О сроках возможного «релиза» я заведомо не загадывал в виду бесполезности сего занятия. Но если кого-то они интересуют – они вполне могут следить за строительством модуля по сайту, информацию на котором я регулярно обновляю по мере ее возникновения. Работаю я над модом один с переменным успехом уже полгода – на сегодняшний день готова львиная доля скриптовой базы и стартовый набор локаций с наполнением близким к полному. Хотелось бы думать, что по истечению аналогичного срока, будет готова версия для бетатестирования.

Автор: bibinoka Jul 3 2011, 00:14

Ох, а я уж обрадовался..

Автор: Flaristan Aug 21 2011, 04:21

В любом случае, после сооружения беты, модуль скорее всего будет в режиме онлайна если не 24/7 то как минимум 12/7 или около того для перманентного бета-тестирования.
Я бы и альфа-тест запустил в таком режиме, если бы тестеров не приходилось загонять на тесты силками. declare.gif

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)