La Sombra del Mar Опубликовано 22 февраля, 2021 Жалоба Поделиться Опубликовано 22 февраля, 2021 Доброго времени суток! Нуждаюсь в помощи сведущих людей, которые скажут что я делаю не так и как надо. В скриптинге я, мягко говоря, дилетант, так что за нубские вопросы заранее пардоньте. Сначала что попроще: 1. Скрипт походной палатки, в комплекте с которой идет "поющий ветер". При сворачивании палатки звук должен исчезать, но он остается. Что нужно изменить чтобы звук переставал проигрываться сразу после того как палатка убрана? begin tent2_pickup_test short buttonshort state if ( MenuMode == 1 )returnendif if ( state == 0 )if ( OnActivate == 1 )set button to 3set state to 1elseReturnendifendif if ( state == 1 )messagebox "Что вы хотите сделать?" "Ничего" "Свернуть тент"set state to 10endif if ( state == 10 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )returnset state to 0elseif ( button == 1 )DisablePlaceAtMe "ashfall_tent_ashl_misc" 1 0 0StopSound "chimes wood"set state to 0endifendifendif end 2. Скрипт, вешающийся на предмет, чтобы по прошествии определенного времени этот предмет исчезал из инвентаря. Но он не работает. Что тут не так? begin bound_cuirass_test_scr float timer set timer to ( timer + GetSecondsPassed) if timer >= 10 if ( Player->GetItemCount bound_cuirass >= 1 )player->removeitem "bound_cuirass" 1 endifendif end 3. И напоследок самое заковыристое. Скрипт, висящий на активаторе - при наличии в инвентаре фрагментов кристаллов любой разновидности (всего их 12) из них можно изготовить камень душ (любого типа, в зависимости от количества имеющихся фрагментов - крохотный, большой и.т.д.). Одно использование активатора стоит 25 септимов. Результат должен быть одинаковым вне зависимости от того какая разновидность фрагментов есть у игрока - т.е. камень душ должен выдаваться в обмен на любое сочетание разновидностей фрагментов, значение имеет только их количество. Скрипт был собран мной на основе двух других похожих, ибо самостоятельно написать что-то подобное знаний у меня недостаточно, так что меня совсем не удивляет что в итоге это поделие не работает. При активации высвечивается меню выбора с вопросом про "какой тип камней душ вы хотите изготовить?", и после нажатия на одну из кнопок больше ничего не происходит. Как заставить это работать? begin Soul_gem_infuser short controlshort buttonshort type If ( MenuMode == 1 )ReturnEndif if ( OnActivate == 1 )if ( control == 0 ) if ( Player->GetItemCount Gold_001 >= 25 )MessageBox "Этот аппарат позволяет фокусировать потоки метафизических энергий для изготовления цельных камней душ из отдельных фрагментов кристаллических морфолитов. Какой тип камня душ вы хотите изготовить? (Цена одного использования алтаря - 25 септимов.)", "Крохотный (2 фрагмента)", "Маленький (4 фрагмента)", "Обычный (6 фрагментов)", "Большой (8 фрагментов)", "Великий (10 фрагментов)", "Отмена"set control to 1elseMessageBox "У вас недостаточно золота чтобы воспользоваться алтарем. Цена одного использования - 25 септимов."set control to 0endifendifendif if ( control == 0 )returnendif if ( control == 1 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0)player->removeitem "gold_001" 25set control to 2 elseif ( button == 1)player->removeitem "gold_001" 25set control to 4 elseif ( button == 2)player->removeitem "gold_001" 25set control to 6 elseif ( button == 3)player->removeitem "gold_001" 25set control to 8 elseif ( button == 4)player->removeitem "gold_001" 25set control to 10 elseif ( button == 5)player->removeitem "gold_001" 25set control to 0endif elseif ( control == 2 )if ( ( player->GetItemCount "_GN_Shard_Rock_4_B" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_g" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_o" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_p" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_r" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_w" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_B" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_g" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_o" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_p" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_r" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_w" ) < control ) set control to 3elseplayer->RemoveItem _GN_Shard_Rock_4_B, 2 elseplayer->RemoveItem _GN_Shard_Rock_4_g, 2 elseplayer->RemoveItem _GN_Shard_Rock_4_o, 2 elseplayer->RemoveItem _GN_Shard_Rock_4_p, 2 elseplayer->RemoveItem _GN_Shard_Rock_4_r, 2 elseplayer->RemoveItem _GN_Shard_Rock_4_w, 2 else player->RemoveItem _GN_Shard_Rock_5_B, 2 elseplayer->RemoveItem _GN_Shard_Rock_5_g, 2 elseplayer->RemoveItem _GN_Shard_Rock_5_o, 2 elseplayer->RemoveItem _GN_Shard_Rock_5_p, 2 elseplayer->RemoveItem _GN_Shard_Rock_5_r, 2 elseplayer->RemoveItem _GN_Shard_Rock_5_w, 2 set control to 7set type to 2endif elseif ( control == 4 )if ( ( player->GetItemCount "_GN_Shard_Rock_4_B" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_g" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_o" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_p" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_r" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_w" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_B" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_g" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_o" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_p" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_r" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_w" ) < control )set control to 3elseplayer->RemoveItem _GN_Shard_Rock_4_B, 4 elseplayer->RemoveItem _GN_Shard_Rock_4_g, 4 elseplayer->RemoveItem _GN_Shard_Rock_4_o, 4 elseplayer->RemoveItem _GN_Shard_Rock_4_p, 4 elseplayer->RemoveItem _GN_Shard_Rock_4_r, 4 elseplayer->RemoveItem _GN_Shard_Rock_4_w, 4 else player->RemoveItem _GN_Shard_Rock_5_B, 4 elseplayer->RemoveItem _GN_Shard_Rock_5_g, 4 elseplayer->RemoveItem _GN_Shard_Rock_5_o, 4 elseplayer->RemoveItem _GN_Shard_Rock_5_p, 4 elseplayer->RemoveItem _GN_Shard_Rock_5_r, 4 elseplayer->RemoveItem _GN_Shard_Rock_5_w, 4 set control to 7set type to 4endif elseif ( control == 6 )if ( ( player->GetItemCount "_GN_Shard_Rock_4_B" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_g" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_o" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_p" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_r" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_w" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_B" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_g" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_o" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_p" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_r" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_w" ) < control ) set control to 3elseplayer->RemoveItem _GN_Shard_Rock_4_B, 6 elseplayer->RemoveItem _GN_Shard_Rock_4_g, 6 elseplayer->RemoveItem _GN_Shard_Rock_4_o, 6 elseplayer->RemoveItem _GN_Shard_Rock_4_p, 6 elseplayer->RemoveItem _GN_Shard_Rock_4_r, 6 elseplayer->RemoveItem _GN_Shard_Rock_4_w, 6 else player->RemoveItem _GN_Shard_Rock_5_B, 6 elseplayer->RemoveItem _GN_Shard_Rock_5_g, 6 elseplayer->RemoveItem _GN_Shard_Rock_5_o, 6 elseplayer->RemoveItem _GN_Shard_Rock_5_p, 6 elseplayer->RemoveItem _GN_Shard_Rock_5_r, 6 elseplayer->RemoveItem _GN_Shard_Rock_5_w, 6 set control to 7set type to 6endif elseif ( control == 8 )if ( ( player->GetItemCount "_GN_Shard_Rock_4_B" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_g" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_o" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_p" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_r" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_w" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_B" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_g" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_o" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_p" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_r" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_w" ) < control )set control to 3elseplayer->RemoveItem _GN_Shard_Rock_4_B, 8 elseplayer->RemoveItem _GN_Shard_Rock_4_g, 8 elseplayer->RemoveItem _GN_Shard_Rock_4_o, 8 elseplayer->RemoveItem _GN_Shard_Rock_4_p, 8 elseplayer->RemoveItem _GN_Shard_Rock_4_r, 8 elseplayer->RemoveItem _GN_Shard_Rock_4_w, 8 else player->RemoveItem _GN_Shard_Rock_5_B, 8 elseplayer->RemoveItem _GN_Shard_Rock_5_g, 8 elseplayer->RemoveItem _GN_Shard_Rock_5_o, 8 elseplayer->RemoveItem _GN_Shard_Rock_5_p, 8 elseplayer->RemoveItem _GN_Shard_Rock_5_r, 8 elseplayer->RemoveItem _GN_Shard_Rock_5_w, 8set control to 7set type to 8endif elseif ( control == 10 )if ( ( player->GetItemCount "_GN_Shard_Rock_4_B" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_g" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_o" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_p" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_r" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_w" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_B" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_g" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_o" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_p" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_r" ) < control ) elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_w" ) < control ) set control to 3elseplayer->RemoveItem _GN_Shard_Rock_4_B, 10 elseplayer->RemoveItem _GN_Shard_Rock_4_g, 10 elseplayer->RemoveItem _GN_Shard_Rock_4_o, 10 elseplayer->RemoveItem _GN_Shard_Rock_4_p, 10 elseplayer->RemoveItem _GN_Shard_Rock_4_r, 10 elseplayer->RemoveItem _GN_Shard_Rock_4_w, 10 else player->RemoveItem _GN_Shard_Rock_5_B, 10 elseplayer->RemoveItem _GN_Shard_Rock_5_g, 10 elseplayer->RemoveItem _GN_Shard_Rock_5_o, 10 elseplayer->RemoveItem _GN_Shard_Rock_5_p, 10 elseplayer->RemoveItem _GN_Shard_Rock_5_r, 10 elseplayer->RemoveItem _GN_Shard_Rock_5_w, 10 set control to 7set type to 10endif elseif ( control == 3 );if they do not have enough fragmentsMessageBox "У вас недостаточно фрагментов кристаллов чтобы изготовить камень душ.", "OK"set control to 0 elseif ( control == 7 )set control to 11endif elseif ( control == 11 );SuccessMessageBox "Вы успешно изготовили камень душ.", "OK"if ( type == 2 )player->AddItem Misc_SoulGem_Petty, 1 player->removeitem "gold_001" 25elseif ( type == 4 )player->AddItem Misc_SoulGem_Lesser, 1 player->removeitem "gold_001" 25elseif ( type == 6 )player->AddItem Misc_SoulGem_Common, 1 player->removeitem "gold_001" 25elseif ( type == 8 )player->AddItem Misc_SoulGem_Greater, 1 player->removeitem "gold_001" 25elseif ( type == 10 )player->AddItem Misc_SoulGem_Grand, 1 player->removeitem "gold_001" 25endif;Play a successful sound herePlaySound "enchant success"set control to 0 endifEnd Спасибо за внимание, очень надеюсь на вашу помощь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 23 февраля, 2021 Жалоба Поделиться Опубликовано 23 февраля, 2021 (изменено) А где собственно проигрывается звук, playSound "chimes wood"? В большом скрипте куча else подряд, это не работает, только первый сработает. Там вообще не понятно чего хотели.Button == 5 это кнопка отмены, а деньги все равно забирает. В каждом блоке"_GN_Shard_Rock_5_w" ) < control ) set control to Нужно между этими двумя командами вставить else. Там где < control нужно заменить control на нормальное число соответственно ( 2 4 6 8 )Там видно будет. Изменено 23 февраля, 2021 пользователем Larkin Ссылка на комментарий Поделиться на другие сайты Поделиться
La Sombra del Mar Опубликовано 23 февраля, 2021 Автор Жалоба Поделиться Опубликовано 23 февраля, 2021 А где собственно проигрывается звук, playSound "chimes wood"?Там отдельный скрипт на установку палатки, и в нем проигрывается звук, видимо дело в этом. Но иначе тут сделать не выйдет, дело в том что палатка, которую устанавливаешь, и палатка, которую сворачиваешь, это два разных объекта: первая - миск-айтем (свернутый тюк, который дисейблится и на его месте появляется активатор), вторая - собственно этот активатор, с которым все происходит аналогичным образом - disable и PlaceAtMe. Вот скрипт установки: begin tent2_setup_test short buttonshort state if ( MenuMode == 1 )returnendif if ( state == 0 )if ( OnActivate == 1 )set button to 3set state to 1elseReturnendifendif if ( state == 1 )messagebox "Что вы хотите сделать?" "Установить тент" "Поднять"set state to 10endif if ( state == 10 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )DisablePlaceAtMe "Ashfall_tent_ashl_active" 1 0 0if ( CellChanged == 0 )PlayLoopSound3DVP "chimes wood", 1.0, 1.0set state to 0elseif ( button == 1 )activateset state to 0endifendifendif end В большом скрипте куча else подряд, это не работает, только первый сработает. Там вообще не понятно чего хотели.Button == 5 это кнопка отмены, а деньги все равно забирает. В каждом блоке"_GN_Shard_Rock_5_w" ) < control ) set control toНужно между этими двумя командами вставить else. Там где < control нужно заменить control на нормальное число соответственно ( 2 4 6 8 )Там видно будет.Охх, ну попробую разобраться, спасибо. Отпишу позже по этому скрипту. Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 23 февраля, 2021 Жалоба Поделиться Опубликовано 23 февраля, 2021 Эту штуку перенести в скрипт палатки if ( CellChanged == 0 )If ( getsoundplaying "chimes wood" == 0 )PlayLoopSound3DVP "chimes wood", 1.0, 1.0EndifEndifИз других мест убрать и stopsound тоже.Палатки и миски у вас размножаются и остаются в игре. Их надо удалить командойIf ( getdisabled ) Setdelete 1ReturnEndif Второй скрипт не понятен. Там лучше суммировать имеющиеся осколки. Ссылка на комментарий Поделиться на другие сайты Поделиться
La Sombra del Mar Опубликовано 24 февраля, 2021 Автор Жалоба Поделиться Опубликовано 24 февраля, 2021 (изменено) 1.Скрипт для камней заработал после некоторой перестановки, но есть одна проблема - команда срабатывает только для первого в списке типа осколков, другие алтарь в инвентаре не видит и выводит сообщение про "у вас недостаточно фрагментов камней". Попробовала разбить на отдельные блоки, энивей не работает: elseif ( control == 2 )if ( ( player->GetItemCount "_GN_Shard_Rock_4_B" ) < 2 ) set control to 3 elseplayer->RemoveItem _GN_Shard_Rock_4_B, 2 set control to 7set type to 2endif elseif ( control == 2 ) if ( ( player->GetItemCount "_GN_Shard_Rock_4_g" ) < 2 ) set control to 3 elseplayer->RemoveItem _GN_Shard_Rock_4_g, 2 set control to 7set type to 2endif elseif ( control == 2 ) if ( ( player->GetItemCount "_GN_Shard_Rock_4_o" ) < 2 ) set control to 3 elseplayer->RemoveItem _GN_Shard_Rock_4_o, 2 set control to 7set type to 2endif elseif ( control == 2 ) if ( ( player->GetItemCount "_GN_Shard_Rock_4_p" ) < 2 ) set control to 3 elseplayer->RemoveItem _GN_Shard_Rock_4_p, 2 set control to 7set type to 2endif elseif ( control == 2 ) if ( ( player->GetItemCount "_GN_Shard_Rock_4_r" ) < 2 ) set control to 3 elseplayer->RemoveItem _GN_Shard_Rock_4_r, 2 set control to 7set type to 2endif elseif ( control == 2 ) if ( ( player->GetItemCount "_GN_Shard_Rock_4_w" ) < 2 ) set control to 3 elseplayer->RemoveItem _GN_Shard_Rock_4_w, 2 set control to 7set type to 2endif elseif ( control == 2 ) if ( ( player->GetItemCount "_GN_Shard_Rock_5_B" ) < 2 ) set control to 3 else player->RemoveItem _GN_Shard_Rock_5_B, 2 set control to 7set type to 2endif elseif ( control == 2 ) if ( ( player->GetItemCount "_GN_Shard_Rock_5_g" ) < 2 ) set control to 3 elseplayer->RemoveItem _GN_Shard_Rock_5_g, 2 set control to 7set type to 2endif elseif ( control == 2 ) if ( ( player->GetItemCount "_GN_Shard_Rock_5_o" ) < 2 ) set control to 3 elseplayer->RemoveItem _GN_Shard_Rock_5_o, 2 set control to 7set type to 2endif elseif ( control == 2 ) if ( ( player->GetItemCount "_GN_Shard_Rock_5_p" ) < 2 ) set control to 3 elseplayer->RemoveItem _GN_Shard_Rock_5_p, 2 set control to 7set type to 2endif elseif ( control == 2 ) if ( ( player->GetItemCount "_GN_Shard_Rock_5_r" ) < 2 ) set control to 3 elseplayer->RemoveItem _GN_Shard_Rock_5_r, 2 set control to 7set type to 2endif elseif ( control == 2 ) if ( ( player->GetItemCount "_GN_Shard_Rock_5_w" ) < 2 ) set control to 3 else player->RemoveItem _GN_Shard_Rock_5_w, 2 set control to 7set type to 2endif Второй скрипт не понятен. Там лучше суммировать имеющиеся осколки.В идеале хотелось бы именно суммировать, т.е. чтобы алтарь реагировал только на количество осколков, независимо от их комбинаций, и выдавал камень душ в обмен не только на сочетания вида b+b, но также и например b+g. Есть ли возможность провернуть подобное, не перекраивая скрипт с ног до головы? 2. По скрипту палаток. Звук теперь вообще не проигрывается. Скорее всего из-за того что я какой-то из блоков пихаю куда-то не в то место: begin tent2_pickup_test short buttonshort state if ( MenuMode == 1 )returnendif if ( CellChanged == 0 )If ( GetSoundPlaying "chimes wood" == 0 )PlayLoopSound3DVP "chimes wood", 1.0, 1.0endifendif if ( state == 0 )if ( OnActivate == 1 )set button to 3set state to 1elseReturnendifendif if ( state == 1 )messagebox "Что вы хотите сделать?" "Ничего" "Свернуть тент"set state to 10endif if ( state == 10 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )returnset state to 0elseif ( button == 1 )DisablePlaceAtMe "ashfall_tent_ashl_misc" 1 0 0StopSound "chimes wood"set state to 0endifendifendif If ( GetDisabled )SetDelete 1Returnendif end Изменено 24 февраля, 2021 пользователем La Sombra del Mar Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 26 февраля, 2021 Жалоба Поделиться Опубликовано 26 февраля, 2021 (изменено) 2 блок if ( getdisabled в самый верхПотом if ( celchanged Скрипт с предметом. А какой предмет отнимается и на каком висит? С большим скриптом я пока не могу понять, что там и зачем. Изменено 26 февраля, 2021 пользователем Larkin Ссылка на комментарий Поделиться на другие сайты Поделиться
La Sombra del Mar Опубликовано 26 февраля, 2021 Автор Жалоба Поделиться Опубликовано 26 февраля, 2021 (изменено) 1. Так? begin tent2_pickup_test short buttonshort state if ( MenuMode == 1 )returnendif If ( GetDisabled )SetDelete 1Returnendif if ( CellChanged == 0 )If ( GetSoundPlaying "chimes wood" == 0 )PlayLoopSound3DVP "chimes wood", 1.0, 1.0endifendif if ( state == 0 )if ( OnActivate == 1 )set button to 3set state to 1elseReturnendifendif if ( state == 1 )messagebox "Что вы хотите сделать?" "Ничего" "Свернуть тент"set state to 10endif if ( state == 10 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )returnset state to 0elseif ( button == 1 )DisablePlaceAtMe "ashfall_tent_ashl_misc" 1 0 0if ( GetSoundPlaying "chimes wood" == 1 )StopSound "chimes wood"set state to 0endifendifendifendif end Повесила этот скрипт на активатор, который появляется после дисейбла миска. Звука нет. 2.Скрипт с предметом. А какой предмет отнимается и на каком висит?На призванной броне и призванном оружии, отнимаются они же. С целью предотвращения багоюзинга с остающимися в инвентаре призванными предметами. 3. В общем, имеется 12 типов осколков, отличающихся цветом и алхимическими свойствами (поэтому важно сохранить индивидуальный id для каждого типа). И есть приспособление, которому можно скормить эти осколки и получить взамен цельный камень душ любого типа, в зависимости от количества осколков - крохотный за 2, обычный за 4 и.т.д. по возрастающей. Сейчас это срабатывает только для одного типа осколков, остальные разновидности скриптом игнорируются - даже если в инвентаре лежит куча осколков всех типов. Забираются только те, что стоят первыми в списке. elseif ( control == 2 )if ( ( player->GetItemCount "_GN_Shard_Rock_4_B" ) < 2 ) set control to 3 elseplayer->RemoveItem _GN_Shard_Rock_4_B, 2 set control to 7set type to 2endif Вот на этот блок есть реакция. В ответ на 2 отданных осколка _GN_Shard_Rock_4_B выдается камень душ. А в ответ на _GN_Shard_Rock_4_g и дальше - игнор и сообщение про "у вас нет достаточного кол-ва осколков", хотя по факту они есть. В идеале хотелось бы чтобы камень душ выдавался при наличии требуемого количества ЛЮБЫХ осколков, независимо от их конфигурации. Если такое не потребует полного переписывания скрипта. На крайняк пусть группирует по типам, но чтобы это работало для ВСЕХ типов, а не только для одного.Надеюсь, получилось хоть немного прояснить. А не запутать еще сильнее.) Изменено 26 февраля, 2021 пользователем La Sombra del Mar Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 26 февраля, 2021 Жалоба Поделиться Опубликовано 26 февраля, 2021 (изменено) 1 скрипт должен висеть на самом тентеif ( CellChanged == 0 )If ( GetSoundPlaying "chimes wood" == 0 )PlayLoopSound3DVP "chimes wood", 1.0, 1.0endifendiЭто в самый верх. 2 чето не пойму почему не работает.3 сложный скрипт, он как будто изначально собран не рабочим и не предполагается его работа.Я бы суммировал все осколки.Set state to ( player->getitemcount ##1 )Set state to ( state + player->getitemcount "###" )....Messagebox "oskolkov u teba %g", state Потом проверил количествоIf ( state < control )Messahebox "ne hvataet"Set control to 0 ReturnElse А потом запустил бы забирание осколков по одному в каждом кадреSet controlvar to control Endif В началоЗабираем один осколокIf ( controlvar > 0 )Set controlvar to ( controlvar - 1 )If ( player-> getitemcount "##1"Plauer->removeitem ##1 1Elseif ( player-> getitemcount "##2"Player->removeitem ##2 1 ...EndifПотом когда забрали все что надо, даем че хотимIf ( controlvar == 0 )If ( control > 0 )If control == 2 датьтмаленькийElseIf control == 4 дать небольшойElseif...Set control to 0EndifEndif Изменено 26 февраля, 2021 пользователем Larkin Ссылка на комментарий Поделиться на другие сайты Поделиться
La Sombra del Mar Опубликовано 27 февраля, 2021 Автор Жалоба Поделиться Опубликовано 27 февраля, 2021 Возникли непонятки с парой моментов.Set state to ( player->getitemcount ##1 )Set state to ( state + player->getitemcount "###" )##1 это, как я понимаю, id одного из типов осколков. А что есть ###? И что в таком случае делать с остальными типами осколков чтобы они тоже суммировались? А потом запустил бы забирание осколков по одному в каждом кадреSet controlvar to controlEndifВ началоЗабираем один осколокIf ( controlvar > 0 )Set controlvar to ( controlvar - 1 )If ( player-> getitemcount "##1"Plauer->removeitem ##1 1Elseif ( player-> getitemcount "##2"Player->removeitem ##2 1Почему именно по одному? Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 27 февраля, 2021 Жалоба Поделиться Опубликовано 27 февраля, 2021 Возникли непонятки с парой моментов. ##1 это, как я понимаю, id одного из типов осколков. А что есть ###? И что в таком случае делать с остальными типами осколков чтобы они тоже суммировались? Почему именно по одному? Другой осколок, все надо перебрать по порядку. Копировать строку.Потому что если забирать по два, то как забрать единственный? Много кода будет. Ссылка на комментарий Поделиться на другие сайты Поделиться
La Sombra del Mar Опубликовано 27 февраля, 2021 Автор Жалоба Поделиться Опубликовано 27 февраля, 2021 А единственный забирать не требуется, там же расчет идет начиная с двух. Просто не могу понять как он тогда будет забирать 4, 6 и.т.п, не вижу чтобы это было где-то прописано. Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 28 февраля, 2021 Жалоба Поделиться Опубликовано 28 февраля, 2021 А единственный забирать не требуется, там же расчет идет начиная с двух. Просто не могу понять как он тогда будет забирать 4, 6 и.т.п, не вижу чтобы это было где-то прописано. Если у игрока один осколок + пять других. Я так понял, хотите, чтобы это считалось как шесть пригодных.Осколки забираются по одному каждый кадр, пока не заберут сколько надо. Ссылка на комментарий Поделиться на другие сайты Поделиться
La Sombra del Mar Опубликовано 28 февраля, 2021 Автор Жалоба Поделиться Опубликовано 28 февраля, 2021 (изменено) 1. Вот что получилось: begin Soul_gem_infuser short controlshort buttonshort typeshort stateshort controlvar If ( MenuMode == 1 )ReturnEndif if ( OnActivate == 1 )if ( control == 0 ) if ( Player->GetItemCount Gold_001 >= 25 )MessageBox "Этот аппарат позволяет фокусировать потоки метафизических энергий для изготовления цельных камней душ из отдельных фрагментов кристаллических морфолитов. Какой тип камня душ вы хотите изготовить? (Цена одного использования алтаря - 25 септимов.)", "Крохотный (2 фрагмента)", "Маленький (4 фрагмента)", "Обычный (6 фрагментов)", "Большой (8 фрагментов)", "Великий (10 фрагментов)", "Отмена"set control to 1elseMessageBox "У вас недостаточно золота чтобы воспользоваться алтарем. Цена одного использования - 25 септимов."set control to 0endifendifendif if ( control == 0 )returnendif if ( control == 1 )set button to GetButtonPressedif ( button == -1 )returnendif elseif ( button == 0)player->removeitem "gold_001" 25set control to 2 elseif ( button == 1)player->removeitem "gold_001" 25set control to 4 elseif ( button == 2)player->removeitem "gold_001" 25set control to 6 elseif ( button == 3)player->removeitem "gold_001" 25set control to 8 elseif ( button == 4)player->removeitem "gold_001" 25set control to 10 elseif ( button == 5)set control to 0endif Set state to ( player->getitemcount "_GN_Shard_Rock_4_B" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_g" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_o" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_p" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_r" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_w" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_B" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_g" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_o" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_p" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_r" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_w" ) If ( state < control )MessageBox "У вас недостаточно осколков кристаллов для изготовления камня душ"Set control to 0ReturnElseSet controlvar to controlEndif If ( controlvar > 0 )Set controlvar to ( controlvar - 1 )If ( player->getitemcount "_GN_Shard_Rock_4_B" )Player->removeitem _GN_Shard_Rock_4_B 1Elseif ( player-> getitemcount "_GN_Shard_Rock_4_g" )Player->removeitem _GN_Shard_Rock_4_g 1Elseif ( player-> getitemcount "_GN_Shard_Rock_4_o" )Player->removeitem _GN_Shard_Rock_4_o 1Elseif ( player-> getitemcount "_GN_Shard_Rock_4_p" )Player->removeitem _GN_Shard_Rock_4_p 1Elseif ( player-> getitemcount "_GN_Shard_Rock_4_r" )Player->removeitem _GN_Shard_Rock_4_r 1Elseif ( player-> getitemcount "_GN_Shard_Rock_4_w" )Player->removeitem _GN_Shard_Rock_4_w 1If ( player-> getitemcount "_GN_Shard_Rock_5_B" )Player->removeitem _GN_Shard_Rock_5_B 1Elseif ( player-> getitemcount "_GN_Shard_Rock_5_g" )Player->removeitem _GN_Shard_Rock_5_g 1Elseif ( player-> getitemcount "_GN_Shard_Rock_5_o" )Player->removeitem _GN_Shard_Rock_5_o 1Elseif ( player-> getitemcount "_GN_Shard_Rock_5_p" )Player->removeitem _GN_Shard_Rock_5_p 1Elseif ( player-> getitemcount "_GN_Shard_Rock_5_r" )Player->removeitem _GN_Shard_Rock_5_r 1Elseif ( player-> getitemcount "_GN_Shard_Rock_5_w" )Player->removeitem _GN_Shard_Rock_5_w 1endifendifendif If ( controlvar == 0 )If ( control > 0 )If control == 2 player->AddItem Misc_SoulGem_Petty, 1ElseIf control == 4 player->AddItem Misc_SoulGem_Lesser, 1ElseIf control == 6 player->AddItem Misc_SoulGem_Common, 1ElseIf control == 8 player->AddItem Misc_SoulGem_Greater, 1ElseIf control == 10 player->AddItem Misc_SoulGem_Grand, 1MessageBox "Вы успешно изготовили камень душ."PlaySound "enchant success"Set control to 0EndifEndifendif End В ответ на запрос о великом камне душ (10 фрагментов) забирается один осколок, первого типа, затем алтарь перестает реагировать на попытки активации вообще. Видимо, выпилила из скрипта чего-то лишнего. 2. По палатке: begin tent2_pickup_test short buttonshort state if ( CellChanged == 0 )If ( GetSoundPlaying "chimes wood" == 0 )PlayLoopSound3DVP "chimes wood", 1.0, 1.0endifendif If ( GetDisabled )SetDelete 1Returnendif if ( MenuMode == 1 )returnendif if ( state == 0 )if ( OnActivate == 1 )set button to 3set state to 1elseReturnendifendif if ( state == 1 )messagebox "Что вы хотите сделать?" "Ничего" "Свернуть тент"set state to 10endif if ( state == 10 )set button to GetButtonPressedif ( button == -1 )returnelseif ( button == 0 )returnset state to 0elseif ( button == 1 )DisablePlaceAtMe "ashfall_tent_ashl_misc" 1 0 0if ( GetSoundPlaying "chimes wood" == 1 )StopSound "chimes wood"set state to 0endifendifendifendif end Звука нет. Появляется он только если повесить скрипт на миск-айтем (то бишь не палатку, а свернутый тюк). Загвоздка в том, что после установки тента миск дисейблится и StopSound привязать к нему, как я понимаю, уже не выйдет. Есть вариант ставить вместе с тентом активатор со звуком и дисейблить его когда дисейблится тент. Жизнеспособна ли вообще конструкция вида "if ( "id объекта"->GetDisabled == 1 )disableendif" ? Изменено 28 февраля, 2021 пользователем La Sombra del Mar Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 1 марта, 2021 Жалоба Поделиться Опубликовано 1 марта, 2021 (изменено) 1 блок If ( controlvar > 0 в самый верх. if ( button == -1 )returnendif Ендиф не нужен. elseif ( button == 5)set control to 0endifСюда еще один ендиф. If ( controlvar == 0 )If ( control > 0 )If ( control == 2 )Первые две строчки убрать. В конце убрать два endif. If ( player-> getitemcount "_GN_Shard_Rock_5_B" )Player->removeitem _GN_Shard_Rock_5_B 1Тут почему if, нужно elseif. В конце один endif убрать. 2 попробуйте скопировать скрипт беседки с активатора, который специально звук проигрывает. И его помещайте командой placeatme "id" 1 1 1Конструкция работает. Изменено 1 марта, 2021 пользователем Larkin Ссылка на комментарий Поделиться на другие сайты Поделиться
La Sombra del Mar Опубликовано 1 марта, 2021 Автор Жалоба Поделиться Опубликовано 1 марта, 2021 Ну теперь вообще какой-то трэш начался.. Не возражаете если продолжим в лс? Чувствую, с правками мне еще долго предстоит возиться. Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 2 марта, 2021 Жалоба Поделиться Опубликовано 2 марта, 2021 Нормально все. Пробуйте. Ссылка на комментарий Поделиться на другие сайты Поделиться
La Sombra del Mar Опубликовано 4 марта, 2021 Автор Жалоба Поделиться Опубликовано 4 марта, 2021 Не работает, ни так как сказали, ни с переносом Set state to наверх. Точнее, работает только с великим камнем душ - в обмен на 10 осколков он выдается. А в ответ на запрос о других камнях забираются ВСЕ осколки, что есть в инвентаре, сколько бы их там ни было, но ничего не выдается. Что еще нужно исправить? Желательно сразу, а не по частям. begin Soul_gem_infuser short controlshort buttonshort typeshort stateshort controlvar Set state to ( player->getitemcount "_GN_Shard_Rock_4_B" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_g" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_o" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_p" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_r" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_w" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_B" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_g" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_o" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_p" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_r" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_w" ) If ( controlvar > 0 )Set controlvar to ( controlvar - 1 )If ( player->getitemcount "_GN_Shard_Rock_4_B" )Player->removeitem _GN_Shard_Rock_4_B 1Elseif ( player-> getitemcount "_GN_Shard_Rock_4_g" )Player->removeitem _GN_Shard_Rock_4_g 1Elseif ( player-> getitemcount "_GN_Shard_Rock_4_o" )Player->removeitem _GN_Shard_Rock_4_o 1Elseif ( player-> getitemcount "_GN_Shard_Rock_4_p" )Player->removeitem _GN_Shard_Rock_4_p 1Elseif ( player-> getitemcount "_GN_Shard_Rock_4_r" )Player->removeitem _GN_Shard_Rock_4_r 1Elseif ( player-> getitemcount "_GN_Shard_Rock_4_w" )Player->removeitem _GN_Shard_Rock_4_w 1elseif ( player-> getitemcount "_GN_Shard_Rock_5_B" )Player->removeitem _GN_Shard_Rock_5_B 1Elseif ( player-> getitemcount "_GN_Shard_Rock_5_g" )Player->removeitem _GN_Shard_Rock_5_g 1Elseif ( player-> getitemcount "_GN_Shard_Rock_5_o" )Player->removeitem _GN_Shard_Rock_5_o 1Elseif ( player-> getitemcount "_GN_Shard_Rock_5_p" )Player->removeitem _GN_Shard_Rock_5_p 1Elseif ( player-> getitemcount "_GN_Shard_Rock_5_r" )Player->removeitem _GN_Shard_Rock_5_r 1Elseif ( player-> getitemcount "_GN_Shard_Rock_5_w" )Player->removeitem _GN_Shard_Rock_5_w 1endifendif If ( MenuMode == 1 )ReturnEndifendif if ( OnActivate == 1 )if ( control == 0 ) if ( Player->GetItemCount Gold_001 >= 25 )MessageBox "Этот аппарат позволяет фокусировать потоки метафизических энергий для изготовления цельных камней душ из отдельных фрагментов кристаллических морфолитов. Какой тип камня душ вы хотите изготовить? (Цена одного использования алтаря - 25 септимов.)", "Крохотный (2 фрагмента)", "Маленький (4 фрагмента)", "Обычный (6 фрагментов)", "Большой (8 фрагментов)", "Великий (10 фрагментов)", "Отмена"set control to 1elseMessageBox "У вас недостаточно золота чтобы воспользоваться алтарем. Цена одного использования - 25 септимов."set control to 0endifendifendif if ( control == 0 )returnendif if ( control == 1 )set button to GetButtonPressedif ( button == -1 )return elseif ( button == 0)player->removeitem "gold_001" 25set control to 2 elseif ( button == 1)player->removeitem "gold_001" 25set control to 4 elseif ( button == 2)player->removeitem "gold_001" 25set control to 6 elseif ( button == 3)player->removeitem "gold_001" 25set control to 8 elseif ( button == 4)player->removeitem "gold_001" 25set control to 10 elseif ( button == 5)set control to 0endifendif If ( state < control )MessageBox "У вас недостаточно осколков кристаллов для изготовления камня душ"Set control to 0ReturnElseSet controlvar to controlEndif If control == 2 player->AddItem Misc_SoulGem_Petty, 1ElseIf control == 4 player->AddItem Misc_SoulGem_Lesser, 1ElseIf control == 6 player->AddItem Misc_SoulGem_Common, 1ElseIf control == 8 player->AddItem Misc_SoulGem_Greater, 1ElseIf control == 10 player->AddItem Misc_SoulGem_Grand, 1MessageBox "Вы успешно изготовили камень душ."PlaySound "enchant success"Set control to 0endif End Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 5 марта, 2021 Жалоба Поделиться Опубликовано 5 марта, 2021 begin Soul_gem_infuser short controlshort buttonshort typeshort stateshort controlvar if ( controlvar > 0 ) Set controlvar to ( controlvar - 1 ) if ( player->getitemcount "_GN_Shard_Rock_4_B" ) Player->removeitem _GN_Shard_Rock_4_B 1elseif ( player-> getitemcount "_GN_Shard_Rock_4_g" )Player->removeitem _GN_Shard_Rock_4_g 1elseif ( player-> getitemcount "_GN_Shard_Rock_4_o" )Player->removeitem _GN_Shard_Rock_4_o 1elseif ( player-> getitemcount "_GN_Shard_Rock_4_p" )Player->removeitem _GN_Shard_Rock_4_p 1elseif ( player-> getitemcount "_GN_Shard_Rock_4_r" )Player->removeitem _GN_Shard_Rock_4_r 1elseif ( player-> getitemcount "_GN_Shard_Rock_4_w" )Player->removeitem _GN_Shard_Rock_4_w 1elseif ( player-> getitemcount "_GN_Shard_Rock_5_B" )Player->removeitem _GN_Shard_Rock_5_B 1elseif ( player-> getitemcount "_GN_Shard_Rock_5_g" )Player->removeitem _GN_Shard_Rock_5_g 1elseif ( player-> getitemcount "_GN_Shard_Rock_5_o" )Player->removeitem _GN_Shard_Rock_5_o 1elseif ( player-> getitemcount "_GN_Shard_Rock_5_p" )Player->removeitem _GN_Shard_Rock_5_p 1elseif ( player-> getitemcount "_GN_Shard_Rock_5_r" )Player->removeitem _GN_Shard_Rock_5_r 1elseif ( player-> getitemcount "_GN_Shard_Rock_5_w" )Player->removeitem _GN_Shard_Rock_5_w 1 endif returnendif if ( MenuMode == 1 )Returnendif if ( OnActivate == 1 )if ( control == 0 ) if ( Player->GetItemCount Gold_001 >= 25 )MessageBox "Этот аппарат позволяет фокусировать потоки метафизических энергий для изготовления цельных камней душ из отдельных фрагментов кристаллических морфолитов. Какой тип камня душ вы хотите изготовить? (Цена одного использования алтаря - 25 септимов.)", "Крохотный (2 фрагмента)", "Маленький (4 фрагмента)", "Обычный (6 фрагментов)", "Большой (8 фрагментов)", "Великий (10 фрагментов)", "Отмена"set control to 1elseMessageBox "У вас недостаточно золота чтобы воспользоваться алтарем. Цена одного использования - 25 септимов."set control to 0endifendifendif if ( control == 0 )returnendif if ( control == 1 ) set button to GetButtonPressedif ( button == -1 ) return elseif ( button == 0)player->removeitem "gold_001" 25set control to 2 elseif ( button == 1)player->removeitem "gold_001" 25set control to 4 elseif ( button == 2)player->removeitem "gold_001" 25set control to 6 elseif ( button == 3)player->removeitem "gold_001" 25set control to 8 elseif ( button == 4)player->removeitem "gold_001" 25set control to 10 elseif ( button == 5)set control to 0returnendif Set state to ( player->getitemcount "_GN_Shard_Rock_4_B" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_g" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_o" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_p" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_r" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_w" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_B" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_g" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_o" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_p" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_r" )Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_w" ) if ( state < control )MessageBox "У вас недостаточно осколков кристаллов для изготовления камня душ"Set control to 0ReturnElseSet controlvar to controlendif if ( control == 2 )player->AddItem Misc_SoulGem_Petty, 1elseif ( control == 4 )player->AddItem Misc_SoulGem_Lesser, 1elseif ( control == 6 )player->AddItem Misc_SoulGem_Common, 1elseif ( control == 8 )player->AddItem Misc_SoulGem_Greater, 1elseif ( control == 10 )player->AddItem Misc_SoulGem_Grand, 1endif MessageBox "Вы успешно изготовили камень душ."PlaySound "enchant success"Set control to 0End Ссылка на комментарий Поделиться на другие сайты Поделиться
La Sombra del Mar Опубликовано 5 марта, 2021 Автор Жалоба Поделиться Опубликовано 5 марта, 2021 Вот теперь все заработало, огромное спасибо! Ссылка на комментарий Поделиться на другие сайты Поделиться
La Sombra del Mar Опубликовано 7 марта, 2021 Автор Жалоба Поделиться Опубликовано 7 марта, 2021 (изменено) Еще несколько вопросов по скриптам, над которыми я уже довольно долго мучаюсь. 1. Этот висит на двери, которая открывается только при условии того, что охраняющие ее мобы (2 штуки) мертвы. Если живы оба, или только один, при попытке активировать дверь на игрока кастуется заклинание. Когда моб только один, никаких проблем не возникает, но когда их 2 или больше, реакция есть только на одного. Пробовала уже по-всякому, в том числе через else - также не работает. begin door_script short doonce if ( doonce == 0 )if ( OnActivate == 1 )if ( GetLocked == 0 )if ( "mob1"->GetHealth <= 0 )if ( "mob2"->GetHealth <= 0 )ActivatePlayer->removeitem "key_pk" 1Set doonce to 1elseif ( "mob1"->GetHealth > 0 )elseif ( "mob2"->GetHealth > 0 )cast "shock_weary" playerMessageBox "Закрыто"endifendifendifendifendif End 2. Измененный скрипт изучения рецептов из книг плагина "Необходимости Морровинда". Нужно чтобы изучение становилось возможным только при наличии в инвентаре чистого листа бумаги и появлялось собщение про "вам нужна бумага", но при этом книга открывалась при активации. Эта часть работает. Но сам рецепт при этом не изучается даже при наличии в инвентаре бумаги. Что где исправить? begin NOM_book_adv short PCSkipEquipshort pickedup if ( pickedup == 1 )set pickedup to 0if ( NOM_cook_adv == 0 )if ( player->GetItemCount "NoM_list_book_02" < 1 )if ( player->GetItemCount "sc_paper plain" > 0 )player->RemoveItem "sc_paper plain" 1player->AddItem "NoM_list_book_02" 1PlaySound "scroll"messagebox "Вы выписываете список использованных в этой книге ингредиентов на чистый лист бумаги. Он вам пригодится в процессе готовки."PlaySound "skillraise"messagebox "Вы узнали новые рецепты из книги 'Пища Богов'."set NOM_cook_adv to 1Set doOnce to 1Activateif ( pickedup == 1 )set pickedup to 0if ( NOM_cook_adv == 0 )if ( player->GetItemCount "NoM_list_book_02" < 1 )if ( player->GetItemCount "sc_paper plain" < 1 )PlaySound "NoM_BadButton"messagebox "Вам нужен чистый лист бумаги, чтобы выписать список использованных в этой книге ингредиентов." Activateendifendifendifendifendifendifendifendif if ( PCSkipEquip == 1 ) ;did the player open the book in inventory?set pickedup to 1set PCSkipEquip to 0returnendif if ( MenuMode == 1 )returnendif end 3. В этом скрипте проблема со звуком эффекта - он не прекращается пока не выйдешь из ячейки. Как починить? Этот висит на самой трубке скуума: Begin _skooma_pipe float timershort buttonshort pickupshort status if ( pickup == 1 )Set pickup to 0activatereturnendif if ( OnActivate == 1 ) if ( MenuMode == 1 )Set pickup to 1returnendif if ( GetPCSneaking ) Set pickup to 1 return endifif ( player->GetItemCount, ingred_moon_sugar_01 > 0 )MessageBox "Что вы хотите сделать?" , "Курить трубку скуума", "Взять"Set status to 1else Set pickup to 1returnendifendif If ( status == 1 ) set button to GetButtonPressedif ( button == -1 ) returnelseif ( button == 0 ) player->RemoveItem, "ingred_moon_sugar_01", 1PlaceAtPC, "wh_skooma_spell_activator", 1, 0, 0Set status to 0elseif ( button == 1 )Set status to 0Set pickup to 1endifendif End А этот на активаторе, кастующем на игрока эффект: Begin _skooma_smoke float timershort stateshort doOnce if ( state == 0 ) ; play smoke sound, fade out, make player fallPlaysound, "Blackoutin"FadeOut 2Set state to 1elseif ( state == 1 ) ; smoking in progressSet timer to ( timer + GetSecondsPassed )if ( timer > 2 ) ; player is already lying and screen is black - cast skooma smoke effect onceif ( doOnce == 0 )Set doOnce to 1Cast, "wh_skooma_smoke_effect", Playerendifendifif ( timer > 2 ) ; fade in, make player stand upFadeIn 1.5Set timer to 0Set state to 2endifelse ; get rid of this objectif ( timer == 0 )disable endifif ( timer < 5 )Set timer to ( timer + GetSecondsPassed )endifif ( timer >= 5 )setdelete 1 endifreturnendif End 4. Скрипт, висящий на оружии, которое, будучи убранным из рук, вешается за спину в слот наплечника. Работает некорректно от слова совсем. Ткните пжлст носом в ошибки. begin Moon_reiver_sh Short DoOnce if ( GetDisabled )SetDelete 1returnendif If ( Player -> HasItemEquipped "moon_reiver_sheathed" )If ( Player -> GetWeaponDrawn )If ( DoOnce == 0 ) player->removeitem "moon_reiver_sheath", 1set DoOnce to 1 endifelseif ( DoOnce == 1 ) player->additem "moon_reiver_sheath", 1player->equip "moon_reiver_sheath", 1set DoOnce to 0endifendifendif End Изменено 7 марта, 2021 пользователем La Sombra del Mar Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 8 марта, 2021 Жалоба Поделиться Опубликовано 8 марта, 2021 1 а мобы то какие? Если не уникальные, то ничего не будет работать. Doonce и ключ убрать.2 if ( NOM_cook_adv == 0 ) это что за проверка? Заменить на doonce. if ( pickedup == 1 ) с первой этой строчки выставить этоset pickedup to 0if ( NOM_cook_adv == 0 )if ( player->GetItemCount "NoM_list_book_02" < 1 )if ( player->GetItemCount "sc_paper plain" < 1 )PlaySound "NoM_BadButton"messagebox "Вам нужен чистый лист бумаги, чтобы выписать список использованных в этой книге ингредиентов." ActivateElseplayer->RemoveItem "sc_paper plain" 1player->AddItem "NoM_list_book_02" 1PlaySound "scroll"messagebox "Вы выписываете список использованных в этой книге ингредиентов на чистый лист бумаги. Он вам пригодится в процессе готовки."PlaySound "skillraise"messagebox "Вы узнали новые рецепты из книги 'Пища Богов'."set NOM_cook_adv to 1Set doOnce to 1Activateendifendifendifendif 3 в самый верх if ( timer < 5 )Set timer to ( timer + GetSecondsPassed )endifif ( timer >= 5 )disablesetdelete 1Returnendif 4 не понятны id вещей. Ссылка на комментарий Поделиться на другие сайты Поделиться
La Sombra del Mar Опубликовано 8 марта, 2021 Автор Жалоба Поделиться Опубликовано 8 марта, 2021 (изменено) 1. Мобы уникальные. Что самое интересное, реакция есть только на одного, который mob1. Если он убит, а mob2 жив - получаем удар током. Если наоборот - никакой реакции. И если живы оба, реакции тоже нет. begin door_script if ( OnActivate == 1 )if ( GetLocked == 0 )if ( "mob1"->GetHealth <= 0 )if ( "mob2"->GetHealth <= 0 )Activateelseif ( "mob1"->GetHealth > 0 )elseif ( "mob2"->GetHealth > 0 )cast "shock_weary" playerMessageBox "Закрыто"endifendifendifendif End 2. 2 if ( NOM_cook_adv == 0 ) это что за проверка? Заменить на doonce. Это проверка знает ли уже игрок этот рецепт. Думаю, сойдет вместо doonce. Но в таком виде вообще все перестало работать - ни сообщения про "нужна бумага" нет, ни рецепт не выучивается из книги. Я так понимаю, else учитывает только что-то одно, а тут нужно проверить и наличие бумаги и знает ли игрок этот рецепт. begin NOM_book_adv short PCSkipEquipshort pickedup if ( pickedup == 1 )set pickedup to 0if ( NOM_cook_adv == 0 )if ( player->GetItemCount "NoM_list_book_02" < 1 )if ( player->GetItemCount "sc_paper plain" < 1 )PlaySound "NoM_BadButton"messagebox "Вам нужен чистый лист бумаги, чтобы выписать список использованных в этой книге ингредиентов." Activateelseplayer->RemoveItem "sc_paper plain" 1player->AddItem "NoM_list_book_02" 1PlaySound "scroll"messagebox "Вы выписываете список использованных в этой книге ингредиентов на чистый лист бумаги. Он вам пригодится в процессе готовки."PlaySound "skillraise"messagebox "Вы узнали новые рецепты из книги 'Пища Богов'."set NOM_cook_adv to 1Activateendifendifendifendif if ( PCSkipEquip == 1 ) ;did the player open the book in inventory?set pickedup to 1set PCSkipEquip to 0returnendif if ( MenuMode == 1 )returnendif end 3. Теперь все нормально со звуком, премного благодарна. 4. 4 не понятны id вещей.moon_reiver_sheathed это непосредственно само оружие. moon_reiver_sheath это "типа ножны", которые по факту та же модель оружия, только висящая за спиной (технически - наплечник). Изменено 8 марта, 2021 пользователем La Sombra del Mar Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 12 марта, 2021 Жалоба Поделиться Опубликовано 12 марта, 2021 (изменено) 1 заменить с седьмой строки на ActivateReturnEndifEndifcast "shock_weary" playerMessageBox "Закрыто"endifendif2 уберите NOM_cook_adv, это название скрипта. Замените.4 попробуйте перекинуть с оружия на любой активатор Изменено 12 марта, 2021 пользователем Larkin Ссылка на комментарий Поделиться на другие сайты Поделиться
La Sombra del Mar Опубликовано 13 марта, 2021 Автор Жалоба Поделиться Опубликовано 13 марта, 2021 (изменено) 1 заменить с седьмой строки наActivateReturnEndifEndifcast "shock_weary" playerMessageBox "Закрыто"endifendifА ларчик-то просто открывался.. Заработало, спасибо. 2 уберите NOM_cook_adv, это название скрипта. Замените.Название скрипта NOM_book_adv. А NOM_cook_adv это переменная. Попробовала еще вот так, но тоже ничего не работает. Что я делаю не так? begin NOM_book_adv short PCSkipEquipshort pickedupshort NOM_cook_adv if ( pickedup == 1 )set pickedup to 0if ( NOM_cook_adv == 0 )if ( player->GetItemCount "NoM_list_book_02" < 1 )if ( player->GetItemCount "sc_paper plain" < 1 )PlaySound "NoM_BadButton"messagebox "Вам нужен чистый лист бумаги, чтобы выписать список использованных в этой книге ингредиентов." Activateelseif ( NOM_cook_adv == 0 )if ( player->GetItemCount "NoM_list_book_02" < 1 )if ( player->GetItemCount "sc_paper plain" > 0 )player->RemoveItem "sc_paper plain" 1player->AddItem "NoM_list_book_02" 1PlaySound "scroll"messagebox "Вы выписываете список использованных в этой книге ингредиентов на чистый лист бумаги. Он вам пригодится в процессе готовки."PlaySound "skillraise"messagebox "Вы узнали новые рецепты из книги 'Пища Богов'."set NOM_cook_adv to 1Activateendifendifendifendifendifendif if ( PCSkipEquip == 1 ) ;did the player open the book in inventory?set pickedup to 1set PCSkipEquip to 0returnendif if ( MenuMode == 1 )returnendif 4 попробуйте перекинуть с оружия на любой активаторЕсть еще один скрипт наподобие, там все работает и без активаторов. Но есть одна проблема - после того как персонаж убрал оружие, ножны все равно остаются пустыми, хотя в скрипте прописано добавление и экипировка версии ножен с оружием. Причем работать это перестало после добавления последнего блока. Можете что-нибудь тут подсказать? begin ebonyClaymore_sheathescript Short DoOnce if ( GetDisabled ) SetDelete 1 return endif If ( Player -> HasItemEquipped "k7_sme_arena_claymore" )If ( Player -> GetWeaponDrawn )If ( DoOnce == 0 ) player->additem "k7_sme_quiver_ebony_ush_3", 1 player->equip "k7_sme_quiver_ebony_ush_3", 1player->removeitem "k7_sme_quiver_ebony_sh_3", 1 set DoOnce to 1endifendifelseif ( DoOnce == 1 ) player->additem "k7_sme_quiver_ebony_sh_3", 1 player->equip "k7_sme_quiver_ebony_sh_3", 1 player->removeitem "k7_sme_quiver_ebony_ush_3", 1 set DoOnce to 0 endif endifendif if ( Player->GetItemCount "k7_sme_arena_claymore" < 1 ) player->removeitem "k7_sme_quiver_ebony_sh_3", 1 endif End Изменено 13 марта, 2021 пользователем La Sombra del Mar Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 16 марта, 2021 Жалоба Поделиться Опубликовано 16 марта, 2021 (изменено) 1 не понятно на чем этот скрипт висит и что nom list book 02.После строки set pickedup to 1 Еще добавьте messagebox "чтение книги?" 2 сами ножны в инвентарь добавляются?Последний блок удалить. И до него два еndif лишние. Изменено 16 марта, 2021 пользователем Larkin Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти