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

5 скиллпоинтов у тренеров за уровень


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

Сэры и мутсэры, свершилось!

 

Плагин даёт Нереварину 5 скиллпоинтов за каждый уровень. Скиллпоинты сохраняются и тратятся на обучение у тренеров. В отличие от системы Обливиона и Скайирима вам совершенно не нужно прибегать к задротству и быстрей бежать хоть к кому-нибудь чтобы потратить свои 5 скиллпоинтов на обучение. Нет - играйте себе спокойно в своём темпе. Можете прийти в Балмору уже на 9 уровне и сразу потратить накопленные 45 скиллпоинтов, поднять у тренеров 5 уровней, получить ещё 25 скиллпоинтов и тут же потратить и их. Хотя куда разумнее было бы проявить экономность: тратить драгоценные скиллпоинты только на самые труднопрокачиваемые навыки на высоких значениях.

 

 

Работает это так:

 

 

 

 

Новые глобальные переменные:

 

4nm_lessons = 0
4nm_stoptraining = 0
 
Сам стартовый скрипт:
 
Begin 4nm_training
 
short menu
short control
short level
short skillpoints
float hour1
float hour2
float timer
 
if ( player->getlevel != level )
set level to ( player->getlevel )
set skillpoints to ( level * 5 )
endif
 
if ( skillpoints > "4nm_lessons" )
if ( "4nm_stoptraining" == 1 )
set "4nm_stoptraining" to 0
endif
endif
 
if ( menumode == 1 )
if ( menu == 0 )
set hour1 to gamehour
set menu to 1
endif
if ( player->getsoundplaying "skillraise" == 1 )
player->stopsound "skillraise"
set control to 1
endif
elseif ( menu == 1 )
if ( control == 0 )
set menu to 0
endif
endif
 
if ( control == 1 )
set timer to ( timer + GetSecondsPassed )
if timer > 0.5
set hour2 to ( gamehour - hour1 )
if ( hour2 < 0 )
set hour2 to ( 26 + gamehour - hour1 )
endif
if hour2 >= 2
set "4nm_lessons" to ( "4nm_lessons" + 1 )
Messagebox "Вы обучились уже %.0f раз", 4nm_lessons
set hour1 to gamehour
if ( skillpoints <= "4nm_lessons" )
set "4nm_stoptraining" to 1
Messagebox "Вам пора применить полученные знания на практике"
endif
endif
set control to 0
set timer to 0
endif
endif
 
End
 
Для работы запрета на обучение обязателен МСР с опцией "фильтр отказа от предоставления услуг"
 

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

 

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

  • Ответов 98
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

В отличие от системы Обливиона и Скайирима вам совершенно не нужно прибегать к задротству и быстрей бежать хоть к кому-нибудь чтобы потратить свои 5 скиллпоинтов на обучение. Нет - играйте себе спокойно в своём темпе. Можете прийти в Балмору уже на 9 уровне и сразу потратить накопленные 45 скиллпоинтов, поднять у тренеров 5 уровней, получить ещё 25 скиллпоинтов и тут же потратить и их.

Вот! Наконец-то! Вот то, чем меня бесило оригинальное изобретение Беседки! Всё время беспокоиться, чтобы каждый уровень потратить свои скиллпоинты на обучение :)

 

По описанию - очень вкусно. Забираю на тест.

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

подскажите а разве в оригинале если не потратить сразу скилпоинты  - то нельзя было позже догнать и раскидать?

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

 

upd. В целом всё работает так, как написано. Но если за эту секунду до появления "Вы обучились уже N раз" успеть еще раз тыкнуть в меню обучения и обучиться, то это всё равно будет считаться за 1 очко обучения.

 

Я так один раз даже 3 раза успел сделать. Тыц-тыц-тыц! - "вы обучились уже 1 раз" :)

 

Но так всё работает :)

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

Звучит круто, спасибо, поставлю. (хотя и так редко тренерами пользуюсь)

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

Если сократить время ожидания до 0.5 секунды - справятся ли со скриптом самые допотопные компы? Ради них и была секунда.

 

 

Вот итоговая версия с задержкой 0.5 секунды и без тестового сообщения.

Пробовал заабузить в стиле "самые быстрые руки на диком Вварденфелле" - не вышло.

4NM_TRAINING.ESP

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

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

 

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

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

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

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

то есть Нереварин заходит в меню - ТАЙМЕР ЗАСЕКАЕТСЯ - покрутился в меню, ничего не повысил - вышел.

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

 

Вот оригинальная версия твоего скрипта и исправленная:

 

 

Begin Mort_traning
 
float timer
short state
float time_m
short status
 
if ( Player->getlevel != mort_LvlUp )
set mort_traning_gl to 0
set mort_LvlUp to ( Player->getlevel )
endif
 
if ( menumode == 1 )
If ( state == 0 )
set state to 1
set timer to gamehour
endif
if ( player->getsoundplaying "skillraise" == 1 )
player->stopsound "skillraise"
set status to 1
endif
if ( status == 1 )
set time_m to ( gamehour - timer )
set status to 0
if ( time_m < 0 )
set time_m to ( 24 - gamehour + timer )
endif
if time_m >= 2
set Mort_traning_gl  to Mort_traning_gl + 1
Messagebox "Обучались %.0f раз", Mort_traning_gl 
set state to 0
set time_m to 0
endif
endif
endif
 
end
 

 
 
 

Begin Mort_traning
 
float timer
short state
float time_m
short status
 
if ( Player->getlevel != mort_LvlUp )
set mort_traning_gl to 0
set mort_LvlUp to ( Player->getlevel )
endif
 
if ( menumode == 1 )
If ( state == 0 )
set state to 1
set timer to gamehour
endif
if ( player->getsoundplaying "skillraise" == 1 )
player->stopsound "skillraise"
set status to 1
endif
if ( status == 1 )
set time_m to ( gamehour - timer )
set status to 0
if ( time_m < 0 )
set time_m to ( 24 - gamehour + timer )
endif
if time_m >= 2
set Mort_traning_gl  to Mort_traning_gl + 1
Messagebox "Обучались %.0f раз", Mort_traning_gl 
set state to 0
set time_m to 0
endif
endif
endif
 
if ( menumode == 0 )
If ( state == 1 )
set state to 0
endif
endif
 
end

 

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

 

Ещё обрати внимание на эту дичь:

 

if ( time_m < 0 )
set time_m to ( 24 - gamehour + timer )
 

Должно быть так:

 

if ( time_m < 0 )
set time_m to ( 24 + gamehour - timer )
Изменено пользователем Dagot_Prolaps
Ссылка на комментарий
Поделиться на другие сайты

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

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

 

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

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

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

 


С книгами же всё в порядке - игра не считает их прокачкой навыков из меню.

 

А если книга из инвентаря читается?

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

Тогда тоже всё в порядке - время-то не проходит.

 

А как отследить по деньгам?

 

Что то типо: в меню постоянно записываем текущее кол-во денег. Ждем skillraise. И когда оно свершилось то сравниваем деньги с предыдущим значением, если меньше то - вуаля.

 

Я вот задумываюсь над созданием плагина где в качестве награды могли бы давать повышение навыка. Но чтобы это влияло на уровень. Пока что повышение командой не влияет. Задумка такая что при обучении тебе будут возвращать потраченные деньги.

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

 

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

то есть Нереварин заходит в меню - ТАЙМЕР ЗАСЕКАЕТСЯ - покрутился в меню, ничего не повысил - вышел.

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

 

Вот оригинальная версия твоего скрипта и исправленная:

 

 

Begin Mort_traning
 
float timer
short state
float time_m
short status
 
if ( Player->getlevel != mort_LvlUp )
set mort_traning_gl to 0
set mort_LvlUp to ( Player->getlevel )
endif
 
if ( menumode == 1 )
If ( state == 0 )
set state to 1
set timer to gamehour
endif
if ( player->getsoundplaying "skillraise" == 1 )
player->stopsound "skillraise"
set status to 1
endif
if ( status == 1 )
set time_m to ( gamehour - timer )
set status to 0
if ( time_m < 0 )
set time_m to ( 24 - gamehour + timer )
endif
if time_m >= 2
set Mort_traning_gl  to Mort_traning_gl + 1
Messagebox "Обучались %.0f раз", Mort_traning_gl 
set state to 0
set time_m to 0
endif
endif
endif
 
end
 

 
 
 

Begin Mort_traning
 
float timer
short state
float time_m
short status
 
if ( Player->getlevel != mort_LvlUp )
set mort_traning_gl to 0
set mort_LvlUp to ( Player->getlevel )
endif
 
if ( menumode == 1 )
If ( state == 0 )
set state to 1
set timer to gamehour
endif
if ( player->getsoundplaying "skillraise" == 1 )
player->stopsound "skillraise"
set status to 1
endif
if ( status == 1 )
set time_m to ( gamehour - timer )
set status to 0
if ( time_m < 0 )
set time_m to ( 24 - gamehour + timer )
endif
if time_m >= 2
set Mort_traning_gl  to Mort_traning_gl + 1
Messagebox "Обучались %.0f раз", Mort_traning_gl 
set state to 0
set time_m to 0
endif
endif
endif
 
if ( menumode == 0 )
If ( state == 1 )
set state to 0
endif
endif
 
end

 

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

 

Ещё обрати внимание на эту дичь:

 

if ( time_m < 0 )
set time_m to ( 24 - gamehour + timer )
 

Должно быть так:

 

if ( time_m < 0 )
set time_m to ( 24 + gamehour - timer )

 

Так, давай начнем с того, откуда ты дернул этот скрипт? Было 100500 версий плагина в которых были разные баги и в том числе ложные срабатывания. Просто это мувитон, дернул откуда-то мой скрипт, переработал его и написал что скрипт мой хреновый, а ты такой пушистый и всё сделал хорошо. Могу в ЛС скинуть последнюю версию плагина, поймёшь, что через таймеры отслеживания делать - это плохая идея(нет стабильность работы скрипта, могут быть фпсозависимые баги). Заодно и потестируешь.

 

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

al...al никогда не меняется...

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

Могу в ЛС скинуть последнюю версию плагина, поймёшь, что через таймеры отслеживания делать - это плохая идея(нет стабильность работы скрипта, могут быть фпсозависимые баги). Заодно и потестируешь.

:shito: т.е. в последней версии есть фпсозависимые баги и нет стабильности? Тогда к чему это?

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

:shito: т.е. в последней версии есть фпсозависимые баги и нет стабильности? Тогда к чему это?

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

Ай, ладно, выложу сюда, мб ещё кому-то будет полезно. 

 

 

Begin Mort_traning
float timer
short state
float time_m
short status
if ( Player->getlevel != mort_LvlUp )
set mort_traning_gl to 0
set mort_LvlUp to ( Player->getlevel )
endif
if menumode == 1
If state == 0
set state to 1
set timer to gamehour
endif
if ( player->getsoundplaying "skillraise" == 1 )
player->stopsound "skillraise"
set status to 1
endif
endif
if state == 1
if menumode==0
set state to 0
set time_m to ( gamehour - timer )
if status == 1
set status to 0
if time_m > 2
if time_m < 2.1
set Mort_traning_gl  to Mort_traning_gl + 1
Messagebox "Обучались %.0f раз", Mort_traning_gl 
set time_m to 0
endif
endif
endif
endif
endif
end

В общем вся завязка на gamehour. Пересчет часов при смене дня не требуется за счет запрета на обучение в ночное время.
Зы Лол, ну вот, отписался и баг нашел.
Изменено пользователем mortuus
Ссылка на комментарий
Поделиться на другие сайты

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

 

Да он то тут при чем. Ты пытаешься оправдаться но тут же пишешь что твой последний скрипт багован. :what: Или ты только щас узнал что он багован?

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

:shito:  При чем тут мой последний скрипт? И с чего он багован? И почему я должен оправдываться? Я говорю про то, что старые мои версии были с багами, он оттуда дернул скрипт. :mda:

 

Могу в ЛС скинуть последнюю версию плагина, поймёшь, что через таймеры отслеживания делать - это плохая идея(нет стабильность работы скрипта, могут быть фпсозависимые баги).

 

Последняя багована или последняя не багована?

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

Последняя багована или последняя не багована?

Блин, ну ты вот устроил тут флудильню. Что непонятного-то? Скидываю последнюю версию для сравнения с его скриптом. У него реализовано через секундные таймеры, у меня через игровое время. 

Кстати, а какой баг-то в последней версии от mortuus?

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

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

Блин, ну ты вот устроил тут флудильню. Что непонятного-то? Скидываю последнюю версию для сравнения с его скриптом. У него реализовано через секундные таймеры, у меня через игровое время. 

 

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

Так и у него не через секундные таймеры а через проверку gamehour. Таймеры это getsecondspassed.

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

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

Так и у него не через секундные таймеры а через проверку gamehour. Таймеры это getsecondspassed.

if timer > 1
set control to 0
set timer to 0
endif

У него сброс переменных идет по секундному таймеру(если в шапке темы актуальный скрипт)

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

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

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

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

По мне так не критично...

Кстати, я уже спрашивал - а почему многие плагины не вывешиваются в базу? Сделают или переведут что-то под МФР, потом из сборки плаг удаляется, и хер его где найдешь потом :(

 

Так и с ограничением от mortuus'a - мне бы вот пригодилось. Потому что специально выискивать таких NPC с "продолжить" я не буду, а вот быстро щелкнуть за секунду на "обучение" может получиться :)

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

По мне так не критично...

Кстати, я уже спрашивал - а почему многие плагины не вывешиваются в базу? Сделают или переведут что-то под МФР, потом из сборки плаг удаляется, и хер его где найдешь потом :(

 

Так и с ограничением от mortuus'a - мне бы вот пригодилось. Потому что специально выискивать таких NPC с "продолжить" я не буду, а вот быстро щелкнуть за секунду на "обучение" может получиться :)

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

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

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

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

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

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

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

Войти

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

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

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