Перейти к содержанию

Рекомендуемые сообщения

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

В идеале я хотел бы видеть масштабное древо пассивных умений как в ПоЕ или карту созвездий из Грим Дауна. Но этим мечтам не суждено сбыться, ибо убогий движок Моррки с его напрочь костыльным скриптовым языком в жизни не переварит подобных издевательств. Придётся искать систему попроще. А как насчёт того, что мы уже видели в Масс Эффект Андромеде и Амалуре? А вот такую систему Моррка очень даже потянет! К созданию именно такого мода я и приступил.

 

j9qU3lOyLPs.jpg

 

 

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.

 

Пассивки архетипа Воина:

+ к максимуму здоровья

сопротивления к стихиям и яду

восстановление здоровья

восстановление стамины

 

Пассивки архетипа Мага:

– к максимуму здоровья

множитель маны

восстановление маны

сопротивление магии

поглощение заклинаний

отражение заклинаний

 

Пассивки архетипа Бродяги:

атака

уклонение

лёгкость

прыжки

сопротивление параличу

 

 

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

 

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

Классы готовы и вшиты в глобальный геймплейный мод.

Изменено пользователем Dagot_Prolaps
Ссылка на комментарий
Поделиться на другие сайты

Да, или например как из Скаута и Боевого Мага выходит Варлорд. Но тут я думаю, что проблема в названии классов. Вроде бы система выглядит интересно, но нужно увидеть реализацию.
Ссылка на комментарий
Поделиться на другие сайты

Ооо, как же я намудохался с этим скамповым скриптом! КС явно не дружит со ступенчатыми elseif. Ну да ладно, дело сделано, второй в истории (после глючного СХ) плагин на классы в Муравинде готов!

 

Сам мега-скрипт:

 

Begin 4nm_class_start
 
short level
short button
short control
float points
 
if ( 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 )
endif
 
if ( GetJournalIndex TR_SothaSil >= 100 )
set points to ( points + 1 )
endif
 
if ( GetJournalIndex BM_WildHunt >= 100 )
set points to ( points + 1 )
endif
 
if ( GetJournalIndex HH_WinCamonna >= 100 )
set points to ( points + 1 )
endif
 
if ( GetJournalIndex HR_Archmaster >= 100 )
set points to ( points + 1 )
endif
 
if ( GetJournalIndex HT_Archmagister >= 100 )
set points to ( points + 1 )
endif
 
if ( GetJournalIndex TG_KillHardHeart >= 100 )
set points to ( points + 1 )
endif
 
if ( GetJournalIndex FG_KillHardHeart >= 100 )
set points to ( points + 1 )
endif
 
if ( GetJournalIndex MG_Guildmaster >= 100 )
set points to ( points + 1 )
endif
 
if ( GetJournalIndex IL_Grandmaster >= 100 )
set points to ( points + 1 )
endif
 
if ( GetJournalIndex TT_Assarnibibi >= 100 )
set points to ( points + 1 )
endif
 
if ( GetJournalIndex MT_Grandmaster >= 100 )
set points to ( points + 1 )
endif
 
if ( points >= 10 )
set points to 10
endif
endif
 
if ( points >= 3 )
if ( "4nm_class" == 0 )
messagebox "Вы больше не зеленый новичок и стали довольно сильны. Какой путь вы хотите избрать?", "Воин", "Маг", "Бродяга", "Мне надо подумать"
set control to 1
endif
endif
 
if ( points >= 6 )
if ( "4nm_class" == 1 )
messagebox "Вы достигли значительных высот. Каким путем вы продолжите идти к вершине?", "Воитель", "Боевой маг", "Скаут", "Мне надо подумать"
set control to 2
elseif ( "4nm_class" == 2 )
messagebox "Вы достигли значительных высот. Каким путем вы продолжите идти к вершине?", "Заклинатель", "Боевой маг", "Шпион", "Мне надо подумать"
set control to 3
elseif ( "4nm_class" == 3 )
messagebox "Вы достигли значительных высот. Каким путем вы продолжите идти к вершине?", "Вор", "Шпион", "Скаут", "Мне надо подумать"
set control to 4
endif
endif
 
if ( points == 10 )
if ( "4nm_class" == 4 )
messagebox "В своем могуществе вы сравнились с богами, а ваши подвиги будут воспеты в легендах. Какое место вы в них займете?", "Варлорд", "Паладин", "Спеллсворд", "Блейдмастер", "Варвар", "Герой", "Мне надо подумать"
set control to 5
elseif ( "4nm_class" == 5 )
messagebox "В своем могуществе вы сравнились с богами, а ваши подвиги будут воспеты в легендах. Какое место вы в них займете?", "Паладин", "Спеллсворд", "Шаман", "Герой", "Искатель", "Мне надо подумать"
set control to 6
elseif ( "4nm_class" == 6 )
messagebox "В своем могуществе вы сравнились с богами, а ваши подвиги будут воспеты в легендах. Какое место вы в них займете?", "Архимаг", "Спеллсворд", "Шаман", "Волшебник", "Найтблейд", "Искатель", "Мне надо подумать"
set control to 7
elseif ( "4nm_class" == 7 )
messagebox "В своем могуществе вы сравнились с богами, а ваши подвиги будут воспеты в легендах. Какое место вы в них займете?", "Волшебник", "Найтблейд", "Трикстер", "Искатель", "Странник", "Мне надо подумать"
set control to 8
elseif ( "4nm_class" == 8 )
messagebox "В своем могуществе вы сравнились с богами, а ваши подвиги будут воспеты в легендах. Какое место вы в них займете?", "Ассасин", "Найтблейд", "Трикстер", "Плут", "Блейдмастер", "Странник", "Мне надо подумать"
set control to 9
elseif ( "4nm_class" == 9 )
messagebox "В своем могуществе вы сравнились с богами, а ваши подвиги будут воспеты в легендах. Какое место вы в них займете?", "Плут", "Блейдмастер", "Варвар", "Герой", "Странник", "Мне надо подумать"
set control to 10
endif
endif
 
endif
 
if ( control == 1 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
set "4nm_class" to 1
set "4nm_hpclassbonus" to 10
player->addspell "4nm_class_01"
elseif ( button == 1 )
set "4nm_class" to 2
set "4nm_hpclassbonus" to -10
player->addspell "4nm_class_02"
elseif ( button == 2 )
set "4nm_class" to 3
set "4nm_hpclassbonus" to 0
player->addspell "4nm_class_03"
endif
endif
 
if ( control == 2 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
set "4nm_class" to 4
set "4nm_hpclassbonus" to 30
player->removespell "4nm_class_01"
player->addspell "4nm_class_04"
elseif ( button == 1 )
set "4nm_class" to 5
set "4nm_hpclassbonus" to 10
player->removespell "4nm_class_01"
player->addspell "4nm_class_05"
elseif ( button == 2 )
set "4nm_class" to 9
set "4nm_hpclassbonus" to 20
player->removespell "4nm_class_01"
player->addspell "4nm_class_09"
endif
endif
 
if ( control == 3 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
set "4nm_class" to 6
set "4nm_hpclassbonus" to -30
player->removespell "4nm_class_02"
player->addspell "4nm_class_06"
elseif ( button == 1 )
set "4nm_class" to 5
set "4nm_hpclassbonus" to 10
player->removespell "4nm_class_02"
player->addspell "4nm_class_05"
elseif ( button == 2 )
set "4nm_class" to 7
set "4nm_hpclassbonus" to -10
player->removespell "4nm_class_02"
player->addspell "4nm_class_07"
endif
endif
 
if ( control == 4 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
set "4nm_class" to 8
set "4nm_hpclassbonus" to 0
player->removespell "4nm_class_03"
player->addspell "4nm_class_08"
elseif ( button == 1 )
set "4nm_class" to 7
set "4nm_hpclassbonus" to -10
player->removespell "4nm_class_03"
player->addspell "4nm_class_07"
elseif ( button == 2 )
set "4nm_class" to 9
set "4nm_hpclassbonus" to 20
player->removespell "4nm_class_03"
player->addspell "4nm_class_09"
endif
endif
 
if ( control == 5 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
set "4nm_class" to 10
set "4nm_hpclassbonus" to 50
player->removespell "4nm_class_04"
player->addspell "4nm_class_11"
elseif ( button == 1 )
set "4nm_class" to 11
set "4nm_hpclassbonus" to 30
player->removespell "4nm_class_04"
player->addspell "4nm_class_11"
elseif ( button == 2 )
set "4nm_class" to 12
set "4nm_hpclassbonus" to 0
player->removespell "4nm_class_04"
player->addspell "4nm_class_12"
elseif ( button == 3 )
set "4nm_class" to 20
set "4nm_hpclassbonus" to 30
player->removespell "4nm_class_04"
player->addspell "4nm_class_20"
elseif ( button == 4 )
set "4nm_class" to 21
set "4nm_hpclassbonus" to 50
player->removespell "4nm_class_04"
player->addspell "4nm_class_21"
elseif ( button == 5 )
set "4nm_class" to 22
set "4nm_hpclassbonus" to 20
player->removespell "4nm_class_04"
player->addspell "4nm_class_22"
endif
endif
 
if ( control == 6 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
set "4nm_class" to 11
set "4nm_hpclassbonus" to 30
player->removespell "4nm_class_05"
player->addspell "4nm_class_11"
elseif ( button == 1 )
set "4nm_class" to 12
set "4nm_hpclassbonus" to 0
player->removespell "4nm_class_05"
player->addspell "4nm_class_12"
elseif ( button == 2 )
set "4nm_class" to 13
set "4nm_hpclassbonus" to -30
player->removespell "4nm_class_05"
player->addspell "4nm_class_13"
elseif ( button == 3 )
set "4nm_class" to 22
set "4nm_hpclassbonus" to 20
player->removespell "4nm_class_05"
player->addspell "4nm_class_22"
elseif ( button == 4 )
set "4nm_class" to 23
set "4nm_hpclassbonus" to -20
player->removespell "4nm_class_05"
player->addspell "4nm_class_23"
endif
endif
 
if ( control == 7 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
set "4nm_class" to 14
set "4nm_hpclassbonus" to -50
player->removespell "4nm_class_06"
player->addspell "4nm_class_14"
elseif ( button == 1 )
set "4nm_class" to 12
set "4nm_hpclassbonus" to 0
player->removespell "4nm_class_06"
player->addspell "4nm_class_12"
elseif ( button == 2 )
set "4nm_class" to 13
set "4nm_hpclassbonus" to -30
player->removespell "4nm_class_06"
player->addspell "4nm_class_13"
elseif ( button == 3 )
set "4nm_class" to 15
set "4nm_hpclassbonus" to -50
player->removespell "4nm_class_06"
player->addspell "4nm_class_15"
elseif ( button == 4 )
set "4nm_class" to 16
set "4nm_hpclassbonus" to -30
player->removespell "4nm_class_06"
player->addspell "4nm_class_16"
elseif ( button == 5 )
set "4nm_class" to 23
set "4nm_hpclassbonus" to -20
player->removespell "4nm_class_06"
player->addspell "4nm_class_23"
endif
endif
 
if ( control == 8 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
set "4nm_class" to 15
set "4nm_hpclassbonus" to -50
player->removespell "4nm_class_07"
player->addspell "4nm_class_15"
elseif ( button == 1 )
set "4nm_class" to 16
set "4nm_hpclassbonus" to -30
player->removespell "4nm_class_07"
player->addspell "4nm_class_16"
elseif ( button == 2 )
set "4nm_class" to 17
set "4nm_hpclassbonus" to -20
player->removespell "4nm_class_07"
player->addspell "4nm_class_17"
elseif ( button == 3 )
set "4nm_class" to 23
set "4nm_hpclassbonus" to -20
player->removespell "4nm_class_07"
player->addspell "4nm_class_23"
elseif ( button == 4 )
set "4nm_class" to 24
set "4nm_hpclassbonus" to 0
player->removespell "4nm_class_07"
player->addspell "4nm_class_24"
endif
endif
 
if ( control == 9 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
set "4nm_class" to 18
set "4nm_hpclassbonus" to 0
player->removespell "4nm_class_08"
player->addspell "4nm_class_18"
elseif ( button == 1 )
set "4nm_class" to 16
set "4nm_hpclassbonus" to -30
player->removespell "4nm_class_08"
player->addspell "4nm_class_16"
elseif ( button == 2 )
set "4nm_class" to 17
set "4nm_hpclassbonus" to -20
player->removespell "4nm_class_08"
player->addspell "4nm_class_17"
elseif ( button == 3 )
set "4nm_class" to 19
set "4nm_hpclassbonus" to 20
player->removespell "4nm_class_08"
player->addspell "4nm_class_19"
elseif ( button == 4 )
set "4nm_class" to 20
set "4nm_hpclassbonus" to 30
player->removespell "4nm_class_08"
player->addspell "4nm_class_20"
elseif ( button == 5 )
set "4nm_class" to 24
set "4nm_hpclassbonus" to 0
player->removespell "4nm_class_08"
player->addspell "4nm_class_24"
endif
endif
 
if ( control == 10 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
set "4nm_class" to 19
set "4nm_hpclassbonus" to 20
player->removespell "4nm_class_09"
player->addspell "4nm_class_19"
elseif ( button == 1 )
set "4nm_class" to 20
set "4nm_hpclassbonus" to 30
player->removespell "4nm_class_09"
player->addspell "4nm_class_20"
elseif ( button == 2 )
set "4nm_class" to 21
set "4nm_hpclassbonus" to 50
player->removespell "4nm_class_09"
player->addspell "4nm_class_21"
elseif ( button == 3 )
set "4nm_class" to 22
set "4nm_hpclassbonus" to 20
player->removespell "4nm_class_09"
player->addspell "4nm_class_22"
elseif ( button == 4 )
set "4nm_class" to 24
set "4nm_hpclassbonus" to 0
player->removespell "4nm_class_09"
player->addspell "4nm_class_24"
endif
endif
 
set control to 0
 
StopScript "4nm_class_start"
 
End

 
 
 
Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

if ( points != 10 )

Сравнивать точно float и short очень плохая затея. Оно никогда не будет равно, такова суть одинарной точности.

Лучше переписывать чтобы была проверка на > <

Изменено пользователем Larkin
Ссылка на комментарий
Поделиться на другие сайты

Оно будет равно, так как в самом конце идёт принудительная установка очков на 10, если есть превышение.

nyet, я не про то. float - числа с одинарной точностью немного не так выглядят как их представляют. Может быть так что число 10 вообще не способно там храниться, там будет что то типа 9,9999999999999999999999994234126

поэтому возникнут округления и проблемы

Ссылка на комментарий
Поделиться на другие сайты

Ну, в игре плагин работает, значит блок

if ( points == 10 )
if ( "4nm_class" == 4 )
messagebox "В своем могуществе вы сравнились с богами, а ваши подвиги будут воспеты в легендах. Какое место вы в них займете?", "Варлорд", "Паладин", "Спеллсворд", "Блейдмастер", "Варвар", "Герой", "Мне надо подумать"
 
успешно считывается
Следовательно 10 это действительно 10, а не какая-то кракозябра
Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

Читаю и ничего не понимаю. Это не будет работать, потому что ==10 не бывает, а если вдруг по недоразумению сработало, то это нечаянно и в будущем всё равно будут глюки. Так?

Ссылка на комментарий
Поделиться на другие сайты

Таков формат float, его нельзя проверять на точное равенство чему нибудь, могут возникнуть глюки, что оно вроде бы равно точному числу по вычислениям но проверка не выдаст true. Я в свое время с этим столкнулся.

Нужно что то типа >9.9 && < 10.1

Изменено пользователем Larkin
Ссылка на комментарий
Поделиться на другие сайты

set points to 10
if ( points == 10 )
В этом случае будет одно и то же преобразование к дробному типу и не будет проблем
 
а вот с вычислением могут потому, что обычно считают в формате double а не float
и может возникнуть разница в округлении:
set points to 9
set points to points + 1
if ( points == 10 )
 

например:

f - float, d - double, i - integer

f = 0.5; d = f; i = round(d); будет НОЛЬ.

хотя d = 0.5, i = round(d); будет ОДИН.

 

обычно дробь не сравнивают на точное равенство

Ссылка на комментарий
Поделиться на другие сайты

Эпично конечно, но зачем это нужно? Чтобы свободную прокачку из ранних ТЕС\Фоллаутов превратить в подобие ла2, где начинаешь файтером или мистиком, а заканчиваешь более специализированным файтером или мистиком? При чём достигается это в том числе, путём прохождения гильдий, в том числе разных, и совершенно не "классовых" :shito:  В начале игры класс выбрать нельзя? Ну хз, по мне так лучше GCD для прокачки ещё ничего не придумали.

 

ЗЫ: "Найтблейды", "Блейдмастеры" и "Трикстеры" пьют смузи на кофе-брейке в коворкинге.

Изменено пользователем Ao3
Ссылка на комментарий
Поделиться на другие сайты

У меня конструкция

if ( points >= 10 )

set points to 10
if ( points == 10 )

 

С этим же проблем не будет?

 

Чтобы свободную прокачку из ранних ТЕС\Фоллаутов превратить в подобие ла2, где начинаешь файтером или мистиком, а заканчиваешь более специализированным файтером или мистиком?

 

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

Ссылка на комментарий
Поделиться на другие сайты

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

 

Вот на что это похоже. Осталось только ещё квесты прикрутить для получения каждой профы https://l2db.ru/skills/

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...