Fable Опубликовано 13 марта, 2009 Опубликовано 13 марта, 2009 Недавно для себя вот, сделал несложный скрипт. Решил поделиться. Скрипт повесил на обычный ящик. Но можно на что угодно. Здесь все просто, ГГ отдает за 10 любых болтов по 500 золотых. Причем, болты бесконечны, ибо даются скриптом. Не удивляйтесь что болты дорогие, они просто довольно мощные и зачарованные. Впрочем, для себя вы можете назначить другую сумму. RANDOM - Здесь вы указываете ID болтов. Соответственно, отдельно для каждого вида. Свои ID я вписывать не стал, ибо тут уже у каждого может быть по своему. Цитатаbegin 11aafbsilverbolt short state short button if ( onactivate == 1 ) if ( state == 0 ) messagebox "500 септимов за 10 болтов. Какие болты вам нужны? " "Огонь" "Лед" "Молния" "Яд" "Ничего" ; весь messagebox в одной строке set state to 1 endif endif if ( state == 1 ) set button to getbuttonpressed if ( button == -1 ) return elseif ( button == 0 ) if ( player-> getitemcount "Gold_001" <= 499 ) messagebox "Вам не хватает денег" set state to 0 return else player-> removeitem "Gold_001", 500 player-> additem "RANDOM", 10 set state to 0 endif elseif ( button == 1 ) if ( player-> getitemcount "Gold_001" <= 499 ) messagebox "Вам не хватает денег" set state to 0 return else player-> removeitem "Gold_001", 500 player-> additem "RANDOM", 10 set state to 0 endif elseif ( button == 2 ) if ( player-> getitemcount "Gold_001" <= 499 ) messagebox "Вам не хватает денег" set state to 0 return else player-> removeitem "Gold_001", 500 player-> additem "RANDOM", 10 set state to 0 endif elseif ( button == 3 ) if ( player-> getitemcount "Gold_001" <= 499 ) messagebox "Вам не хватает денег" set state to 0 return else player-> removeitem "Gold_001", 500 player-> additem "RANDOM", 10 set state to 0 endif elseif ( button == 4 ) set state to 0 return endif endif end PS Да... и вовсе необязательно продавать болты за золото. И вовсе не обязательно продавать только болты. Тут может быть что угодно. Например, вместо золота можно указать ID бриллиантов (ingred_diamond_01), которые уже можно обменять на что-то другое. 1
Siegrun Опубликовано 5 октября, 2009 Опубликовано 5 октября, 2009 блин... ну вот скажите чего оно не срабатывает. Задолбал етот диалог. мне всего то надо получить индекс журнала через 12 дней после предыдущего. Я уже и так и сяк и что то не выходит))))))))))) кажется, у мня тупизм в каком то месте но в каком? Элегантная полностью рабочая версия от TJ begin My_Script short once Short FirstDay Short currentDay short delay; эту локальную переменную мы используем в диалоге с НПС if ( once == 0 ) if ( getjournalindex "Моя_запись" >= 10 ); запись когда НПС первый раз назначил встречу set FirstDay to DaysPassed set once to 1 endif elseif ( once == 1 ) set currentDay to ( DaysPassed - FirstDay ) if ( currentDay >= 2 ) set once to 2 set delay to 1; установим на 1, в диалоге чтобы можно было проверить, что первый срок прошел endif elseif ( once == 2 ) if ( getjournalindex "Моя_запись" >= 20 ); запись когда НПС второй раз назначил встречу set FirstDay to DaysPassed; снова начинаем отсчет дней set once to 3 endif elseif ( once == 3 ) set currentDay to ( DaysPassed - FirstDay ) if ( currentDay >= 2 ) set once to 4 set delay to 2; установим на 2, чтобы в диалоге проверить, что прошел второй срок endif endif endНЕ ЗАБЫВАЕМ УКАЗЫВАТЬ АВТОРА при использовании (ну чтобы другие знали кого спрашивать...хихи)!!! Да я тоже тебя люблю (пока его тут нет). © Монгол Я трудный человек, но если вы рядом со мной, то и вы не простые люди.
Asirion Опубликовано 27 октября, 2009 Опубликовано 27 октября, 2009 Достаточно простой, но полезный скрипт. Во многих играх открывание/закрывание контейнеров (ящиков, бочек, сундуков и пр.) сопровождается тематическими звуками. Однако в Морровинде подобное предусмотрено только для дверей, оставляя контейнеры беззвучными. Но это можно исправить (как это было сделано в моем плагине для новых обьектов), если добавить в игру нужные звуки и присвоить обьектам типа контейнер скрипт подобного вида: Begin CrateSound ;название скрипта Short Cl ;произвольная переменная, которой мы позже будем оперировать If ( OnActivate == 1 ) ;здесь мы рассматриваем момент активации обьекта (контейнера) If ( GetLocked == 1 ) ;если он заперт... PlaySound3D "CrateLk" ;то мы услышим вот этот вот звук Else ( GetLocked == 0 ) ;если он не заперт... PlaySound3D "CrateOp" ;то услышим вот этот звук Activate ;и откроем контейнер Set Cl to 1 ;а наша переменная примет новое значение 1 Return ;после чего скрипт прерывается EndIf EndIf If ( MenuMode == 0 ) ;если мы не находимся в меню контейнера... If ( Cl == 1 ) ;после его открытия (ибо переменная стала равной 1 в момент активации), что равноценно его закрытию PlaySound3D "CrateCl" ;услышим вот этот вот звук Set ASNRvCl to 0 ;после чего переменная вновь обнулится и скрипт будет готов к повтороному использованию при следующем обращении к обьекту EndIf EndIf End Таким образом можно создать целый плагин, который исправит недочет Бетезды и добавит чуточку разнообразия в игровой мир:) От многой мудрости много скорби, и приумножающий знание умножает печаль...Don't let me fall. Just hold me tight. And tell me it will be alright. Tomorrow when I wake up... You'll be there...
Fable Опубликовано 19 июня, 2011 Опубликовано 19 июня, 2011 Кто играл в Heroes of Might and Magic 3, наверняка помнит юнитов эфритов и их огненные барьеры, которые бьют врага огнем в ответ. Вроде как все работает. Спойлерbegin ХХХ ; название вашего скрипта short once short onPCHitme float timer if ( menumode == 1 ) return endif if ( once == 0 ) if ( onPCHitme == 1 ) addspell, 111, 222 ; эффект огненного барьера, вешается на существо (огненный атронах, например) где 111 это ID заклинания - огненный щит - характеристика, и далее 222 нужное вам существо. removespell, 111, 222 set once to 1 endif endif if ( once == 1 ) if ( onPCHitme == 1 ) addspell, "333", player ; урон от барьера, создайте заклинание - характеристика, урон огнем set timer to timer + GetSecondsPassed if timer > 1 ; время можете указать другое, я поставил 1 секунду, просто чем больше времени, тем дольше идет урон от огня. Player -> RemoveSpell, "333" endif endif endif end Единственный минус: shortonpchitme -- работает только на игрока. Цитата AddSpell, "SpellID"MSDF гласит только про один параметр. Получается, что "222"->addspell "111". Спойлерif ( once == 1 ) if ( onPCHitme == 1 ) addspell, "333", player ; урон от барьера, создайте заклинание - характеристика, урон огнем set timer to timer + GetSecondsPassed if timer > 1 ; время можете указать другое, я поставил 1 секунду, просто чем больше времени, тем дольше идет урон от огня. Player -> RemoveSpell, "333" ;Последний штрих, чтобы не постоянно добавлять/удалять спел set onPCHitMe to 0 endif endif endif end Бесцеремонное вмешательствоВерхний блок, впрочем, для красоты 1
Myyrn Опубликовано 14 июля, 2011 Опубликовано 14 июля, 2011 Скрипт на постепенное исчезновение. Так, например, можно превратить непися в призрака, который потом исчезнет. Создаем 10 заклинаний(или сколько стадий вы оставите в скрипте). Если брать айди из скрипта, то: 'Списко айди'[list="1"] [*]sch10 [*]sch20 [*]sch30 [*]sch40 [*]sch50 [*]sch60 [*]sch70 [*]sch80 [*]sch90 [*]sch100 [/list] Эффект хамелеон 10 в 10 'Скрипт'Begin stageschameleon ;скрипт только на npc/creature ;написан Myyrnом float timer short doonce if ( MenuMode == 1 ) return endif if ( onactivate == 1 );старт исчезновения, можно добавить любое условие set doonce to 1 endif if ( doonce == 0 ) return endif set timer to ( timer + getsecondspassed ) if ( timer >= 2 ) if ( timer <= 3 ) addspell sch10 elseif ( timer <= 4 ) addspell sch20 elseif ( timer <= 5 ) addspell sch30 elseif ( timer <= 6 ) addspell sch40 elseif ( timer <= 7.5 ) addspell sch50 elseif ( timer <= 8 ) addspell sch60 elseif ( timer <= 12 ) addspell sch70 elseif ( timer <= 13 ) addspell sch80 elseif ( timer <= 14 ) addspell sch90 elseif ( timer <= 15 ) addspell sch100;эффекты не удаляются, потому что заметно, непись перестал просвечивать и снова начал, некрасиво выглядит endif endif if ( getchameleon >= 100 ) if ( getdisabled == 0 ) disable set timer to 0 return endif if ( timer > 5 ) setdelete 1;удаляем, чтобы не занимал память endif endif end stageschameleon При вылетах, попробуйте удалить блок с timer > 5. P.S. Смысл похож на изложенный здесь. Но у меня непись исчезает постепенно, а в другой теме после диалога исчезает, а через 5 секунд сразу удаляется actor.
Mortuus Опубликовано 17 ноября, 2011 Опубликовано 17 ноября, 2011 Я очень намаился с этим скриптом и решил выложить его для того, чтобы другие люди сэкономили время и нервы. Оптимизация скриптов приветствуется. 1 скрипт, засекает время включения меню. begin mort_sc1 if ( MenuMode == 1 ) Set mort_timer to GameHour StopScript mort_sc1 StartScript mort_sc3 endif end 2 скрипт, исключает ошибочное повышение переменной когда ГГ спит, либо путешествует begin mort_sc2 if (GetPCTraveling == 1) set mort_traning to mort_traning - 1 StopScript mort_sc2 endif if (GetPCSleep == 1) set mort_traning to mort_traning - 1 StopScript mort_sc2 endif end 3 скрипт, делает проверку времени после выключения меню, при повышении переменной выдаётся сообщение, сделано для проверки работоспособности скрипта begin mort_sc3 short varMenu if ( MenuMode == 1 ) if ( varMenu == 1 ) return else set varMenu to 1 endif else if ( varMenu == 0 ) return else if ( mort_timer < GameHour ) set mort_traning to mort_traning+1 MessageBox "Вы обучались %.0g раз ", mort_traning set varMenu to 0 StartScript mort_sc1 StartScript mort_sc2 StopScript mort_sc3 else MessageBox "Вы вышли из меню" set varMenu to 0 StartScript mort_sc1 StartScript mort_sc2 StopScript mort_sc3 endif endif endif mort_traning - глобальная short переменная отслеживающая количество обучений mort_timer глобальная переменная фиксирующая время включения меню если есть предложения по отимизации скрипта, выкладывайте.Только сначала проверьте его работоспособнось если вам пригодился скрипт, жду + если есть желания поработать над геймплейными изменениями игры, пишите в личку спасибо за советы Муурн Шепарду, хоть он и не верил в успех =) http://fullrest.ru/forum/user/13795-muurn-shepard/ спасибо за идеи Invire 2 ...Если бы боги существовали, как бы вынес я, что я не бог?- Фридрих Ницше
Mortuus Опубликовано 3 января, 2013 Опубликовано 3 января, 2013 (изменено) Выложу скрипт. Фактически в MFSD тематика водных процедур слабовато отражена, да и в КС вы найдете в основном только тестовые скрипты с этой функцией. Скрипт выдает сообщение когда в воде у главного герой начинает терять кислород.Немного не правильно выразился, показывается глубина погружения героя. Применения и развитие у скрипта много, фантазируйте. begin Mort_Wd_sc float myZ float waterZ if (menumode==1) return endif set myZ to ( player->GetPos Z ) set waterZ to (GetWaterLevel - myZ) if (waterZ >= 133 ) ; данная цифра - глубина погружения когда начинается уменьшение кислорода взята для ;единичного роста, рост каждой расы и каждого пола можно найти в кс MessageBox "Глубина погружения %.2f", current ; показывает глубину в условных игровых единицах endif end Изменено 4 января, 2013 пользователем Mortuus 2 ...Если бы боги существовали, как бы вынес я, что я не бог?- Фридрих Ницше
Mortuus Опубликовано 12 октября, 2013 Опубликовано 12 октября, 2013 (изменено) Простыми способами невозможно определить знак под которым родился гг(т.е. есть несколько знаков которые вполне можно определить - вор, воин, атронах, пожалуй что всё) Есть более изощренный способ определения. 1 Что делаем создаём 13 заклинаний ( точнее характеристик) с редкими эффектам, которые нам не встречаются в бонусах рас. 2 заменяем этими характеристиками существующие бонусы знаков. Создаём глобальную переменную ( у меня mort global_variable ) тип short, начальное значение 0. 3 Делаем скрипт на проверку эффектов (тех самых 13 эффектов которые мы выбрали) Пример: Спойлерbegin Mort_constellation StopScript Mort_constellation If ( Player->GetEffect sEffectDispel) player->AddSpell "beggar's nose spell" player->AddSpell "tower key" player->RemoveEffects, 57 set mort global_variable to 1 elseIf ( Player -> GetEffect sEffectFeather ) player->AddSpell "charioteer ability" player->RemoveEffects, 8 set mort global_variable to 2 elseIf ( Player -> GetEffect sEffectLight) player->AddSpell "blessed touch" player->AddSpell "blessed word" player->AddSpell "mara's gift" player->RemoveEffects, 41 set mort global_variable to 3 elseIf ( Player -> GetEffect sEffectWeaknessToMagicka ) player->AddSpell "elfborn ability" player->RemoveEffects, 31 set mort global_variable to 4 elseIf ( Player -> GetEffect sEffectRestoreSpellPoints ) player->AddSpell "fay ability" player->RemoveEffects, 76 set mort global_variable to 5 elseIf ( Player -> GetEffect sEffectOpen ) player->AddSpell "akaviri danger-sense" player->RemoveEffects, 13 set mort global_variable to 6 elseIf ( Player->GetEffect sEffectCharm) player->AddSpell "lady's favor" player->AddSpell "lady's grace" player->RemoveEffects, 44 set mort global_variable to 7 elseIf ( Player -> GetEffect sEffectResistParalysis ) player->AddSpell "mooncalf ability" player->AddSpell "lover's kiss" player->RemoveEffects, 99 set mort global_variable to 8 elseIf ( Player -> GetEffect sEffectChameleon ) player->AddSpell "moonshadow" player->RemoveEffects, 40 set mort global_variable to 9 elseIf ( Player -> GetEffect sEffectSoultrap ) player->AddSpell "star-curse" player->RemoveEffects, 58 set mort global_variable to 10 elseIf ( Player -> GetEffect sEffectFortifyHealth ) player->AddSpell "blood of the north" player->AddSpell "trollkin ability" player->RemoveEffects, 80 set mort global_variable to 11 elseIf ( Player ->GetEffect sEffectFortifyAttackBonus) player->AddSpell "warywrd ability" player->RemoveEffects, 117 set mort global_variable to 12 elseIf ( Player -> GetEffect sEffectStuntedMagicka ) player->AddSpell "wombburn" player->RemoveEffects, 136 set mort global_variable to 13 endif end Этим скриптом мы определяем какой эффект наложен на гг, из этого делаем выводы о выбранном знаке, затем удаляем ненужный нам нулевой эффект и раздаём стандартные бонусы знаков. Задаём значение глобальной переменной отвечающей за знак. И останавливаем скрипт (нам не нужно чтобы он проигрывался многократно) 4 Изменяем скрипт CharGen_ring_keley Добавляем в него StartScript Mort_constellation в самом конце Спойлер begin CharGen_ring_keley ;picking up this ring shows you magic menu short state short OnPCAdd if ( CharGenState == -1 ) return endif if ( menumode == 1 ) return endif if ( state == 30 ) return endif if ( OnPCAdd == 1 ) if ( State == 0 ) EnableMagicMenu MessageBox "У вас есть меню магии, где вы можете видеть все ваши способность, заклинания и магические предметы." "Ok" set state to 5 return endif endif if ( state == 5 ) if ( GetButtonPressed != -1 ) set state to 10 endif endif if ( state == 10 ) if ( Xbox == 0 ) MessageBox "Как и для других меню, щелкните правой кнопкой мыши, чтобы использовать это новое меню. Щелкните на заклинание, или на магический предмет, которые вы хотите сделать активными." "Ok" else MessageBox "Как и для других меню B, чтобы использовать это новое меню. Нажмите B еще раз, чтобы выйти из меню." "Ok" endif set state to 20 return endif if ( state == 20 ) if ( Xbox == 0 ) MessageBox "Нажмите ^ActionReadyMagic, чтобы приготовить вашу активную магию, а затем щелкните, чтобы использовать ее." "Ok" else MessageBox "Нажмите Y, чтобы приготовить вашу активную магию, а затем щелкните, чтобы использовать ее." "Ok" endif set state to 30 endif If ( state == 30 ) StartScript Mort_constellation set state to 40 endif end Для чего нам менять именно этот скрипт? Всё сделано для эстетики, чтобы игрок не видел что мы что-то вообще делали со знаками, именно этот скрипт открывает доступ в меню магии, но к тому моменту как это меню будет открыто игроком, все ненужные эффекты уже будут удалены, останутся ванильные бонусы и значение переменной, определяющей знак. Изменено 12 октября, 2013 пользователем Mortuus ...Если бы боги существовали, как бы вынес я, что я не бог?- Фридрих Ницше
tymmi Опубликовано 31 мая, 2017 Опубликовано 31 мая, 2017 Люди, скиньте пожалуйста готовый, стартовый скрипт, на мору! Просто нужно проверить, то что создалось. Огромное спасибо!
Haxop Опубликовано 9 июня, 2017 Опубликовано 9 июня, 2017 Привет всем. Можно ли создать скрипт, не указывая Ref персонажей, чтобы привести его в действие? К примеру: я хочу убрать баг, когда у неписей можно бесконечно поглощать магию и запас сил, когда они уже обнулились.
DoctorChort Опубликовано 18 января, 2025 Опубликовано 18 января, 2025 (изменено) Приветы. Тут очень тихо, но может: помогут мастеру-кулибину в простом деле? В скриптах Морровинда - не шарю. Мне надо всего-лишь: отнять у игрока спелл регена маны - ес ли: "он атронах" - когда он берёт "справку об освобождении" (CharGen Statssheet). Не против насмешек - ес ли помогаете. Я решил сделать это на основе скрипта CharGenStatssheet: begin CharGenStatsSheet ;Global. excess? ;for picking up the stats sheet, shows inventory short state short OnPCAdd ;auto set by code when object is picked up, see help file float timer if ( menumode == 1 ) return endif if ( state == 20 ) return endif if ( state == 0 ) if ( OnActivate == 1) Activate EnableInventoryMenu endif ;if ( Player->GetItemCount "CharGen Statssheet" > 0 ) if ( OnPCAdd == 1 ) MessageBox "У вас есть меню Снаряжения: здесь вы можете видеть все, что несете с собой. Вы можете перемещать объекты из окружающего мира в меню снаряжения щелчком мыши." enableplayerfighting enableplayermagic set state to 10 return endif endif end ======================== Сделал это (не срабатывает): begin Atronah_noregenmana ;Global. excess? ;for picking up the stats sheet, shows inventory short state short OnPCAdd ;auto set by code when object is picked up, see help file float timer if ( menumode == 1 ) return endif if ( state == 20 ) return endif if ( state == 0 ) if ( OnActivate == 1) Activate EnableInventoryMenu endif ;if ( Player->GetItemCount "CharGen Statssheet" > 0 ) if ( OnPCAdd == 1 ) ;if ( PC_noAtronah == 0 ) Player->removespell regenmana01 Player->removespell regenmana1 set state to 10 return endif endif end =================================== Переставлял строки по разному и через & пробовал. Не хотелось бы учить мануалы по скриптам - только из-за этого. Я вообще не модмейкер, не занимаюсь этим, это скорей исключение для этой игры. *Зависимость скорости восстановления маны от интеллекта - я ставить не хочу: это качественный, классический принцип - но он не для Морровинда. Почему: в простом Морровинде - мана восстанавливается при отдыхе - не за одно и то же время, а в зависимости от запаса маны (мало или много надо спать). А классический принцип зависимости от интеллекта - делает скорость её восстановления - не зависимым от запаса маны - то есть: не важно: 30 или 450 у тебя маны - восстановишь за примерно одинаковое время. (чтобы маг был "альтернативным воином" - чего в Морровинде не сделано специально) Когда у сильного мага - мана восстанавливается долго - это придаёт альтмеру не атронаху - магический шарм. Я поиграл таким персонажем, прокачал его быстро и убедился - что: только обычного регена маны и не хватало Морровинду, чтобы пока идёшь по пещере - восстановится. Чтобы не требовалась эта принципеальная формальность надобности отдыха - чтобы маг снова двинулся в путь. С простым восстановлением маны - потребность отдыха перестаёт быть обязательной, но остаётся востребованной - ес ли запаса маны - много, но вся потрачена, а в пути она восстановится не скоро. Изменено 23 января, 2025 пользователем DoctorChort
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти