Перейти к содержимому

Завершается приём предложений о награждениях за 2018 год! Спешите высказаться в соответствующей теме!

Dagot_Prolaps

Dagot_Prolaps

Дата регистрации: 24 дек 2017
Онлайн Активность: Сегодня, 01:53
****-

4NM_MAGIC

19 Август 2019 - 02:59

47095-1566215229-159012699.jpeg

 

 

https://www.nexusmod...wind/mods/47095

 

 

Мощь вредоносной магии теперь имеет нелинейную формулу и скалируется сразу от множества параметров как заклинателя так и его цели. Влияет на героя, всех нпс и существ.

 

 

 

 

Требует МГЕ, МВСЕ и МСР

https://www.nexusmod...wind/mods/41102
https://nullcascade....se/mwse-dev.zip

 

 

 

Нелинейная формула.

 

Универсальная формула сопротивления вредоносным эффектам магии теперь выглядит так:

http://yotx.ru/#!1/3...1uMx63Li939rX0B

 

Чем больше вы копите сопротивлений из всех источников, тем меньше их суммарное реальное влияние.

Так, 50% сопротивлений даст вам только 40% реальной защиты

100% = 66.6%

120% = 75%

150% = 85%

200% = иммунитет

Свыше 200% = поглощение и исцеление!

 

Формула суммарного сопротивления = нормальное сопротивление + бонусы цели – мощь заклинателя + усталость заклинателя

 

Сопротивления ниже нуля не скалируются – их формула влияния на реальную защиту линейная.

 

 

Урон стихиями.

 

Чем выше воля заклинателя и его навыки разрушения и изменения, тем больше наносимый его стихийными заклинаниями урон.

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

 

 

Урон ядом.

 

Чем выше воля заклинателя и его навыки разрушения и восстановления, тем больше наносимый его ядовитыми заклинаниями урон.

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

 

 

Урон магией и сила магических дебаффов.

 

Чем выше воля заклинателя и его навыки разрушения и мистицизма, тем выше мощь его чистой вредоносной магии.

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

 

 

Синергии.

 

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

Как известно, лучшие отравители – это доктора! Чем лучше маг разбирается в биологии организма и способах влияния на неё посредством школы Восстановления, тем более смертоносные яды он способен порождать своей магией.

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

Общий боевой дух, присущий воинам (бонус атаки) также немного увеличит и урон от заклинаний боевых магов.

Развивайте свои магические навыки многосторонне чтобы творить по-настоящему мощные боевые заклинания!

 

 

Иммунитеты и поглощения урона.

 

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

 

Существа с гигантским сопротивлением своей стихии (например, атронахи) будут лечиться от вражеских заклинаний своей стихии вместо получения урона.

Если же вы сами умудритесь скопить свыше 200% суммарного сопротивления стихии или яду, то тоже будете восполнять своё здоровье вместо получения урона!

 

 

Известные проблемы:

* Пока что не затрагивает магию дезинтеграции и паралича. В будущем будет исправлено.

* Не влияет на магию с положительными эффектами. Возможно в будущем будет найден способ улучшить и этот аспект магии.

 

 

 

 

 

https://www.nexusmod...wind/mods/47095


Антикурвак-мод

09 Август 2019 - 11:24

47062-1565381332-1269770086.jpeg

 

 

 

 

https://www.nexusmod...wind/mods/47062

 

 

Больше никаких обмазываний 100500 зельями - пузантос не резиновый! Однако пить тоже надо уметь. Навык алхимии позволит уставать от пития чуть меньше, выносливость значительно увеличит объём, который вы можете в себя влить, а скорость позволит делать это почти нонстопом.

 

 

Скорость бухания = 10 - (Скорость / 20) секунд, но не ниже 5.

Заполнение пуза за 1 порцию = 50 - (Алхимия / 10)

Объём пуза до переполнения = 50 + (Выносливость / 2), но не выше 100.

 

Требует МВСЕ.


4NM_COMBAT

08 Август 2019 - 09:44

47056-1565287554-1928543205.jpeg

 

 

https://www.nexusmod...wind/mods/47056

 

Полная ребалансировка системы боя. По-настоящему динамичные и реалистичные битвы со своими особенностями для каждого оружия и разными стилями игры.

 

 

Требует последнюю версию MWSE, MGE и MCP.

https://www.nexusmod...wind/mods/41102

http://nullcascade.c...se/mwse-dev.zip

 

 

Нововведения:

Все изменения влияют и на героя, и на npc, и на всех существ.

 

1) 3 боевых стиля.

 

1 – Агрессивный. Нужно двигаться вперёд (при этом можно двигаться и в сторону).

+ наносимый критический урон

 

2 – Проворный. Нужно двигаться в сторону, но при этом нельзя двигаться вперёд (назад можно).

+ шанс увернуться от атаки

 

3 – Оборонительный. Нужно двигаться назад, но при этом нельзя двигаться в сторону.

– получаемый урон

 

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

 

 

2) Формула шанса на попадание изменена. 100% шанса попасть по врагу почти в любом случае.

 

+ шанс попасть:

ловкость

 

+ шанс увернуться:

ловкость при проворном стиле боя

эффект хамелеона

эффект святилища

слепота атакующего

 

 

3) Глобальная формула урона изменена.

Базовый урон = урон оружия * прочность оружия * процент замаха * сила под влиянием GMST

 

Затем базовый урон уменьшается броней противника.

Вторичный урон = урон * урон / (урон + броня)

 

Далее вторичный урон претерпевает множество изменений:

 

+ наносимый урон:

уровень навыка оружия

бонус атаки

особенности используемого оружия при выполнении определённых условий

 

– наносимый урон:

низкая стамина

оборонительный стиль боя противника: ловкость, выносливость и эффект святилища

 

 

4) Теперь можно наносить критические удары в обычном бою.

 

+ шанс крита:

уровень навыка оружия

ловкость

удача

бонус атаки

 

– шанс крита:

высокая стамина противника

 

+ наносимый критический урон:

небольшой рандом

значительный рандом при агрессивном стиле боя

бонус атаки

 

– получаемый критический урон:

выносливость

удача

броня

 

 

5) У каждого оружия есть свои сильные стороны. Чем выше навык владения оружием, тем больше они проявляются.

 

Длинные клинки. Комбо-удары! Каждый третий удар наносит намного больший урон. Но время между атаками для успешного комбо-приёма сильно ограничено (1 секунда). Почувствуйте ритм боя! Это сбалансированное оружие, которое годится для любых ситуаций.

 

Топоры. Ярость берсерка! С каждым новым ударом наносимый урон увеличивается, но бездействие ведёт к спаду ярости. Годится для затяжных битв.

 

Булавы и молоты. Пробой брони! Игнорирует часть брони противника при попадании по защищённой части тела. Годится против сильно бронированных тяжеловесов.

Также удары булавами и молотами имеют небольшой шанс стана противника на 0.5 секунды.

 

Короткие клинки. Добивания! Чем меньше у противника здоровья, тем больше наносимый урон.  Выбор ассасина.

 

Копья и алебарды. Загнанная жертва! Чем меньше у противника стамины, тем больше наносимый урон. Выбор охотника, предпочитающего измотать свою добычу перед тем как нанести точный финальный удар.

 

Посохи. Мощь разума! Чем больше у вас маны, тем больше наносимый урон. Выбор настоящего мага. Или боевого чрезмерно одухотворённого монаха :)

 

Луки, арбалеты и метательное оружие. Снайперский выстрел! Чем больше расстояние до вашей цели, тем больше наносимый урон.

 

Кулачный бой. Здесь и так всё в порядке. MCP добавляет влияние навыка на наносимый урон стамине, а затем и здоровью.

 

Щиты. Контрудар! У вас будет меньше секунды после успешного блокирования чтобы контратаковать и нанести намного больший урон. Для этого вам придётся очень точно рассчитывать момент атаки.

 

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

 

 

6) Мод состоит из одного файла lua, написанного очень аккуратным кодом. Вы можете использовать его как пример для обучения модостроению для MWSE.

Открыв файл в блокноте, вы легко сможете отредактировать формулы

Чтобы отключить сообщения – пропишите в самом начале:

local messages = false

 

Вот список основных формул, влияющих на геймплей:

 

local koefskill = weaponSkill / 500

local koefbonus = e.attacker.attackBonus / 200

local koefstam = (1 - (e.attacker.fatigue.current / e.attacker.fatigue.base)) / 2

 

if ((weaponSkill + e.attacker.agility.current + e.attacker.luck.current) / 10) + (e.attacker.attackBonus / 5) - ((e.mobile.fatigue.current / e.mobile.fatigue.base) * 20) >= math.random(100) then crit = 1 else crit = 0 end

if e.attacker.isMovingForward then critbonus = 1 else critbonus = 0 end

local koefcrit = ((math.random(30) / 100) + ((math.random(50) / 100) * critbonus) + (e.attacker.attackBonus / 200) - ((e.mobile.endurance.current + e.mobile.luck.current + targetarmor) / 1000)) * crit

if koefcrit < 0 then koefcrit = 0 end

 

if e.mobile.isMovingBack and e.mobile.isMovingLeft == false and e.mobile.isMovingRight == false then defbonus = 1 else defbonus = 0 end

local koefdef = defbonus * (e.mobile.agility.current + e.mobile.endurance.current + e.mobile.sanctuary) / 1000

if koefdef > 0.3 then koefdef = 0.3 end

if counterstrike == 1 and e.attackerReference == tes3.player then koefcounter = (e.attacker.block.current / 200) else koefcounter = 0 end

 

e.damage = damageStart * (1 - koefstam + koefskill + koefbonus + koefperk + koefcrit - koefdef + koefcounter)

 

unarmed creature bonus

koefperk = (e.attacker.strength.current / 200) + ((1 - (e.attacker.health.current / e.attacker.health.base)) * (weaponSkill / 200))

 

ranged hit

koefperk = e.attackerReference.position:distance(e.reference.position) * weaponSkill / 2000000

 

axe

koefperk = ragecharge[e.attackerReference.id].charge * weaponSkill / 2000

 

spear

koefperk = (1 - (e.mobile.fatigue.current / e.mobile.fatigue.base)) * weaponSkill / 200

 

staff

koefperk = (e.attacker.magicka.current / e.attacker.magicka.base) * weaponSkill * 0.003

 

blunt

koefperk = targetarmor * weaponSkill / 30000

 

long blade

koefperk = weaponSkill / 100

 

short blade

koefperk = (1 - (e.mobile.health.current / e.mobile.health.base)) * weaponSkill / 200

 

e.hitChance = 100 + (e.attackerMobile.agility.current / 2) - e.attackerMobile.blind - (e.targetMobile.sanctuary / 2) - (e.targetMobile.chameleon / 2) - hitreduction

if ((e.targetMobile.isMovingLeft or e.targetMobile.isMovingRight) and (e.targetMobile.isMovingForward == false)) then

hitreduction = e.targetMobile.agility.current / 2


Морровинд и LUA-скрипты

30 Июль 2019 - 02:29

upl_1519723828_772.png

 

 

Шёл 2019 год. Очередное переиздание Скайрима на микроволновке прекрасно продаётся. А что же Шинд, его предшественник аж 17-летней давности? Так и он тоже живее всех живых! Почему? Благодаря модам, разумеется. Так уж сложилось исторически: ТЕС – это моды, а моды – это ТЕС, и одно без другого немыслимо.

Вы помните свои первые впечатления, когда узнали о существовании КС и открыли редактор? Это что же, все данные игры аккуратно рассортированы по таблицам, и я могу их менять? Как сам того пожелаю?! Я что, теперь разработчик игор? Ооо дааа!

Нужен убер-меч? Пожалуйста! А может личный домик в Балморе? Заверните мне два! А что это тут за колонка «scripts»? Ну, if – это если, это понятно, тааак падажжите… ОГО! Так вот почему Фаргот крадётся к своему любимому пню! Так это что получается, я теперь не только гейм-дизайнер, но ещё и погроммист?!

И ЧИМ был познан… И весь Аурбис разверзся пред волей нового Демиурга! Целые квестовые линейки, компаньоны, перки, крафт… да всё что угодно! Скрипты разрастались, превращаясь в монструозные громадины. Иногда многоэтажки из 30 if-elseif рушились под тяжестью собственного веса, а если не рушились, то подвешивали двемеропекарню секунд на 5. Ох, на какие только ухищрения не приходилось идти молодым ЧИМанутым Демиургам дабы привести свою Волю в исполнение! Узрев их, поездоголовый человек немедленно разогнался бы до околосветовой скорости от осознания своей непомерной нормальности и улетел бы за пределы Нирна, прямо вслед за двемерами.

О, эврика! Долго ломал голову и придумал наконец, как отследить одно очень заковыристое событие! Сделаю я это по звукам, издаваемым жопками скрибов, долбящих ими по камням. Отслеживать, правда, придётся нонстопом, а потом проверять ещё полсотни сторонних условий, а скрибов в округе развелось нынче немало! И все с жопами! И все непрерывно стучат! Ах да, и ещё всё тело скрипта выполнялось каждый фрейм, а число самих фреймов у обладателей особо мощных двемеропекарен доходило до 15! Только вдумайтесь, какие вычислительные мощности расходовались вхолостую вместо того чтобы вычислять биткойн!

MWSE оказался ложкой скуумы в бочке скаттла. Привнеся кучу новых функций (а вместе с ними и багов), он позволил особо смышлёным Демиургам вывести своё постижение ЧИМа на новый уровень и гульнуть на широкую ногу. Но скуумовая эйфория была недолгой. Чего не скажешь о послевкусии после многочисленных бочек со скаттлом. Да, у всего в этом мире есть предел. И предел скриптового языка КС был давно достигнут.

Но хвала Троим! – всё изменилось с приходом MWSE 2.1. Ни говоря ни слова больше, ЧИМанутый Демиург вынул костыль из своей задницы… и создал папку

Data Files\MWSE\mods\MyAwesomeMod

 

Затем он создал в ней пустой текстовый файл main.txt и сменил его расширение на аббревиатуру языка Истинных Богов Кодинга – lua

Получившаяся скрижаль main.lua по-прежнему прекрасно открывалась блокнотом, Демиург улыбнулся – ему не придётся страдать фигнёй с редакторами и компиляцией. Но пока что перед ним был чистый холст. Уже обладая опытом в постижении Языков Богов, Демиург понял, что быстрее всего это выйдет сделать на готовом примере. Открывая и изучая файлы других творцов, он чувствовал себя культистом карго в китайской комнате. И тут и там встречались интуитивно понятные элементы, но что с ними делать и как сложить в единую картину? Он мог изменить цифры в готовых функциях, и поначалу этого было достаточно. Однако ему хотелось большего осознания того, что он делает и зачем.

 

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

local function MyAwesomeFunction(e)

end

local function initialized(e)
event.register(" ", MyAwesomeFunction)
end

event.register("initialized", initialized)

Суть была такова:

Игра не будет прокручивать всё тело скрипта каждый фрейм. Двемеропекарня вздохнула свободно. От одного осознания этого факта число кадров в секунду сразу скакнуло аж до двадцати! В луа игра только регистрирует конкретные события – эвенты. И каждый раз когда указанное событие происходит, игра выполнит указанную функцию, в данном случае – MyAwesomeFunction. Да, названия и наполнение функций можно придумывать самому. Сейчас наполнение функции пустует, да и с отслеживаемым событием мы не определились. Для каждого эвента есть своё зарезервированное название, которое нужно знать точно. Так, посмотрим, что у нас в меню?

https://mwse.readthe.../lua/event.html

 

Неплохо, да? О, что это у нас тут? calcHitChance. Это же то о чём я думаю? Решено! Сколько себя помнил, всякие зумерки всегда плевались от боевой системы Шинда, не в силах попасть по грязекрабу даже 1 раз из 10. В этом даже было некоторое очарование, но быть может скайримодети в чём-то правы, и система попаданий действительно нуждается в починке?

Итак. У каждого эвента есть определённый список игровых данных. Что же может предложить нам эвент calcHitChance? Смотрим:

attackerMobile

targetMobile

target

attacker

hitChance

Ридонли, ридонли, ридонли… о! hitChance не ридонли! Да, это означает, что его можно менять! Вот мы и подошли к сути работы с эвентами – граалю MWSE 2.1 – перехват игровых данных событий и изменение этих данных на свой вкус в собственноручно составляемых функциях! Оператор присвоения значения переменной – это знак равенства. Ну, сколько забабахаем? Не будем мелочиться! 100% шанса, 10 попаданий по грязекрабу из 10!

Теперь наш манускрипт выглядит так, и он УЖЕ в полностью рабочем состоянии!

local function MyAwesomeFunction(e)
e.hitChance = 100
end

local function initialized(e)
event.register("calcHitChance", MyAwesomeFunction)
end

event.register("initialized", initialized)

Да, вот так просто! Скрипт перехватил игровые данные о шансе на попадание и изменил их. И не один раз – а всегда. Функция вызывается при каждом событии удара, и теперь при каждом ударе шанс будет выставляться на сотку.

А может, не стоит быть столь радикальными? Сотня шанса это хоть и прекрасно, и мы одной строчкой кода почти превратили Шинд в Подливион, но всё же – не пропадать ведь шарму промахов в упор? Особенно если этот механизм можно довести до ума.

 

Изменим наш код следующим образом:

local function MyAwesomeFunction(e)
  local hitreduction
  if ((e.targetMobile.isMovingLeft or e.targetMobile.isMovingRight) and (e.targetMobile.isMovingForward == false)) then -- если цель движется влево или вправо и при этом не движется вперёд
              hitreduction = e.targetMobile.agility.current / 2
  else
              hitreduction = 0
  end
  e.hitChance = 100 + (e.attackerMobile.agility.current / 2) - e.attackerMobile.blind - (e.targetMobile.sanctuary / 2) - (e.targetMobile.chameleon / 2) - hitreduction
end

local function initialized(e)
event.register("calcHitChance", MyAwesomeFunction)
end

event.register("initialized", initialized)

Что всё это значит? Попробуем разобраться.

 

* Сразу бросаются в глаза уже знакомые нам по esscript блоки if-end. else и elseif тоже в деле. Что изменилось? После условия обязательно надо прописывать ещё и оператор then.

 

* Комменты идут после сдвоенного минуса --

 

* С пробелами и скобками тут куда больше вольностей. А вот регистр букв важен – его надо чётко соблюдать.

 

* Операторы and и or, два барата-бубенца кастрированного хаджита вернулись на своё законное место! Больше не надо громоздить монструозные мгногоэтажки. Вообще, в луа как в полноценном языке есть много фич, недоступных ущербному esscript. И таймеры, боже, настоящие таймеры! Как же их не хватало в КС!

 

* Нужна своя переменная? Провозгласите её с помощью волшебного слова local. Так мы прописали local hitreduction и ввели переменную hitreduction. Она будет доступна скрипту только в пределах той функции или блока if-end, в котором она была провозглашена. Так что если вы хотите, чтобы ваши локальные переменные были доступны для всего скрипта – провозгласите их в самом-самом начале файла.

 

* А что это за вездесущие буковки e? В MWSE для Шинда есть очень много зарезервированных названий игровых данных. Многие данные представляют собой целые базы данных. Сначала пишем название базы данных, затем точка без пробелов, затем опять же без пробелов название переменной внутри этой базы, причём сама эта переменная в свою очередь тоже может оказаться базой данных со своими переменными внутри. Это как путь к файлам в многочисленных папках. Укажите весь путь через точки.

Так e – это база данных всего события. В нашем примере, события расчёта шанса на попадание. Какие переменные есть внутри этой базы данных? Мы их уже видели:

attackerMobile

targetMobile

target

attacker

hitChance

Нам пока нужно знать что в этом конкретном событии attackerMobile означает атакующего, targetMobile означает цель атаки, а hitChance – собственно сам шанс на попадание.

Нужно нам узнать, сколько у атакующего текущая ловкость – прописываем:

e.attackerMobile.agility.current

Нужно узнать, сколько у защищающегося эффекта светоча – прописываем:

e.targetMobile.sanctuary

Где же посмотреть все зарезервированные имена баз данных и их содержимое? Для мобильного актёра (коим и являются наши e.attackerMobile и e.targetMobile) например здесь:

https://mwse.readthe...obileActor.html

А для остальных типов данных – здесь:

https://mwse.readthe...t/lua/type.html

 

Теперь, зная всё это, мы можем прочесть скрипт и понять, что мы сотворили. Сначала проверили, движется ли защищающийся влево или вправо и не движется ли он при этом вперёд? Если да, то присвоили созданной нами переменной hitreduction значение половины от текущей ловкости защищающегося. А если нет, то присвоили hitreduction 0.

Потом вычисляем сам шанс на попасть. Взяли 100%, прибавили половину от текущей ловкости нападающего, отняли величину слепоты нападающего, отняли половину от величины светоча и хамелеона защищающегося, и наконец отняли величину нашей переменной hitreduction. Вуаля! Теперь очень ловкий персонаж получает нехилый шанс уклониться от атаки, если будет правильно двигаться. Светоч и хамелеон защищающегося, а также слепота и ловкость нападающего так же окажут эффект.

 

Вообще-то вы можете придумать свою формулу, поставив зависимость шанса на попадание от почти чего-угодно, хоть от погоды на Массере. Доступных событий множество – вы можете легко изменять наносимый урон, параметры объектов и актёров, раздавать и удалять предметы и заклинания, менять прирост опыта в навыках, разрешать и запрещать использование предметов, отслеживать состояние боя, сохранения, загрузку, нажатие определённых кнопок и многое, многое другое… Особо искушённые творцы сумеют изменить интерфейс, создавать собственные продвинутые меню, добавлять новые навыки и даже новые магические эффекты! Открывающиеся возможности просто поразительны.

 

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

https://www.nexusmod...wind/mods/47056

https://www.nexusmod...wind/mods/47035

https://www.nexusmod...wind/mods/47062

Если удастся – то вы уже освоили достаточно и теперь можете сотворить что-то своё.

 

Так сделайте это и Живите в Своём Собственном Благословлённом Мире, который Сами и Создали!


Next Generation Combat

21 Июль 2019 - 06:26

https://www.nexusmod...tab=description

 

Улучшатель боя для МВСЕ, основан на луа-скриптах.

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


Top.Mail.Ru