-
Постов
936 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Календарь
Сообщения, опубликованные Dagot_Prolaps
-
-
Эксель – это не просто прога. Это – целый язык программирования! А в свете недавнего открытия импорта и экспорта таблиц в КС, теперь это ещё и полноценное продолжение конструктора плагинов. В частности, ребалансов шмоток, существ и даже неписей.
Как же применить магию Экселя на практике?
1) Загрузить в КС свой мод
2) Экспортировать нужные данные (оружие, броня, существа, одежда…)
3) Открыть получившийся текстовый файл и заменить в нём все точки на запятые.
4) Открыть изменённый txt в Экселе. Формат: 1251 – Кириллица (виндовс)
5) Отфильтровать только новые данные из мода.
5.1) Для этого скопировать столбец ID объектов из таблицы данных оригинальной игры рядом со столбцом ID объектов мода.
5.2) Выделить оба столбца. Главная → условное форматирование → правила выделения ячеек → повторяющиеся значения.
5.3) Фильтруем таблицу по цвету и удаляем все помеченные строки. Удаляем скопированный ранее столбец ID. Теперь в вашей таблице только объекты из вашего мода.
6) Редактируем значения.
6.1) Заполняем столбцы S, T, U для оружия и столбцы K, L, M для брони вручную – всё по аналогии с предложенной таблицей из оригинала.
6.2) Если вам нужны новые материалы или модели оружия – переходим на лист Коэф и Коэфбр и создаём новые строки с придуманными вами материалами, прописываем для них коэффициенты.
6.3) На листах Коэф и Коэфбр можно отредактировать стартовые коэффициенты для оригинальных материалов и типов оружия. А для оружия можете даже настроить продвинутое соответствие веса и скорости!
6.4) Копируем нужную формулу в ячейки по всей длине нужного столбца. Готовые ячейки с формулами на страницах оригинальных оружия и брони.
7) Сохраняем готовую таблицу как txt с табуляторами.
8) Меняем в нём запятые на точки.
9) Загружаем в КС свой мод и импортируем нужные данные из этого текстового файла. Готово!
Весь вышеизложенный алгоритм до 6 пункта я проделал для вас с МФР. В приложенной таблице вы найдёте листы с данными об оружии, броне, одежде и существах как из оригинальной игры, так и только новые объекты из МФР.
Редактируйте по своему усмотрению и создавайте свой самый лучший ребаланс.
Листы с оружием и бронёй оригинала уже полностью ребалансированы – все ячейки заполнены формулами. Можно смотреть на них и делать по аналогии.
А теперь инструкции по формулам для продвинутых экселистов.
Все формулы спроектированы таким образом, чтобы копировать их в нужную ячейку на второй строке таблицы, а затем уже копировать эту ячейку на всю длину столбца. Тогда формула адаптируется ко всему столбцу.
ОРУЖИЕ
Для всего оружия надо прописать вручную материал и вид в соответствующих столбцах. Также в столбце «маг» желательно прописать коэффициент увеличения цены в зависимости от зачарования (чем круче зачарование – тем выше цифра).
Вес:
=ОКРУГЛ(ПРОИЗВЕД(ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!A:A;0); 4); ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(T2;Коэф!A:A;0); 4));0)
Вес стрел, болтов и металок:
=ОКРУГЛ(ПРОИЗВЕД(ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!A:A;0); 4); ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(T2;Коэф!A:A;0); 4));1)
Цена:
=ОКРУГЛ(ПРОИЗВЕД(ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!A:A;0); 2); ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(T2;Коэф!A:A;0); 2); СУММ(1; U2));0)
Чароемкость:
=ПРОИЗВЕД(ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!A:A;0); 3); ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(T2;Коэф!A:A;0); 3))
Прочность:
=ОКРУГЛ(ПРОИЗВЕД(ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!A:A;0); 5); ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(T2;Коэф!A:A;0); 5));0)
Скорость (для всего кроме призванного и металок со стрелами):
=ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(F2;Коэф!A:A;0); ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!A:A;0); 13))
Стрелы и болты: всегда 1. Звёзды – 1.5, дротики – 1.0, ножи – 0.7.
Призванные прописать вручную.
Эта формула отличается от остальных, здесь мы узнаём номер столбца, где прописана правильная скорость (7, 8 или 9).
Длина:
=ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!A:A;0); 10)
Руб (мин):
=ОКРУГЛ(ПРОИЗВЕД(M2; ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!$A:A;0); 11));0)
Руб (макс):
=ОКРУГЛ(ПРОИЗВЕД(ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!A:A;0); 7); ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(T2;Коэф!A:A;0); 6));0)
Реж (мин):
=ОКРУГЛ(ПРОИЗВЕД(O2; ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!A:A;0); 11));0)
Реж (макс):
=ОКРУГЛ(ПРОИЗВЕД(ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!A:A;0); 8); ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(T2;Коэф!A:A;0); 6));0)
Кол (мин):
=ОКРУГЛ(ПРОИЗВЕД(Q2; ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!A:A;0); 11));0)
Кол (макс):
=ОКРУГЛ(ПРОИЗВЕД(ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!A:A;0); 9); ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(T2;Коэф!A:A;0); 6));0)
Игнор (применять формулу только для немагического оружия):
=ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(T2;Коэф!A:A;0); 13)
Тип оружия:
=ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!A:A;0); 12)
ДОСПЕХИ
Для всего сперва надо прописать вручную материал. Для щитов прописать вручную в столбце «щит» 0 для малых щитов и 1 для ростовых.
Вес
=ОКРУГЛ(ПРОИЗВЕД(ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(E2;Коэфбр!A:A;0); 4); ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(K2;Коэфбр!A:A;0); 4));1)
Вес для щитов отдельно:
=ОКРУГЛ(ПРОИЗВЕД(ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(M2;Коэфбр!A:A;0); 4); ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(K2;Коэфбр!A:A;0); 4));1)
Цена
=ОКРУГЛ(ПРОИЗВЕД(ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(E2;Коэфбр!A:A;0); 2); ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(K2;Коэфбр!A:A;0); 2); СУММ(1; L2));0)
Цены для щитов отдельно:
=ОКРУГЛ(ПРОИЗВЕД(ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(M2;Коэфбр!A:A;0); 2); ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(K2;Коэфбр!A:A;0); 2); СУММ(1; L2));0)
Чароемкость
=ПРОИЗВЕД(ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(E2;Коэфбр!A:A;0); 3); ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(K2;Коэфбр!A:A;0); 3))
Прочность
=ПРОИЗВЕД(ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(E2;Коэфбр!A:A;0); 5); ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(K2;Коэфбр!A:A;0); 5))
Прочность щитов:
=ПРОИЗВЕД(ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(M2;Коэфбр!A:A;0); 5); СУММ(ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(K2;Коэфбр!A:A;0); 5); ПРОИЗВЕД(ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(K2;Коэфбр!A:A;0); 6);0,02)))
Это формула улученного коэффициента прочности для щитов: = коэф. прочности брони + АР/50
Защита
=ИНДЕКС(Коэфбр!A:Z; ПОИСКПОЗ(K2;Коэфбр!A:A;0); 6)
Для щитов всегда 0.
Далее в этой теме не лишним будет обсуждать предложенные коэффициенты для типов оружия, брони и материалов, цены, урон, защиту, прочность, чароёмкость, вес, а также другие хитрости Экселя. Разбираемся в тонкостях формул, составляем и выкладываем свои продвинутые формулы. Кроме того можно подумать, какие формулы подойдут для быстрого и удобного авторасчёта статов существ – тут всё ещё непаханое поле для экспериментов.
-
Ну, проверка идёт в независимых секциях. Но уже после того как секция расчётов завершила работу или даже не начинала ей в случае запомненной десятки.
А движок да, крайне конченый - первая версия этого скрипта со ступенчатыми елсифами вообще отказалась работать.
-
Чтобы один раз подсчитать очки у прокачанного нереварина, запомнить 10 и больше не вызывать расчёты.
-
Как оно будет вычисляться, если строчкой выше оно назначается.
-
У меня конструкция
if ( points >= 10 )
set points to 10if ( points == 10 )С этим же проблем не будет?
Чтобы свободную прокачку из ранних ТЕС\Фоллаутов превратить в подобие ла2, где начинаешь файтером или мистиком, а заканчиваешь более специализированным файтером или мистиком?Не, начинаешь никем, бомжом без навыков и абилок, а потом самым свободным образом выбираешь, кем стать, и постепенно углубляешь свой выбор специализацией.
-
Почему ==10 не бывает? Потому что флоат, а не шорт? На практике всё работает.
-
Не работает ваш впр
Вот эта фигня
=ОКРУГЛ((ВПР(S2;Коэф!A1:Z1000;4;ЛОЖЬ))*(ВПР(T2;Коэф!A1:Z1000;4;ЛОЖЬ));0)
скалирует область поиска в каждой новой строке
В отличие от этой формулы:
=ОКРУГЛ(ПРОИЗВЕД(ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S2;Коэф!A:A;0); 4); ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(T2;Коэф!A:A;0); 4));0)
Да, она конченая. Но работает.
-
Ну, в игре плагин работает, значит блок
if ( points == 10 )if ( "4nm_class" == 4 )messagebox "В своем могуществе вы сравнились с богами, а ваши подвиги будут воспеты в легендах. Какое место вы в них займете?", "Варлорд", "Паладин", "Спеллсворд", "Блейдмастер", "Варвар", "Герой", "Мне надо подумать"успешно считываетсяСледовательно 10 это действительно 10, а не какая-то кракозябра -
Оно будет равно, так как в самом конце идёт принудительная установка очков на 10, если есть превышение.
-
Перед этим принудительный сброс:
set level to ( player->getlevel )set points to ( level * 0.1 ) -
Я это наконец сделал, скампы))) Оно работает!
=ОКРУГЛ(ПРОИЗВЕД(ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(S853;Коэф!$A:A;0); 4); ИНДЕКС(Коэф!A:Z; ПОИСКПОЗ(T853;Коэф!$A:A;0); 4));0)
Великий Ребеланус грядёт!
-
Класс остаётся прежним, думаешь до следующей загрузки
-
При загрузке сейва проверяет, сколько у ГГ очков Легендарности, а затем если их хватает на апгрейд - предлагает выбор класса. При выборе удаляютяс бонусы текущего класса ГГ и добавляются бонусы выбранного класса.
-
Вышел ЧИМ-мод 1.2! В новой версии вы увидите:
* Небольшой нерф магов
* Новая система классов для Нереварина!
* Новая формула максимума здоровья
* Рандомизация статов у мобов
* Лимит на обучения
* Совместимость с МФР
А теперь подробнее по каждому пункту.
Небольшой нерф магов
Маги всё ещё самые могущественные существа в Нирне (если руки у игрока растут из правильного места), но теперь они достигают пика своей мощи медленнее. Магические перки давали почти нескончаемый запас маны, теперь же он просто большой. Недостающую ману добираем путём выбора класса магической направленности.
Новая система классов для Нереварина!
Скажи Нет бесполезным дефолтным классам! Выбери сам свою Судьбу!
Совершая героические подвиги, ты сможешь всё сильнее и сильнее развиваться по выбранному пути и получать всё более мощные бонусы, которые сделают твой геймплей уникальным и наиболее приятным именно для тебя.
1 – Воин
2 – Маг
3 – Бродяга
4 – Воитель
5 – Боевой маг
6 – Заклинатель
7 – Шпион
8 – Вор
9 – Скаут
10 – Варлорд
11 – Паладин
12 – Спеллсворд
13 – Шаман
14 – Архимаг
15 – Волшебник
16 – Найтблейд
17 – Трикстер
18 – Ассасин
19 – Плут
20 – Блейдмастер
21 – Варвар
22 – Герой
23 – Искатель
24 – Странник
Стрелками показано с какого класса на какой можно перейти. Выбирайте свой путь мудро!
Первые 3 – начальные классы-архетипы. Это первая ступень развития Нереварина, получаемая им на 3 уровне Легендарности.
С 4 по 9 идут классы второго тира, они открываются при достижении 6 очков легендарности. Здесь возможно как углубление в выбранном архетипе, так и принятие комбинированного класса.
С 10 по 24 идут высшие классы третьего тира. Они открываются при достижении 10 очков Легендарности и предоставляют очень широкие возможности выбора своего уникального пути.
22, 23 и 24 – небольшая группа универсальных авантюристских классов третьего тира. Для тех, кто любит всё в одном. Разница между ними в небольшом перекосе в сторону воина, мага или бродяги.
Очки Легендарности даются за подвиги и легендарные свершения. По одному очку за каждые 10 уровней, +3 за победу над Дагот Уром, +1 за победу над Альмалексией, +1 за победу над Гирцином. Ещё по одному очку за становление главой каждой гильдии, организации или Великого Дома (исключения – Имперский Культ и ВИК). Максимум очков Легендарности = 10.
Пассивки архетипа Воина:
+ к максимуму здоровья
сопротивления к стихиям и яду
восстановление здоровья
восстановление стамины
Пассивки архетипа Мага:
– к максимуму здоровья
множитель маны
восстановление маны
сопротивление магии
поглощение заклинаний
отражение заклинаний
Пассивки архетипа Бродяги:
атака
уклонение
лёгкость
прыжки
сопротивление параличу
Комбинированные классы получают свойства сразу от двух архетипов (а авантюристские классы сразу от трёх), но в куда меньшем объёме.
Полный список пассивок каждого класса смотрите в экселевской таблице. Внимательно изучите её, чтобы выбрать лучший класс под свой геймплей.
Новая формула максимума здоровья
Теперь здоровье пересчитывается каждый раз при загрузке сейва, если герой полностью здоров.
Формула: Выносливость/2 + Сила/4 + Воля/4 + бонусы перков и класса.
Максимум собственного здоровья на полной прокачке без баффов и магии составляет 200 у Варлорда и Варвара и 100 у Архимага и Волшебника. У остальных классов здоровье варьируется между этими значениями.
Исчезло из игры понятие начального здоровья. Это значит, теперь вам совершенно не нужно в обязательном порядке выбирать силу и выносливость на старте игры – теперь это не даст никаких преимуществ на поздней стадии игры, когда вы прокачаете все статы и здоровье всё равно догонит свой максимум. Играйте как хотите, но опять же, будьте осторожны при выборе Архимага или Волшебника – хоть это и сильнейшие классы в игре, при катастрофическом недостатке общей физической подготовки ваш Нереварин сможет скопытиться даже от укуса бешеного скриба!
Begin x_4nm_maxhealthlong pcReffloat newhpfloat endurancefloat strengthfloat willpowerif ( Player->GetHealthGetRatio != 1 )StopScript "x_4nm_maxhealth"returnendifif ( Player->GetEffect, sEffectFortifyHealth == 1 )StopScript "x_4nm_maxhealth"returnendifsetx pcRef to xGetRef "player"setx endurance to pcRef->xGetBaseEndsetx strength to pcRef->xGetBaseStrsetx willpower to pcRef->xGetBaseWilset newhp to ( ( endurance * 0.5 ) + ( strength * 0.25 ) + ( willpower * 0.25 ) + "4nm_hpperkbonus" + "4nm_hpclassbonus" )Player->SetHealth, newhpStopScript "x_4nm_maxhealth"EndРандомизация статов у мобов
На рядовых мобов повешен скрипт, который рандомизирует им боевые параметры и характеристики. Никакого левелинга – только рандом от 80% до 120% от нормы.
Размер существ также скачет от 85% до 115% от нормы и эта величина прямопропорциональна его изменённому здоровью. Видишь моба-переростка – сразу понимаешь, что завалить его будет несколько труднее. В то же время мобы-карланы будут отваливаться на раз.
begin 4nm_randomstatsshort donefloat statfloat coefif ( done == 1 )returnendifset stat to GetStrengthset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetStrength statset stat to GetEnduranceset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetEndurance statset stat to GetIntelligenceset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetIntelligence statset stat to GetWillpowerset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetWillpower statset stat to GetAgilityset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetAgility statset stat to GetSpeedset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetSpeed statset stat to GetLuckset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetLuck statset stat to GetMagickaset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetMagicka statset stat to GetFatigueset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetFatigue statset stat to GetHealthset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetHealth statset stat to GetScaleset coef to ( coef - 1 )set coef to ( coef * 0.75 )set coef to ( coef + 1 )set stat to ( stat * coef )setScale statset done to 1EndЛимит на обучения
Ограничитель обучений на 5 скиллпоинтов за уровень теперь не опционален, а вшит в мод.
Вы не согласны и хотите начитерить себе скиллпоинты? Тогда пропишите в консоли:
set 4nm_lessons to 0
Совместимость с МФР
Добавлена минимальная совместимость с геймплейным модулем Фуллрест-репака.
Подключите эти 2 патча, если играете с MFR_EVA.esm
4NM_EVA_Patch.ESP
4NM_MFR_Patch.ESP
Патч совместимости для ЕВЫ убирает излишнюю накрутку статов мобам и заменяет скрипт-рандомизатор на версию из ЧИМ-мода.
Это всё ещё патч минимальной совместимости: собственные статы мобов, новое оружие и броня, а также крафтинг из ЕВЫ не затронуты. Тут всё ещё непаханое поле для балансировки. Особенно удручает срафтинг – абсолютно имбанутые пушки с 60-70 дамага, уймой вместимости и безо всякого штрафа к скорости – это здесь обычное явление. Так что не рекомендую им пользоваться, лучше воспринимать весь крафтовый хлам и станки в качестве антуража. ТЕС – совершенно не те игры, где нужен крафт.
Скачать мод: -
Ооо, как же я намудохался с этим скамповым скриптом! КС явно не дружит со ступенчатыми elseif. Ну да ладно, дело сделано, второй в истории (после глючного СХ) плагин на классы в Муравинде готов!
Сам мега-скрипт:
Begin 4nm_class_startshort levelshort buttonshort controlfloat pointsif ( control == 0 )if ( points != 10 )set level to ( player->getlevel )set points to ( level * 0.1 )if ( GetJournalIndex C3_DestroyDagoth >= 50 )set points to ( points + 3 )endifif ( GetJournalIndex TR_SothaSil >= 100 )set points to ( points + 1 )endifif ( GetJournalIndex BM_WildHunt >= 100 )set points to ( points + 1 )endifif ( GetJournalIndex HH_WinCamonna >= 100 )set points to ( points + 1 )endifif ( GetJournalIndex HR_Archmaster >= 100 )set points to ( points + 1 )endifif ( GetJournalIndex HT_Archmagister >= 100 )set points to ( points + 1 )endifif ( GetJournalIndex TG_KillHardHeart >= 100 )set points to ( points + 1 )endifif ( GetJournalIndex FG_KillHardHeart >= 100 )set points to ( points + 1 )endifif ( GetJournalIndex MG_Guildmaster >= 100 )set points to ( points + 1 )endifif ( GetJournalIndex IL_Grandmaster >= 100 )set points to ( points + 1 )endifif ( GetJournalIndex TT_Assarnibibi >= 100 )set points to ( points + 1 )endifif ( GetJournalIndex MT_Grandmaster >= 100 )set points to ( points + 1 )endifif ( points >= 10 )set points to 10endifendifif ( points >= 3 )if ( "4nm_class" == 0 )messagebox "Вы больше не зеленый новичок и стали довольно сильны. Какой путь вы хотите избрать?", "Воин", "Маг", "Бродяга", "Мне надо подумать"set control to 1endifendifif ( points >= 6 )if ( "4nm_class" == 1 )messagebox "Вы достигли значительных высот. Каким путем вы продолжите идти к вершине?", "Воитель", "Боевой маг", "Скаут", "Мне надо подумать"set control to 2elseif ( "4nm_class" == 2 )messagebox "Вы достигли значительных высот. Каким путем вы продолжите идти к вершине?", "Заклинатель", "Боевой маг", "Шпион", "Мне надо подумать"set control to 3elseif ( "4nm_class" == 3 )messagebox "Вы достигли значительных высот. Каким путем вы продолжите идти к вершине?", "Вор", "Шпион", "Скаут", "Мне надо подумать"set control to 4endifendifif ( points == 10 )if ( "4nm_class" == 4 )messagebox "В своем могуществе вы сравнились с богами, а ваши подвиги будут воспеты в легендах. Какое место вы в них займете?", "Варлорд", "Паладин", "Спеллсворд", "Блейдмастер", "Варвар", "Герой", "Мне надо подумать"set control to 5elseif ( "4nm_class" == 5 )messagebox "В своем могуществе вы сравнились с богами, а ваши подвиги будут воспеты в легендах. Какое место вы в них займете?", "Паладин", "Спеллсворд", "Шаман", "Герой", "Искатель", "Мне надо подумать"set control to 6elseif ( "4nm_class" == 6 )messagebox "В своем могуществе вы сравнились с богами, а ваши подвиги будут воспеты в легендах. Какое место вы в них займете?", "Архимаг", "Спеллсворд", "Шаман", "Волшебник", "Найтблейд", "Искатель", "Мне надо подумать"set control to 7elseif ( "4nm_class" == 7 )messagebox "В своем могуществе вы сравнились с богами, а ваши подвиги будут воспеты в легендах. Какое место вы в них займете?", "Волшебник", "Найтблейд", "Трикстер", "Искатель", "Странник", "Мне надо подумать"set control to 8elseif ( "4nm_class" == 8 )messagebox "В своем могуществе вы сравнились с богами, а ваши подвиги будут воспеты в легендах. Какое место вы в них займете?", "Ассасин", "Найтблейд", "Трикстер", "Плут", "Блейдмастер", "Странник", "Мне надо подумать"set control to 9elseif ( "4nm_class" == 9 )messagebox "В своем могуществе вы сравнились с богами, а ваши подвиги будут воспеты в легендах. Какое место вы в них займете?", "Плут", "Блейдмастер", "Варвар", "Герой", "Странник", "Мне надо подумать"set control to 10endifendifendifif ( control == 1 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )set "4nm_class" to 1set "4nm_hpclassbonus" to 10player->addspell "4nm_class_01"elseif ( button == 1 )set "4nm_class" to 2set "4nm_hpclassbonus" to -10player->addspell "4nm_class_02"elseif ( button == 2 )set "4nm_class" to 3set "4nm_hpclassbonus" to 0player->addspell "4nm_class_03"endifendifif ( control == 2 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )set "4nm_class" to 4set "4nm_hpclassbonus" to 30player->removespell "4nm_class_01"player->addspell "4nm_class_04"elseif ( button == 1 )set "4nm_class" to 5set "4nm_hpclassbonus" to 10player->removespell "4nm_class_01"player->addspell "4nm_class_05"elseif ( button == 2 )set "4nm_class" to 9set "4nm_hpclassbonus" to 20player->removespell "4nm_class_01"player->addspell "4nm_class_09"endifendifif ( control == 3 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )set "4nm_class" to 6set "4nm_hpclassbonus" to -30player->removespell "4nm_class_02"player->addspell "4nm_class_06"elseif ( button == 1 )set "4nm_class" to 5set "4nm_hpclassbonus" to 10player->removespell "4nm_class_02"player->addspell "4nm_class_05"elseif ( button == 2 )set "4nm_class" to 7set "4nm_hpclassbonus" to -10player->removespell "4nm_class_02"player->addspell "4nm_class_07"endifendifif ( control == 4 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )set "4nm_class" to 8set "4nm_hpclassbonus" to 0player->removespell "4nm_class_03"player->addspell "4nm_class_08"elseif ( button == 1 )set "4nm_class" to 7set "4nm_hpclassbonus" to -10player->removespell "4nm_class_03"player->addspell "4nm_class_07"elseif ( button == 2 )set "4nm_class" to 9set "4nm_hpclassbonus" to 20player->removespell "4nm_class_03"player->addspell "4nm_class_09"endifendifif ( control == 5 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )set "4nm_class" to 10set "4nm_hpclassbonus" to 50player->removespell "4nm_class_04"player->addspell "4nm_class_11"elseif ( button == 1 )set "4nm_class" to 11set "4nm_hpclassbonus" to 30player->removespell "4nm_class_04"player->addspell "4nm_class_11"elseif ( button == 2 )set "4nm_class" to 12set "4nm_hpclassbonus" to 0player->removespell "4nm_class_04"player->addspell "4nm_class_12"elseif ( button == 3 )set "4nm_class" to 20set "4nm_hpclassbonus" to 30player->removespell "4nm_class_04"player->addspell "4nm_class_20"elseif ( button == 4 )set "4nm_class" to 21set "4nm_hpclassbonus" to 50player->removespell "4nm_class_04"player->addspell "4nm_class_21"elseif ( button == 5 )set "4nm_class" to 22set "4nm_hpclassbonus" to 20player->removespell "4nm_class_04"player->addspell "4nm_class_22"endifendifif ( control == 6 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )set "4nm_class" to 11set "4nm_hpclassbonus" to 30player->removespell "4nm_class_05"player->addspell "4nm_class_11"elseif ( button == 1 )set "4nm_class" to 12set "4nm_hpclassbonus" to 0player->removespell "4nm_class_05"player->addspell "4nm_class_12"elseif ( button == 2 )set "4nm_class" to 13set "4nm_hpclassbonus" to -30player->removespell "4nm_class_05"player->addspell "4nm_class_13"elseif ( button == 3 )set "4nm_class" to 22set "4nm_hpclassbonus" to 20player->removespell "4nm_class_05"player->addspell "4nm_class_22"elseif ( button == 4 )set "4nm_class" to 23set "4nm_hpclassbonus" to -20player->removespell "4nm_class_05"player->addspell "4nm_class_23"endifendifif ( control == 7 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )set "4nm_class" to 14set "4nm_hpclassbonus" to -50player->removespell "4nm_class_06"player->addspell "4nm_class_14"elseif ( button == 1 )set "4nm_class" to 12set "4nm_hpclassbonus" to 0player->removespell "4nm_class_06"player->addspell "4nm_class_12"elseif ( button == 2 )set "4nm_class" to 13set "4nm_hpclassbonus" to -30player->removespell "4nm_class_06"player->addspell "4nm_class_13"elseif ( button == 3 )set "4nm_class" to 15set "4nm_hpclassbonus" to -50player->removespell "4nm_class_06"player->addspell "4nm_class_15"elseif ( button == 4 )set "4nm_class" to 16set "4nm_hpclassbonus" to -30player->removespell "4nm_class_06"player->addspell "4nm_class_16"elseif ( button == 5 )set "4nm_class" to 23set "4nm_hpclassbonus" to -20player->removespell "4nm_class_06"player->addspell "4nm_class_23"endifendifif ( control == 8 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )set "4nm_class" to 15set "4nm_hpclassbonus" to -50player->removespell "4nm_class_07"player->addspell "4nm_class_15"elseif ( button == 1 )set "4nm_class" to 16set "4nm_hpclassbonus" to -30player->removespell "4nm_class_07"player->addspell "4nm_class_16"elseif ( button == 2 )set "4nm_class" to 17set "4nm_hpclassbonus" to -20player->removespell "4nm_class_07"player->addspell "4nm_class_17"elseif ( button == 3 )set "4nm_class" to 23set "4nm_hpclassbonus" to -20player->removespell "4nm_class_07"player->addspell "4nm_class_23"elseif ( button == 4 )set "4nm_class" to 24set "4nm_hpclassbonus" to 0player->removespell "4nm_class_07"player->addspell "4nm_class_24"endifendifif ( control == 9 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )set "4nm_class" to 18set "4nm_hpclassbonus" to 0player->removespell "4nm_class_08"player->addspell "4nm_class_18"elseif ( button == 1 )set "4nm_class" to 16set "4nm_hpclassbonus" to -30player->removespell "4nm_class_08"player->addspell "4nm_class_16"elseif ( button == 2 )set "4nm_class" to 17set "4nm_hpclassbonus" to -20player->removespell "4nm_class_08"player->addspell "4nm_class_17"elseif ( button == 3 )set "4nm_class" to 19set "4nm_hpclassbonus" to 20player->removespell "4nm_class_08"player->addspell "4nm_class_19"elseif ( button == 4 )set "4nm_class" to 20set "4nm_hpclassbonus" to 30player->removespell "4nm_class_08"player->addspell "4nm_class_20"elseif ( button == 5 )set "4nm_class" to 24set "4nm_hpclassbonus" to 0player->removespell "4nm_class_08"player->addspell "4nm_class_24"endifendifif ( control == 10 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )set "4nm_class" to 19set "4nm_hpclassbonus" to 20player->removespell "4nm_class_09"player->addspell "4nm_class_19"elseif ( button == 1 )set "4nm_class" to 20set "4nm_hpclassbonus" to 30player->removespell "4nm_class_09"player->addspell "4nm_class_20"elseif ( button == 2 )set "4nm_class" to 21set "4nm_hpclassbonus" to 50player->removespell "4nm_class_09"player->addspell "4nm_class_21"elseif ( button == 3 )set "4nm_class" to 22set "4nm_hpclassbonus" to 20player->removespell "4nm_class_09"player->addspell "4nm_class_22"elseif ( button == 4 )set "4nm_class" to 24set "4nm_hpclassbonus" to 0player->removespell "4nm_class_09"player->addspell "4nm_class_24"endifendifset control to 0StopScript "4nm_class_start"End -
Зачем существуют скрипты болезней, которые висят на заражённых существах типа этого?
Begin diseaseAscended
DontSaveObject
if ( CellChanged == 0 )
return
endif
if ( GetBlightDisease == 0 )
AddSpell "ash woe blight"
AddSpell "black-heart blight"
AddSpell "chanthrax blight"
AddSpell "ash-chancre"
endif
End
Они добавляют прописанные болезни если существо не поражено болезнью. Но ведь все заражённые существа и так изначально имеют в своём списке заклианий свои болезни. Зачем тогда скрипт, висящий мёртвым грузом? -
Вшитые в игру классы никуда не годны. Но даже если снабдить оригинальные классы дополнительным скриптовым набором абилок и даже если поменять для них в большинстве случаев идиотский набор главных и важных навыков, это существенно ударит по свободе отыгрыша. Нет уж! Конечно же истинный билдостроитель всегда создаёт свой собственный класс и отыгрывает идеально созданную под себя роль. Но тогда класс героя будет лишён всяческой геймплейной поддержки, да к тому же и никакие скрипты его не подхватят чтобы улучшить геймплей модом. Что же с этим делать? Создавать собственную скриптовую систему классов!
В идеале я хотел бы видеть масштабное древо пассивных умений как в ПоЕ или карту созвездий из Грим Дауна. Но этим мечтам не суждено сбыться, ибо убогий движок Моррки с его напрочь костыльным скриптовым языком в жизни не переварит подобных издевательств. Придётся искать систему попроще. А как насчёт того, что мы уже видели в Масс Эффект Андромеде и Амалуре? А вот такую систему Моррка очень даже потянет! К созданию именно такого мода я и приступил.
1 – Воин
2 – Маг
3 – Бродяга
4 – Воитель
5 – Боевой маг
6 – Заклинатель
7 – Шпион
8 – Вор
9 – Скаут
10 – Варлорд
11 – Паладин
12 – Спеллсворд
13 – Шаман
14 – Архимаг
15 – Волшебник
16 – Найтблейд
17 – Трикстер
18 – Ассасин
19 – Плут
20 – Блейдмастер
21 – Варвар
22 – Герой
23 – Искатель
24 – Странник
Стрелками показано с какого класса на какой можно перейти. Выбирайте свой путь мудро!
Первые 3 – начальные классы-архетипы. Это первая ступень развития Нереварина, получаемая им на 3 уровне Легендарности.
С 4 по 9 идут классы второго тира, они открываются при достижении 6 очков легендарности. Здесь возможно как углубление в выбранном архетипе, так и принятие комбинированного класса.
С 10 по 24 идут высшие классы третьего тира. Они открываются при достижении 10 очков Легендарности и предоставляют очень широкие возможности выбора своего уникального пути.
22, 23 и 24 – небольшая группа универсальных авантюристских классов третьего тира. Для тех, кто любит всё в одном. Разница между ними в небольшом перекосе в сторону воина, мага или бродяги.
Очки Легендарности даются за подвиги и легендарные свершения. По одному очку за каждые 10 уровней, +3 за победу над Дагот Уром, +1 за победу над Альмалексией, +1 за победу над Гирцином. Ещё по одному очку за становление главой каждой гильдии, организации или Великого Дома (исключения – Имперский Культ и ВИК). Максимум очков Легендарности = 10.
Пассивки архетипа Воина:
+ к максимуму здоровья
сопротивления к стихиям и яду
восстановление здоровья
восстановление стамины
Пассивки архетипа Мага:
– к максимуму здоровья
множитель маны
восстановление маны
сопротивление магии
поглощение заклинаний
отражение заклинаний
Пассивки архетипа Бродяги:
атака
уклонение
лёгкость
прыжки
сопротивление параличу
Однотипные классы всё более высоких тиров (например, воин-воитель-варлорд) обладают аналогичным набором пассивных бонусов, но с большей амплитудой. Комбинированные классы соответсвенно обладают пассивками, присущими сразу двум или всем трём архетипам, но в куда меньшем объёме нежели чистый класс.
Полный список пассивок каждого класса смотрите в экселевской таблице. Внимательно изучите её, чтобы выбрать лучший класс под свой геймплей.
Классы готовы и вшиты в глобальный геймплейный мод.
-
Там вообще костыль в виде запрета обучаться в ночное время.
____________________
Короче, я вычленил этот баг, он действительно образуется при переходе через 12 часов. Я заменил строчку
set hour2 to ( 24 + gamehour - hour1 )
на
set hour2 to ( 26 + gamehour - hour1 )
и баг исчез.
Я понятия не имею, почему так просходит, наверное это косяк исчисления времени в КС.
Вот новый плагин
Кроме того, теперь плагин поддерживает удобное читерение. Хотите вернуть возможность обучаться, когда истратили все скиллпоинты - измените через консоль глобальную переменную уже истраченных уроков:
set 4nm_lessons to 0
-
А вы можете засечь и указать здесь время в игре на момент незачёта тренировки?
Возможно что-то не так с этой секцией:
set hour2 to ( gamehour - hour1 )if ( hour2 < 0 )set hour2 to ( 24 + gamehour - hour1 )endifif hour2 >= 2set "4nm_lessons" to ( "4nm_lessons" + 1 ) -
Выгрузить всё в эксель и отфильтровать новое - это лишь первый круг ада, который предстоит пройти. Потом предстоит мудохаться как проклятый, вычисляя и проставляя все значения для каждой шмотки. А если ещё и делать в стиле Чифа, редактируя эксельные формулы и назначая расчёты по ним для каждой клетки - то лучше сразу насадиться на Муатру
-
Совместимость с МФР будет на грани невозможного, учитывая, сколько хлама туда добавлено. (я тоже хотел запилить совместимость, но как зашёл в КС - руки сразу опустились)
-
Есть ли функция для округления чисел до целого? Например, есть 2.7398, нужно сделать из него 2
Если в этом языке нет функции floor, то разрабатывали ли уже простейший алгоритм такого округления?
-
Ну как тебе сказать, я только что протестил загрузку сейва и с эффектом повышения здоровья и с эффектом понижения - фильтр работает. Всё ещё не понимаю, что ты имел в виду про "эффект не работает".
-
Я как раз и взял эту функцию из МФСД, нафига было расписывать, если она не работает? Кстати, та же функция применена и в вышеприведённом скрипте под спойлером.
Секта свидетелей святого Экселя
в TES III: Разработка и публикация плагинов
Опубликовано · Изменено пользователем Dagot_Prolaps
Я отфильтровал все новые оружия, броню, одежду и существ из МФР и поместил всё это в эксель.
Теперь вы можете настроить их параметры под себя и создать свой ребаланс.
Все параметры рассчитываются Экселем автоматически – все формулы я написал. Вам остаётся только вручную прописать материал шмоток и тип (только для оружия). А потом придумать и заполнить коэффициенты для нововведённых материалов (также можно изменить коэфы уже существующих материалов и типов).
Например, хотим чтоб крафтовый даэдрик был лучше обычного.
Создаём на странице коэфов строчку Даэдрик2 и прописываем её параметры, а потом прописываем Даэдрик2 в материал нужных крафтовых шмоток – теперь они будут с параметрами для Даэдрик2, в отличие от стандартных даэдрических шмоток, у которых материал просто Даэдрик.
Подробные инструкции по заполнению таблиц, эксельным формулам и созданию своего ребаланса здесь.