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

Требуется помощь со скриптами


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

MessageBox "Для этого нужен лунный сахар"

set state to 0

return

Endif

elseif ( button

Благодарю.

 

А насчет этого можете что-то подсказать?

И еще момент: хотелось бы чтобы сначала затемнялся экран, а после этого через пару секунд кастовался спелл, чтобы этого не было видно. Полагаю, рядом с Cast "wh_skooma_smoke_effect" player надо воткнуть еще один таймер. Но вот как именно это оформить чтобы не запороть опять весь скрипт?

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

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

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

Благодарю.

 

А насчет этого можете что-то подсказать?

Перенести строчку

Cast "wh_skooma_smoke_effect" player

K fadein 1.5

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

Перенести строчку

Cast "wh_skooma_smoke_effect" player

K fadein 1.5

Не, тогда начинает кастовать даже без активации и не прекращает.

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

  • 1 месяц спустя...

Вопрос:

 

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

 

Буду очень признателен за помощь в его создании, т.к. в скриптах не разбираюсь.

 

Ванильный КС задает респавн в месяцах. Старый гербализм регулировал респавн моделей своими скриптами, но это не то.

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

  • 1 месяц спустя...

Прошу помощи. Почему скрипт работает в таком виде:

Begin Arena_script

if ( GetJournalIndex MG_Guildmaster == 50 )
enable
return
elseif ( GetJournalIndex IL_Grandmaster == 10 )
enable
return
elseif ( GetJournalIndex HR_Archmaster == 50 )
enable
return
elseif ( GetJournalIndex B5_VenimHort == 30 )
enable
return
elseif ( GetJournalIndex HH_BeroSupport == 50 )
enable
return
elseif ( GetJournalIndex HR_CowardDisgrace == 50 )
enable
return
elseif ( GetJournalIndex MG_Guildmaster == 60 )
enable
return
elseif ( GetJournalIndex IL_Grandmaster == 60 )
enable
return
elseif ( GetJournalIndex HR_Archmaster == 60 )
enable
return
elseif ( GetJournalIndex B5_VenimHort == 40 )
enable
return
elseif ( GetJournalIndex HH_BeroSupport == 60 )
enable
return
elseif ( GetJournalIndex HR_CowardDisgrace == 60 )
enable
return
elseif ( GetJournalIndex MG_Guildmaster == 100 )
enable
return
elseif ( GetJournalIndex IL_Grandmaster == 100 )
enable
return
elseif ( GetJournalIndex HR_Archmaster == 70 )
enable
return
elseif ( GetJournalIndex B5_VenimHort == 50 )
enable
return
elseif ( GetJournalIndex HH_BeroSupport == 70 )
enable
return
elseif ( GetJournalIndex HR_CowardDisgrace == 70 )
enable
return
else 
disable 
endif 

end 

И хоть убей не работает в таком:

begin arena_script2

if ( GetJournalIndex MG_Guildmaster < 50 )
disable
elseif ( GetJournalIndex IL_Grandmaster < 10 )
disable
elseif ( GetJournalIndex HR_Archmaster < 50 )
disable
elseif ( GetJournalIndex B5_VenimHort < 30 )
disable
elseif ( GetJournalIndex HH_BeroSupport < 50 )
disable
elseif ( GetJournalIndex HR_CowardDisgrace < 50 )
disable
elseif ( GetJournalIndex MG_Guildmaster > 100 )
disable
elseif ( GetJournalIndex IL_Grandmaster > 100 )
disable
elseif ( GetJournalIndex HR_Archmaster > 70 )
disable
elseif ( GetJournalIndex B5_VenimHort > 50 )
disable
elseif ( GetJournalIndex HR_CowardDisgrace > 70 )
disable
elseif ( GetJournalIndex HH_BeroSupport > 70 )
disable
else
enable
endif

end

И в таком тоже не работает:

begin arena_script3

if ( GetJournalIndex MG_Guildmaster < 50 )
disable
elseif ( GetJournalIndex MG_Guildmaster > 100 )
disable
else
enable
endif

if ( GetJournalIndex IL_Grandmaster < 10 )
disable
elseif ( GetJournalIndex IL_Grandmaster > 100 )
disable
else
enable
endif

if ( GetJournalIndex HR_Archmaster < 50 )
disable
elseif ( GetJournalIndex HR_Archmaster > 70 )
disable
else
enable
endif

if ( GetJournalIndex B5_VenimHort < 30 )
disable
elseif ( GetJournalIndex B5_VenimHort > 50 )
disable
else
enable
endif

if ( GetJournalIndex HH_BeroSupport < 50 )
disable
elseif ( GetJournalIndex HH_BeroSupport > 70 )
disable
else
enable
endif

if ( GetJournalIndex HR_CowardDisgrace < 50 )
disable
elseif ( GetJournalIndex HR_CowardDisgrace > 70 )
disable
else
enable
endif

end

Пожалуйста, сделайте меня понимать. :wall:

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

На чем висит скрипт и чего хотите добиться?

И сразу вопрос - почему не использовать рабочую версию скрипта?)

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

Пожалуйста, сделайте меня понимать

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

 

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

На чем висит скрипт и чего хотите добиться?

 

И сразу вопрос - почему не использовать рабочую версию скрипта?)

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

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

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

 

Т.е return попробовать добавить во второй и третьей версии, или в какой-то одной? После enable и disable или чего-то одного?

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

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

Begin Arena_script

if ( CellChanged )
if ( GetJournalIndex MG_Guildmaster == 50 )
enable

elseif ( GetJournalIndex IL_Grandmaster == 10 )
enable

elseif ( GetJournalIndex HR_Archmaster == 50 )
enable

elseif ( GetJournalIndex B5_VenimHort == 30 )
enable

elseif ( GetJournalIndex HH_BeroSupport == 50 )
enable

elseif ( GetJournalIndex HR_CowardDisgrace == 50 )
enable

elseif ( GetJournalIndex MG_Guildmaster == 60 )
enable

elseif ( GetJournalIndex IL_Grandmaster == 60 )
enable

elseif ( GetJournalIndex HR_Archmaster == 60 )
enable

elseif ( GetJournalIndex B5_VenimHort == 40 )
enable

elseif ( GetJournalIndex HH_BeroSupport == 60 )
enable

elseif ( GetJournalIndex HR_CowardDisgrace == 60 )
enable

elseif ( GetJournalIndex MG_Guildmaster == 100 )
enable

elseif ( GetJournalIndex IL_Grandmaster == 100 )
enable

elseif ( GetJournalIndex HR_Archmaster == 70 )
enable

elseif ( GetJournalIndex B5_VenimHort == 50 )
enable

elseif ( GetJournalIndex HH_BeroSupport == 70 )
enable

elseif ( GetJournalIndex HR_CowardDisgrace == 70 )
enable

else 
disable 
endif 
endif

end 

Попробуйте такой вариант, должно и работать как надо, и сервер вешать перестанет по идее.

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

Прошу помощи. Почему скрипт работает в таком виде:

 

Begin Arena_scriptif ( GetJournalIndex MG_Guildmaster == 50 )enablereturnelseif ( GetJournalIndex IL_Grandmaster == 10 )enablereturnelseif ( GetJournalIndex HR_Archmaster == 50 )enablereturnelseif ( GetJournalIndex B5_VenimHort == 30 )enablereturnelseif ( GetJournalIndex HH_BeroSupport == 50 )enablereturnelseif ( GetJournalIndex HR_CowardDisgrace == 50 )enablereturnelseif ( GetJournalIndex MG_Guildmaster == 60 )enablereturnelseif ( GetJournalIndex IL_Grandmaster == 60 )enablereturnelseif ( GetJournalIndex HR_Archmaster == 60 )enablereturnelseif ( GetJournalIndex B5_VenimHort == 40 )enablereturnelseif ( GetJournalIndex HH_BeroSupport == 60 )enablereturnelseif ( GetJournalIndex HR_CowardDisgrace == 60 )enablereturnelseif ( GetJournalIndex MG_Guildmaster == 100 )enablereturnelseif ( GetJournalIndex IL_Grandmaster == 100 )enablereturnelseif ( GetJournalIndex HR_Archmaster == 70 )enablereturnelseif ( GetJournalIndex B5_VenimHort == 50 )enablereturnelseif ( GetJournalIndex HH_BeroSupport == 70 )enablereturnelseif ( GetJournalIndex HR_CowardDisgrace == 70 )enablereturnelse disable endif end
И хоть убей не работает в таком:

begin arena_script2if ( GetJournalIndex MG_Guildmaster < 50 )disableelseif ( GetJournalIndex IL_Grandmaster < 10 )disableelseif ( GetJournalIndex HR_Archmaster < 50 )disableelseif ( GetJournalIndex B5_VenimHort < 30 )disableelseif ( GetJournalIndex HH_BeroSupport < 50 )disableelseif ( GetJournalIndex HR_CowardDisgrace < 50 )disableelseif ( GetJournalIndex MG_Guildmaster > 100 )disableelseif ( GetJournalIndex IL_Grandmaster > 100 )disableelseif ( GetJournalIndex HR_Archmaster > 70 )disableelseif ( GetJournalIndex B5_VenimHort > 50 )disableelseif ( GetJournalIndex HR_CowardDisgrace > 70 )disableelseif ( GetJournalIndex HH_BeroSupport > 70 )disableelseenableendifend
И в таком тоже не работает:

begin arena_script3if ( GetJournalIndex MG_Guildmaster < 50 )disableelseif ( GetJournalIndex MG_Guildmaster > 100 )disableelseenableendifif ( GetJournalIndex IL_Grandmaster < 10 )disableelseif ( GetJournalIndex IL_Grandmaster > 100 )disableelseenableendifif ( GetJournalIndex HR_Archmaster < 50 )disableelseif ( GetJournalIndex HR_Archmaster > 70 )disableelseenableendifif ( GetJournalIndex B5_VenimHort < 30 )disableelseif ( GetJournalIndex B5_VenimHort > 50 )disableelseenableendifif ( GetJournalIndex HH_BeroSupport < 50 )disableelseif ( GetJournalIndex HH_BeroSupport > 70 )disableelseenableendifif ( GetJournalIndex HR_CowardDisgrace < 50 )disableelseif ( GetJournalIndex HR_CowardDisgrace > 70 )disableelseenableendifend
Пожалуйста, сделайте меня понимать. :wall:
Ну все правильно. Первый скрипт энэйблит когда хоть одна запись равна. Второй всегда дизейблит, так как полунереально получить все эти записи. Я не знаю как надо прозодить морку, чтоб были вообще все эти записи, там дом редоран и хлаалу, в которые нельзя вступить одновременно.

Третий скрипт очень кривой, так как решать будет только самый последний if, это запись HR_CowardDisgrace.

Но после каждого enable можно написать return, это должно помочь, но скрипт все равно неоптимален.

 

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

If ( cellchanged == 0 )

Return

Endif

И посмотреть, ушли ли лаги.

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

Begin Arena_script

if ( CellChanged )
if ( GetJournalIndex MG_Guildmaster == 50 )
enable

elseif ( GetJournalIndex IL_Grandmaster == 10 )
enable

elseif ( GetJournalIndex HR_Archmaster == 50 )
enable

elseif ( GetJournalIndex B5_VenimHort == 30 )
enable

elseif ( GetJournalIndex HH_BeroSupport == 50 )
enable

elseif ( GetJournalIndex HR_CowardDisgrace == 50 )
enable

elseif ( GetJournalIndex MG_Guildmaster == 60 )
enable

elseif ( GetJournalIndex IL_Grandmaster == 60 )
enable

elseif ( GetJournalIndex HR_Archmaster == 60 )
enable

elseif ( GetJournalIndex B5_VenimHort == 40 )
enable

elseif ( GetJournalIndex HH_BeroSupport == 60 )
enable

elseif ( GetJournalIndex HR_CowardDisgrace == 60 )
enable

elseif ( GetJournalIndex MG_Guildmaster == 100 )
enable

elseif ( GetJournalIndex IL_Grandmaster == 100 )
enable

elseif ( GetJournalIndex HR_Archmaster == 70 )
enable

elseif ( GetJournalIndex B5_VenimHort == 50 )
enable

elseif ( GetJournalIndex HH_BeroSupport == 70 )
enable

elseif ( GetJournalIndex HR_CowardDisgrace == 70 )
enable

else 
disable 
endif 
endif

end 

Попробуйте такой вариант, должно и работать как надо, и сервер вешать перестанет по идее.

 

Увы, не помогло. Вот так сделала:

Begin Arena_script

if ( CellChanged == 0 )
return
endif

if ( CellChanged )
if ( GetJournalIndex MG_Guildmaster == 50 )
enable

elseif ( GetJournalIndex IL_Grandmaster == 10 )
enable

elseif ( GetJournalIndex HR_Archmaster == 50 )
enable

elseif ( GetJournalIndex B5_VenimHort == 30 )
enable

elseif ( GetJournalIndex HH_BeroSupport == 50 )
enable

elseif ( GetJournalIndex HR_CowardDisgrace == 50 )
enable

elseif ( GetJournalIndex MG_Guildmaster == 60 )
enable

elseif ( GetJournalIndex IL_Grandmaster == 60 )
enable

elseif ( GetJournalIndex HR_Archmaster == 60 )
enable

elseif ( GetJournalIndex B5_VenimHort == 40 )
enable

elseif ( GetJournalIndex HH_BeroSupport == 60 )
enable

elseif ( GetJournalIndex HR_CowardDisgrace == 60 )
enable

elseif ( GetJournalIndex MG_Guildmaster == 100 )
enable

elseif ( GetJournalIndex IL_Grandmaster == 100 )
enable

elseif ( GetJournalIndex HR_Archmaster == 70 )
enable

elseif ( GetJournalIndex B5_VenimHort == 50 )
enable

elseif ( GetJournalIndex HH_BeroSupport == 70 )
enable

elseif ( GetJournalIndex HR_CowardDisgrace == 70 )
enable

else
disable
endif
endif

end

Небольшое уточнение: лагает не в самой Яме Арены, а после выхода в пояс или на улицу. Причем виснуть начинает только после того как выйдут оба игрока. Если вышел только один, то все в норме. Что характерно, никакой перегруженности по части скриптов или физики/механики не показывает. Потому и других вариантов кроме рассинхрона из-за журнальных записей у меня нет - насколько я помню проблемы начались именно после этих изменений. 

 

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

Третий скрипт очень кривой, так как решать будет только самый последний if, это запись HR_CowardDisgrace.

Но после каждого enable можно написать return, это должно помочь, но скрипт все равно неоптимален.

 

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

If ( cellchanged == 0 )

Return

Endif

И посмотреть, ушли ли лаги.

 

Вот оно что. Я-то думала что во втором скрипте энейбл должен срабатывать если есть хотя бы одна из этих записей. А он получается ждет их ВСЕ чтобы начать работать, так?

И тогда еще один вопрос. Будет ли работать такая связка, или для каждой из записей нужен отдельный блок?

if ( GetJournalIndex B8_MeetVivec == 55 )
enable
elseif ( GetJournalIndex C3_DestroyDagoth < 50 )
enable
else
disable
endif
Ссылка на комментарий
Поделиться на другие сайты

Увы, не помогло. Вот так сделала:

 

Begin Arena_script

if ( CellChanged == 0 )
return
endif

if ( CellChanged )
if ( GetJournalIndex MG_Guildmaster == 50 )
enable

elseif ( GetJournalIndex IL_Grandmaster == 10 )
enable

elseif ( GetJournalIndex HR_Archmaster == 50 )
enable

elseif ( GetJournalIndex B5_VenimHort == 30 )
enable

elseif ( GetJournalIndex HH_BeroSupport == 50 )
enable

elseif ( GetJournalIndex HR_CowardDisgrace == 50 )
enable

elseif ( GetJournalIndex MG_Guildmaster == 60 )
enable

elseif ( GetJournalIndex IL_Grandmaster == 60 )
enable

elseif ( GetJournalIndex HR_Archmaster == 60 )
enable

elseif ( GetJournalIndex B5_VenimHort == 40 )
enable

elseif ( GetJournalIndex HH_BeroSupport == 60 )
enable

elseif ( GetJournalIndex HR_CowardDisgrace == 60 )
enable

elseif ( GetJournalIndex MG_Guildmaster == 100 )
enable

elseif ( GetJournalIndex IL_Grandmaster == 100 )
enable

elseif ( GetJournalIndex HR_Archmaster == 70 )
enable

elseif ( GetJournalIndex B5_VenimHort == 50 )
enable

elseif ( GetJournalIndex HH_BeroSupport == 70 )
enable

elseif ( GetJournalIndex HR_CowardDisgrace == 70 )
enable

else
disable
endif
endif

end
Небольшое уточнение: лагает не в самой Яме Арены, а после выхода в пояс или на улицу. Причем виснуть начинает только после того как выйдут оба игрока. Если вышел только один, то все в норме. Что характерно, никакой перегруженности по части скриптов или физики/механики не показывает. Потому и других вариантов кроме рассинхрона из-за журнальных записей у меня нет - насколько я помню проблемы начались именно после этих изменений. 

 

 

 

Вот оно что. Я-то думала что во втором скрипте энейбл должен срабатывать если есть хотя бы одна из этих записей. А он получается ждет их ВСЕ чтобы начать работать, так?

И тогда еще один вопрос. Будет ли работать такая связка, или для каждой из записей нужен отдельный блок?

if ( GetJournalIndex B8_MeetVivec == 55 )
enable
elseif ( GetJournalIndex C3_DestroyDagoth < 50 )
enable
else
disable
endif
Он заэнейблит, только если все записи будут, да.

Я не пробовал онлайн, и не знаю чьи вообще записи проверяются.

Возьмите третий скрипт и поставьте return после каждого rnable, как я написал.

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

"Telura ulver"->enable

Тогда запущены будут не куча скриптов, а только один.

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

  • 5 месяцев спустя...

Есть ли какой-то аналог OnPCEquip, без необходимости вешать его на сам экипируемый предмет? Пыталась сделать вот так, скрипт нормально сохраняется, но не работает: 

if ( OnActivate == 1 )
if ( OnPCEquip "item_name" == 0 )
return
else
Activate
endif
endif
Ссылка на комментарий
Поделиться на другие сайты

Есть ли какой-то аналог OnPCEquip, без необходимости вешать его на сам экипируемый предмет?

https://en.uesp.net/wiki/Morrowind_Mod:HasItemEquipped
Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

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

    Begin xar_lutechoose

    short OnPCEquip ;has to be defined
    short Button
    short MessageOn
    short Hasweapondrawn  
    short Status
    short canPerform
    short luteDrawn

       if ( OnPCEquip == 1 )
       if ( luteDrawn == 0)
       if ( Player->GetWeaponDrawn == 1 )
       set luteDrawn to 1
       set canPerform to 1
       else
       set lutedrawn to 0
       set canPerform to 0
       return
       endif
       endif
endif

if ( Status == 0 )
if ( canPerform == 1 )                     
MessageBox "Какую песню вы хотите сыграть?" "1 (2m08s)" "2 (1m10s)" "3 (1m30s)" "4 (1m18s)" "5 (1m09s)" "6 (1m06s)" "7 (1m38s)" "8 (1m42s)" "Отмена"
set canPerform to 0
set button_max to 8
set button to -1
set Status to 1
endif
endif
 
if ( Status == 1 )
set timer to 0
set Button to GetButtonPressed
if ( Button == -1 )
return
elseif ( Button == 0 )
streammusic, "pro1.mp3"
set songlength to 128
MessageBox, "Вы начинаете выступление."
set Status to 2
elseif ( Button == 1 )
streammusic, "pro2.mp3"
set songlength to 66
MessageBox, "Вы начинаете выступление."
set Status to 2
elseif ( Button == 2 )
streammusic, "pro4.mp3"
set songlength to 90
MessageBox, "Вы начинаете выступление."
set Status to 2
elseif ( Button == 3 )
streammusic, "pro5.mp3" 
set songlength to 78
MessageBox, "Вы начинаете выступление."
set Status to 2
elseif ( Button == 4 )
streammusic, "pro6.mp3" 
set songlength to 69
MessageBox, "Вы начинаете выступление."
set Status to 2
elseif ( Button == 5 )
streammusic, "pro7.mp3"
set songlength to 66
MessageBox, "Вы начинаете выступление."
set Status to 2
elseif ( Button == 6 )
streammusic, "pro3.mp3"
set songlength to 98
MessageBox, "Вы начинаете выступление."
set Status to 2
elseif ( Button == 7 )
streammusic, "lute9.mp3"
set songlength to 102
MessageBox, "Вы начинаете выступление."
set Status to 2
elseif ( button == button_max )
streamMusic, "silence.mp3"
set Timer to 0
set Status to 0
endif
endif

if ( Status == 2 ) 
set timer to ( timer + GetSecondsPassed )
endif

if ( timer > songlength )
streamMusic, "silence.mp3"
set Timer to 0
set Status to 0
return
endif

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

  • 1 год спустя...

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

Вы сможете оставить комментарий после входа в



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

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