Varang Опубликовано 5 января, 2020 Жалоба Поделиться Опубликовано 5 января, 2020 (изменено) Ну оптимизация у вас, факап. Там где можно обойтись двумя переменными заводится целых пять. И деление в каждом кадре.Нужно боольше doOnce, больше таймеров! Давай 500 делений в кадре?Так покажи рабочий, на твой взгляд, вариант, только не абстрактно, а на примере скрипта выше...Хотя бы на одном блоке. Я бы и потестил. Потому и написал в темке, чтоб помогли, а критиковать всем нетрудно... Изменено 5 января, 2020 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 5 января, 2020 Жалоба Поделиться Опубликовано 5 января, 2020 (изменено) short state float timer if ( state != -1 ) if ( state == 1 ) if ( timer > 0 ) set timer to ( timer - getsecondspassed ) elseif ( gethealthgetratio < 0.7 ) modcurrenthealth 30 removeitem p_restore_health_e 1 set timer to 3. set state to 0 playsound3D drink return endif elseif ( getitemcount p_restore_health_e > 0 ) set state to 1 messagebox "он выпьет... " else set state to -1 endif endif Изменено 5 января, 2020 пользователем Larkin Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 5 января, 2020 Жалоба Поделиться Опубликовано 5 января, 2020 (изменено) short state float timer if ( state != -1 ) if ( state == 1 ) if ( timer > 0 ) set timer to ( timer - getsecondspassed ) elseif ( gethealthgetratio < 0.7 ) modcurrenthealth 30 removeitem p_restore_health_e 1 set timer to 3. set state to 0 playsound3D drink return endif elseif ( getitemcount p_restore_health_e > 0 ) set state to 1 messagebox "он выпьет... " else set state to -1 endif endif Погоди, но на остальные 4 типа зелий ведь тоже самое придется делать, и скрипт не уменьшится? На каждое зелье свой state, ПОЛУЧАЕТСЯ? Изменено 5 января, 2020 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
olol Опубликовано 5 января, 2020 Жалоба Поделиться Опубликовано 5 января, 2020 Для чего придумали тарелки для супа, каши и кружку для чая ?Все можно наливать в одну большую кружку, тогда придется меньше мыть посуды в фигваме.Оптимизация однако... Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 5 января, 2020 Жалоба Поделиться Опубликовано 5 января, 2020 (изменено) Погоди, но на остальные 4 типа зелий ведь тоже самое придется делать, и скрипт не уменьшится? На каждое зелье свой state, ПОЛУЧАЕТСЯ?Предполагается, что на каждое зелье свое значение state, для другого state = 2 , 3 и т.д. таймер один для всех. На сим я откланиваюсь. Изменено 5 января, 2020 пользователем Larkin Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 5 января, 2020 Жалоба Поделиться Опубликовано 5 января, 2020 (изменено) Ни какого перегруза быть не должно, если не работает при добавлении магии, то наверно она и одна работать не будет. Set f to GetMagicka / MaxMagicka - здесь пишет, что не может быть значения "f". Я изменил на слово "mana", скрипт сохранился, но при тесте ошибка вылетала еще при входе в локацию, такого вообще 100 лет не было... begin A_A_NPC_USING_POTION_HEALTHshort doOnceshort doInitFloat MaxMagickafloat timerHealthfloat timerMagfloat mana if ( doOnce ); NPC мертв returnelseIf ( OnDeath ); NPC умер set doOnce to 1; фиксируем смерть returnelseif ( doInit == 0 ) Set MaxMagicka to GetMagicka set doInit to 1; запоминаем начальную величину магииendifif ( timerHealth > 0 ); если задан таймер задержки set timerHealth to ( timerHealth - getsecondspassed ); уменьшаем таймерelseif ( GetEffect, sEffectRestoreHealth ); еще не кончился эффектelseif ( GetHealthGetRatio < 0.5); стало мало жизни if ( GetItemCount "p_restore_health_e" > 0 ); есть в наличии бутылек Modcurrenthealth 200 if ( GetSoundPlaying "Drink" == 0 ) PlaySound "Drink" endif RemoveItem "p_restore_health_e" 1 set timerHealth to 3; задаем три секунды таймеру elseif ( GetItemCount "p_restore_health_q" > 0 ); проверка на следующий бутылек если нет предыдущего Modcurrenthealth 100 if ( GetSoundPlaying "Drink" == 0 ) PlaySound "Drink" endif RemoveItem "p_restore_health_q" 1 set timerHealth to 3; задаем три секунды таймеру elseif ( GetItemCount "p_restore_health_s" > 0 ); проверка на следующий бутылек если нет предыдущего Modcurrenthealth 50 if ( GetSoundPlaying "Drink" == 0 ) PlaySound "Drink" endif RemoveItem "p_restore_health_s" 1 set timerHealth to 3; задаем три секунды таймеру elseif ( GetItemCount "p_restore_health_c" > 0 ); проверка на следующий бутылек если нет предыдущего Modcurrenthealth 25 if ( GetSoundPlaying "Drink" == 0 ) PlaySound "Drink" endif RemoveItem "p_restore_health_c" 1 set timerHealth to 3; задаем три секунды таймеру elseif ( GetItemCount "p_restore_health_b" > 0 ); проверка на следующий бутылек если нет предыдущего Modcurrenthealth 15 if ( GetSoundPlaying "Drink" == 0 ) PlaySound "Drink" endif RemoveItem "p_restore_health_b" 1 set timerHealth to 3; задаем три секунды таймеруendifendif Set mana to GetMagicka / MaxMagickaif ( timerMag > 0 ); если задан таймер задержки set timerMag to ( timerMag - getsecondspassed ); уменьшаем таймерelseif ( GetEffect, sEffectRestoreSpellPoints ); еще не кончился эффектelseif ( mana < 0.5); стало мало маны if ( GetItemCount "p_restore_magicka_e" > 0 ); есть в наличии бутылек Modcurrentmagicka 300 if ( GetSoundPlaying "Drink" == 0 ) PlaySound "Drink" endif RemoveItem "p_restore_magicka_e" 1 set timerMag to 3; задаем три секунды таймеру elseif ( GetItemCount "p_restore_magicka_q" > 0 ); проверка на следующий бутылек если нет предыдущего Modcurrentmagicka 150 if ( GetSoundPlaying "Drink" == 0 ) PlaySound "Drink" endif RemoveItem "p_restore_magicka_q" 1 set timerMag to 3; задаем три секунды таймеру elseif ( GetItemCount "p_restore_magicka_s" > 0 ); проверка на следующий бутылек если нет предыдущего Modcurrentmagicka 75 if ( GetSoundPlaying "Drink" == 0 ) PlaySound "Drink" endif RemoveItem "p_restore_magicka_s" 1 set timerMag to 3; задаем три секунды таймеру elseif ( GetItemCount "p_restore_magicka_c" > 0 ); проверка на следующий бутылек если нет предыдущего Modcurrentmagicka 40 if ( GetSoundPlaying "Drink" == 0 ) PlaySound "Drink" endif RemoveItem "p_restore_magicka_c" 1 set timerMag to 3; задаем три секунды таймеру elseif ( GetItemCount "p_restore_magicka_b" > 0 ); проверка на следующий бутылек если нет предыдущего Modcurrentmagicka 20 if ( GetSoundPlaying "Drink" == 0 ) PlaySound "Drink" endif RemoveItem "p_restore_magicka_b" 1 set timerMag to 3; задаем три секунды таймеруendifendifend Кстати, я потестил ModCurrent отдельно магию и усталость - они работают, хотя и иногда с зависаниями. Но скрипт из 2- 3х модулей игра не вывозит ну никак. Изменено 6 января, 2020 пользователем Scarab-Phoenix Ссылка на комментарий Поделиться на другие сайты Поделиться
olol Опубликовано 5 января, 2020 Жалоба Поделиться Опубликовано 5 января, 2020 замени: Set mana to GetMagicka / MaxMagickaна:Set mana to GetMagickaSet mana to mana / MaxMagicka Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 5 января, 2020 Жалоба Поделиться Опубликовано 5 января, 2020 (изменено) замени: Set mana to GetMagicka / MaxMagickaна:Set mana to GetMagickaSet mana to mana / MaxMagicka Ошибка, только теперь уже прям в бою Кстати, зачем теперь вот эта вот проверка, если зелья, по сути, не "пьются" как таковые? elseif ( GetEffect, sEffectRestoreSpellPoints ); еще не кончился эффект Изменено 5 января, 2020 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
olol Опубликовано 6 января, 2020 Жалоба Поделиться Опубликовано 6 января, 2020 (изменено) проверка на эффект не нужна я не вижу причин для сбоя, перегруженность это фигня.Видимо что-то нельзя вызывать вместе.можно их проверять по очереди:1) добавь переменную:short State 2) добавь проверку для этих блоков: if ( State == 0 ) Set State to 1elseif ( State == 1 ) Set State to 2else Set State to 0endif if ( State == 0 )if ( timerHealth > 0 ); если задан таймер задержки...endif if ( State == 1 )Set mana to GetMagicka...endif State будет меняться: 0 1 2 0 1 2...проверки будут разнесены по времени. Изменено 6 января, 2020 пользователем olol Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 6 января, 2020 Жалоба Поделиться Опубликовано 6 января, 2020 (изменено) В общем, я решил провести еще один опыт - я перенес блок со здоровьем вниз, убрал проверки на эффект и убрал звуки. Скрипт стал рабочим вот в таком формате: begin A_A_NPC_USING_POTION_PLEASEfloat timerHealthfloat timerMagshort doOnce if ( doOnce ); NPC мертв returnelseIf ( OnDeath ); NPC умер set doOnce to 1; фиксируем смерть returnendif;---------------------------------Магияif ( timerMag > 0 ); если задан таймер задержки set timerMag to ( timerMag - getsecondspassed ); уменьшаем таймерelseif ( GetMagicka < 100); стало мало маны if ( GetItemCount "p_restore_magicka_e" > 0 ); есть в наличии бутылек Modcurrentmagicka 300RemoveItem "p_restore_magicka_e" 1 set timerMag to 3; задаем три секунды таймеру elseif ( GetItemCount "p_restore_magicka_q" > 0 ); проверка на следующий бутылек если нет предыдущего Modcurrentmagicka 150RemoveItem "p_restore_magicka_q" 1 set timerMag to 3 elseif ( GetItemCount "p_restore_magicka_s" > 0 ) Modcurrentmagicka 75RemoveItem "p_restore_magicka_s" 1 set timerMag to 3 elseif ( GetItemCount "p_restore_magicka_c" > 0 ) Modcurrentmagicka 40RemoveItem "p_restore_magicka_c" 1 set timerMag to 3 elseif ( GetItemCount "p_restore_magicka_b" > 0 ) Modcurrentmagicka 20RemoveItem "p_restore_magicka_b" 1 set timerMag to 3 endifendifif ( timerHealth > 0 ); если задан таймер задержки set timerHealth to ( timerHealth - getsecondspassed ); уменьшаем таймерelseif ( GetHealthGetRatio < 0.5); стало мало жизни if ( GetItemCount "p_restore_health_e" > 0 ); есть в наличии бутылек Modcurrenthealth 200RemoveItem "p_restore_health_e" 1 set timerHealth to 3; задаем три секунды таймеру elseif ( GetItemCount "p_restore_health_q" > 0 ); проверка на следующий бутылек если нет предыдущего Modcurrenthealth 100RemoveItem "p_restore_health_q" 1 set timerHealth to 3 elseif ( GetItemCount "p_restore_health_s" > 0 ) Modcurrenthealth 50RemoveItem "p_restore_health_s" 1 set timerHealth to 3 elseif ( GetItemCount "p_restore_health_c" > 0 ) Modcurrenthealth 25RemoveItem "p_restore_health_c" 1 set timerHealth to 3 elseif ( GetItemCount "p_restore_health_b" > 0 ) Modcurrenthealth 15RemoveItem "p_restore_health_b" 1 set timerHealth to 3 endifendifend После этого я аккуратно врезал такой же урезанный блок усталости в самое начало (вроде как скрипты читаются снизу вверх, как мне сказали). Скрипт вновь показал работоспособность, причем без вылетов и тормозов.Получается, звук и проверка на эффект настолько сильно грузили скрипт, что он не мог нормально работать? Изменено 6 января, 2020 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
Scarab-Phoenix Опубликовано 6 января, 2020 Жалоба Поделиться Опубликовано 6 января, 2020 После этого я аккуратно врезал такой же урезанный блок усталости в самое начало (вроде как скрипты читаются снизу вверх, как мне сказали). Скрипт вновь показал работоспособность, причем без вылетов и тормозов.Получается, звук и проверка на эффект настолько сильно грузили скрипт, что он не мог нормально работать?"Грузили скрипт" - это нонсенс. Я бы лучше проверил сам код в той части скрипта, где был звук. Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 6 января, 2020 Жалоба Поделиться Опубликовано 6 января, 2020 (изменено) "Грузили скрипт" - это нонсенс. Я бы лучше проверил сам код в той части скрипта, где был звук.Там код из одной команды, максимум двух. Уже перепроверяли неоднократно. Я хз, может команду проигрывания звука надо останавливать, чтоб не подвисала? Кстати, нашел в MSFD вот это: "В меню “Gameplay”->“Sound menu” Вы можете видеть список всевозможных звуков и их идентификаторов. Учтите, что по каким-то причинам ID “drink” создаёт ошибку, поэтому нет возможности проверить, выпил ли игрок что-нибудь." Может, заменить на др звук, например, от заклинания восстановления? Изменено 6 января, 2020 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
olol Опубликовано 6 января, 2020 Жалоба Поделиться Опубликовано 6 января, 2020 (изменено) чёй-то тебе крупно не повезло, собрал все баги движка сразу.вот и попробуй тут вычислить причину... рискну посоветовать попробовать сделать то же самое с Equipt :) а со звуком можно просто создать другой drink2 с тем же звуком и использовать его. Изменено 6 января, 2020 пользователем olol Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 6 января, 2020 Жалоба Поделиться Опубликовано 6 января, 2020 (изменено) чёй-то тебе крупно не повезло, собрал все баги движка сразу.вот и попробуй тут вычислить причину... рискну посоветовать попробовать сделать то же самое с Equipt :) а со звуком можно просто создать другой drink2 с тем же звуком и использовать его.А звук восстановления спеллов\зелий - где мне название найти - в эффектах заклинаний же? Возьму его для верности:) Если не заработает - беру версию без звука - пилю глобалки через активаторы, и в топку все. Играть уже охота, а эти тесты все впечатление от игры портят. Эти дурацкие забеги по окрестным пещерам в 100500й раз.... Изменено 6 января, 2020 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 7 января, 2020 Жалоба Поделиться Опубликовано 7 января, 2020 В общем, походу звук Drink был багованный - при его замене на звук заклинания восстановления прекратились тормоза и вылеты. Остается скрестить пальцы, что это пока последние сюрпризы. Ссылка на комментарий Поделиться на другие сайты Поделиться
Спектор Марк Опубликовано 24 марта, 2020 Жалоба Поделиться Опубликовано 24 марта, 2020 Как-нибудь можно проверить класс игрока через ID класса?Типо: класс игрока такой-то = 1То дать игроку такую-то способностьЕсли не равно 1То не давать игроку такую способность Ссылка на комментарий Поделиться на другие сайты Поделиться
Scarab-Phoenix Опубликовано 24 марта, 2020 Жалоба Поделиться Опубликовано 24 марта, 2020 Как-нибудь можно проверить класс игрока через ID класса?Типо: класс игрока такой-то = 1То дать игроку такую-то способностьЕсли не равно 1То не давать игроку такую способностьНикак, увы.В СХ для этого наворотили целую уйму скриптов, которые, кажется, сравнивают диапазоны стартовых умений у разных классов с навыками игрока. Ссылка на комментарий Поделиться на другие сайты Поделиться
Спектор Марк Опубликовано 24 марта, 2020 Жалоба Поделиться Опубликовано 24 марта, 2020 Никак, увы.В СХ для этого наворотили целую уйму скриптов, которые, кажется, сравнивают диапазоны стартовых умений у разных классов с навыками игрока.В скриптах они проверяют значения навыков данного класса, а потом если совпадает - то дают способность. Я попытался так же сделать, но только подогнал под данмеров, но не работает. А делать через созвездия - ну такое Ссылка на комментарий Поделиться на другие сайты Поделиться
-=ChieF=- Опубликовано 28 июня, 2020 Жалоба Поделиться Опубликовано 28 июня, 2020 (изменено) Друзья, подскажите пожалуйста. Есть у нас в базе вот такой любопытный плагин:Профессиональный алхимик Помимо основных изменений с алхимией в комплект входят переносные контейнеры:Также мод предоставляет специальные переносные контейнеры (дорожные мешки и сундуки), облегчающие жизнь профессионального алхимика, таскающего с собой кучу ингердиентов: при выкладывании контейнера в него автоматически складываются предметы из предопределённого набора, зависящего от вида контейнера. Мне хотелось бы использовать что-то вроде такого переносного контейнера с плагинами, которые включают ограничения на плавание, мол, персонаж тонет в воде, если у него забит инвентарь предметами.Идея лежит на поверхности - перед тем, как куда-то плыть, хотелось бы чуть ли не одной кнопкой выложить мешок со всеми предметами на землю, а после плавания тут же всё забрать. В общем-то, благодаря этому плагину это в целом возможно.На контейнере "Походный мешок" висит вот такой скрипт: Begin A1V4_RoadBagMiscItem_1_sc short OnPCDrop if ( GetDisabled == 1 ) SetDelete 1 return endif if ( OnPCDrop == 1 ) set OnPCDrop to 0 set A1V4_RoadBagX to GetPos X set A1V4_RoadBagY to GetPos Y set A1V4_RoadBagZ to GetPos Z PlaceAtPC A1V4_RoadBagMiscCont_1 1, 50, 0 Disable endif End Который в свою очередь ссылается на вот такой скрипт: Begin A1V4_RoadBagMiscCont_1_sc short doOnce short doRemove short doDisable short temp float cx float cy float cz long invItem long invCount long invRef long pcRef long invRefType long tempLong float invWeight long invNextRef short doActivate short waitActivate if ( doDisable > 20 ) if ( GetDisabled == 1 ) SetDelete 1 return endif endif if ( doDisable > 20 ) Disable return endif if ( doDisable > 0 ) AddItem "A1V4_RoadBagFakeIngred", 2 set doDisable to ( doDisable + 1 ) return endif if ( GetDisabled == 1 ) Enable set doDisable to 1 endif if ( waitActivate == 2 ) if ( MenuMode == 0 ) set waitActivate to 0 if ( GetItemCount A1V4_RoadBagMiscItem_1 == 0 ) set doDisable to 1 endif endif return elseif ( waitActivate == 1 ) if ( MenuMode == 1 ) set waitActivate to 2 endif return endif if ( MenuMode == 1 ) return endif ifx ( doOnce ) else DisablePlayerControls set doOnce to 1 set cx to A1V4_RoadBagX set cy to A1V4_RoadBagY set cz to A1V4_RoadBagZ SetPos X cx SetPos Y cy SetPos Z cz setx invItem,invCount,invRef to xInventory whilex ( invCount ) xRemoveItem invItem invCount setx invItem,invCount,invRef to xInventory endwhile AddItem "A1V4_RoadBagMiscItem_1", 1 set invRef to 0 set doRemove to 1 return endif if ( doActivate == 1 ) set waitActivate to 1 set doActivate to 0 Activate return endif if ( doRemove == 10 ) set doRemove to 0 MessageBox "Предметы выложены" EnablePlayerControls return endif if ( doRemove > 5 ) set temp to 1 else set temp to 0 endif ifx ( temp ) setx pcRef to xGetRef "player" whilex ( pcRef ) setx invItem,invCount,invRefType,tempLong,invWeight,tempLong,invNextRef to pcRef->xContentList invRef ifx ( invItem ) set temp to 1 ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_raw_Stalhrim_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_raw_glass_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_raw_glass_tinos" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_raw_ebony_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_adamantium_ore_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_ruby_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_emerald_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_emerald_pinetear" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_pearl_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_diamond_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "deepnight_travelFood" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_bread_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "food_kwama_egg_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "food_kwama_egg_02" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_ash_yam_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_scrib_jerky_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_crab_meat_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_hound_meat_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_human_meat_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_rat_meat_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_scuttle_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_saltrice_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "deepnight_campement01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "Balors_portable_Bedroll" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "misc_de_muck_shovel_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "full_waterskin" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "halffull_waterskin" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "nearlyfull_waterskin" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "nearlyempty_waterskin" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "empty_waterskin" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "index_" if ( tempLong > 0 ) set tempLong to 1 else set tempLong to 0 endif ifx ( tempLong ) setx tempLong to xStringCompare invItem, "index_z" if ( tempLong < 0 ) set temp to 0 endif endif endif ifx ( temp ) else pcRef->xRemoveItem invItem invCount xAddItem invItem invCount set invRef to 0 set pcRef to 0 set doRemove to 1 endif endif if ( doRemove > 1 ) set invRef to invNextRef endif if ( invNextRef == 0 ) set pcRef to 0 set doRemove to 10 endif endwhile return endif if ( doRemove > 0 ) set doRemove to ( doRemove + 1 ) return endif if ( OnActivate == 1 ) set doActivate to 1 return endif End Т.е. идея в целом проста - во второй скрипт можно прописать ID всех предметов, которые тебя интересуют. Но есть ли способ отредактировать второй скрипт так, чтобы он работал по логике "Выложить все предметы из инвентаря, которые не экипированы на персонаже"? p.s. Или можно даже ещё проще - вообще тупо перенести весь инвентарь в контейнер. Потому что потом взять из контейнера нужное и экипировать на персонажа, в принципе, не проблема. Изменено 28 июня, 2020 пользователем -=ChieF=- Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 28 июня, 2020 Жалоба Поделиться Опубликовано 28 июня, 2020 Друзья, подскажите пожалуйста. Есть у нас в базе вот такой любопытный плагин:Профессиональный алхимик Помимо основных изменений с алхимией в комплект входят переносные контейнеры: Мне хотелось бы использовать что-то вроде такого переносного контейнера с плагинами, которые включают ограничения на плавание, мол, персонаж тонет в воде, если у него забит инвентарь предметами.Идея лежит на поверхности - перед тем, как куда-то плыть, хотелось бы чуть ли не одной кнопкой выложить мешок со всеми предметами на землю, а после плавания тут же всё забрать. В общем-то, благодаря этому плагину это в целом возможно.На контейнере "Походный мешок" висит вот такой скрипт: Begin A1V4_RoadBagMiscItem_1_sc short OnPCDrop if ( GetDisabled == 1 ) SetDelete 1 return endif if ( OnPCDrop == 1 ) set OnPCDrop to 0 set A1V4_RoadBagX to GetPos X set A1V4_RoadBagY to GetPos Y set A1V4_RoadBagZ to GetPos Z PlaceAtPC A1V4_RoadBagMiscCont_1 1, 50, 0 Disable endif End Который в свою очередь ссылается на вот такой скрипт: Begin A1V4_RoadBagMiscCont_1_sc short doOnce short doRemove short doDisable short temp float cx float cy float cz long invItem long invCount long invRef long pcRef long invRefType long tempLong float invWeight long invNextRef short doActivate short waitActivate if ( doDisable > 20 ) if ( GetDisabled == 1 ) SetDelete 1 return endif endif if ( doDisable > 20 ) Disable return endif if ( doDisable > 0 ) AddItem "A1V4_RoadBagFakeIngred", 2 set doDisable to ( doDisable + 1 ) return endif if ( GetDisabled == 1 ) Enable set doDisable to 1 endif if ( waitActivate == 2 ) if ( MenuMode == 0 ) set waitActivate to 0 if ( GetItemCount A1V4_RoadBagMiscItem_1 == 0 ) set doDisable to 1 endif endif return elseif ( waitActivate == 1 ) if ( MenuMode == 1 ) set waitActivate to 2 endif return endif if ( MenuMode == 1 ) return endif ifx ( doOnce ) else DisablePlayerControls set doOnce to 1 set cx to A1V4_RoadBagX set cy to A1V4_RoadBagY set cz to A1V4_RoadBagZ SetPos X cx SetPos Y cy SetPos Z cz setx invItem,invCount,invRef to xInventory whilex ( invCount ) xRemoveItem invItem invCount setx invItem,invCount,invRef to xInventory endwhile AddItem "A1V4_RoadBagMiscItem_1", 1 set invRef to 0 set doRemove to 1 return endif if ( doActivate == 1 ) set waitActivate to 1 set doActivate to 0 Activate return endif if ( doRemove == 10 ) set doRemove to 0 MessageBox "Предметы выложены" EnablePlayerControls return endif if ( doRemove > 5 ) set temp to 1 else set temp to 0 endif ifx ( temp ) setx pcRef to xGetRef "player" whilex ( pcRef ) setx invItem,invCount,invRefType,tempLong,invWeight,tempLong,invNextRef to pcRef->xContentList invRef ifx ( invItem ) set temp to 1 ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_raw_Stalhrim_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_raw_glass_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_raw_glass_tinos" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_raw_ebony_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_adamantium_ore_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_ruby_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_emerald_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_emerald_pinetear" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_pearl_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_diamond_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "deepnight_travelFood" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_bread_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "food_kwama_egg_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "food_kwama_egg_02" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_ash_yam_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_scrib_jerky_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_crab_meat_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_hound_meat_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_human_meat_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_rat_meat_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_scuttle_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "ingred_saltrice_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "deepnight_campement01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "Balors_portable_Bedroll" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "misc_de_muck_shovel_01" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "full_waterskin" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "halffull_waterskin" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "nearlyfull_waterskin" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "nearlyempty_waterskin" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "empty_waterskin" if ( tempLong == 0 ) set temp to 0 endif endif ifx ( temp ) setx tempLong to xStringCompare invItem, "index_" if ( tempLong > 0 ) set tempLong to 1 else set tempLong to 0 endif ifx ( tempLong ) setx tempLong to xStringCompare invItem, "index_z" if ( tempLong < 0 ) set temp to 0 endif endif endif ifx ( temp ) else pcRef->xRemoveItem invItem invCount xAddItem invItem invCount set invRef to 0 set pcRef to 0 set doRemove to 1 endif endif if ( doRemove > 1 ) set invRef to invNextRef endif if ( invNextRef == 0 ) set pcRef to 0 set doRemove to 10 endif endwhile return endif if ( doRemove > 0 ) set doRemove to ( doRemove + 1 ) return endif if ( OnActivate == 1 ) set doActivate to 1 return endif End Т.е. идея в целом проста - во второй скрипт можно прописать ID всех предметов, которые тебя интересуют. Но можно ли как-то второй скрипт отредактировать как-то так:Выложить все предметы из инвентаря, которые не экипированы на персонаже? p.s. Или можно даже ещё проще - вообще выложить тупо весь инвентарь. Потому что потом взять из контейнера нужное и экипировать на персонажа не проблема.Ну я делал скрипт, чтоб гг тонул если в инвентаре бедлам предметов. Но там начало игры, и все предметы проинвентаризованы, большая проверка айдишников. Скинуть скрипт? Ссылка на комментарий Поделиться на другие сайты Поделиться
-=ChieF=- Опубликовано 28 июня, 2020 Жалоба Поделиться Опубликовано 28 июня, 2020 (изменено) Ну я делал скрипт, чтоб гг тонул если в инвентаре бедлам предметов. Но там начало игры, и все предметы проинвентаризованы, большая проверка айдишников. Скинуть скрипт?Спасибо, но мой вопрос был связан не со скриптом, который делал бы так, чтобы ГГ тонул (я планирую пользоваться вот этим), а со скриптом, который выкладывает из инвентаря некоторые предметы в контейнер. Т.е. сейчас в скрипте "для выкладывания" жёстко прописаны ID предметов, которые нужно искать в инвентаре ГГ.Я спрашивал, можно ли изменить этот скрипт так, чтобы не пришлось вписывать туда все ID предметов из игры, а заменить этот перечень какой-нибудь универсальной строчкой типа "выложить всё, кроме экипированного" или вообще "перенести всё из инвентаря" в этот контейнер. Переписывать все ID долго и нудно, и при этом, кстати, нужно будет ещё отдельно как-то учесть самодельные зелья и зачарованное лично игроком оружие и броню, потому что у них отдельные уникальные ID. Изменено 28 июня, 2020 пользователем -=ChieF=- Ссылка на комментарий Поделиться на другие сайты Поделиться
morrow Опубликовано 28 июня, 2020 Жалоба Поделиться Опубликовано 28 июня, 2020 (изменено) Спасибо, но мой вопрос был связан не со скриптом, который делал бы так, чтобы ГГ тонул (я планирую пользоваться вот этим), а со скриптом, который выкладывает из инвентаря некоторые предметы в контейнер. Т.е. сейчас в скрипте "для выкладывания" жёстко прописаны ID предметов, которые нужно искать в инвентаре ГГ.Я спрашивал, можно ли изменить этот скрипт так, чтобы не пришлось вписывать туда все ID предметов из игры, а заменить этот перечень какой-нибудь универсальной строчкой типа "выложить всё, кроме экипированного" или вообще "перенести всё из инвентаря" в этот контейнер. Переписывать все ID долго и нудно, и при этом стати, нужно будет ещё отдельно как-то учесть самодельные зелья и зачарованное лично игроком оружие и броню, потому что у них отдельные уникальные ID.С оригинальным скриптовым набором не получится никак, только костыли с перечислением всех ID.Может быть есть в MWSE, надо призвать в чят Mintmike. Заклинание призыва мятного миши Изменено 28 июня, 2020 пользователем morrow Ссылка на комментарий Поделиться на другие сайты Поделиться
SlowPoke Опубликовано 28 июня, 2020 Жалоба Поделиться Опубликовано 28 июня, 2020 Но есть ли способ отредактировать второй скрипт так, чтобы он работал по логике "Выложить все предметы из инвентаря, которые не экипированы на персонаже"? p.s. Или можно даже ещё проще - вообще тупо перенести весь инвентарь в контейнер. Потому что потом взять из контейнера нужное и экипировать на персонажа, в принципе, не проблема. С MWSE это реализуемо в несколько строчек кода. Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 28 июня, 2020 Жалоба Поделиться Опубликовано 28 июня, 2020 (изменено) Т.е. идея в целом проста - во второй скрипт можно прописать ID всех предметов, которые тебя интересуют.По-моему, в этом скрипте прописаны айди тех предметов, которые автоматом не перекидываются в мешок. С MWSE это реализуемо, как отметили выше, без MWSE, в принципе, невозможно. Вернее, потенциально, можно написать десятки скриптов, которые учтут все ванильные вещи, но это то еще извращение. И, например, самопальные зелья, самопальное зачарование скрипты видеть не смогут. Изменено 28 июня, 2020 пользователем Муурн Шепард Ссылка на комментарий Поделиться на другие сайты Поделиться
-=ChieF=- Опубликовано 29 июня, 2020 Жалоба Поделиться Опубликовано 29 июня, 2020 (изменено) С MWSE это реализуемо в несколько строчек кода. Есть возможность подсказать, на какую функцию MWSE смотреть? :/Вот сюды?Насколько я понимаю, скрипты MWSE можно сохранять прямо в стандартный раздел TES CS "Редактировать скрипты"?Т.е. оставить скрипт на контейнере неизменным, а отредактировать только тот скрипт, который отвечает за предметы, которые должны оказаться в этом контейнере? Изменено 29 июня, 2020 пользователем -=ChieF=- Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти